appium-uiautomator2-driver 2.12.1 → 2.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.12.3](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.2...v2.12.3) (2023-02-02)
2
+
3
+
4
+ ### Miscellaneous Chores
5
+
6
+ * bump chromedriver ([21003b3](https://github.com/appium/appium-uiautomator2-driver/commit/21003b30905778b770536bf950b7eebc8a9decf3))
7
+
8
+ ## [2.12.2](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.1...v2.12.2) (2023-01-12)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * specify supported non-standard commands in newMethodMap ([8a51004](https://github.com/appium/appium-uiautomator2-driver/commit/8a5100486cc3d39c0a8f0e77b2eb574ce1a01e04))
14
+
1
15
  ## [2.12.1](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.0...v2.12.1) (2022-12-24)
2
16
 
3
17
 
package/README.md CHANGED
@@ -218,13 +218,13 @@ extras | The result of [getExtras](https://developer.android.com/reference/andro
218
218
 
219
219
  UiAutomator2 driver supports the following location strategies:
220
220
 
221
- Name | Description | Example
222
- --- | --- | ---
223
- id | This strategy is mapped to the native UiAutomator's `By.res` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#res(java.lang.String)) (exact match of element's resource name). Package identifier prefix is added automatically if unset and is equal to the identifier of the current application under test. | 'com.mycompany:id/resourceId'
224
- accessibilityId | This strategy is mapped to the native UiAutomator's `By.desc` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#desc(java.lang.String)) (exact match of element's content description). | 'my description'
225
- className | This strategy is mapped to the native UiAutomator's `By.clazz` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#clazz(java.lang.String)) (exact match of element's class). | 'android.view.View'
226
- `-android uiautomator` | This strategy is mapped to the native UiAutomator's `UiSelector` [locator](https://developer.android.com/reference/androidx/test/uiautomator/UiSelector)). It is even possible to perform some advanced operations, like scrolling, with this locator type. Check [Guide on UiAutomator Locator Types](docs/uiautomator-uiselector.md) | `new UiScrollable(new UiSelector().resourceId(\"android:id/list\")).scrollIntoView(new UiSelector().text(\"Radio Group\"))`
227
- xpath | For elements lookup Xpath strategy the driver uses the same XML tree that is generated by page source API. Only Xpath 1.0 is supported for appium-uiatomator2-server versions below 4.25.0. All server versions starting from 4.25.0 support both Xpath 1.0 and 2.0 | `By.xpath("//android.view.View[@text=\"Regular\" and @checkable=\"true\"]")`
221
+ Name | Description | Speed Ranking | Example
222
+ --- | --- | --- | ---
223
+ id | This strategy is mapped to the native UiAutomator's `By.res` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#res(java.lang.String)) (exact match of element's resource name). Package identifier prefix is added automatically if unset and is equal to the identifier of the current application under test. | `⭐⭐⭐⭐⭐` | 'com.mycompany:id/resourceId'
224
+ accessibilityId | This strategy is mapped to the native UiAutomator's `By.desc` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#desc(java.lang.String)) (exact match of element's content description). | `⭐⭐⭐⭐⭐` | 'my description'
225
+ className | This strategy is mapped to the native UiAutomator's `By.clazz` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#clazz(java.lang.String)) (exact match of element's class). | `⭐⭐⭐⭐⭐` | 'android.view.View'
226
+ -android uiautomator | This strategy is mapped to the native UiAutomator's `UiSelector` [locator](https://developer.android.com/reference/androidx/test/uiautomator/UiSelector)). It is even possible to perform some advanced operations, like scrolling, with this locator type. Check [Guide on UiAutomator Locator Types](docs/uiautomator-uiselector.md) | `⭐⭐⭐⭐` | new UiScrollable(new UiSelector().resourceId(\"android:id/list\")).scrollIntoView(new UiSelector().text(\"Radio Group\"))
227
+ xpath | For elements lookup Xpath strategy the driver uses the same XML tree that is generated by page source API. Only Xpath 1.0 is supported for appium-uiatomator2-server versions below 4.25.0. All server versions starting from 4.25.0 support both Xpath 1.0 and 2.0 | `⭐⭐⭐` | By.xpath("//android.view.View[@text=\"Regular\" and @checkable=\"true\"]")
228
228
 
229
229
 
230
230
  ## Parallel Tests
@@ -284,7 +284,7 @@ mjpegBilinearFiltering | boolean | Controls whether (`true`) or not (`false`, th
284
284
  useResourcesForOrientationDetection | boolean | Defines the strategy used by UiAutomator2 server to detect the original device orientation. By default (`false` value) the server uses device rotation value for this purpose. Although, this approach may not work for some devices and a portrait orientation may erroneously be detected as the landscape one (and vice versa). In such case it makes sense to play with this setting.
285
285
  enforceXPath1 | boolean | Since UiAutomator2 driver version `4.25.0` XPath2 is set as the default and the recommended interpreter for the corresponding element locators. This interpreter is based on [Psychopath XPath2](https://wiki.eclipse.org/PsychoPathXPathProcessor) implementation, which is now a part of the Eclipse foundation. In most of the cases XPath1 locators are also valid XPath2 locators, so there should be no issues while locating elements. Although, since the XPath2 standard is much more advanced in comparison to the previous version, some [issues](https://github.com/appium/appium/issues/16142) are possible for more sophisticated locators, which cannot be fixed easily, as we depend on the third-party library mentioned above. Then try to workaround such issues by enforcing XPath1 usage (whose implementation is a part of the Android platform itself) and assigning this setting to `true`. Note, this setting is actually applied at the time when the element lookup by XPath is executed, so you could switch it on or off whenever needed throughout your automated testing session.
286
286
  limitXPathContextScope | boolean | Due to historical reasons UiAutomator2 driver limits scopes of element context-based searches to the parent element. This means a request like `findElement(By.xpath, "//root").findElement(By.xpath, "./..")` would always fail, because the driver only collects descendants of the `root` element for the destination XML source. The `limitXPathContextScope` setting being set to `false` changes that default behavior, so the collected page source includes the whole page source XML where `root` node is set as the search context. With that setting disabled the search query above should not fail anymore. Although, you must still be careful while building XPath requests for context-based searches with the `limitXPathContextScope` setting set to `false`. A request like `findElement(By.xpath, "//root").findElement(By.xpath, "//element")` would ignore the current context and search for `element` trough the whole page source. Use `.` notation to correct that behavior and only find `element` nodes which are descendants of the `root` node: `findElement(By.xpath, "//root").findElement(By.xpath, ".//element")`.
287
- disableIdLocatorAutocompletion | boolean | According to internal Android standards it is expected that each resource identifier is prefixed with `<packageName>:id/` string. This should guarantee uniqueness of each identifier. Although some application development frameworks ignore this rule and don't add such prefix automatically or, rather, let it up to the developer to decide how to represent their application identifiers. By default UIA2 driver adds the above prefixes automatically to all resource id locators if they are not prefixed, but in case of such "special" apps this feature might be disabled by assigning the setting to `true`.
287
+ disableIdLocatorAutocompletion | boolean | According to internal Android standards it is expected that each resource identifier is prefixed with `<packageName>:id/` string. This should guarantee uniqueness of each identifier. Although some application development frameworks ignore this rule and don't add such prefix automatically or, rather, let it up to the developer to decide how to represent their application identifiers. For example, [testTag modifier attribute in the Jetpack Compose](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#(androidx.compose.ui.Modifier).testTag(kotlin.String)) allows developers to set an arbitrary string without the prefix rule. By default UIA2 driver adds the above prefixes automatically to all resource id locators if they are not prefixed, but in case of such "special" apps this feature might be disabled by assigning the setting to `true`.
288
288
  includeExtrasInPageSource | boolean | Whether to include `extras` element attribute in the XML page source result. Then, XPath locator can find the element by the extras. Its value consists of combined [getExtras](https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#getExtras()) as `keys=value` pair separated by a semicolon (`;`), thus you may need to find the element with partial matching like `contains` e.g. `driver.find_element :xpath, '//*[contains(@extras, "AccessibilityNodeInfo.roleDescription=")]'`. The value could be huge if elements in the XML page source have large `extras`. It could affect the performance of XML page source generation.
289
289
 
290
290
 
@@ -9,6 +9,7 @@ require("source-map-support/register");
9
9
  var _lodash = _interopRequireDefault(require("lodash"));
10
10
  var _driver = require("appium/driver");
11
11
  var _uiautomator = require("./uiautomator2");
12
+ var _methodMap = require("./method-map");
12
13
  var _support = require("appium/support");
13
14
  var _asyncbox = require("asyncbox");
14
15
  var _bluebird = _interopRequireDefault(require("bluebird"));
@@ -34,6 +35,7 @@ const NO_PROXY = [['GET', new RegExp('^/session/(?!.*/)')], ['GET', new RegExp('
34
35
  const CHROME_NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/rect')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/execute$')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/log/types$')], ['POST', new RegExp('^/session/[^/]+/log$')], ['GET', new RegExp('^/session/[^/]+/se/log/types$')], ['POST', new RegExp('^/session/[^/]+/se/log$')]];
35
36
  const MEMOIZED_FUNCTIONS = ['getStatusBarHeight', 'getDevicePixelRatio'];
36
37
  class AndroidUiautomator2Driver extends _driver.BaseDriver {
38
+ static newMethodMap = _methodMap.newMethodMap;
37
39
  constructor(opts = {}, shouldValidateCaps = true) {
38
40
  delete opts.shell;
39
41
  super(opts, shouldValidateCaps);
@@ -524,4 +526,4 @@ for (let [cmd, fn] of _lodash.default.toPairs(_index.default)) {
524
526
  }
525
527
  var _default = AndroidUiautomator2Driver;
526
528
  exports.default = _default;
527
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwidWlhdXRvbWF0b3IySGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiREVWSUNFX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiREVWSUNFX1BPUlQiLCJNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQiLCJMT0NBTEhPU1RfSVA0IiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJ1aWF1dG9tYXRvcjIiLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwiYWxsb3dJbnZpc2libGVFbGVtZW50cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJmbiIsIl8iLCJtZW1vaXplIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImRlZmF1bHRPcHRzIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJsb2ciLCJpbmZvIiwicGtnIiwiYWN0aXZpdHkiLCJnZXRDaHJvbWVQa2ciLCJicm93c2VyTmFtZSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwiQVBLU19FWFRFTlNJT04iLCJjaGVja0FwcFByZXNlbnQiLCJzdGFydFVpQXV0b21hdG9yMlNlc3Npb24iLCJmaWxsRGV2aWNlRGV0YWlscyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsInN0YXJ0IiwiZSIsImRlbGV0ZVNlc3Npb24iLCJwaXhlbFJhdGlvIiwiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJkcml2ZXJEYXRhIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25EYXRhIiwiZGVidWciLCJ1aWEyRGF0YSIsImp3cHJveHkiLCJjb21tYW5kIiwiaXNFbXVsYXRvciIsImFkYiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImFsbG9jYXRlU3lzdGVtUG9ydCIsImZvcndhcmRQb3J0IiwibG9jYWxQb3J0IiwiY2hlY2tQb3J0U3RhdHVzIiwic3lzdGVtUG9ydCIsIl9oYXNTeXN0ZW1Qb3J0SW5DYXBzIiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwicmVsZWFzZVN5c3RlbVBvcnQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0IiwibWpwZWdTZXJ2ZXJQb3J0IiwicmVsZWFzZU1qcGVnU2VydmVyUG9ydCIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJjcmVhdGVBREIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJoYXNWYWx1ZSIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwid2FybiIsImFwcEluZm8iLCJnZXRMYXVuY2hJbmZvIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdERldmljZSIsImluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsInN0YXJ0U2Vzc2lvbiIsImFkZERldmljZUluZm9Ub0NhcHMiLCJza2lwVW5sb2NrIiwidW5sb2NrIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwiZW5zdXJlQXBwU3RhcnRzIiwib3JpZW50YXRpb24iLCJzZXRPcmllbnRhdGlvbiIsImF1dG9XZWJ2aWV3Iiwidmlld05hbWUiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJyZXRyeUludGVydmFsIiwic2V0Q29udGV4dCIsImFwaVZlcnNpb24iLCJtYW51ZmFjdHVyZXIiLCJtb2RlbCIsInJlYWxEaXNwbGF5U2l6ZSIsImRpc3BsYXlEZW5zaXR5IiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsImRldmljZUFwaUxldmVsIiwicGFyc2VJbnQiLCJkZXZpY2VTY3JlZW5TaXplIiwiZGV2aWNlU2NyZWVuRGVuc2l0eSIsImRldmljZU1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwidWlhdXRvbWF0b3IyT3B0cyIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicmVhZFRpbWVvdXQiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCIsIlVpQXV0b21hdG9yMlNlcnZlciIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsImluc3RhbGxTZXJ2ZXJBcGsiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCIsImFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJzdGRlcnIiLCJtZXNzYWdlIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwibWFwIiwiaW5zdGFsbE90aGVyQXBrcyIsIm5vUmVzZXQiLCJpc0FwcEluc3RhbGxlZCIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInJlcXVpcmVEZWZhdWx0Q2VydCIsInNpZ25BcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImZhc3RSZXNldCIsInJlc2V0QXBwIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhbmRyb2lkQ292ZXJhZ2UiLCJmb3JjZUFwcExhdW5jaCIsInByb2Nlc3NFeGlzdHMiLCJzdGFydEFwcCIsImFjdGlvbiIsImludGVudEFjdGlvbiIsImNhdGVnb3J5IiwiaW50ZW50Q2F0ZWdvcnkiLCJmbGFncyIsImludGVudEZsYWdzIiwid2FpdFBrZyIsIndhaXRBY3Rpdml0eSIsIndhaXRGb3JMYXVuY2giLCJhcHBXYWl0Rm9yTGF1bmNoIiwid2FpdER1cmF0aW9uIiwiYXBwV2FpdER1cmF0aW9uIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJzdG9wQXBwIiwiZG9udFN0b3BBcHBPblJlc2V0IiwicmV0cnkiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwibW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwibW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl9zY3JlZW5TdHJlYW1pbmdQcm9wcyIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInRhc2siLCJpZ24iLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZW5kQW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IiwiYnJvYWRjYXN0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImVycm9yIiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzdG9wIiwiZnMiLCJleGlzdHMiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJyZXN0YXJ0IiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImlzQ2hyb21lQnJvd3NlciIsImNtZCIsInRvUGFpcnMiLCJhbmRyb2lkQ29tbWFuZHMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQge1xuICBVaUF1dG9tYXRvcjJTZXJ2ZXIsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXG59IGZyb20gJy4vdWlhdXRvbWF0b3IyJztcbmltcG9ydCB7IGZzLCB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgdWlhdXRvbWF0b3IySGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRFxufSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSwgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT04gfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuXG5cbmNvbnN0IGhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB1aWF1dG9tYXRvcjJIZWxwZXJzLCBhbmRyb2lkSGVscGVycyk7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBVaUF1dG9tYXRvcjIgSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgREVWSUNFX1BPUlRfUkFOR0UgPSBbODIwMCwgODI5OV07XG5cbi8vIFRoZSBndWFyZCBpcyBuZWVkZWQgdG8gYXZvaWQgZHluYW1pYyBzeXN0ZW0gcG9ydCBhbGxvY2F0aW9uIGNvbmZsaWN0cyBmb3Jcbi8vIHBhcmFsbGVsIGRyaXZlciBzZXNzaW9uc1xuY29uc3QgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAndWlhMl9kZXZpY2VfcG9ydF9ndWFyZCcpLFxuICB7dGltZW91dDogMjUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IFVpQXV0b21hdG9yMiBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGwgZm9yd2FyZFxuLy8gb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkwO1xuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS5cbi8vIFdlIHdpbGwgZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZVxuLy8gZGV2aWNlLlxuY29uc3QgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUID0gNzgxMDtcblxuY29uc3QgTE9DQUxIT1NUX0lQNCA9ICcxMjcuMC4wLjEnO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydF9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2F0dHJpYnV0ZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9kaXNwbGF5ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZW5hYmxlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9sb2NhdGlvbl9pbl92aWV3JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL25hbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zZWxlY3RlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvW14vXStfYWxlcnQkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWN0aW9ucycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwL1teL10nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS8oPyFzZXRfY2xpcGJvYXJkKVteL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvcmVwbGFjZV92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vLipldmVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsva2V5cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3dpbmRvdy9yZWN0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZyQnKV0sXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcyQnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZyQnKV0sXG5dO1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG5dO1xuXG5jbGFzcyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2UsIGFsbG93SW52aXNpYmxlRWxlbWVudHM6IGZhbHNlfSxcbiAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIC8vIGhhbmRsZSB3ZWJ2aWV3IG1lY2hhbmljcyBmcm9tIEFuZHJvaWREcml2ZXJcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykgJiYgYW5kcm9pZEhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2FwcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXCJXZSdyZSBnb2luZyB0byBydW4gYSBDaHJvbWUtYmFzZWQgc2Vzc2lvblwiKTtcbiAgICAgICAgbGV0IHtwa2csIGFjdGl2aXR5fSA9IGhlbHBlcnMuZ2V0Q2hyb21lUGtnKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gICAgICAgIHRoaXMub3B0cy5hcHBBY3Rpdml0eSA9IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBDaHJvbWUtdHlwZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSBhcmUgJHtwa2d9IGFuZCAke2FjdGl2aXR5fWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgW0FQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYE5laXRoZXIgJ2FwcCcgbm9yICdhcHBQYWNrYWdlJyB3YXMgc2V0LiBTdGFydGluZyBVaUF1dG9tYXRvcjIgYCArXG4gICAgICAgICAgJ3dpdGhvdXQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbigpO1xuICAgICAgYXdhaXQgdGhpcy5maWxsRGV2aWNlRGV0YWlscygpO1xuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbGxEZXZpY2VEZXRhaWxzICgpIHtcbiAgICB0aGlzLmNhcHMucGl4ZWxSYXRpbyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgIHRoaXMuY2Fwcy5zdGF0QmFySGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXNCYXJIZWlnaHQoKTtcbiAgICB0aGlzLmNhcHMudmlld3BvcnRSZWN0ID0gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIGxldCBzZXNzaW9uRGF0YSA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnR2V0dGluZyBzZXNzaW9uIGRldGFpbHMgZnJvbSBzZXJ2ZXIgdG8gbWl4IGluJyk7XG4gICAgbGV0IHVpYTJEYXRhID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvJywgJ0dFVCcsIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbkRhdGEsIHVpYTJEYXRhKTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlU3lzdGVtUG9ydCAoKSB7XG4gICAgY29uc3QgZm9yd2FyZFBvcnQgPSBhc3luYyAobG9jYWxQb3J0KSA9PiB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBVaUF1dG9tYXRvcjIgU2VydmVyIHBvcnQgJHtERVZJQ0VfUE9SVH0gdG8gbG9jYWwgcG9ydCAke2xvY2FsUG9ydH1gKTtcbiAgICAgIGlmICgoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKGxvY2FsUG9ydCwgTE9DQUxIT1NUX0lQNCkpID09PSAnb3BlbicpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVWlBdXRvbWF0b3IyIFNlcnZlciBjYW5ub3Qgc3RhcnQgYmVjYXVzZSB0aGUgbG9jYWwgcG9ydCAjJHtsb2NhbFBvcnR9IGlzIGJ1c3kuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgdGhlIHBvcnQgeW91IHByb3ZpZGUgdmlhICdzeXN0ZW1Qb3J0JyBjYXBhYmlsaXR5IGlzIG5vdCBvY2N1cGllZC4gYCArXG4gICAgICAgICAgYFRoaXMgc2l0dWF0aW9uIG1pZ2h0IG9mdGVuIGJlIGEgcmVzdWx0IG9mIGFuIGluYWNjdXJhdGUgc2Vzc2lvbnMgbWFuYWdlbWVudCwgZS5nLiBgICtcbiAgICAgICAgICBgb2xkIGF1dG9tYXRpb24gc2Vzc2lvbnMgb24gdGhlIHNhbWUgZGV2aWNlIG11c3QgYWx3YXlzIGJlIGNsb3NlZCBiZWZvcmUgc3RhcnRpbmcgbmV3IG9uZXMuYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydChsb2NhbFBvcnQsIERFVklDRV9QT1JUKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSB7XG4gICAgICB0aGlzLl9oYXNTeXN0ZW1Qb3J0SW5DYXBzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfVxuXG4gICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IERFVklDRV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fX0uIGAgK1xuICAgICAgICAgIGBQbGVhc2Ugc2V0IHRoZSBhdmFpbGFibGUgcG9ydCBudW1iZXIgYnkgcHJvdmlkaW5nIHRoZSBzeXN0ZW1Qb3J0IGNhcGFiaWxpdHkgb3IgYCArXG4gICAgICAgICAgYGRvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZVN5c3RlbVBvcnQgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCwgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uICgpIHtcbiAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG5cbiAgICBpZiAoYXBpTGV2ZWwgPCAyMSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVUlBdXRvbWF0b3IyIGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIEFuZHJvaWQgNS4wIChMb2xsaXBvcCkuICcgK1xuICAgICAgICAnWW91IGNvdWxkIHN0aWxsIHVzZSBvdGhlciBzdXBwb3J0ZWQgYmFja2VuZHMgaW4gb3JkZXIgdG8gYXV0b21hdGUgb2xkZXIgQW5kcm9pZCB2ZXJzaW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoYXBpTGV2ZWwgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5ncHNFbmFibGVkKSkge1xuICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFNvcnJ5ISAnZ3BzRW5hYmxlZCcgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIC8vIGFuZCBnZXQgaXQgb250byBvdXIgJ29wdHMnIG9iamVjdCBzbyB3ZSB1c2UgaXQgZnJvbSBub3cgb25cbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyB8fCB7fSk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgc2NyZWVuIGRlbnNpdHksIG1vZGVsIGFuZCBtYW51ZmFjdHVyZXIgZGV0YWlsc1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIHBvcnRcbiAgICAvLyBUaGlzIGNhbGwgbXV0YXRlcyB0aGlzLm9wdHMuc3lzdGVtUG9ydCBpZiBpdCBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBNSlBFRyBzZXJ2ZXIgcG9ydCAoaWZcbiAgICAvLyBhcHBsaWNhYmxlKVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgVWlBdXRvbWF0b3IyIHNlcnZlciBldGNcbiAgICBhd2FpdCB0aGlzLmluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIoKTtcblxuICAgIC8vIFNob3VsZCBiZSBhZnRlciBpbnN0YWxsaW5nIGlvLmFwcGl1bS5zZXR0aW5ncyBpbiBoZWxwZXJzLmluaXREZXZpY2VcbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24gJiYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyNikpIHsgLy8gQVBJIGxldmVsIDI2IGlzIEFuZHJvaWQgOC4wLlxuICAgICAgLy8gR3JhbnRpbmcgYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTklNQVRJT05fU0NBTEUgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBhbmltYXRpb25zIHVuZGVyIEFQSSBsZXZlbCAyNlxuICAgICAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICAgIC8vIGAtLW5vLXdpbmRvdy1hbmltYXRpb25gIHdvcmtzIG92ZXIgQW5kcm9pZCA4IHRvIGRpc2FibGUgYWxsIG9mIGFuaW1hdGlvbnNcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIGFuaW1hdGlvbiB2aWEgaW8uYXBwaXVtLnNldHRpbmdzJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmIGFwcEluZm8pIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBVaUF1dG9tYXRvcjIgYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG5cbiAgICAvLyBVbmxvY2sgdGhlIGRldmljZSBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ3NraXBVbmxvY2snIGNhcGFiaWxpdHkgc2V0LCBzbyBza2lwcGluZyBkZXZpY2UgdW5sb2NrYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7IC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb25cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2ggJiYgdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQXBwU3RhcnRzKCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGluaXRpYWwgb3JpZW50YXRpb24gaXMgcmVxdWVzdGVkLCBzZXQgaXRcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugd2FudCB0byBpbW1lZGlhdGVseSBnZXQgaW50byBhIHdlYnZpZXcsIHNldCBvdXIgY29udGV4dFxuICAgIC8vIGFwcHJvcHJpYXRlbHlcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBjb25zdCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCB8fCAyMDAwO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIHVpYXV0b21hdG9yMlxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGFzeW5jIGluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIgKCkge1xuICAgIC8vIGJyb2tlbiBvdXQgZm9yIHJlYWRhYmlsaXR5XG4gICAgY29uc3QgdWlhdXRvbWF0b3IyT3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8IExPQ0FMSE9TVF9JUDQsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb246ICEhdGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgICAgcmVhZFRpbWVvdXQ6IHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCxcbiAgICB9O1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyB1aWF1dG9tYXRvcjIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uc1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbmV3IFVpQXV0b21hdG9yMlNlcnZlcih0aGlzLmxvZywgdWlhdXRvbWF0b3IyT3B0cyk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMudWlhdXRvbWF0b3IyLnByb3h5UmVxUmVzLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAnc2tpcFNlcnZlckluc3RhbGxhdGlvbicgaXMgc2V0LiBTa2lwcGluZyBVSUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGxhdGlvbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuaW5zdGFsbFNlcnZlckFwayh0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFxuICAgICAgICAgIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgYWRkIHNlcnZlciBwYWNrYWdlcyB0byB0aGUgRG96ZSB3aGl0ZWxpc3QuIE9yaWdpbmFsIGVycm9yOiBgICtcbiAgICAgICAgICAoZS5zdGRlcnIgfHwgZS5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHNcbiAgICAgICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OXSkpKTtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyhvdGhlckFwcHMsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgJiYgIShhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYXBwUGFja2FnZSkpXG4gICAgICAgICAgfHwgIXRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm5vU2lnbiAmJiAhYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5hcHBQYWNrYWdlLCB7XG4gICAgICAgICAgcmVxdWlyZURlZmF1bHRDZXJ0OiBmYWxzZSxcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBhd2FpdCBoZWxwZXJzLnNpZ25BcHAodGhpcy5hZGIsIHRoaXMub3B0cy5hcHApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdub1Jlc2V0IGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlIGFwcCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gRG9pbmcgbm90aGluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuc3VyZUFwcFN0YXJ0cyAoKSB7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYWN0aXZpdHkgYW5kIHBhY2thZ2UgdG8gd2FpdCBmb3JcbiAgICBjb25zdCBhcHBXYWl0UGFja2FnZSA9IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSB8fCB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgICBjb25zdCBhcHBXYWl0QWN0aXZpdHkgPSB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5IHx8IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcblxuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgYW5kcm9pZENvdmVyYWdlIGlzIGNvbmZpZ3VyZWQuIGAgK1xuICAgICAgICBgIFN0YXJ0aW5nIGluc3RydW1lbnRhdGlvbiBvZiAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlfScuLi5gKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmFuZHJvaWRDb3ZlcmFnZSh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlLCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ICYmICF0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2hcbiAgICAgICAgJiYgYXdhaXQgdGhpcy5hZGIucHJvY2Vzc0V4aXN0cyh0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgaXMgYWxyZWFkeSBydW5uaW5nIGFuZCBub1Jlc2V0IGlzIGVuYWJsZWQuIGAgK1xuICAgICAgICBgU2V0IGZvcmNlQXBwTGF1bmNoIGNhcGFiaWxpdHkgdG8gdHJ1ZSBpZiB0aGUgYXBwIG11c3QgYmUgZm9yY2VmdWxseSByZXN0YXJ0ZWQgb24gc2Vzc2lvbiBzdGFydHVwLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbiB8fCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSB8fCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyB8fCAnMHgxMDIwMDAwMCcsIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICBzdG9wQXBwOiB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggfHwgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICByZXRyeTogdHJ1ZSxcbiAgICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBVaUF1dG9tYXRvcjIgc2Vzc2lvbicpO1xuXG4gICAgY29uc3Qgc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzID0gW2FzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZygpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZygpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHN0b3AgQ2hyb21lRHJpdmVyIHByb3hpZXM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5qd3BQcm94eUFjdGl2ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHByb3h5IGRlbGV0ZVNlc3Npb24gdG8gVWlBdXRvbWF0b3IyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgYXdhaXQgQi5hbGwoc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0YXNrKCk7XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICB9KSgpO1xuICAgICAgfSkpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJyR7dGhpcy5kZWZhdWx0SU1FfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IElNRTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2VuZGluZyBpbnRlbnQgYnJvYWRjYXN0ICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnR9JyBhdCB0aGUgZW5kIG9mIGluc3RydW1lbnRpbmcuYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0KHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ05vIGFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCBpcyBjb25maWd1cmVkIGluIGNhcHMuIFBvc3NpYmx5IHlvdSBjYW5ub3QgZ2V0IGNvdmVyYWdlIGZpbGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uXG4gICAgICAgICAgICAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldFxuICAgICAgICAgICAgJiYgIXRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYXBhYmlsaXR5ICdmdWxsUmVzZXQnIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gdW5pbnN0YWxsIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgdmFsdWUgY2FuIGJlIHRydWUgaWYgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIDw9IDI2XG4gICAgICBpZiAodGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHN5c3RlbSBwb3J0IGZvcndhcmQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgLy8gSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VNanBlZ1NlcnZlclBvcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgTUpQRUcgc2VydmVyIHBvcnQgZm9yd2FyZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBJZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGNsb3NlIGVtdWxhdG9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICcke3RoaXMub3B0cy5hcHB9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKCkge1xuICAgIC8vIGludGVudGlvbmFsbHkgZG8gbm90aGluZyBoZXJlLCBzaW5jZSBjb21tYW5kcy51cGRhdGVTZXR0aW5ncyBwcm94aWVzXG4gICAgLy8gc2V0dGluZ3MgdG8gdGhlIHVpYXV0bzIgc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIC8vIE5lZWQgdG8gb3ZlcnJpZGUgYW5kcm9pZC1kcml2ZXIncyB2ZXJzaW9uIG9mIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYWN0dWFsbHlcbiAgLy8gaGF2ZSBhIGJvb3RzdHJhcDsgaW5zdGVhZCB3ZSBqdXN0IHJlc3RhcnQgYWRiIGFuZCByZS1mb3J3YXJkIHRoZSBVaUF1dG9tYXRvcjJcbiAgLy8gcG9ydFxuICBhc3luYyB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCAod3JhcHBlZCkge1xuICAgIGF3YWl0IHdyYXBwZWQoKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5yZXN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGFsd2F5cyBoYXZlIGFuIGFjdGl2ZSBwcm94eSB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSB1aWF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciB1aWF1dG9tYXRvcjIoTk9fUFJPWFkpLCBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQgd2lsbCByZXR1cm4gcmVsYXRlZCBOT19QUk9YWSBsaXN0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHdlYnZpZXcoY2hyb21lZHJpdmVyKSwgdGhlbiByZXR1cm4gQ0hST01FX05PX1BST1hZIGxpc3RcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IENIUk9NRV9OT19QUk9YWTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IHVpYXV0b21hdG9yMi1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGdCQUFtQixFQUFFQyxtQ0FBYyxDQUFDO0FBSXRFLE1BQU1DLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUl0QyxNQUFNQyw0QkFBNEIsR0FBR0MsYUFBSSxDQUFDQyxnQkFBZ0IsQ0FDeERDLGFBQUksQ0FBQ0MsT0FBTyxDQUFDQyxXQUFFLENBQUNDLE1BQU0sRUFBRSxFQUFFLHdCQUF3QixDQUFDLEVBQ25EO0VBQUNDLE9BQU8sRUFBRSxFQUFFO0VBQUVDLFdBQVcsRUFBRTtBQUFJLENBQUMsQ0FDakM7QUFJRCxNQUFNQyxXQUFXLEdBQUcsSUFBSTtBQUl4QixNQUFNQyx3QkFBd0IsR0FBRyxJQUFJO0FBRXJDLE1BQU1DLGFBQWEsR0FBRyxXQUFXO0FBTWpDLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBSyxFQUFFLElBQUlDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3hDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ2xELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ2xELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQ3ZELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQzFELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ3RELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQzlELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQzlELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzVELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLEVBQ3JFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQ3pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLEVBQzdELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQ3pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLEVBQ2pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQzFDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQ3BELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ25ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElB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
529
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwidWlhdXRvbWF0b3IySGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiREVWSUNFX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiREVWSUNFX1BPUlQiLCJNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQiLCJMT0NBTEhPU1RfSVA0IiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIiwiQmFzZURyaXZlciIsIm5ld01ldGhvZE1hcCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJ1aWF1dG9tYXRvcjIiLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwiYWxsb3dJbnZpc2libGVFbGVtZW50cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJmbiIsIl8iLCJtZW1vaXplIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImRlZmF1bHRPcHRzIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJsb2ciLCJpbmZvIiwicGtnIiwiYWN0aXZpdHkiLCJnZXRDaHJvbWVQa2ciLCJicm93c2VyTmFtZSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwiQVBLU19FWFRFTlNJT04iLCJjaGVja0FwcFByZXNlbnQiLCJzdGFydFVpQXV0b21hdG9yMlNlc3Npb24iLCJmaWxsRGV2aWNlRGV0YWlscyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsInN0YXJ0IiwiZSIsImRlbGV0ZVNlc3Npb24iLCJwaXhlbFJhdGlvIiwiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJkcml2ZXJEYXRhIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25EYXRhIiwiZGVidWciLCJ1aWEyRGF0YSIsImp3cHJveHkiLCJjb21tYW5kIiwiaXNFbXVsYXRvciIsImFkYiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImFsbG9jYXRlU3lzdGVtUG9ydCIsImZvcndhcmRQb3J0IiwibG9jYWxQb3J0IiwiY2hlY2tQb3J0U3RhdHVzIiwic3lzdGVtUG9ydCIsIl9oYXNTeXN0ZW1Qb3J0SW5DYXBzIiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwicmVsZWFzZVN5c3RlbVBvcnQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0IiwibWpwZWdTZXJ2ZXJQb3J0IiwicmVsZWFzZU1qcGVnU2VydmVyUG9ydCIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJjcmVhdGVBREIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJoYXNWYWx1ZSIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwid2FybiIsImFwcEluZm8iLCJnZXRMYXVuY2hJbmZvIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdERldmljZSIsImluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsInN0YXJ0U2Vzc2lvbiIsImFkZERldmljZUluZm9Ub0NhcHMiLCJza2lwVW5sb2NrIiwidW5sb2NrIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwiZW5zdXJlQXBwU3RhcnRzIiwib3JpZW50YXRpb24iLCJzZXRPcmllbnRhdGlvbiIsImF1dG9XZWJ2aWV3Iiwidmlld05hbWUiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJyZXRyeUludGVydmFsIiwic2V0Q29udGV4dCIsImFwaVZlcnNpb24iLCJtYW51ZmFjdHVyZXIiLCJtb2RlbCIsInJlYWxEaXNwbGF5U2l6ZSIsImRpc3BsYXlEZW5zaXR5IiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsImRldmljZUFwaUxldmVsIiwicGFyc2VJbnQiLCJkZXZpY2VTY3JlZW5TaXplIiwiZGV2aWNlU2NyZWVuRGVuc2l0eSIsImRldmljZU1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwidWlhdXRvbWF0b3IyT3B0cyIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicmVhZFRpbWVvdXQiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCIsIlVpQXV0b21hdG9yMlNlcnZlciIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsImluc3RhbGxTZXJ2ZXJBcGsiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCIsImFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJzdGRlcnIiLCJtZXNzYWdlIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwibWFwIiwiaW5zdGFsbE90aGVyQXBrcyIsIm5vUmVzZXQiLCJpc0FwcEluc3RhbGxlZCIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInJlcXVpcmVEZWZhdWx0Q2VydCIsInNpZ25BcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImZhc3RSZXNldCIsInJlc2V0QXBwIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhbmRyb2lkQ292ZXJhZ2UiLCJmb3JjZUFwcExhdW5jaCIsInByb2Nlc3NFeGlzdHMiLCJzdGFydEFwcCIsImFjdGlvbiIsImludGVudEFjdGlvbiIsImNhdGVnb3J5IiwiaW50ZW50Q2F0ZWdvcnkiLCJmbGFncyIsImludGVudEZsYWdzIiwid2FpdFBrZyIsIndhaXRBY3Rpdml0eSIsIndhaXRGb3JMYXVuY2giLCJhcHBXYWl0Rm9yTGF1bmNoIiwid2FpdER1cmF0aW9uIiwiYXBwV2FpdER1cmF0aW9uIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJzdG9wQXBwIiwiZG9udFN0b3BBcHBPblJlc2V0IiwicmV0cnkiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwibW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwibW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl9zY3JlZW5TdHJlYW1pbmdQcm9wcyIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInRhc2siLCJpZ24iLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZW5kQW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IiwiYnJvYWRjYXN0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImVycm9yIiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzdG9wIiwiZnMiLCJleGlzdHMiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJyZXN0YXJ0IiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImlzQ2hyb21lQnJvd3NlciIsImNtZCIsInRvUGFpcnMiLCJhbmRyb2lkQ29tbWFuZHMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQge1xuICBVaUF1dG9tYXRvcjJTZXJ2ZXIsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXG59IGZyb20gJy4vdWlhdXRvbWF0b3IyJztcbmltcG9ydCB7IG5ld01ldGhvZE1hcCB9IGZyb20gJy4vbWV0aG9kLW1hcCc7XG5pbXBvcnQgeyBmcywgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHVpYXV0b21hdG9yMkhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OIH0gZnJvbSAnLi9leHRlbnNpb25zJztcblxuXG5jb25zdCBoZWxwZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdWlhdXRvbWF0b3IySGVscGVycywgYW5kcm9pZEhlbHBlcnMpO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gVWlBdXRvbWF0b3IyIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IERFVklDRV9QT1JUX1JBTkdFID0gWzgyMDAsIDgyOTldO1xuXG4vLyBUaGUgZ3VhcmQgaXMgbmVlZGVkIHRvIGF2b2lkIGR5bmFtaWMgc3lzdGVtIHBvcnQgYWxsb2NhdGlvbiBjb25mbGljdHMgZm9yXG4vLyBwYXJhbGxlbCBkcml2ZXIgc2Vzc2lvbnNcbmNvbnN0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3VpYTJfZGV2aWNlX3BvcnRfZ3VhcmQnKSxcbiAge3RpbWVvdXQ6IDI1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCBVaUF1dG9tYXRvcjIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsIGZvcndhcmRcbi8vIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MDtcbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuXG4vLyBXZSB3aWxsIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGVcbi8vIGRldmljZS5cbmNvbnN0IE1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCA9IDc4MTA7XG5cbmNvbnN0IExPQ0FMSE9TVF9JUDQgPSAnMTI3LjAuMC4xJztcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnRfW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9hdHRyaWJ1dGUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZGlzcGxheWVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VuYWJsZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbG9jYXRpb25faW5fdmlldycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9uYW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2VsZWN0ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL1teL10rX2FsZXJ0JCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FjdGlvbnMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydC9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcC9bXi9dJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9jb21wYXJlX2ltYWdlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvKD8hc2V0X2NsaXBib2FyZClbXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3JlcGxhY2VfdmFsdWUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZWxlbWVudC9bXi9dKy92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9nZXRQZXJmb3JtYW5jZURhdGEnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vcGVyZm9ybWFuY2VEYXRhL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RvcF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtLy4qZXZlbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2tleXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy93aW5kb3cvcmVjdCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2ckJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMkJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2ckJyldLFxuXTtcblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuXTtcblxuY2xhc3MgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuXG4gIHN0YXRpYyBuZXdNZXRob2RNYXAgPSBuZXdNZXRob2RNYXA7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG5cbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZSwgYWxsb3dJbnZpc2libGVFbGVtZW50czogZmFsc2V9LFxuICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgLy8gaGFuZGxlIHdlYnZpZXcgbWVjaGFuaWNzIGZyb20gQW5kcm9pZERyaXZlclxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSAmJiBhbmRyb2lkSGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcIldlJ3JlIGdvaW5nIHRvIHJ1biBhIENocm9tZS1iYXNlZCBzZXNzaW9uXCIpO1xuICAgICAgICBsZXQge3BrZywgYWN0aXZpdHl9ID0gaGVscGVycy5nZXRDaHJvbWVQa2codGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgICAgICAgdGhpcy5vcHRzLmFwcEFjdGl2aXR5ID0gdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTmVpdGhlciAnYXBwJyBub3IgJ2FwcFBhY2thZ2UnIHdhcyBzZXQuIFN0YXJ0aW5nIFVpQXV0b21hdG9yMiBgICtcbiAgICAgICAgICAnd2l0aG91dCB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uJyk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuYWRiUG9ydCA9IHRoaXMub3B0cy5hZGJQb3J0IHx8IERFRkFVTFRfQURCX1BPUlQ7XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uKCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxEZXZpY2VEZXRhaWxzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdHZXR0aW5nIHNlc3Npb24gZGV0YWlscyBmcm9tIHNlcnZlciB0byBtaXggaW4nKTtcbiAgICBsZXQgdWlhMkRhdGEgPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnR0VUJywge30pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzZXNzaW9uRGF0YSwgdWlhMkRhdGEpO1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVTeXN0ZW1Qb3J0ICgpIHtcbiAgICBjb25zdCBmb3J3YXJkUG9ydCA9IGFzeW5jIChsb2NhbFBvcnQpID0+IHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3J3YXJkaW5nIFVpQXV0b21hdG9yMiBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byBsb2NhbCBwb3J0ICR7bG9jYWxQb3J0fWApO1xuICAgICAgaWYgKChhd2FpdCBjaGVja1BvcnRTdGF0dXMobG9jYWxQb3J0LCBMT0NBTEhPU1RfSVA0KSkgPT09ICdvcGVuJykge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9fS4gYCArXG4gICAgICAgICAgYFBsZWFzZSBzZXQgdGhlIGF2YWlsYWJsZSBwb3J0IG51bWJlciBieSBwcm92aWRpbmcgdGhlIHN5c3RlbVBvcnQgY2FwYWJpbGl0eSBvciBgICtcbiAgICAgICAgICBgZG91YmxlIGNoZWNrIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgbG9ja2luZyBwb3J0cyB3aXRoaW4gdGhpcyByYW5nZSBhbmQgdGVybWluYXRlIGAgK1xuICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWxlYXNlU3lzdGVtUG9ydCAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuc3lzdGVtUG9ydCB8fCAhdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzU3lzdGVtUG9ydEluQ2Fwcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0LCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFVpQXV0b21hdG9yMlNlc3Npb24gKCkge1xuICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgLy8gQURCIGluc3RhbmNlXG4gICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcblxuICAgIGlmIChhcGlMZXZlbCA8IDIxKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdVSUF1dG9tYXRvcjIgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgQW5kcm9pZCA1LjAgKExvbGxpcG9wKS4gJyArXG4gICAgICAgICdZb3UgY291bGQgc3RpbGwgdXNlIG90aGVyIHN1cHBvcnRlZCBiYWNrZW5kcyBpbiBvcmRlciB0byBhdXRvbWF0ZSBvbGRlciBBbmRyb2lkIHZlcnNpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChhcGlMZXZlbCA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgIHRoaXMubG9nLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgU29ycnkhICdncHNFbmFibGVkJyBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGNvbnN0IGFwcEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBhcHBJbmZvIHx8IHt9KTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBzY3JlZW4gZGVuc2l0eSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgcG9ydFxuICAgIC8vIFRoaXMgY2FsbCBtdXRhdGVzIHRoaXMub3B0cy5zeXN0ZW1Qb3J0IGlmIGl0IGlzIG5vdCBzZXQgZXhwbGljaXRseVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVTeXN0ZW1Qb3J0KCk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBwb3J0IChpZlxuICAgIC8vIGFwcGxpY2FibGUpXG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZU1qcGVnU2VydmVyUG9ydCgpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBVaUF1dG9tYXRvcjIgc2VydmVyIGV0Y1xuICAgIGF3YWl0IHRoaXMuaW5pdFVpQXV0b21hdG9yMlNlcnZlcigpO1xuXG4gICAgLy8gU2hvdWxkIGJlIGFmdGVyIGluc3RhbGxpbmcgaW8uYXBwaXVtLnNldHRpbmdzIGluIGhlbHBlcnMuaW5pdERldmljZVxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiAmJiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI2KSkgeyAvLyBBUEkgbGV2ZWwgMjYgaXMgQW5kcm9pZCA4LjAuXG4gICAgICAvLyBHcmFudGluZyBhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FOSU1BVElPTl9TQ0FMRSBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGFuaW1hdGlvbnMgdW5kZXIgQVBJIGxldmVsIDI2XG4gICAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgICAgLy8gYC0tbm8td2luZG93LWFuaW1hdGlvbmAgd29ya3Mgb3ZlciBBbmRyb2lkIDggdG8gZGlzYWJsZSBhbGwgb2YgYW5pbWF0aW9uc1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBBZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgYXBwSW5mbykge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIFVpQXV0b21hdG9yMiBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcblxuICAgIC8vIFVubG9jayB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHsgLy8gc3RhcnQgYSBjaHJvbWVkcml2ZXIgc2Vzc2lvblxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24odGhpcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0xhdW5jaCAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVBcHBTdGFydHMoKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgaW5pdGlhbCBvcmllbnRhdGlvbiBpcyByZXF1ZXN0ZWQsIHNldCBpdFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5vcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gdWlhdXRvbWF0b3IyXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgYXN5bmMgaW5pdFVpQXV0b21hdG9yMlNlcnZlciAoKSB7XG4gICAgLy8gYnJva2VuIG91dCBmb3IgcmVhZGFiaWxpdHlcbiAgICBjb25zdCB1aWF1dG9tYXRvcjJPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgTE9DQUxIT1NUX0lQNCxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjogISF0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgICByZWFkVGltZW91dDogdGhpcy5vcHRzLnVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0LFxuICAgIH07XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIHVpYXV0b21hdG9yMiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zXG4gICAgdGhpcy51aWF1dG9tYXRvcjIgPSBuZXcgVWlBdXRvbWF0b3IyU2VydmVyKHRoaXMubG9nLCB1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgaW5zdGFsbGF0aW9uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5pbnN0YWxsU2VydmVyQXBrKHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoXG4gICAgICAgICAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ25vUmVzZXQgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGUgYXBwIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9LyR7dGhpcy5vcHRzLmFwcEFjdGl2aXR5fSBgICtcbiAgICAgIGBhbmQgd2FpdGluZyBmb3IgJyR7YXBwV2FpdFBhY2thZ2V9LyR7YXBwV2FpdEFjdGl2aXR5fSdgKTtcblxuICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBhbmRyb2lkQ292ZXJhZ2UgaXMgY29uZmlndXJlZC4gYCArXG4gICAgICAgIGAgU3RhcnRpbmcgaW5zdHJ1bWVudGF0aW9uIG9mICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2V9Jy4uLmApO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYW5kcm9pZENvdmVyYWdlKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgJiYgIXRoaXMub3B0cy5mb3JjZUFwcExhdW5jaFxuICAgICAgICAmJiBhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9JyBpcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIG5vUmVzZXQgaXMgZW5hYmxlZC4gYCArXG4gICAgICAgIGBTZXQgZm9yY2VBcHBMYXVuY2ggY2FwYWJpbGl0eSB0byB0cnVlIGlmIHRoZSBhcHAgbXVzdCBiZSBmb3JjZWZ1bGx5IHJlc3RhcnRlZCBvbiBzZXNzaW9uIHN0YXJ0dXAuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uIHx8ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5IHx8ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzIHx8ICcweDEwMjAwMDAwJywgLy8gRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgIHN0b3BBcHA6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCB8fCAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIFVpQXV0b21hdG9yMiBzZXNzaW9uJyk7XG5cbiAgICBjb25zdCBzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MgPSBbYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IHRoaXMubW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuICAgICAgfVxuICAgIH1dO1xuXG4gICAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBpZiAodGhpcy51aWF1dG9tYXRvcjIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gc3RvcCBDaHJvbWVEcml2ZXIgcHJveGllczogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBhd2FpdCBCLmFsbChzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MubWFwKCh0YXNrKSA9PiB7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRhc2soKTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgIH0pKCk7XG4gICAgICB9KSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAnJHt0aGlzLmRlZmF1bHRJTUV9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHRoZSBhZGIgcHJvY2VzcyBvZiBpbnN0cnVtZW50YXRpb24uLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuZW5kQW5kcm9pZENvdmVyYWdlKCk7XG4gICAgICAgIC8vIFVzZSB0aGlzIGJyb2FkY2FzdCBpbnRlbnQgdG8gbm90aWZ5IGl0J3MgdGltZSB0byBkdW1wIGNvdmVyYWdlIHRvIGZpbGVcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBTZW5kaW5nIGludGVudCBicm9hZGNhc3QgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZUVuZEludGVudH0nIGF0IHRoZSBlbmQgb2YgaW5zdHJ1bWVudGluZy5gKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5icm9hZGNhc3QodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb25cbiAgICAgICAgICAgICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0XG4gICAgICAgICAgICAmJiAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmb3JjZSBzdG9wIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYENhcGFiaWxpdHkgJ2Z1bGxSZXNldCcgc2V0IHRvICd0cnVlJywgVW5pbnN0YWxsaW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfSdgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0b3BMb2djYXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZVN5c3RlbVBvcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgc3lzdGVtIHBvcnQgZm9yd2FyZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBJZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZU1qcGVnU2VydmVyUG9ydCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0Ms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