oxygen-cli 1.40.1 → 1.40.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1742 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +2 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +5 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +9 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-mongo.js +302 -0
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +25 -25
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +1 -1
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +13 -5
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/log.txt +1614 -0
- package/package.json +139 -137
- package/reports/2025-06-08_231627/report.html +440 -0
- package/reports/2025-06-09_223615/report.html +440 -0
- package/transpiled/mongodb/etc/prepare.js +18 -0
- package/transpiled/mongodb/lib/admin.js +182 -0
- package/transpiled/mongodb/lib/beta.js +26 -0
- package/transpiled/mongodb/lib/bson.js +220 -0
- package/transpiled/mongodb/lib/bulk/common.js +1041 -0
- package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
- package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
- package/transpiled/mongodb/lib/change_stream.js +517 -0
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
- package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
- package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
- package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
- package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
- package/transpiled/mongodb/lib/cmap/commands.js +605 -0
- package/transpiled/mongodb/lib/cmap/connect.js +418 -0
- package/transpiled/mongodb/lib/cmap/connection.js +673 -0
- package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
- package/transpiled/mongodb/lib/cmap/errors.js +128 -0
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
- package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
- package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
- package/transpiled/mongodb/lib/collection.js +852 -0
- package/transpiled/mongodb/lib/connection_string.js +1452 -0
- package/transpiled/mongodb/lib/constants.js +162 -0
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
- package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
- package/transpiled/mongodb/lib/db.js +467 -0
- package/transpiled/mongodb/lib/deps.js +174 -0
- package/transpiled/mongodb/lib/encrypter.js +129 -0
- package/transpiled/mongodb/lib/error.js +1550 -0
- package/transpiled/mongodb/lib/explain.js +122 -0
- package/transpiled/mongodb/lib/gridfs/download.js +369 -0
- package/transpiled/mongodb/lib/gridfs/index.js +240 -0
- package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
- package/transpiled/mongodb/lib/index.js +975 -0
- package/transpiled/mongodb/lib/mongo_client.js +626 -0
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
- package/transpiled/mongodb/lib/mongo_logger.js +812 -0
- package/transpiled/mongodb/lib/mongo_types.js +71 -0
- package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
- package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
- package/transpiled/mongodb/lib/operations/collections.js +49 -0
- package/transpiled/mongodb/lib/operations/command.js +102 -0
- package/transpiled/mongodb/lib/operations/count.js +60 -0
- package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
- package/transpiled/mongodb/lib/operations/delete.js +134 -0
- package/transpiled/mongodb/lib/operations/distinct.js +77 -0
- package/transpiled/mongodb/lib/operations/drop.js +102 -0
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
- package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
- package/transpiled/mongodb/lib/operations/find.js +197 -0
- package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
- package/transpiled/mongodb/lib/operations/get_more.js +84 -0
- package/transpiled/mongodb/lib/operations/indexes.js +197 -0
- package/transpiled/mongodb/lib/operations/insert.js +138 -0
- package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
- package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
- package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
- package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
- package/transpiled/mongodb/lib/operations/operation.js +88 -0
- package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
- package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
- package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
- package/transpiled/mongodb/lib/operations/rename.js +48 -0
- package/transpiled/mongodb/lib/operations/run_command.js +64 -0
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
- package/transpiled/mongodb/lib/operations/stats.js +39 -0
- package/transpiled/mongodb/lib/operations/update.js +218 -0
- package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
- package/transpiled/mongodb/lib/read_concern.js +92 -0
- package/transpiled/mongodb/lib/read_preference.js +215 -0
- package/transpiled/mongodb/lib/resource_management.js +74 -0
- package/transpiled/mongodb/lib/sdam/common.js +53 -0
- package/transpiled/mongodb/lib/sdam/events.js +177 -0
- package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
- package/transpiled/mongodb/lib/sdam/server.js +463 -0
- package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
- package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
- package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
- package/transpiled/mongodb/lib/sdam/topology.js +833 -0
- package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
- package/transpiled/mongodb/lib/sessions.js +988 -0
- package/transpiled/mongodb/lib/sort.js +123 -0
- package/transpiled/mongodb/lib/timeout.js +349 -0
- package/transpiled/mongodb/lib/transactions.js +149 -0
- package/transpiled/mongodb/lib/utils.js +1502 -0
- package/transpiled/mongodb/lib/write_concern.js +115 -0
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
3
|
-
*
|
|
4
|
-
* This program is free software: you can redistribute it and/or modify
|
|
5
|
-
* it under the terms of the GNU General Public License as published by
|
|
6
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
7
|
-
* (at your option) any later version.
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
3
|
+
*
|
|
4
|
+
* This program is free software: you can redistribute it and/or modify
|
|
5
|
+
* it under the terms of the GNU General Public License as published by
|
|
6
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
* (at your option) any later version.
|
|
8
8
|
*/
|
|
9
9
|
'use strict';
|
|
10
|
-
/**
|
|
11
|
-
* @name proxy
|
|
12
|
-
* @description Provides methods for intercepting network traffic via mitmproxy.
|
|
10
|
+
/**
|
|
11
|
+
* @name proxy
|
|
12
|
+
* @description Provides methods for intercepting network traffic via mitmproxy.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -50,16 +50,16 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
50
50
|
get name() {
|
|
51
51
|
return MODULE_NAME;
|
|
52
52
|
}
|
|
53
|
-
/**
|
|
54
|
-
* @function init
|
|
55
|
-
* @summary Initializes proxy.
|
|
56
|
-
* @param {Number} proxyPort - Proxy port.
|
|
57
|
-
* @param {Number=} proxyCommPort - Port for internal proxy communication. If specified, then mitmproxy should be launched manually.
|
|
58
|
-
* Otherwise mitmpoxy will be launched automatically.
|
|
59
|
-
* @param {Boolean=} saveRequestBody - Save request bodies.
|
|
60
|
-
* @param {Boolean=} saveResponseBody - Save response bodies.
|
|
61
|
-
* @example <caption>[shell] Launching mitmproxy manually</caption>
|
|
62
|
-
* mitmdump --anticache -s mitmproxy-node\scripts\proxy.py --ssl-insecure --set httpCommPort=8765
|
|
53
|
+
/**
|
|
54
|
+
* @function init
|
|
55
|
+
* @summary Initializes proxy.
|
|
56
|
+
* @param {Number} proxyPort - Proxy port.
|
|
57
|
+
* @param {Number=} proxyCommPort - Port for internal proxy communication. If specified, then mitmproxy should be launched manually.
|
|
58
|
+
* Otherwise mitmpoxy will be launched automatically.
|
|
59
|
+
* @param {Boolean=} saveRequestBody - Save request bodies.
|
|
60
|
+
* @param {Boolean=} saveResponseBody - Save response bodies.
|
|
61
|
+
* @example <caption>[shell] Launching mitmproxy manually</caption>
|
|
62
|
+
* mitmdump --anticache -s mitmproxy-node\scripts\proxy.py --ssl-insecure --set httpCommPort=8765
|
|
63
63
|
*/
|
|
64
64
|
|
|
65
65
|
|
|
@@ -72,9 +72,9 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
72
72
|
this._proxyExternalyLaunched = !!proxyCommPort;
|
|
73
73
|
return true;
|
|
74
74
|
}
|
|
75
|
-
/**
|
|
76
|
-
* @function dispose
|
|
77
|
-
* @summary Disposes this module.
|
|
75
|
+
/**
|
|
76
|
+
* @function dispose
|
|
77
|
+
* @summary Disposes this module.
|
|
78
78
|
*/
|
|
79
79
|
|
|
80
80
|
|
|
@@ -92,26 +92,26 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
92
92
|
this._networkTraffic = [];
|
|
93
93
|
super.dispose();
|
|
94
94
|
}
|
|
95
|
-
/**
|
|
96
|
-
* @summary Begin collecting network requests.
|
|
97
|
-
* @description Any previously collected requests will be discarded.
|
|
98
|
-
* @function start
|
|
99
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
100
|
-
* proxy.init(8080);
|
|
101
|
-
* proxy.start();
|
|
102
|
-
* // print the collected request so far:
|
|
103
|
-
* let requests = proxy.getRequests();
|
|
104
|
-
* for (let req of requests) {
|
|
105
|
-
* log.info(req);
|
|
106
|
-
* }
|
|
107
|
-
* // wait for a request using a verbatim URL match:
|
|
108
|
-
* proxy.waitForUrl('https://www.yourwebsite.com/foo/bar');
|
|
109
|
-
* // wait for a request using a regular expression URL match:
|
|
110
|
-
* proxy.waitForUrl(/https:\/\/.*\/foo\/bar/);
|
|
111
|
-
* // wait for a request using a custom matcher:
|
|
112
|
-
* proxy.waitFor(function (request) {
|
|
113
|
-
* return request.status === '200' && request.url === 'https://www.yourwebsite.com/foo/bar';
|
|
114
|
-
* });
|
|
95
|
+
/**
|
|
96
|
+
* @summary Begin collecting network requests.
|
|
97
|
+
* @description Any previously collected requests will be discarded.
|
|
98
|
+
* @function start
|
|
99
|
+
* @example <caption>[javascript] Usage example</caption>
|
|
100
|
+
* proxy.init(8080);
|
|
101
|
+
* proxy.start();
|
|
102
|
+
* // print the collected request so far:
|
|
103
|
+
* let requests = proxy.getRequests();
|
|
104
|
+
* for (let req of requests) {
|
|
105
|
+
* log.info(req);
|
|
106
|
+
* }
|
|
107
|
+
* // wait for a request using a verbatim URL match:
|
|
108
|
+
* proxy.waitForUrl('https://www.yourwebsite.com/foo/bar');
|
|
109
|
+
* // wait for a request using a regular expression URL match:
|
|
110
|
+
* proxy.waitForUrl(/https:\/\/.*\/foo\/bar/);
|
|
111
|
+
* // wait for a request using a custom matcher:
|
|
112
|
+
* proxy.waitFor(function (request) {
|
|
113
|
+
* return request.status === '200' && request.url === 'https://www.yourwebsite.com/foo/bar';
|
|
114
|
+
* });
|
|
115
115
|
*/
|
|
116
116
|
|
|
117
117
|
|
|
@@ -119,31 +119,31 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
119
119
|
this._collectData = true;
|
|
120
120
|
this._networkTraffic = [];
|
|
121
121
|
}
|
|
122
|
-
/**
|
|
123
|
-
* @summary Stop collecting network requests.
|
|
124
|
-
* @function stop
|
|
122
|
+
/**
|
|
123
|
+
* @summary Stop collecting network requests.
|
|
124
|
+
* @function stop
|
|
125
125
|
*/
|
|
126
126
|
|
|
127
127
|
|
|
128
128
|
stop() {
|
|
129
129
|
this._collectData = false;
|
|
130
130
|
}
|
|
131
|
-
/**
|
|
132
|
-
* @summary Return all the collected network requests so far.
|
|
133
|
-
* @function getRequests
|
|
134
|
-
* @return {Object[]} Array containing network requests.
|
|
131
|
+
/**
|
|
132
|
+
* @summary Return all the collected network requests so far.
|
|
133
|
+
* @function getRequests
|
|
134
|
+
* @return {Object[]} Array containing network requests.
|
|
135
135
|
*/
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
getRequests() {
|
|
139
139
|
return this._networkTraffic;
|
|
140
140
|
}
|
|
141
|
-
/**
|
|
142
|
-
* @summary Wait for a network request matching the specified URL.
|
|
143
|
-
* @function waitForUrl
|
|
144
|
-
* @param {String|RegExp} pattern - An URL to match verbatim or a RegExp.
|
|
145
|
-
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
146
|
-
* @return {Object} Network request details if the network request was found.
|
|
141
|
+
/**
|
|
142
|
+
* @summary Wait for a network request matching the specified URL.
|
|
143
|
+
* @function waitForUrl
|
|
144
|
+
* @param {String|RegExp} pattern - An URL to match verbatim or a RegExp.
|
|
145
|
+
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
146
|
+
* @return {Object} Network request details if the network request was found.
|
|
147
147
|
*/
|
|
148
148
|
|
|
149
149
|
|
|
@@ -174,12 +174,12 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
174
174
|
|
|
175
175
|
throw new _OxygenError.default(_helper.default.errorCode.TIMEOUT, `No request matching the URL "${pattern}" was found.`);
|
|
176
176
|
}
|
|
177
|
-
/**
|
|
178
|
-
* @summary Wait for a network request.
|
|
179
|
-
* @function waitFor
|
|
180
|
-
* @param {Function} matcher - Matching function. Should return true on match, or false otherwise.
|
|
181
|
-
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
182
|
-
* @return {Object} Network request details if the network request was found.
|
|
177
|
+
/**
|
|
178
|
+
* @summary Wait for a network request.
|
|
179
|
+
* @function waitFor
|
|
180
|
+
* @param {Function} matcher - Matching function. Should return true on match, or false otherwise.
|
|
181
|
+
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
182
|
+
* @return {Object} Network request details if the network request was found.
|
|
183
183
|
*/
|
|
184
184
|
|
|
185
185
|
|
|
@@ -210,12 +210,12 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
210
210
|
|
|
211
211
|
throw new _OxygenError.default(_helper.default.errorCode.TIMEOUT, 'No request found using the provided matcher.');
|
|
212
212
|
}
|
|
213
|
-
/**
|
|
214
|
-
* @summary Assert if network request matching the specified URL.
|
|
215
|
-
* @function assertUrl
|
|
216
|
-
* @param {String|RegExp} url - A request URL to match verbatim or a RegExp.
|
|
217
|
-
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
218
|
-
* @return {Object} Network request details if the network request was found.
|
|
213
|
+
/**
|
|
214
|
+
* @summary Assert if network request matching the specified URL.
|
|
215
|
+
* @function assertUrl
|
|
216
|
+
* @param {String|RegExp} url - A request URL to match verbatim or a RegExp.
|
|
217
|
+
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
218
|
+
* @return {Object} Network request details if the network request was found.
|
|
219
219
|
*/
|
|
220
220
|
|
|
221
221
|
|
|
@@ -246,14 +246,14 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
246
246
|
|
|
247
247
|
throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, `No request matching the URL "${url}" was found.`);
|
|
248
248
|
}
|
|
249
|
-
/**
|
|
250
|
-
* @summary Assert whether HTTP response status code matches the specified value.
|
|
251
|
-
* @function assertStatusCode
|
|
252
|
-
* @param {String|RegExp} url - A request URL to match verbatim or a RegExp.
|
|
253
|
-
* @param {Number} statusCode - A response status code to match verbatim or a RegExp.
|
|
254
|
-
* @param {String=} failureMessage - An optional failure message.
|
|
255
|
-
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
256
|
-
* @return {Object} Network request details if the network request was found.
|
|
249
|
+
/**
|
|
250
|
+
* @summary Assert whether HTTP response status code matches the specified value.
|
|
251
|
+
* @function assertStatusCode
|
|
252
|
+
* @param {String|RegExp} url - A request URL to match verbatim or a RegExp.
|
|
253
|
+
* @param {Number} statusCode - A response status code to match verbatim or a RegExp.
|
|
254
|
+
* @param {String=} failureMessage - An optional failure message.
|
|
255
|
+
* @param {Number=} timeout - Timeout. Default is 60 seconds.
|
|
256
|
+
* @return {Object} Network request details if the network request was found.
|
|
257
257
|
*/
|
|
258
258
|
|
|
259
259
|
|
|
@@ -321,4 +321,4 @@ class ProxyModule extends _OxygenModule.default {
|
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
exports.default = ProxyModule;
|
|
324
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1wcm94eS5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlByb3h5TW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX25ldHdvcmtUcmFmZmljIiwiX2NvbGxlY3REYXRhIiwiX3NhdmVSZXF1ZXN0Qm9keSIsIl9zYXZlUmVzcG9uc2VCb2R5IiwiX3Byb3h5IiwiX3Byb3h5RXh0ZXJuYWx5TGF1bmNoZWQiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJpbml0IiwicHJveHlQb3J0IiwicHJveHlDb21tUG9ydCIsInNhdmVSZXF1ZXN0Qm9keSIsInNhdmVSZXNwb25zZUJvZHkiLCJNSVRNUHJveHkiLCJDcmVhdGUiLCJfb25OZXR3b3JrSW50ZXJjZXB0IiwiYmluZCIsImRpc3Bvc2UiLCJzdGF0dXMiLCJkaXNwb3NlTWl0bSIsInNodXRkb3duIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJzdGFydCIsInN0b3AiLCJnZXRSZXF1ZXN0cyIsIndhaXRGb3JVcmwiLCJwYXR0ZXJuIiwidGltZW91dCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiRGF0ZSIsIm5vdyIsInJlcSIsInRlc3QiLCJ1cmwiLCJsaWJVdGlscyIsInNsZWVwIiwiVElNRU9VVCIsIndhaXRGb3IiLCJtYXRjaGVyIiwiX3BhcmVudCIsImFzc2VydFVybCIsIkFTU0VSVF9FUlJPUiIsImFzc2VydFN0YXR1c0NvZGUiLCJzdGF0dXNDb2RlIiwiZmFpbHVyZU1lc3NhZ2UiLCJtYXRjaGVkUmVxIiwibWVzc2FnZSIsIm1zZyIsIm9iaiIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNwb25zZSIsInN0YXR1c19jb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJoZWFkZXJzIiwicmVzcG9uc2VIZWFkZXJzIiwicmVxdWVzdEJvZHkiLCJib2R5IiwicmVzcG9uc2VCb2R5IiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsV0FBVyxHQUFHLE9BQXBCOztBQUVlLE1BQU1DLFdBQU4sU0FBMEJDLHFCQUExQixDQUF1QztBQUNsREMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FBL0IsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ3pELFVBQU1MLE9BQU4sRUFBZUMsT0FBZixFQUF3QkMsRUFBeEIsRUFBNEJDLE1BQTVCLEVBQW9DQyxPQUFwQyxFQUE2Q0MsUUFBN0M7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEVBQXZCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsS0FBekI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUtDLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUF0QjtBQUNIOztBQUVPLE1BQUpDLElBQUksR0FBRztBQUNQLFdBQU9qQixXQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDYyxRQUFKa0IsSUFBSSxDQUFDQyxTQUFELEVBQVlDLGFBQWEsR0FBRyxJQUE1QixFQUFrQ0MsZUFBZSxHQUFHLEtBQXBELEVBQTJEQyxnQkFBZ0IsR0FBRyxLQUE5RSxFQUFxRjtBQUMzRixTQUFLVixn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QjtBQUN2QnNELFFBQUFBLEdBQUcsQ0FBQ1EsV0FBSixHQUFrQlQsR0FBRyxDQUFDRSxPQUFKLENBQVlRLElBQTlCO0FBQ0g7O0FBRUQsVUFBSSxLQUFLOUQsaUJBQVQsRUFBNEI7QUFDeEJxRCxRQUFBQSxHQUFHLENBQUNVLFlBQUosR0FBbUJYLEdBQUcsQ0FBQ0ksUUFBSixDQUFhTSxJQUFoQztBQUNIOztBQUVELFdBQUtqRSxlQUFMLENBQXFCbUUsSUFBckIsQ0FBMEJYLEdBQTFCO0FBQ0g7QUFDSjs7QUF4UGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBwcm94eVxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3IgaW50ZXJjZXB0aW5nIG5ldHdvcmsgdHJhZmZpYyB2aWEgbWl0bXByb3h5LlxyXG4gKi9cclxuXHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgaGVscGVycyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IE1JVE1Qcm94eSBmcm9tICdAb3h5Z2VuaHEvbWl0bXByb3h5LW5vZGUnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAncHJveHknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJveHlNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fbmV0d29ya1RyYWZmaWMgPSBbXTtcclxuICAgICAgICB0aGlzLl9jb2xsZWN0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3NhdmVSZXF1ZXN0Qm9keSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3NhdmVSZXNwb25zZUJvZHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wcm94eSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fcHJveHlFeHRlcm5hbHlMYXVuY2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBwcm94eS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBwcm94eVBvcnQgLSBQcm94eSBwb3J0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBwcm94eUNvbW1Qb3J0IC0gUG9ydCBmb3IgaW50ZXJuYWwgcHJveHkgY29tbXVuaWNhdGlvbi4gSWYgc3BlY2lmaWVkLCB0aGVuIG1pdG1wcm94eSBzaG91bGQgYmUgbGF1bmNoZWQgbWFudWFsbHkuXHJcbiAgICAgKiBPdGhlcndpc2UgbWl0bXBveHkgd2lsbCBiZSBsYXVuY2hlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gc2F2ZVJlcXVlc3RCb2R5IC0gU2F2ZSByZXF1ZXN0IGJvZGllcy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHNhdmVSZXNwb25zZUJvZHkgLSBTYXZlIHJlc3BvbnNlIGJvZGllcy5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltzaGVsbF0gTGF1bmNoaW5nIG1pdG1wcm94eSBtYW51YWxseTwvY2FwdGlvbj5cclxuICAgICAqIG1pdG1kdW1wIC0tYW50aWNhY2hlIC1zIG1pdG1wcm94eS1ub2RlXFxzY3JpcHRzXFxwcm94eS5weSAtLXNzbC1pbnNlY3VyZSAtLXNldCBodHRwQ29tbVBvcnQ9ODc2NVxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KHByb3h5UG9ydCwgcHJveHlDb21tUG9ydCA9IG51bGwsIHNhdmVSZXF1ZXN0Qm9keSA9IGZhbHNlLCBzYXZlUmVzcG9uc2VCb2R5ID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLl9zYXZlUmVxdWVzdEJvZHkgPSBzYXZlUmVxdWVzdEJvZHk7XHJcbiAgICAgICAgdGhpcy5fc2F2ZVJlc3BvbnNlQm9keSA9IHNhdmVSZXNwb25zZUJvZHk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb3h5ID0gYXdhaXQgTUlUTVByb3h5LkNyZWF0ZSh0aGlzLl9vbk5ldHdvcmtJbnRlcmNlcHQuYmluZCh0aGlzKSwgcHJveHlQb3J0LCBwcm94eUNvbW1Qb3J0LCBbJy9ldmFsJ10sIHRydWUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3Byb3h5RXh0ZXJuYWx5TGF1bmNoZWQgPSAhIXByb3h5Q29tbVBvcnQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRGlzcG9zZXMgdGhpcyBtb2R1bGUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb3h5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwb3NlTWl0bSA9ICF0aGlzLl9wcm94eUV4dGVybmFseUxhdW5jaGVkO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJveHkuc2h1dGRvd24oZGlzcG9zZU1pdG0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGRpc3Bvc2UgdGhlIHByb3h5JywgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wcm94eSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbmV0d29ya1RyYWZmaWMgPSBbXTtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEJlZ2luIGNvbGxlY3RpbmcgbmV0d29yayByZXF1ZXN0cy5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcHJldmlvdXNseSBjb2xsZWN0ZWQgcmVxdWVzdHMgd2lsbCBiZSBkaXNjYXJkZWQuXHJcbiAgICAgKiBAZnVuY3Rpb24gc3RhcnRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogcHJveHkuaW5pdCg4MDgwKTtcclxuICAgICAqIHByb3h5LnN0YXJ0KCk7XHJcbiAgICAgKiAvLyBwcmludCB0aGUgY29sbGVjdGVkIHJlcXVlc3Qgc28gZmFyOlxyXG4gICAgICogbGV0IHJlcXVlc3RzID0gcHJveHkuZ2V0UmVxdWVzdHMoKTtcclxuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xyXG4gICAgICogICBsb2cuaW5mbyhyZXEpO1xyXG4gICAgICogfVxyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxyXG4gICAgICogcHJveHkud2FpdEZvclVybCgnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkwgbWF0Y2g6XHJcbiAgICAgKiBwcm94eS53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgY3VzdG9tIG1hdGNoZXI6XHJcbiAgICAgKiBwcm94eS53YWl0Rm9yKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1cyA9PT0gJzIwMCcgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtUcmFmZmljID0gW107XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFN0b3AgY29sbGVjdGluZyBuZXR3b3JrIHJlcXVlc3RzLlxyXG4gICAgICogQGZ1bmN0aW9uIHN0b3BcclxuICAgICAqL1xyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9jb2xsZWN0RGF0YSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm4gYWxsIHRoZSBjb2xsZWN0ZWQgbmV0d29yayByZXF1ZXN0cyBzbyBmYXIuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVxdWVzdHNcclxuICAgICAqIEByZXR1cm4ge09iamVjdFtdfSBBcnJheSBjb250YWluaW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKi9cclxuICAgIGdldFJlcXVlc3RzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9uZXR3b3JrVHJhZmZpYztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgd2FpdEZvclVybChwYXR0ZXJuLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgcHJveHlgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2Bwcm94eS5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBwcm94eWAgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50KHBhdHRlcm4sICdwYXR0ZXJuJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtUcmFmZmljKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHtwYXR0ZXJufVwiIHdhcyBmb3VuZC5gKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdhaXQgZm9yIGEgbmV0d29yayByZXF1ZXN0LlxyXG4gICAgICogQGZ1bmN0aW9uIHdhaXRGb3JcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1hdGNoZXIgLSBNYXRjaGluZyBmdW5jdGlvbi4gU2hvdWxkIHJldHVybiB0cnVlIG9uIG1hdGNoLCBvciBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB3YWl0Rm9yKG1hdGNoZXIsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5YCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgcHJveHkuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgcHJveHlgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQobWF0Y2hlciwgJ21hdGNoZXInKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcmVxIG9mIHRoaXMuX25ldHdvcmtUcmFmZmljKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihyZXEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsICdObyByZXF1ZXN0IGZvdW5kIHVzaW5nIHRoZSBwcm92aWRlZCBtYXRjaGVyLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRVcmxcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFVybCh1cmwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5YCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgcHJveHkuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgcHJveHlgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrVHJhZmZpYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHdoZXRoZXIgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdmFsdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzQ29kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSB1cmwgLSBBIHJlcXVlc3QgVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXR1c0NvZGUgLSBBIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFN0YXR1c0NvZGUodXJsLCBzdGF0dXNDb2RlLCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5YCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgcHJveHkuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgcHJveHlgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoc3RhdHVzQ29kZSwgJ3N0YXR1c0NvZGUnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrVHJhZmZpYykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWF0Y2hlZFJlcSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7dXJsfVwiIHdhcyBmb3VuZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IG1hdGNoZWRSZXEuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmYWlsdXJlTWVzc2FnZSB8fCBgVGhlIGV4cGVjdGVkIHN0YXR1cyBjb2RlIFwiJHtzdGF0dXNDb2RlfVwiIGRvZXMgbm90IG1hdGNoIFwiJHttYXRjaGVkUmVxLnN0YXR1c31cIi5gO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9vbk5ldHdvcmtJbnRlcmNlcHQobXNnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IG1zZy5yZXF1ZXN0LnVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbXNnLnJlcXVlc3QubWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBtc2cucmVzcG9uc2Uuc3RhdHVzX2NvZGUsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogbXNnLnJlcXVlc3QuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogbXNnLnJlc3BvbnNlLmhlYWRlcnNcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zYXZlUmVxdWVzdEJvZHkpIHtcclxuICAgICAgICAgICAgICAgIG9iai5yZXF1ZXN0Qm9keSA9IG1zZy5yZXF1ZXN0LmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zYXZlUmVzcG9uc2VCb2R5KSB7XHJcbiAgICAgICAgICAgICAgICBvYmoucmVzcG9uc2VCb2R5ID0gbXNnLnJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtUcmFmZmljLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdfQ==
|
|
324
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1wcm94eS5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlByb3h5TW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX25ldHdvcmtUcmFmZmljIiwiX2NvbGxlY3REYXRhIiwiX3NhdmVSZXF1ZXN0Qm9keSIsIl9zYXZlUmVzcG9uc2VCb2R5IiwiX3Byb3h5IiwiX3Byb3h5RXh0ZXJuYWx5TGF1bmNoZWQiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJpbml0IiwicHJveHlQb3J0IiwicHJveHlDb21tUG9ydCIsInNhdmVSZXF1ZXN0Qm9keSIsInNhdmVSZXNwb25zZUJvZHkiLCJNSVRNUHJveHkiLCJDcmVhdGUiLCJfb25OZXR3b3JrSW50ZXJjZXB0IiwiYmluZCIsImRpc3Bvc2UiLCJzdGF0dXMiLCJkaXNwb3NlTWl0bSIsInNodXRkb3duIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJzdGFydCIsInN0b3AiLCJnZXRSZXF1ZXN0cyIsIndhaXRGb3JVcmwiLCJwYXR0ZXJuIiwidGltZW91dCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiRGF0ZSIsIm5vdyIsInJlcSIsInRlc3QiLCJ1cmwiLCJsaWJVdGlscyIsInNsZWVwIiwiVElNRU9VVCIsIndhaXRGb3IiLCJtYXRjaGVyIiwiX3BhcmVudCIsImFzc2VydFVybCIsIkFTU0VSVF9FUlJPUiIsImFzc2VydFN0YXR1c0NvZGUiLCJzdGF0dXNDb2RlIiwiZmFpbHVyZU1lc3NhZ2UiLCJtYXRjaGVkUmVxIiwibWVzc2FnZSIsIm1zZyIsIm9iaiIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNwb25zZSIsInN0YXR1c19jb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJoZWFkZXJzIiwicmVzcG9uc2VIZWFkZXJzIiwicmVxdWVzdEJvZHkiLCJib2R5IiwicmVzcG9uc2VCb2R5IiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsV0FBVyxHQUFHLE9BQXBCOztBQUVlLE1BQU1DLFdBQU4sU0FBMEJDLHFCQUExQixDQUF1QztBQUNsREMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FBL0IsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ3pELFVBQU1MLE9BQU4sRUFBZUMsT0FBZixFQUF3QkMsRUFBeEIsRUFBNEJDLE1BQTVCLEVBQW9DQyxPQUFwQyxFQUE2Q0MsUUFBN0M7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEVBQXZCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsS0FBekI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUtDLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUF0QjtBQUNIOztBQUVPLE1BQUpDLElBQUksR0FBRztBQUNQLFdBQU9qQixXQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDYyxRQUFKa0IsSUFBSSxDQUFDQyxTQUFELEVBQVlDLGFBQWEsR0FBRyxJQUE1QixFQUFrQ0MsZUFBZSxHQUFHLEtBQXBELEVBQTJEQyxnQkFBZ0IsR0FBRyxLQUE5RSxFQUFxRjtBQUMzRixTQUFLVixn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QjtBQUN2QnNELFFBQUFBLEdBQUcsQ0FBQ1EsV0FBSixHQUFrQlQsR0FBRyxDQUFDRSxPQUFKLENBQVlRLElBQTlCO0FBQ0g7O0FBRUQsVUFBSSxLQUFLOUQsaUJBQVQsRUFBNEI7QUFDeEJxRCxRQUFBQSxHQUFHLENBQUNVLFlBQUosR0FBbUJYLEdBQUcsQ0FBQ0ksUUFBSixDQUFhTSxJQUFoQztBQUNIOztBQUVELFdBQUtqRSxlQUFMLENBQXFCbUUsSUFBckIsQ0FBMEJYLEdBQTFCO0FBQ0g7QUFDSjs7QUF4UGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG4vKipcbiAqIEBuYW1lIHByb3h5XG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3IgaW50ZXJjZXB0aW5nIG5ldHdvcmsgdHJhZmZpYyB2aWEgbWl0bXByb3h5LlxuICovXG5cbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuaW1wb3J0IGhlbHBlcnMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgTUlUTVByb3h5IGZyb20gJ0BveHlnZW5ocS9taXRtcHJveHktbm9kZSc7XG5cbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3Byb3h5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJveHlNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcbiAgICAgICAgdGhpcy5fbmV0d29ya1RyYWZmaWMgPSBbXTtcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2F2ZVJlcXVlc3RCb2R5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NhdmVSZXNwb25zZUJvZHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHJveHkgPSBudWxsO1xuICAgICAgICB0aGlzLl9wcm94eUV4dGVybmFseUxhdW5jaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGluaXRcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBwcm94eS5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcHJveHlQb3J0IC0gUHJveHkgcG9ydC5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHByb3h5Q29tbVBvcnQgLSBQb3J0IGZvciBpbnRlcm5hbCBwcm94eSBjb21tdW5pY2F0aW9uLiBJZiBzcGVjaWZpZWQsIHRoZW4gbWl0bXByb3h5IHNob3VsZCBiZSBsYXVuY2hlZCBtYW51YWxseS5cbiAgICAgKiBPdGhlcndpc2UgbWl0bXBveHkgd2lsbCBiZSBsYXVuY2hlZCBhdXRvbWF0aWNhbGx5LlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IHNhdmVSZXF1ZXN0Qm9keSAtIFNhdmUgcmVxdWVzdCBib2RpZXMuXG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gc2F2ZVJlc3BvbnNlQm9keSAtIFNhdmUgcmVzcG9uc2UgYm9kaWVzLlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltzaGVsbF0gTGF1bmNoaW5nIG1pdG1wcm94eSBtYW51YWxseTwvY2FwdGlvbj5cbiAgICAgKiBtaXRtZHVtcCAtLWFudGljYWNoZSAtcyBtaXRtcHJveHktbm9kZVxcc2NyaXB0c1xccHJveHkucHkgLS1zc2wtaW5zZWN1cmUgLS1zZXQgaHR0cENvbW1Qb3J0PTg3NjVcbiAgICAgKi9cbiAgICBhc3luYyBpbml0KHByb3h5UG9ydCwgcHJveHlDb21tUG9ydCA9IG51bGwsIHNhdmVSZXF1ZXN0Qm9keSA9IGZhbHNlLCBzYXZlUmVzcG9uc2VCb2R5ID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fc2F2ZVJlcXVlc3RCb2R5ID0gc2F2ZVJlcXVlc3RCb2R5O1xuICAgICAgICB0aGlzLl9zYXZlUmVzcG9uc2VCb2R5ID0gc2F2ZVJlc3BvbnNlQm9keTtcblxuICAgICAgICB0aGlzLl9wcm94eSA9IGF3YWl0IE1JVE1Qcm94eS5DcmVhdGUodGhpcy5fb25OZXR3b3JrSW50ZXJjZXB0LmJpbmQodGhpcyksIHByb3h5UG9ydCwgcHJveHlDb21tUG9ydCwgWycvZXZhbCddLCB0cnVlLCBmYWxzZSk7XG5cbiAgICAgICAgc3VwZXIuaW5pdCgpO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcHJveHlFeHRlcm5hbHlMYXVuY2hlZCA9ICEhcHJveHlDb21tUG9ydDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcbiAgICAgKiBAc3VtbWFyeSBEaXNwb3NlcyB0aGlzIG1vZHVsZS5cbiAgICAgKi9cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb3h5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcG9zZU1pdG0gPSAhdGhpcy5fcHJveHlFeHRlcm5hbHlMYXVuY2hlZDtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcm94eS5zaHV0ZG93bihkaXNwb3NlTWl0bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gZGlzcG9zZSB0aGUgcHJveHknLCBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Byb3h5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbmV0d29ya1RyYWZmaWMgPSBbXTtcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBCZWdpbiBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogQGRlc2NyaXB0aW9uIEFueSBwcmV2aW91c2x5IGNvbGxlY3RlZCByZXF1ZXN0cyB3aWxsIGJlIGRpc2NhcmRlZC5cbiAgICAgKiBAZnVuY3Rpb24gc3RhcnRcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cbiAgICAgKiBwcm94eS5pbml0KDgwODApO1xuICAgICAqIHByb3h5LnN0YXJ0KCk7XG4gICAgICogLy8gcHJpbnQgdGhlIGNvbGxlY3RlZCByZXF1ZXN0IHNvIGZhcjpcbiAgICAgKiBsZXQgcmVxdWVzdHMgPSBwcm94eS5nZXRSZXF1ZXN0cygpO1xuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xuICAgICAqICAgbG9nLmluZm8ocmVxKTtcbiAgICAgKiB9XG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxuICAgICAqIHByb3h5LndhaXRGb3JVcmwoJ2h0dHBzOi8vd3d3LnlvdXJ3ZWJzaXRlLmNvbS9mb28vYmFyJyk7XG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIFVSTCBtYXRjaDpcbiAgICAgKiBwcm94eS53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIGN1c3RvbSBtYXRjaGVyOlxuICAgICAqIHByb3h5LndhaXRGb3IoZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1cyA9PT0gJzIwMCcgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmV0d29ya1RyYWZmaWMgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgU3RvcCBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogQGZ1bmN0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLl9jb2xsZWN0RGF0YSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm4gYWxsIHRoZSBjb2xsZWN0ZWQgbmV0d29yayByZXF1ZXN0cyBzbyBmYXIuXG4gICAgICogQGZ1bmN0aW9uIGdldFJlcXVlc3RzXG4gICAgICogQHJldHVybiB7T2JqZWN0W119IEFycmF5IGNvbnRhaW5pbmcgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKi9cbiAgICBnZXRSZXF1ZXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ldHdvcmtUcmFmZmljO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBXYWl0IGZvciBhIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclVybFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gcGF0dGVybiAtIEFuIFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cbiAgICAgKi9cbiAgICBhc3luYyB3YWl0Rm9yVXJsKHBhdHRlcm4sIHRpbWVvdXQgPSA2MCoxMDAwKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5YCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5LnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYHByb3h5YCBjb21tYW5kcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnQocGF0dGVybiwgJ3BhdHRlcm4nKTtcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtUcmFmZmljKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgcGF0dGVybi50ZXN0KHJlcS51cmwpIHx8IHBhdHRlcm4gPT09IHJlcS51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICogQGZ1bmN0aW9uIHdhaXRGb3JcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXRjaGVyIC0gTWF0Y2hpbmcgZnVuY3Rpb24uIFNob3VsZCByZXR1cm4gdHJ1ZSBvbiBtYXRjaCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIHdhaXRGb3IobWF0Y2hlciwgdGltZW91dCA9IDYwKjEwMDApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2Bwcm94eWAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2Bwcm94eS5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBwcm94eWAgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChtYXRjaGVyLCAnbWF0Y2hlcicpO1xuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xuICAgICAgICAgICAgZm9yICh2YXIgcmVxIG9mIHRoaXMuX25ldHdvcmtUcmFmZmljKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXIocmVxKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCAnTm8gcmVxdWVzdCBmb3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgbWF0Y2hlci4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgaWYgbmV0d29yayByZXF1ZXN0IG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgVVJMLlxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRVcmxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXG4gICAgICovXG4gICAgYXN5bmMgYXNzZXJ0VXJsKHVybCwgdGltZW91dCA9IDYwKjEwMDApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2Bwcm94eWAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2Bwcm94eS5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBwcm94eWAgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrVHJhZmZpYykge1xuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7dXJsfVwiIHdhcyBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzQ29kZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzQ29kZSAtIEEgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cbiAgICAgKi9cbiAgICBhc3luYyBhc3NlcnRTdGF0dXNDb2RlKHVybCwgc3RhdHVzQ29kZSwgZmFpbHVyZU1lc3NhZ2UgPSBudWxsLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5YCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHByb3h5LnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYHByb3h5YCBjb21tYW5kcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHVybCwgJ3VybCcpO1xuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChzdGF0dXNDb2RlLCAnc3RhdHVzQ29kZScpO1xuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1RyYWZmaWMpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiBhd2FpdCBsaWJVdGlscy5zbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hlZFJlcSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IG1hdGNoZWRSZXEuc3RhdHVzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFRoZSBleHBlY3RlZCBzdGF0dXMgY29kZSBcIiR7c3RhdHVzQ29kZX1cIiBkb2VzIG5vdCBtYXRjaCBcIiR7bWF0Y2hlZFJlcS5zdGF0dXN9XCIuYDtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbk5ldHdvcmtJbnRlcmNlcHQobXNnKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSkge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICB1cmw6IG1zZy5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1zZy5yZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IG1zZy5yZXNwb25zZS5zdGF0dXNfY29kZSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogbXNnLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IG1zZy5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2F2ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgICAgICAgICAgb2JqLnJlcXVlc3RCb2R5ID0gbXNnLnJlcXVlc3QuYm9keTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NhdmVSZXNwb25zZUJvZHkpIHtcbiAgICAgICAgICAgICAgICBvYmoucmVzcG9uc2VCb2R5ID0gbXNnLnJlc3BvbnNlLmJvZHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtUcmFmZmljLnB1c2gob2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
|
|
@@ -8,18 +8,18 @@ var _util = _interopRequireDefault(require("../lib/util"));
|
|
|
8
8
|
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
10
|
|
|
11
|
-
/*
|
|
12
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
13
|
-
*
|
|
14
|
-
* This program is free software: you can redistribute it and/or modify
|
|
15
|
-
* it under the terms of the GNU General Public License as published by
|
|
16
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
17
|
-
* (at your option) any later version.
|
|
11
|
+
/*
|
|
12
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
13
|
+
*
|
|
14
|
+
* This program is free software: you can redistribute it and/or modify
|
|
15
|
+
* it under the terms of the GNU General Public License as published by
|
|
16
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
17
|
+
* (at your option) any later version.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
/**
|
|
21
|
-
* @name serial
|
|
22
|
-
* @description Provides methods for working with serial ports.
|
|
20
|
+
/**
|
|
21
|
+
* @name serial
|
|
22
|
+
* @description Provides methods for working with serial ports.
|
|
23
23
|
*/
|
|
24
24
|
var errHelper = require('../errors/helper');
|
|
25
25
|
|
|
@@ -34,39 +34,39 @@ module.exports = function () {
|
|
|
34
34
|
module.isInitialized = function () {
|
|
35
35
|
return serialPort !== undefined;
|
|
36
36
|
};
|
|
37
|
-
/**
|
|
38
|
-
* @summary Returns list of available ports.
|
|
39
|
-
* @description See https://github.com/EmergingTechnologyAdvisors/node-serialport#module_serialport--SerialPort.list
|
|
40
|
-
* for details about the structure of returned values.
|
|
41
|
-
* @function list
|
|
42
|
-
* @return {Object[]} Array of port descriptions.
|
|
37
|
+
/**
|
|
38
|
+
* @summary Returns list of available ports.
|
|
39
|
+
* @description See https://github.com/EmergingTechnologyAdvisors/node-serialport#module_serialport--SerialPort.list
|
|
40
|
+
* for details about the structure of returned values.
|
|
41
|
+
* @function list
|
|
42
|
+
* @return {Object[]} Array of port descriptions.
|
|
43
43
|
*/
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
module.list = async function () {
|
|
47
47
|
return await SerialPort.list();
|
|
48
48
|
};
|
|
49
|
-
/**
|
|
50
|
-
* @summary Opens a serial port.
|
|
51
|
-
* @description Data from the opened port will be automatically read line by line into a circular buffer.
|
|
52
|
-
* Once the buffer reaches it's maximum capacity specified by `bufferSize` argument, eldest entries are
|
|
53
|
-
* evicted to make room for new data.
|
|
54
|
-
* @function open
|
|
55
|
-
* @param {String} port - Path to serial port. E.g. '/dev/tty-usbserial1', 'COM5', etc.
|
|
56
|
-
* @param {Object} opts - Port properties.
|
|
57
|
-
* @param {Number=} bufferSize - Size of the input data buffer. Default is 65536 bytes.
|
|
58
|
-
* @return {SerialPort} SerialPort object.
|
|
59
|
-
* @example <caption>[json] Serial port properties with default values</caption>
|
|
60
|
-
* {
|
|
61
|
-
* baudRate: 9600,
|
|
62
|
-
* dataBits: 8, // Must be one of: 8, 7, 6, or 5.
|
|
63
|
-
* stopBits: 1, // Must be one of: 1 or 2.
|
|
64
|
-
* parity: 'none' // Must be one of: 'none', 'even', 'mark', 'odd', 'space'.
|
|
65
|
-
* rtscts: false,
|
|
66
|
-
* xon: false,
|
|
67
|
-
* xoff: false,
|
|
68
|
-
* xany: false
|
|
69
|
-
* }
|
|
49
|
+
/**
|
|
50
|
+
* @summary Opens a serial port.
|
|
51
|
+
* @description Data from the opened port will be automatically read line by line into a circular buffer.
|
|
52
|
+
* Once the buffer reaches it's maximum capacity specified by `bufferSize` argument, eldest entries are
|
|
53
|
+
* evicted to make room for new data.
|
|
54
|
+
* @function open
|
|
55
|
+
* @param {String} port - Path to serial port. E.g. '/dev/tty-usbserial1', 'COM5', etc.
|
|
56
|
+
* @param {Object} opts - Port properties.
|
|
57
|
+
* @param {Number=} bufferSize - Size of the input data buffer. Default is 65536 bytes.
|
|
58
|
+
* @return {SerialPort} SerialPort object.
|
|
59
|
+
* @example <caption>[json] Serial port properties with default values</caption>
|
|
60
|
+
* {
|
|
61
|
+
* baudRate: 9600,
|
|
62
|
+
* dataBits: 8, // Must be one of: 8, 7, 6, or 5.
|
|
63
|
+
* stopBits: 1, // Must be one of: 1 or 2.
|
|
64
|
+
* parity: 'none' // Must be one of: 'none', 'even', 'mark', 'odd', 'space'.
|
|
65
|
+
* rtscts: false,
|
|
66
|
+
* xon: false,
|
|
67
|
+
* xoff: false,
|
|
68
|
+
* xany: false
|
|
69
|
+
* }
|
|
70
70
|
*/
|
|
71
71
|
|
|
72
72
|
|
|
@@ -91,13 +91,13 @@ module.exports = function () {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
|
-
/**
|
|
95
|
-
* @summary Waits for text to appear in the input data buffer.
|
|
96
|
-
* @description Text pattern can be any of the supported
|
|
97
|
-
* string matching patterns(on the top of page).
|
|
98
|
-
* @function waitForText
|
|
99
|
-
* @param {String} pattern - Text pattern.
|
|
100
|
-
* @param {Number=} timeout - Timeout in milliseconds. Default is 60 seconds.
|
|
94
|
+
/**
|
|
95
|
+
* @summary Waits for text to appear in the input data buffer.
|
|
96
|
+
* @description Text pattern can be any of the supported
|
|
97
|
+
* string matching patterns(on the top of page).
|
|
98
|
+
* @function waitForText
|
|
99
|
+
* @param {String} pattern - Text pattern.
|
|
100
|
+
* @param {Number=} timeout - Timeout in milliseconds. Default is 60 seconds.
|
|
101
101
|
*/
|
|
102
102
|
|
|
103
103
|
|
|
@@ -127,12 +127,12 @@ module.exports = function () {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
};
|
|
130
|
-
/**
|
|
131
|
-
* @summary Write data to the port.
|
|
132
|
-
* @function write
|
|
133
|
-
* @param {(String|Array)} data - Data to send. Either a string or an array of bytes.
|
|
134
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
135
|
-
* serial.write('Hello\r\n');
|
|
130
|
+
/**
|
|
131
|
+
* @summary Write data to the port.
|
|
132
|
+
* @function write
|
|
133
|
+
* @param {(String|Array)} data - Data to send. Either a string or an array of bytes.
|
|
134
|
+
* @example <caption>[javascript] Usage example</caption>
|
|
135
|
+
* serial.write('Hello\r\n');
|
|
136
136
|
*/
|
|
137
137
|
|
|
138
138
|
|
|
@@ -148,10 +148,10 @@ module.exports = function () {
|
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
};
|
|
151
|
-
/**
|
|
152
|
-
* @summary Return data buffer.
|
|
153
|
-
* @function getBuffer
|
|
154
|
-
* @return {CircularStringBuffer} Data buffer.
|
|
151
|
+
/**
|
|
152
|
+
* @summary Return data buffer.
|
|
153
|
+
* @function getBuffer
|
|
154
|
+
* @return {CircularStringBuffer} Data buffer.
|
|
155
155
|
*/
|
|
156
156
|
|
|
157
157
|
|
|
@@ -184,4 +184,4 @@ module.exports = function () {
|
|
|
184
184
|
|
|
185
185
|
return module;
|
|
186
186
|
};
|
|
187
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zZXJpYWwuanMiXSwibmFtZXMiOlsiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJTZXJpYWxQb3J0IiwidXRpbHMiLCJzZXJpYWxQb3J0Iiwic3RyaW5nQnVmZmVyIiwiaXNJbml0aWFsaXplZCIsInVuZGVmaW5lZCIsImxpc3QiLCJvcGVuIiwicG9ydCIsIm9wdHMiLCJidWZmZXJTaXplIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwiZXJyIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlNFUklBTF9QT1JUX0VSUk9SIiwibWVzc2FnZSIsInBhcnNlciIsInBpcGUiLCJwYXJzZXJzIiwiUmVhZGxpbmUiLCJDaXJjdWxhclN0cmluZ0J1ZmZlciIsImRhdGEiLCJwdXNoIiwidG9TdHJpbmciLCJ3YWl0Rm9yVGV4dCIsInBhdHRlcm4iLCJ0aW1lb3V0Iiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJkb25lIiwiaSIsImxlbmd0aCIsIm1hdGNoUGF0dGVybiIsImxpYlV0aWxzIiwic2xlZXAiLCJUSU1FT1VUIiwid3JpdGUiLCJhc3NlcnRBcmd1bWVudCIsImRyYWluIiwiZ2V0QnVmZmVyIiwiZGlzcG9zZSIsImNsb3NlIiwibWF4U2l6ZSIsInNpemUiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJBcnJheSIsInN0cmluZyIsInNoaWZ0IiwiY2FsbCJdLCJtYXBwaW5ncyI6Ijs7OztBQWFBOztBQUVBOzs7O0FBZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUdBQyxNQUFNLENBQUNDLE9BQVAsR0FB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QUFDeEIsUUFBSTdDLFVBQUosRUFBZ0I7QUFDWkEsTUFBQUEsVUFBVSxDQUFDOEMsS0FBWDtBQUNIO0FBQ0osR0FKRDs7QUFNQSxXQUFTdEIsb0JBQVQsQ0FBOEJ1QixPQUE5QixFQUF1QztBQUNuQyxTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxJQUFMLEdBQVksQ0FBWjtBQUNIOztBQUVEeEIsRUFBQUEsb0JBQW9CLENBQUN5QixTQUFyQixHQUFpQ0MsTUFBTSxDQUFDQyxNQUFQLENBQWNDLEtBQUssQ0FBQ0gsU0FBcEIsQ0FBakM7O0FBRUF6QixFQUFBQSxvQkFBb0IsQ0FBQ3lCLFNBQXJCLENBQStCdkIsSUFBL0IsR0FBc0MsVUFBUzJCLE1BQVQsRUFBaUI7QUFDbkQsV0FBTyxLQUFLTCxJQUFMLEdBQVlLLE1BQU0sQ0FBQ2pCLE1BQW5CLEdBQTRCLEtBQUtXLE9BQXhDLEVBQWlEO0FBQzdDLFdBQUtDLElBQUwsSUFBYUssTUFBTSxDQUFDakIsTUFBcEI7QUFDQSxXQUFLa0IsS0FBTDtBQUNIOztBQUNERixJQUFBQSxLQUFLLENBQUNILFNBQU4sQ0FBZ0J2QixJQUFoQixDQUFxQjZCLElBQXJCLENBQTBCLElBQTFCLEVBQWdDRixNQUFoQztBQUNBLFNBQUtMLElBQUwsSUFBYUssTUFBTSxDQUFDakIsTUFBcEI7QUFDSCxHQVBEOztBQVNBLFNBQU94QyxNQUFQO0FBQ0gsQ0EzSkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzZXJpYWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBzZXJpYWwgcG9ydHMuXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG52YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5pbXBvcnQgbGliVXRpbHMgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBTZXJpYWxQb3J0ID0gcmVxdWlyZSgnc2VyaWFscG9ydCcpO1xyXG4gICAgdmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG5cclxuICAgIHZhciBzZXJpYWxQb3J0O1xyXG4gICAgdmFyIHN0cmluZ0J1ZmZlcjtcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBzZXJpYWxQb3J0ICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBsaXN0IG9mIGF2YWlsYWJsZSBwb3J0cy5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0VtZXJnaW5nVGVjaG5vbG9neUFkdmlzb3JzL25vZGUtc2VyaWFscG9ydCNtb2R1bGVfc2VyaWFscG9ydC0tU2VyaWFsUG9ydC5saXN0XHJcbiAgICAgKiAgICAgICAgICAgICAgZm9yIGRldGFpbHMgYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiByZXR1cm5lZCB2YWx1ZXMuXHJcbiAgICAgKiBAZnVuY3Rpb24gbGlzdFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0W119IEFycmF5IG9mIHBvcnQgZGVzY3JpcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUubGlzdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBTZXJpYWxQb3J0Lmxpc3QoKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBhIHNlcmlhbCBwb3J0LlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERhdGEgZnJvbSB0aGUgb3BlbmVkIHBvcnQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlYWQgbGluZSBieSBsaW5lIGludG8gYSBjaXJjdWxhciBidWZmZXIuXHJcbiAgICAgKiAgICAgICAgICAgICAgT25jZSB0aGUgYnVmZmVyIHJlYWNoZXMgaXQncyBtYXhpbXVtIGNhcGFjaXR5IHNwZWNpZmllZCBieSBgYnVmZmVyU2l6ZWAgYXJndW1lbnQsIGVsZGVzdCBlbnRyaWVzIGFyZSBcclxuICAgICAqICAgICAgICAgICAgICBldmljdGVkIHRvIG1ha2Ugcm9vbSBmb3IgbmV3IGRhdGEuXHJcbiAgICAgKiBAZnVuY3Rpb24gb3BlblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBvcnQgLSBQYXRoIHRvIHNlcmlhbCBwb3J0LiBFLmcuICcvZGV2L3R0eS11c2JzZXJpYWwxJywgJ0NPTTUnLCBldGMuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFBvcnQgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gYnVmZmVyU2l6ZSAtIFNpemUgb2YgdGhlIGlucHV0IGRhdGEgYnVmZmVyLiBEZWZhdWx0IGlzIDY1NTM2IGJ5dGVzLlxyXG4gICAgICogQHJldHVybiB7U2VyaWFsUG9ydH0gU2VyaWFsUG9ydCBvYmplY3QuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5banNvbl0gU2VyaWFsIHBvcnQgcHJvcGVydGllcyB3aXRoIGRlZmF1bHQgdmFsdWVzPC9jYXB0aW9uPlxyXG4gICAgICoge1xyXG4gICAgICogICBiYXVkUmF0ZTogOTYwMCxcclxuICAgICAqICAgZGF0YUJpdHM6IDgsICAgICAgICAvLyBNdXN0IGJlIG9uZSBvZjogOCwgNywgNiwgb3IgNS5cclxuICAgICAqICAgc3RvcEJpdHM6IDEsICAgICAgICAvLyBNdXN0IGJlIG9uZSBvZjogMSBvciAyLlxyXG4gICAgICogICBwYXJpdHk6ICdub25lJyAgICAgIC8vIE11c3QgYmUgb25lIG9mOiAnbm9uZScsICdldmVuJywgJ21hcmsnLCAnb2RkJywgJ3NwYWNlJy5cclxuICAgICAqICAgcnRzY3RzOiBmYWxzZSxcclxuICAgICAqICAgeG9uOiBmYWxzZSxcclxuICAgICAqICAgeG9mZjogZmFsc2UsXHJcbiAgICAgKiAgIHhhbnk6IGZhbHNlXHJcbiAgICAgKiB9XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5vcGVuID0gZnVuY3Rpb24ocG9ydCwgb3B0cywgYnVmZmVyU2l6ZSA9IDY1NTM2KSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwb3J0LCAncG9ydCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYnVmZmVyU2l6ZSwgJ2J1ZmZlclNpemUnKTtcclxuXHJcbiAgICAgICAgaWYgKHBvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcmlhbFBvcnQgPSBuZXcgU2VyaWFsUG9ydChwb3J0LCBvcHRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0Lm9uKCdvcGVuJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2VyaWFsUG9ydCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TRVJJQUxfUE9SVF9FUlJPUiwgZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBzZXJpYWxQb3J0LnBpcGUobmV3IFNlcmlhbFBvcnQucGFyc2Vycy5SZWFkbGluZSgpKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlciA9IG5ldyBDaXJjdWxhclN0cmluZ0J1ZmZlcihidWZmZXJTaXplKTtcclxuICAgICAgICAgICAgICAgIHBhcnNlci5vbignZGF0YScsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLnB1c2goZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdhaXRzIGZvciB0ZXh0IHRvIGFwcGVhciBpbiB0aGUgaW5wdXQgZGF0YSBidWZmZXIuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dCBwYXR0ZXJuIGNhbiBiZSBhbnkgb2YgdGhlIHN1cHBvcnRlZCBcclxuICAgICAqICBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnMob24gdGhlIHRvcCBvZiBwYWdlKS5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yVGV4dFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gLSBUZXh0IHBhdHRlcm4uXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUud2FpdEZvclRleHQgPSBhc3luYyBmdW5jdGlvbihwYXR0ZXJuLCB0aW1lb3V0ID0gNjAwMDApIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHBhdHRlcm4sICdwYXR0ZXJuJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG5cclxuICAgICAgICBpZiAoc3RyaW5nQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBub3cgPSAobmV3IERhdGUpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFkb25lICYmIChEYXRlLm5vdygpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gc3RyaW5nQnVmZmVyLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbHMubWF0Y2hQYXR0ZXJuKHN0cmluZ0J1ZmZlcltpXSwgcGF0dGVybikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg1MDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoKG5ldyBEYXRlKS5nZXRUaW1lKCkgLSBub3cgPj0gdGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VUKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZSBkYXRhIHRvIHRoZSBwb3J0LlxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlXHJcbiAgICAgKiBAcGFyYW0geyhTdHJpbmd8QXJyYXkpfSBkYXRhIC0gRGF0YSB0byBzZW5kLiBFaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgYnl0ZXMuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIHNlcmlhbC53cml0ZSgnSGVsbG9cXHJcXG4nKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50KGRhdGEsICdkYXRhJyk7XHJcblxyXG4gICAgICAgIGlmIChzZXJpYWxQb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0LndyaXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgc2VyaWFsUG9ydC5kcmFpbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm4gZGF0YSBidWZmZXIuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0QnVmZmVyXHJcbiAgICAgKiBAcmV0dXJuIHtDaXJjdWxhclN0cmluZ0J1ZmZlcn0gRGF0YSBidWZmZXIuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gc3RyaW5nQnVmZmVyO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZGlzcG9zZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXJpYWxQb3J0KSB7XHJcbiAgICAgICAgICAgIHNlcmlhbFBvcnQuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIENpcmN1bGFyU3RyaW5nQnVmZmVyKG1heFNpemUpIHtcclxuICAgICAgICB0aGlzLm1heFNpemUgPSBtYXhTaXplO1xyXG4gICAgICAgIHRoaXMuc2l6ZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgQ2lyY3VsYXJTdHJpbmdCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO1xyXG5cclxuICAgIENpcmN1bGFyU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuc2l6ZSArIHN0cmluZy5sZW5ndGggPiB0aGlzLm1heFNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaXplIC09IHN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBzdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuc2l6ZSArPSBzdHJpbmcubGVuZ3RoO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
187
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zZXJpYWwuanMiXSwibmFtZXMiOlsiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJTZXJpYWxQb3J0IiwidXRpbHMiLCJzZXJpYWxQb3J0Iiwic3RyaW5nQnVmZmVyIiwiaXNJbml0aWFsaXplZCIsInVuZGVmaW5lZCIsImxpc3QiLCJvcGVuIiwicG9ydCIsIm9wdHMiLCJidWZmZXJTaXplIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwiZXJyIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlNFUklBTF9QT1JUX0VSUk9SIiwibWVzc2FnZSIsInBhcnNlciIsInBpcGUiLCJwYXJzZXJzIiwiUmVhZGxpbmUiLCJDaXJjdWxhclN0cmluZ0J1ZmZlciIsImRhdGEiLCJwdXNoIiwidG9TdHJpbmciLCJ3YWl0Rm9yVGV4dCIsInBhdHRlcm4iLCJ0aW1lb3V0Iiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJkb25lIiwiaSIsImxlbmd0aCIsIm1hdGNoUGF0dGVybiIsImxpYlV0aWxzIiwic2xlZXAiLCJUSU1FT1VUIiwid3JpdGUiLCJhc3NlcnRBcmd1bWVudCIsImRyYWluIiwiZ2V0QnVmZmVyIiwiZGlzcG9zZSIsImNsb3NlIiwibWF4U2l6ZSIsInNpemUiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJBcnJheSIsInN0cmluZyIsInNoaWZ0IiwiY2FsbCJdLCJtYXBwaW5ncyI6Ijs7OztBQWFBOztBQUVBOzs7O0FBZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUdBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QixNQUFJQyxVQUFVLEdBQUdILE9BQU8sQ0FBQyxZQUFELENBQXhCOztBQUNBLE1BQUlJLEtBQUssR0FBR0osT0FBTyxDQUFDLFNBQUQsQ0FBbkI7O0FBRUEsTUFBSUssVUFBSjtBQUNBLE1BQUlDLFlBQUo7O0FBRUFMLEVBQUFBLE1BQU0sQ0FBQ00sYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU9GLFVBQVUsS0FBS0csU0FBdEI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJUCxFQUFBQSxNQUFNLENBQUNRLElBQVAsR0FBYyxrQkFBaUI7QUFDM0IsV0FBTyxNQUFNTixVQUFVLENBQUNNLElBQVgsRUFBYjtBQUNILEdBRkQ7QUFJQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lSLEVBQUFBLE1BQU0sQ0FBQ1MsSUFBUCxHQUFjLFVBQVNDLElBQVQsRUFBZUMsSUFBZixFQUFxQkMsVUFBVSxHQUFHLEtBQWxDLEVBQXlDO0FBQ25EVCxJQUFBQSxLQUFLLENBQUNVLDRCQUFOLENBQW1DSCxJQUFuQyxFQUF5QyxNQUF6QztBQUNBUCxJQUFBQSxLQUFLLENBQUNXLCtCQUFOLENBQXNDRixVQUF0QyxFQUFrRCxZQUFsRDs7QUFFQSxRQUFJRixJQUFKLEVBQVU7QUFDTixhQUFPLElBQUlLLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcENiLFFBQUFBLFVBQVUsR0FBRyxJQUFJRixVQUFKLENBQWVRLElBQWYsRUFBcUJDLElBQXJCLENBQWI7QUFFQVAsUUFBQUEsVUFBVSxDQUFDYyxFQUFYLENBQWMsTUFBZCxFQUFzQixNQUFNO0FBQ3hCRixVQUFBQSxPQUFPLENBQUNaLFVBQUQsQ0FBUDtBQUNILFNBRkQ7QUFJQUEsUUFBQUEsVUFBVSxDQUFDYyxFQUFYLENBQWMsT0FBZCxFQUF3QkMsR0FBRCxJQUFTO0FBQzVCRixVQUFBQSxNQUFNLENBQUMsSUFBSUcsb0JBQUosQ0FBWXRCLFNBQVMsQ0FBQ3VCLFNBQVYsQ0FBb0JDLGlCQUFoQyxFQUFtREgsR0FBRyxDQUFDSSxPQUF2RCxDQUFELENBQU47QUFDSCxTQUZEO0FBSUEsWUFBSUMsTUFBTSxHQUFHcEIsVUFBVSxDQUFDcUIsSUFBWCxDQUFnQixJQUFJdkIsVUFBVSxDQUFDd0IsT0FBWCxDQUFtQkMsUUFBdkIsRUFBaEIsQ0FBYjtBQUNBdEIsUUFBQUEsWUFBWSxHQUFHLElBQUl1QixvQkFBSixDQUF5QmhCLFVBQXpCLENBQWY7QUFDQVksUUFBQUEsTUFBTSxDQUFDTixFQUFQLENBQVUsTUFBVixFQUFtQlcsSUFBRCxJQUFVO0FBQ3hCeEIsVUFBQUEsWUFBWSxDQUFDeUIsSUFBYixDQUFrQkQsSUFBSSxDQUFDRSxRQUFMLEVBQWxCO0FBQ0gsU0FGRDtBQUdILE9BaEJNLENBQVA7QUFpQkg7QUFFSixHQXhCRDtBQTBCQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSS9CLEVBQUFBLE1BQU0sQ0FBQ2dDLFdBQVAsR0FBcUIsZ0JBQWVDLE9BQWYsRUFBd0JDLE9BQU8sR0FBRyxLQUFsQyxFQUF5QztBQUMxRC9CLElBQUFBLEtBQUssQ0FBQ1UsNEJBQU4sQ0FBbUNvQixPQUFuQyxFQUE0QyxTQUE1QztBQUNBOUIsSUFBQUEsS0FBSyxDQUFDVywrQkFBTixDQUFzQ29CLE9BQXRDLEVBQStDLFNBQS9DOztBQUVBLFFBQUk3QixZQUFKLEVBQWtCO0FBQ2QsVUFBSThCLEdBQUcsR0FBSSxJQUFJQyxJQUFKLEVBQUQsQ0FBV0MsT0FBWCxFQUFWO0FBQ0EsVUFBSUMsSUFBSSxHQUFHLEtBQVg7O0FBQ0EsYUFBTyxDQUFDQSxJQUFELElBQVVGLElBQUksQ0FBQ0QsR0FBTCxLQUFhQSxHQUFkLEdBQXFCRCxPQUFyQyxFQUE4QztBQUMxQyxZQUFJSyxDQUFKOztBQUNBLGFBQUtBLENBQUMsR0FBR2xDLFlBQVksQ0FBQ21DLE1BQXRCLEVBQThCRCxDQUFDLElBQUksQ0FBbkMsRUFBc0NBLENBQUMsRUFBdkMsRUFBMkM7QUFDdkMsY0FBSXBDLEtBQUssQ0FBQ3NDLFlBQU4sQ0FBbUJwQyxZQUFZLENBQUNrQyxDQUFELENBQS9CLEVBQW9DTixPQUFwQyxDQUFKLEVBQWtEO0FBQzlDSyxZQUFBQSxJQUFJLEdBQUcsSUFBUDtBQUNBO0FBQ0g7QUFDSjs7QUFFRCxjQUFNSSxjQUFTQyxLQUFULENBQWUsR0FBZixDQUFOO0FBQ0g7O0FBRUQsVUFBSyxJQUFJUCxJQUFKLEVBQUQsQ0FBV0MsT0FBWCxLQUF1QkYsR0FBdkIsSUFBOEJELE9BQWxDLEVBQTJDO0FBQ3ZDLGNBQU0sSUFBSWQsb0JBQUosQ0FBWXRCLFNBQVMsQ0FBQ3VCLFNBQVYsQ0FBb0J1QixPQUFoQyxDQUFOO0FBQ0g7QUFDSjtBQUNKLEdBdkJEO0FBeUJBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSTVDLEVBQUFBLE1BQU0sQ0FBQzZDLEtBQVAsR0FBZSxVQUFTaEIsSUFBVCxFQUFlO0FBQzFCMUIsSUFBQUEsS0FBSyxDQUFDMkMsY0FBTixDQUFxQmpCLElBQXJCLEVBQTJCLE1BQTNCOztBQUVBLFFBQUl6QixVQUFKLEVBQWdCO0FBQ1osYUFBTyxJQUFJVyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BDYixRQUFBQSxVQUFVLENBQUN5QyxLQUFYLENBQWlCaEIsSUFBakI7QUFDQXpCLFFBQUFBLFVBQVUsQ0FBQzJDLEtBQVgsQ0FBaUIsTUFBTTtBQUNuQi9CLFVBQUFBLE9BQU87QUFDVixTQUZEO0FBR0gsT0FMTSxDQUFQO0FBTUg7QUFDSixHQVhEO0FBYUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0loQixFQUFBQSxNQUFNLENBQUNnRCxTQUFQLEdBQW1CLFlBQVc7QUFDMUIsV0FBTzNDLFlBQVA7QUFDSCxHQUZEOztBQUlBTCxFQUFBQSxNQUFNLENBQUNpRCxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsUUFBSTdDLFVBQUosRUFBZ0I7QUFDWkEsTUFBQUEsVUFBVSxDQUFDOEMsS0FBWDtBQUNIO0FBQ0osR0FKRDs7QUFNQSxXQUFTdEIsb0JBQVQsQ0FBOEJ1QixPQUE5QixFQUF1QztBQUNuQyxTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxJQUFMLEdBQVksQ0FBWjtBQUNIOztBQUVEeEIsRUFBQUEsb0JBQW9CLENBQUN5QixTQUFyQixHQUFpQ0MsTUFBTSxDQUFDQyxNQUFQLENBQWNDLEtBQUssQ0FBQ0gsU0FBcEIsQ0FBakM7O0FBRUF6QixFQUFBQSxvQkFBb0IsQ0FBQ3lCLFNBQXJCLENBQStCdkIsSUFBL0IsR0FBc0MsVUFBUzJCLE1BQVQsRUFBaUI7QUFDbkQsV0FBTyxLQUFLTCxJQUFMLEdBQVlLLE1BQU0sQ0FBQ2pCLE1BQW5CLEdBQTRCLEtBQUtXLE9BQXhDLEVBQWlEO0FBQzdDLFdBQUtDLElBQUwsSUFBYUssTUFBTSxDQUFDakIsTUFBcEI7QUFDQSxXQUFLa0IsS0FBTDtBQUNIOztBQUNERixJQUFBQSxLQUFLLENBQUNILFNBQU4sQ0FBZ0J2QixJQUFoQixDQUFxQjZCLElBQXJCLENBQTBCLElBQTFCLEVBQWdDRixNQUFoQztBQUNBLFNBQUtMLElBQUwsSUFBYUssTUFBTSxDQUFDakIsTUFBcEI7QUFDSCxHQVBEOztBQVNBLFNBQU94QyxNQUFQO0FBQ0gsQ0EzSkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5cbi8qKlxuICogQG5hbWUgc2VyaWFsXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIHNlcmlhbCBwb3J0cy5cbiAqL1xuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XG5pbXBvcnQgbGliVXRpbHMgZnJvbSAnLi4vbGliL3V0aWwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBTZXJpYWxQb3J0ID0gcmVxdWlyZSgnc2VyaWFscG9ydCcpO1xuICAgIHZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICAgIHZhciBzZXJpYWxQb3J0O1xuICAgIHZhciBzdHJpbmdCdWZmZXI7XG5cbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2VyaWFsUG9ydCAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGxpc3Qgb2YgYXZhaWxhYmxlIHBvcnRzLlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0VtZXJnaW5nVGVjaG5vbG9neUFkdmlzb3JzL25vZGUtc2VyaWFscG9ydCNtb2R1bGVfc2VyaWFscG9ydC0tU2VyaWFsUG9ydC5saXN0XG4gICAgICogICAgICAgICAgICAgIGZvciBkZXRhaWxzIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgcmV0dXJuZWQgdmFsdWVzLlxuICAgICAqIEBmdW5jdGlvbiBsaXN0XG4gICAgICogQHJldHVybiB7T2JqZWN0W119IEFycmF5IG9mIHBvcnQgZGVzY3JpcHRpb25zLlxuICAgICAqL1xuICAgIG1vZHVsZS5saXN0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBTZXJpYWxQb3J0Lmxpc3QoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgT3BlbnMgYSBzZXJpYWwgcG9ydC5cbiAgICAgKiBAZGVzY3JpcHRpb24gRGF0YSBmcm9tIHRoZSBvcGVuZWQgcG9ydCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVhZCBsaW5lIGJ5IGxpbmUgaW50byBhIGNpcmN1bGFyIGJ1ZmZlci5cbiAgICAgKiAgICAgICAgICAgICAgT25jZSB0aGUgYnVmZmVyIHJlYWNoZXMgaXQncyBtYXhpbXVtIGNhcGFjaXR5IHNwZWNpZmllZCBieSBgYnVmZmVyU2l6ZWAgYXJndW1lbnQsIGVsZGVzdCBlbnRyaWVzIGFyZSBcbiAgICAgKiAgICAgICAgICAgICAgZXZpY3RlZCB0byBtYWtlIHJvb20gZm9yIG5ldyBkYXRhLlxuICAgICAqIEBmdW5jdGlvbiBvcGVuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBvcnQgLSBQYXRoIHRvIHNlcmlhbCBwb3J0LiBFLmcuICcvZGV2L3R0eS11c2JzZXJpYWwxJywgJ0NPTTUnLCBldGMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBQb3J0IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBidWZmZXJTaXplIC0gU2l6ZSBvZiB0aGUgaW5wdXQgZGF0YSBidWZmZXIuIERlZmF1bHQgaXMgNjU1MzYgYnl0ZXMuXG4gICAgICogQHJldHVybiB7U2VyaWFsUG9ydH0gU2VyaWFsUG9ydCBvYmplY3QuXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2pzb25dIFNlcmlhbCBwb3J0IHByb3BlcnRpZXMgd2l0aCBkZWZhdWx0IHZhbHVlczwvY2FwdGlvbj5cbiAgICAgKiB7XG4gICAgICogICBiYXVkUmF0ZTogOTYwMCxcbiAgICAgKiAgIGRhdGFCaXRzOiA4LCAgICAgICAgLy8gTXVzdCBiZSBvbmUgb2Y6IDgsIDcsIDYsIG9yIDUuXG4gICAgICogICBzdG9wQml0czogMSwgICAgICAgIC8vIE11c3QgYmUgb25lIG9mOiAxIG9yIDIuXG4gICAgICogICBwYXJpdHk6ICdub25lJyAgICAgIC8vIE11c3QgYmUgb25lIG9mOiAnbm9uZScsICdldmVuJywgJ21hcmsnLCAnb2RkJywgJ3NwYWNlJy5cbiAgICAgKiAgIHJ0c2N0czogZmFsc2UsXG4gICAgICogICB4b246IGZhbHNlLFxuICAgICAqICAgeG9mZjogZmFsc2UsXG4gICAgICogICB4YW55OiBmYWxzZVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBtb2R1bGUub3BlbiA9IGZ1bmN0aW9uKHBvcnQsIG9wdHMsIGJ1ZmZlclNpemUgPSA2NTUzNikge1xuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHBvcnQsICdwb3J0Jyk7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYnVmZmVyU2l6ZSwgJ2J1ZmZlclNpemUnKTtcblxuICAgICAgICBpZiAocG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0ID0gbmV3IFNlcmlhbFBvcnQocG9ydCwgb3B0cyk7XG5cbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0Lm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlcmlhbFBvcnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc2VyaWFsUG9ydC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNFUklBTF9QT1JUX0VSUk9SLCBlcnIubWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IHNlcmlhbFBvcnQucGlwZShuZXcgU2VyaWFsUG9ydC5wYXJzZXJzLlJlYWRsaW5lKCkpO1xuICAgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlciA9IG5ldyBDaXJjdWxhclN0cmluZ0J1ZmZlcihidWZmZXJTaXplKTtcbiAgICAgICAgICAgICAgICBwYXJzZXIub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIucHVzaChkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBXYWl0cyBmb3IgdGV4dCB0byBhcHBlYXIgaW4gdGhlIGlucHV0IGRhdGEgYnVmZmVyLlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0IHBhdHRlcm4gY2FuIGJlIGFueSBvZiB0aGUgc3VwcG9ydGVkIFxuICAgICAqICBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnMob24gdGhlIHRvcCBvZiBwYWdlKS5cbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclRleHRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIFRleHQgcGF0dGVybi5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxuICAgICAqL1xuICAgIG1vZHVsZS53YWl0Rm9yVGV4dCA9IGFzeW5jIGZ1bmN0aW9uKHBhdHRlcm4sIHRpbWVvdXQgPSA2MDAwMCkge1xuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHBhdHRlcm4sICdwYXR0ZXJuJyk7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcblxuICAgICAgICBpZiAoc3RyaW5nQnVmZmVyKSB7XG4gICAgICAgICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFkb25lICYmIChEYXRlLm5vdygpIC0gbm93KSA8IHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSBzdHJpbmdCdWZmZXIubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbHMubWF0Y2hQYXR0ZXJuKHN0cmluZ0J1ZmZlcltpXSwgcGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg1MDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKG5ldyBEYXRlKS5nZXRUaW1lKCkgLSBub3cgPj0gdGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgV3JpdGUgZGF0YSB0byB0aGUgcG9ydC5cbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVcbiAgICAgKiBAcGFyYW0geyhTdHJpbmd8QXJyYXkpfSBkYXRhIC0gRGF0YSB0byBzZW5kLiBFaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgYnl0ZXMuXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XG4gICAgICogc2VyaWFsLndyaXRlKCdIZWxsb1xcclxcbicpO1xuICAgICAqL1xuICAgIG1vZHVsZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnQoZGF0YSwgJ2RhdGEnKTtcblxuICAgICAgICBpZiAoc2VyaWFsUG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzZXJpYWxQb3J0LndyaXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIHNlcmlhbFBvcnQuZHJhaW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm4gZGF0YSBidWZmZXIuXG4gICAgICogQGZ1bmN0aW9uIGdldEJ1ZmZlclxuICAgICAqIEByZXR1cm4ge0NpcmN1bGFyU3RyaW5nQnVmZmVyfSBEYXRhIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBtb2R1bGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdCdWZmZXI7XG4gICAgfTtcblxuICAgIG1vZHVsZS5kaXNwb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZXJpYWxQb3J0KSB7XG4gICAgICAgICAgICBzZXJpYWxQb3J0LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gQ2lyY3VsYXJTdHJpbmdCdWZmZXIobWF4U2l6ZSkge1xuICAgICAgICB0aGlzLm1heFNpemUgPSBtYXhTaXplO1xuICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIENpcmN1bGFyU3RyaW5nQnVmZmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKTtcblxuICAgIENpcmN1bGFyU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnNpemUgKyBzdHJpbmcubGVuZ3RoID4gdGhpcy5tYXhTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNpemUgLT0gc3RyaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHN0cmluZyk7XG4gICAgICAgIHRoaXMuc2l6ZSArPSBzdHJpbmcubGVuZ3RoO1xuICAgIH07XG5cbiAgICByZXR1cm4gbW9kdWxlO1xufTtcbiJdfQ==
|