appium-android-driver 5.0.10 → 5.0.13

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.
@@ -506,4 +506,4 @@ var _default = AndroidDriver;
506
506
  exports.default = _default;require('source-map-support').install();
507
507
 
508
508
 
509
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiQVBQX0VYVEVOU0lPTiIsIkRFVklDRV9QT1JUIiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJBbmRyb2lkRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiZGVzaXJlZENvbnN0cmFpbnRzIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJqd3BQcm94eUFjdGl2ZSIsImp3cFByb3h5QXZvaWQiLCJfIiwiY2xvbmUiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwiYXBrU3RyaW5ncyIsInVubG9ja2VyIiwiaGVscGVycyIsImNtZCIsImZuIiwidG9QYWlycyIsImNvbW1hbmRzIiwicHJvdG90eXBlIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdE9wdHMiLCJhY3Rpb24iLCJjYXRlZ29yeSIsImZsYWdzIiwiZGlzYWJsZUFuZHJvaWRXYXRjaGVycyIsInRtcERpciIsInRlbXBEaXIiLCJzdGF0aWNEaXIiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJib290c3RyYXBQb3J0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJ1c2VVbmxvY2tIZWxwZXJBcHAiLCJpc1VuZGVmaW5lZCIsInVubG9ja1R5cGUiLCJub1Jlc2V0IiwiZmFzdFJlc2V0Iiwic2tpcFVuaW5zdGFsbCIsImlzQ2hyb21lU2Vzc2lvbiIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsIm5hdGl2ZVdlYlNjcmVlbnNob3QiLCJwdXNoIiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImdldEFwaUxldmVsIiwibG9nIiwid2FybiIsImlzUGFja2FnZU9yQnVuZGxlIiwiYXBwIiwiYXBwUGFja2FnZSIsImNvbmZpZ3VyZUFwcCIsImNoZWNrQXBwUHJlc2VudCIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImNoZWNrUGFja2FnZVByZXNlbnQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJuZXR3b3JrU3BlZWQiLCJpc0VtdWxhdG9yIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJzdGFydEFuZHJvaWRTZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJpZ24iLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJpc0Nocm9tZUJyb3dzZXIiLCJicm93c2VyTmFtZSIsImtleSIsInZhbHVlIiwic2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSIsImRlZmF1bHRJTUUiLCJpbml0RGV2aWNlIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlU2NyZWVuU2l6ZSIsImdldFNjcmVlblNpemUiLCJkZXZpY2VNb2RlbCIsImdldE1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwiZ2V0TWFudWZhY3R1cmVyIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImlzQW5pbWF0aW9uT24iLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsImJvb3RzdHJhcCIsIndlYnNvY2tldCIsInN0YXJ0IiwiYWNjZXB0U3NsQ2VydHMiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImNhdGNoIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJsYXVuY2hJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJvdGhlckFwcHMiLCJtZXNzYWdlIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJyZXNldEFwcCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UiLCJwdXNoU3RyaW5ncyIsImxhbmd1YWdlIiwic2hhcmVkUHJlZmVyZW5jZXMiLCJzZXRTaGFyZWRQcmVmZXJlbmNlcyIsImZzIiwiZXhpc3RzIiwic2hlbGwiLCJjb21wcmVzcyIsInNlbmRBY3Rpb24iLCJjb21wcmVzc0xheW91dCIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiZm9yY2VTdG9wIiwiZ29Ub0hvbWUiLCJzaHV0ZG93biIsInN0b3BMb2djYXQiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNoYXJlZFByZWZzIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZW1vdGVQYXRoIiwicmVtb3RlRmlsZSIsImxvY2FsUGF0aCIsImJ1aWxkZXIiLCJnZXRQcmVmc0J1aWxkZXIiLCJidWlsZCIsInByZWZzIiwidG9GaWxlIiwidW5saW5rIiwiU2hhcmVkUHJlZnNCdWlsZGVyIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiaXNGdW5jdGlvbiIsInByb3h5UmVxUmVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQUlBLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsTUFBRCxFQUFTLElBQUlDLE1BQUosQ0FBVyx5QkFBWCxDQUFULENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHdCQUFYLENBQVQsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyx3QkFBWCxDQUFSLENBSmUsRUFLZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQUxlLEVBTWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHFDQUFYLENBQVQsQ0FOZSxFQU9mLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw2QkFBWCxDQUFULENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsNkJBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVQsQ0FUZSxFQVVmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw4QkFBWCxDQUFULENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVQsQ0FaZSxDQUFqQjs7QUFlQSxNQUFNQyxhQUFOLFNBQTRCQyxzQkFBNUIsQ0FBdUM7QUFDckNDLEVBQUFBLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLEVBQVQsRUFBYUMsa0JBQWtCLEdBQUcsSUFBbEMsRUFBd0M7QUFDakQsVUFBTUQsSUFBTixFQUFZQyxrQkFBWjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLENBQ3ZCLE9BRHVCLEVBRXZCLElBRnVCLEVBR3ZCLFlBSHVCLEVBSXZCLGtCQUp1QixFQUt2QixzQkFMdUIsQ0FBekI7QUFPQSxTQUFLQyxxQkFBTCxHQUE2QkMsb0JBQTdCO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsRUFBNUI7QUFDQSxTQUFLQyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQkMsZ0JBQUVDLEtBQUYsQ0FBUWQsUUFBUixDQUFyQjtBQUNBLFNBQUtlLFFBQUwsR0FBZ0IsSUFBSUMsMEJBQUosQ0FBbUI7QUFBQ0MsTUFBQUEsc0JBQXNCLEVBQUU7QUFBekIsS0FBbkIsRUFDbUIsS0FBS0MsZ0JBQUwsQ0FBc0JDLElBQXRCLENBQTJCLElBQTNCLENBRG5CLENBQWhCO0FBRUEsU0FBS0MsWUFBTCxHQUFvQixJQUFwQjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsRUFBbEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCQyx3QkFBUUQsUUFBeEI7O0FBRUEsU0FBSyxJQUFJLENBQUNFLEdBQUQsRUFBTUMsRUFBTixDQUFULElBQXNCWixnQkFBRWEsT0FBRixDQUFVQyxjQUFWLENBQXRCLEVBQTJDO0FBQ3pDekIsTUFBQUEsYUFBYSxDQUFDMEIsU0FBZCxDQUF3QkosR0FBeEIsSUFBK0JDLEVBQS9CO0FBQ0Q7O0FBR0QsU0FBS0ksVUFBTCxHQUFrQixLQUFLQyxrQkFBTCxFQUFsQjtBQUNEOztBQUVrQixRQUFiQyxhQUFhLENBQUUsR0FBR0MsSUFBTCxFQUFXO0FBSTVCLFFBQUk7QUFDRixVQUFJLENBQUNDLFNBQUQsRUFBWUMsSUFBWixJQUFvQixNQUFNLE1BQU1ILGFBQU4sQ0FBb0IsR0FBR0MsSUFBdkIsQ0FBOUI7QUFFQSxVQUFJRyxhQUFhLEdBQUc7QUFDbEJDLFFBQUFBLFFBQVEsRUFBRSxPQURRO0FBRWxCQyxRQUFBQSxpQkFBaUIsRUFBRSxLQUZEO0FBR2xCQyxRQUFBQSxlQUFlLEVBQUUsSUFIQztBQUlsQkMsUUFBQUEsaUJBQWlCLEVBQUUsSUFKRDtBQUtsQkMsUUFBQUEsZUFBZSxFQUFFLEtBTEM7QUFNbEJDLFFBQUFBLHdCQUF3QixFQUFFLElBTlI7QUFPbEJDLFFBQUFBLHNCQUFzQixFQUFFLEtBUE47QUFRbEJDLFFBQUFBLFFBQVEsRUFBRSxFQVJRO0FBU2xCQyxRQUFBQSxPQUFPLEVBQUUsS0FBS1Y7QUFUSSxPQUFwQjtBQVlBLFdBQUtBLElBQUwsR0FBWVcsTUFBTSxDQUFDQyxNQUFQLENBQWNYLGFBQWQsRUFBNkIsS0FBS0QsSUFBbEMsQ0FBWjtBQUdBLFVBQUlhLFdBQVcsR0FBRztBQUNoQkMsUUFBQUEsTUFBTSxFQUFFLDRCQURRO0FBRWhCQyxRQUFBQSxRQUFRLEVBQUUsa0NBRk07QUFHaEJDLFFBQUFBLEtBQUssRUFBRSxZQUhTO0FBSWhCQyxRQUFBQSxzQkFBc0IsRUFBRSxLQUpSO0FBS2hCQyxRQUFBQSxNQUFNLEVBQUUsTUFBTUMsaUJBQVFDLFNBQVIsRUFMRTtBQU1oQkMsUUFBQUEsU0FBUyxFQUFFLEtBTks7QUFPaEJDLFFBQUFBLFVBQVUsRUFBRSxJQVBJO0FBUWhCQyxRQUFBQSxPQUFPLEVBQUVDLDJCQVJPO0FBU2hCQyxRQUFBQSxhQUFhLEVBQUU1RCxXQVRDO0FBVWhCNkQsUUFBQUEscUJBQXFCLEVBQUU7QUFWUCxPQUFsQjs7QUFZQS9DLHNCQUFFZ0QsUUFBRixDQUFXLEtBQUt4RCxJQUFoQixFQUFzQjBDLFdBQXRCOztBQUNBLFdBQUtlLGtCQUFMLEdBQTBCakQsZ0JBQUVrRCxXQUFGLENBQWMsS0FBSzdCLElBQUwsQ0FBVThCLFVBQXhCLENBQTFCOztBQUdBLFVBQUksS0FBSzNELElBQUwsQ0FBVTRELE9BQVYsS0FBc0IsSUFBMUIsRUFBZ0M7QUFDOUIsYUFBSzVELElBQUwsQ0FBVWtELFNBQVYsR0FBc0IsS0FBdEI7QUFDRDs7QUFDRCxVQUFJLEtBQUtsRCxJQUFMLENBQVVrRCxTQUFWLEtBQXdCLElBQTVCLEVBQWtDO0FBQ2hDLGFBQUtsRCxJQUFMLENBQVU0RCxPQUFWLEdBQW9CLEtBQXBCO0FBQ0Q7O0FBQ0QsV0FBSzVELElBQUwsQ0FBVTZELFNBQVYsR0FBc0IsQ0FBQyxLQUFLN0QsSUFBTCxDQUFVa0QsU0FBWCxJQUF3QixDQUFDLEtBQUtsRCxJQUFMLENBQVU0RCxPQUF6RDtBQUNBLFdBQUs1RCxJQUFMLENBQVU4RCxhQUFWLEdBQTBCLEtBQUs5RCxJQUFMLENBQVU2RCxTQUFWLElBQXVCLEtBQUs3RCxJQUFMLENBQVU0RCxPQUEzRDs7QUFFQSxVQUFJLEtBQUtHLGVBQVQsRUFBMEI7QUFDeEI3QyxnQ0FBUThDLHdCQUFSLENBQWlDLEtBQUtoRSxJQUF0QztBQUNEOztBQUVELFVBQUksS0FBS0EsSUFBTCxDQUFVaUUsbUJBQWQsRUFBbUM7QUFDakMsYUFBSzFELGFBQUwsQ0FBbUIyRCxJQUFuQixDQUF3QixDQUFDLEtBQUQsRUFBUSxJQUFJdEUsTUFBSixDQUFXLDRCQUFYLENBQVIsQ0FBeEI7QUFDRDs7QUFFRCxVQUFJLEtBQUtJLElBQUwsQ0FBVW1FLE1BQWQsRUFBc0I7QUFDcEIsYUFBS0Msc0JBQUwsQ0FBNEJ2QyxJQUE1QjtBQUNEOztBQUdELFVBQUk7QUFBQ3dDLFFBQUFBLElBQUQ7QUFBT0MsUUFBQUE7QUFBUCxVQUFpQixNQUFNcEQsd0JBQVFxRCxxQkFBUixDQUE4QixLQUFLdkUsSUFBbkMsQ0FBM0I7QUFDQSxXQUFLQSxJQUFMLENBQVVxRSxJQUFWLEdBQWlCQSxJQUFqQjtBQUNBLFdBQUtyRSxJQUFMLENBQVVzRSxNQUFWLEdBQW1CQSxNQUFuQjtBQUdBLFdBQUtFLEdBQUwsR0FBVyxNQUFNdEQsd0JBQVF1RCxTQUFSLENBQWtCO0FBQ2pDSixRQUFBQSxJQUFJLEVBQUUsS0FBS3JFLElBQUwsQ0FBVXFFLElBRGlCO0FBRWpDQyxRQUFBQSxNQUFNLEVBQUUsS0FBS3RFLElBQUwsQ0FBVXNFLE1BRmU7QUFHakNsQixRQUFBQSxPQUFPLEVBQUUsS0FBS3BELElBQUwsQ0FBVW9ELE9BSGM7QUFJakNzQixRQUFBQSxrQkFBa0IsRUFBRSxLQUFLMUUsSUFBTCxDQUFVMEUsa0JBSkc7QUFLakNDLFFBQUFBLGFBQWEsRUFBRSxLQUFLM0UsSUFBTCxDQUFVMkUsYUFMUTtBQU1qQ0MsUUFBQUEsc0JBQXNCLEVBQUUsS0FBSzVFLElBQUwsQ0FBVTRFLHNCQU5EO0FBT2pDQyxRQUFBQSxjQUFjLEVBQUUsS0FBSzdFLElBQUwsQ0FBVTZFLGNBUE87QUFRakNDLFFBQUFBLG1CQUFtQixFQUFFLEtBQUs5RSxJQUFMLENBQVU4RTtBQVJFLE9BQWxCLENBQWpCOztBQVdBLFVBQUksT0FBTSxLQUFLTixHQUFMLENBQVNPLFdBQVQsRUFBTixLQUFnQyxFQUFwQyxFQUF3QztBQUN0QyxhQUFLQyxHQUFMLENBQVNDLElBQVQsQ0FBYyxxREFDWiw4REFEWSxHQUVaLDZDQUZGO0FBR0Q7O0FBRUQsVUFBSSxLQUFLL0QsT0FBTCxDQUFhZ0UsaUJBQWIsQ0FBK0IsS0FBS2xGLElBQUwsQ0FBVW1GLEdBQXpDLENBQUosRUFBbUQ7QUFFakQsYUFBS25GLElBQUwsQ0FBVW9GLFVBQVYsR0FBdUIsS0FBS3BGLElBQUwsQ0FBVW1GLEdBQWpDO0FBQ0EsYUFBS25GLElBQUwsQ0FBVW1GLEdBQVYsR0FBZ0IsSUFBaEI7QUFDRDs7QUFFRCxVQUFJLEtBQUtuRixJQUFMLENBQVVtRixHQUFkLEVBQW1CO0FBRWpCLGFBQUtuRixJQUFMLENBQVVtRixHQUFWLEdBQWdCLE1BQU0sS0FBS2pFLE9BQUwsQ0FBYW1FLFlBQWIsQ0FBMEIsS0FBS3JGLElBQUwsQ0FBVW1GLEdBQXBDLEVBQXlDMUYsYUFBekMsQ0FBdEI7QUFDQSxjQUFNLEtBQUs2RixlQUFMLEVBQU47QUFDRCxPQUpELE1BSU8sSUFBSSxLQUFLQyxXQUFULEVBQXNCO0FBRzNCLGFBQUtQLEdBQUwsQ0FBU1EsSUFBVCxDQUFlLHNEQUFELEdBQ1gsR0FBRSxLQUFLeEYsSUFBTCxDQUFVb0YsVUFBVyx5QkFEMUI7QUFFQSxjQUFNLEtBQUtLLG1CQUFMLEVBQU47QUFDRDs7QUFJRCxVQUFJQyxjQUFLQyxRQUFMLENBQWMsS0FBSzNGLElBQUwsQ0FBVTRGLFlBQXhCLENBQUosRUFBMkM7QUFDekMsWUFBSSxDQUFDLEtBQUtDLFVBQUwsRUFBTCxFQUF3QjtBQUN0QixlQUFLYixHQUFMLENBQVNDLElBQVQsQ0FBYyxnRUFBZDtBQUNELFNBRkQsTUFFTztBQUNMLGdCQUFNVyxZQUFZLEdBQUcsd0NBQW1CLEtBQUtwQixHQUF4QixFQUE2QixLQUFLeEUsSUFBTCxDQUFVNEYsWUFBdkMsQ0FBckI7QUFDQSxnQkFBTSxLQUFLcEIsR0FBTCxDQUFTb0IsWUFBVCxDQUFzQkEsWUFBdEIsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSUYsY0FBS0MsUUFBTCxDQUFjLEtBQUszRixJQUFMLENBQVU4RixVQUF4QixDQUFKLEVBQXlDO0FBQ3ZDLFlBQUksS0FBS0QsVUFBTCxFQUFKLEVBQXVCO0FBQ3JCLGVBQUtiLEdBQUwsQ0FBU1EsSUFBVCxDQUFlLGFBQVksS0FBS3hGLElBQUwsQ0FBVThGLFVBQVYsR0FBdUIsUUFBdkIsR0FBa0MsU0FBVSx3QkFBdkU7QUFDQSxnQkFBTSxLQUFLdEIsR0FBTCxDQUFTdUIseUJBQVQsQ0FBbUMsS0FBSy9GLElBQUwsQ0FBVThGLFVBQTdDLENBQU47QUFDRCxTQUhELE1BR087QUFDTCxlQUFLZCxHQUFMLENBQVNDLElBQVQsQ0FBYyw4REFBZDtBQUNEO0FBQ0Y7O0FBRUQsWUFBTSxLQUFLZSxtQkFBTCxDQUF5QixLQUFLaEcsSUFBOUIsQ0FBTjtBQUNBLGFBQU8sQ0FBQzRCLFNBQUQsRUFBWSxLQUFLQyxJQUFqQixDQUFQO0FBQ0QsS0F0SEQsQ0FzSEUsT0FBT29FLENBQVAsRUFBVTtBQUdWLFVBQUk7QUFDRixjQUFNLEtBQUtDLGFBQUwsRUFBTjtBQUNELE9BRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTs7QUFDaEIsWUFBTUYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRURKLEVBQUFBLFVBQVUsR0FBSTtBQUNaLFdBQU8zRSx3QkFBUTJFLFVBQVIsQ0FBbUIsS0FBS3JCLEdBQXhCLEVBQTZCLEtBQUt4RSxJQUFsQyxDQUFQO0FBQ0Q7O0FBRURvRSxFQUFBQSxzQkFBc0IsQ0FBRXZDLElBQUYsRUFBUTtBQUM1QixRQUFJLEtBQUs3QixJQUFMLENBQVVvRyxHQUFkLEVBQW1CO0FBQ2pCLFdBQUtwQixHQUFMLENBQVNRLElBQVQsQ0FBYyw2REFBZDtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksQ0FBQzNELElBQUksQ0FBQ3dFLFVBQVYsRUFBc0I7QUFDcEIsYUFBS3JCLEdBQUwsQ0FBU3NCLGFBQVQsQ0FBdUIscUVBQXZCO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDekUsSUFBSSxDQUFDMEUsZUFBVixFQUEyQjtBQUN6QixhQUFLdkIsR0FBTCxDQUFTc0IsYUFBVCxDQUF1QiwwRUFBdkI7QUFDRDs7QUFDRCxVQUFJRSxTQUFTLEdBQUczRSxJQUFJLENBQUN3RSxVQUFMLENBQWdCSSxPQUFoQixDQUF3QixpQkFBeEIsRUFBMkMsR0FBM0MsQ0FBaEI7QUFDQSxXQUFLekcsSUFBTCxDQUFVb0csR0FBVixHQUFpQixHQUFFSSxTQUFVLEtBQUkzRSxJQUFJLENBQUMwRSxlQUFnQixFQUF0RDtBQUNEO0FBQ0Y7O0FBRWMsTUFBWGhCLFdBQVcsR0FBSTtBQUNqQixXQUFPLEtBQUtyRSxPQUFMLENBQWFnRSxpQkFBYixDQUErQixLQUFLbEYsSUFBTCxDQUFVbUYsR0FBekMsS0FBa0QsQ0FBQyxLQUFLbkYsSUFBTCxDQUFVbUYsR0FBWCxJQUNsRCxLQUFLakUsT0FBTCxDQUFhZ0UsaUJBQWIsQ0FBK0IsS0FBS2xGLElBQUwsQ0FBVW9GLFVBQXpDLENBRFA7QUFFRDs7QUFFa0IsTUFBZnJCLGVBQWUsR0FBSTtBQUNyQixXQUFPN0Msd0JBQVF3RixlQUFSLENBQXdCLEtBQUsxRyxJQUFMLENBQVUyRyxXQUFsQyxDQUFQO0FBQ0Q7O0FBRXFCLFFBQWhCOUYsZ0JBQWdCLENBQUUrRixHQUFGLEVBQU9DLEtBQVAsRUFBYztBQUNsQyxRQUFJRCxHQUFHLEtBQUssd0JBQVosRUFBc0M7QUFDcEMsWUFBTSxLQUFLRSw0QkFBTCxDQUFrQ0QsS0FBbEMsQ0FBTjtBQUNEO0FBQ0Y7O0FBRXdCLFFBQW5CYixtQkFBbUIsR0FBSTtBQUMzQixTQUFLaEIsR0FBTCxDQUFTUSxJQUFULENBQWUsMEJBQWY7QUFFQSxTQUFLdUIsVUFBTCxHQUFrQixNQUFNN0Ysd0JBQVE4RixVQUFSLENBQW1CLEtBQUt4QyxHQUF4QixFQUE2QixLQUFLeEUsSUFBbEMsQ0FBeEI7QUFHQSxTQUFLNkIsSUFBTCxDQUFVd0UsVUFBVixHQUF1QixLQUFLN0IsR0FBTCxDQUFTeUMsV0FBaEM7QUFDQSxTQUFLcEYsSUFBTCxDQUFVcUYsVUFBVixHQUF1QixLQUFLbEgsSUFBTCxDQUFVcUUsSUFBakM7QUFDQSxTQUFLeEMsSUFBTCxDQUFVMEUsZUFBVixHQUE0QixNQUFNLEtBQUsvQixHQUFMLENBQVMyQyxrQkFBVCxFQUFsQztBQUNBLFNBQUt0RixJQUFMLENBQVV1RixnQkFBVixHQUE2QixNQUFNLEtBQUs1QyxHQUFMLENBQVM2QyxhQUFULEVBQW5DO0FBQ0EsU0FBS3hGLElBQUwsQ0FBVXlGLFdBQVYsR0FBd0IsTUFBTSxLQUFLOUMsR0FBTCxDQUFTK0MsUUFBVCxFQUE5QjtBQUNBLFNBQUsxRixJQUFMLENBQVUyRixrQkFBVixHQUErQixNQUFNLEtBQUtoRCxHQUFMLENBQVNpRCxlQUFULEVBQXJDOztBQUVBLFFBQUksS0FBS3pILElBQUwsQ0FBVTBILHNCQUFkLEVBQXNDO0FBQ3BDLFVBQUksTUFBTSxLQUFLbEQsR0FBTCxDQUFTbUQsYUFBVCxFQUFWLEVBQW9DO0FBQ2xDLFlBQUksT0FBTSxLQUFLbkQsR0FBTCxDQUFTTyxXQUFULEVBQU4sS0FBZ0MsRUFBcEMsRUFBd0M7QUFFdEMsZUFBS0MsR0FBTCxDQUFTQyxJQUFULENBQWMsc0RBQWQ7QUFDQSxnQkFBTSxLQUFLVCxHQUFMLENBQVNvRCxrQkFBVCxDQUE0QixHQUE1QixFQUFpQyxDQUFDLENBQUMsS0FBSzVILElBQUwsQ0FBVTZILDBCQUE3QyxDQUFOO0FBQ0Q7O0FBRUQsYUFBSzdDLEdBQUwsQ0FBU1EsSUFBVCxDQUFjLHNGQUFkO0FBQ0EsY0FBTSxLQUFLaEIsR0FBTCxDQUFTc0QsaUJBQVQsQ0FBMkIsS0FBM0IsQ0FBTjtBQUNBLGFBQUtDLDJCQUFMLEdBQW1DLElBQW5DO0FBQ0QsT0FWRCxNQVVPO0FBQ0wsYUFBSy9DLEdBQUwsQ0FBU1EsSUFBVCxDQUFjLHNDQUFkO0FBQ0Q7QUFDRjs7QUFHRCxVQUFNLEtBQUt3QyxPQUFMLEVBQU47QUFHQSxTQUFLQyxTQUFMLEdBQWlCLElBQUkvRyx3QkFBUStHLFNBQVosQ0FBc0IsS0FBS3pELEdBQTNCLEVBQWdDLEtBQUt4RSxJQUFMLENBQVVzRCxhQUExQyxFQUF5RCxLQUFLdEQsSUFBTCxDQUFVa0ksU0FBbkUsQ0FBakI7QUFDQSxVQUFNLEtBQUtELFNBQUwsQ0FBZUUsS0FBZixDQUFxQixLQUFLbkksSUFBTCxDQUFVb0YsVUFBL0IsRUFBMkMsS0FBS3BGLElBQUwsQ0FBVThDLHNCQUFyRCxFQUE2RSxLQUFLOUMsSUFBTCxDQUFVb0ksY0FBdkYsQ0FBTjtBQUVBLFNBQUtILFNBQUwsQ0FBZUksb0JBQWYsQ0FBb0NDLEtBQXBDLENBQTBDLE1BQU9DLEdBQVAsSUFBZTtBQUN2RCxVQUFJLENBQUMsS0FBS04sU0FBTCxDQUFlTyx3QkFBcEIsRUFBOEM7QUFDNUMsY0FBTSxLQUFLQyx1QkFBTCxDQUE2QkYsR0FBN0IsQ0FBTjtBQUNEO0FBQ0YsS0FKRDs7QUFNQSxRQUFJLENBQUMsS0FBS3ZJLElBQUwsQ0FBVTBJLFVBQWYsRUFBMkI7QUFFekIsWUFBTXhILHdCQUFReUgsTUFBUixDQUFlLElBQWYsRUFBcUIsS0FBS25FLEdBQTFCLEVBQStCLEtBQUszQyxJQUFwQyxDQUFOO0FBQ0Q7O0FBSUQsUUFBSSxLQUFLN0IsSUFBTCxDQUFVWSxzQkFBZCxFQUFzQztBQUNwQyxZQUFNLEtBQUtGLFFBQUwsQ0FBY2tJLE1BQWQsQ0FBcUI7QUFBQ2hJLFFBQUFBLHNCQUFzQixFQUFFLEtBQUtaLElBQUwsQ0FBVVk7QUFBbkMsT0FBckIsQ0FBTjtBQUNEOztBQUVELFFBQUksS0FBS21ELGVBQVQsRUFBMEI7QUFFeEIsWUFBTSxLQUFLOEUsa0JBQUwsRUFBTjtBQUNELEtBSEQsTUFHTztBQUNMLFVBQUksS0FBSzdJLElBQUwsQ0FBVW1ELFVBQWQsRUFBMEI7QUFFeEIsY0FBTSxLQUFLMkYsUUFBTCxFQUFOO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJcEQsY0FBS0MsUUFBTCxDQUFjLEtBQUszRixJQUFMLENBQVUrSSxXQUF4QixDQUFKLEVBQTBDO0FBQ3hDLFdBQUsvRCxHQUFMLENBQVNnRSxLQUFULENBQWdCLG1DQUFrQyxLQUFLaEosSUFBTCxDQUFVK0ksV0FBWSxHQUF4RTtBQUNBLFlBQU0sS0FBS0UsY0FBTCxDQUFvQixLQUFLakosSUFBTCxDQUFVK0ksV0FBOUIsQ0FBTjtBQUNEOztBQUVELFVBQU0sS0FBS0csZUFBTCxFQUFOO0FBQ0Q7O0FBRW9CLFFBQWZBLGVBQWUsR0FBSTtBQUN2QixRQUFJLEtBQUtsSixJQUFMLENBQVVtSixXQUFkLEVBQTJCO0FBQ3pCLFVBQUlDLFFBQVEsR0FBRyxLQUFLQyxrQkFBTCxFQUFmO0FBQ0EsVUFBSUMsT0FBTyxHQUFJLEtBQUt0SixJQUFMLENBQVV1SixrQkFBWCxJQUFrQyxJQUFoRDtBQUVBLFdBQUt2RSxHQUFMLENBQVNRLElBQVQsQ0FBZSxvQ0FBbUM0RCxRQUFTLGtCQUFpQkUsT0FBUSxJQUFwRjtBQUdBLFlBQU0sNkJBQWNBLE9BQU8sR0FBRyxHQUF4QixFQUE2QixHQUE3QixFQUFrQyxZQUFZO0FBQ2xELGNBQU0sS0FBS0UsVUFBTCxDQUFnQkosUUFBaEIsQ0FBTjtBQUNELE9BRkssQ0FBTjtBQUdEO0FBQ0Y7O0FBRVksUUFBUHBCLE9BQU8sR0FBSTtBQUlmLFFBQUl5QixVQUFVLEdBQUcsTUFBTXZJLHdCQUFRd0ksYUFBUixDQUFzQixLQUFLbEYsR0FBM0IsRUFBZ0MsS0FBS3hFLElBQXJDLENBQXZCO0FBQ0F3QyxJQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLekMsSUFBbkIsRUFBeUJ5SixVQUF6QjtBQUNBakgsSUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS1osSUFBbkIsRUFBeUI0SCxVQUF6Qjs7QUFHQSxRQUFJLEtBQUt6SixJQUFMLENBQVUySixzQkFBZCxFQUFzQztBQUNwQ3pJLDhCQUFRMEksbUJBQVIsQ0FBNEIsS0FBSzVKLElBQWpDOztBQUVBLFlBQU1rQix3QkFBUXlJLHNCQUFSLENBQ0osS0FBS25GLEdBREQsRUFFSnRELHdCQUFRMkksVUFBUixDQUFtQixLQUFLN0osSUFBTCxDQUFVMkosc0JBQTdCLENBRkksRUFHSixDQUFDRyxzQ0FBRCxDQUhJLENBQU47QUFLRDs7QUFHRCxRQUFJLEtBQUs5SixJQUFMLENBQVUrSixTQUFkLEVBQXlCO0FBQ3ZCLFVBQUlBLFNBQUo7O0FBQ0EsVUFBSTtBQUNGQSxRQUFBQSxTQUFTLEdBQUc3SSx3QkFBUTJJLFVBQVIsQ0FBbUIsS0FBSzdKLElBQUwsQ0FBVStKLFNBQTdCLENBQVo7QUFDRCxPQUZELENBRUUsT0FBTzlELENBQVAsRUFBVTtBQUNWLGFBQUtqQixHQUFMLENBQVNzQixhQUFULENBQXdCLDJDQUEwQ0wsQ0FBQyxDQUFDK0QsT0FBUSxFQUE1RTtBQUNEOztBQUNERCxNQUFBQSxTQUFTLEdBQUcsTUFBTUUsa0JBQUVDLEdBQUYsQ0FBTUgsU0FBUyxDQUFDSSxHQUFWLENBQWVoRixHQUFELElBQVMsS0FBS2pFLE9BQUwsQ0FBYW1FLFlBQWIsQ0FBMEJGLEdBQTFCLEVBQStCMUYsYUFBL0IsQ0FBdkIsQ0FBTixDQUFsQjtBQUNBLFlBQU15Qix3QkFBUWtKLGdCQUFSLENBQXlCTCxTQUF6QixFQUFvQyxLQUFLdkYsR0FBekMsRUFBOEMsS0FBS3hFLElBQW5ELENBQU47QUFDRDs7QUFHRCxRQUFJLENBQUMsS0FBS0EsSUFBTCxDQUFVbUYsR0FBZixFQUFvQjtBQUNsQixVQUFJLEtBQUtuRixJQUFMLENBQVVrRCxTQUFkLEVBQXlCO0FBQ3ZCLGFBQUs4QixHQUFMLENBQVNzQixhQUFULENBQXVCLDZFQUF2QjtBQUNEOztBQUNELFdBQUt0QixHQUFMLENBQVNnRSxLQUFULENBQWUseURBQWY7O0FBQ0EsVUFBSSxLQUFLaEosSUFBTCxDQUFVNkQsU0FBZCxFQUF5QjtBQUN2QixjQUFNM0Msd0JBQVFtSixRQUFSLENBQWlCLEtBQUs3RixHQUF0QixFQUEyQixLQUFLeEUsSUFBaEMsQ0FBTjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsUUFBSSxDQUFDLEtBQUtBLElBQUwsQ0FBVThELGFBQWYsRUFBOEI7QUFDNUIsWUFBTSxLQUFLVSxHQUFMLENBQVM4RixZQUFULENBQXNCLEtBQUt0SyxJQUFMLENBQVVvRixVQUFoQyxDQUFOO0FBQ0Q7O0FBQ0QsVUFBTWxFLHdCQUFRcUosVUFBUixDQUFtQixLQUFLL0YsR0FBeEIsRUFBNkIsS0FBS3hFLElBQWxDLENBQU47QUFDQSxVQUFNd0sscUJBQXFCLEdBQUcsTUFBTXRKLHdCQUFRdUosV0FBUixDQUFvQixLQUFLekssSUFBTCxDQUFVMEssUUFBOUIsRUFBd0MsS0FBS2xHLEdBQTdDLEVBQWtELEtBQUt4RSxJQUF2RCxDQUFwQzs7QUFDQSxRQUFJLEtBQUtBLElBQUwsQ0FBVTBLLFFBQWQsRUFBd0I7QUFDdEIsV0FBSzFKLFVBQUwsQ0FBZ0IsS0FBS2hCLElBQUwsQ0FBVTBLLFFBQTFCLElBQXNDRixxQkFBdEM7QUFDRDs7QUFJRCxRQUFJLENBQUNoSyxnQkFBRWtELFdBQUYsQ0FBYyxLQUFLMUQsSUFBTCxDQUFVMkssaUJBQXhCLENBQUwsRUFBaUQ7QUFDL0MsWUFBTSxLQUFLQyxvQkFBTCxDQUEwQixLQUFLNUssSUFBL0IsQ0FBTjtBQUNEO0FBQ0Y7O0FBRW9CLFFBQWZzRixlQUFlLEdBQUk7QUFDdkIsU0FBS04sR0FBTCxDQUFTZ0UsS0FBVCxDQUFlLDBDQUFmOztBQUNBLFFBQUksRUFBRSxNQUFNNkIsWUFBR0MsTUFBSCxDQUFVLEtBQUs5SyxJQUFMLENBQVVtRixHQUFwQixDQUFSLENBQUosRUFBdUM7QUFDckMsV0FBS0gsR0FBTCxDQUFTc0IsYUFBVCxDQUF3Qiw2QkFBNEIsS0FBS3RHLElBQUwsQ0FBVW1GLEdBQUksRUFBbEU7QUFDRDtBQUNGOztBQUV3QixRQUFuQk0sbUJBQW1CLEdBQUk7QUFDM0IsU0FBS1QsR0FBTCxDQUFTZ0UsS0FBVCxDQUFlLG1EQUFmOztBQUNBLFFBQUksRUFBRSxNQUFNLEtBQUt4RSxHQUFMLENBQVN1RyxLQUFULENBQWUsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLFVBQWYsRUFBMkIsS0FBSy9LLElBQUwsQ0FBVW9GLFVBQXJDLENBQWYsQ0FBUixDQUFKLEVBQStFO0FBQzdFLFdBQUtKLEdBQUwsQ0FBU3NCLGFBQVQsQ0FBd0IsMEJBQXlCLEtBQUt0RyxJQUFMLENBQVVvRixVQUFXLGdCQUF0RTtBQUNEO0FBQ0Y7O0FBR2lDLFFBQTVCMEIsNEJBQTRCLENBQUVrRSxRQUFGLEVBQVk7QUFDNUMsVUFBTSxLQUFLL0MsU0FBTCxDQUFlZ0QsVUFBZixDQUEwQiwyQkFBMUIsRUFBdUQ7QUFBQ0MsTUFBQUEsY0FBYyxFQUFFRjtBQUFqQixLQUF2RCxDQUFOO0FBQ0Q7O0FBRWtCLFFBQWI5RSxhQUFhLEdBQUk7QUFBQTs7QUFDckIsU0FBS2xCLEdBQUwsQ0FBU2dFLEtBQVQsQ0FBZSw4QkFBZjs7QUFFQSxRQUFJO0FBQ0YsVUFBSSxDQUFDeEksZ0JBQUUySyxPQUFGLENBQVUsS0FBS0MsMEJBQWYsQ0FBTCxFQUFpRDtBQUMvQyxjQUFNLEtBQUtDLG1CQUFMLEVBQU47QUFDRDtBQUNGLEtBSkQsQ0FJRSxPQUFPbEYsR0FBUCxFQUFZLENBQUU7O0FBRWhCLFVBQU1qRix3QkFBUW9LLGlDQUFSLENBQTBDLEtBQUtDLE1BQS9DLEVBQXVELEtBQUszSixTQUE1RCxDQUFOO0FBRUEsVUFBTSxLQUFLNEoseUJBQUwsRUFBTjtBQUVBLFVBQU0sTUFBTXRGLGFBQU4sRUFBTjs7QUFFQSxRQUFJLEtBQUsrQixTQUFULEVBQW9CO0FBQUE7O0FBRWxCLFlBQU0sS0FBS3dELHVCQUFMLEVBQU47O0FBQ0EsVUFBSSxLQUFLekwsSUFBTCxDQUFVMEwsZUFBVixJQUE2QixLQUFLMUwsSUFBTCxDQUFVMkwsYUFBdkMsSUFBd0QsS0FBSzVFLFVBQWpFLEVBQTZFO0FBQUE7O0FBQzNFLGFBQUsvQixHQUFMLENBQVNnRSxLQUFULENBQWdCLG9CQUFtQixLQUFLakMsVUFBVyxFQUFuRDtBQUNBLDRCQUFNLEtBQUt2QyxHQUFYLDhDQUFNLFVBQVVvSCxNQUFWLENBQWlCLEtBQUs3RSxVQUF0QixDQUFOO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDLEtBQUtoRCxlQUFOLElBQXlCLENBQUMsS0FBSy9ELElBQUwsQ0FBVTZMLGtCQUF4QyxFQUE0RDtBQUFBOztBQUMxRCw2QkFBTSxLQUFLckgsR0FBWCwrQ0FBTSxXQUFVc0gsU0FBVixDQUFvQixLQUFLOUwsSUFBTCxDQUFVb0YsVUFBOUIsQ0FBTjtBQUNEOztBQUNELDJCQUFNLEtBQUtaLEdBQVgsK0NBQU0sV0FBVXVILFFBQVYsRUFBTjs7QUFDQSxVQUFJLEtBQUsvTCxJQUFMLENBQVVrRCxTQUFWLElBQXVCLENBQUMsS0FBS2xELElBQUwsQ0FBVThELGFBQWxDLElBQW1ELENBQUMsS0FBS3lCLFdBQTdELEVBQTBFO0FBQUE7O0FBQ3hFLDZCQUFNLEtBQUtmLEdBQVgsK0NBQU0sV0FBVThGLFlBQVYsQ0FBdUIsS0FBS3RLLElBQUwsQ0FBVW9GLFVBQWpDLENBQU47QUFDRDs7QUFDRCxZQUFNLEtBQUs2QyxTQUFMLENBQWUrRCxRQUFmLEVBQU47QUFDQSxXQUFLL0QsU0FBTCxHQUFpQixJQUFqQjtBQUNELEtBaEJELE1BZ0JPO0FBQ0wsV0FBS2pELEdBQUwsQ0FBU2dFLEtBQVQsQ0FBZSxrREFBZjtBQUNEOztBQUdELHlCQUFNLEtBQUt4RSxHQUFYLCtDQUFNLFdBQVV5SCxVQUFWLEVBQU47O0FBQ0EsUUFBSSxLQUFLeEksa0JBQVQsRUFBNkI7QUFBQTs7QUFDM0IsMkJBQU0sS0FBS2UsR0FBWCwrQ0FBTSxXQUFVc0gsU0FBVixDQUFvQixrQkFBcEIsQ0FBTjtBQUNEOztBQUNELFFBQUksS0FBSy9ELDJCQUFULEVBQXNDO0FBQUE7O0FBQ3BDLFdBQUsvQyxHQUFMLENBQVNRLElBQVQsQ0FBYyxrQ0FBZDtBQUNBLDJCQUFNLEtBQUtoQixHQUFYLCtDQUFNLFdBQVVzRCxpQkFBVixDQUE0QixJQUE1QixDQUFOOztBQUdBLFVBQUksc0JBQU0sS0FBS3RELEdBQVgsK0NBQU0sV0FBVU8sV0FBVixFQUFOLE1BQWlDLEVBQXJDLEVBQXlDO0FBQUE7O0FBQ3ZDLGFBQUtDLEdBQUwsQ0FBU1EsSUFBVCxDQUFjLGlFQUFkO0FBQ0EsNkJBQU0sS0FBS2hCLEdBQVgsK0NBQU0sV0FBVTBILHlCQUFWLENBQW9DLENBQUMsQ0FBQyxLQUFLbE0sSUFBTCxDQUFVNkgsMEJBQWhELENBQU47QUFDRDtBQUNGOztBQUVELFFBQUksS0FBSzdILElBQUwsQ0FBVW1FLE1BQWQsRUFBc0I7QUFBQTs7QUFDcEIsVUFBSWdJLE9BQU8sR0FBRyxLQUFLbk0sSUFBTCxDQUFVb0csR0FBVixDQUFjSyxPQUFkLENBQXNCLEdBQXRCLEVBQTJCLEVBQTNCLENBQWQ7QUFDQSxXQUFLekIsR0FBTCxDQUFTZ0UsS0FBVCxDQUFnQixxQkFBb0JtRCxPQUFRLEdBQTVDO0FBQ0EsNEJBQU0sS0FBSzNILEdBQVgsZ0RBQU0sWUFBVTRILFlBQVYsQ0FBdUJELE9BQXZCLENBQU47QUFDRDtBQUNGOztBQUV5QixRQUFwQnZCLG9CQUFvQixHQUFJO0FBQzVCLFFBQUl5QixXQUFXLEdBQUcsS0FBS3JNLElBQUwsQ0FBVTJLLGlCQUE1QjtBQUNBLFNBQUszRixHQUFMLENBQVNRLElBQVQsQ0FBYyxrQ0FBZDtBQUNBLFFBQUk4RyxJQUFJLEdBQUdELFdBQVcsQ0FBQ0MsSUFBdkI7O0FBQ0EsUUFBSTlMLGdCQUFFa0QsV0FBRixDQUFjNEksSUFBZCxDQUFKLEVBQXlCO0FBQ3ZCLFdBQUt0SCxHQUFMLENBQVNDLElBQVQsQ0FBZSwyREFBMERzSCxJQUFJLENBQUNDLFNBQUwsQ0FBZUgsV0FBZixDQUE0QixFQUFyRztBQUNBLGFBQU8sS0FBUDtBQUNEOztBQUNELFFBQUlJLFVBQVUsR0FBSSxjQUFhLEtBQUt6TSxJQUFMLENBQVVvRixVQUFXLGVBQXBEO0FBQ0EsUUFBSXNILFVBQVUsR0FBSSxHQUFFRCxVQUFXLElBQUdILElBQUssTUFBdkM7QUFDQSxRQUFJSyxTQUFTLEdBQUksUUFBT0wsSUFBSyxNQUE3QjtBQUNBLFFBQUlNLE9BQU8sR0FBRyxLQUFLQyxlQUFMLEVBQWQ7QUFDQUQsSUFBQUEsT0FBTyxDQUFDRSxLQUFSLENBQWNULFdBQVcsQ0FBQ1UsS0FBMUI7QUFDQSxTQUFLL0gsR0FBTCxDQUFTUSxJQUFULENBQWUsMENBQXlDbUgsU0FBVSxFQUFsRTtBQUNBQyxJQUFBQSxPQUFPLENBQUNJLE1BQVIsQ0FBZUwsU0FBZjtBQUNBLFNBQUszSCxHQUFMLENBQVNRLElBQVQsQ0FBZSx3Q0FBdUNpSCxVQUFXLEVBQWpFO0FBQ0EsVUFBTSxLQUFLakksR0FBTCxDQUFTdUcsS0FBVCxDQUFlLENBQUMsT0FBRCxFQUFVLElBQVYsRUFBZ0IwQixVQUFoQixDQUFmLENBQU47QUFDQSxTQUFLekgsR0FBTCxDQUFTUSxJQUFULENBQWUsMkJBQTBCa0gsVUFBVyxFQUFwRDtBQUNBLFVBQU0sS0FBS2xJLEdBQUwsQ0FBU04sSUFBVCxDQUFjeUksU0FBZCxFQUF5QkQsVUFBekIsQ0FBTjs7QUFDQSxRQUFJO0FBQ0YsV0FBSzFILEdBQUwsQ0FBU1EsSUFBVCxDQUFlLG9EQUFmOztBQUNBLFVBQUksTUFBTXFGLFlBQUdDLE1BQUgsQ0FBVTZCLFNBQVYsQ0FBVixFQUFnQztBQUM5QixjQUFNOUIsWUFBR29DLE1BQUgsQ0FBVU4sU0FBVixDQUFOO0FBQ0Q7QUFDRixLQUxELENBS0UsT0FBTzFHLENBQVAsRUFBVTtBQUNWLFdBQUtqQixHQUFMLENBQVNDLElBQVQsQ0FBZSx5Q0FBd0MwSCxTQUFVLEVBQWpFO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBRURFLEVBQUFBLGVBQWUsR0FBSTtBQUlqQixXQUFPLElBQUlLLDRDQUFKLEVBQVA7QUFDRDs7QUFFRHRELEVBQUFBLG1CQUFtQixDQUFFL0gsSUFBRixFQUFRO0FBQ3pCLFFBQUksQ0FBQyxNQUFNK0gsbUJBQU4sQ0FBMEIvSCxJQUExQixDQUFMLEVBQXNDO0FBQ3BDLGFBQU8sS0FBUDtBQUNEOztBQUNELFFBQUksQ0FBQyxDQUFDQSxJQUFJLENBQUM4RSxXQUFOLElBQXFCLENBQUN6Rix3QkFBUXdGLGVBQVIsQ0FBd0I3RSxJQUFJLENBQUM4RSxXQUE3QixDQUF2QixLQUFxRSxDQUFDOUUsSUFBSSxDQUFDc0QsR0FBM0UsSUFBa0YsQ0FBQ3RELElBQUksQ0FBQ3VELFVBQTVGLEVBQXdHO0FBQ3RHLFdBQUtKLEdBQUwsQ0FBU3NCLGFBQVQsQ0FBdUIsZ0ZBQXZCO0FBQ0Q7O0FBQ0QsV0FBT3BGLHdCQUFRMEksbUJBQVIsQ0FBNEIvSCxJQUE1QixDQUFQO0FBQ0Q7O0FBRURzTCxFQUFBQSxXQUFXLENBQUV2TCxTQUFGLEVBQWE7QUFDdEIsVUFBTXVMLFdBQU4sQ0FBa0J2TCxTQUFsQjtBQUVBLFdBQU8sS0FBS3RCLGNBQVo7QUFDRDs7QUFFRDhNLEVBQUFBLGlCQUFpQixDQUFFeEwsU0FBRixFQUFhO0FBQzVCLFVBQU13TCxpQkFBTixDQUF3QnhMLFNBQXhCO0FBRUEsV0FBTyxLQUFLckIsYUFBWjtBQUNEOztBQUVEOE0sRUFBQUEsUUFBUSxDQUFFekwsU0FBRixFQUFhO0FBQ25CLFVBQU15TCxRQUFOLENBQWV6TCxTQUFmO0FBR0EsV0FBT3BCLGdCQUFFOE0sVUFBRixDQUFhLEtBQUtDLFdBQWxCLENBQVA7QUFDRDs7QUEvZG9DOzs7ZUFtZXhCMU4sYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGhlbHBlcnMsIGVuc3VyZU5ldHdvcmtTcGVlZCxcbiAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn0gZnJvbSAnLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTaGFyZWRQcmVmc0J1aWxkZXIgfSBmcm9tICdzaGFyZWQtcHJlZmVyZW5jZXMtYnVpbGRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBERVZJQ0VfUE9SVCA9IDQ3MjQ7XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvXG4vLyBDaHJvbWVkcml2ZXJcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG5dO1xuXG5jbGFzcyBBbmRyb2lkRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJy1hbmRyb2lkIHVpYXV0b21hdG9yJ1xuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ29uc3RyYWludHM7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBfLmNsb25lKE5PX1BST1hZKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9O1xuICAgIHRoaXMudW5sb2NrZXIgPSBoZWxwZXJzLnVubG9ja2VyO1xuXG4gICAgZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEFuZHJvaWREcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbiAgICB9XG5cbiAgICAvLyBuZWVkcyB0byBiZSBhZnRlciB0aGUgbGluZSB3aGljaCBhc3NpZ25zIGNvbW1hbmRzIHRvIEFuZHJvaWREcml2ZXIucHJvdG90eXBlLCBzbyB0aGF0IGB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZWAgaXMgZGVmaW5lZC5cbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIC8vIHRoZSB3aG9sZSBjcmVhdGVTZXNzaW9uIGZsb3cgaXMgc3Vycm91bmRlZCBpbiBhIHRyeS1jYXRjaCBzdGF0ZW1lbnRcbiAgICAvLyBpZiBjcmVhdGluZyBhIHNlc3Npb24gZmFpbHMgYXQgYW55IHBvaW50LCB3ZSB0ZWFyZG93biBldmVyeXRoaW5nIHdlXG4gICAgLy8gc2V0IHVwIGJlZm9yZSB0aHJvd2luZyB0aGUgZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2Fwc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICAvLyBhc3NpZ25pbmcgZGVmYXVsdHNcbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICAgZmxhZ3M6ICcweDEwMjAwMDAwJyxcbiAgICAgICAgZGlzYWJsZUFuZHJvaWRXYXRjaGVyczogZmFsc2UsXG4gICAgICAgIHRtcERpcjogYXdhaXQgdGVtcERpci5zdGF0aWNEaXIoKSxcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYm9vdHN0cmFwUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDAsXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcbiAgICAgIHRoaXMudXNlVW5sb2NrSGVscGVyQXBwID0gXy5pc1VuZGVmaW5lZCh0aGlzLmNhcHMudW5sb2NrVHlwZSk7XG5cbiAgICAgIC8vIG5vdCB1c2VyIHZpc2libGUgdmlhIGNhcHNcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmZhc3RSZXNldCA9ICF0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMubm9SZXNldDtcbiAgICAgIHRoaXMub3B0cy5za2lwVW5pbnN0YWxsID0gdGhpcy5vcHRzLmZhc3RSZXNldCB8fCB0aGlzLm9wdHMubm9SZXNldDtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzKHRoaXMub3B0cyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgICB0aGlzLmp3cFByb3h5QXZvaWQucHVzaChbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAgIC8vIHNldCB1cCBhbiBpbnN0YW5jZSBvZiBBREJcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVBREIoe1xuICAgICAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICAgICAgZW1Qb3J0OiB0aGlzLm9wdHMuZW1Qb3J0LFxuICAgICAgICBhZGJQb3J0OiB0aGlzLm9wdHMuYWRiUG9ydCxcbiAgICAgICAgc3VwcHJlc3NLaWxsU2VydmVyOiB0aGlzLm9wdHMuc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgICAgICByZW1vdGVBZGJIb3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCxcbiAgICAgICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydDogdGhpcy5vcHRzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgICAgIGFkYkV4ZWNUaW1lb3V0OiB0aGlzLm9wdHMuYWRiRXhlY1RpbWVvdXQsXG4gICAgICAgIGFsbG93T2ZmbGluZURldmljZXM6IHRoaXMub3B0cy5hbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDIzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXCJDb25zaWRlciBzZXR0aW5nICdhdXRvbWF0aW9uTmFtZScgY2FwYWJpbGl0eSB0byBcIiArXG4gICAgICAgICAgXCIndWlhdXRvbWF0b3IyJyBvbiBBbmRyb2lkID49IDYsIHNpbmNlIFVJQXV0b21hdG9yIGZyYW1ld29yayBcIiArXG4gICAgICAgICAgJ2lzIG5vdCBtYWludGFpbmVkIGFueW1vcmUgYnkgdGhlIE9TIHZlbmRvci4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgICAvLyB1c2VyIHByb3ZpZGVkIHBhY2thZ2UgaW5zdGVhZCBvZiBhcHAgZm9yICdhcHAnIGNhcGFiaWxpdHksIG1hc3NhZ2Ugb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHA7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VQcmVzZW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWUgY2xvdWQgc2VydmljZXMgdXNpbmcgYXBwaXVtIGxhdW5jaCB0aGUgYXZkIHRoZW1zZWx2ZXMsIHNvIHdlIGVuc3VyZSBuZXRzcGVlZFxuICAgICAgLy8gaXMgc2V0IGZvciBlbXVsYXRvcnMgYnkgY2FsbGluZyBhZGIubmV0d29ya1NwZWVkIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSwgbmV0d29ya1NwZWVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ldHdvcmtTcGVlZCA9IGVuc3VyZU5ldHdvcmtTcGVlZCh0aGlzLmFkYiwgdGhpcy5vcHRzLm5ldHdvcmtTcGVlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5ISBncHNFbmFibGVkIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRBbmRyb2lkU2Vzc2lvbih0aGlzLm9wdHMpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JpbmcgZGVsZXRlIHNlc3Npb24gZXhjZXB0aW9uIGlmIGFueSBhbmQgdGhyb3cgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIHRoYXQgaGFwcGVuZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHNlc3Npb24uXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcE9uRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApIHx8ICghdGhpcy5vcHRzLmFwcCAmJlxuICAgICAgICAgICB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpKTtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdpZ25vcmVVbmltcG9ydGFudFZpZXdzJykge1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFuZHJvaWRTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBBbmRyb2lkIHNlc3Npb25gKTtcbiAgICAvLyBzZXQgdXAgdGhlIGRldmljZSB0byBydW4gb24gKHJlYWwgb3IgZW11bGF0b3IsIGV0YylcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzLlxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5TaXplKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0TW9kZWwoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gYXdhaXQgdGhpcy5hZGIuZ2V0TWFudWZhY3R1cmVyKCk7XG5cbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQVBJIGxldmVsIDI4IGlzIEFuZHJvaWQgUFxuICAgICAgICAgIC8vIERvbid0IGZvcmdldCB0byByZXNldCB0aGUgcmVsYXhpbmcgaW4gZGVsZXRlIHNlc3Npb25cbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeSB0byBtYW5hZ2UgYW5pbWF0aW9uIHNjYWxlJyk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIHdpbmRvdyBhbmltYXRpb24gYXMgaXQgaXMgcmVxdWVzdGVkIGJ5IFwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvblwiIGNhcGFiaWxpdHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIHN0YXJ0IFVpQXV0b21hdG9yXG4gICAgdGhpcy5ib290c3RyYXAgPSBuZXcgaGVscGVycy5ib290c3RyYXAodGhpcy5hZGIsIHRoaXMub3B0cy5ib290c3RyYXBQb3J0LCB0aGlzLm9wdHMud2Vic29ja2V0KTtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zdGFydCh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdGhpcy5vcHRzLmRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsIHRoaXMub3B0cy5hY2NlcHRTc2xDZXJ0cyk7XG4gICAgLy8gaGFuZGxpbmcgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIHRoaXMuYm9vdHN0cmFwLm9uVW5leHBlY3RlZFNodXRkb3duLmNhdGNoKGFzeW5jIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIGlmICghdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIExldCdzIHRyeSB0byB1bmxvY2sgdGhlIGRldmljZVxuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZSBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzIG9iamVjdFxuICAgIC8vIHRoaXMgaGFzIHRvIGhhcHBlbiBfYWZ0ZXJfIGJvb3RzdHJhcCBpcyBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3cykge1xuICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uIGFuZCBwcm94eSB0byBpdFxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoKSB7XG4gICAgICAgIC8vIHN0YXJ0IGFwcFxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdEF1dG9XZWJ2aWV3KCk7XG4gIH1cblxuICBhc3luYyBpbml0QXV0b1dlYnZpZXcgKCkge1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxldCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBsZXQgdGltZW91dCA9ICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0KSB8fCAyMDAwO1xuXG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuXG4gICAgICAvLyB0cnkgZXZlcnkgNTAwbXMgdW50aWwgdGltZW91dCBpcyBvdmVyXG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQodmlld05hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gcG9wdWxhdGUgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHksXG4gICAgLy8gYW5kIHRoZSBkZXZpY2UgYmVpbmcgdXNlZFxuICAgIC8vIGluIHRoZSBvcHRzIGFuZCBjYXBzIChzbyBpdCBnZXRzIGJhY2sgdG8gdGhlIHVzZXIgb24gc2Vzc2lvbiBjcmVhdGlvbilcbiAgICBsZXQgbGF1bmNoSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgbGF1bmNoSW5mbyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNhcHMsIGxhdW5jaEluZm8pO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgLy8gT25seSBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIHBhY2thZ2UgaXMgdXNlZCBieSBVSUExXG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBBUFBfRVhURU5TSU9OKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFsbCBhcHBcbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBjb25zdCBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UgPSBhd2FpdCBoZWxwZXJzLnB1c2hTdHJpbmdzKHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgaWYgKHRoaXMub3B0cy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtdXN0IHJ1biBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcGssIG90aGVyd2lzZSBpdCB3b3VsZCBjYXVzZSB0aGVcbiAgICAvLyBpbnN0YWxsIHRvIGZhaWwuIEFuZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwLlxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFNoYXJlZFByZWZlcmVuY2VzKHRoaXMub3B0cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJHt0aGlzLm9wdHMuYXBwfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGFja2FnZVByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIHBhY2thZ2UgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlJyk7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgdGhpcy5vcHRzLmFwcFBhY2thZ2VdKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHBhY2thZ2UgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gb24gdGhlIGRldmljZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2VcbiAgYXN5bmMgc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSAoY29tcHJlc3MpIHtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5Jywge2NvbXByZXNzTGF5b3V0OiBjb21wcmVzc30pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gQW5kcm9pZCBkcml2ZXInKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBoZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG5cbiAgICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAgIC8vIGNlcnRhaW4gY2xlYW51cCB3ZSBvbmx5IGNhcmUgdG8gZG8gaWYgdGhlIGJvb3RzdHJhcCB3YXMgZXZlciBydW5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAke3RoaXMuZGVmYXVsdElNRX1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5nb1RvSG9tZSgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2h1dGRvd24oKTtcbiAgICAgIHRoaXMuYm9vdHN0cmFwID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoXCJDYWxsZWQgZGVsZXRlU2Vzc2lvbiBidXQgYm9vdHN0cmFwIHdhc24ndCBhY3RpdmVcIik7XG4gICAgfVxuICAgIC8vIHNvbWUgY2xlYW51cCB3ZSB3YW50IHRvIGRvIHJlZ2FyZGxlc3MsIGluIGNhc2Ugd2UgYXJlIHNodXR0aW5nIGRvd25cbiAgICAvLyBtaWQtc3RhcnR1cFxuICAgIGF3YWl0IHRoaXMuYWRiPy5zdG9wTG9nY2F0KCk7XG4gICAgaWYgKHRoaXMudXNlVW5sb2NrSGVscGVyQXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKCdpby5hcHBpdW0udW5sb2NrJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcblxuICAgICAgLy8gVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSBhbmltYXRpb24gc2NhbGUgb3ZlciBBbmRyb2lkIFAuIFdlIG11c3QgcmVzZXQgdGhlIHBvbGljeSBmb3IgdGhlIHNlY3VyaXR5LlxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiPy5nZXRBcGlMZXZlbCgpID49IDI4KSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8ua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldFNoYXJlZFByZWZlcmVuY2VzICgpIHtcbiAgICBsZXQgc2hhcmVkUHJlZnMgPSB0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXM7XG4gICAgdGhpcy5sb2cuaW5mbygnVHJ5aW5nIHRvIHNldCBzaGFyZWQgcHJlZmVyZW5jZXMnKTtcbiAgICBsZXQgbmFtZSA9IHNoYXJlZFByZWZzLm5hbWU7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFNraXBwaW5nIHNldHRpbmcgU2hhcmVkIHByZWZlcmVuY2VzLCBuYW1lIGlzIHVuZGVmaW5lZDogJHtKU09OLnN0cmluZ2lmeShzaGFyZWRQcmVmcyl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZW1vdGVQYXRoID0gYC9kYXRhL2RhdGEvJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0vc2hhcmVkX3ByZWZzYDtcbiAgICBsZXQgcmVtb3RlRmlsZSA9IGAke3JlbW90ZVBhdGh9LyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgbG9jYWxQYXRoID0gYC90bXAvJHtuYW1lfS54bWxgO1xuICAgIGxldCBidWlsZGVyID0gdGhpcy5nZXRQcmVmc0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLmJ1aWxkKHNoYXJlZFByZWZzLnByZWZzKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyB0ZW1wb3Jhcnkgc2hhcmVkIHByZWZlcmVuY2VzOiAke2xvY2FsUGF0aH1gKTtcbiAgICBidWlsZGVyLnRvRmlsZShsb2NhbFBhdGgpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHNoYXJlZF9wcmVmcyByZW1vdGUgZm9sZGVyOiAke3JlbW90ZVBhdGh9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydta2RpcicsICctcCcsIHJlbW90ZVBhdGhdKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBQdXNoaW5nIHNoYXJlZF9wcmVmcyB0byAke3JlbW90ZUZpbGV9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZUZpbGUpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gcmVtb3ZlIHNoYXJlZCBwcmVmZXJlbmNlcyB0ZW1wb3JhcnkgZmlsZWApO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbFBhdGgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHRyeWluZyB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGUgJHtsb2NhbFBhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJlZnNCdWlsZGVyICgpIHtcbiAgICAvKiBBZGQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFNoYXJlZFByZWZzQnVpbGRlciBpbnN0ZWFkIG9mXG4gICAgICogZGlyZWN0bHkgY3JlYXRpbmcgdGhlIG9iamVjdCBvbiBzZXRTaGFyZWRQcmVmZXJlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgICovXG4gICAgcmV0dXJuIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIoKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCghY2Fwcy5icm93c2VyTmFtZSB8fCAhaGVscGVycy5pc0Nocm9tZUJyb3dzZXIoY2Fwcy5icm93c2VyTmFtZSkpICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgbXVzdCBpbmNsdWRlIGVpdGhlciBhbiBhcHAsIGFwcFBhY2thZ2Ugb3IgYnJvd3Nlck5hbWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHRoaXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIENocm9tZURyaXZlciBzdGF0dXNcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHRoaXMucHJveHlSZXFSZXMpO1xuICB9XG59XG5cbmV4cG9ydCB7IEFuZHJvaWREcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
509
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIkFQUF9FWFRFTlNJT04iLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQW5kcm9pZERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImRlc2lyZWRDb25zdHJhaW50cyIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiandwUHJveHlBY3RpdmUiLCJqd3BQcm94eUF2b2lkIiwiXyIsImNsb25lIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsImFwa1N0cmluZ3MiLCJ1bmxvY2tlciIsImhlbHBlcnMiLCJjbWQiLCJmbiIsInRvUGFpcnMiLCJjb21tYW5kcyIsInByb3RvdHlwZSIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsIk9iamVjdCIsImFzc2lnbiIsImRlZmF1bHRPcHRzIiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJmbGFncyIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJ0bXBEaXIiLCJ0ZW1wRGlyIiwic3RhdGljRGlyIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYm9vdHN0cmFwUG9ydCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwidXNlVW5sb2NrSGVscGVyQXBwIiwiaXNVbmRlZmluZWQiLCJ1bmxvY2tUeXBlIiwibm9SZXNldCIsImZhc3RSZXNldCIsInNraXBVbmluc3RhbGwiLCJpc0Nocm9tZVNlc3Npb24iLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwicHVzaCIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJ1ZGlkIiwiZW1Qb3J0IiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwiYWRiIiwiY3JlYXRlQURCIiwic3VwcHJlc3NLaWxsU2VydmVyIiwicmVtb3RlQWRiSG9zdCIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJhZGJFeGVjVGltZW91dCIsImFsbG93T2ZmbGluZURldmljZXMiLCJnZXRBcGlMZXZlbCIsImxvZyIsIndhcm4iLCJpc1BhY2thZ2VPckJ1bmRsZSIsImFwcCIsImFwcFBhY2thZ2UiLCJjb25maWd1cmVBcHAiLCJjaGVja0FwcFByZXNlbnQiLCJhcHBPbkRldmljZSIsImluZm8iLCJjaGVja1BhY2thZ2VQcmVzZW50IiwidXRpbCIsImhhc1ZhbHVlIiwibmV0d29ya1NwZWVkIiwiaXNFbXVsYXRvciIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwic3RhcnRBbmRyb2lkU2Vzc2lvbiIsImUiLCJkZWxldGVTZXNzaW9uIiwiaWduIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJrZXkiLCJ2YWx1ZSIsInNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkiLCJkZWZhdWx0SU1FIiwiaW5pdERldmljZSIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZVNjcmVlblNpemUiLCJnZXRTY3JlZW5TaXplIiwiZGV2aWNlTW9kZWwiLCJnZXRNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsImdldE1hbnVmYWN0dXJlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJzZXRBbmltYXRpb25TdGF0ZSIsIl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCIsImluaXRBVVQiLCJib290c3RyYXAiLCJ3ZWJzb2NrZXQiLCJzdGFydCIsImFjY2VwdFNzbENlcnRzIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJjYXRjaCIsImVyciIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwic2tpcFVubG9jayIsInVubG9jayIsInVwZGF0ZSIsInN0YXJ0Q2hyb21lU2Vzc2lvbiIsInN0YXJ0QVVUIiwib3JpZW50YXRpb24iLCJkZWJ1ZyIsInNldE9yaWVudGF0aW9uIiwiaW5pdEF1dG9XZWJ2aWV3IiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsInRpbWVvdXQiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwic2h1dGRvd24iLCJzdG9wTG9nY2F0Iiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzaGFyZWRQcmVmcyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVtb3RlUGF0aCIsInJlbW90ZUZpbGUiLCJsb2NhbFBhdGgiLCJidWlsZGVyIiwiZ2V0UHJlZnNCdWlsZGVyIiwiYnVpbGQiLCJwcmVmcyIsInRvRmlsZSIsInVubGluayIsIlNoYXJlZFByZWZzQnVpbGRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImlzRnVuY3Rpb24iLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDb25zdHJhaW50cztcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uY2xvbmUoTk9fUFJPWFkpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307XG4gICAgdGhpcy51bmxvY2tlciA9IGhlbHBlcnMudW5sb2NrZXI7XG5cbiAgICBmb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgQW5kcm9pZERyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBsaW5lIHdoaWNoIGFzc2lnbnMgY29tbWFuZHMgdG8gQW5kcm9pZERyaXZlci5wcm90b3R5cGUsIHNvIHRoYXQgYHRoaXMuZGVmYXVsdENvbnRleHROYW1lYCBpcyBkZWZpbmVkLlxuICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgLy8gdGhlIHdob2xlIGNyZWF0ZVNlc3Npb24gZmxvdyBpcyBzdXJyb3VuZGVkIGluIGEgdHJ5LWNhdGNoIHN0YXRlbWVudFxuICAgIC8vIGlmIGNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlscyBhdCBhbnkgcG9pbnQsIHdlIHRlYXJkb3duIGV2ZXJ5dGhpbmcgd2VcbiAgICAvLyBzZXQgdXAgYmVmb3JlIHRocm93aW5nIHRoZSBlcnJvci5cbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIC8vIGFzc2lnbmluZyBkZWZhdWx0c1xuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogJzB4MTAyMDAwMDAnLFxuICAgICAgICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiBmYWxzZSxcbiAgICAgICAgdG1wRGlyOiBhd2FpdCB0ZW1wRGlyLnN0YXRpY0RpcigpLFxuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBib290c3RyYXBQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMCxcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuICAgICAgdGhpcy51c2VVbmxvY2tIZWxwZXJBcHAgPSBfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy51bmxvY2tUeXBlKTtcblxuICAgICAgLy8gbm90IHVzZXIgdmlzaWJsZSB2aWEgY2Fwc1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgICAgdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgPSB0aGlzLm9wdHMuZmFzdFJlc2V0IHx8IHRoaXMub3B0cy5ub1Jlc2V0O1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHModGhpcy5vcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICAgIHRoaXMuandwUHJveHlBdm9pZC5wdXNoKFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgICAgLy8gc2V0IHVwIGFuIGluc3RhbmNlIG9mIEFEQlxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUFEQih7XG4gICAgICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgICAgICBlbVBvcnQ6IHRoaXMub3B0cy5lbVBvcnQsXG4gICAgICAgIGFkYlBvcnQ6IHRoaXMub3B0cy5hZGJQb3J0LFxuICAgICAgICBzdXBwcmVzc0tpbGxTZXJ2ZXI6IHRoaXMub3B0cy5zdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgICAgIHJlbW90ZUFkYkhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0LFxuICAgICAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0OiB0aGlzLm9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICAgICAgYWRiRXhlY1RpbWVvdXQ6IHRoaXMub3B0cy5hZGJFeGVjVGltZW91dCxcbiAgICAgICAgYWxsb3dPZmZsaW5lRGV2aWNlczogdGhpcy5vcHRzLmFsbG93T2ZmbGluZURldmljZXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjMpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihcIkNvbnNpZGVyIHNldHRpbmcgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIFwiICtcbiAgICAgICAgICBcIid1aWF1dG9tYXRvcjInIG9uIEFuZHJvaWQgPj0gNiwgc2luY2UgVUlBdXRvbWF0b3IgZnJhbWV3b3JrIFwiICtcbiAgICAgICAgICAnaXMgbm90IG1haW50YWluZWQgYW55bW9yZSBieSB0aGUgT1MgdmVuZG9yLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICAgIC8vIHVzZXIgcHJvdmlkZWQgcGFja2FnZSBpbnN0ZWFkIG9mIGFwcCBmb3IgJ2FwcCcgY2FwYWJpbGl0eSwgbWFzc2FnZSBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgQVBQX0VYVEVOU0lPTik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZVByZXNlbnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBjbG91ZCBzZXJ2aWNlcyB1c2luZyBhcHBpdW0gbGF1bmNoIHRoZSBhdmQgdGhlbXNlbHZlcywgc28gd2UgZW5zdXJlIG5ldHNwZWVkXG4gICAgICAvLyBpcyBzZXQgZm9yIGVtdWxhdG9ycyBieSBjYWxsaW5nIGFkYi5uZXR3b3JrU3BlZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcFxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm5ldHdvcmtTcGVlZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5LCBuZXR3b3JrU3BlZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1NwZWVkID0gZW5zdXJlTmV0d29ya1NwZWVkKHRoaXMuYWRiLCB0aGlzLm9wdHMubmV0d29ya1NwZWVkKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcih0aGlzLm9wdHMuZ3BzRW5hYmxlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnkhIGdwc0VuYWJsZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEFuZHJvaWRTZXNzaW9uKHRoaXMub3B0cyk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmluZyBkZWxldGUgc2Vzc2lvbiBleGNlcHRpb24gaWYgYW55IGFuZCB0aHJvdyB0aGUgcmVhbCBlcnJvclxuICAgICAgLy8gdGhhdCBoYXBwZW5lZCB3aGlsZSBjcmVhdGluZyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkgfHwgKCF0aGlzLm9wdHMuYXBwICYmXG4gICAgICAgICAgIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSkpO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2lnbm9yZVVuaW1wb3J0YW50Vmlld3MnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QW5kcm9pZFNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEFuZHJvaWQgc2Vzc2lvbmApO1xuICAgIC8vIHNldCB1cCB0aGUgZGV2aWNlIHRvIHJ1biBvbiAocmVhbCBvciBlbXVsYXRvciwgZXRjKVxuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHMuXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlblNpemUoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRNb2RlbCgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBhd2FpdCB0aGlzLmFkYi5nZXRNYW51ZmFjdHVyZXIoKTtcblxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBUEkgbGV2ZWwgMjggaXMgQW5kcm9pZCBQXG4gICAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSByZWxheGluZyBpbiBkZWxldGUgc2Vzc2lvblxuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIG1hbmFnZSBhbmltYXRpb24gc2NhbGUnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgd2luZG93IGFuaW1hdGlvbiBhcyBpdCBpcyByZXF1ZXN0ZWQgYnkgXCJkaXNhYmxlV2luZG93QW5pbWF0aW9uXCIgY2FwYWJpbGl0eScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gc3RhcnQgVWlBdXRvbWF0b3JcbiAgICB0aGlzLmJvb3RzdHJhcCA9IG5ldyBoZWxwZXJzLmJvb3RzdHJhcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmJvb3RzdHJhcFBvcnQsIHRoaXMub3B0cy53ZWJzb2NrZXQpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgICAvLyBoYW5kbGluZyB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgdGhpcy5ib290c3RyYXAub25VbmV4cGVjdGVkU2h1dGRvd24uY2F0Y2goYXN5bmMgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKCF0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gTGV0J3MgdHJ5IHRvIHVubG9jayB0aGUgZGV2aWNlXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0QXV0b1dlYnZpZXcoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRBdXRvV2VidmlldyAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbGV0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGxldCB0aW1lb3V0ID0gKHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQpIHx8IDIwMDA7XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAke3RoaXMub3B0cy5hcHB9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQYWNrYWdlUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBBbmRyb2lkIGRyaXZlcicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcblxuICAgIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgICAgLy8gY2VydGFpbiBjbGVhbnVwIHdlIG9ubHkgY2FyZSB0byBkbyBpZiB0aGUgYm9vdHN0cmFwIHdhcyBldmVyIHJ1blxuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGI/LmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zaHV0ZG93bigpO1xuICAgICAgdGhpcy5ib290c3RyYXAgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGI/LnN0b3BMb2djYXQoKTtcbiAgICBpZiAodGhpcy51c2VVbmxvY2tIZWxwZXJBcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGI/LmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgc2V0dGluZyBTaGFyZWQgcHJlZmVyZW5jZXMsIG5hbWUgaXMgdW5kZWZpbmVkOiAke0pTT04uc3RyaW5naWZ5KHNoYXJlZFByZWZzKX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW90ZVBhdGggPSBgL2RhdGEvZGF0YS8ke3RoaXMub3B0cy5hcHBQYWNrYWdlfS9zaGFyZWRfcHJlZnNgO1xuICAgIGxldCByZW1vdGVGaWxlID0gYCR7cmVtb3RlUGF0aH0vJHtuYW1lfS54bWxgO1xuICAgIGxldCBsb2NhbFBhdGggPSBgL3RtcC8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGJ1aWxkZXIgPSB0aGlzLmdldFByZWZzQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuYnVpbGQoc2hhcmVkUHJlZnMucHJlZnMpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFB1c2hpbmcgc2hhcmVkX3ByZWZzIHRvICR7cmVtb3RlRmlsZX1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRmlsZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBtdXN0IGluY2x1ZGUgZWl0aGVyIGFuIGFwcCwgYXBwUGFja2FnZSBvciBicm93c2VyTmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gQ2hyb21lRHJpdmVyIHN0YXR1c1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odGhpcy5wcm94eVJlcVJlcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZERyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsSUFBcEI7QUFJQSxNQUFNQyxRQUFRLEdBQUcsQ0FDZixDQUFDLE1BQUQsRUFBUyxJQUFJQyxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQURlLEVBRWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FGZSxFQUdmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyx3QkFBWCxDQUFULENBSGUsRUFJZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBUixDQUplLEVBS2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLCtCQUFYLENBQVQsQ0FMZSxFQU1mLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyxxQ0FBWCxDQUFULENBTmUsRUFPZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkJBQVgsQ0FBVCxDQVBlLEVBUWYsQ0FBQyxLQUFELEVBQVEsSUFB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
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGVBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQW5kcm9pZERyaXZlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWREcml2ZXInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGVBQWpCLENBQVo7O2VBRWVGLEcifQ==
@@ -31,4 +31,4 @@ async function startServer(port, host) {
31
31
  }require('source-map-support').install();
32
32
 
33
33
 
34
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiaG9zdCIsImQiLCJBbmRyb2lkRHJpdmVyIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwic2VydmVyIiwiaG9zdG5hbWUiLCJsb2ciLCJpbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3QztBQUN0QyxNQUFJQyxDQUFDLEdBQUcsSUFBSUMsZUFBSixFQUFSO0FBQ0EsTUFBSUMsd0JBQXdCLEdBQUcsMENBQVdGLENBQVgsQ0FBL0I7QUFDQSxNQUFJRyxNQUFNLEdBQUcsTUFBTSx3QkFBVztBQUFDRCxJQUFBQSx3QkFBRDtBQUEyQkosSUFBQUEsSUFBM0I7QUFBaUNNLElBQUFBLFFBQVEsRUFBRUw7QUFBM0MsR0FBWCxDQUFuQjs7QUFDQU0sa0JBQUlDLElBQUosQ0FBVSw0Q0FBMkNQLElBQUssSUFBR0QsSUFBSyxFQUFsRTs7QUFDQUUsRUFBQUEsQ0FBQyxDQUFDRyxNQUFGLEdBQVdBLE1BQVg7QUFDQSxTQUFPQSxNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEFuZHJvaWREcml2ZXIgZnJvbSAnLi9kcml2ZXInO1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlciAocG9ydCwgaG9zdCkge1xuICBsZXQgZCA9IG5ldyBBbmRyb2lkRHJpdmVyKCk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGQpO1xuICBsZXQgc2VydmVyID0gYXdhaXQgYmFzZVNlcnZlcih7cm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBwb3J0LCBob3N0bmFtZTogaG9zdH0pO1xuICBsb2cuaW5mbyhgQW5kcm9pZERyaXZlciBzZXJ2ZXIgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgZC5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IHN0YXJ0U2VydmVyIH07XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
34
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NlcnZlci5qcyIsIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwicG9ydCIsImhvc3QiLCJkIiwiQW5kcm9pZERyaXZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlcnZlciIsImhvc3RuYW1lIiwibG9nIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBzZXJ2ZXIgYXMgYmFzZVNlcnZlciwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIGFzIG1ha2VSb3V0ZXIgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBBbmRyb2lkRHJpdmVyIGZyb20gJy4vZHJpdmVyJztcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXIgKHBvcnQsIGhvc3QpIHtcbiAgbGV0IGQgPSBuZXcgQW5kcm9pZERyaXZlcigpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihkKTtcbiAgbGV0IHNlcnZlciA9IGF3YWl0IGJhc2VTZXJ2ZXIoe3JvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgcG9ydCwgaG9zdG5hbWU6IGhvc3R9KTtcbiAgbG9nLmluZm8oYEFuZHJvaWREcml2ZXIgc2VydmVyIGxpc3RlbmluZyBvbiBodHRwOi8vJHtob3N0fToke3BvcnR9YCk7XG4gIGQuc2VydmVyID0gc2VydmVyO1xuICByZXR1cm4gc2VydmVyO1xufVxuXG5leHBvcnQgeyBzdGFydFNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3QztFQUN0QyxJQUFJQyxDQUFDLEdBQUcsSUFBSUMsZUFBSixFQUFSO0VBQ0EsSUFBSUMsd0JBQXdCLEdBQUcsMENBQVdGLENBQVgsQ0FBL0I7RUFDQSxJQUFJRyxNQUFNLEdBQUcsTUFBTSx3QkFBVztJQUFDRCx3QkFBRDtJQUEyQkosSUFBM0I7SUFBaUNNLFFBQVEsRUFBRUw7RUFBM0MsQ0FBWCxDQUFuQjs7RUFDQU0sZ0JBQUlDLElBQUosQ0FBVSw0Q0FBMkNQLElBQUssSUFBR0QsSUFBSyxFQUFsRTs7RUFDQUUsQ0FBQyxDQUFDRyxNQUFGLEdBQVdBLE1BQVg7RUFDQSxPQUFPQSxNQUFQO0FBQ0QifQ==
@@ -120,4 +120,4 @@ var _default = UiAutomator;
120
120
  exports.default = _default;require('source-map-support').install();
121
121
 
122
122
 
123
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O0FBRUEsTUFBTUMsV0FBTixTQUEwQkMsZ0JBQU9DLFlBQWpDLENBQThDO0FBQzVDQyxFQUFBQSxXQUFXLENBQUVDLEdBQUYsRUFBTztBQUNoQixRQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNSUCxNQUFBQSxHQUFHLENBQUNRLGFBQUosQ0FBa0IsNENBQWxCO0FBQ0Q7O0FBQ0Q7QUFDQSxTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRSxRQUFMLEdB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QUExQixDQUFiOztBQUNBLFFBQUksQ0FBQ0MsTUFBTCxFQUFhO0FBQ1gsWUFBTSxJQUFJRSxLQUFKLENBQVcsaUNBQWdDSCxVQUFXLEVBQXRELENBQU47QUFDRDs7QUFDRCxRQUFJckIsT0FBTyxHQUFHc0IsTUFBTSxDQUFDLENBQUQsQ0FBcEI7QUFDQXpDLElBQUFBLEdBQUcsQ0FBQ2dCLEtBQUosQ0FBVyxvQkFBbUJHLE9BQVEsR0FBdEM7QUFDQSxXQUFPQSxPQUFQO0FBQ0Q7O0FBRURGLEVBQUFBLFdBQVcsQ0FBRVksS0FBRixFQUFTO0FBQ2xCN0IsSUFBQUEsR0FBRyxDQUFDZ0IsS0FBSixDQUFXLG9CQUFtQmEsS0FBTSxHQUFwQztBQUNBLFNBQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUtPLElBQUwsQ0FBVWpDLFdBQVcsQ0FBQ3lDLGFBQXRCLEVBQXFDO0FBQUNmLE1BQUFBO0FBQUQsS0FBckM7QUFDRDs7QUFFNEIsUUFBdkJQLHVCQUF1QixHQUFJO0FBQy9CLFFBQUk7QUFDRixZQUFNLEtBQUtmLEdBQUwsQ0FBU3NDLG1CQUFULENBQTZCLGFBQTdCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT1YsQ0FBUCxFQUFVO0FBQ1ZuQyxNQUFBQSxHQUFHLENBQUM4QyxJQUFKLENBQVUsb0NBQW1DWCxDQUFFLEVBQS9DO0FBQ0Q7QUFDRjs7QUF6RjJDOzs7QUE2RjlDaEMsV0FBVyxDQUFDa0MsV0FBWixHQUEwQixtQkFBMUI7QUFDQWxDLFdBQVcsQ0FBQ3lDLGFBQVosR0FBNEIsY0FBNUI7QUFDQXpDLFdBQVcsQ0FBQzRCLGNBQVosR0FBNkIsVUFBN0I7QUFDQTVCLFdBQVcsQ0FBQzJCLGFBQVosR0FBNEIsU0FBNUI7QUFDQTNCLFdBQVcsQ0FBQ2UsY0FBWixHQUE2QixVQUE3QjtBQUNBZixXQUFXLENBQUMrQixZQUFaLEdBQTJCLFFBQTNCO2VBSWUvQixXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdVaUF1dG9tYXRvcicpO1xuXG5jbGFzcyBVaUF1dG9tYXRvciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYWRiKSB7XG4gICAgaWYgKCFhZGIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KCdhZGIgaXMgcmVxdWlyZWQgdG8gaW5zdGFudGlhdGUgVWlBdXRvbWF0b3InKTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnRlbXBQYXRoID0gJy9kYXRhL2xvY2FsL3RtcC8nO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgY2xhc3NOYW1lLCBzdGFydERldGVjdG9yLCAuLi5leHRyYVBhcmFtcykge1xuICAgIGxldCBwcm9jZXNzSXNBbGl2ZTtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVaUF1dG9tYXRvcicpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnUGFyc2luZyB1aWF1dG9tYXRvciBqYXInKTtcbiAgICAgIC8vIGV4cGVjdGluZyBhIHBhdGggbGlrZSAvYWRzL2Fkcy9mb28uamFyIG9yIFxcYXNkXFxhc2RcXGZvby5qYXJcbiAgICAgIGxldCBqYXJOYW1lID0gdGhpcy5wYXJzZUphck5hbWVGcm9tUGF0aCh1aUF1dG9tYXRvckJpbmFyeVBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIucHVzaCh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIHRoaXMudGVtcFBhdGgpO1xuXG4gICAgICAvLyBraWxsaW5nIGFueSB1aWF1dG9tYXRvciBleGlzdGluZyBwcm9jZXNzZXNcbiAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcblxuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVSUF1dG9tYXRvcicpO1xuICAgICAgbGV0IGFyZ3MgPSBbJ3NoZWxsJywgJ3VpYXV0b21hdG9yJywgJ3J1bnRlc3QnLCBqYXJOYW1lLCAnLWMnLCBjbGFzc05hbWUsIC4uLmV4dHJhUGFyYW1zXTtcbiAgICAgIHRoaXMucHJvYyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoYXJncyk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVaUF1dG9tYXRvciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdVaUF1dG9tYXRvciBzaHV0IGRvd24gbm9ybWFsbHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FKTtcbiAgICAgIHJldHVybiB0aGlzLnByb2M7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIFVpQXV0b21hdG9yJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gIH1cblxuICBwYXJzZUphck5hbWVGcm9tUGF0aCAoYmluYXJ5UGF0aCkge1xuICAgIGxldCByZVRlc3QgPSAvLiooXFwvfFxcXFwpKC4qXFwuamFyKS8uZXhlYyhiaW5hcnlQYXRoKTtcbiAgICBpZiAoIXJlVGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgamFyIG5hbWUgZnJvbSAke2JpbmFyeVBhdGh9YCk7XG4gICAgfVxuICAgIGxldCBqYXJOYW1lID0gcmVUZXN0WzJdO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgamFyIG5hbWU6ICcke2phck5hbWV9J2ApO1xuICAgIHJldHVybiBqYXJOYW1lO1xuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgbG9nLmRlYnVnKGBNb3ZpbmcgdG8gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBraWxsVWlBdXRvbWF0b3JPbkRldmljZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHdoaWxlIGtpbGxpbmcgdWlBdXRvbWF0b3I6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5VaUF1dG9tYXRvci5FVkVOVF9FUlJPUiA9ICd1aWF1dG9tYXRvcl9lcnJvcic7XG5VaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yO1xuIl0sImZpbGUiOiJsaWIvdWlhdXRvbWF0b3IuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
123
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VpYXV0b21hdG9yLmpzIiwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVWlBdXRvbWF0b3IiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFkYiIsImVycm9yQW5kVGhyb3ciLCJ0ZW1wUGF0aCIsInN0YXJ0IiwidWlBdXRvbWF0b3JCaW5hcnlQYXRoIiwiY2xhc3NOYW1lIiwic3RhcnREZXRlY3RvciIsImV4dHJhUGFyYW1zIiwicHJvY2Vzc0lzQWxpdmUiLCJkZWJ1ZyIsImNoYW5nZVN0YXRlIiwiU1RBVEVfU1RBUlRJTkciLCJqYXJOYW1lIiwicGFyc2VKYXJOYW1lRnJvbVBhdGgiLCJwdXNoIiwia2lsbFVpQXV0b21hdG9yT25EZXZpY2UiLCJhcmdzIiwicHJvYyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJTVEFURV9TVE9QUElORyIsIm1zZyIsImVycm9yIiwiU1RBVEVfT05MSU5FIiwiZSIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJzaHV0ZG93biIsImJpbmFyeVBhdGgiLCJyZVRlc3QiLCJleGVjIiwiRXJyb3IiLCJFVkVOVF9DSEFOR0VEIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSIsIndhcm4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdWlhdXRvbWF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdVaUF1dG9tYXRvcicpO1xuXG5jbGFzcyBVaUF1dG9tYXRvciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYWRiKSB7XG4gICAgaWYgKCFhZGIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KCdhZGIgaXMgcmVxdWlyZWQgdG8gaW5zdGFudGlhdGUgVWlBdXRvbWF0b3InKTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnRlbXBQYXRoID0gJy9kYXRhL2xvY2FsL3RtcC8nO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgY2xhc3NOYW1lLCBzdGFydERldGVjdG9yLCAuLi5leHRyYVBhcmFtcykge1xuICAgIGxldCBwcm9jZXNzSXNBbGl2ZTtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVaUF1dG9tYXRvcicpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnUGFyc2luZyB1aWF1dG9tYXRvciBqYXInKTtcbiAgICAgIC8vIGV4cGVjdGluZyBhIHBhdGggbGlrZSAvYWRzL2Fkcy9mb28uamFyIG9yIFxcYXNkXFxhc2RcXGZvby5qYXJcbiAgICAgIGxldCBqYXJOYW1lID0gdGhpcy5wYXJzZUphck5hbWVGcm9tUGF0aCh1aUF1dG9tYXRvckJpbmFyeVBhdGgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIucHVzaCh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIHRoaXMudGVtcFBhdGgpO1xuXG4gICAgICAvLyBraWxsaW5nIGFueSB1aWF1dG9tYXRvciBleGlzdGluZyBwcm9jZXNzZXNcbiAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcblxuICAgICAgbG9nLmRlYnVnKCdTdGFydGluZyBVSUF1dG9tYXRvcicpO1xuICAgICAgbGV0IGFyZ3MgPSBbJ3NoZWxsJywgJ3VpYXV0b21hdG9yJywgJ3J1bnRlc3QnLCBqYXJOYW1lLCAnLWMnLCBjbGFzc05hbWUsIC4uLmV4dHJhUGFyYW1zXTtcbiAgICAgIHRoaXMucHJvYyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoYXJncyk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVaUF1dG9tYXRvciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBgICtcbiAgICAgICAgICAgICAgICAgICAgYHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdVaUF1dG9tYXRvciBzaHV0IGRvd24gbm9ybWFsbHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FKTtcbiAgICAgIHJldHVybiB0aGlzLnByb2M7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIFVpQXV0b21hdG9yJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gIH1cblxuICBwYXJzZUphck5hbWVGcm9tUGF0aCAoYmluYXJ5UGF0aCkge1xuICAgIGxldCByZVRlc3QgPSAvLiooXFwvfFxcXFwpKC4qXFwuamFyKS8uZXhlYyhiaW5hcnlQYXRoKTtcbiAgICBpZiAoIXJlVGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgamFyIG5hbWUgZnJvbSAke2JpbmFyeVBhdGh9YCk7XG4gICAgfVxuICAgIGxldCBqYXJOYW1lID0gcmVUZXN0WzJdO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgamFyIG5hbWU6ICcke2phck5hbWV9J2ApO1xuICAgIHJldHVybiBqYXJOYW1lO1xuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgbG9nLmRlYnVnKGBNb3ZpbmcgdG8gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBraWxsVWlBdXRvbWF0b3JPbkRldmljZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHdoaWxlIGtpbGxpbmcgdWlBdXRvbWF0b3I6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5VaUF1dG9tYXRvci5FVkVOVF9FUlJPUiA9ICd1aWF1dG9tYXRvcl9lcnJvcic7XG5VaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsYUFBakIsQ0FBWjs7QUFFQSxNQUFNQyxXQUFOLFNBQTBCQyxnQkFBT0MsWUFBakMsQ0FBOEM7RUFDNUNDLFdBQVcsQ0FBRUMsR0FBRixFQUFPO0lBQ2hCLElBQUksQ0FBQ0EsR0FBTCxFQUFVO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBSixDQUFrQiw0Q0FBbEI7SUFDRDs7SUFDRDtJQUNBLEtBQUtELEdBQUwsR0FBV0EsR0FBWDtJQUNBLEtBQUtFLFFBQUwsR0FBZ0Isa0JBQWhCO0VBQ0Q7O0VBRVUsTUFBTEMsS0FBSyxDQUFFQyxxQkFBRixFQUF5QkMsU0FBekIsRUFBb0NDLGFBQXBDLEVBQW1ELEdBQUdDLFdBQXRELEVBQW1FO0lBQzVFLElBQUlDLGNBQUo7O0lBQ0EsSUFBSTtNQUNGZixHQUFHLENBQUNnQixLQUFKLENBQVUsc0JBQVY7TUFDQSxLQUFLQyxXQUFMLENBQWlCZCxXQUFXLENBQUNlLGNBQTdCO01BRUFsQixHQUFHLENBQUNnQixLQUFKLENBQVUseUJBQVY7TUFFQSxJQUFJRyxPQUFPLEdBQUcsS0FBS0Msb0JBQUwsQ0FBMEJULHFCQUExQixDQUFkO01BQ0EsTUFBTSxLQUFLSixHQUFMLENBQVNjLElBQVQsQ0FBY1YscUJBQWQsRUFBcUMsS0FBS0YsUUFBMUMsQ0FBTjtNQUdBLE1BQU0sS0FBS2EsdUJBQUwsRUFBTjtNQUVBdEIsR0FBRyxDQUFDZ0IsS0FBSixDQUFVLHNCQUFWO01BQ0EsSUFBSU8sSUFBSSxHQUFHLENBQUMsT0FBRCxFQUFVLGFBQVYsRUFBeUIsU0FBekIsRUFBb0NKLE9BQXBDLEVBQTZDLElBQTdDLEVBQW1EUCxTQUFuRCxFQUE4RCxHQUFHRSxXQUFqRSxDQUFYO01BQ0EsS0FBS1UsSUFBTCxHQUFZLEtBQUtqQixHQUFMLENBQVNrQixnQkFBVCxDQUEwQkYsSUFBMUIsQ0FBWjtNQUdBLEtBQUtDLElBQUwsQ0FBVUUsRUFBVixDQUFhLE1BQWIsRUFBcUIsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEtBQWtCO1FBQ3JDYixjQUFjLEdBQUcsS0FBakI7O1FBRUEsSUFBSSxLQUFLYyxLQUFMLEtBQWUxQixXQUFXLENBQUMyQixhQUEzQixJQUNBLEtBQUtELEtBQUwsS0FBZTFCLFdBQVcsQ0FBQzRCLGNBRC9CLEVBQytDO1VBQzdDLElBQUlDLEdBQUcsR0FBSSw2Q0FBNENMLElBQUssSUFBbEQsR0FDQyxVQUFTQyxNQUFPLEVBRDNCO1VBRUE1QixHQUFHLENBQUNpQyxLQUFKLENBQVVELEdBQVY7UUFDRCxDQUxELE1BS08sSUFBSSxLQUFLSCxLQUFMLEtBQWUxQixXQUFXLENBQUM0QixjQUEvQixFQUErQztVQUNwRC9CLEdBQUcsQ0FBQ2dCLEtBQUosQ0FBVSxnQ0FBVjtRQUNEOztRQUNELEtBQUtDLFdBQUwsQ0FBaUJkLFdBQVcsQ0FBQzJCLGFBQTdCO01BQ0QsQ0FaRDtNQWNBLE1BQU0sS0FBS04sSUFBTCxDQUFVZCxLQUFWLENBQWdCRyxhQUFoQixDQUFOO01BQ0FFLGNBQWMsR0FBRyxJQUFqQjtNQUNBLEtBQUtFLFdBQUwsQ0FBaUJkLFdBQVcsQ0FBQytCLFlBQTdCO01BQ0EsT0FBTyxLQUFLVixJQUFaO0lBQ0QsQ0FuQ0QsQ0FtQ0UsT0FBT1csQ0FBUCxFQUFVO01BQ1YsS0FBS0MsSUFBTCxDQUFVakMsV0FBVyxDQUFDa0MsV0FBdEIsRUFBbUNGLENBQW5DOztNQUNBLElBQUlwQixjQUFKLEVBQW9CO1FBQ2xCLE1BQU0sS0FBS08sdUJBQUwsRUFBTjtRQUNBLE1BQU0sS0FBS0UsSUFBTCxDQUFVYyxJQUFWLEVBQU47TUFDRDs7TUFDRHRDLEdBQUcsQ0FBQ1EsYUFBSixDQUFrQjJCLENBQWxCO0lBQ0Q7RUFDRjs7RUFFYSxNQUFSSSxRQUFRLEdBQUk7SUFDaEJ2QyxHQUFHLENBQUNnQixLQUFKLENBQVUsMkJBQVY7O0lBQ0EsSUFBSSxLQUFLYSxLQUFMLEtBQWUxQixXQUFXLENBQUMyQixhQUEvQixFQUE4QztNQUM1QyxLQUFLYixXQUFMLENBQWlCZCxXQUFXLENBQUM0QixjQUE3QjtNQUNBLE1BQU0sS0FBS1AsSUFBTCxDQUFVYyxJQUFWLEVBQU47SUFDRDs7SUFDRCxNQUFNLEtBQUtoQix1QkFBTCxFQUFOO0lBQ0EsS0FBS0wsV0FBTCxDQUFpQmQsV0FBVyxDQUFDMkIsYUFBN0I7RUFDRDs7RUFFRFYsb0JBQW9CLENBQUVvQixVQUFGLEVBQWM7SUFDaEMsSUFBSUMsTUFBTSxHQUFHLHFCQUFxQkMsSUFBckIsQ0FBMEJGLFVBQTFCLENBQWI7O0lBQ0EsSUFBSSxDQUFDQyxNQUFMLEVBQWE7TUFDWCxNQUFNLElBQUlFLEtBQUosQ0FBVyxpQ0FBZ0NILFVBQVcsRUFBdEQsQ0FBTjtJQUNEOztJQUNELElBQUlyQixPQUFPLEdBQUdzQixNQUFNLENBQUMsQ0FBRCxDQUFwQjtJQUNBekMsR0FBRyxDQUFDZ0IsS0FBSixDQUFXLG9CQUFtQkcsT0FBUSxHQUF0QztJQUNBLE9BQU9BLE9BQVA7RUFDRDs7RUFFREYsV0FBVyxDQUFFWSxLQUFGLEVBQVM7SUFDbEI3QixHQUFHLENBQUNnQixLQUFKLENBQVcsb0JBQW1CYSxLQUFNLEdBQXBDO0lBQ0EsS0FBS0EsS0FBTCxHQUFhQSxLQUFiO0lBQ0EsS0FBS08sSUFBTCxDQUFVakMsV0FBVyxDQUFDeUMsYUFBdEIsRUFBcUM7TUFBQ2Y7SUFBRCxDQUFyQztFQUNEOztFQUU0QixNQUF2QlAsdUJBQXVCLEdBQUk7SUFDL0IsSUFBSTtNQUNGLE1BQU0sS0FBS2YsR0FBTCxDQUFTc0MsbUJBQVQsQ0FBNkIsYUFBN0IsQ0FBTjtJQUNELENBRkQsQ0FFRSxPQUFPVixDQUFQLEVBQVU7TUFDVm5DLEdBQUcsQ0FBQzhDLElBQUosQ0FBVSxvQ0FBbUNYLENBQUUsRUFBL0M7SUFDRDtFQUNGOztBQXpGMkM7OztBQTZGOUNoQyxXQUFXLENBQUNrQyxXQUFaLEdBQTBCLG1CQUExQjtBQUNBbEMsV0FBVyxDQUFDeUMsYUFBWixHQUE0QixjQUE1QjtBQUNBekMsV0FBVyxDQUFDNEIsY0FBWixHQUE2QixVQUE3QjtBQUNBNUIsV0FBVyxDQUFDMkIsYUFBWixHQUE0QixTQUE1QjtBQUNBM0IsV0FBVyxDQUFDZSxjQUFaLEdBQTZCLFVBQTdCO0FBQ0FmLFdBQVcsQ0FBQytCLFlBQVosR0FBMkIsUUFBM0I7ZUFJZS9CLFcifQ==
@@ -303,4 +303,4 @@ var _default = helpers;
303
303
  exports.default = _default;require('source-map-support').install();
304
304
 
305
305
 
306
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91bmxvY2staGVscGVycy5qcyJdLCJuYW1lcyI6WyJQSU5fVU5MT0NLIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJQQVNTV09SRF9VTkxPQ0siLCJQQVRURVJOX1VOTE9DSyIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsIlVOTE9DS19UWVBFUyIsIktFWUNPREVfTlVNUEFEX0VOVEVSIiwiVU5MT0NLX1dBSVRfVElNRSIsIklOUFVUX0tFWVNfV0FJVF9USU1FIiwiTlVNQkVSX1pFUk9fS0VZQ09ERSIsImhlbHBlcnMiLCJ2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyIsImNhcHMiLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwiXyIsImlzTmlsIiwiRXJyb3IiLCJpbmNsdWRlcyIsInRlc3QiLCJ0cmltIiwiZmFzdFVubG9jayIsImFkYiIsIm9wdHMiLCJjcmVkZW50aWFsIiwiY3JlZGVudGlhbFR5cGUiLCJsb2dnZXIiLCJpbmZvIiwid2FzTG9ja0VuYWJsZWQiLCJpc0xvY2tFbmFibGVkIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImN5Y2xlV2FrZVVwIiwiZGlzbWlzc0tleWd1YXJkIiwic2V0TG9ja0NyZWRlbnRpYWwiLCJlbmNvZGVQYXNzd29yZCIsImtleSIsInJlcGxhY2UiLCJzdHJpbmdLZXlUb0FyciIsInNwbGl0IiwiZmluZ2VycHJpbnRVbmxvY2siLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJnZXRBcGlMZXZlbCIsImZpbmdlcnByaW50IiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsaUJBQTdCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxVQUF4Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsU0FBdkI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsYUFBM0I7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQ25CTCxVQURtQixFQUNQQyxvQkFETyxFQUNlQyxlQURmLEVBRW5CQyxjQUZtQixFQUVIQyxrQkFGRyxDQUFyQjtBQUlBLE1BQU1FLG9CQUFvQixHQUFHLEVBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxHQUE3QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLENBQTVCO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCOzs7QUFFQUEsT0FBTyxDQUFDQywwQkFBUixHQUFxQyxTQUFTQSwwQkFBVCxDQUFxQ0MsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQ25GLFFBQU07QUFDSkMsSUFBQUEsU0FESTtBQUVKQyxJQUFBQTtBQUZJLE1BR0ZGLElBSEo7O0FBSUEsTUFBSUcsZ0JBQUVDLEtBQUYsQ0FBUUgsU0FBUixLQUFzQkEsU0FBUyxLQUFLLEVBQXhD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T0FBTyxDQUFDTixrQkFBUixHQUE2QkEsa0JBQTdCO2VBTWVNLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBQSU5fVU5MT0NLID0gJ3Bpbic7XG5jb25zdCBQSU5fVU5MT0NLX0tFWV9FVkVOVCA9ICdwaW5XaXRoS2V5RXZlbnQnO1xuY29uc3QgUEFTU1dPUkRfVU5MT0NLID0gJ3Bhc3N3b3JkJztcbmNvbnN0IFBBVFRFUk5fVU5MT0NLID0gJ3BhdHRlcm4nO1xuY29uc3QgRklOR0VSUFJJTlRfVU5MT0NLID0gJ2ZpbmdlcnByaW50JztcbmNvbnN0IFVOTE9DS19UWVBFUyA9IFtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xuXTtcbmNvbnN0IEtFWUNPREVfTlVNUEFEX0VOVEVSID0gNjY7XG5jb25zdCBVTkxPQ0tfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgSU5QVVRfS0VZU19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBOVU1CRVJfWkVST19LRVlDT0RFID0gNztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24gdmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1R5cGUsXG4gIH0gPSBjYXBzO1xuICBpZiAoXy5pc05pbCh1bmxvY2tLZXkpIHx8IHVubG9ja0tleSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHVubG9jayBrZXkgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKFtQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgRklOR0VSUFJJTlRfVU5MT0NLXS5pbmNsdWRlcyh1bmxvY2tUeXBlKSkge1xuICAgIGlmICghL15bMC05XSskLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBjb25zaXN0IG9mIGRpZ2l0c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVRURVJOX1VOTE9DSykge1xuICAgIGlmICghL15bMS05XXsyLDl9JC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgaW5jbHVkZSBmcm9tIHR3byB0byBuaW5lIGRpZ2l0cyBpbiByYW5nZSAxLi45YCk7XG4gICAgfVxuICAgIGlmICgvKFsxLTldKS4qP1xcMS8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IGRlZmluZSBhIHZhbGlkIHBhdHRlcm4gd2hlcmUgcmVwZWF0cyBhcmUgbm90IGFsbG93ZWRgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFTU1dPUkRfVU5MT0NLKSB7XG4gICAgLy8gRG9udCB0cmltIHBhc3N3b3JkIGtleSwgeW91IGNhbiB1c2UgYmxhbmsgc3BhY2VzIGluIHlvdXIgYW5kcm9pZCBwYXNzd29yZFxuICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgaWYgKCEvLns0LH0vZy50ZXN0KHVubG9ja0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gYWxsb3dlZCBsZW5ndGggb2YgdW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBpcyA0IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICcke3VubG9ja1R5cGV9Jy4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIHVubG9jayB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1VOTE9DS19UWVBFU31gKTtcbiAgfVxuICByZXR1cm4gY2Fwcztcbn07XG5cbmhlbHBlcnMuZmFzdFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZhc3RVbmxvY2sgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjcmVkZW50aWFsLFxuICAgIGNyZWRlbnRpYWxUeXBlLFxuICB9ID0gb3B0cztcbiAgbG9nZ2VyLmluZm8oYFVubG9ja2luZyB0aGUgZGV2aWNlIHZpYSBBREIgdXNpbmcgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCAnJHtjcmVkZW50aWFsfSdgKTtcbiAgY29uc3Qgd2FzTG9ja0VuYWJsZWQgPSBhd2FpdCBhZGIuaXNMb2NrRW5hYmxlZCgpO1xuICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICBhd2FpdCBhZGIuY2xlYXJMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsKTtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCB0aGUgZGV2aWNlJ3Mgc2NyZWVuIHN0aWxsIHJlbWFpbnMgbG9ja2VkXG4gICAgLy8gaWYgYSBwcmVsaW1pbmFyeSB3YWtlIHVwIGN5Y2xlIGhhcyBub3QgYmVlbiBwZXJmb3JtZWRcbiAgICBhd2FpdCBhZGIuY3ljbGVXYWtlVXAoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gYWN0aXZlIGxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQuIFByb2NlZWRpbmcgdG8gdGhlIGtleWd1YXJkIGRpc21pc3NhbCcpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgICAgYXdhaXQgYWRiLnNldExvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZW5jb2RlUGFzc3dvcmQgPSBmdW5jdGlvbiBlbmNvZGVQYXNzd29yZCAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC5yZXBsYWNlKC9cXHMvaWcsICclcycpO1xufTtcblxuaGVscGVycy5zdHJpbmdLZXlUb0FyciA9IGZ1bmN0aW9uIHN0cmluZ0tleVRvQXJyIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgvXFxzKi8pO1xufTtcblxuaGVscGVycy5maW5nZXJwcmludFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50VW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCB1bmxvY2sgb25seSB3b3JrcyBmb3IgQW5kcm9pZCA2KyBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5waW5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMSkge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuc3lzdGVtdWk6aWQvZGlnaXRfdGV4dCcsIHRydWUpO1xuICAgIGlmIChfLmlzRW1wdHkoZWxzKSkge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGNvbnN0IHBpbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVscykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGRyaXZlci5nZXRBdHRyaWJ1dGUoJ3RleHQnLCB1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICAgIHBpbnNbdGV4dF0gPSBlbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBwaW5zW3Bpbl07XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsIGBjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXkke3Bpbn1gLCBmYWxzZSk7XG4gICAgICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZGlzcGxheSB0byBiZSB1bmxvY2tlZC5cbiAqIFNvbWUgZGV2aWNlcyBhdXRvbWF0aWNhbGx5IGFjY2VwdCB0eXBlZCAncGluJyBhbmQgJ3Bhc3N3b3JkJyBjb2RlXG4gKiB3aXRob3V0IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIEJ1dCBzb21lIGRldmljZXMgbmVlZCBpdC5cbiAqIFRoaXMgbWV0aG9kIHdhaXRzIGEgZmV3IHNlY29uZHMgZmlyc3QgZm9yIHN1Y2ggYXV0b21hdGljIGFjY2VwdGFuY2UgY2FzZS5cbiAqIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHNlbmRcbiAqIHRoZSBlbnRlciBrZXkgY29kZS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBpbnN0YW5jZSBvZiBBREJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclVubG9jayAoYWRiKSB7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xuICBpZiAoIWF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLmtleWV2ZW50KEtFWUNPREVfTlVNUEFEX0VOVEVSKTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59XG5cbmhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50ID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrV2l0aEtleUV2ZW50IChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gd2l0aCBrZXljb2RlICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcblxuICAvLyBTb21lIGRldmljZSBkb2VzIG5vdCBoYXZlIHN5c3RlbSBrZXkgaWRzIGxpa2UgJ2NvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSdcbiAgLy8gVGhlbiwgc2VuZGluZyBrZXlldmVudHMgYXJlIG1vcmUgcmVsaWFibGUgdG8gdW5sb2NrIHRoZSBzY3JlZW4uXG4gIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAvLyAncGluJyBpcyBudW1iZXIgKDAtOSkgaW4gc3RyaW5nLlxuICAgIC8vIE51bWJlciAnMCcgaXMga2V5Y29kZSAnNycuIG51bWJlciAnOScgaXMga2V5Y29kZSAnMTYnLlxuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgcGFyc2VJbnQocGluLCAxMCkgKyBOVU1CRVJfWkVST19LRVlDT0RFXSk7XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLnBhc3N3b3JkVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGFzc3dvcmRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhc3N3b3JkICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIC8vIFJlcGxhY2UgYmxhbmsgc3BhY2VzIHdpdGggJXNcbiAgY29uc3Qga2V5ID0gaGVscGVycy5lbmNvZGVQYXNzd29yZCh1bmxvY2tLZXkpO1xuICAvLyBXaHkgYWRiID8gSXQgd2FzIGxlc3MgZmxha3lcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGtleV0pO1xuICAvLyBXaHkgc2xlZXBzID8gQXZvaWQgc29tZSBmbGFreW5lc3Mgd2FpdGluZyBmb3IgdGhlIGlucHV0IHRvIHJlY2VpdmUgdGhlIGtleXNcbiAgYXdhaXQgc2xlZXAoSU5QVVRfS0VZU19XQUlUX1RJTUUpO1xuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIEtFWUNPREVfTlVNUEFEX0VOVEVSXSk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQYXR0ZXJuS2V5UG9zaXRpb24gKGtleSwgaW5pdFBvcywgcGllY2UpIHtcbiAgLypcbiAgSG93IHRoZSBtYXRoIHdvcmtzOlxuICBXZSBoYXZlIDkgYnV0dG9ucyBkaXZpZGVkIGluIDMgY29sdW1ucyBhbmQgMyByb3dzIGluc2lkZSB0aGUgbG9ja1BhdHRlcm5WaWV3LFxuICBldmVyeSBidXR0b24gaGFzIGEgcG9zaXRpb24gb24gdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NrUGF0dGVyblZpZXcgc2luY2VcbiAgaXQgaXMgdGhlIHBhcmVudCB2aWV3IHJpZ2h0IGF0IHRoZSBtaWRkbGUgb2YgZWFjaCBjb2x1bW4gb3Igcm93LlxuICAqL1xuICBjb25zdCBjb2xzID0gMztcbiAgY29uc3QgcGlucyA9IDk7XG4gIGNvbnN0IHhQb3MgPSAoa2V5LCB4LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh4ICsgKChrZXkgJSBjb2xzKSB8fCBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKTtcbiAgY29uc3QgeVBvcyA9IChrZXksIHksIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHkgKyAoTWF0aC5jZWlsKCgoa2V5ICUgcGlucykgfHwgcGlucykgLyBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKSk7XG4gIHJldHVybiB7XG4gICAgeDogeFBvcyhrZXksIGluaXRQb3MueCwgcGllY2UpLFxuICAgIHk6IHlQb3Moa2V5LCBpbml0UG9zLnksIHBpZWNlKVxuICB9O1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyA9IGZ1bmN0aW9uIGdldFBhdHRlcm5BY3Rpb25zIChrZXlzLCBpbml0UG9zLCBwaWVjZSkge1xuICBjb25zdCBhY3Rpb25zID0gW107XG4gIGxldCBsYXN0UG9zO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGtleVBvcyA9IGhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uKGtleSwgaW5pdFBvcywgcGllY2UpO1xuICAgIGlmIChrZXkgPT09IGtleXNbMF0pIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncHJlc3MnLCBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDoga2V5UG9zLngsIHk6IGtleVBvcy55fX0pO1xuICAgICAgbGFzdFBvcyA9IGtleVBvcztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlVG8gPSB7eDogMCwgeTogMH07XG4gICAgY29uc3QgZGlmZlggPSBrZXlQb3MueCAtIGxhc3RQb3MueDtcbiAgICBpZiAoZGlmZlggPiAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlggPCAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZmZZID0ga2V5UG9zLnkgLSBsYXN0UG9zLnk7XG4gICAgaWYgKGRpZmZZID4gMCkge1xuICAgICAgbW92ZVRvLnkgPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZZIDwgMCkge1xuICAgICAgbW92ZVRvLnkgPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgYWN0aW9uOiAnbW92ZVRvJyxcbiAgICAgIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBtb3ZlVG8ueCArIGxhc3RQb3MueCwgeTogbW92ZVRvLnkgKyBsYXN0UG9zLnl9XG4gICAgfSk7XG4gICAgbGFzdFBvcyA9IGtleVBvcztcbiAgfVxuICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3JlbGVhc2UnfSk7XG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuaGVscGVycy5wYXR0ZXJuVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGF0dGVyblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGF0dGVybiAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0Fycih1bmxvY2tLZXkpO1xuICAvKiBXZSBzZXQgdGhlIGRldmljZSBwYXR0ZXJuIGJ1dHRvbnMgYXMgbnVtYmVyIG9mIGEgcmVndWxhciBwaG9uZVxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDEgMiAzIHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAtLT4gfCA0IDUgNiB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgNyA4IDkgfFxuXG4gIFRoZSBwYXR0ZXJuIHZpZXcgYnV0dG9ucyBhcmUgbm90IHNlZWluZyBieSB0aGUgdWlhdXRvbWF0b3Igc2luY2UgdGhleSBhcmVcbiAgaW5jbHVkZWQgaW5zaWRlIGEgRnJhbWVMYXlvdXQsIHNvIHdlIGFyZSBnb2luZyB0byB0cnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbnNcbiAgdXNpbmcgdGhlIHBhcmVudCB2aWV3IGJvdW5kcyBhbmQgbWF0aC5cbiAgKi9cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJyxcbiAgICBgY29tLmFuZHJvaWQuJHthcGlMZXZlbCA+PSAyMSA/ICdzeXN0ZW11aScgOiAna2V5Z3VhcmQnfTppZC9sb2NrUGF0dGVyblZpZXdgLFxuICAgIGZhbHNlXG4gICk7XG4gIGNvbnN0IGluaXRQb3MgPSBhd2FpdCBkcml2ZXIuZ2V0TG9jYXRpb24odXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIGNvbnN0IHNpemUgPSBhd2FpdCBkcml2ZXIuZ2V0U2l6ZSh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgLy8gR2V0IGFjdGlvbnMgdG8gcGVyZm9ybVxuICBjb25zdCBhY3Rpb25zID0gaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyhrZXlzLCBpbml0UG9zLCBzaXplLndpZHRoIC8gMyk7XG4gIC8vIFBlcmZvcm0gZ2VzdHVyZVxuICBhd2FpdCBkcml2ZXIucGVyZm9ybVRvdWNoKGFjdGlvbnMpO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMuUElOX1VOTE9DSyA9IFBJTl9VTkxPQ0s7XG5oZWxwZXJzLlBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gUElOX1VOTE9DS19LRVlfRVZFTlQ7XG5oZWxwZXJzLlBBU1NXT1JEX1VOTE9DSyA9IFBBU1NXT1JEX1VOTE9DSztcbmhlbHBlcnMuUEFUVEVSTl9VTkxPQ0sgPSBQQVRURVJOX1VOTE9DSztcbmhlbHBlcnMuRklOR0VSUFJJTlRfVU5MT0NLID0gRklOR0VSUFJJTlRfVU5MT0NLO1xuXG5leHBvcnQge1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSyxcbiAgRklOR0VSUFJJTlRfVU5MT0NLLCBoZWxwZXJzXG59O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJmaWxlIjoibGliL3VubG9jay1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
306
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VubG9jay1oZWxwZXJzLmpzIiwibmFtZXMiOlsiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJVTkxPQ0tfVFlQRVMiLCJLRVlDT0RFX05VTVBBRF9FTlRFUiIsIlVOTE9DS19XQUlUX1RJTUUiLCJJTlBVVF9LRVlTX1dBSVRfVElNRSIsIk5VTUJFUl9aRVJPX0tFWUNPREUiLCJoZWxwZXJzIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJjYXBzIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsIl8iLCJpc05pbCIsIkVycm9yIiwiaW5jbHVkZXMiLCJ0ZXN0IiwidHJpbSIsImZhc3RVbmxvY2siLCJhZGIiLCJvcHRzIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwibG9nZ2VyIiwiaW5mbyIsIndhc0xvY2tFbmFibGVkIiwiaXNMb2NrRW5hYmxlZCIsImNsZWFyTG9ja0NyZWRlbnRpYWwiLCJjeWNsZVdha2VVcCIsImRpc21pc3NLZXlndWFyZCIsInNldExvY2tDcmVkZW50aWFsIiwiZW5jb2RlUGFzc3dvcmQiLCJrZXkiLCJyZXBsYWNlIiwic3RyaW5nS2V5VG9BcnIiLCJzcGxpdCIsImZpbmdlcnByaW50VW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiZ2V0QXBpTGV2ZWwiLCJmaW5nZXJwcmludCIsInBpblVubG9jayIsImtleXMiLCJlbHMiLCJmaW5kRWxPckVscyIsImlzRW1wdHkiLCJwaW5VbmxvY2tXaXRoS2V5RXZlbnQiLCJwaW5zIiwiZWwiLCJ0ZXh0IiwiZ2V0QXR0cmlidXRlIiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJwaW4iLCJjbGljayIsIndhaXRGb3JVbmxvY2siLCJpc1NjcmVlbkxvY2tlZCIsImtleWV2ZW50Iiwic2hlbGwiLCJwYXJzZUludCIsInBhc3N3b3JkVW5sb2NrIiwiZ2V0UGF0dGVybktleVBvc2l0aW9uIiwiaW5pdFBvcyIsInBpZWNlIiwiY29scyIsInhQb3MiLCJ4IiwiTWF0aCIsInJvdW5kIiwieVBvcyIsInkiLCJjZWlsIiwiZ2V0UGF0dGVybkFjdGlvbnMiLCJhY3Rpb25zIiwibGFzdFBvcyIsImtleVBvcyIsInB1c2giLCJhY3Rpb24iLCJvcHRpb25zIiwiZWxlbWVudCIsIm1vdmVUbyIsImRpZmZYIiwiYWJzIiwiZGlmZlkiLCJwYXR0ZXJuVW5sb2NrIiwiYXBpTGV2ZWwiLCJnZXRMb2NhdGlvbiIsInNpemUiLCJnZXRTaXplIiwid2lkdGgiLCJwZXJmb3JtVG91Y2giXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdW5sb2NrLWhlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgUElOX1VOTE9DSyA9ICdwaW4nO1xuY29uc3QgUElOX1VOTE9DS19LRVlfRVZFTlQgPSAncGluV2l0aEtleUV2ZW50JztcbmNvbnN0IFBBU1NXT1JEX1VOTE9DSyA9ICdwYXNzd29yZCc7XG5jb25zdCBQQVRURVJOX1VOTE9DSyA9ICdwYXR0ZXJuJztcbmNvbnN0IEZJTkdFUlBSSU5UX1VOTE9DSyA9ICdmaW5nZXJwcmludCc7XG5jb25zdCBVTkxPQ0tfVFlQRVMgPSBbXG4gIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBQQVNTV09SRF9VTkxPQ0ssXG4gIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbl07XG5jb25zdCBLRVlDT0RFX05VTVBBRF9FTlRFUiA9IDY2O1xuY29uc3QgVU5MT0NLX1dBSVRfVElNRSA9IDEwMDtcbmNvbnN0IElOUFVUX0tFWVNfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgTlVNQkVSX1pFUk9fS0VZQ09ERSA9IDc7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuaGVscGVycy52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyA9IGZ1bmN0aW9uIHZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIChjYXBzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tUeXBlLFxuICB9ID0gY2FwcztcbiAgaWYgKF8uaXNOaWwodW5sb2NrS2V5KSB8fCB1bmxvY2tLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIG5vbi1lbXB0eSB1bmxvY2sga2V5IHZhbHVlIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmIChbUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIEZJTkdFUlBSSU5UX1VOTE9DS10uaW5jbHVkZXModW5sb2NrVHlwZSkpIHtcbiAgICBpZiAoIS9eWzAtOV0rJC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgY29uc2lzdCBvZiBkaWdpdHNgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFUVEVSTl9VTkxPQ0spIHtcbiAgICBpZiAoIS9eWzEtOV17Miw5fSQvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBvbmx5IGluY2x1ZGUgZnJvbSB0d28gdG8gbmluZSBkaWdpdHMgaW4gcmFuZ2UgMS4uOWApO1xuICAgIH1cbiAgICBpZiAoLyhbMS05XSkuKj9cXDEvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBkZWZpbmUgYSB2YWxpZCBwYXR0ZXJuIHdoZXJlIHJlcGVhdHMgYXJlIG5vdCBhbGxvd2VkYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHVubG9ja1R5cGUgPT09IFBBU1NXT1JEX1VOTE9DSykge1xuICAgIC8vIERvbnQgdHJpbSBwYXNzd29yZCBrZXksIHlvdSBjYW4gdXNlIGJsYW5rIHNwYWNlcyBpbiB5b3VyIGFuZHJvaWQgcGFzc3dvcmRcbiAgICAvLyDCr1xcXyjjg4QpXy/Cr1xuICAgIGlmICghLy57NCx9L2cudGVzdCh1bmxvY2tLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIGFsbG93ZWQgbGVuZ3RoIG9mIHVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgaXMgNCBjaGFyYWN0ZXJzYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1bmxvY2sgdHlwZSAnJHt1bmxvY2tUeXBlfScuIGAgK1xuICAgICAgYE9ubHkgdGhlIGZvbGxvd2luZyB1bmxvY2sgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtVTkxPQ0tfVFlQRVN9YCk7XG4gIH1cbiAgcmV0dXJuIGNhcHM7XG59O1xuXG5oZWxwZXJzLmZhc3RVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBmYXN0VW5sb2NrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgY3JlZGVudGlhbCxcbiAgICBjcmVkZW50aWFsVHlwZSxcbiAgfSA9IG9wdHM7XG4gIGxvZ2dlci5pbmZvKGBVbmxvY2tpbmcgdGhlIGRldmljZSB2aWEgQURCIHVzaW5nICR7Y3JlZGVudGlhbFR5cGV9IGNyZWRlbnRpYWwgJyR7Y3JlZGVudGlhbH0nYCk7XG4gIGNvbnN0IHdhc0xvY2tFbmFibGVkID0gYXdhaXQgYWRiLmlzTG9ja0VuYWJsZWQoKTtcbiAgaWYgKHdhc0xvY2tFbmFibGVkKSB7XG4gICAgYXdhaXQgYWRiLmNsZWFyTG9ja0NyZWRlbnRpYWwoY3JlZGVudGlhbCk7XG4gICAgLy8gbm90IHN1cmUgd2h5LCBidXQgdGhlIGRldmljZSdzIHNjcmVlbiBzdGlsbCByZW1haW5zIGxvY2tlZFxuICAgIC8vIGlmIGEgcHJlbGltaW5hcnkgd2FrZSB1cCBjeWNsZSBoYXMgbm90IGJlZW4gcGVyZm9ybWVkXG4gICAgYXdhaXQgYWRiLmN5Y2xlV2FrZVVwKCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmluZm8oJ05vIGFjdGl2ZSBsb2NrIGhhcyBiZWVuIGRldGVjdGVkLiBQcm9jZWVkaW5nIHRvIHRoZSBrZXlndWFyZCBkaXNtaXNzYWwnKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICAgIGF3YWl0IGFkYi5zZXRMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmVuY29kZVBhc3N3b3JkID0gZnVuY3Rpb24gZW5jb2RlUGFzc3dvcmQgKGtleSkge1xuICByZXR1cm4gYCR7a2V5fWAucmVwbGFjZSgvXFxzL2lnLCAnJXMnKTtcbn07XG5cbmhlbHBlcnMuc3RyaW5nS2V5VG9BcnIgPSBmdW5jdGlvbiBzdHJpbmdLZXlUb0FyciAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnJykuc3BsaXQoL1xccyovKTtcbn07XG5cbmhlbHBlcnMuZmluZ2VycHJpbnRVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludFVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPCAyMykge1xuICAgIHRocm93IG5ldyBFcnJvcignRmluZ2VycHJpbnQgdW5sb2NrIG9ubHkgd29ya3MgZm9yIEFuZHJvaWQgNisgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgYWRiLmZpbmdlcnByaW50KGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMucGluVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gJHtjYXBhYmlsaXRpZXMudW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPj0gMjEpIHtcbiAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLnN5c3RlbXVpOmlkL2RpZ2l0X3RleHQnLCB0cnVlKTtcbiAgICBpZiAoXy5pc0VtcHR5KGVscykpIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIHBpbiB3aXRoIGtleSBldmVudFxuICAgICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50KGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpO1xuICAgIH1cbiAgICBjb25zdCBwaW5zID0ge307XG4gICAgZm9yIChjb25zdCBlbCBvZiBlbHMpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkcml2ZXIuZ2V0QXR0cmlidXRlKCd0ZXh0JywgdXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgICBwaW5zW3RleHRdID0gZWw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gcGluc1twaW5dO1xuICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBlbCA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCBgY29tLmFuZHJvaWQua2V5Z3VhcmQ6aWQva2V5JHtwaW59YCwgZmFsc2UpO1xuICAgICAgaWYgKGVsID09PSBudWxsKSB7XG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIHBpbiB3aXRoIGtleSBldmVudFxuICAgICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9XG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgdGhlIGRpc3BsYXkgdG8gYmUgdW5sb2NrZWQuXG4gKiBTb21lIGRldmljZXMgYXV0b21hdGljYWxseSBhY2NlcHQgdHlwZWQgJ3BpbicgYW5kICdwYXNzd29yZCcgY29kZVxuICogd2l0aG91dCBwcmVzc2luZyB0aGUgRW50ZXIga2V5LiBCdXQgc29tZSBkZXZpY2VzIG5lZWQgaXQuXG4gKiBUaGlzIG1ldGhvZCB3YWl0cyBhIGZldyBzZWNvbmRzIGZpcnN0IGZvciBzdWNoIGF1dG9tYXRpYyBhY2NlcHRhbmNlIGNhc2UuXG4gKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZCwgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHRyeSB0byBzZW5kXG4gKiB0aGUgZW50ZXIga2V5IGNvZGUuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBUaGUgaW5zdGFuY2Ugb2YgQURCXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JVbmxvY2sgKGFkYikge1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbiAgaWYgKCFhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5rZXlldmVudChLRVlDT0RFX05VTVBBRF9FTlRFUik7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufVxuXG5oZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudCA9IGFzeW5jIGZ1bmN0aW9uIHBpblVubG9ja1dpdGhLZXlFdmVudCAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGluIHdpdGgga2V5Y29kZSAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG5cbiAgLy8gU29tZSBkZXZpY2UgZG9lcyBub3QgaGF2ZSBzeXN0ZW0ga2V5IGlkcyBsaWtlICdjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXknXG4gIC8vIFRoZW4sIHNlbmRpbmcga2V5ZXZlbnRzIGFyZSBtb3JlIHJlbGlhYmxlIHRvIHVubG9jayB0aGUgc2NyZWVuLlxuICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgLy8gJ3BpbicgaXMgbnVtYmVyICgwLTkpIGluIHN0cmluZy5cbiAgICAvLyBOdW1iZXIgJzAnIGlzIGtleWNvZGUgJzcnLiBudW1iZXIgJzknIGlzIGtleWNvZGUgJzE2Jy5cbiAgICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIHBhcnNlSW50KHBpbiwgMTApICsgTlVNQkVSX1pFUk9fS0VZQ09ERV0pO1xuICB9XG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5wYXNzd29yZFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBhc3N3b3JkVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGNvbnN0IHsgdW5sb2NrS2V5IH0gPSBjYXBhYmlsaXRpZXM7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwYXNzd29yZCAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAvLyBSZXBsYWNlIGJsYW5rIHNwYWNlcyB3aXRoICVzXG4gIGNvbnN0IGtleSA9IGhlbHBlcnMuZW5jb2RlUGFzc3dvcmQodW5sb2NrS2V5KTtcbiAgLy8gV2h5IGFkYiA/IEl0IHdhcyBsZXNzIGZsYWt5XG4gIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ3RleHQnLCBrZXldKTtcbiAgLy8gV2h5IHNsZWVwcyA/IEF2b2lkIHNvbWUgZmxha3luZXNzIHdhaXRpbmcgZm9yIHRoZSBpbnB1dCB0byByZWNlaXZlIHRoZSBrZXlzXG4gIGF3YWl0IHNsZWVwKElOUFVUX0tFWVNfV0FJVF9USU1FKTtcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAna2V5ZXZlbnQnLCBLRVlDT0RFX05VTVBBRF9FTlRFUl0pO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYiwgZHJpdmVyKTtcbn07XG5cbmhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0UGF0dGVybktleVBvc2l0aW9uIChrZXksIGluaXRQb3MsIHBpZWNlKSB7XG4gIC8qXG4gIEhvdyB0aGUgbWF0aCB3b3JrczpcbiAgV2UgaGF2ZSA5IGJ1dHRvbnMgZGl2aWRlZCBpbiAzIGNvbHVtbnMgYW5kIDMgcm93cyBpbnNpZGUgdGhlIGxvY2tQYXR0ZXJuVmlldyxcbiAgZXZlcnkgYnV0dG9uIGhhcyBhIHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4gY29ycmVzcG9uZGluZyB0byB0aGUgbG9ja1BhdHRlcm5WaWV3IHNpbmNlXG4gIGl0IGlzIHRoZSBwYXJlbnQgdmlldyByaWdodCBhdCB0aGUgbWlkZGxlIG9mIGVhY2ggY29sdW1uIG9yIHJvdy5cbiAgKi9cbiAgY29uc3QgY29scyA9IDM7XG4gIGNvbnN0IHBpbnMgPSA5O1xuICBjb25zdCB4UG9zID0gKGtleSwgeCwgcGllY2UpID0+IE1hdGgucm91bmQoeCArICgoa2V5ICUgY29scykgfHwgY29scykgKiBwaWVjZSAtIHBpZWNlIC8gMik7XG4gIGNvbnN0IHlQb3MgPSAoa2V5LCB5LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh5ICsgKE1hdGguY2VpbCgoKGtleSAlIHBpbnMpIHx8IHBpbnMpIC8gY29scykgKiBwaWVjZSAtIHBpZWNlIC8gMikpO1xuICByZXR1cm4ge1xuICAgIHg6IHhQb3Moa2V5LCBpbml0UG9zLngsIHBpZWNlKSxcbiAgICB5OiB5UG9zKGtleSwgaW5pdFBvcy55LCBwaWVjZSlcbiAgfTtcbn07XG5cbmhlbHBlcnMuZ2V0UGF0dGVybkFjdGlvbnMgPSBmdW5jdGlvbiBnZXRQYXR0ZXJuQWN0aW9ucyAoa2V5cywgaW5pdFBvcywgcGllY2UpIHtcbiAgY29uc3QgYWN0aW9ucyA9IFtdO1xuICBsZXQgbGFzdFBvcztcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBrZXlQb3MgPSBoZWxwZXJzLmdldFBhdHRlcm5LZXlQb3NpdGlvbihrZXksIGluaXRQb3MsIHBpZWNlKTtcbiAgICBpZiAoa2V5ID09PSBrZXlzWzBdKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3ByZXNzJywgb3B0aW9uczoge2VsZW1lbnQ6IG51bGwsIHg6IGtleVBvcy54LCB5OiBrZXlQb3MueX19KTtcbiAgICAgIGxhc3RQb3MgPSBrZXlQb3M7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbW92ZVRvID0ge3g6IDAsIHk6IDB9O1xuICAgIGNvbnN0IGRpZmZYID0ga2V5UG9zLnggLSBsYXN0UG9zLng7XG4gICAgaWYgKGRpZmZYID4gMCkge1xuICAgICAgbW92ZVRvLnggPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWCkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueCArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZYIDwgMCkge1xuICAgICAgbW92ZVRvLnggPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkaWZmWSA9IGtleVBvcy55IC0gbGFzdFBvcy55O1xuICAgIGlmIChkaWZmWSA+IDApIHtcbiAgICAgIG1vdmVUby55ID0gcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlkpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnkgKz0gcGllY2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaWZmWSA8IDApIHtcbiAgICAgIG1vdmVUby55ID0gLTEgKiBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSAtPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgIGFjdGlvbjogJ21vdmVUbycsXG4gICAgICBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDogbW92ZVRvLnggKyBsYXN0UG9zLngsIHk6IG1vdmVUby55ICsgbGFzdFBvcy55fVxuICAgIH0pO1xuICAgIGxhc3RQb3MgPSBrZXlQb3M7XG4gIH1cbiAgYWN0aW9ucy5wdXNoKHthY3Rpb246ICdyZWxlYXNlJ30pO1xuICByZXR1cm4gYWN0aW9ucztcbn07XG5cbmhlbHBlcnMucGF0dGVyblVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBhdHRlcm5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhdHRlcm4gJHt1bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIodW5sb2NrS2V5KTtcbiAgLyogV2Ugc2V0IHRoZSBkZXZpY2UgcGF0dGVybiBidXR0b25zIGFzIG51bWJlciBvZiBhIHJlZ3VsYXIgcGhvbmVcbiAgICogIHwg4oCiIOKAoiDigKIgfCAgICAgfCAxIDIgMyB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgLS0+IHwgNCA1IDYgfFxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDcgOCA5IHxcblxuICBUaGUgcGF0dGVybiB2aWV3IGJ1dHRvbnMgYXJlIG5vdCBzZWVpbmcgYnkgdGhlIHVpYXV0b21hdG9yIHNpbmNlIHRoZXkgYXJlXG4gIGluY2x1ZGVkIGluc2lkZSBhIEZyYW1lTGF5b3V0LCBzbyB3ZSBhcmUgZ29pbmcgdG8gdHJ5IGNsaWNraW5nIG9uIHRoZSBidXR0b25zXG4gIHVzaW5nIHRoZSBwYXJlbnQgdmlldyBib3VuZHMgYW5kIG1hdGguXG4gICovXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsXG4gICAgYGNvbS5hbmRyb2lkLiR7YXBpTGV2ZWwgPj0gMjEgPyAnc3lzdGVtdWknIDogJ2tleWd1YXJkJ306aWQvbG9ja1BhdHRlcm5WaWV3YCxcbiAgICBmYWxzZVxuICApO1xuICBjb25zdCBpbml0UG9zID0gYXdhaXQgZHJpdmVyLmdldExvY2F0aW9uKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICBjb25zdCBzaXplID0gYXdhaXQgZHJpdmVyLmdldFNpemUodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIC8vIEdldCBhY3Rpb25zIHRvIHBlcmZvcm1cbiAgY29uc3QgYWN0aW9ucyA9IGhlbHBlcnMuZ2V0UGF0dGVybkFjdGlvbnMoa2V5cywgaW5pdFBvcywgc2l6ZS53aWR0aCAvIDMpO1xuICAvLyBQZXJmb3JtIGdlc3R1cmVcbiAgYXdhaXQgZHJpdmVyLnBlcmZvcm1Ub3VjaChhY3Rpb25zKTtcbiAgLy8gV2FpdHMgYSBiaXQgZm9yIHRoZSBkZXZpY2UgdG8gYmUgdW5sb2NrZWRcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59O1xuXG5oZWxwZXJzLlBJTl9VTkxPQ0sgPSBQSU5fVU5MT0NLO1xuaGVscGVycy5QSU5fVU5MT0NLX0tFWV9FVkVOVCA9IFBJTl9VTkxPQ0tfS0VZX0VWRU5UO1xuaGVscGVycy5QQVNTV09SRF9VTkxPQ0sgPSBQQVNTV09SRF9VTkxPQ0s7XG5oZWxwZXJzLlBBVFRFUk5fVU5MT0NLID0gUEFUVEVSTl9VTkxPQ0s7XG5oZWxwZXJzLkZJTkdFUlBSSU5UX1VOTE9DSyA9IEZJTkdFUlBSSU5UX1VOTE9DSztcblxuZXhwb3J0IHtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssXG4gIEZJTkdFUlBSSU5UX1VOTE9DSywgaGVscGVyc1xufTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLEtBQW5COztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLGlCQUE3Qjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsVUFBeEI7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFNBQXZCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLGFBQTNCOztBQUNBLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsVUFEbUIsRUFDUEMsb0JBRE8sRUFDZUMsZUFEZixFQUVuQkMsY0FGbUIsRUFFSEMsa0JBRkcsQ0FBckI7QUFJQSxNQUFNRSxvQkFBb0IsR0FBRyxFQUE3QjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLEdBQXpCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcs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