appium-android-driver 5.10.4 → 5.11.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 +14 -0
- package/build/lib/android-helpers.js +1 -1
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/bootstrap.js +1 -1
- package/build/lib/bootstrap.js.map +1 -1
- package/build/lib/commands/actions.js +52 -1
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +1 -1
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +1 -1
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +1 -1
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/execute.js +1 -1
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/file-actions.js +1 -1
- package/build/lib/commands/file-actions.js.map +1 -1
- package/build/lib/commands/find.js +1 -1
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +1 -1
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/ime.js +1 -1
- package/build/lib/commands/ime.js.map +1 -1
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/intent.js +1 -1
- package/build/lib/commands/intent.js.map +1 -1
- package/build/lib/commands/keyboard.js +1 -1
- package/build/lib/commands/keyboard.js.map +1 -1
- package/build/lib/commands/log.js +1 -1
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/media-projection.js +1 -1
- package/build/lib/commands/media-projection.js.map +1 -1
- package/build/lib/commands/network.js +6 -55
- package/build/lib/commands/network.js.map +1 -1
- package/build/lib/commands/performance.js +1 -1
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/permissions.js +1 -1
- package/build/lib/commands/permissions.js.map +1 -1
- package/build/lib/commands/recordscreen.js +1 -1
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/streamscreen.js +1 -1
- package/build/lib/commands/streamscreen.js.map +1 -1
- package/build/lib/commands/touch.js +1 -1
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/driver.js +1 -1
- package/build/lib/driver.js.map +1 -1
- package/build/lib/uiautomator.js +1 -1
- package/build/lib/uiautomator.js.map +1 -1
- package/build/lib/unlock-helpers.js +1 -1
- package/build/lib/unlock-helpers.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webview-helpers.js +1 -1
- package/build/lib/webview-helpers.js.map +1 -1
- package/lib/commands/actions.js +135 -0
- package/lib/commands/network.js +18 -90
- package/lib/utils.js +4 -3
- package/package.json +2 -2
package/build/lib/driver.js
CHANGED
|
@@ -406,4 +406,4 @@ class AndroidDriver extends _driver.BaseDriver {
|
|
|
406
406
|
exports.AndroidDriver = AndroidDriver;
|
|
407
407
|
var _default = AndroidDriver;
|
|
408
408
|
exports.default = _default;
|
|
409
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsIl9kZXNpcmVkQ2FwcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaW5kZXgiLCJfbWV0aG9kTWFwIiwiX2FuZHJvaWRIZWxwZXJzIiwiX2xvZGFzaCIsIl9hcHBpdW1BZGIiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9zaGFyZWRQcmVmZXJlbmNlc0J1aWxkZXIiLCJfYmx1ZWJpcmQiLCJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwibmV3TWV0aG9kTWFwIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJfdGhpcyRhZGI1IiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJfdGhpcyRhZGIzIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwiX3RoaXMkYWRiIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiX3RoaXMkYWRiMiIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwiX3RoaXMkYWRiNCIsInNodXRkb3duIiwic3RvcExvZ2NhdCIsIl90aGlzJGFkYjYiLCJfdGhpcyRhZGI3IiwiX3RoaXMkYWRiOCIsIl90aGlzJGFkYjkiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiX3RoaXMkYWRiMTAiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic2hhcmVkUHJlZnMiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlbW90ZVBhdGgiLCJyZW1vdGVGaWxlIiwibG9jYWxQYXRoIiwiYnVpbGRlciIsImdldFByZWZzQnVpbGRlciIsImJ1aWxkIiwicHJlZnMiLCJ0b0ZpbGUiLCJ1bmxpbmsiLCJTaGFyZWRQcmVmc0J1aWxkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJpc0Z1bmN0aW9uIiwicHJveHlSZXFSZXMiLCJleHBvcnRzIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBuZXdNZXRob2RNYXAgfSBmcm9tICcuL21ldGhvZC1tYXAnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcblxuICBzdGF0aWMgbmV3TWV0aG9kTWFwID0gbmV3TWV0aG9kTWFwO1xuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJy1hbmRyb2lkIHVpYXV0b21hdG9yJ1xuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ29uc3RyYWludHM7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmNsb25lKE5PX1BST1hZKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9O1xuICAgIHRoaXMudW5sb2NrZXIgPSBoZWxwZXJzLnVubG9ja2VyO1xuXG4gICAgZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEFuZHJvaWREcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgICB9XG5cbiAgICAvLyBuZWVkcyB0byBiZSBhZnRlciB0aGUgbGluZSB3aGljaCBhc3NpZ25zIGNvbW1hbmRzIHRvIEFuZHJvaWREcml2ZXIucHJvdG90eXBlLCBzbyB0aGF0IGB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZWAgaXMgZGVmaW5lZC5cbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIC8vIHRoZSB3aG9sZSBjcmVhdGVTZXNzaW9uIGZsb3cgaXMgc3Vycm91bmRlZCBpbiBhIHRyeS1jYXRjaCBzdGF0ZW1lbnRcbiAgICAvLyBpZiBjcmVhdGluZyBhIHNlc3Npb24gZmFpbHMgYXQgYW55IHBvaW50LCB3ZSB0ZWFyZG93biBldmVyeXRoaW5nIHdlXG4gICAgLy8gc2V0IHVwIGJlZm9yZSB0aHJvd2luZyB0aGUgZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2Fwc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICAvLyBhc3NpZ25pbmcgZGVmYXVsdHNcbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICAgZmxhZ3M6ICcweDEwMjAwMDAwJyxcbiAgICAgICAgZGlzYWJsZUFuZHJvaWRXYXRjaGVyczogZmFsc2UsXG4gICAgICAgIHRtcERpcjogYXdhaXQgdGVtcERpci5zdGF0aWNEaXIoKSxcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYm9vdHN0cmFwUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDAsXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcbiAgICAgIHRoaXMudXNlVW5sb2NrSGVscGVyQXBwID0gXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMudW5sb2NrVHlwZSk7XG5cbiAgICAgIC8vIG5vdCB1c2VyIHZpc2libGUgdmlhIGNhcHNcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzKHRoaXMub3B0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgICB0aGlzLmp3cFByb3h5QXZvaWQucHVzaChbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAgIC8vIHNldCB1cCBhbiBpbnN0YW5jZSBvZiBBREJcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVBREIoe1xuICAgICAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICAgICAgZW1Qb3J0OiB0aGlzLm9wdHMuZW1Qb3J0LFxuICAgICAgICBhZGJQb3J0OiB0aGlzLm9wdHMuYWRiUG9ydCxcbiAgICAgICAgc3VwcHJlc3NLaWxsU2VydmVyOiB0aGlzLm9wdHMuc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgICAgICByZW1vdGVBZGJIb3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCxcbiAgICAgICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydDogdGhpcy5vcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgICAgIGFkYkV4ZWNUaW1lb3V0OiB0aGlzLm9wdHMuYWRiRXhlY1RpbWVvdXQsXG4gICAgICAgIGFsbG93T2ZmbGluZURldmljZXM6IHRoaXMub3B0cy5hbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDIzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXCJDb25zaWRlciBzZXR0aW5nICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBcIiArXG4gICAgICAgICAgXCIndWlhdXRvbWF0b3IyJyBvbiBBbmRyb2lkID49IDYsIHNpbmNlIFVJQXV0b21hdG9yIGZyYW1ld29yayBcIiArXG4gICAgICAgICAgJ2lzIG5vdCBtYWludGFpbmVkIGFueW1vcmUgYnkgdGhlIE9TIHZlbmRvci4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgICAvLyB1c2VyIHByb3ZpZGVkIHBhY2thZ2UgaW5zdGVhZCBvZiBhcHAgZm9yICdhcHAnIGNhcGFiaWxpdHksIG1hc3NhZ2Ugb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHA7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VQcmVzZW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWUgY2xvdWQgc2VydmljZXMgdXNpbmcgYXBwaXVtIGxhdW5jaCB0aGUgYXZkIHRoZW1zZWx2ZXMsIHNvIHdlIGVuc3VyZSBuZXRzcGVlZFxuICAgICAgLy8gaXMgc2V0IGZvciBlbXVsYXRvcnMgYnkgY2FsbGluZyBhZGIubmV0d29ya1NwZWVkIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSwgbmV0d29ya1NwZWVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ldHdvcmtTcGVlZCA9IGVuc3VyZU5ldHdvcmtTcGVlZCh0aGlzLmFkYiwgdGhpcy5vcHRzLm5ldHdvcmtTcGVlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5ISBncHNFbmFibGVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRBbmRyb2lkU2Vzc2lvbih0aGlzLm9wdHMpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JpbmcgZGVsZXRlIHNlc3Npb24gZXhjZXB0aW9uIGlmIGFueSBhbmQgdGhyb3cgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIHRoYXQgaGFwcGVuZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHNlc3Npb24uXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApIHx8ICghdGhpcy5vcHRzLmFwcCAmJlxuICAgICAgICAgICB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpKTtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdpZ25vcmVVbmltcG9ydGFudFZpZXdzJykge1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFuZHJvaWRTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBBbmRyb2lkIHNlc3Npb25gKTtcbiAgICAvLyBzZXQgdXAgdGhlIGRldmljZSB0byBydW4gb24gKHJlYWwgb3IgZW11bGF0b3IsIGV0YylcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzLlxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5TaXplKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0TW9kZWwoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gYXdhaXQgdGhpcy5hZGIuZ2V0TWFudWZhY3R1cmVyKCk7XG5cbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQVBJIGxldmVsIDI4IGlzIEFuZHJvaWQgUFxuICAgICAgICAgIC8vIERvbid0IGZvcmdldCB0byByZXNldCB0aGUgcmVsYXhpbmcgaW4gZGVsZXRlIHNlc3Npb25cbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeSB0byBtYW5hZ2UgYW5pbWF0aW9uIHNjYWxlJyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIHdpbmRvdyBhbmltYXRpb24gYXMgaXQgaXMgcmVxdWVzdGVkIGJ5IFwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvblwiIGNhcGFiaWxpdHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIHN0YXJ0IFVpQXV0b21hdG9yXG4gICAgdGhpcy5ib290c3RyYXAgPSBuZXcgaGVscGVycy5ib290c3RyYXAodGhpcy5hZGIsIHRoaXMub3B0cy5ib290c3RyYXBQb3J0LCB0aGlzLm9wdHMud2Vic29ja2V0KTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gICAgLy8gaGFuZGxpbmcgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5vblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuYm9vdHN0cmFwLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93bikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG5cblxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBpbmcgbG9ja3NjcmVlbiBjaGVjaycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDaGVja2luZyBmb3IgbG9ja3NjcmVlbiBwcmVzZW5jZS4gJyArXG4gICAgICAgIGBUaGlzIGNvdWxkIGJlIHNraXBwZWQgYnkgc2V0dGluZyB0aGUgJ2FwcGl1bTpza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHRvIHRydWUuYCk7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0QXV0b1dlYnZpZXcoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRBdXRvV2VidmlldyAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbGV0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGxldCB0aW1lb3V0ID0gKHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQpIHx8IDIwMDA7XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAke3RoaXMub3B0cy5hcHB9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQYWNrYWdlUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBBbmRyb2lkIGRyaXZlcicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcblxuICAgIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgICAgLy8gY2VydGFpbiBjbGVhbnVwIHdlIG9ubHkgY2FyZSB0byBkbyBpZiB0aGUgYm9vdHN0cmFwIHdhcyBldmVyIHJ1blxuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGI/LmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zaHV0ZG93bigpO1xuICAgICAgdGhpcy5ib290c3RyYXAgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGI/LnN0b3BMb2djYXQoKTtcbiAgICBpZiAodGhpcy51c2VVbmxvY2tIZWxwZXJBcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGI/LmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgc2V0dGluZyBTaGFyZWQgcHJlZmVyZW5jZXMsIG5hbWUgaXMgdW5kZWZpbmVkOiAke0pTT04uc3RyaW5naWZ5KHNoYXJlZFByZWZzKX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW90ZVBhdGggPSBgL2RhdGEvZGF0YS8ke3RoaXMub3B0cy5hcHBQYWNrYWdlfS9zaGFyZWRfcHJlZnNgO1xuICAgIGxldCByZW1vdGVGaWxlID0gYCR7cmVtb3RlUGF0aH0vJHtuYW1lfS54bWxgO1xuICAgIGxldCBsb2NhbFBhdGggPSBgL3RtcC8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGJ1aWxkZXIgPSB0aGlzLmdldFByZWZzQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuYnVpbGQoc2hhcmVkUHJlZnMucHJlZnMpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFB1c2hpbmcgc2hhcmVkX3ByZWZzIHRvICR7cmVtb3RlRmlsZX1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRmlsZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBtdXN0IGluY2x1ZGUgZWl0aGVyIGFuIGFwcCwgYXBwUGFja2FnZSBvciBicm93c2VyTmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gQ2hyb21lRHJpdmVyIHN0YXR1c1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odGhpcy5wcm94eVJlcVJlcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZERyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxlQUFBLEdBQUFMLE9BQUE7QUFJQSxJQUFBTSxPQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxTQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSx5QkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsTUFBTVksYUFBYSxHQUFHLE1BQU07QUFDNUIsTUFBTUMsV0FBVyxHQUFHLElBQUk7QUFJeEIsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxNQUFNLEVBQUUsSUFBSUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDL0MsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDN0MsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUMsRUFDckQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsRUFDM0QsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUMsRUFDbkQsQ0FBQyxL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
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsIl9kZXNpcmVkQ2FwcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaW5kZXgiLCJfbWV0aG9kTWFwIiwiX2FuZHJvaWRIZWxwZXJzIiwiX2xvZGFzaCIsIl9hcHBpdW1BZGIiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9zaGFyZWRQcmVmZXJlbmNlc0J1aWxkZXIiLCJfYmx1ZWJpcmQiLCJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwibmV3TWV0aG9kTWFwIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJfdGhpcyRhZGI1IiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJfdGhpcyRhZGIzIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwiX3RoaXMkYWRiIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiX3RoaXMkYWRiMiIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwiX3RoaXMkYWRiNCIsInNodXRkb3duIiwic3RvcExvZ2NhdCIsIl90aGlzJGFkYjYiLCJfdGhpcyRhZGI3IiwiX3RoaXMkYWRiOCIsIl90aGlzJGFkYjkiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiX3RoaXMkYWRiMTAiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic2hhcmVkUHJlZnMiLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlbW90ZVBhdGgiLCJyZW1vdGVGaWxlIiwibG9jYWxQYXRoIiwiYnVpbGRlciIsImdldFByZWZzQnVpbGRlciIsImJ1aWxkIiwicHJlZnMiLCJ0b0ZpbGUiLCJ1bmxpbmsiLCJTaGFyZWRQcmVmc0J1aWxkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJpc0Z1bmN0aW9uIiwicHJveHlSZXFSZXMiLCJleHBvcnRzIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBuZXdNZXRob2RNYXAgfSBmcm9tICcuL21ldGhvZC1tYXAnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcblxuICBzdGF0aWMgbmV3TWV0aG9kTWFwID0gbmV3TWV0aG9kTWFwO1xuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJy1hbmRyb2lkIHVpYXV0b21hdG9yJ1xuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ29uc3RyYWludHM7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmNsb25lKE5PX1BST1hZKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9O1xuICAgIHRoaXMudW5sb2NrZXIgPSBoZWxwZXJzLnVubG9ja2VyO1xuXG4gICAgZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEFuZHJvaWREcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgICB9XG5cbiAgICAvLyBuZWVkcyB0byBiZSBhZnRlciB0aGUgbGluZSB3aGljaCBhc3NpZ25zIGNvbW1hbmRzIHRvIEFuZHJvaWREcml2ZXIucHJvdG90eXBlLCBzbyB0aGF0IGB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZWAgaXMgZGVmaW5lZC5cbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIC8vIHRoZSB3aG9sZSBjcmVhdGVTZXNzaW9uIGZsb3cgaXMgc3Vycm91bmRlZCBpbiBhIHRyeS1jYXRjaCBzdGF0ZW1lbnRcbiAgICAvLyBpZiBjcmVhdGluZyBhIHNlc3Npb24gZmFpbHMgYXQgYW55IHBvaW50LCB3ZSB0ZWFyZG93biBldmVyeXRoaW5nIHdlXG4gICAgLy8gc2V0IHVwIGJlZm9yZSB0aHJvd2luZyB0aGUgZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2Fwc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICAvLyBhc3NpZ25pbmcgZGVmYXVsdHNcbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICAgZmxhZ3M6ICcweDEwMjAwMDAwJyxcbiAgICAgICAgZGlzYWJsZUFuZHJvaWRXYXRjaGVyczogZmFsc2UsXG4gICAgICAgIHRtcERpcjogYXdhaXQgdGVtcERpci5zdGF0aWNEaXIoKSxcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYm9vdHN0cmFwUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDAsXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcbiAgICAgIHRoaXMudXNlVW5sb2NrSGVscGVyQXBwID0gXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMudW5sb2NrVHlwZSk7XG5cbiAgICAgIC8vIG5vdCB1c2VyIHZpc2libGUgdmlhIGNhcHNcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzKHRoaXMub3B0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgICB0aGlzLmp3cFByb3h5QXZvaWQucHVzaChbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAgIC8vIHNldCB1cCBhbiBpbnN0YW5jZSBvZiBBREJcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVBREIoe1xuICAgICAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICAgICAgZW1Qb3J0OiB0aGlzLm9wdHMuZW1Qb3J0LFxuICAgICAgICBhZGJQb3J0OiB0aGlzLm9wdHMuYWRiUG9ydCxcbiAgICAgICAgc3VwcHJlc3NLaWxsU2VydmVyOiB0aGlzLm9wdHMuc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgICAgICByZW1vdGVBZGJIb3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCxcbiAgICAgICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydDogdGhpcy5vcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgICAgIGFkYkV4ZWNUaW1lb3V0OiB0aGlzLm9wdHMuYWRiRXhlY1RpbWVvdXQsXG4gICAgICAgIGFsbG93T2ZmbGluZURldmljZXM6IHRoaXMub3B0cy5hbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDIzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXCJDb25zaWRlciBzZXR0aW5nICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBcIiArXG4gICAgICAgICAgXCIndWlhdXRvbWF0b3IyJyBvbiBBbmRyb2lkID49IDYsIHNpbmNlIFVJQXV0b21hdG9yIGZyYW1ld29yayBcIiArXG4gICAgICAgICAgJ2lzIG5vdCBtYWludGFpbmVkIGFueW1vcmUgYnkgdGhlIE9TIHZlbmRvci4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgICAvLyB1c2VyIHByb3ZpZGVkIHBhY2thZ2UgaW5zdGVhZCBvZiBhcHAgZm9yICdhcHAnIGNhcGFiaWxpdHksIG1hc3NhZ2Ugb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHA7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VQcmVzZW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWUgY2xvdWQgc2VydmljZXMgdXNpbmcgYXBwaXVtIGxhdW5jaCB0aGUgYXZkIHRoZW1zZWx2ZXMsIHNvIHdlIGVuc3VyZSBuZXRzcGVlZFxuICAgICAgLy8gaXMgc2V0IGZvciBlbXVsYXRvcnMgYnkgY2FsbGluZyBhZGIubmV0d29ya1NwZWVkIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSwgbmV0d29ya1NwZWVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ldHdvcmtTcGVlZCA9IGVuc3VyZU5ldHdvcmtTcGVlZCh0aGlzLmFkYiwgdGhpcy5vcHRzLm5ldHdvcmtTcGVlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5ISBncHNFbmFibGVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRBbmRyb2lkU2Vzc2lvbih0aGlzLm9wdHMpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JpbmcgZGVsZXRlIHNlc3Npb24gZXhjZXB0aW9uIGlmIGFueSBhbmQgdGhyb3cgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIHRoYXQgaGFwcGVuZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHNlc3Npb24uXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApIHx8ICghdGhpcy5vcHRzLmFwcCAmJlxuICAgICAgICAgICB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpKTtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdpZ25vcmVVbmltcG9ydGFudFZpZXdzJykge1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFuZHJvaWRTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBBbmRyb2lkIHNlc3Npb25gKTtcbiAgICAvLyBzZXQgdXAgdGhlIGRldmljZSB0byBydW4gb24gKHJlYWwgb3IgZW11bGF0b3IsIGV0YylcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzLlxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5TaXplKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0TW9kZWwoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gYXdhaXQgdGhpcy5hZGIuZ2V0TWFudWZhY3R1cmVyKCk7XG5cbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQVBJIGxldmVsIDI4IGlzIEFuZHJvaWQgUFxuICAgICAgICAgIC8vIERvbid0IGZvcmdldCB0byByZXNldCB0aGUgcmVsYXhpbmcgaW4gZGVsZXRlIHNlc3Npb25cbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeSB0byBtYW5hZ2UgYW5pbWF0aW9uIHNjYWxlJyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIHdpbmRvdyBhbmltYXRpb24gYXMgaXQgaXMgcmVxdWVzdGVkIGJ5IFwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvblwiIGNhcGFiaWxpdHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIHN0YXJ0IFVpQXV0b21hdG9yXG4gICAgdGhpcy5ib290c3RyYXAgPSBuZXcgaGVscGVycy5ib290c3RyYXAodGhpcy5hZGIsIHRoaXMub3B0cy5ib290c3RyYXBQb3J0LCB0aGlzLm9wdHMud2Vic29ja2V0KTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gICAgLy8gaGFuZGxpbmcgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5vblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuYm9vdHN0cmFwLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93bikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG5cblxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBpbmcgbG9ja3NjcmVlbiBjaGVjaycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDaGVja2luZyBmb3IgbG9ja3NjcmVlbiBwcmVzZW5jZS4gJyArXG4gICAgICAgIGBUaGlzIGNvdWxkIGJlIHNraXBwZWQgYnkgc2V0dGluZyB0aGUgJ2FwcGl1bTpza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHRvIHRydWUuYCk7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0QXV0b1dlYnZpZXcoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRBdXRvV2VidmlldyAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbGV0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGxldCB0aW1lb3V0ID0gKHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQpIHx8IDIwMDA7XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAke3RoaXMub3B0cy5hcHB9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQYWNrYWdlUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBBbmRyb2lkIGRyaXZlcicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcblxuICAgIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgICAgLy8gY2VydGFpbiBjbGVhbnVwIHdlIG9ubHkgY2FyZSB0byBkbyBpZiB0aGUgYm9vdHN0cmFwIHdhcyBldmVyIHJ1blxuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGI/LmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zaHV0ZG93bigpO1xuICAgICAgdGhpcy5ib290c3RyYXAgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGI/LnN0b3BMb2djYXQoKTtcbiAgICBpZiAodGhpcy51c2VVbmxvY2tIZWxwZXJBcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGI/LmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgc2V0dGluZyBTaGFyZWQgcHJlZmVyZW5jZXMsIG5hbWUgaXMgdW5kZWZpbmVkOiAke0pTT04uc3RyaW5naWZ5KHNoYXJlZFByZWZzKX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW90ZVBhdGggPSBgL2RhdGEvZGF0YS8ke3RoaXMub3B0cy5hcHBQYWNrYWdlfS9zaGFyZWRfcHJlZnNgO1xuICAgIGxldCByZW1vdGVGaWxlID0gYCR7cmVtb3RlUGF0aH0vJHtuYW1lfS54bWxgO1xuICAgIGxldCBsb2NhbFBhdGggPSBgL3RtcC8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGJ1aWxkZXIgPSB0aGlzLmdldFByZWZzQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuYnVpbGQoc2hhcmVkUHJlZnMucHJlZnMpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFB1c2hpbmcgc2hhcmVkX3ByZWZzIHRvICR7cmVtb3RlRmlsZX1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRmlsZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBtdXN0IGluY2x1ZGUgZWl0aGVyIGFuIGFwcCwgYXBwUGFja2FnZSBvciBicm93c2VyTmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gQ2hyb21lRHJpdmVyIHN0YXR1c1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odGhpcy5wcm94eVJlcVJlcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZERyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxlQUFBLEdBQUFMLE9BQUE7QUFJQSxJQUFBTSxPQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxTQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSx5QkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsTUFBTVksYUFBYSxHQUFHLE1BQU07QUFDNUIsTUFBTUMsV0FBVyxHQUFHLElBQUk7QUFJeEIsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxNQUFNLEVBQUUsSUFBSUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDL0MsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDN0MsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUMsRUFDckQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsRUFDM0QsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUMsRUFDbkQsQ0FBQyxL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
|
package/build/lib/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":["_driver","require","_desiredCaps","_interopRequireDefault","_index","_methodMap","_androidHelpers","_lodash","_appiumAdb","_support","_asyncbox","_sharedPreferencesBuilder","_bluebird","APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","newMethodMap","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","_this$adb5","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","_this$adb3","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","_this$adb","setIME","dontStopAppOnReset","_this$adb2","forceStop","goToHome","_this$adb4","shutdown","stopLogcat","_this$adb6","_this$adb7","_this$adb8","_this$adb9","setDefaultHiddenApiPolicy","_this$adb10","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes","exports","_default","default"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport { newMethodMap } from './method-map';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n\n static newMethodMap = newMethodMap;\n\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (this.opts.skipUnlock) {\n this.log.info('Skipping lockscreen check');\n } else {\n this.log.info('Checking for lockscreen presence. ' +\n `This could be skipped by setting the 'appium:skipUnlock' capability to true.`);\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.js","names":["_driver","require","_desiredCaps","_interopRequireDefault","_index","_methodMap","_androidHelpers","_lodash","_appiumAdb","_support","_asyncbox","_sharedPreferencesBuilder","_bluebird","APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","newMethodMap","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","_this$adb5","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","_this$adb3","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","_this$adb","setIME","dontStopAppOnReset","_this$adb2","forceStop","goToHome","_this$adb4","shutdown","stopLogcat","_this$adb6","_this$adb7","_this$adb8","_this$adb9","setDefaultHiddenApiPolicy","_this$adb10","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes","exports","_default","default"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport { newMethodMap } from './method-map';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n\n static newMethodMap = newMethodMap;\n\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (this.opts.skipUnlock) {\n this.log.info('Skipping lockscreen check');\n } else {\n this.log.info('Checking for lockscreen presence. ' +\n `This could be skipped by setting the 'appium:skipUnlock' capability to true.`);\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
|
package/build/lib/uiautomator.js
CHANGED
|
@@ -95,4 +95,4 @@ UiAutomator.STATE_STARTING = 'starting';
|
|
|
95
95
|
UiAutomator.STATE_ONLINE = 'online';
|
|
96
96
|
var _default = UiAutomator;
|
|
97
97
|
exports.default = _default;
|
|
98
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlVpQXV0b21hdG9yIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhZGIiLCJlcnJvckFuZFRocm93IiwidGVtcFBhdGgiLCJzdGFydCIsInVpQXV0b21hdG9yQmluYXJ5UGF0aCIsImNsYXNzTmFtZSIsInN0YXJ0RGV0ZWN0b3IiLCJleHRyYVBhcmFtcyIsInByb2Nlc3NJc0FsaXZlIiwiZGVidWciLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiamFyTmFtZSIsInBhcnNlSmFyTmFtZUZyb21QYXRoIiwicHVzaCIsImtpbGxVaUF1dG9tYXRvck9uRGV2aWNlIiwiYXJncyIsInByb2MiLCJjcmVhdGVTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiU1RBVEVfU1RPUFBJTkciLCJtc2ciLCJlcnJvciIsIlNUQVRFX09OTElORSIsImUiLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwic2h1dGRvd24iLCJiaW5hcnlQYXRoIiwicmVUZXN0IiwiZXhlYyIsIkVycm9yIiwiRVZFTlRfQ0hBTkdFRCIsImtpbGxQcm9jZXNzZXNCeU5hbWUiLCJ3YXJuIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+
|
|
98
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlVpQXV0b21hdG9yIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhZGIiLCJlcnJvckFuZFRocm93IiwidGVtcFBhdGgiLCJzdGFydCIsInVpQXV0b21hdG9yQmluYXJ5UGF0aCIsImNsYXNzTmFtZSIsInN0YXJ0RGV0ZWN0b3IiLCJleHRyYVBhcmFtcyIsInByb2Nlc3NJc0FsaXZlIiwiZGVidWciLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiamFyTmFtZSIsInBhcnNlSmFyTmFtZUZyb21QYXRoIiwicHVzaCIsImtpbGxVaUF1dG9tYXRvck9uRGV2aWNlIiwiYXJncyIsInByb2MiLCJjcmVhdGVTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiU1RBVEVfU1RPUFBJTkciLCJtc2ciLCJlcnJvciIsIlNUQVRFX09OTElORSIsImUiLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwic2h1dGRvd24iLCJiaW5hcnlQYXRoIiwicmVUZXN0IiwiZXhlYyIsIkVycm9yIiwiRVZFTlRfQ0hBTkdFRCIsImtpbGxQcm9jZXNzZXNCeU5hbWUiLCJ3YXJuIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBR0EsTUFBTUUsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFFM0MsTUFBTUMsV0FBVyxTQUFTQyxlQUFNLENBQUNDLFlBQVksQ0FBQztFQUM1Q0MsV0FBV0EsQ0FBRUMsR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQ0EsR0FBRyxFQUFFO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBYSxDQUFDLDRDQUE0QyxDQUFDO0lBQ2pFO0lBQ0EsS0FBSyxDQUFDLENBQUM7SUFDUCxJQUFJLENBQUNELEdBQUcsR0FBR0EsR0FBRztJ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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uiautomator.js","names":["_events","_interopRequireDefault","require","_support","log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn","exports","_default","default"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from '@appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,aAAa,CAAC;AAE3C,MAAMC,WAAW,SAASC,eAAM,CAACC,YAAY,CAAC;EAC5CC,WAAWA,CAAEC,GAAG,EAAE;IAChB,IAAI,CAACA,GAAG,EAAE;MACRP,GAAG,CAACQ,aAAa,CAAC,4CAA4C,CAAC;IACjE;IACA,KAAK,
|
|
1
|
+
{"version":3,"file":"uiautomator.js","names":["_events","_interopRequireDefault","require","_support","log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn","exports","_default","default"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from '@appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":"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"}
|