appium-android-driver 5.11.0 → 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.
Files changed (55) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/lib/android-helpers.js +1 -1
  3. package/build/lib/android-helpers.js.map +1 -1
  4. package/build/lib/bootstrap.js +1 -1
  5. package/build/lib/bootstrap.js.map +1 -1
  6. package/build/lib/commands/actions.js +1 -1
  7. package/build/lib/commands/actions.js.map +1 -1
  8. package/build/lib/commands/alert.js +1 -1
  9. package/build/lib/commands/alert.js.map +1 -1
  10. package/build/lib/commands/app-management.js +1 -1
  11. package/build/lib/commands/app-management.js.map +1 -1
  12. package/build/lib/commands/context.js +1 -1
  13. package/build/lib/commands/context.js.map +1 -1
  14. package/build/lib/commands/execute.js +1 -1
  15. package/build/lib/commands/execute.js.map +1 -1
  16. package/build/lib/commands/file-actions.js +1 -1
  17. package/build/lib/commands/file-actions.js.map +1 -1
  18. package/build/lib/commands/find.js +1 -1
  19. package/build/lib/commands/find.js.map +1 -1
  20. package/build/lib/commands/general.js +1 -1
  21. package/build/lib/commands/general.js.map +1 -1
  22. package/build/lib/commands/ime.js +1 -1
  23. package/build/lib/commands/ime.js.map +1 -1
  24. package/build/lib/commands/index.js +1 -1
  25. package/build/lib/commands/index.js.map +1 -1
  26. package/build/lib/commands/intent.js +1 -1
  27. package/build/lib/commands/intent.js.map +1 -1
  28. package/build/lib/commands/keyboard.js +1 -1
  29. package/build/lib/commands/keyboard.js.map +1 -1
  30. package/build/lib/commands/log.js +1 -1
  31. package/build/lib/commands/log.js.map +1 -1
  32. package/build/lib/commands/media-projection.js +1 -1
  33. package/build/lib/commands/media-projection.js.map +1 -1
  34. package/build/lib/commands/network.js +6 -55
  35. package/build/lib/commands/network.js.map +1 -1
  36. package/build/lib/commands/performance.js +1 -1
  37. package/build/lib/commands/performance.js.map +1 -1
  38. package/build/lib/commands/permissions.js +1 -1
  39. package/build/lib/commands/permissions.js.map +1 -1
  40. package/build/lib/commands/recordscreen.js +1 -1
  41. package/build/lib/commands/recordscreen.js.map +1 -1
  42. package/build/lib/commands/streamscreen.js +1 -1
  43. package/build/lib/commands/streamscreen.js.map +1 -1
  44. package/build/lib/commands/touch.js +1 -1
  45. package/build/lib/commands/touch.js.map +1 -1
  46. package/build/lib/driver.js +1 -1
  47. package/build/lib/driver.js.map +1 -1
  48. package/build/lib/uiautomator.js +1 -1
  49. package/build/lib/uiautomator.js.map +1 -1
  50. package/build/lib/unlock-helpers.js +1 -1
  51. package/build/lib/unlock-helpers.js.map +1 -1
  52. package/build/lib/webview-helpers.js +1 -1
  53. package/build/lib/webview-helpers.js.map +1 -1
  54. package/lib/commands/network.js +18 -90
  55. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [5.11.1](https://github.com/appium/appium-android-driver/compare/v5.11.0...v5.11.1) (2023-04-29)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Update GPS toggle logic ([#806](https://github.com/appium/appium-android-driver/issues/806)) ([5ea946f](https://github.com/appium/appium-android-driver/commit/5ea946ffcceb5803026319f4742e1d978cda7ed9))
7
+
1
8
  ## [5.11.0](https://github.com/appium/appium-android-driver/compare/v5.10.4...v5.11.0) (2023-04-28)
2
9
 
3
10
 
@@ -765,4 +765,4 @@ helpers.bootstrap = _bootstrap.default;
765
765
  helpers.unlocker = _unlockHelpers.default;
766
766
  var _default = helpers;
767
767
  exports.default = _default;
768
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfc3VwcG9ydCIsIl9pb0FwcGl1bSIsIl9ib290c3RyYXAiLCJfYmx1ZWJpcmQiLCJfYXBwaXVtQWRiIiwiX3VubG9ja0hlbHBlcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9vcyIsIl9zZW12ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiTU9DS19BUFBfSURTX1NUT1JFIiwiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVRfTVMiLCJIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyIsIkhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSWV9ERUxBWV9NUyIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiZXhwb3J0cyIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJpc0VtdWxhdG9yUnVubmluZyIsImdldFJ1bm5pbmdBVkRXaXRoUmV0cnkiLCJlIiwiZGVidWciLCJtZXNzYWdlIiwiYXJncyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwicGtnSWRzIiwiZmlsZUV4aXN0cyIsIkpTT04iLCJwYXJzZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInNyY1BhdGgiLCJwYXRoIiwicG9zaXgiLCJiYXNlbmFtZSIsImZzIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwicmltcmFmIiwicmVzZXRNb2NrTG9jYXRpb24iLCJ0aGlyZFBhcnR5UGtnSWRzUHJvbWlzZSIsInRoaXJkUGFydHlQa2dJZHMiLCJyZXN1bHRQa2dzIiwiaW50ZXJzZWN0aW9uIiwic2l6ZSIsInBrZ0lkIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUludGVydmFsIiwicmV0cnlJbnN0YWxsSGVscGVyQXBwIiwicHVzaFNldHRpbmdzQXBwIiwidGhyb3dFcnJvciIsInNldHRpbmdzQXBrUGF0aCIsInByb2Nlc3NFeGlzdHMiLCJhcGlMZXZlbCIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJpc0VtdWxhdG9yIiwicHVzaFN0cmluZ3MiLCJyZW1vdGVEaXIiLCJzdHJpbmdzSnNvbiIsInJlbW90ZUZpbGUiLCJyZXNvbHZlIiwicHVsbEFwayIsInRtcERpciIsImlzRW1wdHkiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsImlzU2NyZWVuTG9ja2VkIiwidW5sb2NrS2V5IiwiZGlzbWlzc0tleWd1YXJkIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzVW5kZWZpbmVkIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FuZHJvaWQtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBwYXRoIGFzIHNldHRpbmdzQXBrUGF0aCB9IGZyb20gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5pbXBvcnQgQm9vdHN0cmFwIGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBREIgZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHVubG9ja2VyLCBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCxcbiAgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG59IGZyb20gJy4vdW5sb2NrLWhlbHBlcnMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5jb25zdCBNT0NLX0FQUF9JRFNfU1RPUkUgPSAnL2RhdGEvbG9jYWwvdG1wL21vY2tfYXBwcy5qc29uJztcbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TID0gOTAwMDA7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyA9IDM7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUllfREVMQVlfTVMgPSA1MDAwO1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGxldCBpc0VtdWxhdG9yUnVubmluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkoYXZkTmFtZSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBpcyBub3QgcnVubmluZzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgaXNFbXVsYXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKGlzRW11bGF0b3JSdW5uaW5nKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVF9NUyxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIHByb3ZpZGUgJ2FwcCcgb3B0aW9uIHRvIGluc3RhbGwgJyR7YXBwUGFja2FnZX0nIG9yIGAgK1xuICAgICAgYGNvbnNpZGVyIHNldHRpbmcgJ25vUmVzZXQnIHRvICd0cnVlJyBpZiAnJHthcHBQYWNrYWdlfScgaXMgc3VwcG9zZWQgdG8gYmUgcHJlaW5zdGFsbGVkLmApO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGxldCBwa2dJZHMgPSBbXTtcbiAgICBpZiAoYXdhaXQgYWRiLmZpbGVFeGlzdHMoTU9DS19BUFBfSURTX1NUT1JFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGtnSWRzID0gSlNPTi5wYXJzZShhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCBNT0NLX0FQUF9JRFNfU1RPUkVdKSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGlmIChwa2dJZHMuaW5jbHVkZXMoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwa2dJZHMucHVzaChhcHApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5wb3NpeC5qb2luKHRtcFJvb3QsIHBhdGgucG9zaXguYmFzZW5hbWUoTU9DS19BUFBfSURTX1NUT1JFKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBKU09OLnN0cmluZ2lmeShwa2dJZHMpLCAndXRmOCcpO1xuICAgICAgYXdhaXQgYWRiLnB1c2goc3JjUGF0aCwgTU9DS19BUFBfSURTX1NUT1JFKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcGVyc2lzdCBtb2NrIGxvY2F0aW9uIGFwcCBpZCAnJHthcHB9JzogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiByZXNldE1vY2tMb2NhdGlvbiAoYWRiKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcwJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlID0gaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiKTtcbiAgICBsZXQgcGtnSWRzID0gW107XG4gICAgaWYgKGF3YWl0IGFkYi5maWxlRXhpc3RzKE1PQ0tfQVBQX0lEU19TVE9SRSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBrZ0lkcyA9IEpTT04ucGFyc2UoYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgTU9DS19BUFBfSURTX1NUT1JFXSkpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzID0gYXdhaXQgdGhpcmRQYXJ0eVBrZ0lkc1Byb21pc2U7XG4gICAgLy8gT25seSBpbmNsdWRlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICBjb25zdCByZXN1bHRQa2dzID0gXy5pbnRlcnNlY3Rpb24ocGtnSWRzLCB0aGlyZFBhcnR5UGtnSWRzKTtcbiAgICBpZiAoXy5zaXplKHJlc3VsdFBrZ3MpIDw9IDEpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCByZXN1bHRQa2dzWzBdID8/IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFJlc2V0dGluZyBtb2NrX2xvY2F0aW9uIHBlcm1pc3Npb24gZm9yIHRoZSBmb2xsb3dpbmcgYXBwczogJHtyZXN1bHRQa2dzfWApO1xuICAgIGF3YWl0IEIuYWxsKHJlc3VsdFBrZ3MubWFwKChwa2dJZCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBwa2dJZCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdkZW55J10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0pKCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZXNldCBtb2NrIGxvY2F0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbChIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUywgSEVMUEVSX0FQUF9JTlNUQUxMX1JFVFJZX0RFTEFZX01TLFxuICAgIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yIFtmYWxzZV0gLSBXaGV0aGVyIHRocm93IGFuIGVycm9yIGlmIFNldHRpbmdzIGFwcCBmYWlscyB0byBzdGFydFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlLCBvcHRzID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3b3VsZCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsID49IDI5KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgJ1BST0pFQ1RfTUVESUEnLCAnYWxsb3cnXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCh7XG4gICAgICB0aW1lb3V0OiBoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSA/IDMwMDAwIDogNTAwMFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdTY3JlZW4gaXMgbG9ja2VkLCB0cnlpbmcgdG8gdW5sb2NrJyk7XG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTmVpdGhlciAndW5sb2NrVHlwZScgbm9yICd1bmxvY2tLZXknIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQuIGAgK1xuICAgICAgYEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBzaW1wbGUgbG9jayBzY3JlZW4uYCk7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGV2aWNlIHdha2UgdXAgb25seSBmb3IgYW4gZW11bGF0b3IuXG4gICAgICAvLyBJdCB0YWtlcyAxIHNlY29uZCBvciBzbyBldmVuIHdoZW4gdGhlIGRldmljZSBpcyBhbHJlYWR5IGF3YWtlIGluIGEgcmVhbCBkZXZpY2UuXG4gICAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIH1cbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgaWYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uKGFkYik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFB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
768
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfc3VwcG9ydCIsIl9pb0FwcGl1bSIsIl9ib290c3RyYXAiLCJfYmx1ZWJpcmQiLCJfYXBwaXVtQWRiIiwiX3VubG9ja0hlbHBlcnMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9vcyIsIl9zZW12ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiTU9DS19BUFBfSURTX1NUT1JFIiwiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVRfTVMiLCJIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyIsIkhFTFBFUl9BUFBfSU5TVEFMTF9SRVRSWV9ERUxBWV9NUyIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiZXhwb3J0cyIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJpc0VtdWxhdG9yUnVubmluZyIsImdldFJ1bm5pbmdBVkRXaXRoUmV0cnkiLCJlIiwiZGVidWciLCJtZXNzYWdlIiwiYXJncyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwicGtnSWRzIiwiZmlsZUV4aXN0cyIsIkpTT04iLCJwYXJzZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInNyY1BhdGgiLCJwYXRoIiwicG9zaXgiLCJiYXNlbmFtZSIsImZzIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwicmltcmFmIiwicmVzZXRNb2NrTG9jYXRpb24iLCJ0aGlyZFBhcnR5UGtnSWRzUHJvbWlzZSIsInRoaXJkUGFydHlQa2dJZHMiLCJyZXN1bHRQa2dzIiwiaW50ZXJzZWN0aW9uIiwic2l6ZSIsInBrZ0lkIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUludGVydmFsIiwicmV0cnlJbnN0YWxsSGVscGVyQXBwIiwicHVzaFNldHRpbmdzQXBwIiwidGhyb3dFcnJvciIsInNldHRpbmdzQXBrUGF0aCIsInByb2Nlc3NFeGlzdHMiLCJhcGlMZXZlbCIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJpc0VtdWxhdG9yIiwicHVzaFN0cmluZ3MiLCJyZW1vdGVEaXIiLCJzdHJpbmdzSnNvbiIsInJlbW90ZUZpbGUiLCJyZXNvbHZlIiwicHVsbEFwayIsInRtcERpciIsImlzRW1wdHkiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsImlzU2NyZWVuTG9ja2VkIiwidW5sb2NrS2V5IiwiZGlzbWlzc0tleWd1YXJkIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzVW5kZWZpbmVkIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FuZHJvaWQtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBwYXRoIGFzIHNldHRpbmdzQXBrUGF0aCB9IGZyb20gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5pbXBvcnQgQm9vdHN0cmFwIGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBREIgZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHVubG9ja2VyLCBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCxcbiAgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG59IGZyb20gJy4vdW5sb2NrLWhlbHBlcnMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5jb25zdCBNT0NLX0FQUF9JRFNfU1RPUkUgPSAnL2RhdGEvbG9jYWwvdG1wL21vY2tfYXBwcy5qc29uJztcbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TID0gOTAwMDA7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUyA9IDM7XG5jb25zdCBIRUxQRVJfQVBQX0lOU1RBTExfUkVUUllfREVMQVlfTVMgPSA1MDAwO1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGxldCBpc0VtdWxhdG9yUnVubmluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkoYXZkTmFtZSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBpcyBub3QgcnVubmluZzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgaXNFbXVsYXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKGlzRW11bGF0b3JSdW5uaW5nKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVF9NUyxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIHByb3ZpZGUgJ2FwcCcgb3B0aW9uIHRvIGluc3RhbGwgJyR7YXBwUGFja2FnZX0nIG9yIGAgK1xuICAgICAgYGNvbnNpZGVyIHNldHRpbmcgJ25vUmVzZXQnIHRvICd0cnVlJyBpZiAnJHthcHBQYWNrYWdlfScgaXMgc3VwcG9zZWQgdG8gYmUgcHJlaW5zdGFsbGVkLmApO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUX01TLFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGxldCBwa2dJZHMgPSBbXTtcbiAgICBpZiAoYXdhaXQgYWRiLmZpbGVFeGlzdHMoTU9DS19BUFBfSURTX1NUT1JFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGtnSWRzID0gSlNPTi5wYXJzZShhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCBNT0NLX0FQUF9JRFNfU1RPUkVdKSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGlmIChwa2dJZHMuaW5jbHVkZXMoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwa2dJZHMucHVzaChhcHApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5wb3NpeC5qb2luKHRtcFJvb3QsIHBhdGgucG9zaXguYmFzZW5hbWUoTU9DS19BUFBfSURTX1NUT1JFKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBKU09OLnN0cmluZ2lmeShwa2dJZHMpLCAndXRmOCcpO1xuICAgICAgYXdhaXQgYWRiLnB1c2goc3JjUGF0aCwgTU9DS19BUFBfSURTX1NUT1JFKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcGVyc2lzdCBtb2NrIGxvY2F0aW9uIGFwcCBpZCAnJHthcHB9JzogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiByZXNldE1vY2tMb2NhdGlvbiAoYWRiKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcwJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlID0gaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiKTtcbiAgICBsZXQgcGtnSWRzID0gW107XG4gICAgaWYgKGF3YWl0IGFkYi5maWxlRXhpc3RzKE1PQ0tfQVBQX0lEU19TVE9SRSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBrZ0lkcyA9IEpTT04ucGFyc2UoYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgTU9DS19BUFBfSURTX1NUT1JFXSkpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzID0gYXdhaXQgdGhpcmRQYXJ0eVBrZ0lkc1Byb21pc2U7XG4gICAgLy8gT25seSBpbmNsdWRlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICBjb25zdCByZXN1bHRQa2dzID0gXy5pbnRlcnNlY3Rpb24ocGtnSWRzLCB0aGlyZFBhcnR5UGtnSWRzKTtcbiAgICBpZiAoXy5zaXplKHJlc3VsdFBrZ3MpIDw9IDEpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCByZXN1bHRQa2dzWzBdID8/IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFJlc2V0dGluZyBtb2NrX2xvY2F0aW9uIHBlcm1pc3Npb24gZm9yIHRoZSBmb2xsb3dpbmcgYXBwczogJHtyZXN1bHRQa2dzfWApO1xuICAgIGF3YWl0IEIuYWxsKHJlc3VsdFBrZ3MubWFwKChwa2dJZCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBwa2dJZCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdkZW55J10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0pKCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZXNldCBtb2NrIGxvY2F0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnlJbnRlcnZhbChIRUxQRVJfQVBQX0lOU1RBTExfUkVUUklFUywgSEVMUEVSX0FQUF9JTlNUQUxMX1JFVFJZX0RFTEFZX01TLFxuICAgIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gICAgfVxuICApO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yIFtmYWxzZV0gLSBXaGV0aGVyIHRocm93IGFuIGVycm9yIGlmIFNldHRpbmdzIGFwcCBmYWlscyB0byBzdGFydFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlLCBvcHRzID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3b3VsZCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsID49IDI5KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgJ1BST0pFQ1RfTUVESUEnLCAnYWxsb3cnXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCh7XG4gICAgICB0aW1lb3V0OiBoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSA/IDMwMDAwIDogNTAwMFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdTY3JlZW4gaXMgbG9ja2VkLCB0cnlpbmcgdG8gdW5sb2NrJyk7XG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTmVpdGhlciAndW5sb2NrVHlwZScgbm9yICd1bmxvY2tLZXknIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQuIGAgK1xuICAgICAgYEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBzaW1wbGUgbG9jayBzY3JlZW4uYCk7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGV2aWNlIHdha2UgdXAgb25seSBmb3IgYW4gZW11bGF0b3IuXG4gICAgICAvLyBJdCB0YWtlcyAxIHNlY29uZCBvciBzbyBldmVuIHdoZW4gdGhlIGRldmljZSBpcyBhbHJlYWR5IGF3YWtlIGluIGEgcmVhbCBkZXZpY2UuXG4gICAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIH1cbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgaWYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uKGFkYik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFB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