appium-xcuitest-driver 3.55.1 → 3.55.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/driver.js +4 -2
- package/lib/driver.js +1 -1
- package/package.json +1 -1
package/build/lib/driver.js
CHANGED
|
@@ -192,7 +192,9 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
192
192
|
this.opts.sessionId = sessionId;
|
|
193
193
|
|
|
194
194
|
if (this.mergeCliArgsToOpts()) {
|
|
195
|
-
this.validateDesiredCaps(
|
|
195
|
+
this.validateDesiredCaps({ ...caps,
|
|
196
|
+
...this.cliArgs
|
|
197
|
+
});
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
await this.start();
|
|
@@ -1330,4 +1332,4 @@ var _default = XCUITestDriver;
|
|
|
1330
1332
|
exports.default = _default;require('source-map-support').install();
|
|
1331
1333
|
|
|
1332
1334
|
|
|
1333
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImFyZ3NDb25zdHJhaW50cyIsIkFSR1NfQ09OU1RSQUlOVFMiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwiX2N1cnJlbnRVcmwiLCJjdXJDb250ZXh0IiwieGNvZGVWZXJzaW9uIiwiY29udGV4dHMiLCJpbXBsaWNpdFdhaXRNcyIsImFzeW5jbGliV2FpdE1zIiwicGFnZUxvYWRNcyIsImxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCIsInJlbW90ZSIsIndlYkVsZW1lbnRzQ2FjaGUiLCJMUlUiLCJtYXgiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsIm1lcmdlQ2xpQXJnc1RvT3B0cyIsImRpZE1lcmdlIiwiYXJnIiwiT2JqZWN0Iiwia2V5cyIsImhhcyIsImNsaUFyZ3MiLCJsb2ciLCJpbmZvIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJsaWZlY3ljbGVEYXRhIiwic2Vzc2lvbklkIiwiY2FwcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJzdGFydCIsImFzc2lnbiIsInVkaWQiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwiZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlbGV0ZVNlc3Npb24iLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwiaW9zU2RrVmVyc2lvbiIsInJlYWxEZXZpY2UiLCJkZXRlcm1pbmVEZXZpY2UiLCJzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwibm9ybWFsaXplZFZlcnNpb24iLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwiRXJyb3IiLCJpc0VtcHR5Iiwid2ViRHJpdmVyQWdlbnRVcmwiLCJsb2dFdmVudCIsInRvTG93ZXIiLCJhcHAiLCJ1bmRlZmluZWQiLCJwcm9jZXNzQXJndW1lbnRzIiwiYnVuZGxlSWQiLCJzYWZhcmlJbml0aWFsVXJsIiwiaXNSZWFsRGV2aWNlIiwiYWRkcmVzcyIsInBvcnQiLCJjb25maWd1cmVBcHAiLCJydW5SZXNldCIsIldlYkRyaXZlckFnZW50IiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJjYXRjaCIsImRlYnVnIiwibWVtb2l6ZWRMb2dJbmZvIiwibG9nSW5mbyIsInN0YXJ0TG9nQ2FwdHVyZSIsInNraXBMb2dDYXB0dXJlIiwicmVzdWx0IiwiaXNMb2dDYXB0dXJlU3RhcnRlZCIsImlzU2ltdWxhdG9yIiwic2h1dGRvd25PdGhlclNpbXVsYXRvcnMiLCJlbnN1cmVGZWF0dXJlRW5hYmxlZCIsImlzU2FmYXJpIiwic2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyIsImxvY2FsQ29uZmlnIiwic2ltIiwiY3VzdG9tU1NMQ2VydCIsImNlcnRIZWFkIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJzdGFydFNpbSIsImxhdW5jaFdpdGhJREIiLCJpZGIiLCJJREIiLCJjb25uZWN0IiwibWVzc2FnZSIsImluc3RhbGxBVVQiLCJpc0FwcEluc3RhbGxlZCIsImVycm9yQW5kVGhyb3ciLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zTWFwcGluZyIsInRvUGFpcnMiLCJwYXJzZSIsInNldFBlcm1pc3Npb25zIiwid2FybiIsImNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCIsImVuYWJsZUNhbGVuZGFyQWNjZXNzIiwiZGlzYWJsZUNhbGVuZGFyQWNjZXNzIiwic3RhcnRXZGEiLCJzZXRSZWR1Y2VNb3Rpb24iLCJzZXRJbml0aWFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsIm9wZW5VcmwiLCJhdXRvV2VidmlldyIsIm5hdlRvSW5pdGlhbFdlYnZpZXciLCJzZXRVcmwiLCJoYXNWYWx1ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsInVzZVBvcnRGb3J3YXJkaW5nIiwid2RhQmFzZVVybCIsIkRFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIiwicmVxdWVzdENvbm5lY3Rpb24iLCJ1cmwiLCJkZXZpY2VQb3J0Iiwid2RhUmVtb3RlUG9ydCIsInN5bmNocm9uaXphdGlvbktleSIsIm5hbWUiLCJ1c2VYY3Rlc3RydW5GaWxlIiwiaXNTb3VyY2VGcmVzaCIsImRlcml2ZWREYXRhUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJpc0J1c3kiLCJib290c3RyYXBQYXRoIiwiYWNxdWlyZSIsInVzZU5ld1dEQSIsInF1aXRBbmRVbmluc3RhbGwiLCJzZXR1cENhY2hpbmciLCJtc2ciLCJyZXN1bHRCdW5kbGVQYXRoIiwic3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsInN0YXJ0dXBSZXRyeUludGVydmFsIiwid2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJyZXRyeUNvdW50IiwicmV0cmllcyIsIm1ham9yIiwibGF1bmNoIiwiZXJyIiwiZXJyb3JNc2ciLCJvcmlnaW5hbFN0YWNrdHJhY2UiLCJzdGFydFdkYVNlc3Npb24iLCJzdGFjayIsImNsZWFyU3lzdGVtRmlsZXMiLCJmdWxseVN0YXJ0ZWQiLCJzZXJ2ZXIiLCJyZWNvcmRlciIsImNvbXBhY3QiLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJfYXVkaW9SZWNvcmRlciIsImludGVycnVwdCIsImNsZWFudXAiLCJfcGVyZlJlY29yZGVycyIsIkIiLCJhbGwiLCJtYXAiLCJ4Iiwic3RvcCIsInN0b3BSZW1vdGUiLCJyZXNldE9uU2Vzc2lvblN0YXJ0T25seSIsImVuZm9yY2VTaW11bGF0b3JTaHV0ZG93biIsImNyZWF0ZVNpbSIsImRlbGV0ZSIsInNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwibW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UiLCJpZ25vcmUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJpZ24iLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSx3QkFBd0IsR0FBRyxxQkFBakM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyw4QkFBckM7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRztBQUN4QkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FESztBQUV4QkMsRUFBQUEsc0JBQXNCLEVBQUUsS0FGQTtBQUd4QkMsRUFBQUEsV0FBVyxFQUFFLEVBSFc7QUFJeEJDLEVBQUFBLFFBQVEsRUFBRSxLQUpjO0FBS3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxJQUxLO0FBTXhCQyxFQUFBQSxlQUFlLEVBQUUsS0FOTztBQU94QkMsRUFBQUEsZUFBZSxFQUFFLElBUE87QUFReEJDLEVBQUFBLHdCQUF3QixFQUFFO0FBUkYsQ0FBMUI7QUFVQSxNQUFNQyxnQkFBZ0IsR0FBRyx3QkFBekI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxDQUFoQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcseUZBQWxDO0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsS0FBbkM7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRztBQUN2QkMsRUFBQUEsWUFBWSxFQUFFLEtBRFM7QUFFdkJDLEVBQUFBLGtCQUFrQixFQUFFLEtBRkc7QUFHdkJDLEVBQUFBLGFBQWEsRUFBRSxLQUhRO0FBSXZCQyxFQUFBQSx5QkFBeUIsRUFBRSxJQUpKO0FBS3ZCQyxFQUFBQSx5QkFBeUIsRUFBRSxZQUxKO0FBT3ZCQyxFQUFBQSw0QkFBNEIsRUFBRSxFQVBQO0FBUXZCQyxFQUFBQSxvQkFBb0IsRUFBRSxFQVJDO0FBU3ZCQyxFQUFBQSxpQkFBaUIsRUFBRSxDQVRJO0FBVXZCQyxFQUFBQSxrQkFBa0IsRUFBRSxHQVZHO0FBWXZCQyxFQUFBQSxZQUFZLEVBQUU7QUFaUyxDQUF6QjtBQWdCQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDO0FBR0EsTUFBTUMsb0JBQW9CLEdBQUcsQ0FDM0IsQ0FBQyxRQUFELEVBQVcsUUFBWCxDQUQyQixFQUUzQixDQUFDLEtBQUQsRUFBUSxxQkFBUixDQUYyQixFQUczQixDQUFDLEtBQUQsRUFBUSxZQUFSLENBSDJCLEVBSTNCLENBQUMsS0FBRCxFQUFRLGVBQVIsQ0FKMkIsRUFLM0IsQ0FBQyxLQUFELEVBQVEsUUFBUixDQUwyQixFQU0zQixDQUFDLEtBQUQsRUFBUSxXQUFSLENBTjJCLEVBTzNCLENBQUMsS0FBRCxFQUFRLFNBQVIsQ0FQMkIsRUFRM0IsQ0FBQyxLQUFELEVBQVEsVUFBUixDQVIyQixFQVMzQixDQUFDLEtBQUQsRUFBUSxLQUFSLENBVDJCLEVBVTNCLENBQUMsS0FBRCxFQUFRLFlBQVIsQ0FWMkIsRUFXM0IsQ0FBQyxLQUFELEVBQVEsTUFBUixDQVgyQixFQVkzQixDQUFDLEtBQUQsRUFBUSxRQUFSLENBWjJCLEVBYTNCLENBQUMsS0FBRCxFQUFRLFdBQVIsQ0FiMkIsRUFjM0IsQ0FBQyxLQUFELEVBQVEsS0FBUixDQWQyQixFQWUzQixDQUFDLEtBQUQsRUFBUSxRQUFSLENBZjJCLEVBZ0IzQixDQUFDLE1BQUQsRUFBUyxjQUFULENBaEIyQixFQWlCM0IsQ0FBQyxNQUFELEVBQVMsVUFBVCxDQWpCMkIsRUFrQjNCLENBQUMsTUFBRCxFQUFTLFlBQVQsQ0FsQjJCLEVBbUIzQixDQUFDLE1BQUQsRUFBUyxlQUFULENBbkIyQixFQW9CM0IsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQXBCMkIsRUFxQjNCLENBQUMsTUFBRCxFQUFTLDJCQUFULENBckIyQixFQXNCM0IsQ0FBQyxNQUFELEVBQVMsc0JBQVQsQ0F0QjJCLEVBdUIzQixDQUFDLE1BQUQsRUFBUyx3QkFBVCxDQXZCMkIsRUF3QjNCLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0F4QjJCLEVBeUIzQixDQUFDLE1BQUQsRUFBUyxPQUFULENBekIyQixFQTBCM0IsQ0FBQyxNQUFELEVBQVMsU0FBVCxDQTFCMkIsRUEyQjNCLENBQUMsTUFBRCxFQUFTLGVBQVQsQ0EzQjJCLEVBNEIzQixDQUFDLE1BQUQsRUFBUyxpQkFBVCxDQTVCMkIsRUE2QjNCLENBQUMsTUFBRCxFQUFTLFVBQVQsQ0E3QjJCLEVBOEIzQixDQUFDLE1BQUQsRUFBUyxXQUFULENBOUIyQixFQStCM0IsQ0FBQyxNQUFELEVBQVMsU0FBVCxDQS9CMkIsRUFnQzNCLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FoQzJCLEVBaUMzQixDQUFDLE1BQUQsRUFBUyxLQUFULENBakMyQixFQWtDM0IsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQWxDMkIsRUFtQzNCLENBQUMsTUFBRCxFQUFTLHdCQUFULENBbkMyQixFQW9DM0IsQ0FBQyxNQUFELEVBQVMsMkJBQVQsQ0FwQzJCLEVBcUMzQixDQUFDLE1BQUQsRUFBUyxPQUFULENBckMyQixFQXNDM0IsQ0FBQyxNQUFELEVBQVMsVUFBVCxDQXRDMkIsRUF1QzNCLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0F2QzJCLEVBd0MzQixDQUFDLE1BQUQsRUFBUyxLQUFULENBeEMyQixFQXlDM0IsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQXpDMkIsRUEwQzNCLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0ExQzJCLEVBMkMzQixDQUFDLFFBQUQsRUFBVyxRQUFYLENBM0MyQixFQTRDM0IsQ0FBQyxLQUFELEVBQVEsUUFBUixDQTVDMkIsRUE2QzNCLENBQUMsTUFBRCxFQUFTLFFBQVQsQ0E3QzJCLENBQTdCO0FBK0NBLE1BQU1DLGlCQUFpQixHQUFHLENBQ3hCLENBQUMsS0FBRCxFQUFRLFdBQVIsQ0FEd0IsRUFFeEIsQ0FBQyxLQUFELEVBQVEsU0FBUixDQUZ3QixFQUd4QixDQUFDLEtBQUQsRUFBUSxNQUFSLENBSHdCLEVBSXhCLENBQUMsS0FBRCxFQUFRLE9BQVIsQ0FKd0IsRUFLeEIsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUx3QixFQU14QixDQUFDLE1BQUQsRUFBUyxPQUFULENBTndCLEVBT3hCLENBQUMsTUFBRCxFQUFTLFNBQVQsQ0FQd0IsRUFReEIsQ0FBQyxNQUFELEVBQVMsU0FBVCxDQVJ3QixFQVN4QixDQUFDLE1BQUQsRUFBUyxPQUFULENBVHdCLEVBVXhCLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FWd0IsRUFXeEIsQ0FBQyxNQUFELEVBQVMsU0FBVCxDQVh3QixFQVl4QkMsTUFad0IsQ0FZakJGLG9CQVppQixDQUExQjtBQWVBLE1BQU1HLGtCQUFrQixHQUFHLENBQ3pCLG9CQUR5QixFQUV6QixxQkFGeUIsRUFHekIsZUFIeUIsQ0FBM0I7O0FBTUEsTUFBTUMsY0FBTixTQUE2QkMsNEJBQTdCLENBQXdDO0FBQ3RDQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWFDLGtCQUFrQixHQUFHLElBQWxDLEVBQXdDO0FBQ2pELFVBQU1ELElBQU4sRUFBWUMsa0JBQVo7QUFFQSxTQUFLQyxxQkFBTCxHQUE2QkEsa0NBQTdCO0FBRUEsU0FBS0MsaUJBQUwsR0FBeUIsQ0FDdkIsT0FEdUIsRUFFdkIsSUFGdUIsRUFHdkIsTUFIdUIsRUFJdkIsWUFKdUIsRUFLdkIsdUJBTHVCLEVBTXZCLGtCQU51QixFQU92QixrQkFQdUIsRUFRdkIsY0FSdUIsQ0FBekI7QUFVQSxTQUFLQyxvQkFBTCxHQUE0QixDQUMxQixXQUQwQixFQUUxQixjQUYwQixFQUcxQixVQUgwQixFQUkxQixXQUowQixFQUsxQixtQkFMMEIsQ0FBNUI7QUFPQSxTQUFLQyxRQUFMO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFJQyxnQ0FBSixDQUFtQjVCLGdCQUFuQixFQUFxQyxLQUFLNkIsZ0JBQUwsQ0FBc0JDLElBQXRCLENBQTJCLElBQTNCLENBQXJDLENBQWhCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLEVBQVo7O0FBR0EsU0FBSyxNQUFNQyxFQUFYLElBQWlCZixrQkFBakIsRUFBcUM7QUFDbkMsV0FBS2UsRUFBTCxJQUFXQyxnQkFBRUMsT0FBRixDQUFVLEtBQUtGLEVBQUwsQ0FBVixDQUFYO0FBQ0Q7QUFDRjs7QUFFeUIsYUFBZkcsZUFBZSxHQUFJO0FBQzVCLFdBQU9DLGdDQUFQO0FBQ0Q7O0FBRXFCLFFBQWhCUCxnQkFBZ0IsQ0FBRVEsR0FBRixFQUFPQyxLQUFQLEVBQWM7QUFDbEMsUUFBSUQsR0FBRyxLQUFLLGNBQVIsSUFBMEJBLEdBQUcsS0FBSyxvQkFBdEMsRUFBNEQ7QUFDMUQsYUFBTyxNQUFNLEtBQUtFLFlBQUwsQ0FBa0Isa0JBQWxCLEVBQXNDLE1BQXRDLEVBQThDO0FBQ3pEWixRQUFBQSxRQUFRLEVBQUU7QUFBQyxXQUFDVSxHQUFELEdBQU9DO0FBQVI7QUFEK0MsT0FBOUMsQ0FBYjtBQUdEOztBQUNELFNBQUtqQixJQUFMLENBQVVnQixHQUFWLElBQWlCLENBQUMsQ0FBQ0MsS0FBbkI7QUFDRDs7QUFFRFosRUFBQUEsUUFBUSxHQUFJO0FBQ1YsU0FBS0wsSUFBTCxHQUFZLEtBQUtBLElBQUwsSUFBYSxFQUF6QjtBQUNBLFNBQUttQixHQUFMLEdBQVcsSUFBWDtBQUNBLFNBQUtuQixJQUFMLENBQVVvQixNQUFWLEdBQW1CLElBQW5CO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUF0QjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEtBQWQ7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLElBQXZCO0FBRUEsU0FBS0MsWUFBTCxHQUFvQixFQUFwQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixFQUFwQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxjQUFMLEdBQXNCLENBQXRCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixDQUF0QjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLQyx3QkFBTCxHQUFnQyxDQUFoQztBQUNBLFNBQUtDLE1BQUwsR0FBYyxJQUFkO0FBRUEsU0FBS0MsZ0JBQUwsR0FBd0IsSUFBSUMsaUJBQUosQ0FBUTtBQUM5QkMsTUFBQUEsR0FBRyxFQUFFOUM7QUFEeUIsS0FBUixDQUF4QjtBQUdEOztBQUVhLE1BQVYrQyxVQUFVLEdBQUk7QUFFaEIsV0FBTyxFQUFQO0FBQ0Q7O0FBRWMsUUFBVEMsU0FBUyxHQUFJO0FBQ2pCLFFBQUksT0FBTyxLQUFLQyxVQUFaLEtBQTJCLFdBQS9CLEVBQTRDO0FBQzFDLFdBQUtBLFVBQUwsR0FBa0IsTUFBTSwyQkFBeEI7QUFDRDs7QUFDRCxRQUFJQyxNQUFNLEdBQUc7QUFBQ0MsTUFBQUEsS0FBSyxFQUFFO0FBQUNDLFFBQUFBLE9BQU8sRUFBRSxLQUFLSCxVQUFMLENBQWdCRztBQUExQjtBQUFSLEtBQWI7O0FBQ0EsUUFBSSxLQUFLbkIsZUFBVCxFQUEwQjtBQUN4QmlCLE1BQUFBLE1BQU0sQ0FBQ3ZCLEdBQVAsR0FBYSxLQUFLTSxlQUFsQjtBQUNEOztBQUNELFdBQU9pQixNQUFQO0FBQ0Q7O0FBRURHLEVBQUFBLGtCQUFrQixHQUFJO0FBQ3BCLFFBQUlDLFFBQVEsR0FBRyxLQUFmOztBQUNBLFNBQUssTUFBTUMsR0FBWCxJQUFrQkMsTUFBTSxDQUFDQyxJQUFQLENBQVlsQyxnQ0FBWixDQUFsQixFQUFpRDtBQUMvQyxVQUFJSCxnQkFBRXNDLEdBQUYsQ0FBTSxLQUFLQyxPQUFYLEVBQW9CSixHQUFwQixDQUFKLEVBQThCO0FBQzVCSyx3QkFBSUMsSUFBSixDQUFVLFNBQVFOLEdBQUksY0FBYSxLQUFLSSxPQUFMLENBQWFKLEdBQWIsQ0FBa0IsWUFBckQ7O0FBQ0EsWUFBSW5DLGdCQUFFc0MsR0FBRixDQUFNLEtBQUtsRCxJQUFYLEVBQWlCK0MsR0FBakIsQ0FBSixFQUEyQjtBQUN6QkssMEJBQUlDLElBQUosQ0FBVSw4QkFBNkIsS0FBS3JELElBQUwsQ0FBVStDLEdBQVYsQ0FBZSxxQkFBdEQ7QUFDRDs7QUFDRCxhQUFLL0MsSUFBTCxDQUFVK0MsR0FBVixJQUFpQixLQUFLSSxPQUFMLENBQWFKLEdBQWIsQ0FBakI7QUFDQUQsUUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDRDtBQUNGOztBQUNELFdBQU9BLFFBQVA7QUFDRDs7QUFFa0IsUUFBYlEsYUFBYSxDQUFFLEdBQUdDLElBQUwsRUFBVztBQUM1QixTQUFLQyxhQUFMLEdBQXFCLEVBQXJCOztBQUNBLFFBQUk7QUFDRixVQUFJLENBQUNDLFNBQUQsRUFBWUMsSUFBWixJQUFvQixNQUFNLE1BQU1KLGFBQU4sQ0FBb0IsR0FBR0MsSUFBdkIsQ0FBOUI7QUFDQSxXQUFLdkQsSUFBTCxDQUFVeUQsU0FBVixHQUFzQkEsU0FBdEI7O0FBSUEsVUFBSSxLQUFLWixrQkFBTCxFQUFKLEVBQStCO0FBQzdCLGFBQUtjLG1CQUFMO0FBQ0Q7O0FBRUQsWUFBTSxLQUFLQyxLQUFMLEVBQU47QUFHQUYsTUFBQUEsSUFBSSxHQUFHVixNQUFNLENBQUNhLE1BQVAsQ0FBYyxFQUFkLEVBQWtCaEcsaUJBQWxCLEVBQXFDNkYsSUFBckMsQ0FBUDtBQUVBQSxNQUFBQSxJQUFJLENBQUNJLElBQUwsR0FBWSxLQUFLOUQsSUFBTCxDQUFVOEQsSUFBdEI7O0FBRUEsVUFBSWxELGdCQUFFc0MsR0FBRixDQUFNLEtBQUtsRCxJQUFYLEVBQWlCLGNBQWpCLENBQUosRUFBc0M7QUFDcEMsY0FBTSxLQUFLK0QsY0FBTCxDQUFvQjtBQUFDbkYsVUFBQUEsWUFBWSxFQUFFLEtBQUtvQixJQUFMLENBQVVwQjtBQUF6QixTQUFwQixDQUFOO0FBQ0Q7O0FBRUQsVUFBSWdDLGdCQUFFc0MsR0FBRixDQUFNLEtBQUtsRCxJQUFYLEVBQWlCLG9CQUFqQixDQUFKLEVBQTRDO0FBQzFDLGNBQU0sS0FBSytELGNBQUwsQ0FBb0I7QUFBQ2xGLFVBQUFBLGtCQUFrQixFQUFFLEtBQUttQixJQUFMLENBQVVuQjtBQUEvQixTQUFwQixDQUFOO0FBQ0Q7O0FBRUQsVUFBSStCLGdCQUFFc0MsR0FBRixDQUFNLEtBQUtsRCxJQUFYLEVBQWlCLGVBQWpCLENBQUosRUFBdUM7QUFDckMsY0FBTSxLQUFLK0QsY0FBTCxDQUFvQjtBQUFDakYsVUFBQUEsYUFBYSxFQUFFLEtBQUtrQixJQUFMLENBQVVsQjtBQUExQixTQUFwQixDQUFOO0FBQ0Q7O0FBRUQsVUFBSWtGLFdBQVcsR0FBRztBQUNoQmhGLFFBQUFBLHlCQUF5QixFQUFFTCxnQkFBZ0IsQ0FBQ0sseUJBRDVCO0FBRWhCRCxRQUFBQSx5QkFBeUIsRUFBRUosZ0JBQWdCLENBQUNJO0FBRjVCLE9BQWxCOztBQUlBLFVBQUk2QixnQkFBRXNDLEdBQUYsQ0FBTSxLQUFLbEQsSUFBWCxFQUFpQiwyQkFBakIsQ0FBSixFQUFtRDtBQUNqRGdFLFFBQUFBLFdBQVcsQ0FBQ2hGLHlCQUFaLEdBQXdDLEtBQUtnQixJQUFMLENBQVVoQix5QkFBbEQ7QUFDRDs7QUFDRCxVQUFJNEIsZ0JBQUVzQyxHQUFGLENBQU0sS0FBS2xELElBQVgsRUFBaUIsMkJBQWpCLENBQUosRUFBbUQ7QUFDakRnRSxRQUFBQSxXQUFXLENBQUNqRix5QkFBWixHQUF3QyxLQUFLaUIsSUFBTCxDQUFVakIseUJBQWxEO0FBQ0Q7O0FBQ0QsVUFBSTZCLGdCQUFFc0MsR0FBRixDQUFNLEtBQUtsRCxJQUFYLEVBQWlCLDhCQUFqQixDQUFKLEVBQXNEO0FBQ3BEZ0UsUUFBQUEsV0FBVyxDQUFDL0UsNEJBQVosR0FBMkMsS0FBS2UsSUFBTCxDQUFVZiw0QkFBckQ7QUFDRDs7QUFDRCxVQUFJMkIsZ0JBQUVzQyxHQUFGLENBQU0sS0FBS2xELElBQVgsRUFBaUIsc0JBQWpCLENBQUosRUFBOEM7QUFDNUNnRSxRQUFBQSxXQUFXLENBQUM5RSxvQkFBWixHQUFtQyxLQUFLYyxJQUFMLENBQVVkLG9CQUE3QztBQUNEOztBQUNELFVBQUkwQixnQkFBRXNDLEdBQUYsQ0FBTSxLQUFLbEQsSUFBWCxFQUFpQixtQkFBakIsQ0FBSixFQUEyQztBQUN6Q29ELHdCQUFJQyxJQUFKLENBQVUsNkNBQTRDLEtBQUtyRCxJQUFMLENBQVViLGlCQUFrQixHQUFsRjs7QUFDQTZFLFFBQUFBLFdBQVcsQ0FBQzdFLGlCQUFaLEdBQWdDLEtBQUthLElBQUwsQ0FBVWIsaUJBQTFDO0FBQ0Q7O0FBRUQsWUFBTSxLQUFLNEUsY0FBTCxDQUFvQkMsV0FBcEIsQ0FBTjs7QUFHQSxVQUFJLEtBQUtoRSxJQUFMLENBQVVpRSxrQkFBZCxFQUFrQztBQUNoQ2Isd0JBQUlDLElBQUosQ0FBVSx1Q0FBc0MsS0FBS3JELElBQUwsQ0FBVWlFLGtCQUFtQixHQUE3RTs7QUFDQSxhQUFLQyxXQUFMLEdBQW1CLElBQUlDLHFCQUFNQyxXQUFWLENBQXNCLEtBQUtwRSxJQUFMLENBQVVpRSxrQkFBaEMsQ0FBbkI7QUFDQSxjQUFNLEtBQUtDLFdBQUwsQ0FBaUJOLEtBQWpCLEVBQU47QUFDRDs7QUFDRCxhQUFPLENBQUNILFNBQUQsRUFBWUMsSUFBWixDQUFQO0FBQ0QsS0EzREQsQ0EyREUsT0FBT1csQ0FBUCxFQUFVO0FBQ1ZqQixzQkFBSWtCLEtBQUosQ0FBVUMsSUFBSSxDQUFDQyxTQUFMLENBQWVILENBQWYsQ0FBVjs7QUFDQSxZQUFNLEtBQUtJLGFBQUwsRUFBTjtBQUNBLFlBQU1KLENBQU47QUFDRDtBQUNGOztBQUVVLFFBQUxULEtBQUssR0FBSTtBQUNiLFNBQUs1RCxJQUFMLENBQVUwRSxPQUFWLEdBQW9CLENBQUMsQ0FBQyxLQUFLMUUsSUFBTCxDQUFVMEUsT0FBaEM7QUFDQSxTQUFLMUUsSUFBTCxDQUFVMkUsU0FBVixHQUFzQixDQUFDLENBQUMsS0FBSzNFLElBQUwsQ0FBVTJFLFNBQWxDO0FBRUEsVUFBTSx1QkFBTjtBQUVBLFNBQUszRSxJQUFMLENBQVU0RSxhQUFWLEdBQTBCLElBQTFCO0FBQ0EsVUFBTTtBQUFDeEQsTUFBQUEsTUFBRDtBQUFTMEMsTUFBQUEsSUFBVDtBQUFlZSxNQUFBQTtBQUFmLFFBQTZCLE1BQU0sS0FBS0MsZUFBTCxFQUF6Qzs7QUFDQTFCLG9CQUFJQyxJQUFKLENBQVUsOENBQTZDUyxJQUFLLG1CQUFrQmUsVUFBVyxFQUF6Rjs7QUFDQSxTQUFLN0UsSUFBTCxDQUFVb0IsTUFBVixHQUFtQkEsTUFBbkI7QUFDQSxTQUFLcEIsSUFBTCxDQUFVOEQsSUFBVixHQUFpQkEsSUFBakI7QUFDQSxTQUFLOUQsSUFBTCxDQUFVNkUsVUFBVixHQUF1QkEsVUFBdkI7O0FBRUEsUUFBSSxLQUFLN0UsSUFBTCxDQUFVK0UsdUJBQWQsRUFBdUM7QUFDckMsVUFBSUYsVUFBSixFQUFnQjtBQUNkekIsd0JBQUlDLElBQUosQ0FBVSxrRkFBVjtBQUNELE9BRkQsTUFFTztBQUNMRCx3QkFBSUMsSUFBSixDQUFVLDBDQUF5QyxLQUFLckQsSUFBTCxDQUFVK0UsdUJBQXdCLEdBQXJGOztBQUNBLGFBQUsvRSxJQUFMLENBQVVvQixNQUFWLENBQWlCNEQsY0FBakIsR0FBa0MsS0FBS2hGLElBQUwsQ0FBVStFLHVCQUE1QztBQUNEO0FBQ0Y7O0FBR0QsUUFBSSxDQUFDLEtBQUsvRSxJQUFMLENBQVVpRixlQUFYLElBQThCLEtBQUtqRixJQUFMLENBQVVvQixNQUE1QyxFQUFvRDtBQUNsRCxXQUFLcEIsSUFBTCxDQUFVaUYsZUFBVixHQUE0QixNQUFNLEtBQUtqRixJQUFMLENBQVVvQixNQUFWLENBQWlCOEQsa0JBQWpCLEVBQWxDOztBQUNBOUIsc0JBQUlDLElBQUosQ0FBVSx3REFBdUQsS0FBS3JELElBQUwsQ0FBVWlGLGVBQWdCLEdBQTNGO0FBQ0Q7O0FBRUQsVUFBTUUsaUJBQWlCLEdBQUcscUNBQXlCLEtBQUtuRixJQUFMLENBQVVpRixlQUFuQyxDQUExQjs7QUFDQSxRQUFJLEtBQUtqRixJQUFMLENBQVVpRixlQUFWLEtBQThCRSxpQkFBbEMsRUFBcUQ7QUFDbkQvQixzQkFBSUMsSUFBSixDQUFVLGdEQUErQyxLQUFLckQsSUFBTCxDQUFVaUYsZUFBZ0IsU0FBUUUsaUJBQWtCLEdBQTdHOztBQUNBLFdBQUtuRixJQUFMLENBQVVpRixlQUFWLEdBQTRCRSxpQkFBNUI7QUFDRDs7QUFDRCxRQUFJQyxvQkFBS0MsZUFBTCxDQUFxQixLQUFLckYsSUFBTCxDQUFVaUYsZUFBL0IsRUFBZ0QsR0FBaEQsRUFBcUQsS0FBckQsQ0FBSixFQUFpRTtBQUMvRCxZQUFNLElBQUlLLEtBQUosQ0FBVywyQ0FBMEMsS0FBS3RGLElBQUwsQ0FBVWlGLGVBQWdCLHFCQUEvRSxDQUFOO0FBQ0Q7O0FBRUQsUUFBSXJFLGdCQUFFMkUsT0FBRixDQUFVLEtBQUsxRCxZQUFmLE1BQWlDLENBQUMsS0FBSzdCLElBQUwsQ0FBVXdGLGlCQUFYLElBQWdDLENBQUMsS0FBS3hGLElBQUwsQ0FBVTZFLFVBQTVFLENBQUosRUFBNkY7QUFFM0YsV0FBS2hELFlBQUwsR0FBb0IsTUFBTSxxQ0FBMUI7QUFDRDs7QUFDRCxTQUFLNEQsUUFBTCxDQUFjLHVCQUFkOztBQUVBLFFBQUk3RSxnQkFBRThFLE9BQUYsQ0FBVSxLQUFLMUYsSUFBTCxDQUFVaEMsV0FBcEIsTUFBcUMsUUFBekMsRUFBbUQ7QUFDakRvRixzQkFBSUMsSUFBSixDQUFTLHVCQUFUOztBQUNBLFdBQUs3QixNQUFMLEdBQWMsSUFBZDtBQUNBLFdBQUt4QixJQUFMLENBQVUyRixHQUFWLEdBQWdCQyxTQUFoQjtBQUNBLFdBQUs1RixJQUFMLENBQVU2RixnQkFBVixHQUE2QixLQUFLN0YsSUFBTCxDQUFVNkYsZ0JBQVYsSUFBOEIsRUFBM0Q7QUFDQSxXQUFLN0YsSUFBTCxDQUFVOEYsUUFBVixHQUFxQnhILGdCQUFyQjtBQUNBLFdBQUtxRCxXQUFMLEdBQW1CLEtBQUszQixJQUFMLENBQVUrRixnQkFBVixLQUNqQixLQUFLQyxZQUFMLEtBQ0ksa0JBREosR0FFSyxVQUFTLEtBQUtoRyxJQUFMLENBQVVpRyxPQUFRLElBQUcsS0FBS2pHLElBQUwsQ0FBVWtHLElBQUssVUFIakMsQ0FBbkI7O0FBS0EsVUFBSWQsb0JBQUtDLGVBQUwsQ0FBcUIsS0FBS3JGLElBQUwsQ0FBVWlGLGVBQS9CLEVBQWdELEdBQWhELEVBQXFELE1BQXJELENBQUosRUFBa0U7QUFFaEUsYUFBS2pGLElBQUwsQ0FBVTZGLGdCQUFWLENBQTJCdEMsSUFBM0IsR0FBa0MsQ0FBQyxJQUFELEVBQU8sS0FBSzVCLFdBQVosQ0FBbEM7QUFDRDtBQUNGLEtBZkQsTUFlTyxJQUFJLEtBQUszQixJQUFMLENBQVUyRixHQUFWLElBQWlCLEtBQUszRixJQUFMLENBQVU4RixRQUEvQixFQUF5QztBQUM5QyxZQUFNLEtBQUtLLFlBQUwsRUFBTjtBQUNEOztBQUNELFNBQUtWLFFBQUwsQ0FBYyxlQUFkOztBQUlBLFFBQUksS0FBS3pGLElBQUwsQ0FBVTJGLEdBQWQsRUFBbUI7QUFDakIsWUFBTSw0QkFBZ0IsS0FBSzNGLElBQUwsQ0FBVTJGLEdBQTFCLENBQU47O0FBRUEsVUFBSSxDQUFDLEtBQUszRixJQUFMLENBQVU4RixRQUFmLEVBQXlCO0FBQ3ZCLGFBQUs5RixJQUFMLENBQVU4RixRQUFWLEdBQXFCLE1BQU0sK0JBQWdCLEtBQUs5RixJQUFMLENBQVUyRixHQUExQixDQUEzQjtBQUNEO0FBQ0Y7O0FBRUQsVUFBTSxLQUFLUyxRQUFMLEVBQU47QUFFQSxTQUFLakYsR0FBTCxHQUFXLElBQUlrRixvQ0FBSixDQUFtQixLQUFLeEUsWUFBeEIsRUFBc0MsS0FBSzdCLElBQTNDLENBQVg7QUFJQSxTQUFLbUIsR0FBTCxDQUFTbUYsdUJBQVQsR0FBbUNDLEtBQW5DLENBQTBDbEMsQ0FBRCxJQUFPakIsZ0JBQUlvRCxLQUFKLENBQVVuQyxDQUFWLENBQWhEOztBQUVBLFVBQU1vQyxlQUFlLEdBQUc3RixnQkFBRUMsT0FBRixDQUFVLFNBQVM2RixPQUFULEdBQW9CO0FBQ3BEdEQsc0JBQUlDLElBQUosQ0FBUywyR0FBVDtBQUNELEtBRnVCLENBQXhCOztBQUdBLFVBQU1zRCxlQUFlLEdBQUcsWUFBWTtBQUNsQyxVQUFJLEtBQUszRyxJQUFMLENBQVU0RyxjQUFkLEVBQThCO0FBQzVCSCxRQUFBQSxlQUFlO0FBQ2YsZUFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBTUksTUFBTSxHQUFHLE1BQU0sS0FBS0YsZUFBTCxFQUFyQjs7QUFDQSxVQUFJRSxNQUFKLEVBQVk7QUFDVixhQUFLcEIsUUFBTCxDQUFjLG1CQUFkO0FBQ0Q7O0FBQ0QsYUFBT29CLE1BQVA7QUFDRCxLQVhEOztBQVlBLFVBQU1DLG1CQUFtQixHQUFHLE1BQU1ILGVBQWUsRUFBakQ7O0FBRUF2RCxvQkFBSUMsSUFBSixDQUFVLGNBQWEsS0FBSzJDLFlBQUwsS0FBc0IsYUFBdEIsR0FBc0MsV0FBWSxFQUF6RTs7QUFFQSxRQUFJLEtBQUtlLFdBQUwsRUFBSixFQUF3QjtBQUN0QixVQUFJLEtBQUsvRyxJQUFMLENBQVVnSCx1QkFBZCxFQUF1QztBQUNyQyxhQUFLQyxvQkFBTCxDQUEwQnRKLHdCQUExQjtBQUNBLGNBQU0sa0RBQXdCLEtBQUtxQyxJQUFMLENBQVVvQixNQUFsQyxDQUFOO0FBQ0Q7O0FBSUQsVUFBSSxLQUFLOEYsUUFBTCxNQUFtQixLQUFLbEgsSUFBTCxDQUFVbUgsdUJBQWpDLEVBQTBEO0FBQ3hELFlBQUksTUFBTSxLQUFLbkgsSUFBTCxDQUFVb0IsTUFBVixDQUFpQmdHLDBCQUFqQixDQUE0QyxLQUFLcEgsSUFBTCxDQUFVbUgsdUJBQXRELENBQVYsRUFBMEY7QUFDeEYvRCwwQkFBSW9ELEtBQUosQ0FBVyxtQ0FBWDtBQUNEO0FBQ0Y7O0FBRUQsV0FBS2EsV0FBTCxHQUFtQixNQUFNLGtEQUF3QixLQUFLckgsSUFBTCxDQUFVb0IsTUFBbEMsRUFBMEMsS0FBS3BCLElBQS9DLEVBQXFELEtBQUtrSCxRQUFMLEVBQXJELEVBQXNFLE1BQU9JLEdBQVAsSUFBZTtBQUM1RyxjQUFNLDRDQUFrQkEsR0FBbEIsQ0FBTjtBQUtBLGNBQU0sa0RBQXdCQSxHQUF4QixFQUE2QixLQUFLdEgsSUFBbEMsRUFBd0MsS0FBS2tILFFBQUwsRUFBeEMsQ0FBTjtBQUNELE9BUHdCLENBQXpCOztBQVNBLFVBQUksS0FBS2xILElBQUwsQ0FBVXVILGFBQVYsSUFBMkIsRUFBRSxNQUFNLHVDQUF1QixLQUFLdkgsSUFBTCxDQUFVb0IsTUFBakMsQ0FBUixDQUEvQixFQUFrRjtBQUNoRixjQUFNb0csUUFBUSxHQUFHNUcsZ0JBQUU2RyxRQUFGLENBQVcsS0FBS3pILElBQUwsQ0FBVXVILGFBQXJCLEVBQW9DO0FBQUNHLFVBQUFBLE1BQU0sRUFBRTtBQUFULFNBQXBDLENBQWpCOztBQUNBdEUsd0JBQUlDLElBQUosQ0FBVSwwQ0FBeUNtRSxRQUFTLEdBQTVEOztBQUNBLFlBQUksTUFBTSxxQ0FBcUIsS0FBS3hILElBQUwsQ0FBVW9CLE1BQS9CLEVBQXVDLEtBQUtwQixJQUFMLENBQVV1SCxhQUFqRCxDQUFWLEVBQTJFO0FBQ3pFbkUsMEJBQUlDLElBQUosQ0FBVSxvQkFBbUJtRSxRQUFTLHFCQUF0QztBQUNELFNBRkQsTUFFTztBQUNMcEUsMEJBQUlDLElBQUosQ0FBVTtBQUNwQiwrREFEVTs7QUFFQSxnQkFBTSw0Q0FBa0IsS0FBS3JELElBQUwsQ0FBVW9CLE1BQTVCLENBQU47QUFDQSxnQkFBTSx5Q0FBeUIsS0FBS3BCLElBQUwsQ0FBVW9CLE1BQW5DLEVBQTJDLEtBQUtwQixJQUFMLENBQVV1SCxhQUFyRCxDQUFOO0FBQ0Q7O0FBQ0QsYUFBSzlCLFFBQUwsQ0FBYyxxQkFBZDtBQUNEOztBQUVELFlBQU0sS0FBS2tDLFFBQUwsRUFBTjs7QUFFQSxVQUFJLEtBQUszSCxJQUFMLENBQVV1SCxhQUFWLEtBQTJCLE1BQU0sdUNBQXVCLEtBQUt2SCxJQUFMLENBQVVvQixNQUFqQyxDQUFqQyxDQUFKLEVBQStFO0FBRTdFLGNBQU0sbUNBQW1CLEtBQUtwQixJQUFMLENBQVVvQixNQUE3QixFQUFxQyxLQUFLcEIsSUFBTCxDQUFVdUgsYUFBL0MsQ0FBTjtBQUNBLGFBQUs5QixRQUFMLENBQWMscUJBQWQ7QUFDRDs7QUFFRCxVQUFJLEtBQUt6RixJQUFMLENBQVU0SCxhQUFWLElBQTJCLEtBQUtiLFdBQUwsRUFBL0IsRUFBbUQ7QUFDakQsWUFBSTtBQUNGLGdCQUFNYyxHQUFHLEdBQUcsSUFBSUMsa0JBQUosQ0FBUTtBQUFDaEUsWUFBQUE7QUFBRCxXQUFSLENBQVo7QUFDQSxnQkFBTStELEdBQUcsQ0FBQ0UsT0FBSixFQUFOO0FBQ0EsZUFBSy9ILElBQUwsQ0FBVW9CLE1BQVYsQ0FBaUJ5RyxHQUFqQixHQUF1QkEsR0FBdkI7QUFDRCxTQUpELENBSUUsT0FBT3hELENBQVAsRUFBVTtBQUNWakIsMEJBQUlDLElBQUosQ0FBVSxtRUFBa0VnQixDQUFDLENBQUMyRCxPQUFRLEVBQXRGO0FBQ0Q7QUFDRjs7QUFFRCxXQUFLdkMsUUFBTCxDQUFjLFlBQWQ7O0FBQ0EsVUFBSSxDQUFDcUIsbUJBQUwsRUFBMEI7QUFFeEIsY0FBTUgsZUFBZSxFQUFyQjtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSxLQUFLM0csSUFBTCxDQUFVMkYsR0FBZCxFQUFtQjtBQUNqQixZQUFNLEtBQUtzQyxVQUFMLEVBQU47QUFDQSxXQUFLeEMsUUFBTCxDQUFjLGNBQWQ7QUFDRDs7QUFHRCxRQUFJLENBQUMsS0FBS3pGLElBQUwsQ0FBVTJGLEdBQVgsSUFBa0IsS0FBSzNGLElBQUwsQ0FBVThGLFFBQTVCLElBQXdDLENBQUMsS0FBS3RFLE1BQWxELEVBQTBEO0FBQ3hELFVBQUksRUFBQyxNQUFNLEtBQUt4QixJQUFMLENBQVVvQixNQUFWLENBQWlCOEcsY0FBakIsQ0FBZ0MsS0FBS2xJLElBQUwsQ0FBVThGLFFBQTFDLENBQVAsQ0FBSixFQUFnRTtBQUM5RDFDLHdCQUFJK0UsYUFBSixDQUFtQiwrQkFBOEIsS0FBS25JLElBQUwsQ0FBVThGLFFBQVMsV0FBcEU7QUFDRDtBQUNGOztBQUVELFFBQUksS0FBSzlGLElBQUwsQ0FBVW9JLFdBQWQsRUFBMkI7QUFDekIsVUFBSSxLQUFLckIsV0FBTCxFQUFKLEVBQXdCO0FBQ3RCM0Qsd0JBQUlvRCxLQUFKLENBQVUseURBQVY7O0FBQ0EsYUFBSyxNQUFNLENBQUNWLFFBQUQsRUFBV3VDLGtCQUFYLENBQVgsSUFBNkN6SCxnQkFBRTBILE9BQUYsQ0FBVS9ELElBQUksQ0FBQ2dFLEtBQUwsQ0FBVyxLQUFLdkksSUFBTCxDQUFVb0ksV0FBckIsQ0FBVixDQUE3QyxFQUEyRjtBQUN6RixnQkFBTSxLQUFLcEksSUFBTCxDQUFVb0IsTUFBVixDQUFpQm9ILGNBQWpCLENBQWdDMUMsUUFBaEMsRUFBMEN1QyxrQkFBMUMsQ0FBTjtBQUNEO0FBQ0YsT0FMRCxNQUtPO0FBQ0xqRix3QkFBSXFGLElBQUosQ0FBUyx5REFDUCwrQ0FERjtBQUVEO0FBQ0Y7O0FBRUQsUUFBSSxLQUFLMUIsV0FBTCxFQUFKLEVBQXdCO0FBQ3RCLFVBQUksS0FBSy9HLElBQUwsQ0FBVTBJLHdCQUFkLEVBQXdDO0FBQ3RDLGNBQU0sS0FBSzFJLElBQUwsQ0FBVW9CLE1BQVYsQ0FBaUJ1SCxvQkFBakIsQ0FBc0MsS0FBSzNJLElBQUwsQ0FBVThGLFFBQWhELENBQU47QUFDRCxPQUZELE1BRU8sSUFBSSxLQUFLOUYsSUFBTCxDQUFVMEksd0JBQVYsS0FBdUMsS0FBM0MsRUFBa0Q7QUFDdkQsY0FBTSxLQUFLMUksSUFBTCxDQUFVb0IsTUFBVixDQUFpQndILHFCQUFqQixDQUF1QyxLQUFLNUksSUFBTCxDQUFVOEYsUUFBakQsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsVUFBTSxLQUFLK0MsUUFBTCxDQUFjLEtBQUs3SSxJQUFMLENBQVV5RCxTQUF4QixFQUFtQ29CLFVBQW5DLENBQU47QUFFQSxVQUFNLEtBQUtpRSxlQUFMLENBQXFCLEtBQUs5SSxJQUFMLENBQVVYLFlBQS9CLENBQU47QUFFQSxVQUFNLEtBQUswSixxQkFBTCxDQUEyQixLQUFLL0ksSUFBTCxDQUFVZ0osV0FBckMsQ0FBTjtBQUNBLFNBQUt2RCxRQUFMLENBQWMsZ0JBQWQ7O0FBR0EsUUFBSSxLQUFLeUIsUUFBTCxNQUFtQixDQUFDLEtBQUtsQixZQUFMLEVBQXBCLElBQ0NaLG9CQUFLQyxlQUFMLENBQXFCLEtBQUtyRixJQUFMLENBQVVpRixlQUEvQixFQUFnRCxJQUFoRCxFQUFzRCxNQUF0RCxDQURMLEVBQ29FO0FBRWxFLFlBQU0sS0FBS2pGLElBQUwsQ0FBVW9CLE1BQVYsQ0FBaUI2SCxPQUFqQixDQUF5QixLQUFLdEgsV0FBOUIsQ0FBTjtBQUNEOztBQUVELFFBQUksS0FBS3VGLFFBQUwsTUFBbUIsS0FBS2xILElBQUwsQ0FBVWtKLFdBQWpDLEVBQThDO0FBQzVDOUYsc0JBQUlvRCxLQUFKLENBQVUsNkJBQVY7O0FBQ0EsWUFBTSxLQUFLMkMsbUJBQUwsRUFBTjtBQUNBLFdBQUsxRCxRQUFMLENBQWMseUJBQWQ7QUFDRDs7QUFFRCxRQUFJLEtBQUt5QixRQUFMLE1BQW1CLEtBQUtsQixZQUFMLEVBQW5CLElBQTBDWixvQkFBS0MsZUFBTCxDQUFxQixLQUFLckYsSUFBTCxDQUFVaUYsZUFBL0IsRUFBZ0QsSUFBaEQsRUFBc0QsTUFBdEQsQ0FBOUMsRUFBNkc7QUFFM0csWUFBTSxLQUFLbUUsTUFBTCxDQUFZLEtBQUt6SCxXQUFqQixDQUFOO0FBQ0Q7QUFDRjs7QUFPYSxRQUFSa0gsUUFBUSxDQUFFcEYsU0FBRixFQUFhb0IsVUFBYixFQUF5QjtBQUVyQyxRQUFJLENBQUNPLG9CQUFLaUUsUUFBTCxDQUFjLEtBQUtsSSxHQUFMLENBQVNxRSxpQkFBdkIsQ0FBTCxFQUFnRDtBQUM5QyxZQUFNLEtBQUtyRSxHQUFMLENBQVNtSSx3QkFBVCxFQUFOO0FBQ0Q7O0FBRUQsVUFBTUMsaUJBQWlCLEdBQUcsS0FBS3ZELFlBQUwsTUFDckIsQ0FBQyxLQUFLN0UsR0FBTCxDQUFTcUUsaUJBRFcsSUFFckIsd0JBQVksS0FBS3JFLEdBQUwsQ0FBU3FJLFVBQXJCLENBRkw7QUFHQSxVQUFNQyxrQ0FBMkJDLGlCQUEzQixDQUE2QyxLQUFLMUosSUFBTCxDQUFVOEQsSUFBdkQsRUFBNkQsS0FBSzNDLEdBQUwsQ0FBU3dJLEdBQVQsQ0FBYXpELElBQTFFLEVBQWdGO0FBQ3BGMEQsTUFBQUEsVUFBVSxFQUFFTCxpQkFBaUIsR0FBRyxLQUFLcEksR0FBTCxDQUFTMEksYUFBWixHQUE0QixJQUQyQjtBQUVwRk4sTUFBQUE7QUFGb0YsS0FBaEYsQ0FBTjtBQU9BLFFBQUlPLGtCQUFrQixHQUFHakssY0FBYyxDQUFDa0ssSUFBeEM7O0FBQ0EsUUFBSSxLQUFLL0osSUFBTCxDQUFVZ0ssZ0JBQVYsSUFBOEIsRUFBRSxNQUFNLEtBQUs3SSxHQUFMLENBQVM4SSxhQUFULEVBQVIsQ0FBbEMsRUFBcUU7QUFHbkUsWUFBTUMsZUFBZSxHQUFHLE1BQU0sS0FBSy9JLEdBQUwsQ0FBU21GLHVCQUFULEVBQTlCOztBQUNBLFVBQUk0RCxlQUFKLEVBQXFCO0FBQ25CSixRQUFBQSxrQkFBa0IsR0FBR0ssY0FBS0MsU0FBTCxDQUFlRixlQUFmLENBQXJCO0FBQ0Q7QUFDRjs7QUFDRDlHLG9CQUFJb0QsS0FBSixDQUFXLHdFQUF1RXNELGtCQUFtQixHQUFyRzs7QUFDQSxRQUFJeEssc0JBQXNCLENBQUMrSyxNQUF2QixNQUFtQyxDQUFDLEtBQUtySyxJQUFMLENBQVVrSyxlQUE5QyxJQUFpRSxDQUFDLEtBQUtsSyxJQUFMLENBQVVzSyxhQUFoRixFQUErRjtBQUM3RmxILHNCQUFJb0QsS0FBSixDQUFXLGlHQUFELEdBQ1Asc0RBREg7QUFFRDs7QUFDRCxXQUFPLE1BQU1sSCxzQkFBc0IsQ0FBQ2lMLE9BQXZCLENBQStCVCxrQkFBL0IsRUFBbUQsWUFBWTtBQUMxRSxVQUFJLEtBQUs5SixJQUFMLENBQVV3SyxTQUFkLEVBQXlCO0FBQ3ZCcEgsd0JBQUlvRCxLQUFKLENBQVcsMkVBQVg7O0FBQ0EsY0FBTSxLQUFLckYsR0FBTCxDQUFTc0osZ0JBQVQsRUFBTjtBQUNBLGFBQUtoRixRQUFMLENBQWMsZ0JBQWQ7QUFDRCxPQUpELE1BSU8sSUFBSSxDQUFDTCxvQkFBS2lFLFFBQUwsQ0FBYyxLQUFLbEksR0FBTCxDQUFTcUUsaUJBQXZCLENBQUwsRUFBZ0Q7QUFDckQsY0FBTSxLQUFLckUsR0FBTCxDQUFTdUosWUFBVCxFQUFOO0FBQ0Q7O0FBR0QsWUFBTUQsZ0JBQWdCLEdBQUcsTUFBT0UsR0FBUCxJQUFlO0FBQ3RDdkgsd0JBQUlvRCxLQUFKLENBQVVtRSxHQUFWOztBQUNBLFlBQUksS0FBSzNLLElBQUwsQ0FBVXdGLGlCQUFkLEVBQWlDO0FBQy9CcEMsMEJBQUlvRCxLQUFKLENBQVUseUZBQVY7O0FBQ0EsZ0JBQU0sSUFBSWxCLEtBQUosQ0FBVXFGLEdBQVYsQ0FBTjtBQUNEOztBQUNEdkgsd0JBQUlxRixJQUFKLENBQVMsMENBQVQ7O0FBQ0EsY0FBTSxLQUFLdEgsR0FBTCxDQUFTc0osZ0JBQVQsRUFBTjtBQUVBLGNBQU0sSUFBSW5GLEtBQUosQ0FBVXFGLEdBQVYsQ0FBTjtBQUNELE9BVkQ7O0FBYUEsVUFBSSxLQUFLM0ssSUFBTCxDQUFVNEssZ0JBQWQsRUFBZ0M7QUFDOUIsYUFBSzNELG9CQUFMLENBQTBCckosNEJBQTFCO0FBQ0Q7O0FBRUQsWUFBTWlOLGNBQWMsR0FBRyxLQUFLN0ssSUFBTCxDQUFVOEssaUJBQVYsS0FBZ0MsS0FBSzlFLFlBQUwsS0FBc0J4SCw0QkFBdEIsR0FBcURELHVCQUFyRixDQUF2QjtBQUNBLFlBQU13TSxvQkFBb0IsR0FBRyxLQUFLL0ssSUFBTCxDQUFVZ0wsdUJBQVYsSUFBcUN0TSwwQkFBbEU7O0FBQ0EwRSxzQkFBSW9ELEtBQUosQ0FBVyxrQ0FBaUNxRSxjQUFlLGVBQWNFLG9CQUFxQixhQUE5Rjs7QUFDQSxVQUFJLENBQUMzRixvQkFBS2lFLFFBQUwsQ0FBYyxLQUFLckosSUFBTCxDQUFVOEssaUJBQXhCLENBQUQsSUFBK0MsQ0FBQzFGLG9CQUFLaUUsUUFBTCxDQUFjLEtBQUtySixJQUFMLENBQVVnTCx1QkFBeEIsQ0FBcEQsRUFBc0c7QUFDcEc1SCx3QkFBSW9ELEtBQUosQ0FBVyxtR0FBWDtBQUNEOztBQUNELFVBQUl5RSxVQUFVLEdBQUcsQ0FBakI7QUFDQSxZQUFNLDZCQUFjSixjQUFkLEVBQThCRSxvQkFBOUIsRUFBb0QsWUFBWTtBQUNwRSxhQUFLdEYsUUFBTCxDQUFjLG1CQUFkOztBQUNBLFlBQUl3RixVQUFVLEdBQUcsQ0FBakIsRUFBb0I7QUFDbEI3SCwwQkFBSUMsSUFBSixDQUFVLHlCQUF3QjRILFVBQVUsR0FBRyxDQUFFLE9BQU1KLGNBQWUsR0FBdEU7QUFDRDs7QUFDRCxZQUFJO0FBSUYsZ0JBQU1LLE9BQU8sR0FBRyxLQUFLckosWUFBTCxDQUFrQnNKLEtBQWxCLElBQTJCLEVBQTNCLEdBQWdDLENBQWhDLEdBQW9DLENBQXBEO0FBQ0EsZUFBSzFKLGVBQUwsR0FBdUIsTUFBTSxxQkFBTXlKLE9BQU4sRUFBZSxLQUFLL0osR0FBTCxDQUFTaUssTUFBVCxDQUFnQjNLLElBQWhCLENBQXFCLEtBQUtVLEdBQTFCLENBQWYsRUFBK0NzQyxTQUEvQyxFQUEwRG9CLFVBQTFELENBQTdCO0FBQ0QsU0FORCxDQU1FLE9BQU93RyxHQUFQLEVBQVk7QUFDWixlQUFLNUYsUUFBTCxDQUFjLGdCQUFkO0FBQ0F3RixVQUFBQSxVQUFVO0FBQ1YsY0FBSUssUUFBUSxHQUFJLGtFQUFpRUQsR0FBRyxDQUFDckQsT0FBUSxFQUE3Rjs7QUFDQSxjQUFJLEtBQUtoQyxZQUFMLEVBQUosRUFBeUI7QUFDdkJzRixZQUFBQSxRQUFRLElBQUssMENBQXlDN00seUJBQTBCLElBQXBFLEdBQ0Msd0ZBREQsR0FFQyx3QkFGYjtBQUdEOztBQUNELGdCQUFNZ00sZ0JBQWdCLENBQUNhLFFBQUQsQ0FBdEI7QUFDRDs7QUFFRCxhQUFLaEssV0FBTCxHQUFtQixLQUFLSCxHQUFMLENBQVNHLFdBQVQsQ0FBcUJiLElBQXJCLENBQTBCLEtBQUtVLEdBQS9CLENBQW5CO0FBQ0EsYUFBS0UsY0FBTCxHQUFzQixJQUF0QjtBQUVBLFlBQUlrSyxrQkFBa0IsR0FBRyxJQUF6Qjs7QUFDQSxZQUFJO0FBQ0YsZ0JBQU0sNkJBQWMsRUFBZCxFQUFrQixJQUFsQixFQUF3QixZQUFZO0FBQ3hDLGlCQUFLOUYsUUFBTCxDQUFjLHFCQUFkOztBQUNBckMsNEJBQUlvRCxLQUFKLENBQVUsc0NBQVY7O0FBQ0EsZ0JBQUk7QUFDRixtQkFBSy9FLGVBQUwsR0FBdUIsS0FBS0EsZUFBTCxLQUF3QixNQUFNLEtBQUtQLFlBQUwsQ0FBa0IsU0FBbEIsRUFBNkIsS0FBN0IsQ0FBOUIsQ0FBdkI7QUFDQSxvQkFBTSxLQUFLc0ssZUFBTCxDQUFxQixLQUFLeEwsSUFBTCxDQUFVOEYsUUFBL0IsRUFBeUMsS0FBSzlGLElBQUwsQ0FBVTZGLGdCQUFuRCxDQUFOO0FBQ0QsYUFIRCxDQUdFLE9BQU93RixHQUFQLEVBQVk7QUFDWkUsY0FBQUEsa0JBQWtCLEdBQUdGLEdBQUcsQ0FBQ0ksS0FBekI7O0FBQ0FySSw4QkFBSW9ELEtBQUosQ0FBVyxpQ0FBZ0M2RSxHQUFHLENBQUNyRCxPQUFRLGdCQUF2RDs7QUFDQSxvQkFBTXFELEdBQU47QUFDRDtBQUNGLFdBWEssQ0FBTjtBQVlBLGVBQUs1RixRQUFMLENBQWMsbUJBQWQ7QUFDRCxTQWRELENBY0UsT0FBTzRGLEdBQVAsRUFBWTtBQUNaLGNBQUlFLGtCQUFKLEVBQXdCO0FBQ3RCbkksNEJBQUlvRCxLQUFKLENBQVUrRSxrQkFBVjtBQUNEOztBQUNELGNBQUlELFFBQVEsR0FBSSx5RUFBd0VELEdBQUcsQ0FBQ3JELE9BQVEsRUFBcEc7O0FBQ0EsY0FBSSxLQUFLaEMsWUFBTCxFQUFKLEVBQXlCO0FBQ3ZCc0YsWUFBQUEsUUFBUSxJQUFLLHlDQUF3QzdNLHlCQUEwQixJQUFuRSxHQUNDLHdGQURELEdBRUMsd0JBRmI7QUFHRDs7QUFDRCxnQkFBTWdNLGdCQUFnQixDQUFDYSxRQUFELENBQXRCO0FBQ0Q7O0FBRUQsWUFBSSxLQUFLdEwsSUFBTCxDQUFVMEwsZ0JBQVYsSUFBOEIsQ0FBQyxLQUFLMUwsSUFBTCxDQUFVd0YsaUJBQTdDLEVBQWdFO0FBQzlELGdCQUFNLHNDQUEwQixLQUFLckUsR0FBL0IsQ0FBTjtBQUNEOztBQUlELGFBQUtBLEdBQUwsQ0FBU3dLLFlBQVQsR0FBd0IsSUFBeEI7QUFDQSxhQUFLbEcsUUFBTCxDQUFjLFlBQWQ7QUFDRCxPQTlESyxDQUFOO0FBK0RELEtBakdZLENBQWI7QUFrR0Q7O0FBRWEsUUFBUlcsUUFBUSxDQUFFcEcsSUFBSSxHQUFHLElBQVQsRUFBZTtBQUMzQixTQUFLeUYsUUFBTCxDQUFjLGNBQWQ7O0FBQ0EsUUFBSSxLQUFLTyxZQUFMLEVBQUosRUFBeUI7QUFDdkIsWUFBTSw4Q0FBbUIsS0FBS2hHLElBQUwsQ0FBVW9CLE1BQTdCLEVBQXFDcEIsSUFBSSxJQUFJLEtBQUtBLElBQWxELENBQU47QUFDRCxLQUZELE1BRU87QUFDTCxZQUFNLDRDQUFrQixLQUFLQSxJQUFMLENBQVVvQixNQUE1QixFQUFvQ3BCLElBQUksSUFBSSxLQUFLQSxJQUFqRCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBS3lGLFFBQUwsQ0FBYyxlQUFkO0FBQ0Q7O0FBRWtCLFFBQWJoQixhQUFhLEdBQUk7QUFDckIsVUFBTSw4Q0FBa0MsS0FBS21ILE1BQXZDLEVBQStDLEtBQUtuSSxTQUFwRCxDQUFOOztBQUVBLFNBQUssTUFBTW9JLFFBQVgsSUFBdUJqTCxnQkFBRWtMLE9BQUYsQ0FBVSxDQUFDLEtBQUtDLHFCQUFOLEVBQTZCLEtBQUtDLGNBQWxDLENBQVYsQ0FBdkIsRUFBcUY7QUFDbkYsWUFBTUgsUUFBUSxDQUFDSSxTQUFULENBQW1CLElBQW5CLENBQU47QUFDQSxZQUFNSixRQUFRLENBQUNLLE9BQVQsRUFBTjtBQUNEOztBQUVELFFBQUksQ0FBQ3RMLGdCQUFFMkUsT0FBRixDQUFVLEtBQUs0RyxjQUFmLENBQUwsRUFBcUM7QUFDbkMsWUFBTUMsa0JBQUVDLEdBQUYsQ0FBTSxLQUFLRixjQUFMLENBQW9CRyxHQUFwQixDQUF5QkMsQ0FBRCxJQUFPQSxDQUFDLENBQUNDLElBQUYsQ0FBTyxJQUFQLENBQS9CLENBQU4sQ0FBTjtBQUNBLFdBQUtMLGNBQUwsR0FBc0IsRUFBdEI7QUFDRDs7QUFFRCxVQUFNLEtBQUtLLElBQUwsRUFBTjs7QUFFQSxRQUFJLEtBQUtyTCxHQUFMLElBQVksQ0FBQyxLQUFLbkIsSUFBTCxDQUFVd0YsaUJBQTNCLEVBQThDO0FBQzVDLFVBQUksS0FBS3hGLElBQUwsQ0FBVTBMLGdCQUFkLEVBQWdDO0FBQzlCLFlBQUk1QixrQkFBa0IsR0FBR2pLLGNBQWMsQ0FBQ2tLLElBQXhDO0FBQ0EsY0FBTUcsZUFBZSxHQUFHLE1BQU0sS0FBSy9JLEdBQUwsQ0FBU21GLHVCQUFULEVBQTlCOztBQUNBLFlBQUk0RCxlQUFKLEVBQXFCO0FBQ25CSixVQUFBQSxrQkFBa0IsR0FBR0ssY0FBS0MsU0FBTCxDQUFlRixlQUFmLENBQXJCO0FBQ0Q7O0FBQ0QsY0FBTTVLLHNCQUFzQixDQUFDaUwsT0FBdkIsQ0FBK0JULGtCQUEvQixFQUFtRCxZQUFZO0FBQ25FLGdCQUFNLDZCQUFpQixLQUFLM0ksR0FBdEIsQ0FBTjtBQUNELFNBRkssQ0FBTjtBQUdELE9BVEQsTUFTTztBQUNMaUMsd0JBQUlvRCxLQUFKLENBQVUsdUVBQVY7QUFDRDtBQUNGOztBQUVELFFBQUksS0FBS3JFLE1BQVQsRUFBaUI7QUFDZmlCLHNCQUFJb0QsS0FBSixDQUFVLDhDQUFWOztBQUNBLFlBQU0sS0FBS2lHLFVBQUwsRUFBTjtBQUNEOztBQUVELFFBQUksS0FBS3pNLElBQUwsQ0FBVTBNLHVCQUFWLEtBQXNDLEtBQTFDLEVBQWlEO0FBQy9DLFlBQU0sS0FBS3RHLFFBQUwsQ0FBY3BELE1BQU0sQ0FBQ2EsTUFBUCxDQUFjLEVBQWQsRUFBa0IsS0FBSzdELElBQXZCLEVBQTZCO0FBQy9DMk0sUUFBQUEsd0JBQXdCLEVBQUU7QUFEcUIsT0FBN0IsQ0FBZCxDQUFOO0FBR0Q7O0FBRUQsUUFBSSxLQUFLNUYsV0FBTCxNQUFzQixDQUFDLEtBQUsvRyxJQUFMLENBQVUwRSxPQUFqQyxJQUE0QyxDQUFDLENBQUMsS0FBSzFFLElBQUwsQ0FBVW9CLE1BQTVELEVBQW9FO0FBQ2xFLFVBQUksS0FBS29DLGFBQUwsQ0FBbUJvSixTQUF2QixFQUFrQztBQUNoQ3hKLHdCQUFJb0QsS0FBSixDQUFXLG1EQUFrRCxLQUFLeEcsSUFBTCxDQUFVOEQsSUFBSyxJQUE1RTs7QUFDQSxjQUFNLDRDQUFrQixLQUFLOUQsSUFBTCxDQUFVb0IsTUFBNUIsQ0FBTjtBQUNBLGNBQU0sS0FBS3BCLElBQUwsQ0FBVW9CLE1BQVYsQ0FBaUJ5TCxNQUFqQixFQUFOO0FBQ0Q7QUFDRjs7QUFFRCxVQUFNQywyQkFBMkIsR0FBRyxLQUFLOUcsWUFBTCxNQUF1QixDQUFDLENBQUMsS0FBS2hHLElBQUwsQ0FBVStNLG9CQUF2RTs7QUFDQSxRQUFJRCwyQkFBSixFQUFpQztBQUMvQixVQUFJO0FBQ0YsY0FBTSxLQUFLRSwwQkFBTCxFQUFOO0FBQ0QsT0FGRCxDQUVFLE9BQU9DLE1BQVAsRUFBZSxDQUFxRjtBQUN2Rzs7QUFFRCxRQUFJLENBQUNyTSxnQkFBRTJFLE9BQUYsQ0FBVSxLQUFLN0UsSUFBZixDQUFMLEVBQTJCO0FBQ3pCLFlBQU0sS0FBS0EsSUFBTCxDQUFVd00sTUFBVixDQUFpQkMsV0FBakIsRUFBTjtBQUNBLFdBQUt6TSxJQUFMLEdBQVksRUFBWjtBQUNEOztBQUVELFFBQUksS0FBS3dELFdBQVQsRUFBc0I7QUFDcEJkLHNCQUFJQyxJQUFKLENBQVMsc0JBQVQ7O0FBQ0EsV0FBS2EsV0FBTCxDQUFpQnNJLElBQWpCO0FBQ0Q7O0FBRUQsU0FBS25NLFFBQUw7QUFFQSxVQUFNLE1BQU1vRSxhQUFOLEVBQU47QUFDRDs7QUFFUyxRQUFKK0gsSUFBSSxHQUFJO0FBQ1osU0FBS25MLGNBQUwsR0FBc0IsS0FBdEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5COztBQUdBLFFBQUksS0FBS0gsR0FBTCxJQUFZLEtBQUtBLEdBQUwsQ0FBU3dLLFlBQXpCLEVBQXVDO0FBQ3JDLFVBQUksS0FBS3hLLEdBQUwsQ0FBU2lNLE9BQWIsRUFBc0I7QUFDcEIsWUFBSTtBQUNGLGdCQUFNLEtBQUtsTSxZQUFMLENBQW1CLFlBQVcsS0FBS3VDLFNBQVUsRUFBN0MsRUFBZ0QsUUFBaEQsQ0FBTjtBQUNELFNBRkQsQ0FFRSxPQUFPNEgsR0FBUCxFQUFZO0FBRVpqSSwwQkFBSW9ELEtBQUosQ0FBVyxxQ0FBb0M2RSxHQUFHLENBQUNyRCxPQUFRLHlCQUEzRDtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSSxDQUFDLEtBQUs3RyxHQUFMLENBQVNxRSxpQkFBVixJQUErQixLQUFLeEYsSUFBTCxDQUFVd0ssU0FBN0MsRUFBd0Q7QUFDdEQsY0FBTSxLQUFLckosR0FBTCxDQUFTa00sSUFBVCxFQUFOO0FBQ0Q7QUFDRjs7QUFFRDVELHNDQUEyQjZELGlCQUEzQixDQUE2QyxLQUFLdE4sSUFBTCxDQUFVOEQsSUFBdkQ7QUFDRDs7QUFFbUIsUUFBZHlKLGNBQWMsQ0FBRUMsR0FBRixFQUFPLEdBQUdqSyxJQUFWLEVBQWdCO0FBQ2xDSCxvQkFBSW9ELEtBQUosQ0FBVyxzQkFBcUJnSCxHQUFJLEdBQXBDOztBQUVBLFFBQUlBLEdBQUcsS0FBSyxzQkFBWixFQUFvQztBQUNsQyxhQUFPLE1BQU0sS0FBS0Msb0JBQUwsQ0FBMEIsR0FBR2xLLElBQTdCLENBQWI7QUFDRDs7QUFFRCxRQUFJaUssR0FBRyxLQUFLLFdBQVosRUFBeUI7QUFDdkIsYUFBTyxNQUFNLEtBQUtoTCxTQUFMLEVBQWI7QUFDRDs7QUFDRCxXQUFPLE1BQU0sTUFBTStLLGNBQU4sQ0FBcUJDLEdBQXJCLEVBQTBCLEdBQUdqSyxJQUE3QixDQUFiO0FBQ0Q7O0FBRWlCLFFBQVo0QyxZQUFZLEdBQUk7QUFDcEIsYUFBU3VILG9CQUFULENBQStCL0gsR0FBL0IsRUFBb0M7QUFDbEMsYUFBUSx1Q0FBRCxDQUEwQ2dJLElBQTFDLENBQStDaEksR0FBL0MsQ0FBUDtBQUNEOztBQUdELFFBQUksQ0FBQyxLQUFLM0YsSUFBTCxDQUFVOEYsUUFBWCxJQUF1QjRILG9CQUFvQixDQUFDLEtBQUsxTixJQUFMLENBQVUyRixHQUFYLENBQS9DLEVBQWdFO0FBQzlELFdBQUszRixJQUFMLENBQVU4RixRQUFWLEdBQXFCLEtBQUs5RixJQUFMLENBQVUyRixHQUEvQjtBQUNBLFdBQUszRixJQUFMLENBQVUyRixHQUFWLEdBQWdCLEVBQWhCO0FBQ0Q7O0FBRUQsUUFBSyxLQUFLM0YsSUFBTCxDQUFVOEYsUUFBVixJQUFzQjRILG9CQUFvQixDQUFDLEtBQUsxTixJQUFMLENBQVU4RixRQUFYLENBQTNDLEtBQ0MsS0FBSzlGLElBQUwsQ0FBVTJGLEdBQVYsS0FBa0IsRUFBbEIsSUFBd0IrSCxvQkFBb0IsQ0FBQyxLQUFLMU4sSUFBTCxDQUFVMkYsR0FBWCxDQUQ3QyxDQUFKLEVBQ21FO0FBQ2pFdkMsc0JBQUlvRCxLQUFKLENBQVUsMkRBQVY7O0FBQ0E7QUFDRDs7QUFHRCxZQUFRNUYsZ0JBQUU4RSxPQUFGLENBQVUsS0FBSzFGLElBQUwsQ0FBVTJGLEdBQXBCLENBQVI7QUFDRSxXQUFLLFVBQUw7QUFDRSxhQUFLM0YsSUFBTCxDQUFVOEYsUUFBVixHQUFxQix1QkFBckI7QUFDQSxhQUFLOUYsSUFBTCxDQUFVMkYsR0FBVixHQUFnQixJQUFoQjtBQUNBOztBQUNGLFdBQUssVUFBTDtBQUNFLGFBQUszRixJQUFMLENBQVU4RixRQUFWLEdBQXFCLHFCQUFyQjtBQUNBLGFBQUs5RixJQUFMLENBQVUyRixHQUFWLEdBQWdCLElBQWhCO0FBQ0E7QUFSSjs7QUFXQSxRQUFJO0FBRUYsV0FBSzNGLElBQUwsQ0FBVTJGLEdBQVYsR0FBZ0IsTUFBTSxLQUFLaUksT0FBTCxDQUFhekgsWUFBYixDQUEwQixLQUFLbkcsSUFBTCxDQUFVMkYsR0FBcEMsRUFBeUMsTUFBekMsQ0FBdEI7QUFDRCxLQUhELENBR0UsT0FBTzBGLEdBQVAsRUFBWTtBQUNaakksc0JBQUlrQixLQUFKLENBQVUrRyxHQUFWOztBQUNBLFlBQU0sSUFBSS9GLEtBQUosQ0FBVyxZQUFXLEtBQUt0RixJQUFMLENBQVUyRixHQUFJLElBQTFCLEdBQ2IscUVBQW9FMEYsR0FBRyxDQUFDckQsT0FBUSxFQUQ3RSxDQUFOO0FBRUQ7QUFDRjs7QUFFb0IsUUFBZmxELGVBQWUsR0FBSTtBQUV2QixTQUFLdEIsYUFBTCxDQUFtQm9KLFNBQW5CLEdBQStCLEtBQS9CO0FBR0EsU0FBSzVNLElBQUwsQ0FBVTZOLFVBQVYsR0FBdUIsZ0NBQW9CLEtBQUs3TixJQUFMLENBQVVpRixlQUE5QixFQUErQyxLQUFLakYsSUFBTCxDQUFVNk4sVUFBekQsQ0FBdkI7O0FBRUEsVUFBTUMsZ0JBQWdCLEdBQUcsWUFBWTtBQUNuQyxXQUFLOU4sSUFBTCxDQUFVNEUsYUFBVixHQUEwQixNQUFNLHNDQUFoQzs7QUFDQXhCLHNCQUFJQyxJQUFKLENBQVUsMkJBQTBCLEtBQUtyRCxJQUFMLENBQVU0RSxhQUFjLEdBQTVEOztBQUNBLFVBQUksQ0FBQyxLQUFLNUUsSUFBTCxDQUFVaUYsZUFBWCxJQUE4QixLQUFLakYsSUFBTCxDQUFVNEUsYUFBNUMsRUFBMkQ7QUFDekR4Qix3QkFBSUMsSUFBSixDQUFVLDJFQUEwRSxLQUFLckQsSUFBTCxDQUFVNEUsYUFBYyxLQUFuRyxHQUNOLGtGQURIOztBQUVBLGFBQUs1RSxJQUFMLENBQVVpRixlQUFWLEdBQTRCLHFDQUF5QixLQUFLakYsSUFBTCxDQUFVNEUsYUFBbkMsQ0FBNUI7QUFDRDtBQUNGLEtBUkQ7O0FBVUEsUUFBSSxLQUFLNUUsSUFBTCxDQUFVOEQsSUFBZCxFQUFvQjtBQUNsQixVQUFJLEtBQUs5RCxJQUFMLENBQVU4RCxJQUFWLENBQWVpSyxXQUFmLE9BQWlDLE1BQXJDLEVBQTZDO0FBQzNDLFlBQUk7QUFDRixlQUFLL04sSUFBTCxDQUFVOEQsSUFBVixHQUFpQixNQUFNLHdCQUF2QjtBQUNELFNBRkQsQ0FFRSxPQUFPdUgsR0FBUCxFQUFZO0FBRVpqSSwwQkFBSXFGLElBQUosQ0FBVSx3RkFBdUY0QyxHQUFHLENBQUNyRCxPQUFRLEVBQTdHOztBQUNBLGdCQUFNNUcsTUFBTSxHQUFHLE1BQU0seUNBQWUsS0FBS3BCLElBQXBCLENBQXJCOztBQUNBLGNBQUksQ0FBQ29CLE1BQUwsRUFBYTtBQUVYZ0MsNEJBQUkrRSxhQUFKLENBQW1CLDBCQUF5QixLQUFLbkksSUFBTCxDQUFVNk4sVUFBVywwQkFBeUIsS0FBSzdOLElBQUwsQ0FBVWlGLGVBQWdCLEVBQXBIO0FBQ0Q7O0FBR0QsZUFBS2pGLElBQUwsQ0FBVThELElBQVYsR0FBaUIxQyxNQUFNLENBQUMwQyxJQUF4QjtBQUNBLGdCQUFNa0ssY0FBYyxHQUFHLHFDQUF5QixNQUFNNU0sTUFBTSxDQUFDOEQsa0JBQVAsRUFBL0IsQ0FBdkI7O0FBQ0EsY0FBSSxLQUFLbEYsSUFBTCxDQUFVaUYsZUFBVixLQUE4QitJLGNBQWxDLEVBQWtEO0FBQ2hELGlCQUFLaE8sSUFBTCxDQUFVaUYsZUFBVixHQUE0QitJLGNBQTVCOztBQUNBNUssNEJBQUlDLElBQUosQ0FBVSwyQkFBMEIySyxjQUFlLHVDQUFuRDtBQUNEOztBQUNELGdCQUFNRixnQkFBZ0IsRUFBdEI7QUFDQSxpQkFBTztBQUFDMU0sWUFBQUEsTUFBRDtBQUFTeUQsWUFBQUEsVUFBVSxFQUFFLEtBQXJCO0FBQTRCZixZQUFBQSxJQUFJLEVBQUUxQyxNQUFNLENBQUMwQztBQUF6QyxXQUFQO0FBQ0Q7QUFDRixPQXRCRCxNQXNCTztBQUVMLGNBQU1tSyxPQUFPLEdBQUcsTUFBTSxnREFBdEI7O0FBQ0E3Syx3QkFBSW9ELEtBQUosQ0FBVyxzQkFBcUJ5SCxPQUFPLENBQUNDLElBQVIsQ0FBYSxJQUFiLENBQW1CLEVBQW5EOztBQUNBLFlBQUksQ0FBQ0QsT0FBTyxDQUFDRSxRQUFSLENBQWlCLEtBQUtuTyxJQUFMLENBQVU4RCxJQUEzQixDQUFMLEVBQXVDO0FBRXJDViwwQkFBSW9ELEtBQUosQ0FBVyw2QkFBNEIsS0FBS3hHLElBQUwsQ0FBVThELElBQUssMEJBQXREOztBQUNBLGNBQUk7QUFDRixrQkFBTTFDLE1BQU0sR0FBRyxNQUFNLHNDQUFhLEtBQUtwQixJQUFMLENBQVU4RCxJQUF2QixFQUE2QjtBQUNoRGtCLGNBQUFBLGNBQWMsRUFBRSxLQUFLaEYsSUFBTCxDQUFVK0U7QUFEc0IsYUFBN0IsQ0FBckI7QUFHQSxtQkFBTztBQUFDM0QsY0FBQUEsTUFBRDtBQUFTeUQsY0FBQUEsVUFBVSxFQUFFLEtBQXJCO0FBQTRCZixjQUFBQSxJQUFJLEVBQUUsS0FBSzlELElBQUwsQ0FBVThEO0FBQTVDLGFBQVA7QUFDRCxXQUxELENBS0UsT0FBT3NLLEdBQVAsRUFBWTtBQUNaLGtCQUFNLElBQUk5SSxLQUFKLENBQVcsc0NBQXFDLEtBQUt0RixJQUFMLENBQVU4RCxJQUFLLEdBQS9ELENBQU47QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsWUFBTTFDLE1BQU0sR0FBRyxNQUFNLDRDQUFpQixLQUFLcEIsSUFBTCxDQUFVOEQsSUFBM0IsQ0FBckI7QUFDQSxhQUFPO0FBQUMxQyxRQUFBQSxNQUFEO0FBQVN5RCxRQUFBQSxVQUFVLEVBQUUsSUFBckI7QUFBMkJmLFFBQUFBLElBQUksRUFBRSxLQUFLOUQsSUFBTCxDQUFVOEQ7QUFBM0MsT0FBUDtBQUNEOztBQUdELFVBQU1nSyxnQkFBZ0IsRUFBdEI7O0FBQ0EsUUFBSSxLQUFLOU4sSUFBTCxDQUFVcU8sNkJBQWQsRUFBNkM7QUFDM0NqTCxzQkFBSW9ELEtBQUosQ0FBVyw0R0FBWDtBQUNELEtBRkQsTUFFTztBQUVMLFlBQU1wRixNQUFNLEdBQUcsTUFBTSx5Q0FBZSxLQUFLcEIsSUFBcEIsQ0FBckI7O0FBR0EsVUFBSW9CLE1BQUosRUFBWTtBQUNWLGVBQU87QUFBQ0EsVUFBQUEsTUFBRDtBQUFTeUQsVUFBQUEsVUFBVSxFQUFFLEtBQXJCO0FBQTRCZixVQUFBQSxJQUFJLEVBQUUxQyxNQUFNLENBQUMwQztBQUF6QyxTQUFQO0FBQ0Q7O0FBRURWLHNCQUFJQyxJQUFKLENBQVMsNkJBQVQ7QUFDRDs7QUFHREQsb0JBQUlDLElBQUosQ0FBUyw4Q0FBVDs7QUFDQSxVQUFNakMsTUFBTSxHQUFHLE1BQU0sS0FBS3dMLFNBQUwsRUFBckI7QUFDQSxXQUFPO0FBQUN4TCxNQUFBQSxNQUFEO0FBQVN5RCxNQUFBQSxVQUFVLEVBQUUsS0FBckI7QUFBNEJmLE1BQUFBLElBQUksRUFBRTFDLE1BQU0sQ0FBQzBDO0FBQXpDLEtBQVA7QUFDRDs7QUFFYSxRQUFSNkQsUUFBUSxHQUFJO0FBQUE7O0FBQ2hCLFVBQU0yRyxPQUFPLEdBQUc7QUFDZEMsTUFBQUEsV0FBVyxFQUFFLEtBQUt2TyxJQUFMLENBQVV1TyxXQURUO0FBRWRDLE1BQUFBLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxLQUFLeE8sSUFBTCxDQUFVd08sdUJBRnZCO0FBR2RDLE1BQUFBLHVCQUF1QiwyQkFBRSxLQUFLek8sSUFBTCxDQUFVME8sZ0NBQVoseUVBQWdELEtBSHpEO0FBSWRDLE1BQUFBLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSzNPLElBQUwsQ0FBVTJPLFVBSlY7QUFLZEMsTUFBQUEsWUFBWSxFQUFFLEtBQUs1TyxJQUFMLENBQVU2TyxxQkFMVjtBQU1kQyxNQUFBQSxpQkFBaUIsRUFBRTtBQU5MLEtBQWhCOztBQVVBLFFBQUksS0FBSzlPLElBQUwsQ0FBVStPLHFCQUFkLEVBQXFDO0FBQ25DVCxNQUFBQSxPQUFPLENBQUNRLGlCQUFSLENBQTBCQyxxQkFBMUIsR0FBa0QsS0FBSy9PLElBQUwsQ0FBVStPLHFCQUE1RDtBQUNEOztBQUVELFFBQUluTyxnQkFBRW9PLFNBQUYsQ0FBWSxLQUFLaFAsSUFBTCxDQUFVaVAsdUJBQXRCLENBQUosRUFBb0Q7QUFDbERYLE1BQUFBLE9BQU8sQ0FBQ1ksY0FBUixHQUF5QixLQUFLbFAsSUFBTCxDQUFVaVAsdUJBQW5DO0FBQ0Q7O0FBSUQsVUFBTWpHLFdBQVcsR0FBR3BJLGdCQUFFdU8sUUFBRixDQUFXLEtBQUtuUCxJQUFMLENBQVVnSixXQUFyQixLQUFxQyxLQUFLaEosSUFBTCxDQUFVZ0osV0FBVixDQUFzQm9HLFdBQXRCLEVBQXpEOztBQUNBLFlBQVFwRyxXQUFSO0FBQ0UsV0FBSyxXQUFMO0FBQ0VzRixRQUFBQSxPQUFPLENBQUNRLGlCQUFSLENBQTBCTywwQkFBMUIsR0FBdUQsZUFBdkQ7QUFDQWYsUUFBQUEsT0FBTyxDQUFDUSxpQkFBUixDQUEwQlEsNEJBQTFCLEdBQXlELEVBQXpEO0FBQ0E7O0FBQ0YsV0FBSyxVQUFMO0FBQ0VoQixRQUFBQSxPQUFPLENBQUNRLGlCQUFSLENBQTBCTywwQkFBMUIsR0FBdUQsVUFBdkQ7QUFDQWYsUUFBQUEsT0FBTyxDQUFDUSxpQkFBUixDQUEwQlEsNEJBQTFCLEdBQXlELENBQXpEO0FBQ0E7QUFSSjs7QUFXQSxVQUFNLEtBQUt0UCxJQUFMLENBQVVvQixNQUFWLENBQWlCbU8sR0FBakIsQ0FBcUJqQixPQUFyQixDQUFOO0FBQ0Q7O0FBRWMsUUFBVDFCLFNBQVMsR0FBSTtBQUNqQixTQUFLcEosYUFBTCxDQUFtQm9KLFNBQW5CLEdBQStCLElBQS9CO0FBR0EsVUFBTTRDLFlBQVksR0FBRyxLQUFLQyxNQUFMLEtBQWdCQywrQkFBaEIsR0FBcUNDLDhCQUExRDtBQUdBLFVBQU1ySSxHQUFHLEdBQUcsTUFBTSxvQ0FBVSxLQUFLdEgsSUFBZixFQUFxQndQLFlBQXJCLENBQWxCOztBQUNBcE0sb0JBQUlDLElBQUosQ0FBVSxnQ0FBK0JpRSxHQUFHLENBQUN4RCxJQUFLLElBQWxEOztBQUVBLFdBQU93RCxHQUFQO0FBQ0Q7O0FBRWMsUUFBVHNJLFNBQVMsR0FBSTtBQUNqQixVQUFNQyxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBRUEsU0FBS3BLLFFBQUwsQ0FBYyxvQkFBZDtBQUNBLFVBQU0sS0FBS3pGLElBQUwsQ0FBVW9CLE1BQVYsQ0FBaUIwTyxNQUFqQixDQUF3QkYsU0FBeEIsQ0FBa0MsS0FBSzVQLElBQUwsQ0FBVThGLFFBQTVDLENBQU47O0FBRUEsUUFBSWlLLFdBQVcsR0FBRyxZQUFZO0FBQzVCLFVBQUlDLFFBQVEsR0FBRyxNQUFNLEtBQUs5TyxZQUFMLENBQWtCLFNBQWxCLEVBQTZCLEtBQTdCLENBQXJCO0FBQ0EsVUFBSStPLFVBQVUsR0FBR0QsUUFBUSxDQUFDQyxVQUFULENBQW9CQyxRQUFyQzs7QUFDQSxVQUFJRCxVQUFVLEtBQUssS0FBS2pRLElBQUwsQ0FBVThGLFFBQTdCLEVBQXVDO0FBQ3JDLGNBQU0sSUFBSVIsS0FBSixDQUFXLEdBQUUsS0FBS3RGLElBQUwsQ0FBVThGLFFBQVMsdUJBQXNCbUssVUFBVyxtQkFBakUsQ0FBTjtBQUNEO0FBQ0YsS0FORDs7QUFRQTdNLG9CQUFJQyxJQUFKLENBQVUsZ0JBQWUsS0FBS3JELElBQUwsQ0FBVThGLFFBQVMsdUJBQTVDOztBQUNBLFFBQUlvRixPQUFPLEdBQUdpRixRQUFRLENBQUNOLGtCQUFrQixHQUFHLEdBQXRCLEVBQTJCLEVBQTNCLENBQXRCO0FBQ0EsVUFBTSw2QkFBYzNFLE9BQWQsRUFBdUIsR0FBdkIsRUFBNEI2RSxXQUE1QixDQUFOOztBQUNBM00sb0JBQUlDLElBQUosQ0FBVSxHQUFFLEtBQUtyRCxJQUFMLENBQVU4RixRQUFTLG1CQUEvQjs7QUFDQSxTQUFLTCxRQUFMLENBQWMsYUFBZDtBQUNEOztBQUVvQixRQUFmK0YsZUFBZSxDQUFFMUYsUUFBRixFQUFZRCxnQkFBWixFQUE4QjtBQUFBOztBQUNqRCxVQUFNdEMsSUFBSSxHQUFHc0MsZ0JBQWdCLEdBQUlBLGdCQUFnQixDQUFDdEMsSUFBakIsSUFBeUIsRUFBN0IsR0FBbUMsRUFBaEU7O0FBQ0EsUUFBSSxDQUFDM0MsZ0JBQUV3UCxPQUFGLENBQVU3TSxJQUFWLENBQUwsRUFBc0I7QUFDcEIsWUFBTSxJQUFJK0IsS0FBSixDQUFXLCtEQUFELEdBQ2IsR0FBRWYsSUFBSSxDQUFDQyxTQUFMLENBQWVqQixJQUFmLENBQXFCLG1CQURwQixDQUFOO0FBRUQ7O0FBQ0QsVUFBTThNLEdBQUcsR0FBR3hLLGdCQUFnQixHQUFJQSxnQkFBZ0IsQ0FBQ3dLLEdBQWpCLElBQXdCLEVBQTVCLEdBQWtDLEVBQTlEOztBQUNBLFFBQUksQ0FBQ3pQLGdCQUFFMFAsYUFBRixDQUFnQkQsR0FBaEIsQ0FBTCxFQUEyQjtBQUN6QixZQUFNLElBQUkvSyxLQUFKLENBQVcsa0VBQUQsR0FDYixHQUFFZixJQUFJLENBQUNDLFNBQUwsQ0FBZTZMLEdBQWYsQ0FBb0IsbUJBRG5CLENBQU47QUFFRDs7QUFFRCxRQUFJakwsb0JBQUtpRSxRQUFMLENBQWMsS0FBS3JKLElBQUwsQ0FBVXVRLFFBQXhCLENBQUosRUFBdUM7QUFDckNoTixNQUFBQSxJQUFJLENBQUNpTixJQUFMLENBQVUsaUJBQVYsRUFBOEIsSUFBRyxLQUFLeFEsSUFBTCxDQUFVdVEsUUFBUyxHQUFwRDtBQUNBaE4sTUFBQUEsSUFBSSxDQUFDaU4sSUFBTCxDQUFVLGNBQVYsRUFBMkIsSUFBRyxLQUFLeFEsSUFBTCxDQUFVdVEsUUFBUyxHQUFqRDtBQUNEOztBQUNELFFBQUluTCxvQkFBS2lFLFFBQUwsQ0FBYyxLQUFLckosSUFBTCxDQUFVeVEsTUFBeEIsQ0FBSixFQUFxQztBQUNuQ2xOLE1BQUFBLElBQUksQ0FBQ2lOLElBQUwsQ0FBVSxjQUFWLEVBQTBCLEtBQUt4USxJQUFMLENBQVV5USxNQUFwQztBQUNEOztBQUVELFFBQUksS0FBS3pRLElBQUwsQ0FBVTBFLE9BQWQsRUFBdUI7QUFDckIsVUFBSTlELGdCQUFFOFAsS0FBRixDQUFRLEtBQUsxUSxJQUFMLENBQVUyUSxrQkFBbEIsQ0FBSixFQUEyQztBQUN6QyxhQUFLM1EsSUFBTCxDQUFVMlEsa0JBQVYsR0FBK0IsS0FBL0I7QUFDRDs7QUFDRCxVQUFJL1AsZ0JBQUU4UCxLQUFGLENBQVEsS0FBSzFRLElBQUwsQ0FBVTRRLGNBQWxCLENBQUosRUFBdUM7QUFDckMsYUFBSzVRLElBQUwsQ0FBVTRRLGNBQVYsR0FBMkIsS0FBM0I7QUFDRDtBQUNGOztBQUVELFVBQU1DLE9BQU8sR0FBRztBQUNkL0ssTUFBQUEsUUFBUSxFQUFFLEtBQUs5RixJQUFMLENBQVU4USxVQUFWLEtBQXlCLEtBQXpCLEdBQWlDbEwsU0FBakMsR0FBNkNFLFFBRHpDO0FBRWRpTCxNQUFBQSxTQUFTLEVBQUV4TixJQUZHO0FBR2R5TixNQUFBQSxXQUFXLEVBQUVYLEdBSEM7QUFJZFksTUFBQUEscUJBQXFCLDJCQUFFLEtBQUtqUixJQUFMLENBQVVrUixxQkFBWix5RUFBcUMsQ0FKNUM7QUFLZEMsTUFBQUEsdUJBQXVCLDJCQUFFLEtBQUtuUixJQUFMLENBQVVvUixpQkFBWix5RUFBaUMsSUFMMUM7QUFNZEMsTUFBQUEsMENBQTBDLDJCQUFFLEtBQUtyUixJQUFMLENBQVVzUixvQkFBWix5RUFBb0MsS0FOaEU7QUFPZEMsTUFBQUEsa0JBQWtCLDJCQUFFLEtBQUt2UixJQUFMLENBQVV1UixrQkFBWix5RUFBa0MsRUFQdEM7QUFRZEMsTUFBQUEsNkJBQTZCLDJCQUFFLEtBQUt4UixJQUFMLENBQVV3Uiw2QkFBWix5RUFBNkMsSUFSNUQ7QUFTZEMsTUFBQUEsa0JBQWtCLEVBQUUsS0FBS3pSLElBQUwsQ0FBVXlSLGtCQVRoQjtBQVVkMVMsTUFBQUEseUJBQXlCLEVBQUUsS0FBS2lCLElBQUwsQ0FBVWpCLHlCQVZ2QjtBQVdkMlMsTUFBQUEscUJBQXFCLEVBQUUsS0FBSzFSLElBQUwsQ0FBVTBSLHFCQVhuQjtBQVlkQyxNQUFBQSwyQkFBMkIsRUFBRSxLQUFLM1IsSUFBTCxDQUFVMlIsMkJBWnpCO0FBYWRoQixNQUFBQSxrQkFBa0IsMkJBQUUsS0FBSzNRLElBQUwsQ0FBVTJRLGtCQUFaLHlFQUFrQyxJQWJ0QztBQWNkQyxNQUFBQSxjQUFjLDJCQUFFLEtBQUs1USxJQUFMLENBQVU0USxjQUFaLHlFQUE4QixJQWQ5QjtBQWVkZ0IsTUFBQUEsd0JBQXdCLDJCQUFFLEtBQUs1UixJQUFMLENBQVU0Uix3QkFBWix5RUFBd0MsSUFmbEQ7QUFnQmRDLE1BQUFBLHNDQUFzQywyQkFBRSxLQUFLN1IsSUFBTCxDQUFVNlIsc0NBQVoseUVBQ2hDLEtBQUs3UixJQUFMLENBQVV3Tyx1QkFBVixLQUFzQyxJQUF0QyxHQUE2QyxLQUE3QyxHQUFxRDtBQWpCN0MsS0FBaEI7O0FBbUJBLFFBQUksS0FBS3hPLElBQUwsQ0FBVThSLGdCQUFkLEVBQWdDO0FBQzlCakIsTUFBQUEsT0FBTyxDQUFDa0Isa0JBQVIsR0FBNkIsUUFBN0I7QUFDRCxLQUZELE1BRU8sSUFBSSxLQUFLL1IsSUFBTCxDQUFVZ1MsaUJBQWQsRUFBaUM7QUFDdENuQixNQUFBQSxPQUFPLENBQUNrQixrQkFBUixHQUE2QixTQUE3QjtBQUNEOztBQUVELFVBQU0sS0FBSzdRLFlBQUwsQ0FBa0IsVUFBbEIsRUFBOEIsTUFBOUIsRUFBc0M7QUFDMUMrUSxNQUFBQSxZQUFZLEVBQUU7QUFDWkMsUUFBQUEsVUFBVSxFQUFFLENBQUNyQixPQUFELENBREE7QUFFWnNCLFFBQUFBLFdBQVcsRUFBRTtBQUZEO0FBRDRCLEtBQXRDLENBQU47QUFNRDs7QUFHREMsRUFBQUEsV0FBVyxHQUFJO0FBQ2IsV0FBTyxLQUFLL1EsY0FBWjtBQUNEOztBQUVEZ1IsRUFBQUEsaUJBQWlCLEdBQUk7QUFDbkIsUUFBSSxLQUFLQyxTQUFMLEVBQUosRUFBc0I7QUFDcEIsYUFBTzVTLGlCQUFQO0FBQ0Q7O0FBQ0QsV0FBT0Qsb0JBQVA7QUFDRDs7QUFFRDhTLEVBQUFBLFFBQVEsR0FBSTtBQUNWLFdBQU8sSUFBUDtBQUNEOztBQUVEckwsRUFBQUEsUUFBUSxHQUFJO0FBQ1YsV0FBTyxDQUFDLENBQUMsS0FBSzFGLE1BQWQ7QUFDRDs7QUFFRHdFLEVBQUFBLFlBQVksR0FBSTtBQUNkLFdBQU8sS0FBS2hHLElBQUwsQ0FBVTZFLFVBQWpCO0FBQ0Q7O0FBRURrQyxFQUFBQSxXQUFXLEdBQUk7QUFDYixXQUFPLENBQUMsS0FBSy9HLElBQUwsQ0FBVTZFLFVBQWxCO0FBQ0Q7O0FBRUQ0SyxFQUFBQSxNQUFNLEdBQUk7QUFDUixXQUFPN08sZ0JBQUU4RSxPQUFGLENBQVUsS0FBSzFGLElBQUwsQ0FBVXdQLFlBQXBCLE1BQXNDNU8sZ0JBQUU4RSxPQUFGLENBQVVnSywrQkFBVixDQUE3QztBQUNEOztBQUVENEMsRUFBQUEsU0FBUyxHQUFJO0FBQ1gsV0FBTyxLQUFLcEwsUUFBTCxNQUFtQixLQUFLc0wsWUFBTCxFQUExQjtBQUNEOztBQUVEQyxFQUFBQSx1QkFBdUIsQ0FBRUMsUUFBRixFQUFZO0FBQ2pDLFVBQU1ELHVCQUFOLENBQThCQyxRQUE5QixFQUF3QyxLQUFLRixZQUFMLEVBQXhDO0FBQ0Q7O0FBRUQ3TyxFQUFBQSxtQkFBbUIsQ0FBRUQsSUFBRixFQUFRO0FBQ3pCLFFBQUksQ0FBQyxNQUFNQyxtQkFBTixDQUEwQkQsSUFBMUIsQ0FBTCxFQUFzQztBQUNwQyxhQUFPLEtBQVA7QUFDRDs7QUFHRCxRQUFJOUMsZ0JBQUU4RSxPQUFGLENBQVVoQyxJQUFJLENBQUMxRixXQUFmLE1BQWdDLFFBQWhDLElBQTRDLENBQUMwRixJQUFJLENBQUNpQyxHQUFsRCxJQUF5RCxDQUFDakMsSUFBSSxDQUFDb0MsUUFBbkUsRUFBNkU7QUFDM0UxQyxzQkFBSUMsSUFBSixDQUFTLHFFQUNQLHdEQURGO0FBRUQ7O0FBRUQsUUFBSSxDQUFDK0Isb0JBQUt1TixhQUFMLENBQW1CalAsSUFBSSxDQUFDdUIsZUFBeEIsRUFBeUMsS0FBekMsQ0FBTCxFQUFzRDtBQUNwRDdCLHNCQUFJcUYsSUFBSixDQUFVLGtDQUFpQy9FLElBQUksQ0FBQ3VCLGVBQWdCLG9DQUF2RCxHQUNOLCtFQURIO0FBRUQ7O0FBRUQsUUFBSTJOLHFCQUFxQixHQUFJL00sZ0JBQUQsSUFBc0I7QUFDaEQsWUFBTTtBQUFDdEMsUUFBQUEsSUFBRDtBQUFPOE0sUUFBQUE7QUFBUCxVQUFjeEssZ0JBQXBCOztBQUNBLFVBQUksQ0FBQ2pGLGdCQUFFOFAsS0FBRixDQUFRbk4sSUFBUixDQUFELElBQWtCLENBQUMzQyxnQkFBRXdQLE9BQUYsQ0FBVTdNLElBQVYsQ0FBdkIsRUFBd0M7QUFDdENILHdCQUFJK0UsYUFBSixDQUFrQixtREFBbEI7QUFDRDs7QUFDRCxVQUFJLENBQUN2SCxnQkFBRThQLEtBQUYsQ0FBUUwsR0FBUixDQUFELElBQWlCLENBQUN6UCxnQkFBRTBQLGFBQUYsQ0FBZ0JELEdBQWhCLENBQXRCLEVBQTRDO0FBQzFDak4sd0JBQUkrRSxhQUFKLENBQWtCLG9FQUFsQjtBQUNEO0FBQ0YsS0FSRDs7QUFXQSxRQUFJekUsSUFBSSxDQUFDbUMsZ0JBQVQsRUFBMkI7QUFDekIsVUFBSWpGLGdCQUFFdU8sUUFBRixDQUFXekwsSUFBSSxDQUFDbUMsZ0JBQWhCLENBQUosRUFBdUM7QUFDckMsWUFBSTtBQUVGbkMsVUFBQUEsSUFBSSxDQUFDbUMsZ0JBQUwsR0FBd0J0QixJQUFJLENBQUNnRSxLQUFMLENBQVc3RSxJQUFJLENBQUNtQyxnQkFBaEIsQ0FBeEI7QUFDQStNLFVBQUFBLHFCQUFxQixDQUFDbFAsSUFBSSxDQUFDbUMsZ0JBQU4sQ0FBckI7QUFDRCxTQUpELENBSUUsT0FBT3dGLEdBQVAsRUFBWTtBQUNaakksMEJBQUkrRSxhQUFKLENBQW1CLGlHQUFELEdBQ2YscURBQW9Ea0QsR0FBSSxFQUQzRDtBQUVEO0FBQ0YsT0FURCxNQVNPLElBQUl6SyxnQkFBRTBQLGFBQUYsQ0FBZ0I1TSxJQUFJLENBQUNtQyxnQkFBckIsQ0FBSixFQUE0QztBQUNqRCtNLFFBQUFBLHFCQUFxQixDQUFDbFAsSUFBSSxDQUFDbUMsZ0JBQU4sQ0FBckI7QUFDRCxPQUZNLE1BRUE7QUFDTHpDLHdCQUFJK0UsYUFBSixDQUFtQiwwR0FBRCxHQUNmLDRDQURIO0FBRUQ7QUFDRjs7QUFHRCxRQUFLekUsSUFBSSxDQUFDbVAsWUFBTCxJQUFxQixDQUFDblAsSUFBSSxDQUFDb1AsZ0JBQTVCLElBQWtELENBQUNwUCxJQUFJLENBQUNtUCxZQUFOLElBQXNCblAsSUFBSSxDQUFDb1AsZ0JBQWpGLEVBQW9HO0FBQ2xHMVAsc0JBQUkrRSxhQUFKLENBQW1CLGlGQUFuQjtBQUNEOztBQUdELFNBQUtuSSxJQUFMLENBQVUwTSx1QkFBVixHQUFvQyxDQUFDdEgsb0JBQUtpRSxRQUFMLENBQWMsS0FBS3JKLElBQUwsQ0FBVTBNLHVCQUF4QixDQUFELElBQXFELEtBQUsxTSxJQUFMLENBQVUwTSx1QkFBbkc7QUFDQSxTQUFLMU0sSUFBTCxDQUFVd0ssU0FBVixHQUFzQnBGLG9CQUFLaUUsUUFBTCxDQUFjLEtBQUtySixJQUFMLENBQVV3SyxTQUF4QixJQUFxQyxLQUFLeEssSUFBTCxDQUFVd0ssU0FBL0MsR0FBMkQsS0FBakY7O0FBRUEsUUFBSTlHLElBQUksQ0FBQ3FQLGVBQVQsRUFBMEI7QUFDeEJyUCxNQUFBQSxJQUFJLENBQUNxUCxlQUFMLEdBQXVCLHFDQUF5QnJQLElBQUksQ0FBQ3FQLGVBQTlCLENBQXZCO0FBQ0Q7O0FBRUQsUUFBSW5TLGdCQUFFdU8sUUFBRixDQUFXekwsSUFBSSxDQUFDOEIsaUJBQWhCLENBQUosRUFBd0M7QUFDdEMsWUFBTTtBQUFDd04sUUFBQUEsUUFBRDtBQUFXQyxRQUFBQTtBQUFYLFVBQW1CdEosYUFBSXBCLEtBQUosQ0FBVTdFLElBQUksQ0FBQzhCLGlCQUFmLENBQXpCOztBQUNBLFVBQUk1RSxnQkFBRTJFLE9BQUYsQ0FBVXlOLFFBQVYsS0FBdUJwUyxnQkFBRTJFLE9BQUYsQ0FBVTBOLElBQVYsQ0FBM0IsRUFBNEM7QUFDMUM3UCx3QkFBSStFLGFBQUosQ0FBbUIsMkZBQUQsR0FDQyxJQUFHekUsSUFBSSxDQUFDOEIsaUJBQWtCLG9CQUQ3QztBQUVEO0FBQ0Y7O0FBRUQsUUFBSTlCLElBQUksQ0FBQzFGLFdBQVQsRUFBc0I7QUFDcEIsVUFBSTBGLElBQUksQ0FBQ29DLFFBQVQsRUFBbUI7QUFDakIxQyx3QkFBSStFLGFBQUosQ0FBbUIsaUVBQW5CO0FBQ0Q7O0FBR0QsVUFBSXpFLElBQUksQ0FBQ2lDLEdBQVQsRUFBYztBQUNadkMsd0JBQUlxRixJQUFKLENBQVUsaUZBQVY7QUFDRDtBQUNGOztBQUVELFFBQUkvRSxJQUFJLENBQUMwRSxXQUFULEVBQXNCO0FBQ3BCLFVBQUk7QUFDRixhQUFLLE1BQU0sQ0FBQ3RDLFFBQUQsRUFBV29OLEtBQVgsQ0FBWCxJQUFnQ3RTLGdCQUFFMEgsT0FBRixDQUFVL0QsSUFBSSxDQUFDZ0UsS0FBTCxDQUFXN0UsSUFBSSxDQUFDMEUsV0FBaEIsQ0FBVixDQUFoQyxFQUF5RTtBQUN2RSxjQUFJLENBQUN4SCxnQkFBRXVPLFFBQUYsQ0FBV3JKLFFBQVgsQ0FBTCxFQUEyQjtBQUN6QixrQkFBTSxJQUFJUixLQUFKLENBQVcsSUFBR2YsSUFBSSxDQUFDQyxTQUFMLENBQWVzQixRQUFmLENBQXlCLG9CQUF2QyxDQUFOO0FBQ0Q7O0FBQ0QsY0FBSSxDQUFDbEYsZ0JBQUUwUCxhQUFGLENBQWdCNEMsS0FBaEIsQ0FBTCxFQUE2QjtBQUMzQixrQkFBTSxJQUFJNU4sS0FBSixDQUFXLElBQUdmLElBQUksQ0FBQ0MsU0FBTCxDQUFlME8sS0FBZixDQUFzQix5QkFBcEMsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixPQVRELENBU0UsT0FBTzdPLENBQVAsRUFBVTtBQUNWakIsd0JBQUkrRSxhQUFKLENBQW1CLElBQUd6RSxJQUFJLENBQUMwRSxXQUFZLGlEQUFyQixHQUNmLHNGQUFxRi9ELENBQUMsQ0FBQzJELE9BQVEsRUFEbEc7QUFFRDtBQUNGOztBQUVELFFBQUl0RSxJQUFJLENBQUN1QixlQUFMLElBQXdCLENBQUNHLG9CQUFLdU4sYUFBTCxDQUFtQmpQLElBQUksQ0FBQ3VCLGVBQXhCLEVBQXlDLEtBQXpDLENBQTdCLEVBQThFO0FBQzVFN0Isc0JBQUkrRSxhQUFKLENBQW1CLG9EQUFELEdBQ2YsSUFBR3pFLElBQUksQ0FBQ3VCLGVBQWdCLHFCQUQzQjtBQUVEOztBQUdELFFBQUl2QixJQUFJLENBQUN5UCwwQkFBVCxFQUFxQztBQUNuQ3pQLE1BQUFBLElBQUksQ0FBQ3lQLDBCQUFMLEdBQWtDLEtBQUt2RixPQUFMLENBQWF3RixjQUFiLENBQTRCMVAsSUFBSSxDQUFDeVAsMEJBQWpDLENBQWxDO0FBQ0Q7O0FBR0QsV0FBTyxJQUFQO0FBQ0Q7O0FBRWUsUUFBVmxMLFVBQVUsR0FBSTtBQUNsQixRQUFJLEtBQUtmLFFBQUwsRUFBSixFQUFxQjtBQUNuQjtBQUNEOztBQUVELFVBQU0seUNBQTBCLEtBQUtsSCxJQUFMLENBQVUyRixHQUFwQyxFQUF5QztBQUM3Q29CLE1BQUFBLFdBQVcsRUFBRSxLQUFLQSxXQUFMLEVBRGdDO0FBRTdDMEksTUFBQUEsTUFBTSxFQUFFLEtBQUtBLE1BQUw7QUFGcUMsS0FBekMsQ0FBTjs7QUFLQSxRQUFJLEtBQUt6SixZQUFMLEVBQUosRUFBeUI7QUFDdkIsWUFBTSwrQ0FBb0IsS0FBS2hHLElBQUwsQ0FBVW9CLE1BQTlCLEVBQXNDLEtBQUtwQixJQUFMLENBQVUyRixHQUFoRCxFQUFxRCxLQUFLM0YsSUFBTCxDQUFVOEYsUUFBL0QsRUFBeUU7QUFDN0VwQixRQUFBQSxPQUFPLEVBQUUsS0FBSzFFLElBQUwsQ0FBVTBFLE9BRDBEO0FBRTdFMk8sUUFBQUEsT0FBTyxFQUFFLEtBQUtyVCxJQUFMLENBQVVzVCxjQUYwRDtBQUc3RVosUUFBQUEsUUFBUSxFQUFFLEtBQUsxUyxJQUFMLENBQVV1VDtBQUh5RCxPQUF6RSxDQUFOO0FBS0QsS0FORCxNQU1PO0FBQ0wsWUFBTSw2Q0FBbUIsS0FBS3ZULElBQUwsQ0FBVW9CLE1BQTdCLEVBQXFDLEtBQUtwQixJQUFMLENBQVUyRixHQUEvQyxFQUFvRCxLQUFLM0YsSUFBTCxDQUFVOEYsUUFBOUQsRUFBd0U7QUFDNUVwQixRQUFBQSxPQUFPLEVBQUUsS0FBSzFFLElBQUwsQ0FBVTBFLE9BRHlEO0FBRTVFOE8sUUFBQUEsWUFBWSxFQUFFLEtBQUtoUSxhQUFMLENBQW1Cb0o7QUFGMkMsT0FBeEUsQ0FBTjtBQUlEOztBQUNELFFBQUksS0FBSzVNLElBQUwsQ0FBVXlULFNBQWQsRUFBeUI7QUFDdkIsWUFBTSxLQUFLQyxnQkFBTCxDQUFzQixLQUFLMVQsSUFBTCxDQUFVeVQsU0FBaEMsQ0FBTjtBQUNEOztBQUVELFFBQUlyTyxvQkFBS2lFLFFBQUwsQ0FBYyxLQUFLckosSUFBTCxDQUFVMlQsZUFBeEIsQ0FBSixFQUE4QztBQUU1QyxVQUFJQyxLQUFLLEdBQUd6RCxRQUFRLENBQUMsS0FBS25RLElBQUwsQ0FBVTJULGVBQVgsRUFBNEIsRUFBNUIsQ0FBcEI7O0FBQ0F2USxzQkFBSW9ELEtBQUosQ0FBVyxnQ0FBK0JvTixLQUFNLHVCQUFoRDs7QUFDQSxZQUFNeEgsa0JBQUV5SCxLQUFGLENBQVFELEtBQVIsQ0FBTjtBQUNEO0FBQ0Y7O0FBRXFCLFFBQWhCRixnQkFBZ0IsQ0FBRUQsU0FBRixFQUFhO0FBQ2pDLFFBQUksS0FBS3pOLFlBQUwsRUFBSixFQUF5QjtBQUN2QjVDLHNCQUFJcUYsSUFBSixDQUFTLHVEQUFUOztBQUNBO0FBQ0Q7O0FBQ0QsUUFBSXFMLFFBQUo7O0FBQ0EsUUFBSTtBQUNGQSxNQUFBQSxRQUFRLEdBQUcsS0FBS2xHLE9BQUwsQ0FBYXdGLGNBQWIsQ0FBNEJLLFNBQTVCLENBQVg7QUFDRCxLQUZELENBRUUsT0FBT3BQLENBQVAsRUFBVTtBQUNWakIsc0JBQUkrRSxhQUFKLENBQW1CLDJDQUEwQzlELENBQUMsQ0FBQzJELE9BQVEsRUFBdkU7QUFDRDs7QUFDRCxRQUFJcEgsZ0JBQUUyRSxPQUFGLENBQVV1TyxRQUFWLENBQUosRUFBeUI7QUFDdkIxUSxzQkFBSUMsSUFBSixDQUFVLGdFQUFWOztBQUNBO0FBQ0Q7O0FBRUQsVUFBTTBRLFFBQVEsR0FBRyxNQUFNM0gsa0JBQUVDLEdBQUYsQ0FBTXlILFFBQVEsQ0FBQ3hILEdBQVQsQ0FDMUIzRyxHQUFELElBQVMsS0FBS2lJLE9BQUwsQ0FBYXpILFlBQWIsQ0FBMEJSLEdBQTFCLEVBQStCLE1BQS9CLENBRGtCLENBQU4sQ0FBdkI7O0FBR0EsU0FBSyxNQUFNcU8sUUFBWCxJQUF1QkQsUUFBdkIsRUFBaUM7QUFDL0IsWUFBTSw2Q0FBbUIsS0FBSy9ULElBQUwsQ0FBVW9CLE1BQTdCLEVBQXFDNFMsUUFBckMsRUFBK0NwTyxTQUEvQyxFQUEwRDtBQUM5RGxCLFFBQUFBLE9BQU8sRUFBRSxLQUFLMUUsSUFBTCxDQUFVMEUsT0FEMkM7QUFFOUQ4TyxRQUFBQSxZQUFZLEVBQUUsS0FBS2hRLGFBQUwsQ0FBbUJvSjtBQUY2QixPQUExRCxDQUFOO0FBSUQ7QUFDRjs7QUFPb0IsUUFBZjlELGVBQWUsQ0FBRW1MLFNBQUYsRUFBYTtBQUNoQyxRQUFJLEtBQUtqTyxZQUFMLE1BQXVCLENBQUNwRixnQkFBRXNULFNBQUYsQ0FBWUQsU0FBWixDQUE1QixFQUFvRDtBQUNsRDtBQUNEOztBQUVEN1Esb0JBQUlDLElBQUosQ0FBVSwyQkFBMEI0USxTQUFVLEVBQTlDOztBQUNBLFVBQU0sS0FBS2xRLGNBQUwsQ0FBb0I7QUFBQzFFLE1BQUFBLFlBQVksRUFBRTRVO0FBQWYsS0FBcEIsQ0FBTjtBQUNEOztBQUUwQixRQUFyQmxMLHFCQUFxQixDQUFFQyxXQUFGLEVBQWU7QUFDeEMsUUFBSSxDQUFDcEksZ0JBQUV1TyxRQUFGLENBQVduRyxXQUFYLENBQUwsRUFBOEI7QUFDNUI1RixzQkFBSUMsSUFBSixDQUFTLDBEQUNQLHlHQURGOztBQUVBO0FBQ0Q7O0FBQ0QyRixJQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ29HLFdBQVosRUFBZDs7QUFDQSxRQUFJLENBQUN4TyxnQkFBRXVOLFFBQUYsQ0FBVyxDQUFDLFdBQUQsRUFBYyxVQUFkLENBQVgsRUFBc0NuRixXQUF0QyxDQUFMLEVBQXlEO0FBQ3ZENUYsc0JBQUlvRCxLQUFKLENBQVcseUNBQXdDd0MsV0FBWSxHQUEvRDs7QUFDQTtBQUNEOztBQUNENUYsb0JBQUlvRCxLQUFKLENBQVcsbUNBQWtDd0MsV0FBWSxHQUF6RDs7QUFDQSxRQUFJO0FBQ0YsWUFBTSxLQUFLOUgsWUFBTCxDQUFrQixjQUFsQixFQUFrQyxNQUFsQyxFQUEwQztBQUFDOEgsUUFBQUE7QUFBRCxPQUExQyxDQUFOO0FBQ0EsV0FBS2hKLElBQUwsQ0FBVW1VLGNBQVYsR0FBMkJuTCxXQUEzQjtBQUNELEtBSEQsQ0FHRSxPQUFPcUMsR0FBUCxFQUFZO0FBQ1pqSSxzQkFBSXFGLElBQUosQ0FBVSw0Q0FBMkM0QyxHQUFHLENBQUNyRCxPQUFRLEVBQWpFO0FBQ0Q7QUFDRjs7QUFFRG9NLEVBQUFBLGtCQUFrQixDQUFFQyxPQUFGLEVBQVc7QUFDM0IsUUFBSSxLQUFLclUsSUFBTCxDQUFVK1MsZUFBZCxFQUErQjtBQUM3QixVQUFJc0IsT0FBTyxJQUFJelQsZ0JBQUVzQyxHQUFGLENBQU0sS0FBS2xELElBQUwsQ0FBVStTLGVBQWhCLEVBQWlDc0IsT0FBakMsQ0FBZixFQUEwRDtBQUN4RCxlQUFPLEtBQUtyVSxJQUFMLENBQVUrUyxlQUFWLENBQTBCc0IsT0FBMUIsQ0FBUDtBQUNEOztBQUNELGFBQU8sS0FBS3JVLElBQUwsQ0FBVStTLGVBQVYsQ0FBMEJ1QiwwQkFBMUIsQ0FBUDtBQUNEO0FBQ0Y7O0FBT2UsUUFBVkMsVUFBVSxHQUFJO0FBRWxCLFVBQU1DLGFBQWEsR0FBRyxNQUFNLE1BQU1ELFVBQU4sRUFBNUI7O0FBQ0EsUUFBSSxDQUFDLEtBQUsxRCxPQUFWLEVBQW1CO0FBQ2pCLFdBQUtBLE9BQUwsR0FBZSxNQUFNLEtBQUszUCxZQUFMLENBQWtCLEdBQWxCLEVBQXVCLEtBQXZCLENBQXJCO0FBQ0Q7O0FBRUQsVUFBTXVULG1CQUFtQixHQUFHN1QsZ0JBQUVzVCxTQUFGLENBQVksS0FBS2xVLElBQUwsQ0FBVTBVLDhCQUF0QixJQUN4QixLQUFLMVUsSUFBTCxDQUFVMFUsOEJBRGMsR0FFeEIsSUFGSjs7QUFHQSxRQUFJRCxtQkFBbUIsSUFBSSxDQUFDLEtBQUtFLFVBQWpDLEVBQTZDO0FBQzNDLFlBQU07QUFBQ0MsUUFBQUEsYUFBRDtBQUFnQkMsUUFBQUE7QUFBaEIsVUFBeUIsTUFBTSxLQUFLQyxhQUFMLEVBQXJDO0FBQ0EsV0FBS0gsVUFBTCxHQUFrQjtBQUNoQkksUUFBQUEsVUFBVSxFQUFFRixLQURJO0FBRWhCRyxRQUFBQSxhQUFhLEVBQUVKLGFBQWEsQ0FBQ0ssTUFGYjtBQUdoQkMsUUFBQUEsWUFBWSxFQUFFLE1BQU0sS0FBS0MsZUFBTDtBQUhKLE9BQWxCO0FBS0Q7O0FBQ0QvUixvQkFBSUMsSUFBSixDQUFTLCtEQUFUOztBQUNBLFdBQU9MLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjO0FBQUNDLE1BQUFBLElBQUksRUFBRSxLQUFLOUQsSUFBTCxDQUFVOEQ7QUFBakIsS0FBZCxFQUFzQzBRLGFBQXRDLEVBQ0wsS0FBSzNELE9BQUwsQ0FBYW9CLFlBRFIsRUFDc0IsS0FBSzBDLFVBQUwsSUFBbUIsRUFEekMsQ0FBUDtBQUVEOztBQUVVLFFBQUxTLEtBQUssR0FBSTtBQUNiLFFBQUksS0FBS3BWLElBQUwsQ0FBVTBFLE9BQWQsRUFBdUI7QUFFckIsVUFBSTFFLElBQUksR0FBR1ksZ0JBQUV5VSxTQUFGLENBQVksS0FBS3JWLElBQWpCLENBQVg7O0FBQ0FBLE1BQUFBLElBQUksQ0FBQzBFLE9BQUwsR0FBZSxLQUFmO0FBQ0ExRSxNQUFBQSxJQUFJLENBQUMyRSxTQUFMLEdBQWlCLEtBQWpCO0FBQ0EsWUFBTTJRLGVBQWUsR0FBRyxLQUFLQyx5QkFBN0I7O0FBQ0EsV0FBS0EseUJBQUwsR0FBaUMsTUFBTSxDQUFFLENBQXpDOztBQUNBLFVBQUk7QUFDRixjQUFNLEtBQUtuUCxRQUFMLENBQWNwRyxJQUFkLENBQU47QUFDRCxPQUZELFNBRVU7QUFDUixhQUFLdVYseUJBQUwsR0FBaUNELGVBQWpDO0FBQ0Q7QUFDRjs7QUFDRCxVQUFNLE1BQU1GLEtBQU4sRUFBTjtBQUNEOztBQXZxQ3FDOzs7QUEwcUN4Q3BTLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjaEUsY0FBYyxDQUFDMlYsU0FBN0IsRUFBd0NDLGNBQXhDO2VBRWU1VixjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQge1xuICBjcmVhdGVTaW0sIGdldEV4aXN0aW5nU2ltLCBydW5TaW11bGF0b3JSZXNldCwgaW5zdGFsbFRvU2ltdWxhdG9yLFxuICBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycywgc2h1dGRvd25TaW11bGF0b3IsIHNldExvY2FsZUFuZFByZWZlcmVuY2VzXG59IGZyb20gJy4vc2ltdWxhdG9yLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2ltdWxhdG9yIH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuaW1wb3J0IHtcbiAgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSwgaW5zdGFsbENlcnRpZmljYXRlLCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3ksXG4gIGhhc0NlcnRpZmljYXRlTGVnYWN5LFxufSBmcm9tICcuL2NlcnQtdXRpbHMnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBleHRyYWN0QnVuZGxlSWQgfSBmcm9tICcuL2FwcC11dGlscyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMsIFBMQVRGT1JNX05BTUVfSU9TLCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQge1xuICBkZXRlY3RVZGlkLCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiwgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uLFxuICBjaGVja0FwcFByZXNlbnQsIGdldERyaXZlckluZm8sXG4gIGNsZWFyU3lzdGVtRmlsZXMsIHRyYW5zbGF0ZURldmljZU5hbWUsIG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyxcbiAgREVGQVVMVF9USU1FT1VUX0tFWSwgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCxcbiAgcHJpbnRVc2VyLCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMsXG4gIG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbiwgaXNMb2NhbEhvc3Rcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBnZXRDb25uZWN0ZWREZXZpY2VzLCBydW5SZWFsRGV2aWNlUmVzZXQsIGluc3RhbGxUb1JlYWxEZXZpY2UsXG4gIGdldFJlYWxEZXZpY2VPYmpcbn0gZnJvbSAnLi9yZWFsLWRldmljZS1tYW5hZ2VtZW50JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBJREIgZnJvbSAnYXBwaXVtLWlkYic7XG5pbXBvcnQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkgZnJvbSAnLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5pbXBvcnQgeyBBUkdTX0NPTlNUUkFJTlRTIH0gZnJvbSAnLi9hcmctY29uc3RyYWludHMnO1xuXG5cbmNvbnN0IFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSA9ICdzaHV0ZG93bl9vdGhlcl9zaW1zJztcbmNvbnN0IENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEggPSAnY3VzdG9taXplX3Jlc3VsdF9idW5kbGVfcGF0aCc7XG5cbmNvbnN0IGRlZmF1bHRTZXJ2ZXJDYXBzID0ge1xuICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICBicm93c2VyTmFtZTogJycsXG4gIHBsYXRmb3JtOiAnTUFDJyxcbiAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiBmYWxzZSxcbn07XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMgPSAyO1xuY29uc3QgV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA9IDE7XG5jb25zdCBXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXhjdWl0ZXN0LWRyaXZlci9ibG9iL21hc3Rlci9kb2NzL3JlYWwtZGV2aWNlLWNvbmZpZy5tZCc7XG5jb25zdCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgbmF0aXZlV2ViVGFwOiBmYWxzZSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiBmYWxzZSxcbiAgdXNlSlNPTlNvdXJjZTogZmFsc2UsXG4gIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRydWUsXG4gIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6ICd0eXBlLGxhYmVsJyxcbiAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL1V0aWxpdGllcy9GQkNvbmZpZ3VyYXRpb24ubSBmb3IgZm9sbG93aW5nIHNldHRpbmdzJyB2YWx1ZXNcbiAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTogMjUsXG4gIG1qcGVnU2VydmVyRnJhbWVyYXRlOiAxMCxcbiAgc2NyZWVuc2hvdFF1YWxpdHk6IDEsXG4gIG1qcGVnU2NhbGluZ0ZhY3RvcjogMTAwLFxuICAvLyBzZXQgYHJlZHVjZU1vdGlvbmAgdG8gYG51bGxgIHNvIHRoYXQgaXQgd2lsbCBiZSB2ZXJpZmllZCBidXQgc3RpbGwgc2V0IGVpdGhlciB0cnVlL2ZhbHNlXG4gIHJlZHVjZU1vdGlvbjogbnVsbCxcbn07XG4vLyBUaGlzIGxvY2sgYXNzdXJlcywgdGhhdCBlYWNoIGRyaXZlciBzZXNzaW9uIGRvZXMgbm90XG4vLyBhZmZlY3Qgc2hhcmVkIHJlc291cmNlcyBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgc2Vzc2lvbnNcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSA9IDUwMDtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmNvbnN0IE5PX1BST1hZX05BVElWRV9MSVNUID0gW1xuICBbJ0RFTEVURScsIC93aW5kb3cvXSxcbiAgWydHRVQnLCAvXlxcL3Nlc3Npb25cXC9bXlxcL10rJC9dLFxuICBbJ0dFVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnR0VUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ0dFVCcsIC9hcHBpdW0vXSxcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2NvbnRleHQvXSxcbiAgWydHRVQnLCAvbG9jYXRpb24vXSxcbiAgWydHRVQnLCAvbG9nL10sXG4gIFsnR0VUJywgL3NjcmVlbnNob3QvXSxcbiAgWydHRVQnLCAvc2l6ZS9dLFxuICBbJ0dFVCcsIC9zb3VyY2UvXSxcbiAgWydHRVQnLCAvdGltZW91dHMkL10sXG4gIFsnR0VUJywgL3VybC9dLFxuICBbJ0dFVCcsIC93aW5kb3cvXSxcbiAgWydQT1NUJywgL2FjY2VwdF9hbGVydC9dLFxuICBbJ1BPU1QnLCAvYWN0aW9ucyQvXSxcbiAgWydQT1NUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydQT1NUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9pc19sb2NrZWQvXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2xvY2svXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL3VubG9jay9dLFxuICBbJ1BPU1QnLCAvYmFjay9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NvbnRleHQvXSxcbiAgWydQT1NUJywgL2Rpc21pc3NfYWxlcnQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRcXC9hY3RpdmUvXSwgLy8gTUpTT05XUCBnZXQgYWN0aXZlIGVsZW1lbnQgc2hvdWxkIHByb3h5XG4gIFsnUE9TVCcsIC9lbGVtZW50JC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudHMkL10sXG4gIFsnUE9TVCcsIC9leGVjdXRlL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9sb2cvXSxcbiAgWydQT1NUJywgL21vdmV0by9dLFxuICBbJ1BPU1QnLCAvcmVjZWl2ZV9hc3luY19yZXNwb25zZS9dLCAvLyBhbHdheXMsIGluIGNhc2UgY29udGV4dCBzd2l0Y2hlcyB3aGlsZSB3YWl0aW5nXG4gIFsnUE9TVCcsIC9zZXNzaW9uXFwvW15cXC9dK1xcL2xvY2F0aW9uL10sIC8vIGdlbyBsb2NhdGlvbiwgYnV0IG5vdCBlbGVtZW50IGxvY2F0aW9uXG4gIFsnUE9TVCcsIC9zaGFrZS9dLFxuICBbJ1BPU1QnLCAvdGltZW91dHMvXSxcbiAgWydQT1NUJywgL3RvdWNoL10sXG4gIFsnUE9TVCcsIC91cmwvXSxcbiAgWydQT1NUJywgL3ZhbHVlL10sXG4gIFsnUE9TVCcsIC93aW5kb3cvXSxcbiAgWydERUxFVEUnLCAvY29va2llL10sXG4gIFsnR0VUJywgL2Nvb2tpZS9dLFxuICBbJ1BPU1QnLCAvY29va2llL10sXG5dO1xuY29uc3QgTk9fUFJPWFlfV0VCX0xJU1QgPSBbXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9lbGVtZW50L10sXG4gIFsnR0VUJywgL3RleHQvXSxcbiAgWydHRVQnLCAvdGl0bGUvXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jbGljay9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudC9dLFxuICBbJ1BPU1QnLCAvZm9yd2FyZC9dLFxuICBbJ1BPU1QnLCAvZnJhbWUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL3JlZnJlc2gvXSxcbl0uY29uY2F0KE5PX1BST1hZX05BVElWRV9MSVNUKTtcbi8qIGVzbGludC1lbmFibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuICAnZ2V0U2NyZWVuSW5mbycsXG5dO1xuXG5jbGFzcyBYQ1VJVGVzdERyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJy1pb3MgcHJlZGljYXRlIHN0cmluZycsXG4gICAgICAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICBdO1xuICAgIHRoaXMud2ViTG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRJb3MoKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKERFRkFVTFRfU0VUVElOR1MsIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmxvZ3MgPSB7fTtcblxuICAgIC8vIG1lbW9pemUgZnVuY3Rpb25zIGhlcmUsIHNvIHRoYXQgdGhleSBhcmUgZG9uZSBvbiBhIHBlci1pbnN0YW5jZSBiYXNpc1xuICAgIGZvciAoY29uc3QgZm4gb2YgTUVNT0laRURfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzW2ZuXSA9IF8ubWVtb2l6ZSh0aGlzW2ZuXSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldCBhcmdzQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiBBUkdTX0NPTlNUUkFJTlRTO1xuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgIT09ICduYXRpdmVXZWJUYXAnICYmIGtleSAhPT0gJ25hdGl2ZVdlYlRhcFN0cmljdCcpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge1xuICAgICAgICBzZXR0aW5nczoge1trZXldOiB2YWx1ZX1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm9wdHNba2V5XSA9ICEhdmFsdWU7XG4gIH1cblxuICByZXNldElvcyAoKSB7XG4gICAgdGhpcy5vcHRzID0gdGhpcy5vcHRzIHx8IHt9O1xuICAgIHRoaXMud2RhID0gbnVsbDtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gW107XG4gICAgdGhpcy5zYWZhcmkgPSBmYWxzZTtcbiAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IG51bGw7XG5cbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMuX2N1cnJlbnRVcmwgPSBudWxsO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB7fTtcbiAgICB0aGlzLmNvbnRleHRzID0gW107XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG4gICAgdGhpcy5hc3luY2xpYldhaXRNcyA9IDA7XG4gICAgdGhpcy5wYWdlTG9hZE1zID0gNjAwMDtcbiAgICB0aGlzLmxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCA9IDA7XG4gICAgdGhpcy5yZW1vdGUgPSBudWxsO1xuXG4gICAgdGhpcy53ZWJFbGVtZW50c0NhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZHJpdmVySW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZHJpdmVySW5mbyA9IGF3YWl0IGdldERyaXZlckluZm8oKTtcbiAgICB9XG4gICAgbGV0IHN0YXR1cyA9IHtidWlsZDoge3ZlcnNpb246IHRoaXMuZHJpdmVySW5mby52ZXJzaW9ufX07XG4gICAgaWYgKHRoaXMuY2FjaGVkV2RhU3RhdHVzKSB7XG4gICAgICBzdGF0dXMud2RhID0gdGhpcy5jYWNoZWRXZGFTdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBtZXJnZUNsaUFyZ3NUb09wdHMgKCkge1xuICAgIGxldCBkaWRNZXJnZSA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIE9iamVjdC5rZXlzKEFSR1NfQ09OU1RSQUlOVFMpKSB7XG4gICAgICBpZiAoXy5oYXModGhpcy5jbGlBcmdzLCBhcmcpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBVc2luZyAke2FyZ30gdmFsdWUgb2YgJyR7dGhpcy5jbGlBcmdzW2FyZ119JyBmcm9tIENMSWApO1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCBhcmcpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYChUaGlzIG92ZXJ3cml0ZXMgdmFsdWUgb2YgJyR7dGhpcy5vcHRzW2FyZ119JyBzZW50IGluIHZpYSBjYXBzKWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0c1thcmddID0gdGhpcy5jbGlBcmdzW2FyZ107XG4gICAgICAgIGRpZE1lcmdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcblxuICAgICAgLy8gbWVyZ2Ugc2VydmVyIGNhcGFiaWxpdGllcyArIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjYXBzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNlcnZlckNhcHMsIGNhcHMpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB1ZGlkIHdpdGggd2hhdCBpcyBhY3R1YWxseSB1c2VkXG4gICAgICBjYXBzLnVkaWQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXAgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcFN0cmljdCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwU3RyaWN0JykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwU3RyaWN0OiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwU3RyaWN0fSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgdXNlSlNPTlNvdXJjZSBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAndXNlSlNPTlNvdXJjZScpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3VzZUpTT05Tb3VyY2U6IHRoaXMub3B0cy51c2VKU09OU291cmNlfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3ZGFTZXR0aW5ncyA9IHtcbiAgICAgICAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogREVGQVVMVF9TRVRUSU5HUy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICAgICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiBERUZBVUxUX1NFVFRJTkdTLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICB9O1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ2VsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzID0gdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMgPSB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyRnJhbWVyYXRlJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJGcmFtZXJhdGUgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJGcmFtZXJhdGU7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyB0aGUgcXVhbGl0eSBvZiBwaG9uZSBzY3JlZW5zaG90OiAnJHt0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHl9J2ApO1xuICAgICAgICB3ZGFTZXR0aW5ncy5zY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSBXREEgZ2V0cyBvdXIgZGVmYXVsdHMgaW5zdGVhZCBvZiB3aGF0ZXZlciBpdHMgb3duIG1pZ2h0IGJlXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHdkYVNldHRpbmdzKTtcblxuICAgICAgLy8gdHVybiBvbiBtanBlZyBzdHJlYW0gcmVhZGluZyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgdGhpcy5vcHRzLm5vUmVzZXQgPSAhIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSAhIXRoaXMub3B0cy5mdWxsUmVzZXQ7XG5cbiAgICBhd2FpdCBwcmludFVzZXIoKTtcblxuICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gbnVsbDsgLy8gRm9yIFdEQSBhbmQgeGNvZGVidWlsZFxuICAgIGNvbnN0IHtkZXZpY2UsIHVkaWQsIHJlYWxEZXZpY2V9ID0gYXdhaXQgdGhpcy5kZXRlcm1pbmVEZXZpY2UoKTtcbiAgICBsb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgc2ltdWxhdG9yIGRldmljZXMgc2V0IHBhdGggdG8gJyR7dGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5vcHRzLmRldmljZS5kZXZpY2VzU2V0UGF0aCA9IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGlzIG5vIHBsYXRmb3JtVmVyc2lvbiwgZ2V0IGl0IGZyb20gdGhlIGRldmljZVxuICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICBsb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIGxvZy5pbmZvKCdTYWZhcmkgdGVzdCByZXF1ZXN0ZWQnKTtcbiAgICAgIHRoaXMuc2FmYXJpID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyA9IHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzIHx8IHt9O1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gU0FGQVJJX0JVTkRMRV9JRDtcbiAgICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLm9wdHMuc2FmYXJpSW5pdGlhbFVybCB8fCAoXG4gICAgICAgIHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICAgICA/ICdodHRwOi8vYXBwaXVtLmlvJ1xuICAgICAgICAgIDogYGh0dHA6Ly8ke3RoaXMub3B0cy5hZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4yJykpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKS5jYXRjaCgoZSkgPT4gbG9nLmRlYnVnKGUpKTtcblxuICAgIGNvbnN0IG1lbW9pemVkTG9nSW5mbyA9IF8ubWVtb2l6ZShmdW5jdGlvbiBsb2dJbmZvICgpIHtcbiAgICAgIGxvZy5pbmZvKFwiJ3NraXBMb2dDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ3Mgc3VjaCBhcyBjcmFzaCwgc3lzdGVtLCBzYWZhcmkgY29uc29sZSBhbmQgc2FmYXJpIG5ldHdvcmsuXCIpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0TG9nQ2FwdHVyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2tpcExvZ0NhcHR1cmUpIHtcbiAgICAgICAgbWVtb2l6ZWRMb2dJbmZvKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnbG9nQ2FwdHVyZVN0YXJ0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0xvZ0NhcHR1cmVTdGFydGVkID0gYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBTYWZhcmkgZ2xvYmFsIHByZWZlcmVuY2VzIHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsQ29uZmlnID0gYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXModGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCksIGFzeW5jIChzaW0pID0+IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3Ioc2ltKTtcblxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIG5lZWRzIHRvIGJlIGNoYW5nZXMgYSBwcmlvcmksIHNvIGNoYW5nZSBmaXJzdC5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBzaHV0ZG93biBwcm9jZXNzIGNoYW5nZXMgdGhlIHNldHRpbmdzLCBzbyByZXNldCB0aGVtLFxuICAgICAgICAvLyBrbm93aW5nIHRoYXQgdGhlIHNpbSBpcyBhbHJlYWR5IHNodXRcbiAgICAgICAgYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXMoc2ltLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmICEoYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyB0aGUgY3VzdG9tIFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nYCk7XG4gICAgICAgIGlmIChhd2FpdCBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAnc28gdGhhdCBTU0wgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uIHRha2VzIGVmZmVjdGApO1xuICAgICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2ltKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiBhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSB7XG4gICAgICAgIC8vIFNpbXVsYXRvciBtdXN0IGJlIGJvb3RlZCBpbiBvcmRlciB0byBjYWxsIHRoaXMgaGVscGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5sYXVuY2hXaXRoSURCICYmIHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkYiA9IG5ldyBJREIoe3VkaWR9KTtcbiAgICAgICAgICBhd2FpdCBpZGIuY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub3B0cy5kZXZpY2UuaWRiID0gaWRiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmluZm8oYGlkYiB3aWxsIG5vdCBiZSB1c2VkIGZvciBTaW11bGF0b3IgaW50ZXJhY3Rpb24uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ0V2ZW50KCdzaW1TdGFydGVkJyk7XG4gICAgICBpZiAoIWlzTG9nQ2FwdHVyZVN0YXJ0ZWQpIHtcbiAgICAgICAgLy8gUmV0cnkgbG9nIGNhcHR1cmUgaWYgU2ltdWxhdG9yIHdhcyBub3QgcnVubmluZyBiZWZvcmVcbiAgICAgICAgYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5zYWZhcmkpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYnVuZGxlSWQpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICBsb2cuZGVidWcoJ1NldHRpbmcgdGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBiZWZvcmUgV0RBIGlzIHN0YXJ0ZWQnKTtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZ10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UodGhpcy5vcHRzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldFBlcm1pc3Npb25zKGJ1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybignU2V0dGluZyBwZXJtaXNzaW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBTaW11bGF0b3IuICcgK1xuICAgICAgICAgICdUaGUgXCJwZXJtaXNzaW9uc1wiIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZW5hYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kaXNhYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhKHRoaXMub3B0cy5zZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRSZWR1Y2VNb3Rpb24odGhpcy5vcHRzLnJlZHVjZU1vdGlvbik7XG5cbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIHRoaXMubG9nRXZlbnQoJ29yaWVudGF0aW9uU2V0Jyk7XG5cbiAgICAvLyByZWFsIGRldmljZXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLCBhZnRlciB0aGUgd2ViIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmICF0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnV2FpdGluZyBmb3IgaW5pdGlhbCB3ZWJ2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLm5hdlRvSW5pdGlhbFdlYnZpZXcoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2luaXRpYWxXZWJ2aWV3TmF2aWdhdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLmlzUmVhbERldmljZSgpICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBXZWJEcml2ZXJBZ2VudFJ1bm5lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gVGhlIGlkIG9mIHRoZSB0YXJnZXQgc2Vzc2lvbiB0byBsYXVuY2ggV0RBIHdpdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgYSByZWFsIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHN0YXJ0V2RhIChzZXNzaW9uSWQsIHJlYWxEZXZpY2UpIHtcbiAgICAvLyBEb24ndCBjbGVhbnVwIHRoZSBwcm9jZXNzZXMgaWYgd2ViRHJpdmVyQWdlbnRVcmwgaXMgc2V0XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy53ZGEuY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlUG9ydEZvcndhcmRpbmcgPSB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiAhdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmxcbiAgICAgICYmIGlzTG9jYWxIb3N0KHRoaXMud2RhLndkYUJhc2VVcmwpO1xuICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkLCB0aGlzLndkYS51cmwucG9ydCwge1xuICAgICAgZGV2aWNlUG9ydDogdXNlUG9ydEZvcndhcmRpbmcgPyB0aGlzLndkYS53ZGFSZW1vdGVQb3J0IDogbnVsbCxcbiAgICAgIHVzZVBvcnRGb3J3YXJkaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gTGV0IG11bHRpcGxlIFdEQSBiaW5hcmllcyB3aXRoIGRpZmZlcmVudCBkZXJpdmVkIGRhdGEgZm9sZGVycyBiZSBidWlsdCBpbiBwYXJhbGxlbFxuICAgIC8vIENvbmN1cnJlbnQgV0RBIGJ1aWxkcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aWxsIGNhdXNlIHhjb2RlYnVpbGQgc3luY2hyb25pemF0aW9uIGVycm9yc1xuICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgIGlmICh0aGlzLm9wdHMudXNlWGN0ZXN0cnVuRmlsZSB8fCAhKGF3YWl0IHRoaXMud2RhLmlzU291cmNlRnJlc2goKSkpIHtcbiAgICAgIC8vIEZpcnN0LXRpbWUgY29tcGlsYXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgd2hpY2ggaXMgZG9uZSBmYXN0ZXIgaWYgZXhlY3V0ZWRcbiAgICAgIC8vIHNlcXVlbnRpYWxseS4gWGNvZGVidWlsZCBzcHJlYWRzIHRoZSBsb2FkIGNhdXNlZCBieSB0aGUgY2xhbmcgY29tcGlsZXIgdG8gYWxsIGF2YWlsYWJsZSBDUFUgY29yZXNcbiAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgV2ViRHJpdmVyQWdlbnQgaW5pdGlhbGl6YXRpb24gd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIGtleSAnJHtzeW5jaHJvbml6YXRpb25LZXl9J2ApO1xuICAgIGlmIChTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmlzQnVzeSgpICYmICF0aGlzLm9wdHMuZGVyaXZlZERhdGFQYXRoICYmICF0aGlzLm9wdHMuYm9vdHN0cmFwUGF0aCkge1xuICAgICAgbG9nLmRlYnVnKGBDb25zaWRlciBzZXR0aW5nIGEgdW5pcXVlICdkZXJpdmVkRGF0YVBhdGgnIGNhcGFiaWxpdHkgdmFsdWUgZm9yIGVhY2ggcGFyYWxsZWwgZHJpdmVyIGluc3RhbmNlIGAgK1xuICAgICAgICBgdG8gYXZvaWQgY29uZmxpY3RzIGFuZCBzcGVlZCB1cCB0aGUgYnVpbGRpbmcgcHJvY2Vzc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDYXBhYmlsaXR5ICd1c2VOZXdXREEnIHNldCB0byB0cnVlLCBzbyB1bmluc3RhbGxpbmcgV0RBIGJlZm9yZSBwcm9jZWVkaW5nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhVW5pbnN0YWxsZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnNldHVwQ2FjaGluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCBoZWxwZXIgZm9yIHRoZSB0d28gcGxhY2VzIHdlIG5lZWQgdG8gdW5pbnN0YWxsIHdkYSBhbmQgcmUtc3RhcnQgaXRcbiAgICAgIGNvbnN0IHF1aXRBbmRVbmluc3RhbGwgPSBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdOb3QgcXVpdHRpbmcvdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50IHNpbmNlIHdlYkRyaXZlckFnZW50VXJsIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cud2FybignUXVpdHRpbmcgYW5kIHVuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCcpO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2VkIGluIHRoZSBmb2xsb3dpbmcgV0RBIGJ1aWxkXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnR1cFJldHJpZXMgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMgfHwgKHRoaXMuaXNSZWFsRGV2aWNlKCkgPyBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIDogV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMpO1xuICAgICAgY29uc3Qgc3RhcnR1cFJldHJ5SW50ZXJ2YWwgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgfHwgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUw7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCAke3N0YXJ0dXBSZXRyaWVzfSB0aW1lcyB3aXRoICR7c3RhcnR1cFJldHJ5SW50ZXJ2YWx9bXMgaW50ZXJ2YWxgKTtcbiAgICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGVzZSB2YWx1ZXMgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgd2RhU3RhcnR1cFJldHJpZXMvd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgY2FwYWJpbGl0aWVzYCk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHN0YXJ0dXBSZXRyaWVzLCBzdGFydHVwUmV0cnlJbnRlcnZhbCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEF0dGVtcHRlZCcpO1xuICAgICAgICBpZiAocmV0cnlDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgUmV0cnlpbmcgV0RBIHN0YXJ0dXAgKCR7cmV0cnlDb3VudCArIDF9IG9mICR7c3RhcnR1cFJldHJpZXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gb24geGNvZGUgMTAgaW5zdGFsbGQgd2lsbCBvZnRlbiB0cnkgdG8gYWNjZXNzIHRoZSBhcHAgZnJvbSBpdHMgc3RhZ2luZ1xuICAgICAgICAgIC8vIGRpcmVjdG9yeSBiZWZvcmUgZnVsbHkgbW92aW5nIGl0IHRoZXJlLCBhbmQgZmFpbC4gUmV0cnlpbmcgb25jZVxuICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGhlbHBzXG4gICAgICAgICAgY29uc3QgcmV0cmllcyA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yID49IDEwID8gMiA6IDE7XG4gICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBhd2FpdCByZXRyeShyZXRyaWVzLCB0aGlzLndkYS5sYXVuY2guYmluZCh0aGlzLndkYSksIHNlc3Npb25JZCwgcmVhbERldmljZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0RmFpbGVkJyk7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gbGF1bmNoIFdlYkRyaXZlckFnZW50IGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAuIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLndkYS5wcm94eVJlcVJlcy5iaW5kKHRoaXMud2RhKTtcbiAgICAgICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsU3RhY2t0cmFjZSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgxNSwgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvbkF0dGVtcHRlZCcpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdTZW5kaW5nIGNyZWF0ZVNlc3Npb24gY29tbWFuZCB0byBXREEnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gdGhpcy5jYWNoZWRXZGFTdGF0dXMgfHwgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXZGFTZXNzaW9uKHRoaXMub3B0cy5idW5kbGVJZCwgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsU3RhY2t0cmFjZSA9IGVyci5zdGFjaztcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBGYWlsZWQgdG8gY3JlYXRlIFdEQSBzZXNzaW9uICgke2Vyci5tZXNzYWdlfSkuIFJldHJ5aW5nLi4uYCk7XG4gICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uU3RhcnRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxTdGFja3RyYWNlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcob3JpZ2luYWxTdGFja3RyYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCBzZXNzaW9uIGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBhd2FpdCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwKHRoaXMud2RhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIGV4cGVjdCBjZXJ0YWluIHNvY2tldCBlcnJvcnMgdW50aWwgdGhpcyBwb2ludCwgYnV0IG5vd1xuICAgICAgICAvLyBtYXJrIHRoaW5ncyBhcyBmdWxseSB3b3JraW5nXG4gICAgICAgIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0ZWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuUmVzZXQgKG9wdHMgPSBudWxsKSB7XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRTdGFydGVkJyk7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IHJ1blJlYWxEZXZpY2VSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHJ1blNpbXVsYXRvclJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRDb21wbGV0ZScpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZGVyIG9mIF8uY29tcGFjdChbdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIsIHRoaXMuX2F1ZGlvUmVjb3JkZXJdKSkge1xuICAgICAgYXdhaXQgcmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgICAgYXdhaXQgcmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3BlcmZSZWNvcmRlcnMpKSB7XG4gICAgICBhd2FpdCBCLmFsbCh0aGlzLl9wZXJmUmVjb3JkZXJzLm1hcCgoeCkgPT4geC5zdG9wKHRydWUpKSk7XG4gICAgICB0aGlzLl9wZXJmUmVjb3JkZXJzID0gW107XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG5cbiAgICBpZiAodGhpcy53ZGEgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzKSB7XG4gICAgICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJTeXN0ZW1GaWxlcyh0aGlzLndkYSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKCdOb3QgY2xlYXJpbmcgbG9nIGZpbGVzLiBVc2UgYGNsZWFyU3lzdGVtRmlsZXNgIGNhcGFiaWxpdHkgdG8gdHVybiBvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGUpIHtcbiAgICAgIGxvZy5kZWJ1ZygnRm91bmQgYSByZW1vdGUgZGVidWdnZXIgc2Vzc2lvbi4gUmVtb3ZpbmcuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcFJlbW90ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge1xuICAgICAgICBlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd246IHRydWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhdGhpcy5vcHRzLm5vUmVzZXQgJiYgISF0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSkge1xuICAgICAgICBsb2cuZGVidWcoYERlbGV0aW5nIHNpbXVsYXRvciBjcmVhdGVkIGZvciB0aGlzIHJ1biAodWRpZDogJyR7dGhpcy5vcHRzLnVkaWR9JylgKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlID0gdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiAhIXRoaXMub3B0cy5yZXNldExvY2F0aW9uU2VydmljZTtcbiAgICBpZiAoc2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlKCk7XG4gICAgICB9IGNhdGNoIChpZ25vcmUpIHsgLyogSWdub3JlIHRoaXMgZXJyb3Igc2luY2UgbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UgYWxyZWFkeSBsb2dnZWQgdGhlIGVycm9yICovIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgbG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0SW9zKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG5cblxuICAgIGlmICh0aGlzLndkYSAmJiB0aGlzLndkYS5mdWxseVN0YXJ0ZWQpIHtcbiAgICAgIGlmICh0aGlzLndkYS5qd3Byb3h5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBhbiBlcnJvciBoZXJlIHNob3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgcmVzdCBvZiBjbGVhbiB1cFxuICAgICAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIERFTEVURSBzZXNzaW9uIG9uIFdEQTogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZyBzaHV0ZG93bi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCAmJiB0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZWxlYXNlQ29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICBsb2cuZGVidWcoJ0FwcCBpcyBhbiBpT1MgYnVuZGxlLCB3aWxsIGF0dGVtcHQgdG8gcnVuIGFzIHByZS1leGlzdGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBzdXBwb3J0ZWQgYnVpbGQtaW4gYXBwc1xuICAgIHN3aXRjaCAoXy50b0xvd2VyKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUuUHJlZmVyZW5jZXMnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnY2FsZW5kYXInOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLm1vYmlsZWNhbCc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGRvd25sb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgJy5hcHAnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXBwOiAke3RoaXMub3B0cy5hcHB9LiBgICtcbiAgICAgICAgYEFwcCBwYXRocyBuZWVkIHRvIGJlIGFic29sdXRlIG9yIGFuIFVSTCB0byBhIGNvbXByZXNzZWQgYXBwIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYGlPUyBTREsgVmVyc2lvbiBzZXQgdG8gJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259J2ApO1xuICAgICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKSB7XG4gICAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gWGNvZGUgc3VwcG9ydHM6ICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiBhIHNpbXVsYXRvciBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBwbGF0Zm9ybSB2ZXJzaW9uLmApO1xuICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy51ZGlkKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVkaWQudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBhd2FpdCBkZXRlY3RVZGlkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRyeWluZyB0byBmaW5kIG1hdGNoaW5nIFVESUQgZm9yIFNpbXVsYXRvclxuICAgICAgICAgIGxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGRldGVjdCB1ZGlkIGZvciAke3RoaXMub3B0cy5kZXZpY2VOYW1lfSBTaW11bGF0b3IgcnVubmluZyBpT1MgJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hdGNoaW5nIFNpbXVsYXRvciBleGlzdHMgYW5kIGlzIGZvdW5kLiBVc2UgaXRcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGNvbnN0IGRldmljZVBsYXRmb3JtID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKGF3YWl0IGRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKSk7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IGRldmljZVBsYXRmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gZGV2aWNlUGxhdGZvcm07XG4gICAgICAgICAgICBsb2cuaW5mbyhgU2V0IHBsYXRmb3JtVmVyc2lvbiB0byAnJHtkZXZpY2VQbGF0Zm9ybX0nIHRvIG1hdGNoIHRoZSBkZXZpY2Ugd2l0aCBnaXZlbiBVRElEYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgY29ubmVjdGVkIGRldmljZS4gSWYgbm90LCB0aGUgdWRpZCBwYXNzZWQgaW4gaXMgaW52YWxpZFxuICAgICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgICBsb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgbG9nLmRlYnVnKGBObyByZWFsIGRldmljZSB3aXRoIHVkaWQgJyR7dGhpcy5vcHRzLnVkaWR9Jy4gTG9va2luZyBmb3Igc2ltdWxhdG9yYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFNpbXVsYXRvcih0aGlzLm9wdHMudWRpZCwge1xuICAgICAgICAgICAgICBkZXZpY2VzU2V0UGF0aDogdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXZpY2Ugb3Igc2ltdWxhdG9yIFVESUQ6ICcke3RoaXMub3B0cy51ZGlkfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0UmVhbERldmljZU9iaih0aGlzLm9wdHMudWRpZCk7XG4gICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogdHJ1ZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBrbm93IGZvciBzdXJlIHRoZSBkZXZpY2Ugd2lsbCBiZSBhIFNpbXVsYXRvclxuICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICBpZiAodGhpcy5vcHRzLmVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uKSB7XG4gICAgICBsb2cuZGVidWcoYE5ldyBzaW11bGF0b3IgaXMgcmVxdWVzdGVkLiBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHNldCAnZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24nIGNhcGFiaWxpdHkgdG8gZmFsc2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzaW11bGF0b3IgdG8gdXNlLCBnaXZlbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyBzaW11bGF0b3JcbiAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICBsb2cuaW5mbygnVXNpbmcgZGVzaXJlZCBjYXBzIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3InKTtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVNpbSgpO1xuICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTaW0gKCkge1xuICAgIGNvbnN0IHJ1bk9wdHMgPSB7XG4gICAgICBzY2FsZUZhY3RvcjogdGhpcy5vcHRzLnNjYWxlRmFjdG9yLFxuICAgICAgY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ6ICEhdGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkLFxuICAgICAgcGFzdGVib2FyZEF1dG9tYXRpY1N5bmM6IHRoaXMub3B0cy5zaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyA/PyAnb2ZmJyxcbiAgICAgIGlzSGVhZGxlc3M6ICEhdGhpcy5vcHRzLmlzSGVhZGxlc3MsXG4gICAgICB0cmFjZVBvaW50ZXI6IHRoaXMub3B0cy5zaW11bGF0b3JUcmFjZVBvaW50ZXIsXG4gICAgICBkZXZpY2VQcmVmZXJlbmNlczoge30sXG4gICAgfTtcblxuICAgIC8vIGFkZCB0aGUgd2luZG93IGNlbnRlciwgaWYgaXQgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpIHtcbiAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Q2VudGVyID0gdGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0ludGVnZXIodGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0KSkge1xuICAgICAgcnVuT3B0cy5zdGFydHVwVGltZW91dCA9IHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHRvIHdvcmthcm91bmQgWENUZXN0IGJ1ZyBhYm91dCBjaGFuZ2luZyBTaW11bGF0b3JcbiAgICAvLyBvcmllbnRhdGlvbiBpcyBub3Qgc3luY2hyb25pemVkIHRvIHRoZSBhY3R1YWwgd2luZG93IG9yaWVudGF0aW9uXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBfLmlzU3RyaW5nKHRoaXMub3B0cy5vcmllbnRhdGlvbikgJiYgdGhpcy5vcHRzLm9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgICAgY2FzZSAnTEFORFNDQVBFJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdMYW5kc2NhcGVMZWZ0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gOTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUE9SVFJBSVQnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ1BvcnRyYWl0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5ydW4ocnVuT3B0cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaW0gKCkge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSB0cnVlO1xuXG4gICAgLy8gR2V0IHBsYXRmb3JtIG5hbWUgZnJvbSBjb25zdCBzaW5jZSBpdCBtdXN0IGJlIGNhc2Ugc2Vuc2l0aXZlIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3JcbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmlzVHZPUygpID8gUExBVEZPUk1fTkFNRV9UVk9TIDogUExBVEZPUk1fTkFNRV9JT1M7XG5cbiAgICAvLyBjcmVhdGUgc2ltIGZvciBjYXBzXG4gICAgY29uc3Qgc2ltID0gYXdhaXQgY3JlYXRlU2ltKHRoaXMub3B0cywgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRlZCBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3NpbS51ZGlkfScuYCk7XG5cbiAgICByZXR1cm4gc2ltO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoQXBwICgpIHtcbiAgICBjb25zdCBBUFBfTEFVTkNIX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hBdHRlbXB0ZWQnKTtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5sYXVuY2hBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcblxuICAgIGxldCBjaGVja1N0YXR1cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgbGV0IGN1cnJlbnRBcHAgPSByZXNwb25zZS5jdXJyZW50QXBwLmJ1bmRsZUlEO1xuICAgICAgaWYgKGN1cnJlbnRBcHAgIT09IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBub3QgaW4gZm9yZWdyb3VuZC4gJHtjdXJyZW50QXBwfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIGxvZy5pbmZvKGAke3RoaXMub3B0cy5idW5kbGVJZH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaGVkJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFdkYVNlc3Npb24gKGJ1bmRsZUlkLCBwcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5hcmdzIHx8IFtdKSA6IFtdO1xuICAgIGlmICghXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuYXJncyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoYXJncyl9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmVudiB8fCB7fSkgOiB7fTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuZW52IGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBkaWN0aW9uYXJ5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoZW52KX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sYW5ndWFnZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgICBhcmdzLnB1c2goJy1OU0xhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubG9jYWxlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMb2NhbGUnLCB0aGlzLm9wdHMubG9jYWxlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHApKSB7XG4gICAgICAgIHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RhQ2FwcyA9IHtcbiAgICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBidW5kbGVJZCxcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBldmVudGxvb3BJZGxlRGVsYXlTZWM6IHRoaXMub3B0cy53ZGFFdmVudGxvb3BJZGxlRGVsYXkgPz8gMCxcbiAgICAgIHNob3VsZFdhaXRGb3JRdWllc2NlbmNlOiB0aGlzLm9wdHMud2FpdEZvclF1aWVzY2VuY2UgPz8gdHJ1ZSxcbiAgICAgIHNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbjogdGhpcy5vcHRzLnNpbXBsZUlzVmlzaWJsZUNoZWNrID8/IGZhbHNlLFxuICAgICAgbWF4VHlwaW5nRnJlcXVlbmN5OiB0aGlzLm9wdHMubWF4VHlwaW5nRnJlcXVlbmN5ID8/IDYwLFxuICAgICAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHRoaXMub3B0cy5zaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciA/PyB0cnVlLFxuICAgICAgd2FpdEZvcklkbGVUaW1lb3V0OiB0aGlzLm9wdHMud2FpdEZvcklkbGVUaW1lb3V0LFxuICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICBlbGVtZW50UmVzcG9uc2VGaWVsZHM6IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VGaWVsZHMsXG4gICAgICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHRoaXMub3B0cy5kaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMsXG4gICAgICBzaG91bGRUZXJtaW5hdGVBcHA6IHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlQXBwTGF1bmNoOiB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPz8gdHJ1ZSxcbiAgICAgIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneTogdGhpcy5vcHRzLnVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSA/PyB0cnVlLFxuICAgICAgZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2U6IHRoaXMub3B0cy5mb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZVxuICAgICAgICA/PyAodGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkID09PSB0cnVlID8gZmFsc2UgOiB0cnVlKSxcbiAgICB9O1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b0FjY2VwdEFsZXJ0cykge1xuICAgICAgd2RhQ2Fwcy5kZWZhdWx0QWxlcnRBY3Rpb24gPSAnYWNjZXB0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvRGlzbWlzc0FsZXJ0cykge1xuICAgICAgd2RhQ2Fwcy5kZWZhdWx0QWxlcnRBY3Rpb24gPSAnZGlzbWlzcyc7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3dkYUNhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge30sXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBPdmVycmlkZSBQcm94eSBtZXRob2RzIGZyb20gQmFzZURyaXZlclxuICBwcm94eUFjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoKSB7XG4gICAgaWYgKHRoaXMuaXNXZWJ2aWV3KCkpIHtcbiAgICAgIHJldHVybiBOT19QUk9YWV9XRUJfTElTVDtcbiAgICB9XG4gICAgcmV0dXJuIE5PX1BST1hZX05BVElWRV9MSVNUO1xuICB9XG5cbiAgY2FuUHJveHkgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNTYWZhcmkgKCkge1xuICAgIHJldHVybiAhIXRoaXMuc2FmYXJpO1xuICB9XG5cbiAgaXNSZWFsRGV2aWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1NpbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzVHZPUyAoKSB7XG4gICAgcmV0dXJuIF8udG9Mb3dlcih0aGlzLm9wdHMucGxhdGZvcm1OYW1lKSA9PT0gXy50b0xvd2VyKFBMQVRGT1JNX05BTUVfVFZPUyk7XG4gIH1cblxuICBpc1dlYnZpZXcgKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5pc1dlYkNvbnRleHQoKTtcbiAgfVxuXG4gIHZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5IChzdHJhdGVneSkge1xuICAgIHN1cGVyLnZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5KHN0cmF0ZWd5LCB0aGlzLmlzV2ViQ29udGV4dCgpKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgb25lIG9mIGBhcHBgIG9yIGBidW5kbGVJZGBcbiAgICBpZiAoXy50b0xvd2VyKGNhcHMuYnJvd3Nlck5hbWUpICE9PSAnc2FmYXJpJyAmJiAhY2Fwcy5hcHAgJiYgIWNhcHMuYnVuZGxlSWQpIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgaW5jbHVkZSBuZWl0aGVyIGFuIGFwcCBub3IgYSBidW5kbGVJZC4gJyArXG4gICAgICAgICdXZWJEcml2ZXJBZ2VudCB3aWxsIGJlIHN0YXJ0ZWQgd2l0aG91dCB0aGUgZGVmYXVsdCBhcHAnKTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cud2FybihgJ3BsYXRmb3JtVmVyc2lvbicgY2FwYWJpbGl0eSAoJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JykgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgZml4aW5nIGl0IG9yIGJlIHJlYWR5IHRvIGV4cGVyaWVuY2UgYW4gaW5jb25zaXN0ZW50IGRyaXZlciBiZWhhdmlvci5gKTtcbiAgICB9XG5cbiAgICBsZXQgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50ID0gKHByb2Nlc3NBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHthcmdzLCBlbnZ9ID0gcHJvY2Vzc0FyZ3VtZW50cztcbiAgICAgIGlmICghXy5pc05pbChhcmdzKSAmJiAhXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmFyZ3MgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNOaWwoZW52KSAmJiAhXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuZW52IG11c3QgYmUgYW4gb2JqZWN0IDxrZXksdmFsdWU+IHBhaXIge2E6YiwgYzpkfScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBgcHJvY2Vzc0FyZ3VtZW50c2Agc2hvdWxkIGJlIEpTT04gc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIGFyZ3VtZW50cyBhbmQvIGVudmlyb25tZW50IGRldGFpbHNcbiAgICBpZiAoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyhjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTlxuICAgICAgICAgIGNhcHMucHJvY2Vzc0FyZ3VtZW50cyA9IEpTT04ucGFyc2UoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYHByb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhIEpTT04gZm9ybWF0IG9yIGFuIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAncHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGFuIG9iamVjdCwgb3IgYSBzdHJpbmcgSlNPTiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgYGtleWNoYWluUGF0aGAgd2l0aG91dCBga2V5Y2hhaW5QYXNzd29yZGBcbiAgICBpZiAoKGNhcHMua2V5Y2hhaW5QYXRoICYmICFjYXBzLmtleWNoYWluUGFzc3dvcmQpIHx8ICghY2Fwcy5rZXljaGFpblBhdGggJiYgY2Fwcy5rZXljaGFpblBhc3N3b3JkKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYElmICdrZXljaGFpblBhdGgnIGlzIHNldCwgJ2tleWNoYWluUGFzc3dvcmQnIG11c3QgYWxzbyBiZSBzZXQgKGFuZCB2aWNlIHZlcnNhKS5gKTtcbiAgICB9XG5cbiAgICAvLyBgcmVzZXRPblNlc3Npb25TdGFydE9ubHlgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID0gIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5KSB8fCB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHk7XG4gICAgdGhpcy5vcHRzLnVzZU5ld1dEQSA9IHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnVzZU5ld1dEQSkgPyB0aGlzLm9wdHMudXNlTmV3V0RBIDogZmFsc2U7XG5cbiAgICBpZiAoY2Fwcy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGNhcHMuY29tbWFuZFRpbWVvdXRzID0gbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzKGNhcHMuY29tbWFuZFRpbWVvdXRzKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1N0cmluZyhjYXBzLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0fSA9IHVybC5wYXJzZShjYXBzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIGlmIChfLmlzRW1wdHkocHJvdG9jb2wpIHx8IF8uaXNFbXB0eShob3N0KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3dlYkRyaXZlckFnZW50VXJsJyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWxpZCBXZWJEcml2ZXJBZ2VudCBzZXJ2ZXIgVVJMLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke2NhcHMud2ViRHJpdmVyQWdlbnRVcmx9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGlmIChjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnYnJvd3Nlck5hbWUnIGNhbm5vdCBiZSBzZXQgdG9nZXRoZXIgd2l0aCAnYnVuZGxlSWQnIGNhcGFiaWxpdHlgKTtcbiAgICAgIH1cbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzXG4gICAgICAvLyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgICAgbG9nLndhcm4oYFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wZXJtaXNzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1zXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZShjYXBzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBpZiAoIV8uaXNTdHJpbmcoYnVuZGxlSWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KGJ1bmRsZUlkKX0nIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocGVybXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KHBlcm1zKX0nIG11c3QgYmUgYSBKU09OIG9iamVjdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7Y2Fwcy5wZXJtaXNzaW9uc30nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgb2JqZWN0IHdpdGggZm9ybWF0IGAgK1xuICAgICAgICAgIGB7XCI8YnVuZGxlSWQxPlwiOiB7XCI8c2VydmljZU5hbWUxPlwiOiBcIjxzZXJ2aWNlU3RhdHVzMT5cIiwgLi4ufSwgLi4ufS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBsYXRmb3JtVmVyc2lvbiAmJiAhdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGAncGxhdGZvcm1WZXJzaW9uJyBtdXN0IGJlIGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JyBpcyBnaXZlbiBpbnN0ZWFkLmApO1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzIGlzIGFuIGFycmF5LCBKU09OIGFycmF5LCBvciBzdHJpbmdcbiAgICBpZiAoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcykge1xuICAgICAgY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyA9IHRoaXMuaGVscGVycy5wYXJzZUNhcHNBcnJheShjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKTtcbiAgICB9XG5cbiAgICAvLyBmaW5hbGx5LCByZXR1cm4gdHJ1ZSBzaW5jZSB0aGUgc3VwZXJjbGFzcyBjaGVjayBwYXNzZWQsIGFzIGRpZCB0aGlzXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQVVUICgpIHtcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSh0aGlzLm9wdHMuYXBwLCB7XG4gICAgICBpc1NpbXVsYXRvcjogdGhpcy5pc1NpbXVsYXRvcigpLFxuICAgICAgaXNUdk9TOiB0aGlzLmlzVHZPUygpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1JlYWxEZXZpY2UodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICB0aW1lb3V0OiB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsXG4gICAgICAgIHN0cmF0ZWd5OiB0aGlzLm9wdHMuYXBwSW5zdGFsbFN0cmF0ZWd5LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsT3RoZXJBcHBzKHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UpKSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvNjg4OVxuICAgICAgbGV0IHBhdXNlID0gcGFyc2VJbnQodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBpb3NJbnN0YWxsUGF1c2Ugc2V0LiBQYXVzaW5nICR7cGF1c2V9IG1zIGJlZm9yZSBjb250aW51aW5nYCk7XG4gICAgICBhd2FpdCBCLmRlbGF5KHBhdXNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsT3RoZXJBcHBzIChvdGhlckFwcHMpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgbG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhcHBzTGlzdDtcbiAgICB0cnkge1xuICAgICAgYXBwc0xpc3QgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkoYXBwc0xpc3QpKSB7XG4gICAgICBsb2cuaW5mbyhgR290IHplcm8gYXBwcyBmcm9tICdvdGhlckFwcHMnIGNhcGFiaWxpdHkgdmFsdWUuIERvaW5nIG5vdGhpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBQYXRocyA9IGF3YWl0IEIuYWxsKGFwcHNMaXN0Lm1hcChcbiAgICAgIChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpXG4gICAgKSk7XG4gICAgZm9yIChjb25zdCBvdGhlckFwcCBvZiBhcHBQYXRocykge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIG90aGVyQXBwLCB1bmRlZmluZWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVkdWNlTW90aW9uIGFzICdpc0VuYWJsZWQnIG9ubHkgd2hlbiB0aGUgY2FwYWJpbGl0aWVzIGhhcyAncmVkdWNlTW90aW9uJ1xuICAgKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGZvciByZWFsIGRldmljZXMuXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IGlzRW5hYmxlZCBXZXRoZXIgZW5hYmxlIHJlZHVjZU1vdGlvblxuICAgKi9cbiAgYXN5bmMgc2V0UmVkdWNlTW90aW9uIChpc0VuYWJsZWQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhXy5pc0Jvb2xlYW4oaXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5pbmZvKCdTa2lwcGluZyBzZXR0aW5nIG9mIHRoZSBpbml0aWFsIGRpc3BsYXkgb3JpZW50YXRpb24uICcgK1xuICAgICAgICAnU2V0IHRoZSBcIm9yaWVudGF0aW9uXCIgY2FwYWJpbGl0eSB0byBlaXRoZXIgXCJMQU5EU0NBUEVcIiBvciBcIlBPUlRSQUlUXCIsIGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFfLmluY2x1ZGVzKFsnTEFORFNDQVBFJywgJ1BPUlRSQUlUJ10sIG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gc2V0IGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIGZhaWxlZCB3aXRoOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb21tYW5kVGltZW91dCAoY21kTmFtZSkge1xuICAgIGlmICh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBpZiAoY21kTmFtZSAmJiBfLmhhcyh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzLCBjbWROYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tjbWROYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW0RFRkFVTFRfVElNRU9VVF9LRVldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2Vzc2lvbiBjYXBhYmlsaXRpZXMgbWVyZ2VkIHdpdGggd2hhdCBXREEgcmVwb3J0c1xuICAgKiBUaGlzIGlzIGEgbGlicmFyeSBjb21tYW5kIGJ1dCBuZWVkcyB0byBjYWxsICdzdXBlcicgc28gY2FuJ3QgYmUgb25cbiAgICogYSBoZWxwZXIgb2JqZWN0XG4gICAqL1xuICBhc3luYyBnZXRTZXNzaW9uICgpIHtcbiAgICAvLyBjYWxsIHN1cGVyIHRvIGdldCBldmVudCB0aW1pbmdzLCBldGMuLi5cbiAgICBjb25zdCBkcml2ZXJTZXNzaW9uID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy53ZGFDYXBzKSB7XG4gICAgICB0aGlzLndkYUNhcHMgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnLycsICdHRVQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRHZXREZXZpY2VDYXBzID0gXy5pc0Jvb2xlYW4odGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbylcbiAgICAgID8gdGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mb1xuICAgICAgOiB0cnVlOyAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHNob3VsZEdldERldmljZUNhcHMgJiYgIXRoaXMuZGV2aWNlQ2Fwcykge1xuICAgICAgY29uc3Qge3N0YXR1c0JhclNpemUsIHNjYWxlfSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuSW5mbygpO1xuICAgICAgdGhpcy5kZXZpY2VDYXBzID0ge1xuICAgICAgICBwaXhlbFJhdGlvOiBzY2FsZSxcbiAgICAgICAgc3RhdEJhckhlaWdodDogc3RhdHVzQmFyU2l6ZS5oZWlnaHQsXG4gICAgICAgIHZpZXdwb3J0UmVjdDogYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFJlY3QoKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxvZy5pbmZvKCdNZXJnaW5nIFdEQSBjYXBzIG92ZXIgQXBwaXVtIGNhcHMgZm9yIHNlc3Npb24gZGV0YWlsIHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe3VkaWQ6IHRoaXMub3B0cy51ZGlkfSwgZHJpdmVyU2Vzc2lvbixcbiAgICAgIHRoaXMud2RhQ2Fwcy5jYXBhYmlsaXRpZXMsIHRoaXMuZGV2aWNlQ2FwcyB8fCB7fSk7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSByZXNldCBoYXBwZW5zIGV2ZW4gaWYgbm9SZXNldCBpcyBzZXQgdG8gdHJ1ZVxuICAgICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgICAgb3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICBvcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2h1dGRvd25IYW5kbGVyID0gdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KG9wdHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gc2h1dGRvd25IYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBzdXBlci5yZXNldCgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWENVSVRlc3REcml2ZXIucHJvdG90eXBlLCBjb21tYW5kcyk7XG5cbmV4cG9ydCBkZWZhdWx0IFhDVUlUZXN0RHJpdmVyO1xuZXhwb3J0IHsgWENVSVRlc3REcml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
1335
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImFyZ3NDb25zdHJhaW50cyIsIkFSR1NfQ09OU1RSQUlOVFMiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwiX2N1cnJlbnRVcmwiLCJjdXJDb250ZXh0IiwieGNvZGVWZXJzaW9uIiwiY29udGV4dHMiLCJpbXBsaWNpdFdhaXRNcyIsImFzeW5jbGliV2FpdE1zIiwicGFnZUxvYWRNcyIsImxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCIsInJlbW90ZSIsIndlYkVsZW1lbnRzQ2FjaGUiLCJMUlUiLCJtYXgiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsIm1lcmdlQ2xpQXJnc1RvT3B0cyIsImRpZE1lcmdlIiwiYXJnIiwiT2JqZWN0Iiwia2V5cyIsImhhcyIsImNsaUFyZ3MiLCJsb2ciLCJpbmZvIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJsaWZlY3ljbGVEYXRhIiwic2Vzc2lvbklkIiwiY2FwcyIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJzdGFydCIsImFzc2lnbiIsInVkaWQiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwiZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlbGV0ZVNlc3Npb24iLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwiaW9zU2RrVmVyc2lvbiIsInJlYWxEZXZpY2UiLCJkZXRlcm1pbmVEZXZpY2UiLCJzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwibm9ybWFsaXplZFZlcnNpb24iLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwiRXJyb3IiLCJpc0VtcHR5Iiwid2ViRHJpdmVyQWdlbnRVcmwiLCJsb2dFdmVudCIsInRvTG93ZXIiLCJhcHAiLCJ1bmRlZmluZWQiLCJwcm9jZXNzQXJndW1lbnRzIiwiYnVuZGxlSWQiLCJzYWZhcmlJbml0aWFsVXJsIiwiaXNSZWFsRGV2aWNlIiwiYWRkcmVzcyIsInBvcnQiLCJjb25maWd1cmVBcHAiLCJydW5SZXNldCIsIldlYkRyaXZlckFnZW50IiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJjYXRjaCIsImRlYnVnIiwibWVtb2l6ZWRMb2dJbmZvIiwibG9nSW5mbyIsInN0YXJ0TG9nQ2FwdHVyZSIsInNraXBMb2dDYXB0dXJlIiwicmVzdWx0IiwiaXNMb2dDYXB0dXJlU3RhcnRlZCIsImlzU2ltdWxhdG9yIiwic2h1dGRvd25PdGhlclNpbXVsYXRvcnMiLCJlbnN1cmVGZWF0dXJlRW5hYmxlZCIsImlzU2FmYXJpIiwic2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyIsImxvY2FsQ29uZmlnIiwic2ltIiwiY3VzdG9tU1NMQ2VydCIsImNlcnRIZWFkIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJzdGFydFNpbSIsImxhdW5jaFdpdGhJREIiLCJpZGIiLCJJREIiLCJjb25uZWN0IiwibWVzc2FnZSIsImluc3RhbGxBVVQiLCJpc0FwcEluc3RhbGxlZCIsImVycm9yQW5kVGhyb3ciLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zTWFwcGluZyIsInRvUGFpcnMiLCJwYXJzZSIsInNldFBlcm1pc3Npb25zIiwid2FybiIsImNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCIsImVuYWJsZUNhbGVuZGFyQWNjZXNzIiwiZGlzYWJsZUNhbGVuZGFyQWNjZXNzIiwic3RhcnRXZGEiLCJzZXRSZWR1Y2VNb3Rpb24iLCJzZXRJbml0aWFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsIm9wZW5VcmwiLCJhdXRvV2VidmlldyIsIm5hdlRvSW5pdGlhbFdlYnZpZXciLCJzZXRVcmwiLCJoYXNWYWx1ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsInVzZVBvcnRGb3J3YXJkaW5nIiwid2RhQmFzZVVybCIsIkRFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIiwicmVxdWVzdENvbm5lY3Rpb24iLCJ1cmwiLCJkZXZpY2VQb3J0Iiwid2RhUmVtb3RlUG9ydCIsInN5bmNocm9uaXphdGlvbktleSIsIm5hbWUiLCJ1c2VYY3Rlc3RydW5GaWxlIiwiaXNTb3VyY2VGcmVzaCIsImRlcml2ZWREYXRhUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJpc0J1c3kiLCJib290c3RyYXBQYXRoIiwiYWNxdWlyZSIsInVzZU5ld1dEQSIsInF1aXRBbmRVbmluc3RhbGwiLCJzZXR1cENhY2hpbmciLCJtc2ciLCJyZXN1bHRCdW5kbGVQYXRoIiwic3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cmllcyIsInN0YXJ0dXBSZXRyeUludGVydmFsIiwid2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJyZXRyeUNvdW50IiwicmV0cmllcyIsIm1ham9yIiwibGF1bmNoIiwiZXJyIiwiZXJyb3JNc2ciLCJvcmlnaW5hbFN0YWNrdHJhY2UiLCJzdGFydFdkYVNlc3Npb24iLCJzdGFjayIsImNsZWFyU3lzdGVtRmlsZXMiLCJmdWxseVN0YXJ0ZWQiLCJzZXJ2ZXIiLCJyZWNvcmRlciIsImNvbXBhY3QiLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJfYXVkaW9SZWNvcmRlciIsImludGVycnVwdCIsImNsZWFudXAiLCJfcGVyZlJlY29yZGVycyIsIkIiLCJhbGwiLCJtYXAiLCJ4Iiwic3RvcCIsInN0b3BSZW1vdGUiLCJyZXNldE9uU2Vzc2lvblN0YXJ0T25seSIsImVuZm9yY2VTaW11bGF0b3JTaHV0ZG93biIsImNyZWF0ZVNpbSIsImRlbGV0ZSIsInNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwibW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UiLCJpZ25vcmUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJpZ24iLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSx3QkFBd0IsR0FBRyxxQkFBakM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyw4QkFBckM7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRztBQUN4QkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FESztBQUV4QkMsRUFBQUEsc0JBQXNCLEVBQUUsS0FGQTtBQUd4QkMsRUFBQUEsV0FBVyxF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K0RBQVQ7O0FBQ0EsV0FBT0wsTUFBTSxDQUFDYSxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUs5RCxJQUFMLENBQVU4RDtBQUFqQixLQUFkLEVBQXNDMFEsYUFBdEMsRUFDTCxLQUFLM0QsT0FBTCxDQUFhb0IsWUFEUixFQUNzQixLQUFLMEMsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLcFYsSUFBTCxDQUFVMEUsT0FBZCxFQUF1QjtBQUVyQixVQUFJMUUsSUFBSSxHQUFHWSxnQkFBRXlVLFNBQUYsQ0FBWSxLQUFLclYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDMEUsT0FBTCxHQUFlLEtBQWY7QUFDQTFFLE1BQUFBLElBQUksQ0FBQzJFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNMlEsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS25QLFFBQUwsQ0FBY3BHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt1Vix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBdnFDcUM7OztBQTBxQ3hDcFMsTUFBTSxDQUFDYSxNQUFQLENBQWNoRSxjQUFjLENBQUMyVixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTVWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcbmltcG9ydCB7IEFSR1NfQ09OU1RSQUlOVFMgfSBmcm9tICcuL2FyZy1jb25zdHJhaW50cyc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgZGVmYXVsdFNlcnZlckNhcHMgPSB7XG4gIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gIGJyb3dzZXJOYW1lOiAnJyxcbiAgcGxhdGZvcm06ICdNQUMnLFxuICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxufTtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFID0gNTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFyZ3NDb25zdHJhaW50cyAoKSB7XG4gICAgcmV0dXJuIEFSR1NfQ09OU1RSQUlOVFM7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgT2JqZWN0LmtleXMoQVJHU19DT05TVFJBSU5UUykpIHtcbiAgICAgIGlmIChfLmhhcyh0aGlzLmNsaUFyZ3MsIGFyZykpIHtcbiAgICAgICAgbG9nLmluZm8oYFVzaW5nICR7YXJnfSB2YWx1ZSBvZiAnJHt0aGlzLmNsaUFyZ3NbYXJnXX0nIGZyb20gQ0xJYCk7XG4gICAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsIGFyZykpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgKFRoaXMgb3ZlcndyaXRlcyB2YWx1ZSBvZiAnJHt0aGlzLm9wdHNbYXJnXX0nIHNlbnQgaW4gdmlhIGNhcHMpYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRzW2FyZ10gPSB0aGlzLmNsaUFyZ3NbYXJnXTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlkTWVyZ2U7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhID0ge307IC8vIHRoaXMgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3RhdGUgd2Ugc3RhcnQgc28gd2hlbiB3ZSBkZWxldGUgdGhlIHNlc3Npb24gd2UgY2FuIHB1dCB0aGluZ3MgYmFja1xuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgLy8gbWVyZ2UgY2xpIGFyZ3MgdG8gb3B0cywgYW5kIGlmIHdlIGRpZCBtZXJnZSBhbnksIHJldmFsaWRhdGUgb3B0cyB0byBlbnN1cmUgdGhlIGZpbmFsIHNldFxuICAgICAgLy8gaXMgYWxzbyBjb25zaXN0ZW50XG4gICAgICBpZiAodGhpcy5tZXJnZUNsaUFyZ3NUb09wdHMoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoey4uLmNhcHMsIC4uLnRoaXMuY2xpQXJnc30pO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIG1lcmdlIHNlcnZlciBjYXBhYmlsaXRpZXMgKyBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXJ2ZXJDYXBzLCBjYXBzKTtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgdWRpZCB3aXRoIHdoYXQgaXMgYWN0dWFsbHkgdXNlZFxuICAgICAgY2Fwcy51ZGlkID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXAnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXA6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXBTdHJpY3QgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcFN0cmljdCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcFN0cmljdDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcFN0cmljdH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIHVzZUpTT05Tb3VyY2UgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3VzZUpTT05Tb3VyY2UnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHt1c2VKU09OU291cmNlOiB0aGlzLm9wdHMudXNlSlNPTlNvdXJjZX0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgd2RhU2V0dGluZ3MgPSB7XG4gICAgICAgIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6IERFRkFVTFRfU0VUVElOR1MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogREVGQVVMVF9TRVRUSU5HUy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgfTtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3Nob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzID0gdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlckZyYW1lcmF0ZScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyRnJhbWVyYXRlID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyRnJhbWVyYXRlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3NjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgbG9nLmluZm8oYERldGVybWluaW5nIGRldmljZSB0byBydW4gdGVzdHMgb246IHVkaWQ6ICcke3VkaWR9JywgcmVhbCBkZXZpY2U6ICR7cmVhbERldmljZX1gKTtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMucmVhbERldmljZSA9IHJlYWxEZXZpY2U7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoKSB7XG4gICAgICBpZiAocmVhbERldmljZSkge1xuICAgICAgICBsb2cuaW5mbyhgVGhlICdzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCcgY2FwYWJpbGl0eSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9yIGRldmljZXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgZGV2aWNlIHZlcnNpb246ICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24pO1xuICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBub3JtYWxpemVkVmVyc2lvbikge1xuICAgICAgbG9nLmluZm8oYE5vcm1hbGl6ZWQgcGxhdGZvcm1WZXJzaW9uIGNhcGFiaWxpdHkgdmFsdWUgJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIHRvICcke25vcm1hbGl6ZWRWZXJzaW9ufSdgKTtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVkVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzkuMycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSA5LjMgb3IgYWJvdmUuICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy54Y29kZVZlcnNpb24pICYmICghdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsIHx8ICF0aGlzLm9wdHMucmVhbERldmljZSkpIHtcbiAgICAgIC8vIG5vIGB3ZWJEcml2ZXJBZ2VudFVybGAsIG9yIG9uIGEgc2ltdWxhdG9yLCBzbyB3ZSBuZWVkIGFuIFhjb2RlIHZlcnNpb25cbiAgICAgIHRoaXMueGNvZGVWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24oKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgneGNvZGVEZXRhaWxzUmV0cmlldmVkJyk7XG5cbiAgICBpZiAoXy50b0xvd2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSkgPT09ICdzYWZhcmknKSB7XG4gICAgICBsb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgKFxuICAgICAgICB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgICAgICA6IGBodHRwOi8vJHt0aGlzLm9wdHMuYWRkcmVzc306JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWBcbiAgICAgICk7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMicpKSB7XG4gICAgICAgIC8vIHRoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgb24gMTIuMiBhbmQgYWJvdmVcbiAgICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMuYXJncyA9IFsnLXUnLCB0aGlzLl9jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHAgfHwgdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZUFwcCgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBDb25maWd1cmVkJyk7XG5cbiAgICAvLyBmYWlsIHZlcnkgZWFybHkgaWYgdGhlIGFwcCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0XG4gICAgLy8gb3IgaWYgYnVuZGxlIGlkIGRvZXNuJ3QgcG9pbnQgdG8gYW4gaW5zdGFsbGVkIGFwcFxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBjaGVja0FwcFByZXNlbnQodGhpcy5vcHRzLmFwcCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RCdW5kbGVJZCh0aGlzLm9wdHMuYXBwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KCk7XG5cbiAgICB0aGlzLndkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5vcHRzKTtcbiAgICAvLyBEZXJpdmVkIGRhdGEgcGF0aCByZXRyaWV2YWwgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvblxuICAgIC8vIFdlIGNvdWxkIHN0YXJ0IHRoYXQgbm93IGluIGJhY2tncm91bmQgYW5kIGdldCB0aGUgY2FjaGVkIHJlc3VsdFxuICAgIC8vIHdoZW5ldmVyIGl0IGlzIG5lZWRlZFxuICAgIHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCkuY2F0Y2goKGUpID0+IGxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoZnVuY3Rpb24gbG9nSW5mbyAoKSB7XG4gICAgICBsb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgU2FmYXJpIGdsb2JhbCBwcmVmZXJlbmNlcyB1cGRhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbENvbmZpZyA9IGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpLCBhc3luYyAoc2ltKSA9PiB7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHNpbSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBuZWVkcyB0byBiZSBjaGFuZ2VzIGEgcHJpb3JpLCBzbyBjaGFuZ2UgZmlyc3QuXG4gICAgICAgIC8vIHNvbWV0aW1lcyB0aGUgc2h1dGRvd24gcHJvY2VzcyBjaGFuZ2VzIHRoZSBzZXR0aW5ncywgc28gcmVzZXQgdGhlbSxcbiAgICAgICAgLy8ga25vd2luZyB0aGF0IHRoZSBzaW0gaXMgYWxyZWFkeSBzaHV0XG4gICAgICAgIGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHNpbSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiAhKGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpKSB7XG4gICAgICAgIGNvbnN0IGNlcnRIZWFkID0gXy50cnVuY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge2xlbmd0aDogMjB9KTtcbiAgICAgICAgbG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oYE1ha2luZyBzdXJlIFNpbXVsYXRvciBpcyBzaHV0IGRvd24sICcgK1xuICAgICAgICAgICAgJ3NvIHRoYXQgU1NMIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvbiB0YWtlcyBlZmZlY3RgKTtcbiAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkge1xuICAgICAgICAvLyBTaW11bGF0b3IgbXVzdCBiZSBib290ZWQgaW4gb3JkZXIgdG8gY2FsbCB0aGlzIGhlbHBlclxuICAgICAgICBhd2FpdCBpbnN0YWxsQ2VydGlmaWNhdGUodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubGF1bmNoV2l0aElEQiAmJiB0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpZGIgPSBuZXcgSURCKHt1ZGlkfSk7XG4gICAgICAgICAgYXdhaXQgaWRiLmNvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmlkYiA9IGlkYjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQXBwIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdW5rbm93bmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucGVybWlzc2lvbnMpIHtcbiAgICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsb2cuZGVidWcoJ1dhaXRpbmcgZm9yIGluaXRpYWwgd2VidmlldycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdpbml0aWFsV2Vidmlld05hdmlnYXRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW3RoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLCB0aGlzLl9hdWRpb1JlY29yZGVyXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgbG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSA9IHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgISF0aGlzLm9wdHMucmVzZXRMb2NhdGlvblNlcnZpY2U7XG4gICAgaWYgKHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSgpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlKSB7IC8qIElnbm9yZSB0aGlzIGVycm9yIHNpbmNlIG1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIGFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAqLyB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFwcDogJHt0aGlzLm9wdHMuYXBwfS4gYCArXG4gICAgICAgIGBBcHAgcGF0aHMgbmVlZCB0byBiZSBhYnNvbHV0ZSBvciBhbiBVUkwgdG8gYSBjb21wcmVzc2VkIGFwcCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURldmljZSAoKSB7XG4gICAgLy8gaW4gdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGNyZWF0ZSBhIHNpbSwgd2Ugd2lsbCBzZXQgdGhpcyBzdGF0ZVxuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSBmYWxzZTtcblxuICAgIC8vIGlmIHdlIGdldCBnZW5lcmljIG5hbWVzLCB0cmFuc2xhdGUgdGhlbVxuICAgIHRoaXMub3B0cy5kZXZpY2VOYW1lID0gdHJhbnNsYXRlRGV2aWNlTmFtZSh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLm9wdHMuZGV2aWNlTmFtZSk7XG5cbiAgICBjb25zdCBzZXR1cFZlcnNpb25DYXBzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGRldGVjdCBhbnkgY29ubmVjdGVkIHJlYWwgZGV2aWNlcy4gRmFsbGluZyBiYWNrIHRvIFNpbXVsYXRvci4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcbiAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2hpbmcgU2ltdWxhdG9yIGlzIGZvdW5kLiBUaHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgbG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgbG9nLmRlYnVnKGBBdmFpbGFibGUgZGV2aWNlczogJHtkZXZpY2VzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGlmICghZGV2aWNlcy5pbmNsdWRlcyh0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgYSBwYXJ0aWN1bGFyIHNpbXVsYXRvclxuICAgICAgICAgIGxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgbG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICBsb2cuaW5mbygnU2ltdWxhdG9yIHVkaWQgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gbm8gZGV2aWNlIG9mIHRoaXMgdHlwZSBleGlzdHMsIG9yIHRoZXkgcmVxdWVzdCBuZXcgc2ltLCBzbyBjcmVhdGUgb25lXG4gICAgbG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsb2cuaW5mbyhgV2FpdGluZyBmb3IgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdG8gYmUgaW4gZm9yZWdyb3VuZGApO1xuICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQoQVBQX0xBVU5DSF9USU1FT1VUIC8gMjAwLCAxMCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAyMDAsIGNoZWNrU3RhdHVzKTtcbiAgICBsb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwKSkge1xuICAgICAgICB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2gpKSB7XG4gICAgICAgIHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYUNhcHMgPSB7XG4gICAgICBidW5kbGVJZDogdGhpcy5vcHRzLmF1dG9MYXVuY2ggPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYnVuZGxlSWQsXG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZXZlbnRsb29wSWRsZURlbGF5U2VjOiB0aGlzLm9wdHMud2RhRXZlbnRsb29wSWRsZURlbGF5ID8/IDAsXG4gICAgICBzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZTogdGhpcy5vcHRzLndhaXRGb3JRdWllc2NlbmNlID8/IHRydWUsXG4gICAgICBzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb246IHRoaXMub3B0cy5zaW1wbGVJc1Zpc2libGVDaGVjayA/PyBmYWxzZSxcbiAgICAgIG1heFR5cGluZ0ZyZXF1ZW5jeTogdGhpcy5vcHRzLm1heFR5cGluZ0ZyZXF1ZW5jeSA/PyA2MCxcbiAgICAgIHNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyOiB0aGlzLm9wdHMuc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIgPz8gdHJ1ZSxcbiAgICAgIHdhaXRGb3JJZGxlVGltZW91dDogdGhpcy5vcHRzLndhaXRGb3JJZGxlVGltZW91dCxcbiAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgZWxlbWVudFJlc3BvbnNlRmllbGRzOiB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlRmllbGRzLFxuICAgICAgZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzOiB0aGlzLm9wdHMuZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzLFxuICAgICAgc2hvdWxkVGVybWluYXRlQXBwOiB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID8/IHRydWUsXG4gICAgICBmb3JjZUFwcExhdW5jaDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID8/IHRydWUsXG4gICAgICB1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3k6IHRoaXMub3B0cy51c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlOiB0aGlzLm9wdHMuZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2VcbiAgICAgICAgPz8gKHRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSksXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLndhcm4oYCdwbGF0Zm9ybVZlcnNpb24nIGNhcGFiaWxpdHkgKCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScpIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYENvbnNpZGVyIGZpeGluZyBpdCBvciBiZSByZWFkeSB0byBleHBlcmllbmNlIGFuIGluY29uc2lzdGVudCBkcml2ZXIgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgbGV0IHZlcmlmeVByb2Nlc3NBcmd1bWVudCA9IChwcm9jZXNzQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCB7YXJncywgZW52fSA9IHByb2Nlc3NBcmd1bWVudHM7XG4gICAgICBpZiAoIV8uaXNOaWwoYXJncykgJiYgIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYSBKU09OIGZvcm1hdCBvciBhbiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCd3ZWJEcml2ZXJBZ2VudFVybCcgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsaWQgV2ViRHJpdmVyQWdlbnQgc2VydmVyIFVSTC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtjYXBzLndlYkRyaXZlckFnZW50VXJsfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgICBpZiAoY2Fwcy5idW5kbGVJZCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCcke2NhcHMucGVybWlzc2lvbnN9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIG9iamVjdCB3aXRoIGZvcm1hdCBgICtcbiAgICAgICAgICBge1wiPGJ1bmRsZUlkMT5cIjoge1wiPHNlcnZpY2VOYW1lMT5cIjogXCI8c2VydmljZVN0YXR1czE+XCIsIC4uLn0sIC4uLn0uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wbGF0Zm9ybVZlcnNpb24gJiYgIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgICBzdHJhdGVneTogdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/lib/driver.js
CHANGED
|
@@ -256,7 +256,7 @@ class XCUITestDriver extends BaseDriver {
|
|
|
256
256
|
// merge cli args to opts, and if we did merge any, revalidate opts to ensure the final set
|
|
257
257
|
// is also consistent
|
|
258
258
|
if (this.mergeCliArgsToOpts()) {
|
|
259
|
-
this.validateDesiredCaps();
|
|
259
|
+
this.validateDesiredCaps({...caps, ...this.cliArgs});
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
await this.start();
|