obsidian-integration-testing 14.0.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +2 -0
  2. package/dist/lib/cjs/appium-dependencies.cjs +2 -5
  3. package/dist/lib/cjs/appium-server-marker.cjs +3 -9
  4. package/dist/lib/cjs/asar-fallback-detection.cjs +2 -5
  5. package/dist/lib/cjs/avd-probe-verdict.cjs +3 -9
  6. package/dist/lib/cjs/capture-obsidian-screenshot.cjs +9 -1
  7. package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +21 -0
  8. package/dist/lib/cjs/capture-screenshot.cjs +2 -5
  9. package/dist/lib/cjs/cli.cjs +2 -5
  10. package/dist/lib/cjs/demo-vault-populate.cjs +7 -9
  11. package/dist/lib/cjs/device-setting-restore.cjs +2 -5
  12. package/dist/lib/cjs/electron-compatibility.cjs +8 -11
  13. package/dist/lib/cjs/emulator-arguments.cjs +14 -14
  14. package/dist/lib/cjs/emulator-marker.cjs +4 -13
  15. package/dist/lib/cjs/emulator-reaper.cjs +2 -5
  16. package/dist/lib/cjs/emulator-snapshot.cjs +3 -9
  17. package/dist/lib/cjs/eval-cap-exceeded-error.cjs +2 -5
  18. package/dist/lib/cjs/exec.cjs +12 -24
  19. package/dist/lib/cjs/function-expression.cjs +2 -5
  20. package/dist/lib/cjs/global-setup-core.cjs +53 -18
  21. package/dist/lib/cjs/hide-vault-name.cjs +45 -0
  22. package/dist/lib/cjs/hide-vault-name.d.cts +67 -0
  23. package/dist/lib/cjs/index.cjs +9 -1
  24. package/dist/lib/cjs/index.d.cts +6 -2
  25. package/dist/lib/cjs/installer-asset.cjs +3 -9
  26. package/dist/lib/cjs/installer-compatibility.cjs +9 -12
  27. package/dist/lib/cjs/label-screenshot.cjs +63 -4
  28. package/dist/lib/cjs/label-screenshot.d.cts +66 -2
  29. package/dist/lib/cjs/leftover-cleanup.cjs +2 -5
  30. package/dist/lib/cjs/library.cjs +1 -1
  31. package/dist/lib/cjs/mobile-input.cjs +17 -31
  32. package/dist/lib/cjs/namespace-bootstrap.cjs +3 -9
  33. package/dist/lib/cjs/obsidian-executable.cjs +2 -5
  34. package/dist/lib/cjs/obsidian-installer.cjs +3 -9
  35. package/dist/lib/cjs/obsidian-instance.cjs +1 -1
  36. package/dist/lib/cjs/obsidian-instance.d.cts +8 -0
  37. package/dist/lib/cjs/owned-instance-exit-marker.cjs +2 -5
  38. package/dist/lib/cjs/owned-instance-exited-error.cjs +13 -17
  39. package/dist/lib/cjs/process-exit-message.cjs +3 -9
  40. package/dist/lib/cjs/renderer-boot-detection.cjs +3 -9
  41. package/dist/lib/cjs/setup-lock.cjs +3 -9
  42. package/dist/lib/cjs/sharp-loader.cjs +1 -1
  43. package/dist/lib/cjs/sharp-loader.d.cts +11 -0
  44. package/dist/lib/cjs/soft-keyboard-geometry.cjs +4 -9
  45. package/dist/lib/cjs/stale-build-detection.cjs +115 -0
  46. package/dist/lib/cjs/stale-build-detection.d.cts +108 -0
  47. package/dist/lib/cjs/stale-build-error.cjs +74 -0
  48. package/dist/lib/cjs/stale-build-error.d.cts +81 -0
  49. package/dist/lib/cjs/strict-proxy.cjs +3 -9
  50. package/dist/lib/cjs/transport-appium.cjs +3 -9
  51. package/dist/lib/cjs/transport-desktop-cdp.cjs +18 -32
  52. package/dist/lib/cjs/transport-factory.cjs +20 -25
  53. package/dist/lib/cjs/transport-options.cjs +2 -5
  54. package/dist/lib/cjs/transport-options.d.cts +36 -0
  55. package/dist/lib/cjs/vault-teardown-verdict.cjs +2 -5
  56. package/dist/lib/cjs/version-matrix.cjs +4 -13
  57. package/dist/lib/cjs/wedged-appium-server.cjs +3 -9
  58. package/dist/lib/esm/appium-dependencies.mjs +2 -5
  59. package/dist/lib/esm/appium-server-marker.mjs +3 -9
  60. package/dist/lib/esm/asar-fallback-detection.mjs +2 -5
  61. package/dist/lib/esm/avd-probe-verdict.mjs +3 -9
  62. package/dist/lib/esm/capture-obsidian-screenshot.d.mts +21 -0
  63. package/dist/lib/esm/capture-obsidian-screenshot.mjs +9 -1
  64. package/dist/lib/esm/capture-screenshot.mjs +2 -5
  65. package/dist/lib/esm/cli.mjs +2 -5
  66. package/dist/lib/esm/demo-vault-populate.mjs +7 -9
  67. package/dist/lib/esm/device-setting-restore.mjs +2 -5
  68. package/dist/lib/esm/electron-compatibility.mjs +8 -11
  69. package/dist/lib/esm/emulator-arguments.mjs +14 -14
  70. package/dist/lib/esm/emulator-marker.mjs +4 -13
  71. package/dist/lib/esm/emulator-reaper.mjs +2 -5
  72. package/dist/lib/esm/emulator-snapshot.mjs +3 -9
  73. package/dist/lib/esm/eval-cap-exceeded-error.mjs +2 -5
  74. package/dist/lib/esm/exec.mjs +12 -24
  75. package/dist/lib/esm/function-expression.mjs +2 -5
  76. package/dist/lib/esm/global-setup-core.mjs +60 -19
  77. package/dist/lib/esm/hide-vault-name.d.mts +67 -0
  78. package/dist/lib/esm/hide-vault-name.mjs +21 -0
  79. package/dist/lib/esm/index.d.mts +6 -2
  80. package/dist/lib/esm/index.mjs +8 -2
  81. package/dist/lib/esm/installer-asset.mjs +3 -9
  82. package/dist/lib/esm/installer-compatibility.mjs +9 -12
  83. package/dist/lib/esm/label-screenshot.d.mts +66 -2
  84. package/dist/lib/esm/label-screenshot.mjs +61 -3
  85. package/dist/lib/esm/leftover-cleanup.mjs +2 -5
  86. package/dist/lib/esm/library.mjs +1 -1
  87. package/dist/lib/esm/mobile-input.mjs +17 -31
  88. package/dist/lib/esm/namespace-bootstrap.mjs +3 -9
  89. package/dist/lib/esm/obsidian-executable.mjs +2 -5
  90. package/dist/lib/esm/obsidian-installer.mjs +3 -9
  91. package/dist/lib/esm/obsidian-instance.d.mts +8 -0
  92. package/dist/lib/esm/obsidian-instance.mjs +1 -1
  93. package/dist/lib/esm/owned-instance-exit-marker.mjs +2 -5
  94. package/dist/lib/esm/owned-instance-exited-error.mjs +13 -17
  95. package/dist/lib/esm/process-exit-message.mjs +3 -9
  96. package/dist/lib/esm/renderer-boot-detection.mjs +3 -9
  97. package/dist/lib/esm/setup-lock.mjs +3 -9
  98. package/dist/lib/esm/sharp-loader.d.mts +11 -0
  99. package/dist/lib/esm/sharp-loader.mjs +1 -1
  100. package/dist/lib/esm/soft-keyboard-geometry.mjs +4 -9
  101. package/dist/lib/esm/stale-build-detection.d.mts +108 -0
  102. package/dist/lib/esm/stale-build-detection.mjs +84 -0
  103. package/dist/lib/esm/stale-build-error.d.mts +81 -0
  104. package/dist/lib/esm/stale-build-error.mjs +50 -0
  105. package/dist/lib/esm/strict-proxy.mjs +3 -9
  106. package/dist/lib/esm/transport-appium.mjs +3 -9
  107. package/dist/lib/esm/transport-desktop-cdp.mjs +18 -32
  108. package/dist/lib/esm/transport-factory.mjs +20 -25
  109. package/dist/lib/esm/transport-options.d.mts +36 -0
  110. package/dist/lib/esm/transport-options.mjs +2 -5
  111. package/dist/lib/esm/vault-teardown-verdict.mjs +2 -5
  112. package/dist/lib/esm/version-matrix.mjs +4 -13
  113. package/dist/lib/esm/wedged-appium-server.mjs +3 -9
  114. package/package.json +20 -19
@@ -63,10 +63,7 @@ function resolveMissingInjectedPlugins(params) {
63
63
  });
64
64
  }
65
65
  function buildMissingPluginRemedy(demoVaultPath, plugin) {
66
- if (plugin.sourceDirectory !== void 0) {
67
- return "It was read from an explicit `sourceDirectory`, which opts it out of the headless bootstrap \u2014 build it into that directory, or drop `sourceDirectory` to install it from its published release.";
68
- }
69
- return `Install it headlessly with \`npx obsidian-integration-testing bootstrap-demo-vault --demo-vault "${demoVaultPath}"\`, or switch this setup to \`buildDemoVaultPopulateAsync\`, which installs missing plugins itself. Opening demo-vault/ in Obsidian once so demo-vault-helper installs it also works.`;
66
+ return plugin.sourceDirectory === void 0 ? `Install it headlessly with \`npx obsidian-integration-testing bootstrap-demo-vault --demo-vault "${demoVaultPath}"\`, or switch this setup to \`buildDemoVaultPopulateAsync\`, which installs missing plugins itself. Opening demo-vault/ in Obsidian once so demo-vault-helper installs it also works.` : "It was read from an explicit `sourceDirectory`, which opts it out of the headless bootstrap \u2014 build it into that directory, or drop `sourceDirectory` to install it from its published release.";
70
67
  }
71
68
  function readPluginFileNames(sourceDirectory) {
72
69
  return (0, import_node_fs.existsSync)(sourceDirectory) ? (0, import_node_fs.readdirSync)(sourceDirectory, { withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => entry.name) : [];
@@ -90,11 +87,12 @@ function seedPlugin(demoVaultPath, plugin, map) {
90
87
  }
91
88
  map[`${pluginPrefix}/${fileName}`] = (0, import_node_fs.readFileSync)((0, import_node_path.join)(sourceDirectory, fileName));
92
89
  }
93
- if (data !== void 0) {
94
- const dataJson = (0, import_type_guards.ensureNonNullable)(JSON.stringify(data, null, DATA_JSON_INDENT));
95
- map[`${pluginPrefix}/${DATA_JSON}`] = `${dataJson}
96
- `;
90
+ if (data === void 0) {
91
+ return;
97
92
  }
93
+ const dataJson = (0, import_type_guards.ensureNonNullable)(JSON.stringify(data, null, DATA_JSON_INDENT));
94
+ map[`${pluginPrefix}/${DATA_JSON}`] = `${dataJson}
95
+ `;
98
96
  }
99
97
  // Annotate the CommonJS export names for ESM import in node:
100
98
  0 && (module.exports = {
@@ -102,4 +100,4 @@ function seedPlugin(demoVaultPath, plugin, map) {
102
100
  resolveInjectedPluginSourceDirectory,
103
101
  resolveMissingInjectedPlugins
104
102
  });
105
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtcG9wdWxhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgYSBjb21wbGV0ZSB7QGxpbmsgUG9wdWxhdGVGaWxlc1BhcmFtc30gbWFwIGZvciBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCwgcmVhZHkgdG8gc2VlZCBpbnRvXG4gKiB0aGUgdGVtcCB2YXVsdCBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQuIENvbXBvc2VzIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gKHRoZSBub3RlIHRyZWUpIHdpdGggdGhlIHR3b1xuICogcGllY2VzIGl0IGRlbGliZXJhdGVseSBvbWl0czogc2VsZWN0ZWQgYC5vYnNpZGlhbi8qYCBjb25maWcgZmlsZXMsIGFuZCB0aGUgYnVpbHQgYmluYXJpZXMgKCsgYGRhdGEuanNvbmApXG4gKiBvZiBhbnkgZXh0cmEgY29tbXVuaXR5IHBsdWdpbnMgdGhlIGRlbW8gdmF1bHQgZGVwZW5kcyBvbiAoZS5nLiBDb2RlU2NyaXB0IFRvb2xraXQsIGBkZW1vLXZhdWx0LWhlbHBlcmApLlxuICpcbiAqIFBhaXJzIHdpdGggdGhlIGBlbmFibGVDb21tdW5pdHlQbHVnaW5zYCBvcHRpb24gb2YgdGhlIGdsb2JhbC1zZXR1cCBgY3JlYXRlU2V0dXBgOiB0aGlzIHNlZWRzIHRoZSBiaW5hcmllcyxcbiAqIHRoYXQgdHVybnMgdGhlbSBvbi4gSXQgaW50ZW50aW9uYWxseSBkb2VzIE5PVCB3cml0ZSBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgXHUyMDE0IHRoZSBoYXJuZXNzIG93bnMgdGhhdCBmaWxlXG4gKiAoaXQgbGlzdHMgdGhlIHBsdWdpbi11bmRlci10ZXN0KSwgYW5kIGVuYWJsaW5nIHRoZSBleHRyYXMgcGVyc2lzdHMgdGhlbS5cbiAqXG4gKiBTdGF5cyAqKnN5bmNocm9ub3VzKiosIHNvIGFuIGluamVjdGVkIHBsdWdpbiB3aG9zZSBiaW5hcmllcyBhcmUgYWJzZW50IGlzIGEgdGhyb3cgcmF0aGVyIHRoYW4gYSBkb3dubG9hZC5cbiAqIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2Agb3ducyB0aGUgaGVhZGxlc3MgaW5zdGFsbCB0aGUgdGhyb3cncyBtZXNzYWdlIHBvaW50cyBhdCBcdTIwMTQgaW5jbHVkaW5nXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jYCwgdGhlIHNlbGYtaGVhbGluZyBzaWJsaW5nIG9mIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS4gVGhlXG4gKiBtaXNzaW5nLXBsdWdpbiBkZXRlY3Rpb24gKHtAbGluayByZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc30pIGxpdmVzIGhlcmUgYW5kIGlzIHNoYXJlZCB3aXRoIGl0LCBzbyB0aGVcbiAqIHR3byBwYXRocyBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgd2hhdCBcIm5vdCBpbnN0YWxsZWRcIiBtZWFucy5cbiAqL1xuXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgUG9wdWxhdGVGaWxlc1BhcmFtcyB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5cbmltcG9ydCB7IFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LmNqcyc7XG5pbXBvcnQgeyByZWFkRGVtb1ZhdWx0VHJlZSB9IGZyb20gJy4vZGVtby12YXVsdC10cmVlLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLypcbiAqIEJvdGggdGhlIGZvbGRlciB0aGUgZGVtbyB2YXVsdCdzIG93biBjb21taXR0ZWQgY29uZmlnIHNpdHMgaW4gb24gZGlzaywgYW5kIHRoZSBkZXN0aW5hdGlvbiB0aGUgbWFwXG4gKiBuYW1lcyBmb3IgaXQuIFRoZSB0d28gY29pbmNpZGUgYnkgY29uc3RydWN0aW9uOiB0aGUgc291cmNlIGlzIGEgcmVwbyBmb2xkZXIgT2JzaWRpYW4gY3JlYXRlZCB1bmRlciBpdHNcbiAqIGRlZmF1bHQsIGFuZCBhIGBjb25maWdEaXJlY3RvcnlgIG92ZXJyaWRlIG9uIHRoZSBydW4gaXMgYXBwbGllZCB0byB0aGUgZGVzdGluYXRpb24ga2V5cyBsYXRlciwgYnlcbiAqIGByZW1hcENvbmZpZ0RpcmVjdG9yeUtleXNgIGluIGBnbG9iYWwtc2V0dXAtY29yZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBvdmVycmlkZSBpcyBhY3R1YWxseSBrbm93bi5cbiAqL1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9IERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWTtcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgREFUQV9KU09OID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuY29uc3QgREVGQVVMVF9PQlNJRElBTl9DT05GSUdfRklMRVMgPSBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzIChvZiBmaWxlcyBvciBkaXJlY3RvcmllcywgbWF0Y2hlZCBhdCBhbnkgZGVwdGgpIHRvIHNraXAgd2hpbGUgcmVhZGluZyB0aGUgbm90ZSB0cmVlIFx1MjAxNCBmb3J3YXJkZWQgdG9cbiAgICoge0BsaW5rIHJlYWREZW1vVmF1bHRUcmVlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsnLmdpdCcsICcub2JzaWRpYW4nXWBcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiBJdGVyYWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyB0byBzZWVkIGludG8gYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYCAoYmluYXJpZXMgKyBvcHRpb25hbCBgZGF0YS5qc29uYCkuIFR1cm5cbiAgICogdGhlbSBvbiB3aXRoIHRoZSBnbG9iYWwtc2V0dXAgYGNyZWF0ZVNldHVwKHsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lucyB9KWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0UGx1Z2lucz86IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xuXG4gIC8qKlxuICAgKiBgLm9ic2lkaWFuLypgIGNvbmZpZyBmaWxlcyB0byBjYXJyeSBvdmVyIGZyb20gdGhlIGRlbW8gdmF1bHQuIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gZXhjbHVkZXMgdGhlIHdob2xlXG4gICAqIGAub2JzaWRpYW5gIGRpcmVjdG9yeSwgc28gY29uZmlnIHRoZSB2YXVsdCByZWxpZXMgb24gKHByZXZpZXctbW9kZSBkZWZhdWx0LCBjb3JlIHBsdWdpbnMsIGFwcGVhcmFuY2UpIG11c3RcbiAgICogYmUgcmUtYWRkZWQgZXhwbGljaXRseS4gRmlsZXMgdGhhdCBkbyBub3QgZXhpc3QgYXJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGaWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29tbXVuaXR5IHBsdWdpbiB0byBzZWVkIGludG8gdGhlIGRlbW8gdmF1bHQgYWxvbmdzaWRlIHRoZSBub3RlIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0UGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIE92ZXJsYXkgd3JpdHRlbiBhcyBgLm9ic2lkaWFuL3BsdWdpbnMvPHBsdWdpbklkPi9kYXRhLmpzb25gIChKU09OLCAyLXNwYWNlIGluZGVudCkuIE9taXQgdG8ga2VlcCB3aGF0ZXZlclxuICAgKiBgZGF0YS5qc29uYCAoaWYgYW55KSBhbHJlYWR5IGxpdmVzIGluIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbXVuaXR5IHBsdWdpbidzIGlkIChpdHMgYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD5gIGZvbGRlciBuYW1lKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSAoYG93bmVyL25hbWVgKSBwdWJsaXNoaW5nIHRoaXMgcGx1Z2luLCBjb25zdWx0ZWQgKipvbmx5KiogYnkgdGhlIGhlYWRsZXNzXG4gICAqIGJvb3RzdHJhcCAoYGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNgIC8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AgLyB0aGVcbiAgICogYGJvb3RzdHJhcC1kZW1vLXZhdWx0YCBDTEkpIHdoZW4gdGhlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQuIFN1cHBseWluZyBpdCBza2lwc1xuICAgKiB0aGUgbG9va3VwIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgd2hpY2ggaXMgYWxzbyB0aGUgd2F5IHRvIGJvb3RzdHJhcCBhIHBsdWdpblxuICAgKiB0aGF0IGlzIG5vdCBsaXN0ZWQgdGhlcmUgYXQgYWxsLiBOZXZlciB1c2VkIHdoZW4gdGhlIGZpbGVzIGFyZSBhbHJlYWR5IG9uIGRpc2suXG4gICAqL1xuICByZWFkb25seSByZXBvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdG8gcmVhZCB0aGUgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgZnJvbS4gRXZlcnkgZmlsZSBkaXJlY3RseSBpbnNpZGUgaXQgaXMgY29waWVkIGludG9cbiAgICogYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYDsgYG1haW4uanNgIGFuZCBgbWFuaWZlc3QuanNvbmAgYXJlIHJlcXVpcmVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgYWxzbyBvcHRzIHRoZSBwbHVnaW4gKipvdXQqKiBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwOiBhbiBleHBsaWNpdCBzb3VyY2UgZGlyZWN0b3J5XG4gICAqIG5hbWVzIGEgbG9jYWwgYnVpbGQgb3V0cHV0LCBub3Qgc29tZXdoZXJlIHRvIGRvd25sb2FkIGEgcHVibGlzaGVkIHJlbGVhc2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYDxkZW1vVmF1bHRQYXRoPi8ub2JzaWRpYW4vcGx1Z2lucy88cGx1Z2luSWQ+YFxuICAgKi9cblxuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZyB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIGRvd25sb2FkcyBmcm9tLCBwaW5uaW5nIHRoZSBpbnN0YWxsZWQgdmVyc2lvbi4gT21pdCBmb3IgdGhlXG4gICAqIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSBcdTIwMTQgd2hhdCB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzLiBMaWtlXG4gICAqIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30sIGNvbnN1bHRlZCBvbmx5IHdoaWxlIGJvb3RzdHJhcHBpbmcgbWlzc2luZyBiaW5hcmllcy5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBpbmplY3RlZCBwbHVnaW4gd2hvc2Ugc291cmNlIGRpcmVjdG9yeSB0byByZXNvbHZlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gcmVwbydzIGBkZW1vLXZhdWx0L2AgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVtb1ZhdWx0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgaW5qZWN0ZWQgcGx1Z2lucyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IGluamVjdFBsdWdpbnM6IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZnVsbCBwb3B1bGF0ZSBtYXAgZm9yIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQvYDogdGhlIG5vdGUgdHJlZSwgdGhlIHNlbGVjdGVkIGAub2JzaWRpYW4vKmAgY29uZmlnXG4gKiBmaWxlcywgYW5kIGV2ZXJ5IGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzICgrIG9wdGlvbmFsIGBkYXRhLmpzb25gKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwb3B1bGF0ZSBtYXAsIHJlYWR5IHRvIGhhbmQgdG8gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIG9yIHtAbGluayBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFBvcHVsYXRlRmlsZXNQYXJhbXMge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMsIGluamVjdFBsdWdpbnMgPSBbXSwgb2JzaWRpYW5Db25maWdGaWxlcyA9IERFRkFVTFRfT0JTSURJQU5fQ09ORklHX0ZJTEVTIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbWFwID0gcmVhZERlbW9WYXVsdFRyZWUoZXhjbHVkZWROYW1lcyA9PT0gdW5kZWZpbmVkID8geyBkZW1vVmF1bHRQYXRoIH0gOiB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMgfSk7XG5cbiAgZm9yIChjb25zdCBjb25maWdGaWxlIG9mIG9ic2lkaWFuQ29uZmlnRmlsZXMpIHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBjb25maWdGaWxlKTtcbiAgICBpZiAoZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgbWFwW2Ake09CU0lESUFOX0NPTkZJR19ESVJ9LyR7Y29uZmlnRmlsZX1gXSA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBpbmplY3RQbHVnaW5zKSB7XG4gICAgc2VlZFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4sIG1hcCk7XG4gIH1cblxuICByZXR1cm4gbWFwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXJlY3RvcnkgYW4gaW5qZWN0ZWQgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgYXJlIHJlYWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGV4cGxpY2l0IHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fSB3aGVuIHNldCwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4ncyBmb2xkZXJcbiAqICAgaW5zaWRlIHRoZSBkZW1vIHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5KHBhcmFtczogUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPz8gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBQTFVHSU5TX0RJUiwgcGx1Z2luLnBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBpbmplY3RlZCBwbHVnaW5zIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQgYW5kIGNhbiB0aGVyZWZvcmUgYmVcbiAqIGluc3RhbGxlZCBoZWFkbGVzc2x5IFx1MjAxNCB0aGUgZXhhY3Qgc2V0IHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfSB3b3VsZCBvdGhlcndpc2UgdGhyb3cgb24uXG4gKlxuICogUGx1Z2lucyBjYXJyeWluZyBhbiBleHBsaWNpdCB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnNvdXJjZURpcmVjdG9yeX0gYXJlIGV4Y2x1ZGVkOiB0aGF0IG5hbWVzIGEgbG9jYWxcbiAqIGJ1aWxkIG91dHB1dCwgbm90IHNvbWV3aGVyZSB0byBkb3dubG9hZCBhIHB1Ymxpc2hlZCByZWxlYXNlIGludG8uXG4gKlxuICogU2hhcmVkIHdpdGggdGhlIGJvb3RzdHJhcCBzbyBcIm1pc3NpbmdcIiBoYXMgb25lIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdHdvIHRoYXQgY2FuIGRyaWZ0IGFwYXJ0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW5zIHRvIGJvb3RzdHJhcCwgaW4gdGhlIG9yZGVyIGdpdmVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMocGFyYW1zOiBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyk6IEluamVjdFBsdWdpblBhcmFtc1tdIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIHJldHVybiBwYXJhbXMuaW5qZWN0UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4ge1xuICAgIGlmIChwbHVnaW4uc291cmNlRGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWVzID0gcmVhZFBsdWdpbkZpbGVOYW1lcyhyZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSkpO1xuICAgIHJldHVybiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMuc29tZSgoYXNzZXROYW1lKSA9PiAhZmlsZU5hbWVzLmluY2x1ZGVzKGFzc2V0TmFtZSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFwiaG93IHRvIGZpeCB0aGlzXCIgaGFsZiBvZiB0aGUgbWlzc2luZy1iaW5hcmllcyBlcnJvci5cbiAqXG4gKiBUaGUgcmVtZWR5IGRpZmZlcnMgYnkgb3B0LW91dDogYSBwbHVnaW4gcmVhZCBmcm9tIHRoZSBkZW1vIHZhdWx0IGNhbiBiZSBpbnN0YWxsZWQgaGVhZGxlc3NseSwgd2hpbGUgb25lXG4gKiByZWFkIGZyb20gYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAgbmFtZXMgYSBsb2NhbCBidWlsZCBvdXRwdXQgdGhlIGJvb3RzdHJhcCBtdXN0IG5ldmVyIG92ZXJ3cml0ZS5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIG5hbWVkIGluIHRoZSBDTEkgaGludCBzbyB0aGUgY29tbWFuZCBpcyBjb3B5LXBhc3RlYWJsZS5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nLlxuICogQHJldHVybnMgVGhlIHJlbWVkeSBzZW50ZW5jZShzKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNaXNzaW5nUGx1Z2luUmVtZWR5KGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBzdHJpbmcge1xuICBpZiAocGx1Z2luLnNvdXJjZURpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdJdCB3YXMgcmVhZCBmcm9tIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLCB3aGljaCBvcHRzIGl0IG91dCBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIFx1MjAxNCAnXG4gICAgICArICdidWlsZCBpdCBpbnRvIHRoYXQgZGlyZWN0b3J5LCBvciBkcm9wIGBzb3VyY2VEaXJlY3RvcnlgIHRvIGluc3RhbGwgaXQgZnJvbSBpdHMgcHVibGlzaGVkIHJlbGVhc2UuJztcbiAgfVxuXG4gIHJldHVybiBgSW5zdGFsbCBpdCBoZWFkbGVzc2x5IHdpdGggXFxgbnB4IG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcgYm9vdHN0cmFwLWRlbW8tdmF1bHQgLS1kZW1vLXZhdWx0IFwiJHtkZW1vVmF1bHRQYXRofVwiXFxgLCBgXG4gICAgKyAnb3Igc3dpdGNoIHRoaXMgc2V0dXAgdG8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AsIHdoaWNoIGluc3RhbGxzIG1pc3NpbmcgcGx1Z2lucyBpdHNlbGYuICdcbiAgICArICdPcGVuaW5nIGRlbW8tdmF1bHQvIGluIE9ic2lkaWFuIG9uY2Ugc28gZGVtby12YXVsdC1oZWxwZXIgaW5zdGFsbHMgaXQgYWxzbyB3b3Jrcy4nO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBmaWxlIG5hbWVzIGRpcmVjdGx5IGluc2lkZSBhIHBsdWdpbidzIHNvdXJjZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBkaXJlY3RvcnkgdG8gbGlzdC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIG5hbWVzLCBvciBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBleGlzdHNTeW5jKHNvdXJjZURpcmVjdG9yeSlcbiAgICA/IHJlYWRkaXJTeW5jKHNvdXJjZURpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKVxuICAgIDogW107XG59XG5cbi8qKlxuICogU2VlZHMgb25lIGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzIChhbmQgb3B0aW9uYWwgYGRhdGEuanNvbmApIGludG8gdGhlIHBvcHVsYXRlIG1hcC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVmYXVsdCBzb3VyY2UgZGlyZWN0b3J5LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gc2VlZC5cbiAqIEBwYXJhbSBtYXAgLSBUaGUgcG9wdWxhdGUgbWFwIHRvIHdyaXRlIGludG8uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwbHVnaW4ncyBgbWFpbi5qc2AgLyBgbWFuaWZlc3QuanNvbmAgYXJlIG5vdCBvbiBkaXNrLCBuYW1pbmcgdGhlIGhlYWRsZXNzIHJlbWVkaWVzLlxuICovXG5mdW5jdGlvbiBzZWVkUGx1Z2luKGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMsIG1hcDogUG9wdWxhdGVGaWxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGRhdGEsIHBsdWdpbklkIH0gPSBwbHVnaW47XG4gIGNvbnN0IHNvdXJjZURpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcbiAgY29uc3QgcGx1Z2luUHJlZml4ID0gYCR7T0JTSURJQU5fQ09ORklHX0RJUn0vJHtQTFVHSU5TX0RJUn0vJHtwbHVnaW5JZH1gO1xuXG4gIGNvbnN0IGZpbGVOYW1lcyA9IHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5KTtcblxuICBmb3IgKGNvbnN0IHJlcXVpcmVkRmlsZSBvZiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMpIHtcbiAgICBpZiAoIWZpbGVOYW1lcy5pbmNsdWRlcyhyZXF1aXJlZEZpbGUpKSB7XG4gICAgICBjb25zdCByZW1lZHkgPSBidWlsZE1pc3NpbmdQbHVnaW5SZW1lZHkoZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIG5vdCBpbnN0YWxsZWQgaW4gdGhlIGRlbW8gdmF1bHQgKCR7am9pbihzb3VyY2VEaXJlY3RvcnksIHJlcXVpcmVkRmlsZSl9IG1pc3NpbmcpLiAke3JlbWVkeX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgLy8gYGRhdGEuanNvbmAgaXMgcmVnZW5lcmF0ZWQgZnJvbSBgZGF0YWAgYmVsb3cgKHdoZW4gcHJvdmlkZWQpOyBza2lwIHRoZSBvbi1kaXNrIGNvcHkgdG8gYXZvaWQgc2VlZGluZyBpdCB0d2ljZS5cbiAgICBpZiAoZmlsZU5hbWUgPT09IERBVEFfSlNPTiAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXBbYCR7cGx1Z2luUHJlZml4fS8ke2ZpbGVOYW1lfWBdID0gcmVhZEZpbGVTeW5jKGpvaW4oc291cmNlRGlyZWN0b3J5LCBmaWxlTmFtZSkpO1xuICB9XG5cbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGRhdGFKc29uOiBzdHJpbmcgPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gICAgbWFwW2Ake3BsdWdpblByZWZpeH0vJHtEQVRBX0pTT059YF0gPSBgJHtkYXRhSnNvbn1cXG5gO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFJTztBQUNQLHVCQUFxQjtBQUlyQix1Q0FBNEM7QUFDNUMsOEJBQXlDO0FBQ3pDLDZCQUFrQztBQUNsQyx5QkFBa0M7QUFRbEMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxjQUFjO0FBQ3BCLE1BQU0s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
103
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtcG9wdWxhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgYSBjb21wbGV0ZSB7QGxpbmsgUG9wdWxhdGVGaWxlc1BhcmFtc30gbWFwIGZvciBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCwgcmVhZHkgdG8gc2VlZCBpbnRvXG4gKiB0aGUgdGVtcCB2YXVsdCBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQuIENvbXBvc2VzIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gKHRoZSBub3RlIHRyZWUpIHdpdGggdGhlIHR3b1xuICogcGllY2VzIGl0IGRlbGliZXJhdGVseSBvbWl0czogc2VsZWN0ZWQgYC5vYnNpZGlhbi8qYCBjb25maWcgZmlsZXMsIGFuZCB0aGUgYnVpbHQgYmluYXJpZXMgKCsgYGRhdGEuanNvbmApXG4gKiBvZiBhbnkgZXh0cmEgY29tbXVuaXR5IHBsdWdpbnMgdGhlIGRlbW8gdmF1bHQgZGVwZW5kcyBvbiAoZS5nLiBDb2RlU2NyaXB0IFRvb2xraXQsIGBkZW1vLXZhdWx0LWhlbHBlcmApLlxuICpcbiAqIFBhaXJzIHdpdGggdGhlIGBlbmFibGVDb21tdW5pdHlQbHVnaW5zYCBvcHRpb24gb2YgdGhlIGdsb2JhbC1zZXR1cCBgY3JlYXRlU2V0dXBgOiB0aGlzIHNlZWRzIHRoZSBiaW5hcmllcyxcbiAqIHRoYXQgdHVybnMgdGhlbSBvbi4gSXQgaW50ZW50aW9uYWxseSBkb2VzIE5PVCB3cml0ZSBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgXHUyMDE0IHRoZSBoYXJuZXNzIG93bnMgdGhhdCBmaWxlXG4gKiAoaXQgbGlzdHMgdGhlIHBsdWdpbi11bmRlci10ZXN0KSwgYW5kIGVuYWJsaW5nIHRoZSBleHRyYXMgcGVyc2lzdHMgdGhlbS5cbiAqXG4gKiBTdGF5cyAqKnN5bmNocm9ub3VzKiosIHNvIGFuIGluamVjdGVkIHBsdWdpbiB3aG9zZSBiaW5hcmllcyBhcmUgYWJzZW50IGlzIGEgdGhyb3cgcmF0aGVyIHRoYW4gYSBkb3dubG9hZC5cbiAqIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2Agb3ducyB0aGUgaGVhZGxlc3MgaW5zdGFsbCB0aGUgdGhyb3cncyBtZXNzYWdlIHBvaW50cyBhdCBcdTIwMTQgaW5jbHVkaW5nXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jYCwgdGhlIHNlbGYtaGVhbGluZyBzaWJsaW5nIG9mIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS4gVGhlXG4gKiBtaXNzaW5nLXBsdWdpbiBkZXRlY3Rpb24gKHtAbGluayByZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc30pIGxpdmVzIGhlcmUgYW5kIGlzIHNoYXJlZCB3aXRoIGl0LCBzbyB0aGVcbiAqIHR3byBwYXRocyBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgd2hhdCBcIm5vdCBpbnN0YWxsZWRcIiBtZWFucy5cbiAqL1xuXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgUG9wdWxhdGVGaWxlc1BhcmFtcyB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5cbmltcG9ydCB7IFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LmNqcyc7XG5pbXBvcnQgeyByZWFkRGVtb1ZhdWx0VHJlZSB9IGZyb20gJy4vZGVtby12YXVsdC10cmVlLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLypcbiAqIEJvdGggdGhlIGZvbGRlciB0aGUgZGVtbyB2YXVsdCdzIG93biBjb21taXR0ZWQgY29uZmlnIHNpdHMgaW4gb24gZGlzaywgYW5kIHRoZSBkZXN0aW5hdGlvbiB0aGUgbWFwXG4gKiBuYW1lcyBmb3IgaXQuIFRoZSB0d28gY29pbmNpZGUgYnkgY29uc3RydWN0aW9uOiB0aGUgc291cmNlIGlzIGEgcmVwbyBmb2xkZXIgT2JzaWRpYW4gY3JlYXRlZCB1bmRlciBpdHNcbiAqIGRlZmF1bHQsIGFuZCBhIGBjb25maWdEaXJlY3RvcnlgIG92ZXJyaWRlIG9uIHRoZSBydW4gaXMgYXBwbGllZCB0byB0aGUgZGVzdGluYXRpb24ga2V5cyBsYXRlciwgYnlcbiAqIGByZW1hcENvbmZpZ0RpcmVjdG9yeUtleXNgIGluIGBnbG9iYWwtc2V0dXAtY29yZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBvdmVycmlkZSBpcyBhY3R1YWxseSBrbm93bi5cbiAqL1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9IERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWTtcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgREFUQV9KU09OID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuY29uc3QgREVGQVVMVF9PQlNJRElBTl9DT05GSUdfRklMRVMgPSBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzIChvZiBmaWxlcyBvciBkaXJlY3RvcmllcywgbWF0Y2hlZCBhdCBhbnkgZGVwdGgpIHRvIHNraXAgd2hpbGUgcmVhZGluZyB0aGUgbm90ZSB0cmVlIFx1MjAxNCBmb3J3YXJkZWQgdG9cbiAgICoge0BsaW5rIHJlYWREZW1vVmF1bHRUcmVlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsnLmdpdCcsICcub2JzaWRpYW4nXWBcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiBJdGVyYWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyB0byBzZWVkIGludG8gYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYCAoYmluYXJpZXMgKyBvcHRpb25hbCBgZGF0YS5qc29uYCkuIFR1cm5cbiAgICogdGhlbSBvbiB3aXRoIHRoZSBnbG9iYWwtc2V0dXAgYGNyZWF0ZVNldHVwKHsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lucyB9KWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0UGx1Z2lucz86IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xuXG4gIC8qKlxuICAgKiBgLm9ic2lkaWFuLypgIGNvbmZpZyBmaWxlcyB0byBjYXJyeSBvdmVyIGZyb20gdGhlIGRlbW8gdmF1bHQuIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gZXhjbHVkZXMgdGhlIHdob2xlXG4gICAqIGAub2JzaWRpYW5gIGRpcmVjdG9yeSwgc28gY29uZmlnIHRoZSB2YXVsdCByZWxpZXMgb24gKHByZXZpZXctbW9kZSBkZWZhdWx0LCBjb3JlIHBsdWdpbnMsIGFwcGVhcmFuY2UpIG11c3RcbiAgICogYmUgcmUtYWRkZWQgZXhwbGljaXRseS4gRmlsZXMgdGhhdCBkbyBub3QgZXhpc3QgYXJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGaWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29tbXVuaXR5IHBsdWdpbiB0byBzZWVkIGludG8gdGhlIGRlbW8gdmF1bHQgYWxvbmdzaWRlIHRoZSBub3RlIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0UGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIE92ZXJsYXkgd3JpdHRlbiBhcyBgLm9ic2lkaWFuL3BsdWdpbnMvPHBsdWdpbklkPi9kYXRhLmpzb25gIChKU09OLCAyLXNwYWNlIGluZGVudCkuIE9taXQgdG8ga2VlcCB3aGF0ZXZlclxuICAgKiBgZGF0YS5qc29uYCAoaWYgYW55KSBhbHJlYWR5IGxpdmVzIGluIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbXVuaXR5IHBsdWdpbidzIGlkIChpdHMgYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD5gIGZvbGRlciBuYW1lKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSAoYG93bmVyL25hbWVgKSBwdWJsaXNoaW5nIHRoaXMgcGx1Z2luLCBjb25zdWx0ZWQgKipvbmx5KiogYnkgdGhlIGhlYWRsZXNzXG4gICAqIGJvb3RzdHJhcCAoYGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNgIC8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AgLyB0aGVcbiAgICogYGJvb3RzdHJhcC1kZW1vLXZhdWx0YCBDTEkpIHdoZW4gdGhlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQuIFN1cHBseWluZyBpdCBza2lwc1xuICAgKiB0aGUgbG9va3VwIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgd2hpY2ggaXMgYWxzbyB0aGUgd2F5IHRvIGJvb3RzdHJhcCBhIHBsdWdpblxuICAgKiB0aGF0IGlzIG5vdCBsaXN0ZWQgdGhlcmUgYXQgYWxsLiBOZXZlciB1c2VkIHdoZW4gdGhlIGZpbGVzIGFyZSBhbHJlYWR5IG9uIGRpc2suXG4gICAqL1xuICByZWFkb25seSByZXBvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdG8gcmVhZCB0aGUgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgZnJvbS4gRXZlcnkgZmlsZSBkaXJlY3RseSBpbnNpZGUgaXQgaXMgY29waWVkIGludG9cbiAgICogYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYDsgYG1haW4uanNgIGFuZCBgbWFuaWZlc3QuanNvbmAgYXJlIHJlcXVpcmVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgYWxzbyBvcHRzIHRoZSBwbHVnaW4gKipvdXQqKiBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwOiBhbiBleHBsaWNpdCBzb3VyY2UgZGlyZWN0b3J5XG4gICAqIG5hbWVzIGEgbG9jYWwgYnVpbGQgb3V0cHV0LCBub3Qgc29tZXdoZXJlIHRvIGRvd25sb2FkIGEgcHVibGlzaGVkIHJlbGVhc2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYDxkZW1vVmF1bHRQYXRoPi8ub2JzaWRpYW4vcGx1Z2lucy88cGx1Z2luSWQ+YFxuICAgKi9cblxuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZyB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIGRvd25sb2FkcyBmcm9tLCBwaW5uaW5nIHRoZSBpbnN0YWxsZWQgdmVyc2lvbi4gT21pdCBmb3IgdGhlXG4gICAqIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSBcdTIwMTQgd2hhdCB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzLiBMaWtlXG4gICAqIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30sIGNvbnN1bHRlZCBvbmx5IHdoaWxlIGJvb3RzdHJhcHBpbmcgbWlzc2luZyBiaW5hcmllcy5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBpbmplY3RlZCBwbHVnaW4gd2hvc2Ugc291cmNlIGRpcmVjdG9yeSB0byByZXNvbHZlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gcmVwbydzIGBkZW1vLXZhdWx0L2AgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVtb1ZhdWx0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgaW5qZWN0ZWQgcGx1Z2lucyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IGluamVjdFBsdWdpbnM6IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZnVsbCBwb3B1bGF0ZSBtYXAgZm9yIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQvYDogdGhlIG5vdGUgdHJlZSwgdGhlIHNlbGVjdGVkIGAub2JzaWRpYW4vKmAgY29uZmlnXG4gKiBmaWxlcywgYW5kIGV2ZXJ5IGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzICgrIG9wdGlvbmFsIGBkYXRhLmpzb25gKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwb3B1bGF0ZSBtYXAsIHJlYWR5IHRvIGhhbmQgdG8gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIG9yIHtAbGluayBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFBvcHVsYXRlRmlsZXNQYXJhbXMge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMsIGluamVjdFBsdWdpbnMgPSBbXSwgb2JzaWRpYW5Db25maWdGaWxlcyA9IERFRkFVTFRfT0JTSURJQU5fQ09ORklHX0ZJTEVTIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbWFwID0gcmVhZERlbW9WYXVsdFRyZWUoZXhjbHVkZWROYW1lcyA9PT0gdW5kZWZpbmVkID8geyBkZW1vVmF1bHRQYXRoIH0gOiB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMgfSk7XG5cbiAgZm9yIChjb25zdCBjb25maWdGaWxlIG9mIG9ic2lkaWFuQ29uZmlnRmlsZXMpIHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBjb25maWdGaWxlKTtcbiAgICBpZiAoZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgbWFwW2Ake09CU0lESUFOX0NPTkZJR19ESVJ9LyR7Y29uZmlnRmlsZX1gXSA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBpbmplY3RQbHVnaW5zKSB7XG4gICAgc2VlZFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4sIG1hcCk7XG4gIH1cblxuICByZXR1cm4gbWFwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXJlY3RvcnkgYW4gaW5qZWN0ZWQgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgYXJlIHJlYWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGV4cGxpY2l0IHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fSB3aGVuIHNldCwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4ncyBmb2xkZXJcbiAqICAgaW5zaWRlIHRoZSBkZW1vIHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5KHBhcmFtczogUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPz8gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBQTFVHSU5TX0RJUiwgcGx1Z2luLnBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBpbmplY3RlZCBwbHVnaW5zIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQgYW5kIGNhbiB0aGVyZWZvcmUgYmVcbiAqIGluc3RhbGxlZCBoZWFkbGVzc2x5IFx1MjAxNCB0aGUgZXhhY3Qgc2V0IHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfSB3b3VsZCBvdGhlcndpc2UgdGhyb3cgb24uXG4gKlxuICogUGx1Z2lucyBjYXJyeWluZyBhbiBleHBsaWNpdCB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnNvdXJjZURpcmVjdG9yeX0gYXJlIGV4Y2x1ZGVkOiB0aGF0IG5hbWVzIGEgbG9jYWxcbiAqIGJ1aWxkIG91dHB1dCwgbm90IHNvbWV3aGVyZSB0byBkb3dubG9hZCBhIHB1Ymxpc2hlZCByZWxlYXNlIGludG8uXG4gKlxuICogU2hhcmVkIHdpdGggdGhlIGJvb3RzdHJhcCBzbyBcIm1pc3NpbmdcIiBoYXMgb25lIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdHdvIHRoYXQgY2FuIGRyaWZ0IGFwYXJ0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW5zIHRvIGJvb3RzdHJhcCwgaW4gdGhlIG9yZGVyIGdpdmVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMocGFyYW1zOiBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyk6IEluamVjdFBsdWdpblBhcmFtc1tdIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIHJldHVybiBwYXJhbXMuaW5qZWN0UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4ge1xuICAgIGlmIChwbHVnaW4uc291cmNlRGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWVzID0gcmVhZFBsdWdpbkZpbGVOYW1lcyhyZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSkpO1xuICAgIHJldHVybiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMuc29tZSgoYXNzZXROYW1lKSA9PiAhZmlsZU5hbWVzLmluY2x1ZGVzKGFzc2V0TmFtZSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFwiaG93IHRvIGZpeCB0aGlzXCIgaGFsZiBvZiB0aGUgbWlzc2luZy1iaW5hcmllcyBlcnJvci5cbiAqXG4gKiBUaGUgcmVtZWR5IGRpZmZlcnMgYnkgb3B0LW91dDogYSBwbHVnaW4gcmVhZCBmcm9tIHRoZSBkZW1vIHZhdWx0IGNhbiBiZSBpbnN0YWxsZWQgaGVhZGxlc3NseSwgd2hpbGUgb25lXG4gKiByZWFkIGZyb20gYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAgbmFtZXMgYSBsb2NhbCBidWlsZCBvdXRwdXQgdGhlIGJvb3RzdHJhcCBtdXN0IG5ldmVyIG92ZXJ3cml0ZS5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIG5hbWVkIGluIHRoZSBDTEkgaGludCBzbyB0aGUgY29tbWFuZCBpcyBjb3B5LXBhc3RlYWJsZS5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nLlxuICogQHJldHVybnMgVGhlIHJlbWVkeSBzZW50ZW5jZShzKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNaXNzaW5nUGx1Z2luUmVtZWR5KGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBzdHJpbmcge1xuICByZXR1cm4gcGx1Z2luLnNvdXJjZURpcmVjdG9yeSA9PT0gdW5kZWZpbmVkXG4gICAgPyBgSW5zdGFsbCBpdCBoZWFkbGVzc2x5IHdpdGggXFxgbnB4IG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcgYm9vdHN0cmFwLWRlbW8tdmF1bHQgLS1kZW1vLXZhdWx0IFwiJHtkZW1vVmF1bHRQYXRofVwiXFxgLCBgXG4gICAgICArICdvciBzd2l0Y2ggdGhpcyBzZXR1cCB0byBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jYCwgd2hpY2ggaW5zdGFsbHMgbWlzc2luZyBwbHVnaW5zIGl0c2VsZi4gJ1xuICAgICAgKyAnT3BlbmluZyBkZW1vLXZhdWx0LyBpbiBPYnNpZGlhbiBvbmNlIHNvIGRlbW8tdmF1bHQtaGVscGVyIGluc3RhbGxzIGl0IGFsc28gd29ya3MuJ1xuICAgIDogJ0l0IHdhcyByZWFkIGZyb20gYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAsIHdoaWNoIG9wdHMgaXQgb3V0IG9mIHRoZSBoZWFkbGVzcyBib290c3RyYXAgXHUyMDE0ICdcbiAgICAgICsgJ2J1aWxkIGl0IGludG8gdGhhdCBkaXJlY3RvcnksIG9yIGRyb3AgYHNvdXJjZURpcmVjdG9yeWAgdG8gaW5zdGFsbCBpdCBmcm9tIGl0cyBwdWJsaXNoZWQgcmVsZWFzZS4nO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBmaWxlIG5hbWVzIGRpcmVjdGx5IGluc2lkZSBhIHBsdWdpbidzIHNvdXJjZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBkaXJlY3RvcnkgdG8gbGlzdC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIG5hbWVzLCBvciBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBleGlzdHNTeW5jKHNvdXJjZURpcmVjdG9yeSlcbiAgICA/IHJlYWRkaXJTeW5jKHNvdXJjZURpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKVxuICAgIDogW107XG59XG5cbi8qKlxuICogU2VlZHMgb25lIGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzIChhbmQgb3B0aW9uYWwgYGRhdGEuanNvbmApIGludG8gdGhlIHBvcHVsYXRlIG1hcC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVmYXVsdCBzb3VyY2UgZGlyZWN0b3J5LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gc2VlZC5cbiAqIEBwYXJhbSBtYXAgLSBUaGUgcG9wdWxhdGUgbWFwIHRvIHdyaXRlIGludG8uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwbHVnaW4ncyBgbWFpbi5qc2AgLyBgbWFuaWZlc3QuanNvbmAgYXJlIG5vdCBvbiBkaXNrLCBuYW1pbmcgdGhlIGhlYWRsZXNzIHJlbWVkaWVzLlxuICovXG5mdW5jdGlvbiBzZWVkUGx1Z2luKGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMsIG1hcDogUG9wdWxhdGVGaWxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGRhdGEsIHBsdWdpbklkIH0gPSBwbHVnaW47XG4gIGNvbnN0IHNvdXJjZURpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcbiAgY29uc3QgcGx1Z2luUHJlZml4ID0gYCR7T0JTSURJQU5fQ09ORklHX0RJUn0vJHtQTFVHSU5TX0RJUn0vJHtwbHVnaW5JZH1gO1xuXG4gIGNvbnN0IGZpbGVOYW1lcyA9IHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5KTtcblxuICBmb3IgKGNvbnN0IHJlcXVpcmVkRmlsZSBvZiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMpIHtcbiAgICBpZiAoIWZpbGVOYW1lcy5pbmNsdWRlcyhyZXF1aXJlZEZpbGUpKSB7XG4gICAgICBjb25zdCByZW1lZHkgPSBidWlsZE1pc3NpbmdQbHVnaW5SZW1lZHkoZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIG5vdCBpbnN0YWxsZWQgaW4gdGhlIGRlbW8gdmF1bHQgKCR7am9pbihzb3VyY2VEaXJlY3RvcnksIHJlcXVpcmVkRmlsZSl9IG1pc3NpbmcpLiAke3JlbWVkeX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgLy8gYGRhdGEuanNvbmAgaXMgcmVnZW5lcmF0ZWQgZnJvbSBgZGF0YWAgYmVsb3cgKHdoZW4gcHJvdmlkZWQpOyBza2lwIHRoZSBvbi1kaXNrIGNvcHkgdG8gYXZvaWQgc2VlZGluZyBpdCB0d2ljZS5cbiAgICBpZiAoZmlsZU5hbWUgPT09IERBVEFfSlNPTiAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXBbYCR7cGx1Z2luUHJlZml4fS8ke2ZpbGVOYW1lfWBdID0gcmVhZEZpbGVTeW5jKGpvaW4oc291cmNlRGlyZWN0b3J5LCBmaWxlTmFtZSkpO1xuICB9XG5cbiAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRhdGFKc29uOiBzdHJpbmcgPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIG1hcFtgJHtwbHVnaW5QcmVmaXh9LyR7REFUQV9KU09OfWBdID0gYCR7ZGF0YUpzb259XFxuYDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLHFCQUlPO0FBQ1AsdUJBQXFCO0FBSXJCLHVDQUE0QztBQUM1Qyw4QkFBeUM7QUFDekMsNkJBQWtDO0FBQ2xDLHlCQUFrQztBQVFsQyxNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSxZ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
@@ -29,10 +29,7 @@ var DeviceSettingRestoreKind = /* @__PURE__ */ ((DeviceSettingRestoreKind2) => {
29
29
  })(DeviceSettingRestoreKind || {});
30
30
  const UNSET_SETTING_VALUE = "null";
31
31
  function resolveDeviceSettingRestore(previousValue) {
32
- if (previousValue === UNSET_SETTING_VALUE) {
33
- return { kind: "delete" /* Delete */ };
34
- }
35
- return {
32
+ return previousValue === UNSET_SETTING_VALUE ? { kind: "delete" /* Delete */ } : {
36
33
  kind: "write" /* Write */,
37
34
  value: previousValue
38
35
  };
@@ -42,4 +39,4 @@ function resolveDeviceSettingRestore(previousValue) {
42
39
  DeviceSettingRestoreKind,
43
40
  resolveDeviceSettingRestore
44
41
  });
45
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5nLXJlc3RvcmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEZWNpZGVzIGhvdyBhIGRldmljZSBzZXR0aW5nIHRoYXQgd2FzIGNoYW5nZWQgZm9yIGEgY2FwdHVyZSBnZXRzIHB1dCBiYWNrLlxuICpcbiAqIEEgc3VpdGUgdGhhdCBmbGlwcyBhIHNldHRpbmcgb3dlcyB0aGUgZGV2aWNlIGl0cyBvcmlnaW5hbCB2YWx1ZSBiYWNrIFx1MjAxNFxuICogaW5jbHVkaW5nIHRoZSBjYXNlIHdoZXJlIGl0IG5ldmVyIGhhZCBvbmUuIGBzZXR0aW5ncyBnZXRgIHByaW50cyB0aGUgbGl0ZXJhbFxuICogYG51bGxgIGZvciBhIHNldHRpbmcgdGhhdCBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuLCBhbmQgYHNldHRpbmdzIHB1dCBcdTIwMjYgbnVsbGBcbiAqIGRvZXMgKipub3QqKiByZXByb2R1Y2UgdGhhdCBzdGF0ZTogaXQgd3JpdGVzIHRoZSBmb3VyLWNoYXJhY3RlciBzdHJpbmdcbiAqIGBudWxsYC4gUmVzdG9yaW5nIGFuIHVuc2V0IHNldHRpbmcgdGFrZXMgYHNldHRpbmdzIGRlbGV0ZWAsIHdoaWNoIGlzIHdoeSB0aGlzXG4gKiBpcyBhIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgc3RyYWlnaHQgd3JpdGUtYmFjay5cbiAqXG4gKiBQdXJlIGFuZCB1bml0LXRlc3RlZDsgdGhlIGNhbGxzIHRoYXQgY2FycnkgaXQgb3V0IGxpdmUgaW4gYGRldmljZS1zZXR0aW5nc2AuXG4gKi9cblxuLyoqXG4gKiBIb3cgYSBzZXR0aW5nIGlzIHJlc3RvcmVkLlxuICovXG5leHBvcnQgZW51bSBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmcgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgc28gcmVzdG9yaW5nIGl0IG1lYW5zIHJlbW92aW5nIGl0IGFnYWluLlxuICAgKi9cbiAgRGVsZXRlID0gJ2RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5nIGhlbGQgYSB2YWx1ZSwgd2hpY2ggaXMgd3JpdHRlbiBiYWNrIHZlcmJhdGltLlxuICAgKi9cbiAgV3JpdGUgPSAnd3JpdGUnXG59XG5cbi8qKlxuICogV2hhdCByZXN0b3JpbmcgYSBzZXR0aW5nIHJlcXVpcmVzOiBwdXR0aW5nIGEgdmFsdWUgYmFjaywgb3IgcmVtb3ZpbmcgaXQgYWdhaW4uXG4gKi9cbmV4cG9ydCB0eXBlIERldmljZVNldHRpbmdSZXN0b3JlID0gRGV2aWNlU2V0dGluZ1Jlc3RvcmVEZWxldGUgfCBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlO1xuXG4vKipcbiAqIFJlc3RvcmluZyBhIHNldHRpbmcgYnkgcmVtb3ZpbmcgaXQsIGJlY2F1c2UgaXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VTZXR0aW5nUmVzdG9yZURlbGV0ZSB7XG4gIC8qKlxuICAgKiBEaXNjcmltaW5hdGVzIHRoZSB1bmlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGU7XG59XG5cbi8qKlxuICogUmVzdG9yaW5nIGEgc2V0dGluZyBieSB3cml0aW5nIGl0cyBwcmV2aW91cyB2YWx1ZSBiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdSZXN0b3JlV3JpdGUge1xuICAvKipcbiAgICogRGlzY3JpbWluYXRlcyB0aGUgdW5pb24uXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQuV3JpdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byB3cml0ZSBiYWNrLCBleGFjdGx5IGFzIGl0IHdhcyByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IGBzZXR0aW5ncyBnZXRgIHByaW50cyBmb3IgYSBzZXR0aW5nIHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbi5cbiAqL1xuY29uc3QgVU5TRVRfU0VUVElOR19WQUxVRSA9ICdudWxsJztcblxuLyoqXG4gKiBEZWNpZGVzIGhvdyBhIHNldHRpbmcgcmVhZCBiZWZvcmUgYSBjaGFuZ2UgaXMgcHV0IGJhY2sgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBAcGFyYW0gcHJldmlvdXNWYWx1ZSAtIEV4YWN0bHkgd2hhdCBgcmVhZERldmljZVNldHRpbmdgIHJldHVybmVkIGJlZm9yZSB0aGUgY2hhbmdlLlxuICogQHJldHVybnMgV2hldGhlciB0byB3cml0ZSB0aGUgdmFsdWUgYmFjayBvciB0byByZW1vdmUgdGhlIHNldHRpbmcgYWdhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmUocHJldmlvdXNWYWx1ZTogc3RyaW5nKTogRGV2aWNlU2V0dGluZ1Jlc3RvcmUge1xuICBpZiAocHJldmlvdXNWYWx1ZSA9PT0gVU5TRVRfU0VUVElOR19WQUxVRSkge1xuICAgIHJldHVybiB7IGtpbmQ6IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGUgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2luZDogRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLldyaXRlLFxuICAgIHZhbHVlOiBwcmV2aW91c1ZhbHVlXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQk8sSUFBSywyQkFBTCxrQkFBS0EsOEJBQUw7QUFJTCxFQUFBQSwwQkFBQSxZQUFTO0FBS1QsRUFBQUEsMEJBQUEsV0FBUTtBQVRFLFNBQUFBO0FBQUEsR0FBQTtBQTZDWixNQUFNLHNCQUFzQjtBQVFyQixTQUFTLDRCQUE0QixlQUE2QztBQUN2RixNQUFJLGtCQUFrQixxQkFBcUI7QUFDekMsV0FBTyxFQUFFLE1BQU0sc0JBQWdDO0FBQUEsRUFDakQ7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQiXQp9Cg==
42
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5nLXJlc3RvcmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEZWNpZGVzIGhvdyBhIGRldmljZSBzZXR0aW5nIHRoYXQgd2FzIGNoYW5nZWQgZm9yIGEgY2FwdHVyZSBnZXRzIHB1dCBiYWNrLlxuICpcbiAqIEEgc3VpdGUgdGhhdCBmbGlwcyBhIHNldHRpbmcgb3dlcyB0aGUgZGV2aWNlIGl0cyBvcmlnaW5hbCB2YWx1ZSBiYWNrIFx1MjAxNFxuICogaW5jbHVkaW5nIHRoZSBjYXNlIHdoZXJlIGl0IG5ldmVyIGhhZCBvbmUuIGBzZXR0aW5ncyBnZXRgIHByaW50cyB0aGUgbGl0ZXJhbFxuICogYG51bGxgIGZvciBhIHNldHRpbmcgdGhhdCBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuLCBhbmQgYHNldHRpbmdzIHB1dCBcdTIwMjYgbnVsbGBcbiAqIGRvZXMgKipub3QqKiByZXByb2R1Y2UgdGhhdCBzdGF0ZTogaXQgd3JpdGVzIHRoZSBmb3VyLWNoYXJhY3RlciBzdHJpbmdcbiAqIGBudWxsYC4gUmVzdG9yaW5nIGFuIHVuc2V0IHNldHRpbmcgdGFrZXMgYHNldHRpbmdzIGRlbGV0ZWAsIHdoaWNoIGlzIHdoeSB0aGlzXG4gKiBpcyBhIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgc3RyYWlnaHQgd3JpdGUtYmFjay5cbiAqXG4gKiBQdXJlIGFuZCB1bml0LXRlc3RlZDsgdGhlIGNhbGxzIHRoYXQgY2FycnkgaXQgb3V0IGxpdmUgaW4gYGRldmljZS1zZXR0aW5nc2AuXG4gKi9cblxuLyoqXG4gKiBIb3cgYSBzZXR0aW5nIGlzIHJlc3RvcmVkLlxuICovXG5leHBvcnQgZW51bSBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmcgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgc28gcmVzdG9yaW5nIGl0IG1lYW5zIHJlbW92aW5nIGl0IGFnYWluLlxuICAgKi9cbiAgRGVsZXRlID0gJ2RlbGV0ZScsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5nIGhlbGQgYSB2YWx1ZSwgd2hpY2ggaXMgd3JpdHRlbiBiYWNrIHZlcmJhdGltLlxuICAgKi9cbiAgV3JpdGUgPSAnd3JpdGUnXG59XG5cbi8qKlxuICogV2hhdCByZXN0b3JpbmcgYSBzZXR0aW5nIHJlcXVpcmVzOiBwdXR0aW5nIGEgdmFsdWUgYmFjaywgb3IgcmVtb3ZpbmcgaXQgYWdhaW4uXG4gKi9cbmV4cG9ydCB0eXBlIERldmljZVNldHRpbmdSZXN0b3JlID0gRGV2aWNlU2V0dGluZ1Jlc3RvcmVEZWxldGUgfCBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlO1xuXG4vKipcbiAqIFJlc3RvcmluZyBhIHNldHRpbmcgYnkgcmVtb3ZpbmcgaXQsIGJlY2F1c2UgaXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VTZXR0aW5nUmVzdG9yZURlbGV0ZSB7XG4gIC8qKlxuICAgKiBEaXNjcmltaW5hdGVzIHRoZSB1bmlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGU7XG59XG5cbi8qKlxuICogUmVzdG9yaW5nIGEgc2V0dGluZyBieSB3cml0aW5nIGl0cyBwcmV2aW91cyB2YWx1ZSBiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdSZXN0b3JlV3JpdGUge1xuICAvKipcbiAgICogRGlzY3JpbWluYXRlcyB0aGUgdW5pb24uXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQuV3JpdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byB3cml0ZSBiYWNrLCBleGFjdGx5IGFzIGl0IHdhcyByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IGBzZXR0aW5ncyBnZXRgIHByaW50cyBmb3IgYSBzZXR0aW5nIHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbi5cbiAqL1xuY29uc3QgVU5TRVRfU0VUVElOR19WQUxVRSA9ICdudWxsJztcblxuLyoqXG4gKiBEZWNpZGVzIGhvdyBhIHNldHRpbmcgcmVhZCBiZWZvcmUgYSBjaGFuZ2UgaXMgcHV0IGJhY2sgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBAcGFyYW0gcHJldmlvdXNWYWx1ZSAtIEV4YWN0bHkgd2hhdCBgcmVhZERldmljZVNldHRpbmdgIHJldHVybmVkIGJlZm9yZSB0aGUgY2hhbmdlLlxuICogQHJldHVybnMgV2hldGhlciB0byB3cml0ZSB0aGUgdmFsdWUgYmFjayBvciB0byByZW1vdmUgdGhlIHNldHRpbmcgYWdhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmUocHJldmlvdXNWYWx1ZTogc3RyaW5nKTogRGV2aWNlU2V0dGluZ1Jlc3RvcmUge1xuICByZXR1cm4gcHJldmlvdXNWYWx1ZSA9PT0gVU5TRVRfU0VUVElOR19WQUxVRVxuICAgID8geyBraW5kOiBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQuRGVsZXRlIH1cbiAgICA6IHtcbiAgICAgIGtpbmQ6IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5Xcml0ZSxcbiAgICAgIHZhbHVlOiBwcmV2aW91c1ZhbHVlXG4gICAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCTyxJQUFLLDJCQUFMLGtCQUFLQSw4QkFBTDtBQUlMLEVBQUFBLDBCQUFBLFlBQVM7QUFLVCxFQUFBQSwwQkFBQSxXQUFRO0FBVEUsU0FBQUE7QUFBQSxHQUFBO0FBNkNaLE1BQU0sc0JBQXNCO0FBUXJCLFNBQVMsNEJBQTRCLGVBQTZDO0FBQ3ZGLFNBQU8sa0JBQWtCLHNCQUNyQixFQUFFLE1BQU0sc0JBQWdDLElBQ3hDO0FBQUEsSUFDQSxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDVDtBQUNKOyIsCiAgIm5hbWVzIjogWyJEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQiXQp9Cg==
@@ -28,19 +28,16 @@ function resolveElectronCompatibility(params) {
28
28
  if (actualElectronVersion === void 0 || minRecommendedElectronVersion === void 0) {
29
29
  return { actualElectronVersion: actualElectronVersion ?? null, appVersion, tier: "unknown" };
30
30
  }
31
- if ((0, import_obsidian_version.compareVersions)(actualElectronVersion, minRecommendedElectronVersion) < 0) {
32
- return {
33
- actualElectronVersion,
34
- appVersion,
35
- message: `Obsidian ${appVersion} runs on Electron ${actualElectronVersion} but recommends Electron ${minRecommendedElectronVersion} or newer; pin a newer obsidianInstallerVersion for full compatibility.`,
36
- minRecommendedElectronVersion,
37
- tier: "nagged"
38
- };
39
- }
40
- return { actualElectronVersion, appVersion, minRecommendedElectronVersion, tier: "ok" };
31
+ return (0, import_obsidian_version.compareVersions)(actualElectronVersion, minRecommendedElectronVersion) < 0 ? {
32
+ actualElectronVersion,
33
+ appVersion,
34
+ message: `Obsidian ${appVersion} runs on Electron ${actualElectronVersion} but recommends Electron ${minRecommendedElectronVersion} or newer; pin a newer obsidianInstallerVersion for full compatibility.`,
35
+ minRecommendedElectronVersion,
36
+ tier: "nagged"
37
+ } : { actualElectronVersion, appVersion, minRecommendedElectronVersion, tier: "ok" };
41
38
  }
42
39
  // Annotate the CommonJS export names for ESM import in node:
43
40
  0 && (module.exports = {
44
41
  resolveElectronCompatibility
45
42
  });
46
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHZlcmRpY3Qgb24gd2hldGhlciB0aGUgRWxlY3Ryb24gdmVyc2lvbiBhbiBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBpc1xuICogYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoIGZvciB0aGUgcmVzb2x2ZWQgYXBwIHZlcnNpb24uIEtlcHQgc2VwYXJhdGUgZnJvbVxuICogdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAgKHdoaWNoIHJlYWRzIHRoZSBsaXZlIHZlcnNpb24gb3ZlclxuICogQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZSB0aWVyIGxvZ2ljIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0XG4gKiBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgLyBgcmVuZGVyZXItYm9vdC1kZXRlY3Rpb25gIHNwbGl0LlxuICpcbiAqIFRoaXMgaXMgdGhlIHRpZXItMiBjb21wYW5pb24gdG8gYGluc3RhbGxlci1jb21wYXRpYmlsaXR5YC4gVGhhdCBvbmUgaXMgZnVsbHlcbiAqIG9mZmxpbmUgXHUyMDE0IGl0IGNvbXBhcmVzIHRoZSByZXNvbHZlZCBpbnN0YWxsZXIgdmVyc2lvbiBhZ2FpbnN0IGluc3RhbGxlci12ZXJzaW9uXG4gKiB0aHJlc2hvbGRzLiBCdXQgdGhlIGFwcCdzIHJlYWwgcmVxdWlyZW1lbnQgaXMgYSAqKm1pbmltdW0gRWxlY3Ryb24gdmVyc2lvbioqXG4gKiBoYXJkY29kZWQgaW5zaWRlIGBhcHAuanNgIChlLmcuIGAxLjEzLjFgIG5lZWRzIEVsZWN0cm9uIGAyOC4yLjNgKSwgYW5kIHRoZVxuICogaW5zdGFsbGVyJ3MgYnVuZGxlZCBFbGVjdHJvbiBpcyBub3QgZGVyaXZhYmxlIG9mZmxpbmUgKHNlZVxuICoge0BsaW5rIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhLm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSkuIFNvIHRoaXMgdmVyZGljdFxuICogdGFrZXMgdGhlICoqbGl2ZSoqIGBwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uYCByZWFkIGZyb20gdGhlIGJvb3RlZCByZW5kZXJlciBhbmRcbiAqIGNvbXBhcmVzIGl0IHRvIGBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbmAgZnJvbSBgbWV0YWRhdGEuanNvbmAuXG4gKlxuICogQW4gRWxlY3Ryb24gYmVsb3cgdGhlIHJlY29tbWVuZGF0aW9uIHJ1bnMgYnV0IGlzIG5hZ2dlZCAoYCduYWdnZWQnYCkgXHUyMDE0IE9ic2lkaWFuXG4gKiB3b3VsZCBzaG93IGl0cyBcImluc3RhbGxlciB0b28gb2xkXCIgcmVjb21tZW5kYXRpb247IGl0IG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXNcbiAqIG5vIGAndW5ydW5uYWJsZSdgIHRpZXIgaGVyZS4gV2hlbiB0aGUgbGl2ZSB2ZXJzaW9uIGlzIHVucmVhZGFibGUgb3IgdGhlIGFwcFxuICogdmVyc2lvbiBjYXJyaWVzIG5vIHJlY29tbWVuZGVkIEVsZWN0cm9uLCB0aGUgdmVyZGljdCBpcyBgJ3Vua25vd24nYCBhbmQgbm90aGluZ1xuICogaXMgd2FybmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5cbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG4vKipcbiAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UsIGNhcnJpZWRcbiAqIGFzIGRhdGEgb24gdGhlIHRyYW5zcG9ydCAvIGNvbm5lY3Rpb24gcmVzdWx0IHNvIGNvbnN1bWVycyBjYW4gYXNzZXJ0IG9uIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB7XG4gIC8qKlxuICBUaGUgRWxlY3Ryb24gdmVyc2lvbiB0aGUgaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZywgb3IgYG51bGxgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IGlzIHJ1bm5pbmcuXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gIEEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24sIHByZXNlbnQgZm9yIHRoZSBgJ25hZ2dlZCdgIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYXBwJ3MgcmVjb21tZW5kZWQtbWluaW11bSBFbGVjdHJvbiB2ZXJzaW9uLCB3aGVuIHRoZSB0YWJsZSBjYXJyaWVzIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgY29tcGF0aWJpbGl0eSB0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGllcjogRWxlY3Ryb25Db21wYXRpYmlsaXR5VGllcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHRpZXIgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIC0gYCdvaydgIFx1MjAxNCB0aGUgcnVubmluZyBFbGVjdHJvbiBpcyBhdCBvciBhYm92ZSB0aGUgYXBwJ3MgcmVjb21tZW5kZWQgbWluaW11bS5cbiAqIC0gYCduYWdnZWQnYCBcdTIwMTQgdGhlIHJ1bm5pbmcgRWxlY3Ryb24gaXMgYmVsb3cgdGhlIHJlY29tbWVuZGVkIG1pbmltdW07IE9ic2lkaWFuXG4gKiAgIHJ1bnMgYnV0IHdvdWxkIHNob3cgaXRzIFwiaW5zdGFsbGVyIHRvbyBvbGRcIiByZWNvbW1lbmRhdGlvbi5cbiAqIC0gYCd1bmtub3duJ2AgXHUyMDE0IGNhbm5vdCBiZSBkZXRlcm1pbmVkICh0aGUgbGl2ZSB2ZXJzaW9uIHdhcyB1bnJlYWRhYmxlLCBvciB0aGVcbiAqICAgYXBwIHZlcnNpb24gY2FycmllcyBubyByZWNvbW1lbmRlZCBFbGVjdHJvbiB2ZXJzaW9uIGluIHRoZSB0YWJsZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIgPSAnbmFnZ2VkJyB8ICdvaycgfCAndW5rbm93bic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXMge1xuICAvKipcbiAgVGhlIEVsZWN0cm9uIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGB1bmRlZmluZWRgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoYXQgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgVGhlIGBtZXRhZGF0YS5qc29uYCBlbnRyeSBmb3Ige0BsaW5rIGFwcFZlcnNpb259LCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBPYnNpZGlhblZlcnNpb25NZXRhZGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIE9ubHkgYCduYWdnZWQnYCB3YXJyYW50cyBhIHdhcm5pbmc7IGAnb2snYCBhbmQgYCd1bmtub3duJ2AgYXJlIHNpbGVudC4gQW5cbiAqIEVsZWN0cm9uIG1pc21hdGNoIG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXMgbm8gZXJyb3IgdGllci4gQ29tcGFyaXNvbnMgYXJlIHB1cmVcbiAqIGB4LnkuemAgdmVyc2lvbiBjb21wYXJlcyBcdTIwMTQgbm8gSS9PLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcnVubmluZyBhcHAgdmVyc2lvbiwgdGhlIGxpdmUgRWxlY3Ryb24gdmVyc2lvbiwgYW5kIHRoZSBhcHBcbiAqICAgdmVyc2lvbidzIG1ldGFkYXRhIGVudHJ5LlxuICogQHJldHVybnMgVGhlIGNvbXBhdGliaWxpdHkgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHkocGFyYW1zOiBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zKTogRWxlY3Ryb25Db21wYXRpYmlsaXR5IHtcbiAgY29uc3QgeyBhY3R1YWxFbGVjdHJvblZlcnNpb24sIGFwcFZlcnNpb24sIG1ldGFkYXRhIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uID0gbWV0YWRhdGE/Lm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uO1xuXG4gIGlmIChhY3R1YWxFbGVjdHJvblZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgYWN0dWFsRWxlY3Ryb25WZXJzaW9uOiBhY3R1YWxFbGVjdHJvblZlcnNpb24gPz8gbnVsbCwgYXBwVmVyc2lvbiwgdGllcjogJ3Vua25vd24nIH07XG4gIH1cblxuICBpZiAoY29tcGFyZVZlcnNpb25zKGFjdHVhbEVsZWN0cm9uVmVyc2lvbiwgbWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb24pIDwgMCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3R1YWxFbGVjdHJvblZlcnNpb24sXG4gICAgICBhcHBWZXJzaW9uLFxuICAgICAgbWVzc2FnZTogYE9ic2lkaWFuICR7YXBwVmVyc2lvbn0gcnVucyBvbiBFbGVjdHJvbiAke2FjdHVhbEVsZWN0cm9uVmVyc2lvbn0gYnV0IHJlY29tbWVuZHMgRWxlY3Ryb24gYFxuICAgICAgICArIGAke21pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSBvciBuZXdlcjsgcGluIGEgbmV3ZXIgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uIGZvciBmdWxsIGNvbXBhdGliaWxpdHkuYCxcbiAgICAgIG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uLFxuICAgICAgdGllcjogJ25hZ2dlZCdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgYWN0dWFsRWxlY3Ryb25WZXJzaW9uLCBhcHBWZXJzaW9uLCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbiwgdGllcjogJ29rJyB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJCQSw4QkFBZ0M7QUEyRXpCLFNBQVMsNkJBQTZCLFFBQW1FO0FBQzlHLFFBQU0sRUFBRSx1QkFBdUIsWUFBWSxTQUFTLElBQUk7QUFDeEQsUUFBTSxnQ0FBZ0MsVUFBVTtBQUVoRCxNQUFJLDBCQUEwQixVQUFhLGtDQUFrQyxRQUFXO0FBQ3RGLFdBQU8sRUFBRSx1QkFBdUIseUJBQXlCLE1BQU0sWUFBWSxNQUFNLFVBQVU7QUFBQSxFQUM3RjtBQUVBLFVBQUkseUNBQWdCLHVCQUF1Qiw2QkFBNkIsSUFBSSxHQUFHO0FBQzdFLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsU0FBUyxZQUFZLFVBQVUscUJBQXFCLHFCQUFxQiw0QkFDbEUsNkJBQTZCO0FBQUEsTUFDcEM7QUFBQSxNQUNBLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUVBLFNBQU8sRUFBRSx1QkFBdUIsWUFBWSwrQkFBK0IsTUFBTSxLQUFLO0FBQ3hGOyIsCiAgIm5hbWVzIjogW10KfQo=
43
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VsZWN0cm9uLWNvbXBhdGliaWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHZlcmRpY3Qgb24gd2hldGhlciB0aGUgRWxlY3Ryb24gdmVyc2lvbiBhbiBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBpc1xuICogYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoIGZvciB0aGUgcmVzb2x2ZWQgYXBwIHZlcnNpb24uIEtlcHQgc2VwYXJhdGUgZnJvbVxuICogdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAgKHdoaWNoIHJlYWRzIHRoZSBsaXZlIHZlcnNpb24gb3ZlclxuICogQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZSB0aWVyIGxvZ2ljIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0XG4gKiBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgLyBgcmVuZGVyZXItYm9vdC1kZXRlY3Rpb25gIHNwbGl0LlxuICpcbiAqIFRoaXMgaXMgdGhlIHRpZXItMiBjb21wYW5pb24gdG8gYGluc3RhbGxlci1jb21wYXRpYmlsaXR5YC4gVGhhdCBvbmUgaXMgZnVsbHlcbiAqIG9mZmxpbmUgXHUyMDE0IGl0IGNvbXBhcmVzIHRoZSByZXNvbHZlZCBpbnN0YWxsZXIgdmVyc2lvbiBhZ2FpbnN0IGluc3RhbGxlci12ZXJzaW9uXG4gKiB0aHJlc2hvbGRzLiBCdXQgdGhlIGFwcCdzIHJlYWwgcmVxdWlyZW1lbnQgaXMgYSAqKm1pbmltdW0gRWxlY3Ryb24gdmVyc2lvbioqXG4gKiBoYXJkY29kZWQgaW5zaWRlIGBhcHAuanNgIChlLmcuIGAxLjEzLjFgIG5lZWRzIEVsZWN0cm9uIGAyOC4yLjNgKSwgYW5kIHRoZVxuICogaW5zdGFsbGVyJ3MgYnVuZGxlZCBFbGVjdHJvbiBpcyBub3QgZGVyaXZhYmxlIG9mZmxpbmUgKHNlZVxuICoge0BsaW5rIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhLm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9ufSkuIFNvIHRoaXMgdmVyZGljdFxuICogdGFrZXMgdGhlICoqbGl2ZSoqIGBwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uYCByZWFkIGZyb20gdGhlIGJvb3RlZCByZW5kZXJlciBhbmRcbiAqIGNvbXBhcmVzIGl0IHRvIGBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbmAgZnJvbSBgbWV0YWRhdGEuanNvbmAuXG4gKlxuICogQW4gRWxlY3Ryb24gYmVsb3cgdGhlIHJlY29tbWVuZGF0aW9uIHJ1bnMgYnV0IGlzIG5hZ2dlZCAoYCduYWdnZWQnYCkgXHUyMDE0IE9ic2lkaWFuXG4gKiB3b3VsZCBzaG93IGl0cyBcImluc3RhbGxlciB0b28gb2xkXCIgcmVjb21tZW5kYXRpb247IGl0IG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXNcbiAqIG5vIGAndW5ydW5uYWJsZSdgIHRpZXIgaGVyZS4gV2hlbiB0aGUgbGl2ZSB2ZXJzaW9uIGlzIHVucmVhZGFibGUgb3IgdGhlIGFwcFxuICogdmVyc2lvbiBjYXJyaWVzIG5vIHJlY29tbWVuZGVkIEVsZWN0cm9uLCB0aGUgdmVyZGljdCBpcyBgJ3Vua25vd24nYCBhbmQgbm90aGluZ1xuICogaXMgd2FybmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5cbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG4vKipcbiAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UsIGNhcnJpZWRcbiAqIGFzIGRhdGEgb24gdGhlIHRyYW5zcG9ydCAvIGNvbm5lY3Rpb24gcmVzdWx0IHNvIGNvbnN1bWVycyBjYW4gYXNzZXJ0IG9uIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB7XG4gIC8qKlxuICBUaGUgRWxlY3Ryb24gdmVyc2lvbiB0aGUgaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZywgb3IgYG51bGxgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlc29sdmVkIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IGlzIHJ1bm5pbmcuXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gIEEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24sIHByZXNlbnQgZm9yIHRoZSBgJ25hZ2dlZCdgIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYXBwJ3MgcmVjb21tZW5kZWQtbWluaW11bSBFbGVjdHJvbiB2ZXJzaW9uLCB3aGVuIHRoZSB0YWJsZSBjYXJyaWVzIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgY29tcGF0aWJpbGl0eSB0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdGllcjogRWxlY3Ryb25Db21wYXRpYmlsaXR5VGllcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHRpZXIgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIC0gYCdvaydgIFx1MjAxNCB0aGUgcnVubmluZyBFbGVjdHJvbiBpcyBhdCBvciBhYm92ZSB0aGUgYXBwJ3MgcmVjb21tZW5kZWQgbWluaW11bS5cbiAqIC0gYCduYWdnZWQnYCBcdTIwMTQgdGhlIHJ1bm5pbmcgRWxlY3Ryb24gaXMgYmVsb3cgdGhlIHJlY29tbWVuZGVkIG1pbmltdW07IE9ic2lkaWFuXG4gKiAgIHJ1bnMgYnV0IHdvdWxkIHNob3cgaXRzIFwiaW5zdGFsbGVyIHRvbyBvbGRcIiByZWNvbW1lbmRhdGlvbi5cbiAqIC0gYCd1bmtub3duJ2AgXHUyMDE0IGNhbm5vdCBiZSBkZXRlcm1pbmVkICh0aGUgbGl2ZSB2ZXJzaW9uIHdhcyB1bnJlYWRhYmxlLCBvciB0aGVcbiAqICAgYXBwIHZlcnNpb24gY2FycmllcyBubyByZWNvbW1lbmRlZCBFbGVjdHJvbiB2ZXJzaW9uIGluIHRoZSB0YWJsZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIgPSAnbmFnZ2VkJyB8ICdvaycgfCAndW5rbm93bic7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXMge1xuICAvKipcbiAgVGhlIEVsZWN0cm9uIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcsIG9yIGB1bmRlZmluZWRgIHdoZW4gdW5yZWFkYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdHVhbEVsZWN0cm9uVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBUaGUgcmVzb2x2ZWQgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoYXQgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgVGhlIGBtZXRhZGF0YS5qc29uYCBlbnRyeSBmb3Ige0BsaW5rIGFwcFZlcnNpb259LCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBPYnNpZGlhblZlcnNpb25NZXRhZGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIE9ubHkgYCduYWdnZWQnYCB3YXJyYW50cyBhIHdhcm5pbmc7IGAnb2snYCBhbmQgYCd1bmtub3duJ2AgYXJlIHNpbGVudC4gQW5cbiAqIEVsZWN0cm9uIG1pc21hdGNoIG5ldmVyIGJsb2Nrcywgc28gdGhlcmUgaXMgbm8gZXJyb3IgdGllci4gQ29tcGFyaXNvbnMgYXJlIHB1cmVcbiAqIGB4LnkuemAgdmVyc2lvbiBjb21wYXJlcyBcdTIwMTQgbm8gSS9PLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcnVubmluZyBhcHAgdmVyc2lvbiwgdGhlIGxpdmUgRWxlY3Ryb24gdmVyc2lvbiwgYW5kIHRoZSBhcHBcbiAqICAgdmVyc2lvbidzIG1ldGFkYXRhIGVudHJ5LlxuICogQHJldHVybnMgVGhlIGNvbXBhdGliaWxpdHkgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHkocGFyYW1zOiBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zKTogRWxlY3Ryb25Db21wYXRpYmlsaXR5IHtcbiAgY29uc3QgeyBhY3R1YWxFbGVjdHJvblZlcnNpb24sIGFwcFZlcnNpb24sIG1ldGFkYXRhIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uID0gbWV0YWRhdGE/Lm1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uO1xuXG4gIGlmIChhY3R1YWxFbGVjdHJvblZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgYWN0dWFsRWxlY3Ryb25WZXJzaW9uOiBhY3R1YWxFbGVjdHJvblZlcnNpb24gPz8gbnVsbCwgYXBwVmVyc2lvbiwgdGllcjogJ3Vua25vd24nIH07XG4gIH1cblxuICByZXR1cm4gY29tcGFyZVZlcnNpb25zKGFjdHVhbEVsZWN0cm9uVmVyc2lvbiwgbWluUmVjb21tZW5kZWRFbGVjdHJvblZlcnNpb24pIDwgMFxuICAgID8ge1xuICAgICAgYWN0dWFsRWxlY3Ryb25WZXJzaW9uLFxuICAgICAgYXBwVmVyc2lvbixcbiAgICAgIG1lc3NhZ2U6IGBPYnNpZGlhbiAke2FwcFZlcnNpb259IHJ1bnMgb24gRWxlY3Ryb24gJHthY3R1YWxFbGVjdHJvblZlcnNpb259IGJ1dCByZWNvbW1lbmRzIEVsZWN0cm9uIGBcbiAgICAgICAgKyBgJHttaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbn0gb3IgbmV3ZXI7IHBpbiBhIG5ld2VyIG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbiBmb3IgZnVsbCBjb21wYXRpYmlsaXR5LmAsXG4gICAgICBtaW5SZWNvbW1lbmRlZEVsZWN0cm9uVmVyc2lvbixcbiAgICAgIHRpZXI6ICduYWdnZWQnXG4gICAgfVxuICAgIDogeyBhY3R1YWxFbGVjdHJvblZlcnNpb24sIGFwcFZlcnNpb24sIG1pblJlY29tbWVuZGVkRWxlY3Ryb25WZXJzaW9uLCB0aWVyOiAnb2snIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBLDhCQUFnQztBQTJFekIsU0FBUyw2QkFBNkIsUUFBbUU7QUFDOUcsUUFBTSxFQUFFLHVCQUF1QixZQUFZLFNBQVMsSUFBSTtBQUN4RCxRQUFNLGdDQUFnQyxVQUFVO0FBRWhELE1BQUksMEJBQTBCLFVBQWEsa0NBQWtDLFFBQVc7QUFDdEYsV0FBTyxFQUFFLHVCQUF1Qix5QkFBeUIsTUFBTSxZQUFZLE1BQU0sVUFBVTtBQUFBLEVBQzdGO0FBRUEsYUFBTyx5Q0FBZ0IsdUJBQXVCLDZCQUE2QixJQUFJLElBQzNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFNBQVMsWUFBWSxVQUFVLHFCQUFxQixxQkFBcUIsNEJBQ2xFLDZCQUE2QjtBQUFBLElBQ3BDO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUixJQUNFLEVBQUUsdUJBQXVCLFlBQVksK0JBQStCLE1BQU0sS0FBSztBQUNyRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -27,22 +27,22 @@ const DNS_SERVER = "8.8.8.8";
27
27
  const NETSIM_LOG_FILTER = "error";
28
28
  const RUST_LOG_VARIABLE_NAME = "RUST_LOG";
29
29
  function buildEmulatorArguments(params) {
30
- const emulatorArguments = ["-avd", params.avdName];
31
- if (!params.shouldReuseSnapshot) {
32
- emulatorArguments.push("-no-snapshot-load", "-no-snapshot-save");
33
- }
34
- emulatorArguments.push("-dns-server", DNS_SERVER);
35
- if (params.isHidden) {
36
- emulatorArguments.push("-no-window");
37
- }
38
- return emulatorArguments;
30
+ return [
31
+ "-avd",
32
+ params.avdName,
33
+ /*
34
+ * Both flags or neither: loading without saving is the resume-what-we-never-
35
+ * wrote combination this file's header exists to rule out.
36
+ */
37
+ ...params.shouldReuseSnapshot ? [] : ["-no-snapshot-load", "-no-snapshot-save"],
38
+ "-dns-server",
39
+ DNS_SERVER,
40
+ ...params.isHidden ? ["-no-window"] : []
41
+ ];
39
42
  }
40
43
  function buildEmulatorEnvironment(baseEnvironment) {
41
44
  const existingFilter = baseEnvironment[RUST_LOG_VARIABLE_NAME];
42
- if (existingFilter !== void 0 && existingFilter !== "") {
43
- return { environment: { ...baseEnvironment }, isNetsimLogGuarded: false };
44
- }
45
- return {
45
+ return existingFilter !== void 0 && existingFilter !== "" ? { environment: { ...baseEnvironment }, isNetsimLogGuarded: false } : {
46
46
  environment: { ...baseEnvironment, [RUST_LOG_VARIABLE_NAME]: NETSIM_LOG_FILTER },
47
47
  isNetsimLogGuarded: true
48
48
  };
@@ -53,4 +53,4 @@ function buildEmulatorEnvironment(baseEnvironment) {
53
53
  buildEmulatorArguments,
54
54
  buildEmulatorEnvironment
55
55
  });
56
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWFyZ3VtZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEJ1aWxkcyB0aGUgYXJndW1lbnQgbGlzdCBmb3Igc3Bhd25pbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IuXG4gKlxuICogKipUaGUgaGFybmVzcyBvd25zIHRoZSBzbmFwc2hvdCBpdCBsb2Fkcywgb3IgaXQgbG9hZHMgbm9uZS4qKiBUaGlzIGZpbGUgdXNlZFxuICogdG8gcGFzcyBgLW5vLXNuYXBzaG90LXNhdmVgIGFsb25lIFx1MjAxNCB0aGUgb25lIGNvbWJpbmF0aW9uIHRoYXQgaXMgbmV2ZXJcbiAqIGNvcnJlY3QuIEl0IG5ldmVyICp3cml0ZXMqIGBkZWZhdWx0X2Jvb3RgLCB5ZXQgZXZlcnkgcnVuICpyZXN1bWVkKiBpdCwgc28gdGhlXG4gKiBndWVzdCBlYWNoIHJ1biBzdGFydGVkIGZyb20gd2FzIHN0YXRlIG5vdGhpbmcgaGFkIHZhbGlkYXRlZCBzaW5jZSB3aGVuZXZlciBhXG4gKiBodW1hbiBsYXN0IHNhdmVkIGl0LiBNZWFzdXJlZCAyMDI2LTA5LTAzLCBzYW1lIEFWRCBiYWNrIHRvIGJhY2s6XG4gKlxuICogfCBMYXVuY2ggfCBSZXN1bHQgfFxuICogfCAtLS0gfCAtLS0gfFxuICogfCBzbmFwc2hvdCByZXN1bWVkIChgLW5vLXNuYXBzaG90LXNhdmVgIGFsb25lKSB8IGd1ZXN0IGRpZXMgfjkwcyBpbiwgZXZlcnkgdGltZSB8XG4gKiB8IGAtbm8tc25hcHNob3QtbG9hZGAgKGNvbGQpIHwgYm9vdGVkIGluIDUwcywgYWxpdmUgYXQgNjAvMTIwLzE4MC8yNDBzIHxcbiAqXG4gKiBBIHJlc3VtZWQgc25hcHNob3Qgcm90cyBzaWxlbnRseSwgYW5kIHRoZSBmYWlsdXJlIGl0IGV2ZW50dWFsbHkgcHJvZHVjZXMgXHUyMDE0XG4gKiBhIGRldmljZSB0aGF0IHNlcnZlcyBhZGIsIGFjY2VwdHMgYSBzZXNzaW9uIGFuZCB0aGVuIGRyb3BzIGBvZmZsaW5lYCBhXG4gKiBoYWxmLW1pbnV0ZSBsYXRlciBcdTIwMTQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIGNvZGUgcmVncmVzc2lvbi4gU28gdGhlXG4gKiBkZWZhdWx0IGlzIGEgZnVsbCBjb2xkIGJvb3QsIGFuZCBzbmFwc2hvdCByZXVzZSBpcyBhbiBleHBsaWNpdCBvcHQtaW4gdGhhdFxuICogdGFrZXMgKipib3RoKiogaGFsdmVzOiBsb2FkIGFuZCBzYXZlIHRvZ2V0aGVyLCBzbyB0aGUgc25hcHNob3QgdGhlIG5leHQgcnVuXG4gKiByZXN1bWVzIGlzIG9uZSB0aGlzIHJ1biB3cm90ZS5cbiAqXG4gKiAqKlRoZSBlbnZpcm9ubWVudCBxdWlldHMgYG5ldHNpbWRgLCBiZWNhdXNlIG5vdGhpbmcgZWxzZSBjYW4uKiogVGhlIGVtdWxhdG9yXG4gKiBzdGFydHMgYG5ldHNpbWRgLCBpdHMgbmV0d29yayBzaW11bGF0b3IsIGFuZCBuZXRzaW1kIGhhcyBhIGxvb3AgdGhhdCBuZXZlclxuICogY2hlY2tzIGl0cyBob3N0YXBkIHNvY2tldCBmb3IgZW5kLW9mLWZpbGU6IG9uY2UgdGhhdCBzb2NrZXQgY2xvc2VzLCBldmVyeVxuICogcGFzcyBkZWNvZGVzIGFuIGVtcHR5IFdpLUZpIGZyYW1lIGFuZCBsb2dzIHRoZSBmYWlsdXJlLCB3aXRoIG5vIHJhdGUgbGltaXQuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGlkbGUgZW11bGF0b3IncyBuZXRzaW1kIHdyb3RlIDI3OCBHQiBvZiB0aGF0IG9uZSB3YXJuaW5nIHRvXG4gKiBgJVRFTVAlXFxuZXRzaW1kXFxuZXRzaW1fc3RkZXJyLmxvZ2AgaW4gc2l4IGhvdXJzLCBmaWxsaW5nIHRoZSBkcml2ZS4gbmV0c2ltZFxuICogaGFzIG5vIGZsYWcgdG8gcXVpZXQgaXQ7IGl0cyBsb2cgbGV2ZWwgaXMgYFJVU1RfTE9HYCwgcmVhZCBmcm9tIHRoZVxuICogZW52aXJvbm1lbnQgaXQgaW5oZXJpdHMuIFNlZSAqKkw1NioqLlxuICovXG5cbmNvbnN0IEROU19TRVJWRVIgPSAnOC44LjguOCc7XG5cbi8qKlxuICogVGhlIGBSVVNUX0xPR2AgZmlsdGVyIHRoZSBoYXJuZXNzIGhhbmRzIHRoZSBlbXVsYXRvciwgYW5kIHRocm91Z2ggaXQgYG5ldHNpbWRgLlxuICpcbiAqIGBlcnJvcmAgcmF0aGVyIHRoYW4gYSBkaXJlY3RpdmUgYWltZWQgYXQgdGhlIG9uZSBub2lzeSBtb2R1bGU6IG5vdGhpbmcgcmVhZHNcbiAqIG5ldHNpbWQncyBsb2csIHJlYWwgZmFpbHVyZXMgYXJlIHN0aWxsIHJlY29yZGVkLCBhbmQgYSBsZXZlbCBjYW4gYmUgdmVyaWZpZWRcbiAqIGJ5IHRoZSBhYnNlbmNlIG9mIGBuZXRzaW1kIElgIGxpbmVzIHdoZXJlIGEgbW9kdWxlIGRpcmVjdGl2ZSBjb3VsZCBvbmx5IGJlXG4gKiB2ZXJpZmllZCBieSByZXByb2R1Y2luZyB0aGUgZmxvb2QuXG4gKi9cbmV4cG9ydCBjb25zdCBORVRTSU1fTE9HX0ZJTFRFUiA9ICdlcnJvcic7XG5cbmNvbnN0IFJVU1RfTE9HX1ZBUklBQkxFX05BTUUgPSAnUlVTVF9MT0cnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZEVtdWxhdG9yQXJndW1lbnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEVtdWxhdG9yQXJndW1lbnRzUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBbmRyb2lkIFZpcnR1YWwgRGV2aWNlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcnVuIHRoZSBlbXVsYXRvciBoZWFkbGVzcyAoYC1uby13aW5kb3dgKSwgc28gaXQgbmV2ZXIgc3RlYWxzXG4gICAqIGZvY3VzLiBSZXNvbHZlZCBmcm9tIHRoZSBgaXNFbXVsYXRvclZpc2libGVgIHRyYW5zcG9ydCBvcHRpb24uXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZW11bGF0b3IgbWF5IHJlc3VtZSBcdTIwMTQgYW5kIHJlZnJlc2ggXHUyMDE0IHRoZSBBVkQncyBzYXZlZCBib290XG4gICAqIHNuYXBzaG90LiBSZXNvbHZlZCBmcm9tIHRoZSBgc2hvdWxkUmV1c2VFbXVsYXRvclNuYXBzaG90YCB0cmFuc3BvcnQgb3B0aW9uLlxuICAgKlxuICAgKiBgZmFsc2VgICh0aGUgZGVmYXVsdCkgY29sZC1ib290cyBoZXJtZXRpY2FsbHkuIGB0cnVlYCBidXlzIGJhY2sgdGhlIH4xMTJzXG4gICAqIGJvb3Qgb24gYSBwZXJzaXN0ZW50IHJ1bm5lciwgYXQgdGhlIGNvc3Qgb2YgdGVzdCBpc29sYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXVzZVNuYXBzaG90OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiB7QGxpbmsgYnVpbGRFbXVsYXRvckVudmlyb25tZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvckVudmlyb25tZW50IHtcbiAgLyoqXG4gIFRoZSBlbnZpcm9ubWVudCB0byBzcGF3biB0aGUgZW11bGF0b3Igd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBOb2RlSlMuUHJvY2Vzc0VudjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaGFybmVzcyBzZXQgYFJVU1RfTE9HYCBpdHNlbGYuIGBmYWxzZWAgbWVhbnMgdGhlIGNhbGxlcidzXG4gICAqIGVudmlyb25tZW50IGFscmVhZHkgY2FycmllZCBvbmUsIHdoaWNoIHdpbnMgXHUyMDE0IGFuZCB3aGljaCBsZWF2ZXMgbmV0c2ltZCdzXG4gICAqIGxvZyB1bmJvdW5kZWQgaWYgaXQgaXMgYHdhcm5gIG9yIGNoYXR0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNOZXRzaW1Mb2dHdWFyZGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYXJndW1lbnQgbGlzdCBmb3Igc3Bhd25pbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbXVsYXRvciBhcmd1bWVudCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGFyZ3VtZW50IGFycmF5IHRvIHBhc3MgdG8gdGhlIGVtdWxhdG9yIGJpbmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JBcmd1bWVudHMocGFyYW1zOiBCdWlsZEVtdWxhdG9yQXJndW1lbnRzUGFyYW1zKTogc3RyaW5nW10ge1xuICBjb25zdCBlbXVsYXRvckFyZ3VtZW50cyA9IFsnLWF2ZCcsIHBhcmFtcy5hdmROYW1lXTtcbiAgLypcbiAgICogQm90aCBmbGFncyBvciBuZWl0aGVyOiBsb2FkaW5nIHdpdGhvdXQgc2F2aW5nIGlzIHRoZSByZXN1bWUtd2hhdC13ZS1uZXZlci1cbiAgICogd3JvdGUgY29tYmluYXRpb24gdGhpcyBmaWxlJ3MgaGVhZGVyIGV4aXN0cyB0byBydWxlIG91dC5cbiAgICovXG4gIGlmICghcGFyYW1zLnNob3VsZFJldXNlU25hcHNob3QpIHtcbiAgICBlbXVsYXRvckFyZ3VtZW50cy5wdXNoKCctbm8tc25hcHNob3QtbG9hZCcsICctbm8tc25hcHNob3Qtc2F2ZScpO1xuICB9XG4gIGVtdWxhdG9yQXJndW1lbnRzLnB1c2goJy1kbnMtc2VydmVyJywgRE5TX1NFUlZFUik7XG4gIGlmIChwYXJhbXMuaXNIaWRkZW4pIHtcbiAgICBlbXVsYXRvckFyZ3VtZW50cy5wdXNoKCctbm8td2luZG93Jyk7XG4gIH1cbiAgcmV0dXJuIGVtdWxhdG9yQXJndW1lbnRzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZW52aXJvbm1lbnQgZm9yIHNwYXduaW5nIHRoZSBBbmRyb2lkIGVtdWxhdG9yOiB0aGUgY2FsbGVyJ3Mgb3duLFxuICogcGx1cyBhIGBSVVNUX0xPR2AgdGhhdCBrZWVwcyBgbmV0c2ltZGAncyBsb2cgYm91bmRlZC5cbiAqXG4gKiBBbiBleHBsaWNpdCBgUlVTVF9MT0dgIGlzIGxlZnQgYWxvbmUgXHUyMDE0IHNvbWVvbmUgd2hvIHNldCBpdCBhc2tlZCBmb3IgdGhhdFxuICogbGV2ZWwgXHUyMDE0IGFuZCByZXBvcnRlZCBiYWNrIHNvIHRoZSBjYWxsZXIgY2FuIHNheSB0aGUgZ3VhcmQgaXMgb2ZmLlxuICpcbiAqIEBwYXJhbSBiYXNlRW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQgdG8gZXh0ZW5kLCBub3JtYWxseSBgcHJvY2Vzcy5lbnZgLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50LCBhbmQgd2hldGhlciB0aGUgaGFybmVzcyBzdXBwbGllZCB0aGUgbG9nIGZpbHRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JFbnZpcm9ubWVudChiYXNlRW52aXJvbm1lbnQ6IE5vZGVKUy5Qcm9jZXNzRW52KTogRW11bGF0b3JFbnZpcm9ubWVudCB7XG4gIGNvbnN0IGV4aXN0aW5nRmlsdGVyID0gYmFzZUVudmlyb25tZW50W1JVU1RfTE9HX1ZBUklBQkxFX05BTUVdO1xuICBpZiAoZXhpc3RpbmdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZ0ZpbHRlciAhPT0gJycpIHtcbiAgICByZXR1cm4geyBlbnZpcm9ubWVudDogeyAuLi5iYXNlRW52aXJvbm1lbnQgfSwgaXNOZXRzaW1Mb2dHdWFyZGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnZpcm9ubWVudDogeyAuLi5iYXNlRW52aXJvbm1lbnQsIFtSVVNUX0xPR19WQVJJQUJMRV9OQU1FXTogTkVUU0lNX0xPR19GSUxURVIgfSxcbiAgICBpc05ldHNpbUxvZ0d1YXJkZWQ6IHRydWVcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUNBLE1BQU0sYUFBYTtBQVVaLE1BQU0sb0JBQW9CO0FBRWpDLE1BQU0seUJBQXlCO0FBa0R4QixTQUFTLHVCQUF1QixRQUFnRDtBQUNyRixRQUFNLG9CQUFvQixDQUFDLFFBQVEsT0FBTyxPQUFPO0FBS2pELE1BQUksQ0FBQyxPQUFPLHFCQUFxQjtBQUMvQixzQkFBa0IsS0FBSyxxQkFBcUIsbUJBQW1CO0FBQUEsRUFDakU7QUFDQSxvQkFBa0IsS0FBSyxlQUFlLFVBQVU7QUFDaEQsTUFBSSxPQUFPLFVBQVU7QUFDbkIsc0JBQWtCLEtBQUssWUFBWTtBQUFBLEVBQ3JDO0FBQ0EsU0FBTztBQUNUO0FBWU8sU0FBUyx5QkFBeUIsaUJBQXlEO0FBQ2hHLFFBQU0saUJBQWlCLGdCQUFnQixzQkFBc0I7QUFDN0QsTUFBSSxtQkFBbUIsVUFBYSxtQkFBbUIsSUFBSTtBQUN6RCxXQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsZ0JBQWdCLEdBQUcsb0JBQW9CLE1BQU07QUFBQSxFQUMxRTtBQUVBLFNBQU87QUFBQSxJQUNMLGFBQWEsRUFBRSxHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixHQUFHLGtCQUFrQjtBQUFBLElBQy9FLG9CQUFvQjtBQUFBLEVBQ3RCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
56
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWFyZ3VtZW50cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEJ1aWxkcyB0aGUgYXJndW1lbnQgbGlzdCBmb3Igc3Bhd25pbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IuXG4gKlxuICogKipUaGUgaGFybmVzcyBvd25zIHRoZSBzbmFwc2hvdCBpdCBsb2Fkcywgb3IgaXQgbG9hZHMgbm9uZS4qKiBUaGlzIGZpbGUgdXNlZFxuICogdG8gcGFzcyBgLW5vLXNuYXBzaG90LXNhdmVgIGFsb25lIFx1MjAxNCB0aGUgb25lIGNvbWJpbmF0aW9uIHRoYXQgaXMgbmV2ZXJcbiAqIGNvcnJlY3QuIEl0IG5ldmVyICp3cml0ZXMqIGBkZWZhdWx0X2Jvb3RgLCB5ZXQgZXZlcnkgcnVuICpyZXN1bWVkKiBpdCwgc28gdGhlXG4gKiBndWVzdCBlYWNoIHJ1biBzdGFydGVkIGZyb20gd2FzIHN0YXRlIG5vdGhpbmcgaGFkIHZhbGlkYXRlZCBzaW5jZSB3aGVuZXZlciBhXG4gKiBodW1hbiBsYXN0IHNhdmVkIGl0LiBNZWFzdXJlZCAyMDI2LTA5LTAzLCBzYW1lIEFWRCBiYWNrIHRvIGJhY2s6XG4gKlxuICogfCBMYXVuY2ggfCBSZXN1bHQgfFxuICogfCAtLS0gfCAtLS0gfFxuICogfCBzbmFwc2hvdCByZXN1bWVkIChgLW5vLXNuYXBzaG90LXNhdmVgIGFsb25lKSB8IGd1ZXN0IGRpZXMgfjkwcyBpbiwgZXZlcnkgdGltZSB8XG4gKiB8IGAtbm8tc25hcHNob3QtbG9hZGAgKGNvbGQpIHwgYm9vdGVkIGluIDUwcywgYWxpdmUgYXQgNjAvMTIwLzE4MC8yNDBzIHxcbiAqXG4gKiBBIHJlc3VtZWQgc25hcHNob3Qgcm90cyBzaWxlbnRseSwgYW5kIHRoZSBmYWlsdXJlIGl0IGV2ZW50dWFsbHkgcHJvZHVjZXMgXHUyMDE0XG4gKiBhIGRldmljZSB0aGF0IHNlcnZlcyBhZGIsIGFjY2VwdHMgYSBzZXNzaW9uIGFuZCB0aGVuIGRyb3BzIGBvZmZsaW5lYCBhXG4gKiBoYWxmLW1pbnV0ZSBsYXRlciBcdTIwMTQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIGNvZGUgcmVncmVzc2lvbi4gU28gdGhlXG4gKiBkZWZhdWx0IGlzIGEgZnVsbCBjb2xkIGJvb3QsIGFuZCBzbmFwc2hvdCByZXVzZSBpcyBhbiBleHBsaWNpdCBvcHQtaW4gdGhhdFxuICogdGFrZXMgKipib3RoKiogaGFsdmVzOiBsb2FkIGFuZCBzYXZlIHRvZ2V0aGVyLCBzbyB0aGUgc25hcHNob3QgdGhlIG5leHQgcnVuXG4gKiByZXN1bWVzIGlzIG9uZSB0aGlzIHJ1biB3cm90ZS5cbiAqXG4gKiAqKlRoZSBlbnZpcm9ubWVudCBxdWlldHMgYG5ldHNpbWRgLCBiZWNhdXNlIG5vdGhpbmcgZWxzZSBjYW4uKiogVGhlIGVtdWxhdG9yXG4gKiBzdGFydHMgYG5ldHNpbWRgLCBpdHMgbmV0d29yayBzaW11bGF0b3IsIGFuZCBuZXRzaW1kIGhhcyBhIGxvb3AgdGhhdCBuZXZlclxuICogY2hlY2tzIGl0cyBob3N0YXBkIHNvY2tldCBmb3IgZW5kLW9mLWZpbGU6IG9uY2UgdGhhdCBzb2NrZXQgY2xvc2VzLCBldmVyeVxuICogcGFzcyBkZWNvZGVzIGFuIGVtcHR5IFdpLUZpIGZyYW1lIGFuZCBsb2dzIHRoZSBmYWlsdXJlLCB3aXRoIG5vIHJhdGUgbGltaXQuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGlkbGUgZW11bGF0b3IncyBuZXRzaW1kIHdyb3RlIDI3OCBHQiBvZiB0aGF0IG9uZSB3YXJuaW5nIHRvXG4gKiBgJVRFTVAlXFxuZXRzaW1kXFxuZXRzaW1fc3RkZXJyLmxvZ2AgaW4gc2l4IGhvdXJzLCBmaWxsaW5nIHRoZSBkcml2ZS4gbmV0c2ltZFxuICogaGFzIG5vIGZsYWcgdG8gcXVpZXQgaXQ7IGl0cyBsb2cgbGV2ZWwgaXMgYFJVU1RfTE9HYCwgcmVhZCBmcm9tIHRoZVxuICogZW52aXJvbm1lbnQgaXQgaW5oZXJpdHMuIFNlZSAqKkw1NioqLlxuICovXG5cbmNvbnN0IEROU19TRVJWRVIgPSAnOC44LjguOCc7XG5cbi8qKlxuICogVGhlIGBSVVNUX0xPR2AgZmlsdGVyIHRoZSBoYXJuZXNzIGhhbmRzIHRoZSBlbXVsYXRvciwgYW5kIHRocm91Z2ggaXQgYG5ldHNpbWRgLlxuICpcbiAqIGBlcnJvcmAgcmF0aGVyIHRoYW4gYSBkaXJlY3RpdmUgYWltZWQgYXQgdGhlIG9uZSBub2lzeSBtb2R1bGU6IG5vdGhpbmcgcmVhZHNcbiAqIG5ldHNpbWQncyBsb2csIHJlYWwgZmFpbHVyZXMgYXJlIHN0aWxsIHJlY29yZGVkLCBhbmQgYSBsZXZlbCBjYW4gYmUgdmVyaWZpZWRcbiAqIGJ5IHRoZSBhYnNlbmNlIG9mIGBuZXRzaW1kIElgIGxpbmVzIHdoZXJlIGEgbW9kdWxlIGRpcmVjdGl2ZSBjb3VsZCBvbmx5IGJlXG4gKiB2ZXJpZmllZCBieSByZXByb2R1Y2luZyB0aGUgZmxvb2QuXG4gKi9cbmV4cG9ydCBjb25zdCBORVRTSU1fTE9HX0ZJTFRFUiA9ICdlcnJvcic7XG5cbmNvbnN0IFJVU1RfTE9HX1ZBUklBQkxFX05BTUUgPSAnUlVTVF9MT0cnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZEVtdWxhdG9yQXJndW1lbnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEVtdWxhdG9yQXJndW1lbnRzUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBbmRyb2lkIFZpcnR1YWwgRGV2aWNlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcnVuIHRoZSBlbXVsYXRvciBoZWFkbGVzcyAoYC1uby13aW5kb3dgKSwgc28gaXQgbmV2ZXIgc3RlYWxzXG4gICAqIGZvY3VzLiBSZXNvbHZlZCBmcm9tIHRoZSBgaXNFbXVsYXRvclZpc2libGVgIHRyYW5zcG9ydCBvcHRpb24uXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZW11bGF0b3IgbWF5IHJlc3VtZSBcdTIwMTQgYW5kIHJlZnJlc2ggXHUyMDE0IHRoZSBBVkQncyBzYXZlZCBib290XG4gICAqIHNuYXBzaG90LiBSZXNvbHZlZCBmcm9tIHRoZSBgc2hvdWxkUmV1c2VFbXVsYXRvclNuYXBzaG90YCB0cmFuc3BvcnQgb3B0aW9uLlxuICAgKlxuICAgKiBgZmFsc2VgICh0aGUgZGVmYXVsdCkgY29sZC1ib290cyBoZXJtZXRpY2FsbHkuIGB0cnVlYCBidXlzIGJhY2sgdGhlIH4xMTJzXG4gICAqIGJvb3Qgb24gYSBwZXJzaXN0ZW50IHJ1bm5lciwgYXQgdGhlIGNvc3Qgb2YgdGVzdCBpc29sYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXVzZVNuYXBzaG90OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiB7QGxpbmsgYnVpbGRFbXVsYXRvckVudmlyb25tZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvckVudmlyb25tZW50IHtcbiAgLyoqXG4gIFRoZSBlbnZpcm9ubWVudCB0byBzcGF3biB0aGUgZW11bGF0b3Igd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBOb2RlSlMuUHJvY2Vzc0VudjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaGFybmVzcyBzZXQgYFJVU1RfTE9HYCBpdHNlbGYuIGBmYWxzZWAgbWVhbnMgdGhlIGNhbGxlcidzXG4gICAqIGVudmlyb25tZW50IGFscmVhZHkgY2FycmllZCBvbmUsIHdoaWNoIHdpbnMgXHUyMDE0IGFuZCB3aGljaCBsZWF2ZXMgbmV0c2ltZCdzXG4gICAqIGxvZyB1bmJvdW5kZWQgaWYgaXQgaXMgYHdhcm5gIG9yIGNoYXR0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNOZXRzaW1Mb2dHdWFyZGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYXJndW1lbnQgbGlzdCBmb3Igc3Bhd25pbmcgdGhlIEFuZHJvaWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbXVsYXRvciBhcmd1bWVudCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGFyZ3VtZW50IGFycmF5IHRvIHBhc3MgdG8gdGhlIGVtdWxhdG9yIGJpbmFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JBcmd1bWVudHMocGFyYW1zOiBCdWlsZEVtdWxhdG9yQXJndW1lbnRzUGFyYW1zKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgICctYXZkJyxcbiAgICBwYXJhbXMuYXZkTmFtZSxcbiAgICAvKlxuICAgICAqIEJvdGggZmxhZ3Mgb3IgbmVpdGhlcjogbG9hZGluZyB3aXRob3V0IHNhdmluZyBpcyB0aGUgcmVzdW1lLXdoYXQtd2UtbmV2ZXItXG4gICAgICogd3JvdGUgY29tYmluYXRpb24gdGhpcyBmaWxlJ3MgaGVhZGVyIGV4aXN0cyB0byBydWxlIG91dC5cbiAgICAgKi9cbiAgICAuLi4ocGFyYW1zLnNob3VsZFJldXNlU25hcHNob3QgPyBbXSA6IFsnLW5vLXNuYXBzaG90LWxvYWQnLCAnLW5vLXNuYXBzaG90LXNhdmUnXSksXG4gICAgJy1kbnMtc2VydmVyJyxcbiAgICBETlNfU0VSVkVSLFxuICAgIC4uLihwYXJhbXMuaXNIaWRkZW4gPyBbJy1uby13aW5kb3cnXSA6IFtdKVxuICBdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZW52aXJvbm1lbnQgZm9yIHNwYXduaW5nIHRoZSBBbmRyb2lkIGVtdWxhdG9yOiB0aGUgY2FsbGVyJ3Mgb3duLFxuICogcGx1cyBhIGBSVVNUX0xPR2AgdGhhdCBrZWVwcyBgbmV0c2ltZGAncyBsb2cgYm91bmRlZC5cbiAqXG4gKiBBbiBleHBsaWNpdCBgUlVTVF9MT0dgIGlzIGxlZnQgYWxvbmUgXHUyMDE0IHNvbWVvbmUgd2hvIHNldCBpdCBhc2tlZCBmb3IgdGhhdFxuICogbGV2ZWwgXHUyMDE0IGFuZCByZXBvcnRlZCBiYWNrIHNvIHRoZSBjYWxsZXIgY2FuIHNheSB0aGUgZ3VhcmQgaXMgb2ZmLlxuICpcbiAqIEBwYXJhbSBiYXNlRW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQgdG8gZXh0ZW5kLCBub3JtYWxseSBgcHJvY2Vzcy5lbnZgLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50LCBhbmQgd2hldGhlciB0aGUgaGFybmVzcyBzdXBwbGllZCB0aGUgbG9nIGZpbHRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JFbnZpcm9ubWVudChiYXNlRW52aXJvbm1lbnQ6IE5vZGVKUy5Qcm9jZXNzRW52KTogRW11bGF0b3JFbnZpcm9ubWVudCB7XG4gIGNvbnN0IGV4aXN0aW5nRmlsdGVyID0gYmFzZUVudmlyb25tZW50W1JVU1RfTE9HX1ZBUklBQkxFX05BTUVdO1xuICByZXR1cm4gZXhpc3RpbmdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZ0ZpbHRlciAhPT0gJydcbiAgICA/IHsgZW52aXJvbm1lbnQ6IHsgLi4uYmFzZUVudmlyb25tZW50IH0sIGlzTmV0c2ltTG9nR3VhcmRlZDogZmFsc2UgfVxuICAgIDoge1xuICAgICAgZW52aXJvbm1lbnQ6IHsgLi4uYmFzZUVudmlyb25tZW50LCBbUlVTVF9MT0dfVkFSSUFCTEVfTkFNRV06IE5FVFNJTV9MT0dfRklMVEVSIH0sXG4gICAgICBpc05ldHNpbUxvZ0d1YXJkZWQ6IHRydWVcbiAgICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EsTUFBTSxhQUFhO0FBVVosTUFBTSxvQkFBb0I7QUFFakMsTUFBTSx5QkFBeUI7QUFrRHhCLFNBQVMsdUJBQXVCLFFBQWdEO0FBQ3JGLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtQLEdBQUksT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLG1CQUFtQjtBQUFBLElBQy9FO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBSSxPQUFPLFdBQVcsQ0FBQyxZQUFZLElBQUksQ0FBQztBQUFBLEVBQzFDO0FBQ0Y7QUFZTyxTQUFTLHlCQUF5QixpQkFBeUQ7QUFDaEcsUUFBTSxpQkFBaUIsZ0JBQWdCLHNCQUFzQjtBQUM3RCxTQUFPLG1CQUFtQixVQUFhLG1CQUFtQixLQUN0RCxFQUFFLGFBQWEsRUFBRSxHQUFHLGdCQUFnQixHQUFHLG9CQUFvQixNQUFNLElBQ2pFO0FBQUEsSUFDQSxhQUFhLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxzQkFBc0IsR0FBRyxrQkFBa0I7QUFBQSxJQUMvRSxvQkFBb0I7QUFBQSxFQUN0QjtBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -94,18 +94,12 @@ function resolveEmulatorMarkerVerdict(params) {
94
94
  if (selectLiveMarkedPids(params.marker, params.liveEmulatorPids).length === 0) {
95
95
  return "stale-marker";
96
96
  }
97
- if (params.marker.ownerPid !== params.currentPid && params.isOwnerAlive) {
98
- return "in-use-by-live-run";
99
- }
100
- return "harness-leftover";
97
+ return params.marker.ownerPid !== params.currentPid && params.isOwnerAlive ? "in-use-by-live-run" : "harness-leftover";
101
98
  }
102
99
  function selectLiveMarkedPids(marker, liveEmulatorPids) {
103
100
  const livePids = marker.ownedEmulatorPids.filter((pid) => liveEmulatorPids.includes(pid));
104
101
  const { preLaunchEmulatorPids } = marker;
105
- if (preLaunchEmulatorPids === void 0) {
106
- return livePids;
107
- }
108
- return [...livePids, ...liveEmulatorPids.filter((pid) => !preLaunchEmulatorPids.includes(pid) && !livePids.includes(pid))];
102
+ return preLaunchEmulatorPids === void 0 ? livePids : [...livePids, ...liveEmulatorPids.filter((pid) => !preLaunchEmulatorPids.includes(pid) && !livePids.includes(pid))];
109
103
  }
110
104
  function writeEmulatorMarker(params) {
111
105
  const marker = {
@@ -143,10 +137,7 @@ function parseMarker(parsed, avdName) {
143
137
  }
144
138
  const record = parsed;
145
139
  const { avdName: markedAvdName, deviceId, ownedEmulatorPids, ownerPid, preLaunchEmulatorPids, startedAtInMilliseconds } = record;
146
- if (markedAvdName !== avdName || deviceId !== void 0 && typeof deviceId !== "string" || typeof ownerPid !== "number" || typeof startedAtInMilliseconds !== "number" || !checkIsNumberArray(ownedEmulatorPids) || preLaunchEmulatorPids !== void 0 && !checkIsNumberArray(preLaunchEmulatorPids)) {
147
- return void 0;
148
- }
149
- return {
140
+ return markedAvdName !== avdName || deviceId !== void 0 && typeof deviceId !== "string" || typeof ownerPid !== "number" || typeof startedAtInMilliseconds !== "number" || !checkIsNumberArray(ownedEmulatorPids) || preLaunchEmulatorPids !== void 0 && !checkIsNumberArray(preLaunchEmulatorPids) ? void 0 : {
150
141
  avdName,
151
142
  ...deviceId !== void 0 && { deviceId },
152
143
  ownedEmulatorPids,
@@ -166,4 +157,4 @@ function parseMarker(parsed, avdName) {
166
157
  selectLiveMarkedPids,
167
158
  writeEmulatorMarker
168
159
  });
169
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLW1hcmtlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlY29yZHMgd2hpY2ggZW11bGF0b3IgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQgZm9yIGFuIEFWRCwgc28gdGhlIGVtdWxhdG9yXG4gKiBzdGF5cyAqKnRoZSBoYXJuZXNzJ3MqKiB1bnRpbCBhIHN0b3Agb2YgaXQgaGFzIGJlZW4gdmVyaWZpZWQgXHUyMDE0IHdoaWNoZXZlciBydW4sXG4gKiBvciB3aGljaGV2ZXIgcHJvY2VzcyBvZiBhIHJ1biwgZ2V0cyB0byB0aGF0IHN0b3AuXG4gKlxuICogT3duZXJzaGlwIHVzZWQgdG8gbGl2ZSBvbmx5IGluIHRoZSBtZW1vcnkgb2YgdGhlIHJ1biB0aGF0IGxhdW5jaGVkIHRoZVxuICogZW11bGF0b3IsIGFuZCB0aHJlZSBvcmRpbmFyeSB0aGluZ3MgbG9zZSB0aGF0IG1lbW9yeTpcbiAqXG4gKiAtICoqVGhlIGxhdW5jaGluZyBwcm9jZXNzIGlzIGEgdGVzdCB3b3JrZXIuKiogQSBwcm9qZWN0IHdpdGggbm8gdHJhbnNwb3J0XG4gKiAgIGdsb2JhbCBzZXR1cCBjcmVhdGVzIGl0cyB0cmFuc3BvcnQgXHUyMDE0IGFuZCBhdXRvLXN0YXJ0cyBpdHMgZW11bGF0b3IgXHUyMDE0IGluc2lkZSBhXG4gKiAgIFZpdGVzdCB3b3JrZXIsIGFuZCBWaXRlc3QgZW5kcyB3b3JrZXJzIGFicnVwdGx5LCBzbyB0aGUgd29ya2VyJ3MgdGVhcmRvd25cbiAqICAgbmV2ZXIgZ2V0cyBhIHR1cm4uIFRoZSBwcm9qZWN0J3Mgb3duIGdsb2JhbCB0ZWFyZG93biBydW5zLCBidXQgaGVsZCBub1xuICogICBoYW5kbGUgdG8gdGhlIGVtdWxhdG9yLiBUaGlzIHJlcG8ncyBgaW50ZWdyYXRpb24tdGVzdHM6YW5kcm9pZGBcbiAqICAgcHJvamVjdCBpcyBleGFjdGx5IHRoaXMsIGFuZCBvbiAyMDI2LTA5LTEwIHRoZSBlbXVsYXRvciBpdCBsZWZ0IGlkbGUga2VwdFxuICogICBgbmV0c2ltZGAgd3JpdGluZyB1bnRpbCBhIDI3OCBHQiBsb2cgZmlsbGVkIHRoZSBkcml2ZSAoKipMNTYqKikuXG4gKiAtICoqVGhlIHJ1bm5lciBpcyBraWxsZWQqKiBcdTIwMTQgU0lHS0lMTCwgVGFzayBNYW5hZ2VyLCBhbiBJREUgc3RvcCBidXR0b24gXHUyMDE0IGFuZFxuICogICBuZWl0aGVyIHRlYXJkb3duIHBhdGggcnVucyBhdCBhbGwuXG4gKiAtICoqQSBsYXRlciBydW4gYWRvcHRzIHRoZSBsZWZ0b3Zlci4qKiBBIGRldmljZSB0aGlzIHJ1biBkaWQgbm90IHN0YXJ0IGlzXG4gKiAgIGNvcnJlY3RseSBub3QgdGhpcyBydW4ncyB0byBzdG9wIFx1MjAxNCB3aGljaCwgd2l0aG91dCBhIHJlY29yZCwgbWFkZSBldmVyeVxuICogICBsZWZ0b3ZlciBub2JvZHkncyB0byBzdG9wLCBmb3IgZXZlci5cbiAqXG4gKiBUaGUgbWFya2VyIGlzIHRoZSByZWNvcmQ6IGEgc21hbGwgSlNPTiBzZW50aW5lbCBwZXIgQVZEIG5leHQgdG8gdGhlIHNldHVwIGxvY2ssXG4gKiB3cml0dGVuIGZyb20gdGhlIG1vbWVudCB0aGUgZW11bGF0b3IgaXMgbGF1bmNoZWQgYW5kIHJlbW92ZWQgb25seSBieSBhIHZlcmlmaWVkXG4gKiBzdG9wLiBJdCBpcyBkZWxpYmVyYXRlbHkgdG9sZXJhbnQgXHUyMDE0IGEgbWlzc2luZywgdW5yZWFkYWJsZSBvciBtaXNtYXRjaGVkIG1hcmtlclxuICogcmVhZHMgYXMgXCJub3Qgb3Vyc1wiLCB0aGUgc2FtZSBhbnN3ZXIgdGhlIGhhcm5lc3MgZ2F2ZSBiZWZvcmUgbWFya2VycyBleGlzdGVkLlxuICpcbiAqICoqSXQgcmVjb3JkcyBhIGxhdW5jaCwgbm90IGEgYm9vdGVkIGVtdWxhdG9yKiosIGFuZCB0aGF0IGlzIHRoZSBkaWZmZXJlbmNlXG4gKiBiZXR3ZWVuIGNvdmVyaW5nIHRoZSB0aGlyZCBjYXNlIGFib3ZlIGFuZCBjb3ZlcmluZyBpdCBvbmx5IGFmdGVyIHRoZSB+NDVzIGFcbiAqIGNvbGQgYm9vdCB0YWtlcy4gQSBsYXVuY2gtdGltZSBtYXJrZXIgbmFtZXMgdGhlIGBlbXVsYXRvcmAgbGF1bmNoZXIgYWxvbmUgYW5kXG4gKiBubyBkZXZpY2UgeWV0OyB0aGUgZGV2aWNlIGlkIGFycml2ZXMgd2hlbiBvbmUgYXBwZWFycywgYW5kIHRoZSBRRU1VIGJhY2tlbmQnc1xuICogUElEIG9uY2UgdGhlIGJvb3QgY29tcGxldGVzLiBFYWNoIHdyaXRlIGtlZXBzIHRoZSBvcmlnaW5hbCBsYXVuY2ggdGltZSwgc28gdGhlXG4gKiByZWFwZXIgYXJtZWQgYnkgdGhlIGZpcnN0IHN0aWxsIHJlY29nbml6ZXMgdGhlIGxhc3QgYXMgdGhlIHNhbWUgZW11bGF0b3IuXG4gKlxuICogV2hhdCBtYWtlcyBhIG1hcmtlcidzIGVtdWxhdG9yIG91cnMgaXMgZXZpZGVuY2UsIG5vdCB0aGUgZmlsZTogYXQgbGVhc3Qgb25lXG4gKiBQSUQgaXQgcmVjb3JkcyBtdXN0IHN0aWxsIGJlIGEgKipsaXZlIGVtdWxhdG9yIHByb2Nlc3MqKiBvbiB0aGUgaG9zdCAodGhlXG4gKiBjYWxsZXIgaW50ZXJzZWN0cyB3aXRoIHRoZSBwcm9jZXNzIGxpc3RpbmcsIG5vdCBhIGJhcmUgc2lnbmFsLTAgcHJvYmUpLCBzbyBhXG4gKiByZWN5Y2xlZCBQSUQgb3IgYW4gZW11bGF0b3Igc29tZWJvZHkgYm9vdGVkIGJ5IGhhbmQgaXMgbmV2ZXIgbWlzdGFrZW4gZm9yIG9uZVxuICogdGhpcyBoYXJuZXNzIHN0YXJ0ZWQuIEEgbGF1bmNoLXRpbWUgbWFya2VyIHNhdGlzZmllcyB0aGF0IGFzIHdyaXR0ZW4sIGJlY2F1c2VcbiAqIGBlbXVsYXRvci1iYWNrZW5kLnRzYCBjb3VudHMgdGhlIGBlbXVsYXRvcmAgbGF1bmNoZXIgYXMgb25lIG9mIHRoZSBlbXVsYXRvclxuICogcHJvY2Vzc2VzIFx1MjAxNCB3aGljaCBpcyB3aHkgcGhhc2luZyB0aGUgbWFya2VyIG5lZWRlZCBubyBjaGFuZ2UgdG8gdGhlIHZlcmRpY3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHsgSEFSTkVTU19URU1QX0RJUl9OQU1FIH0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgY2hlY2tJc1Byb2Nlc3NBbGl2ZSB9IGZyb20gJy4vcHJvY2Vzcy1saXZlbmVzcy5janMnO1xuXG5jb25zdCBNQVJLRVJfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLmpzb24nO1xuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIGZvciBhbiBBVkQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW11bGF0b3JNYXJrZXIge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgZW11bGF0b3IgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFkYiBzZXJpYWwgb2YgdGhlIGRldmljZSBpdCBzZXJ2ZXMsIGUuZy4gYGVtdWxhdG9yLTU1NTRgLiBBYnNlbnQgd2hpbGVcbiAgICogdGhlIGVtdWxhdG9yIGlzIHN0aWxsIGJvb3RpbmcgYW5kIG5vIGRldmljZSBoYXMgYXBwZWFyZWQgeWV0IFx1MjAxNCBhIG1hcmtlciBpc1xuICAgKiB3cml0dGVuIGZyb20gdGhlIGxhdW5jaCwgYmVmb3JlIHRoZXJlIGlzIGFueXRoaW5nIHRvIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGUgaGFybmVzcyBvd25zOiB0aGUgbGF1bmNoZXIgcGx1cyB0aGUgUUVNVSBiYWNrZW5kXG4gICAqIGl0IGZvcmtlZCBcdTIwMTQgb3IsIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycywgdGhlIGxhdW5jaGVyIGFsb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZWRFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBQSUQgb2YgdGhlIGhhcm5lc3MgcHJvY2VzcyByZXNwb25zaWJsZSBmb3Igc3RvcHBpbmcgdGhlIGVtdWxhdG9yIFx1MjAxNCB0aGUgb25lXG4gICAqIHRoYXQgc3RhcnRlZCBpdCwgb3IgdGhlIG9uZSB0aGF0IGxhdGVyIHRvb2sgaXQgb3ZlciBhcyBhIGxlZnRvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXJQaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGF0IHdlcmUgYWxyZWFkeSBydW5uaW5nIHdoZW4gdGhpcyBsYXVuY2ggc3Bhd25lZFxuICAgKiBpdHMgb3duIFx1MjAxNCBwcmVzZW50IG9ubHkgd2hpbGUgdGhlIHJlY29yZCBpcyBzdGlsbCBwcm92aXNpb25hbCwgaS5lLiBiZWZvcmVcbiAgICogdGhlIGJhY2tlbmQncyBvd24gUElEIGlzIGtub3duLlxuICAgKlxuICAgKiBJdCBpcyB3aGF0IG1ha2VzIGEgbGF1bmNoLXRpbWUgbWFya2VyIGNvbnZpY3RhYmxlIGF0IGFsbC4gS2lsbGluZyB0aGVcbiAgICogbGF1bmNoZXIgZG9lcyAqKm5vdCoqIGtpbGwgdGhlIGBxZW11LXN5c3RlbS0qLWhlYWRsZXNzYCBiYWNrZW5kIGl0IGZvcmtlZFxuICAgKiAoKipMNDYqKiksIHNvIGEgcmVjb3JkIG5hbWluZyB0aGUgbGF1bmNoZXIgYWxvbmUgZ29lcyBzdGFsZSBvdmVyIGFuXG4gICAqIGVtdWxhdG9yIHRoYXQgaXMgc3RpbGwgcnVubmluZyBcdTIwMTQgdGhlIGxlYWsgdGhpcyBtYXJrZXIgZXhpc3RzIHRvIHByZXZlbnQuXG4gICAqIFdpdGggdGhlIHNuYXBzaG90LCBhbnl0aGluZyBpbiB0aGUgaG9zdCdzIGVtdWxhdG9yIGxpc3RpbmcgdGhhdCBpcyBub3QgaW5cbiAgICogaXQgd2FzIGZvcmtlZCBieSB0aGlzIGxhdW5jaCwgd2hpY2ggaXMgdGhlIHNhbWUgcHJlLWxhdW5jaCBkaWZmIHRoZVxuICAgKiBzdWNjZXNzZnVsIHBhdGggdXNlcyAoYGVtdWxhdG9yLWJhY2tlbmQudHNgKSBhbmQgdGhlIHNhbWUgb25lICoqTDQ2KipcbiAgICogcmVxdWlyZXMgaW5zdGVhZCBvZiBhIGBxZW11KmAgc3dlZXAuXG4gICAqL1xuICByZWFkb25seSBwcmVMYXVuY2hFbXVsYXRvclBpZHM/OiByZWFkb25seSBudW1iZXJbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgV2hlbiB0aGUgZW11bGF0b3Igd2FzIHN0YXJ0ZWQgKGBEYXRlLm5vdygpYCBlcG9jaCBtaWxsaXNlY29uZHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IGEgbWFya2VyIHNheXMgYWJvdXQgdGhlIGVtdWxhdG9yIGl0IGRlc2NyaWJlcy5cbiAqXG4gKiAtIGBoYXJuZXNzLWxlZnRvdmVyYCBcdTIwMTQgb3VycywgYW5kIG5vIGxpdmUgaGFybmVzcyBwcm9jZXNzIGlzIHJlc3BvbnNpYmxlIGZvclxuICogICBpdDogdGhlIGNhbGxlciBtYXkgdGFrZSBpdCBvdmVyIG9yIHN0b3AgaXQuXG4gKiAtIGBpbi11c2UtYnktbGl2ZS1ydW5gIFx1MjAxNCBvdXJzLCBidXQgYW5vdGhlciBsaXZlIGhhcm5lc3MgcHJvY2VzcyBvd25zIGl0LlxuICogLSBgc3RhbGUtbWFya2VyYCBcdTIwMTQgbm9uZSBvZiBpdHMgUElEcyBpcyBhIGxpdmUgZW11bGF0b3IgYW55IG1vcmU7IHRoZSBtYXJrZXJcbiAqICAgb3V0bGl2ZWQgaXRzIGVtdWxhdG9yIGFuZCBwcm92ZXMgbm90aGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgRW11bGF0b3JNYXJrZXJWZXJkaWN0ID0gJ2hhcm5lc3MtbGVmdG92ZXInIHwgJ2luLXVzZS1ieS1saXZlLXJ1bicgfCAnc3RhbGUtbWFya2VyJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdFBhcmFtcyB7XG4gIC8qKlxuICBQSUQgb2YgdGhlIHByb2Nlc3MgYXNraW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICBXaGV0aGVyIHRoZSBtYXJrZXIncyBvd25lciBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuXG4gICAqL1xuICByZWFkb25seSBpc093bmVyQWxpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBlbXVsYXRvciBwcm9jZXNzZXMgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGhvc3QuXG4gICAqL1xuICByZWFkb25seSBsaXZlRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgVGhlIG1hcmtlciB0byBqdWRnZS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtlcjogRW11bGF0b3JNYXJrZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHdyaXRlRW11bGF0b3JNYXJrZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlRW11bGF0b3JNYXJrZXJQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgZW11bGF0b3IgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGFkYiBzZXJpYWwgb2YgdGhlIGRldmljZSBpdCBzZXJ2ZXM7IG9taXR0ZWQgd2hpbGUgdGhlIGVtdWxhdG9yIGlzIHN0aWxsIGJvb3RpbmcuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGUgaGFybmVzcyBvd25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZWRFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICBUaGUgZW11bGF0b3IgcHJvY2Vzc2VzIHRoYXQgcHJlZGF0ZSB0aGlzIGxhdW5jaC4gV3JpdHRlbiBvbmx5IHdoaWxlIHRoZSBiYWNrZW5kJ3Mgb3duIFBJRCBpcyBub3Qga25vd24geWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlTGF1bmNoRW11bGF0b3JQaWRzPzogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gIFdoZW4gdGhlIGVtdWxhdG9yIHdhcyBsYXVuY2hlZDsgb21pdHRlZCBcdTIxOTIgbm93LiBBIHRha2VvdmVyIGtlZXBzIHRoZSBvcmlnaW5hbCBsYXVuY2ggdGltZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNheXMgd2hldGhlciBhIG1hcmtlciBzdGlsbCBuYW1lcyBhIHByb2Nlc3MgdGhhdCBpcyBydW5uaW5nLlxuICpcbiAqIEEgc2lnbmFsLTAgcHJvYmUsIG5vdCB0aGUgZW11bGF0b3IgbGlzdGluZyBgcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdGBcbiAqIGludGVyc2VjdHMgd2l0aDogdGhpcyBhbnN3ZXJzIHRoZSBjaGVhcCBxdWVzdGlvbiBcImlzIHRoZXJlIGFueXRoaW5nIGxlZnQgb2ZcbiAqIHdoYXQgdGhpcyBtYXJrZXIgcmVjb3JkZWRcIiwgd2hpY2ggaXMgd2hhdCBkZWNpZGluZyB3aGV0aGVyIGEgbWFya2VyIG1heSBiZVxuICogb3ZlcndyaXR0ZW4gb3IgcmVtb3ZlZCBuZWVkcy4gQ29udmljdGluZyBvbmUgYXMgYW5vdGhlciBydW4ncyBsZWZ0b3ZlciBpcyB0aGVcbiAqIHN0cm9uZ2VyIHF1ZXN0aW9uLCBhbmQgY29zdHMgYSBob3N0IHByb2Nlc3MgbGlzdGluZy5cbiAqXG4gKiBAcGFyYW0gbWFya2VyIC0gVGhlIG1hcmtlciwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIG1hcmtlciByZWNvcmRzIGEgUElEIHRoYXQgaXMgc3RpbGwgYWxpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzTWFya2VkRW11bGF0b3JSdW5uaW5nKG1hcmtlcjogRW11bGF0b3JNYXJrZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1hcmtlcj8ub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBjaGVja0lzUHJvY2Vzc0FsaXZlKHBpZCkpID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIG1hcmtlciBmb3IgYW4gQVZELiBDYWxsZWQgb25jZSBpdHMgZW11bGF0b3IgaXMgdmVyaWZpYWJseSBnb25lLCBzb1xuICogYSBsYXRlciBydW4gY2Fubm90IG1pc3Rha2UgYSByZWN5Y2xlZCBQSUQgZm9yIG91cnMuXG4gKlxuICogQHBhcmFtIGF2ZE5hbWUgLSBUaGUgQVZEIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVtdWxhdG9yTWFya2VyKGF2ZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHJtU3luYyhnZXRNYXJrZXJGaWxlUGF0aChhdmROYW1lKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFtlbXVsYXRvci1tYXJrZXJdIENvdWxkIG5vdCByZW1vdmUgdGhlIG1hcmtlciBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBtYXJrZXIgZm9yIGFuIEFWRCBvbmNlIG5vbmUgb2YgdGhlIHByb2Nlc3NlcyBpdCByZWNvcmRzIGlzIHN0aWxsXG4gKiBydW5uaW5nIFx1MjAxNCB0aGUgZm9ybSBhIHN0b3AgdXNlcy5cbiAqXG4gKiBBIHN0b3AgaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgUElEcyAqKml0Kiogb3duZWQsIHdoaWNoIGlzIG5vdCBhbHdheXMgdGhlXG4gKiBlbXVsYXRvciB0aGUgbWFya2VyIGRlc2NyaWJlczogYSBsYXVuY2ggdGhhdCBkaWVkIGF0IG9uY2UgKHRoZSBlbXVsYXRvcidzIG93blxuICogYFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEYCBGQVRBTCkgb3ducyBub3RoaW5nLCB2ZXJpZmllc1xuICogdHJpdmlhbGx5LCBhbmQgbXVzdCBub3QgZXJhc2UgdGhlIHJlY29yZCBvZiBhbiBlbXVsYXRvciB0aGF0IGlzIHN0aWxsIHVwLlxuICpcbiAqIEBwYXJhbSBhdmROYW1lIC0gVGhlIEFWRCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFbXVsYXRvck1hcmtlcklmU3RvcHBlZChhdmROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGNoZWNrSXNNYXJrZWRFbXVsYXRvclJ1bm5pbmcocmVhZEVtdWxhdG9yTWFya2VyKGF2ZE5hbWUpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNsZWFyRW11bGF0b3JNYXJrZXIoYXZkTmFtZSk7XG59XG5cbi8qKlxuICogTGlzdHMgZXZlcnkgZW11bGF0b3IgbWFya2VyIG9uIHRoaXMgaG9zdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcmVhZGFibGUgbWFya2VycywgaW4gZGlyZWN0b3J5IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEVtdWxhdG9yTWFya2VycygpOiBFbXVsYXRvck1hcmtlcltdIHtcbiAgbGV0IGZpbGVOYW1lczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZmlsZU5hbWVzID0gcmVhZGRpclN5bmMoZ2V0TWFya2VyRGlyZWN0b3J5KCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXJrZXJzOiBFbXVsYXRvck1hcmtlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgaWYgKCFmaWxlTmFtZS5lbmRzV2l0aChNQVJLRVJfRklMRV9TVUZGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXJrZXIgPSByZWFkRW11bGF0b3JNYXJrZXIoZmlsZU5hbWUuc2xpY2UoMCwgLU1BUktFUl9GSUxFX1NVRkZJWC5sZW5ndGgpKTtcbiAgICBpZiAobWFya2VyKSB7XG4gICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFya2Vycztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgbWFya2VyIGZvciBhbiBBVkQuXG4gKlxuICogQHBhcmFtIGF2ZE5hbWUgLSBUaGUgQVZEIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbWFya2VyLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUsIGl0IGlzIHVucmVhZGFibGUsIG9yIGl0IGRlc2NyaWJlcyBhbm90aGVyIEFWRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXVsYXRvck1hcmtlcihhdmROYW1lOiBzdHJpbmcpOiBFbXVsYXRvck1hcmtlciB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZ2V0TWFya2VyRmlsZVBhdGgoYXZkTmFtZSksICd1dGYtOCcpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1hcmtlcihwYXJzZWQsIGF2ZE5hbWUpO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hhdCBhIG1hcmtlciBzYXlzIGFib3V0IHRoZSBlbXVsYXRvciBpdCBkZXNjcmliZXMuXG4gKlxuICogRXZpZGVuY2UgZmlyc3Q6IGEgbWFya2VyIG5vbmUgb2Ygd2hvc2UgUElEcyBpcyBhIGxpdmUgZW11bGF0b3IgaXMgc3RhbGUsXG4gKiB3aG9ldmVyIG93bnMgaXQuIE9ubHkgdGhlbiBkb2VzIG93bmVyc2hpcCBtYXR0ZXIgXHUyMDE0IGFuZCBhIGxpdmUgb3duZXIgdGhhdCBpc1xuICogbm90IHRoZSBjYWxsZXIga2VlcHMgaXQsIGJlY2F1c2UgdGhhdCBydW4gd2lsbCBzdG9wIGl0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1hcmtlciwgdGhlIGhvc3QncyBsaXZlIGVtdWxhdG9yIFBJRHMsIGFuZCB3aG8gaXMgYXNraW5nLlxuICogQHJldHVybnMgVGhlIHZlcmRpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW11bGF0b3JNYXJrZXJWZXJkaWN0KHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdFBhcmFtcyk6IEVtdWxhdG9yTWFya2VyVmVyZGljdCB7XG4gIGlmIChzZWxlY3RMaXZlTWFya2VkUGlkcyhwYXJhbXMubWFya2VyLCBwYXJhbXMubGl2ZUVtdWxhdG9yUGlkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdzdGFsZS1tYXJrZXInO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5tYXJrZXIub3duZXJQaWQgIT09IHBhcmFtcy5jdXJyZW50UGlkICYmIHBhcmFtcy5pc093bmVyQWxpdmUpIHtcbiAgICByZXR1cm4gJ2luLXVzZS1ieS1saXZlLXJ1bic7XG4gIH1cblxuICByZXR1cm4gJ2hhcm5lc3MtbGVmdG92ZXInO1xufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIGVtdWxhdG9yIHByb2Nlc3NlcyBhIG1hcmtlciBjb252aWN0czogdGhlIFBJRHMgaXQgcmVjb3JkcyB0aGF0XG4gKiBhcmUgc3RpbGwgcnVubmluZywgcGx1cyBcdTIwMTQgd2hpbGUgdGhlIHJlY29yZCBpcyBzdGlsbCBwcm92aXNpb25hbCBcdTIwMTQgd2hhdGV2ZXJcbiAqIHRoZSBsYXVuY2ggaXQgZGVzY3JpYmVzIGhhcyBmb3JrZWQgc2luY2UuXG4gKlxuICogVGhlIHNlY29uZCBoYWxmIGlzIHdoYXQgbWFrZXMgYSBsYXVuY2gtdGltZSBtYXJrZXIgdXNhYmxlLiBJdCBuYW1lcyB0aGVcbiAqIGxhdW5jaGVyLCBhbmQga2lsbGluZyB0aGUgbGF1bmNoZXIgbGVhdmVzIHRoZSBRRU1VIGJhY2tlbmQgcnVubmluZ1xuICogKCoqTDQ2KiopLCBzbyB3aXRob3V0IHRoZSBgcHJlTGF1bmNoRW11bGF0b3JQaWRzYCBkaWZmIGEgc3RvcCB3b3VsZCBraWxsIHRoZVxuICogb25lIHByb2Nlc3MgdGhhdCBkb2VzIG5vdCBob2xkIHRoZSBBVkQgYW5kIHRoZSBtYXJrZXIgd291bGQgdGhlbiByZWFkIGFzXG4gKiBzdGFsZSBvdmVyIGEgbGl2ZSBlbXVsYXRvci4gVGhlIGRpZmYgY2xhaW1zIGV4YWN0bHkgd2hhdCB0aGUgc3VjY2Vzc2Z1bCBwYXRoXG4gKiBjbGFpbXMgXHUyMDE0IHRoZSBlbXVsYXRvciBwcm9jZXNzZXMgdGhhdCBhcHBlYXJlZCBhY3Jvc3MgdGhpcyBsYXVuY2ggXHUyMDE0IGFuZCBuZXZlclxuICogb25lIHRoYXQgcHJlZGF0ZXMgaXQuXG4gKlxuICogQHBhcmFtIG1hcmtlciAtIFRoZSBtYXJrZXIuXG4gKiBAcGFyYW0gbGl2ZUVtdWxhdG9yUGlkcyAtIFRoZSBlbXVsYXRvciBwcm9jZXNzZXMgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGhvc3QuXG4gKiBAcmV0dXJucyBUaGUgbWFya2VkIFBJRHMgc3RpbGwgcnVubmluZywgaW4gbWFya2VyIG9yZGVyLCB0aGVuIGFueSB0aGlzIGxhdW5jaCBmb3JrZWQsIGluIGxpc3RlZCBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdExpdmVNYXJrZWRQaWRzKG1hcmtlcjogRW11bGF0b3JNYXJrZXIsIGxpdmVFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCBsaXZlUGlkcyA9IG1hcmtlci5vd25lZEVtdWxhdG9yUGlkcy5maWx0ZXIoKHBpZCkgPT4gbGl2ZUVtdWxhdG9yUGlkcy5pbmNsdWRlcyhwaWQpKTtcbiAgY29uc3QgeyBwcmVMYXVuY2hFbXVsYXRvclBpZHMgfSA9IG1hcmtlcjtcbiAgaWYgKHByZUxhdW5jaEVtdWxhdG9yUGlkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGxpdmVQaWRzO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5saXZlUGlkcywgLi4ubGl2ZUVtdWxhdG9yUGlkcy5maWx0ZXIoKHBpZCkgPT4gIXByZUxhdW5jaEVtdWxhdG9yUGlkcy5pbmNsdWRlcyhwaWQpICYmICFsaXZlUGlkcy5pbmNsdWRlcyhwaWQpKV07XG59XG5cbi8qKlxuICogUmVjb3JkcyB0aGF0IHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIHN0b3BwaW5nIGFuIEFWRCdzXG4gKiBlbXVsYXRvciBcdTIwMTQgb25lIGl0IGp1c3Qgc3RhcnRlZCwgb3IgYSBsZWZ0b3ZlciBpdCBpcyB0YWtpbmcgb3Zlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVtdWxhdG9yJ3MgQVZELCBkZXZpY2UgYW5kIFBJRHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUVtdWxhdG9yTWFya2VyKHBhcmFtczogV3JpdGVFbXVsYXRvck1hcmtlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCBtYXJrZXI6IEVtdWxhdG9yTWFya2VyID0ge1xuICAgIGF2ZE5hbWU6IHBhcmFtcy5hdmROYW1lLFxuICAgIC8vIE9taXR0ZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiBlbXB0eSB3aGlsZSB0aGUgZW11bGF0b3IgaXMgc3RpbGwgYm9vdGluZzogdGhlIHN0b3AgcmVhZHMgaXRzIGFic2VuY2UgYXMgXCJubyBjb25zb2xlIHRvIHNodXQgZG93blwiLlxuICAgIC4uLihwYXJhbXMuZGV2aWNlSWQgIT09IHVuZGVmaW5lZCAmJiB7IGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQgfSksXG4gICAgb3duZWRFbXVsYXRvclBpZHM6IFsuLi5wYXJhbXMub3duZWRFbXVsYXRvclBpZHNdLFxuICAgIG93bmVyUGlkOiBwcm9jZXNzLnBpZCxcbiAgICAvLyBEcm9wcGVkIGJ5IHRoZSB3cml0ZSB0aGF0IGxlYXJucyB0aGUgYmFja2VuZCdzIFBJRDogZnJvbSB0aGVuIG9uIHRoZSBvd25lZCBzZXQgaXMgZXhhY3QgYW5kIGEgZGlmZiB3b3VsZCBvbmx5IHdpZGVuIGl0LlxuICAgIC4uLihwYXJhbXMucHJlTGF1bmNoRW11bGF0b3JQaWRzICE9PSB1bmRlZmluZWQgJiYgeyBwcmVMYXVuY2hFbXVsYXRvclBpZHM6IFsuLi5wYXJhbXMucHJlTGF1bmNoRW11bGF0b3JQaWRzXSB9KSxcbiAgICBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcGFyYW1zLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzID8/IERhdGUubm93KClcbiAgfTtcblxuICB0cnkge1xuICAgIG1rZGlyU3luYyhnZXRNYXJrZXJEaXJlY3RvcnkoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhnZXRNYXJrZXJGaWxlUGF0aChtYXJrZXIuYXZkTmFtZSksIEpTT04uc3RyaW5naWZ5KG1hcmtlcikpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2VtdWxhdG9yLW1hcmtlcl0gQ291bGQgbm90IHJlY29yZCB0aGUgZW11bGF0b3IgZm9yIEFWRCBcIiR7bWFya2VyLmF2ZE5hbWV9XCI6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0lzTnVtYmVyQXJyYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudW1iZXJbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFya2VyRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKHRtcGRpcigpLCBIQVJORVNTX1RFTVBfRElSX05BTUUpO1xufVxuXG5mdW5jdGlvbiBnZXRNYXJrZXJGaWxlUGF0aChhdmROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihnZXRNYXJrZXJEaXJlY3RvcnkoKSwgYCR7YXZkTmFtZX0ke01BUktFUl9GSUxFX1NVRkZJWH1gKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYXJrZXIocGFyc2VkOiB1bmtub3duLCBhdmROYW1lOiBzdHJpbmcpOiBFbXVsYXRvck1hcmtlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkID0gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB7IGF2ZE5hbWU6IG1hcmtlZEF2ZE5hbWUsIGRldmljZUlkLCBvd25lZEVtdWxhdG9yUGlkcywgb3duZXJQaWQsIHByZUxhdW5jaEVtdWxhdG9yUGlkcywgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlY29yZDtcblxuICBpZiAoXG4gICAgbWFya2VkQXZkTmFtZSAhPT0gYXZkTmFtZVxuICAgIHx8IChkZXZpY2VJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkZXZpY2VJZCAhPT0gJ3N0cmluZycpXG4gICAgfHwgdHlwZW9mIG93bmVyUGlkICE9PSAnbnVtYmVyJ1xuICAgIHx8IHR5cGVvZiBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcidcbiAgICB8fCAhY2hlY2tJc051bWJlckFycmF5KG93bmVkRW11bGF0b3JQaWRzKVxuICAgIHx8IChwcmVMYXVuY2hFbXVsYXRvclBpZHMgIT09IHVuZGVmaW5lZCAmJiAhY2hlY2tJc051bWJlckFycmF5KHByZUxhdW5jaEVtdWxhdG9yUGlkcykpXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGF2ZE5hbWUsXG4gICAgLi4uKGRldmljZUlkICE9PSB1bmRlZmluZWQgJiYgeyBkZXZpY2VJZCB9KSxcbiAgICBvd25lZEVtdWxhdG9yUGlkcyxcbiAgICBvd25lclBpZCxcbiAgICAuLi4ocHJlTGF1bmNoRW11bGF0b3JQaWRzICE9PSB1bmRlZmluZWQgJiYgeyBwcmVMYXVuY2hFbXVsYXRvclBpZHMgfSksXG4gICAgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHNcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0Q0EscUJBTU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQUVwQiw4QkFBc0M7QUFDdEMsaUJBQW9CO0FBQ3BCLDhCQUFvQztBQUVwQyxNQUFNLHFCQUFxQjtBQWtJcEIsU0FBUyw2QkFBNkIsUUFBNkM7QUFDeEYsU0FBTyxRQUFRLGtCQUFrQixLQUFLLENBQUMsWUFBUSw2Q0FBb0IsR0FBRyxDQUFDLEtBQUs7QUFDOUU7QUFRTyxTQUFTLG9CQUFvQixTQUF1QjtBQUN6RCxNQUFJO0FBQ0YsK0JBQU8sa0JBQWtCLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsU0FBUyxPQUFnQjtBQUN2Qix3QkFBSSwwREFBMEQsT0FBTyxNQUFNLGdCQUFnQixLQUFLLENBQUMsRUFBRTtBQUFBLEVBQ3JHO0FBQ0Y7QUFhTyxTQUFTLDZCQUE2QixTQUF1QjtBQUNsRSxNQUFJLDZCQUE2QixtQkFBbUIsT0FBTyxDQUFDLEdBQUc7QUFDN0Q7QUFBQSxFQUNGO0FBRUEsc0JBQW9CLE9BQU87QUFDN0I7QUFPTyxTQUFTLHNCQUF3QztBQUN0RCxNQUFJO0FBQ0osTUFBSTtBQUNGLG9CQUFZLDRCQUFZLG1CQUFtQixDQUFDO0FBQUEsRUFDOUMsUUFBUTtBQUNOLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxRQUFNLFVBQTRCLENBQUM7QUFDbkMsYUFBVyxZQUFZLFdBQVc7QUFDaEMsUUFBSSxDQUFDLFNBQVMsU0FBUyxrQkFBa0IsR0FBRztBQUMxQztBQUFBLElBQ0Y7QUFFQSxVQUFNLFNBQVMsbUJBQW1CLFNBQVMsTUFBTSxHQUFHLENBQUMsbUJBQW1CLE1BQU0sQ0FBQztBQUMvRSxRQUFJLFFBQVE7QUFDVixjQUFRLEtBQUssTUFBTTtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsbUJBQW1CLFNBQTZDO0FBQzlFLE1BQUk7QUFDSixNQUFJO0FBQ0YsYUFBUyxLQUFLLFVBQU0sNkJBQWEsa0JBQWtCLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFBQSxFQUN2RSxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFlBQVksUUFBUSxPQUFPO0FBQ3BDO0FBWU8sU0FBUyw2QkFBNkIsUUFBbUU7QUFDOUcsTUFBSSxxQkFBcUIsT0FBTyxRQUFRLE9BQU8sZ0JBQWdCLEVBQUUsV0FBVyxHQUFHO0FBQzdFLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLE9BQU8sYUFBYSxPQUFPLGNBQWMsT0FBTyxjQUFjO0FBQ3ZFLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUO0FBbUJPLFNBQVMscUJBQXFCLFFBQXdCLGtCQUErQztBQUMxRyxRQUFNLFdBQVcsT0FBTyxrQkFBa0IsT0FBTyxDQUFDLFFBQVEsaUJBQWlCLFNBQVMsR0FBRyxDQUFDO0FBQ3hGLFFBQU0sRUFBRSxzQkFBc0IsSUFBSTtBQUNsQyxNQUFJLDBCQUEwQixRQUFXO0FBQ3ZDLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxDQUFDLEdBQUcsVUFBVSxHQUFHLGlCQUFpQixPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMzSDtBQVFPLFNBQVMsb0JBQW9CLFFBQXlDO0FBQzNFLFFBQU0sU0FBeUI7QUFBQSxJQUM3QixTQUFTLE9BQU87QUFBQTtBQUFBLElBRWhCLEdBQUksT0FBTyxhQUFhLFVBQWEsRUFBRSxVQUFVLE9BQU8sU0FBUztBQUFBLElBQ2pFLG1CQUFtQixDQUFDLEdBQUcsT0FBTyxpQkFBaUI7QUFBQSxJQUMvQyxVQUFVLG9CQUFBQSxRQUFRO0FBQUE7QUFBQSxJQUVsQixHQUFJLE9BQU8sMEJBQTBCLFVBQWEsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLE9BQU8scUJBQXFCLEVBQUU7QUFBQSxJQUM3Ryx5QkFBeUIsT0FBTywyQkFBMkIsS0FBSyxJQUFJO0FBQUEsRUFDdEU7QUFFQSxNQUFJO0FBQ0Ysa0NBQVUsbUJBQW1CLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNuRCxzQ0FBYyxrQkFBa0IsT0FBTyxPQUFPLEdBQUcsS0FBSyxVQUFVLE1BQU0sQ0FBQztBQUFBLEVBQ3pFLFNBQVMsT0FBZ0I7QUFDdkIsd0JBQUksNERBQTRELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixLQUFLLENBQUMsRUFBRTtBQUFBLEVBQzlHO0FBQ0Y7QUFFQSxTQUFTLG1CQUFtQixPQUFtQztBQUM3RCxTQUFPLE1BQU0sUUFBUSxLQUFLLEtBQUssTUFBTSxNQUFNLENBQUMsU0FBUyxPQUFPLFNBQVMsUUFBUTtBQUMvRTtBQUVBLFNBQVMsZ0JBQWdCLE9BQXdCO0FBQy9DLFNBQU8saUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUM5RDtBQUVBLFNBQVMscUJBQTZCO0FBQ3BDLGFBQU8sMkJBQUssdUJBQU8sR0FBRyw2Q0FBcUI7QUFDN0M7QUFFQSxTQUFTLGtCQUFrQixTQUF5QjtBQUNsRCxhQUFPLHVCQUFLLG1CQUFtQixHQUFHLEdBQUcsT0FBTyxHQUFHLGtCQUFrQixFQUFFO0FBQ3JFO0FBRUEsU0FBUyxZQUFZLFFBQWlCLFNBQTZDO0FBQ2pGLE1BQUksT0FBTyxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxTQUFTO0FBQ2YsUUFBTSxFQUFFLFNBQVMsZUFBZSxVQUFVLG1CQUFtQixVQUFVLHVCQUF1Qix3QkFBd0IsSUFBSTtBQUUxSCxNQUNFLGtCQUFrQixXQUNkLGFBQWEsVUFBYSxPQUFPLGFBQWEsWUFDL0MsT0FBTyxhQUFhLFlBQ3BCLE9BQU8sNEJBQTRCLFlBQ25DLENBQUMsbUJBQW1CLGlCQUFpQixLQUNwQywwQkFBMEIsVUFBYSxDQUFDLG1CQUFtQixxQkFBcUIsR0FDcEY7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxHQUFJLGFBQWEsVUFBYSxFQUFFLFNBQVM7QUFBQSxJQUN6QztBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUksMEJBQTBCLFVBQWEsRUFBRSxzQkFBc0I7QUFBQSxJQUNuRTtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
160
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLW1hcmtlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlY29yZHMgd2hpY2ggZW11bGF0b3IgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQgZm9yIGFuIEFWRCwgc28gdGhlIGVtdWxhdG9yXG4gKiBzdGF5cyAqKnRoZSBoYXJuZXNzJ3MqKiB1bnRpbCBhIHN0b3Agb2YgaXQgaGFzIGJlZW4gdmVyaWZpZWQgXHUyMDE0IHdoaWNoZXZlciBydW4sXG4gKiBvciB3aGljaGV2ZXIgcHJvY2VzcyBvZiBhIHJ1biwgZ2V0cyB0byB0aGF0IHN0b3AuXG4gKlxuICogT3duZXJzaGlwIHVzZWQgdG8gbGl2ZSBvbmx5IGluIHRoZSBtZW1vcnkgb2YgdGhlIHJ1biB0aGF0IGxhdW5jaGVkIHRoZVxuICogZW11bGF0b3IsIGFuZCB0aHJlZSBvcmRpbmFyeSB0aGluZ3MgbG9zZSB0aGF0IG1lbW9yeTpcbiAqXG4gKiAtICoqVGhlIGxhdW5jaGluZyBwcm9jZXNzIGlzIGEgdGVzdCB3b3JrZXIuKiogQSBwcm9qZWN0IHdpdGggbm8gdHJhbnNwb3J0XG4gKiAgIGdsb2JhbCBzZXR1cCBjcmVhdGVzIGl0cyB0cmFuc3BvcnQgXHUyMDE0IGFuZCBhdXRvLXN0YXJ0cyBpdHMgZW11bGF0b3IgXHUyMDE0IGluc2lkZSBhXG4gKiAgIFZpdGVzdCB3b3JrZXIsIGFuZCBWaXRlc3QgZW5kcyB3b3JrZXJzIGFicnVwdGx5LCBzbyB0aGUgd29ya2VyJ3MgdGVhcmRvd25cbiAqICAgbmV2ZXIgZ2V0cyBhIHR1cm4uIFRoZSBwcm9qZWN0J3Mgb3duIGdsb2JhbCB0ZWFyZG93biBydW5zLCBidXQgaGVsZCBub1xuICogICBoYW5kbGUgdG8gdGhlIGVtdWxhdG9yLiBUaGlzIHJlcG8ncyBgaW50ZWdyYXRpb24tdGVzdHM6YW5kcm9pZGBcbiAqICAgcHJvamVjdCBpcyBleGFjdGx5IHRoaXMsIGFuZCBvbiAyMDI2LTA5LTEwIHRoZSBlbXVsYXRvciBpdCBsZWZ0IGlkbGUga2VwdFxuICogICBgbmV0c2ltZGAgd3JpdGluZyB1bnRpbCBhIDI3OCBHQiBsb2cgZmlsbGVkIHRoZSBkcml2ZSAoKipMNTYqKikuXG4gKiAtICoqVGhlIHJ1bm5lciBpcyBraWxsZWQqKiBcdTIwMTQgU0lHS0lMTCwgVGFzayBNYW5hZ2VyLCBhbiBJREUgc3RvcCBidXR0b24gXHUyMDE0IGFuZFxuICogICBuZWl0aGVyIHRlYXJkb3duIHBhdGggcnVucyBhdCBhbGwuXG4gKiAtICoqQSBsYXRlciBydW4gYWRvcHRzIHRoZSBsZWZ0b3Zlci4qKiBBIGRldmljZSB0aGlzIHJ1biBkaWQgbm90IHN0YXJ0IGlzXG4gKiAgIGNvcnJlY3RseSBub3QgdGhpcyBydW4ncyB0byBzdG9wIFx1MjAxNCB3aGljaCwgd2l0aG91dCBhIHJlY29yZCwgbWFkZSBldmVyeVxuICogICBsZWZ0b3ZlciBub2JvZHkncyB0byBzdG9wLCBmb3IgZXZlci5cbiAqXG4gKiBUaGUgbWFya2VyIGlzIHRoZSByZWNvcmQ6IGEgc21hbGwgSlNPTiBzZW50aW5lbCBwZXIgQVZEIG5leHQgdG8gdGhlIHNldHVwIGxvY2ssXG4gKiB3cml0dGVuIGZyb20gdGhlIG1vbWVudCB0aGUgZW11bGF0b3IgaXMgbGF1bmNoZWQgYW5kIHJlbW92ZWQgb25seSBieSBhIHZlcmlmaWVkXG4gKiBzdG9wLiBJdCBpcyBkZWxpYmVyYXRlbHkgdG9sZXJhbnQgXHUyMDE0IGEgbWlzc2luZywgdW5yZWFkYWJsZSBvciBtaXNtYXRjaGVkIG1hcmtlclxuICogcmVhZHMgYXMgXCJub3Qgb3Vyc1wiLCB0aGUgc2FtZSBhbnN3ZXIgdGhlIGhhcm5lc3MgZ2F2ZSBiZWZvcmUgbWFya2VycyBleGlzdGVkLlxuICpcbiAqICoqSXQgcmVjb3JkcyBhIGxhdW5jaCwgbm90IGEgYm9vdGVkIGVtdWxhdG9yKiosIGFuZCB0aGF0IGlzIHRoZSBkaWZmZXJlbmNlXG4gKiBiZXR3ZWVuIGNvdmVyaW5nIHRoZSB0aGlyZCBjYXNlIGFib3ZlIGFuZCBjb3ZlcmluZyBpdCBvbmx5IGFmdGVyIHRoZSB+NDVzIGFcbiAqIGNvbGQgYm9vdCB0YWtlcy4gQSBsYXVuY2gtdGltZSBtYXJrZXIgbmFtZXMgdGhlIGBlbXVsYXRvcmAgbGF1bmNoZXIgYWxvbmUgYW5kXG4gKiBubyBkZXZpY2UgeWV0OyB0aGUgZGV2aWNlIGlkIGFycml2ZXMgd2hlbiBvbmUgYXBwZWFycywgYW5kIHRoZSBRRU1VIGJhY2tlbmQnc1xuICogUElEIG9uY2UgdGhlIGJvb3QgY29tcGxldGVzLiBFYWNoIHdyaXRlIGtlZXBzIHRoZSBvcmlnaW5hbCBsYXVuY2ggdGltZSwgc28gdGhlXG4gKiByZWFwZXIgYXJtZWQgYnkgdGhlIGZpcnN0IHN0aWxsIHJlY29nbml6ZXMgdGhlIGxhc3QgYXMgdGhlIHNhbWUgZW11bGF0b3IuXG4gKlxuICogV2hhdCBtYWtlcyBhIG1hcmtlcidzIGVtdWxhdG9yIG91cnMgaXMgZXZpZGVuY2UsIG5vdCB0aGUgZmlsZTogYXQgbGVhc3Qgb25lXG4gKiBQSUQgaXQgcmVjb3JkcyBtdXN0IHN0aWxsIGJlIGEgKipsaXZlIGVtdWxhdG9yIHByb2Nlc3MqKiBvbiB0aGUgaG9zdCAodGhlXG4gKiBjYWxsZXIgaW50ZXJzZWN0cyB3aXRoIHRoZSBwcm9jZXNzIGxpc3RpbmcsIG5vdCBhIGJhcmUgc2lnbmFsLTAgcHJvYmUpLCBzbyBhXG4gKiByZWN5Y2xlZCBQSUQgb3IgYW4gZW11bGF0b3Igc29tZWJvZHkgYm9vdGVkIGJ5IGhhbmQgaXMgbmV2ZXIgbWlzdGFrZW4gZm9yIG9uZVxuICogdGhpcyBoYXJuZXNzIHN0YXJ0ZWQuIEEgbGF1bmNoLXRpbWUgbWFya2VyIHNhdGlzZmllcyB0aGF0IGFzIHdyaXR0ZW4sIGJlY2F1c2VcbiAqIGBlbXVsYXRvci1iYWNrZW5kLnRzYCBjb3VudHMgdGhlIGBlbXVsYXRvcmAgbGF1bmNoZXIgYXMgb25lIG9mIHRoZSBlbXVsYXRvclxuICogcHJvY2Vzc2VzIFx1MjAxNCB3aGljaCBpcyB3aHkgcGhhc2luZyB0aGUgbWFya2VyIG5lZWRlZCBubyBjaGFuZ2UgdG8gdGhlIHZlcmRpY3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHsgSEFSTkVTU19URU1QX0RJUl9OQU1FIH0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgY2hlY2tJc1Byb2Nlc3NBbGl2ZSB9IGZyb20gJy4vcHJvY2Vzcy1saXZlbmVzcy5janMnO1xuXG5jb25zdCBNQVJLRVJfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLmpzb24nO1xuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIGZvciBhbiBBVkQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW11bGF0b3JNYXJrZXIge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgZW11bGF0b3IgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFkYiBzZXJpYWwgb2YgdGhlIGRldmljZSBpdCBzZXJ2ZXMsIGUuZy4gYGVtdWxhdG9yLTU1NTRgLiBBYnNlbnQgd2hpbGVcbiAgICogdGhlIGVtdWxhdG9yIGlzIHN0aWxsIGJvb3RpbmcgYW5kIG5vIGRldmljZSBoYXMgYXBwZWFyZWQgeWV0IFx1MjAxNCBhIG1hcmtlciBpc1xuICAgKiB3cml0dGVuIGZyb20gdGhlIGxhdW5jaCwgYmVmb3JlIHRoZXJlIGlzIGFueXRoaW5nIHRvIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGUgaGFybmVzcyBvd25zOiB0aGUgbGF1bmNoZXIgcGx1cyB0aGUgUUVNVSBiYWNrZW5kXG4gICAqIGl0IGZvcmtlZCBcdTIwMTQgb3IsIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycywgdGhlIGxhdW5jaGVyIGFsb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZWRFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBQSUQgb2YgdGhlIGhhcm5lc3MgcHJvY2VzcyByZXNwb25zaWJsZSBmb3Igc3RvcHBpbmcgdGhlIGVtdWxhdG9yIFx1MjAxNCB0aGUgb25lXG4gICAqIHRoYXQgc3RhcnRlZCBpdCwgb3IgdGhlIG9uZSB0aGF0IGxhdGVyIHRvb2sgaXQgb3ZlciBhcyBhIGxlZnRvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXJQaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGF0IHdlcmUgYWxyZWFkeSBydW5uaW5nIHdoZW4gdGhpcyBsYXVuY2ggc3Bhd25lZFxuICAgKiBpdHMgb3duIFx1MjAxNCBwcmVzZW50IG9ubHkgd2hpbGUgdGhlIHJlY29yZCBpcyBzdGlsbCBwcm92aXNpb25hbCwgaS5lLiBiZWZvcmVcbiAgICogdGhlIGJhY2tlbmQncyBvd24gUElEIGlzIGtub3duLlxuICAgKlxuICAgKiBJdCBpcyB3aGF0IG1ha2VzIGEgbGF1bmNoLXRpbWUgbWFya2VyIGNvbnZpY3RhYmxlIGF0IGFsbC4gS2lsbGluZyB0aGVcbiAgICogbGF1bmNoZXIgZG9lcyAqKm5vdCoqIGtpbGwgdGhlIGBxZW11LXN5c3RlbS0qLWhlYWRsZXNzYCBiYWNrZW5kIGl0IGZvcmtlZFxuICAgKiAoKipMNDYqKiksIHNvIGEgcmVjb3JkIG5hbWluZyB0aGUgbGF1bmNoZXIgYWxvbmUgZ29lcyBzdGFsZSBvdmVyIGFuXG4gICAqIGVtdWxhdG9yIHRoYXQgaXMgc3RpbGwgcnVubmluZyBcdTIwMTQgdGhlIGxlYWsgdGhpcyBtYXJrZXIgZXhpc3RzIHRvIHByZXZlbnQuXG4gICAqIFdpdGggdGhlIHNuYXBzaG90LCBhbnl0aGluZyBpbiB0aGUgaG9zdCdzIGVtdWxhdG9yIGxpc3RpbmcgdGhhdCBpcyBub3QgaW5cbiAgICogaXQgd2FzIGZvcmtlZCBieSB0aGlzIGxhdW5jaCwgd2hpY2ggaXMgdGhlIHNhbWUgcHJlLWxhdW5jaCBkaWZmIHRoZVxuICAgKiBzdWNjZXNzZnVsIHBhdGggdXNlcyAoYGVtdWxhdG9yLWJhY2tlbmQudHNgKSBhbmQgdGhlIHNhbWUgb25lICoqTDQ2KipcbiAgICogcmVxdWlyZXMgaW5zdGVhZCBvZiBhIGBxZW11KmAgc3dlZXAuXG4gICAqL1xuICByZWFkb25seSBwcmVMYXVuY2hFbXVsYXRvclBpZHM/OiByZWFkb25seSBudW1iZXJbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgV2hlbiB0aGUgZW11bGF0b3Igd2FzIHN0YXJ0ZWQgKGBEYXRlLm5vdygpYCBlcG9jaCBtaWxsaXNlY29uZHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IGEgbWFya2VyIHNheXMgYWJvdXQgdGhlIGVtdWxhdG9yIGl0IGRlc2NyaWJlcy5cbiAqXG4gKiAtIGBoYXJuZXNzLWxlZnRvdmVyYCBcdTIwMTQgb3VycywgYW5kIG5vIGxpdmUgaGFybmVzcyBwcm9jZXNzIGlzIHJlc3BvbnNpYmxlIGZvclxuICogICBpdDogdGhlIGNhbGxlciBtYXkgdGFrZSBpdCBvdmVyIG9yIHN0b3AgaXQuXG4gKiAtIGBpbi11c2UtYnktbGl2ZS1ydW5gIFx1MjAxNCBvdXJzLCBidXQgYW5vdGhlciBsaXZlIGhhcm5lc3MgcHJvY2VzcyBvd25zIGl0LlxuICogLSBgc3RhbGUtbWFya2VyYCBcdTIwMTQgbm9uZSBvZiBpdHMgUElEcyBpcyBhIGxpdmUgZW11bGF0b3IgYW55IG1vcmU7IHRoZSBtYXJrZXJcbiAqICAgb3V0bGl2ZWQgaXRzIGVtdWxhdG9yIGFuZCBwcm92ZXMgbm90aGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgRW11bGF0b3JNYXJrZXJWZXJkaWN0ID0gJ2hhcm5lc3MtbGVmdG92ZXInIHwgJ2luLXVzZS1ieS1saXZlLXJ1bicgfCAnc3RhbGUtbWFya2VyJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdFBhcmFtcyB7XG4gIC8qKlxuICBQSUQgb2YgdGhlIHByb2Nlc3MgYXNraW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICBXaGV0aGVyIHRoZSBtYXJrZXIncyBvd25lciBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuXG4gICAqL1xuICByZWFkb25seSBpc093bmVyQWxpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBlbXVsYXRvciBwcm9jZXNzZXMgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGhvc3QuXG4gICAqL1xuICByZWFkb25seSBsaXZlRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgVGhlIG1hcmtlciB0byBqdWRnZS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtlcjogRW11bGF0b3JNYXJrZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHdyaXRlRW11bGF0b3JNYXJrZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlRW11bGF0b3JNYXJrZXJQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB0aGUgZW11bGF0b3IgaXMgcnVubmluZy5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGFkYiBzZXJpYWwgb2YgdGhlIGRldmljZSBpdCBzZXJ2ZXM7IG9taXR0ZWQgd2hpbGUgdGhlIGVtdWxhdG9yIGlzIHN0aWxsIGJvb3RpbmcuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgVGhlIGVtdWxhdG9yIHByb2Nlc3NlcyB0aGUgaGFybmVzcyBvd25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZWRFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICBUaGUgZW11bGF0b3IgcHJvY2Vzc2VzIHRoYXQgcHJlZGF0ZSB0aGlzIGxhdW5jaC4gV3JpdHRlbiBvbmx5IHdoaWxlIHRoZSBiYWNrZW5kJ3Mgb3duIFBJRCBpcyBub3Qga25vd24geWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlTGF1bmNoRW11bGF0b3JQaWRzPzogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gIFdoZW4gdGhlIGVtdWxhdG9yIHdhcyBsYXVuY2hlZDsgb21pdHRlZCBcdTIxOTIgbm93LiBBIHRha2VvdmVyIGtlZXBzIHRoZSBvcmlnaW5hbCBsYXVuY2ggdGltZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFNheXMgd2hldGhlciBhIG1hcmtlciBzdGlsbCBuYW1lcyBhIHByb2Nlc3MgdGhhdCBpcyBydW5uaW5nLlxuICpcbiAqIEEgc2lnbmFsLTAgcHJvYmUsIG5vdCB0aGUgZW11bGF0b3IgbGlzdGluZyBgcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdGBcbiAqIGludGVyc2VjdHMgd2l0aDogdGhpcyBhbnN3ZXJzIHRoZSBjaGVhcCBxdWVzdGlvbiBcImlzIHRoZXJlIGFueXRoaW5nIGxlZnQgb2ZcbiAqIHdoYXQgdGhpcyBtYXJrZXIgcmVjb3JkZWRcIiwgd2hpY2ggaXMgd2hhdCBkZWNpZGluZyB3aGV0aGVyIGEgbWFya2VyIG1heSBiZVxuICogb3ZlcndyaXR0ZW4gb3IgcmVtb3ZlZCBuZWVkcy4gQ29udmljdGluZyBvbmUgYXMgYW5vdGhlciBydW4ncyBsZWZ0b3ZlciBpcyB0aGVcbiAqIHN0cm9uZ2VyIHF1ZXN0aW9uLCBhbmQgY29zdHMgYSBob3N0IHByb2Nlc3MgbGlzdGluZy5cbiAqXG4gKiBAcGFyYW0gbWFya2VyIC0gVGhlIG1hcmtlciwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIG1hcmtlciByZWNvcmRzIGEgUElEIHRoYXQgaXMgc3RpbGwgYWxpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzTWFya2VkRW11bGF0b3JSdW5uaW5nKG1hcmtlcjogRW11bGF0b3JNYXJrZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1hcmtlcj8ub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBjaGVja0lzUHJvY2Vzc0FsaXZlKHBpZCkpID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIG1hcmtlciBmb3IgYW4gQVZELiBDYWxsZWQgb25jZSBpdHMgZW11bGF0b3IgaXMgdmVyaWZpYWJseSBnb25lLCBzb1xuICogYSBsYXRlciBydW4gY2Fubm90IG1pc3Rha2UgYSByZWN5Y2xlZCBQSUQgZm9yIG91cnMuXG4gKlxuICogQHBhcmFtIGF2ZE5hbWUgLSBUaGUgQVZEIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVtdWxhdG9yTWFya2VyKGF2ZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHJtU3luYyhnZXRNYXJrZXJGaWxlUGF0aChhdmROYW1lKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2coYFtlbXVsYXRvci1tYXJrZXJdIENvdWxkIG5vdCByZW1vdmUgdGhlIG1hcmtlciBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiAke2dldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBtYXJrZXIgZm9yIGFuIEFWRCBvbmNlIG5vbmUgb2YgdGhlIHByb2Nlc3NlcyBpdCByZWNvcmRzIGlzIHN0aWxsXG4gKiBydW5uaW5nIFx1MjAxNCB0aGUgZm9ybSBhIHN0b3AgdXNlcy5cbiAqXG4gKiBBIHN0b3AgaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgUElEcyAqKml0Kiogb3duZWQsIHdoaWNoIGlzIG5vdCBhbHdheXMgdGhlXG4gKiBlbXVsYXRvciB0aGUgbWFya2VyIGRlc2NyaWJlczogYSBsYXVuY2ggdGhhdCBkaWVkIGF0IG9uY2UgKHRoZSBlbXVsYXRvcidzIG93blxuICogYFJ1bm5pbmcgbXVsdGlwbGUgZW11bGF0b3JzIHdpdGggdGhlIHNhbWUgQVZEYCBGQVRBTCkgb3ducyBub3RoaW5nLCB2ZXJpZmllc1xuICogdHJpdmlhbGx5LCBhbmQgbXVzdCBub3QgZXJhc2UgdGhlIHJlY29yZCBvZiBhbiBlbXVsYXRvciB0aGF0IGlzIHN0aWxsIHVwLlxuICpcbiAqIEBwYXJhbSBhdmROYW1lIC0gVGhlIEFWRCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFbXVsYXRvck1hcmtlcklmU3RvcHBlZChhdmROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGNoZWNrSXNNYXJrZWRFbXVsYXRvclJ1bm5pbmcocmVhZEVtdWxhdG9yTWFya2VyKGF2ZE5hbWUpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNsZWFyRW11bGF0b3JNYXJrZXIoYXZkTmFtZSk7XG59XG5cbi8qKlxuICogTGlzdHMgZXZlcnkgZW11bGF0b3IgbWFya2VyIG9uIHRoaXMgaG9zdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcmVhZGFibGUgbWFya2VycywgaW4gZGlyZWN0b3J5IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEVtdWxhdG9yTWFya2VycygpOiBFbXVsYXRvck1hcmtlcltdIHtcbiAgbGV0IGZpbGVOYW1lczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZmlsZU5hbWVzID0gcmVhZGRpclN5bmMoZ2V0TWFya2VyRGlyZWN0b3J5KCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBtYXJrZXJzOiBFbXVsYXRvck1hcmtlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgaWYgKCFmaWxlTmFtZS5lbmRzV2l0aChNQVJLRVJfRklMRV9TVUZGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXJrZXIgPSByZWFkRW11bGF0b3JNYXJrZXIoZmlsZU5hbWUuc2xpY2UoMCwgLU1BUktFUl9GSUxFX1NVRkZJWC5sZW5ndGgpKTtcbiAgICBpZiAobWFya2VyKSB7XG4gICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFya2Vycztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgbWFya2VyIGZvciBhbiBBVkQuXG4gKlxuICogQHBhcmFtIGF2ZE5hbWUgLSBUaGUgQVZEIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbWFya2VyLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUsIGl0IGlzIHVucmVhZGFibGUsIG9yIGl0IGRlc2NyaWJlcyBhbm90aGVyIEFWRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXVsYXRvck1hcmtlcihhdmROYW1lOiBzdHJpbmcpOiBFbXVsYXRvck1hcmtlciB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZ2V0TWFya2VyRmlsZVBhdGgoYXZkTmFtZSksICd1dGYtOCcpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1hcmtlcihwYXJzZWQsIGF2ZE5hbWUpO1xufVxuXG4vKipcbiAqIERlY2lkZXMgd2hhdCBhIG1hcmtlciBzYXlzIGFib3V0IHRoZSBlbXVsYXRvciBpdCBkZXNjcmliZXMuXG4gKlxuICogRXZpZGVuY2UgZmlyc3Q6IGEgbWFya2VyIG5vbmUgb2Ygd2hvc2UgUElEcyBpcyBhIGxpdmUgZW11bGF0b3IgaXMgc3RhbGUsXG4gKiB3aG9ldmVyIG93bnMgaXQuIE9ubHkgdGhlbiBkb2VzIG93bmVyc2hpcCBtYXR0ZXIgXHUyMDE0IGFuZCBhIGxpdmUgb3duZXIgdGhhdCBpc1xuICogbm90IHRoZSBjYWxsZXIga2VlcHMgaXQsIGJlY2F1c2UgdGhhdCBydW4gd2lsbCBzdG9wIGl0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1hcmtlciwgdGhlIGhvc3QncyBsaXZlIGVtdWxhdG9yIFBJRHMsIGFuZCB3aG8gaXMgYXNraW5nLlxuICogQHJldHVybnMgVGhlIHZlcmRpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW11bGF0b3JNYXJrZXJWZXJkaWN0KHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdFBhcmFtcyk6IEVtdWxhdG9yTWFya2VyVmVyZGljdCB7XG4gIGlmIChzZWxlY3RMaXZlTWFya2VkUGlkcyhwYXJhbXMubWFya2VyLCBwYXJhbXMubGl2ZUVtdWxhdG9yUGlkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdzdGFsZS1tYXJrZXInO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcy5tYXJrZXIub3duZXJQaWQgIT09IHBhcmFtcy5jdXJyZW50UGlkICYmIHBhcmFtcy5pc093bmVyQWxpdmUgPyAnaW4tdXNlLWJ5LWxpdmUtcnVuJyA6ICdoYXJuZXNzLWxlZnRvdmVyJztcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBlbXVsYXRvciBwcm9jZXNzZXMgYSBtYXJrZXIgY29udmljdHM6IHRoZSBQSURzIGl0IHJlY29yZHMgdGhhdFxuICogYXJlIHN0aWxsIHJ1bm5pbmcsIHBsdXMgXHUyMDE0IHdoaWxlIHRoZSByZWNvcmQgaXMgc3RpbGwgcHJvdmlzaW9uYWwgXHUyMDE0IHdoYXRldmVyXG4gKiB0aGUgbGF1bmNoIGl0IGRlc2NyaWJlcyBoYXMgZm9ya2VkIHNpbmNlLlxuICpcbiAqIFRoZSBzZWNvbmQgaGFsZiBpcyB3aGF0IG1ha2VzIGEgbGF1bmNoLXRpbWUgbWFya2VyIHVzYWJsZS4gSXQgbmFtZXMgdGhlXG4gKiBsYXVuY2hlciwgYW5kIGtpbGxpbmcgdGhlIGxhdW5jaGVyIGxlYXZlcyB0aGUgUUVNVSBiYWNrZW5kIHJ1bm5pbmdcbiAqICgqKkw0NioqKSwgc28gd2l0aG91dCB0aGUgYHByZUxhdW5jaEVtdWxhdG9yUGlkc2AgZGlmZiBhIHN0b3Agd291bGQga2lsbCB0aGVcbiAqIG9uZSBwcm9jZXNzIHRoYXQgZG9lcyBub3QgaG9sZCB0aGUgQVZEIGFuZCB0aGUgbWFya2VyIHdvdWxkIHRoZW4gcmVhZCBhc1xuICogc3RhbGUgb3ZlciBhIGxpdmUgZW11bGF0b3IuIFRoZSBkaWZmIGNsYWltcyBleGFjdGx5IHdoYXQgdGhlIHN1Y2Nlc3NmdWwgcGF0aFxuICogY2xhaW1zIFx1MjAxNCB0aGUgZW11bGF0b3IgcHJvY2Vzc2VzIHRoYXQgYXBwZWFyZWQgYWNyb3NzIHRoaXMgbGF1bmNoIFx1MjAxNCBhbmQgbmV2ZXJcbiAqIG9uZSB0aGF0IHByZWRhdGVzIGl0LlxuICpcbiAqIEBwYXJhbSBtYXJrZXIgLSBUaGUgbWFya2VyLlxuICogQHBhcmFtIGxpdmVFbXVsYXRvclBpZHMgLSBUaGUgZW11bGF0b3IgcHJvY2Vzc2VzIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBob3N0LlxuICogQHJldHVybnMgVGhlIG1hcmtlZCBQSURzIHN0aWxsIHJ1bm5pbmcsIGluIG1hcmtlciBvcmRlciwgdGhlbiBhbnkgdGhpcyBsYXVuY2ggZm9ya2VkLCBpbiBsaXN0ZWQgb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RMaXZlTWFya2VkUGlkcyhtYXJrZXI6IEVtdWxhdG9yTWFya2VyLCBsaXZlRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbGl2ZVBpZHMgPSBtYXJrZXIub3duZWRFbXVsYXRvclBpZHMuZmlsdGVyKChwaWQpID0+IGxpdmVFbXVsYXRvclBpZHMuaW5jbHVkZXMocGlkKSk7XG4gIGNvbnN0IHsgcHJlTGF1bmNoRW11bGF0b3JQaWRzIH0gPSBtYXJrZXI7XG4gIHJldHVybiBwcmVMYXVuY2hFbXVsYXRvclBpZHMgPT09IHVuZGVmaW5lZCA/IGxpdmVQaWRzIDogWy4uLmxpdmVQaWRzLCAuLi5saXZlRW11bGF0b3JQaWRzLmZpbHRlcigocGlkKSA9PiAhcHJlTGF1bmNoRW11bGF0b3JQaWRzLmluY2x1ZGVzKHBpZCkgJiYgIWxpdmVQaWRzLmluY2x1ZGVzKHBpZCkpXTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIHRoYXQgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3Igc3RvcHBpbmcgYW4gQVZEJ3NcbiAqIGVtdWxhdG9yIFx1MjAxNCBvbmUgaXQganVzdCBzdGFydGVkLCBvciBhIGxlZnRvdmVyIGl0IGlzIHRha2luZyBvdmVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW11bGF0b3IncyBBVkQsIGRldmljZSBhbmQgUElEcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRW11bGF0b3JNYXJrZXIocGFyYW1zOiBXcml0ZUVtdWxhdG9yTWFya2VyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlcjogRW11bGF0b3JNYXJrZXIgPSB7XG4gICAgYXZkTmFtZTogcGFyYW1zLmF2ZE5hbWUsXG4gICAgLy8gT21pdHRlZCByYXRoZXIgdGhhbiB3cml0dGVuIGVtcHR5IHdoaWxlIHRoZSBlbXVsYXRvciBpcyBzdGlsbCBib290aW5nOiB0aGUgc3RvcCByZWFkcyBpdHMgYWJzZW5jZSBhcyBcIm5vIGNvbnNvbGUgdG8gc2h1dCBkb3duXCIuXG4gICAgLi4uKHBhcmFtcy5kZXZpY2VJZCAhPT0gdW5kZWZpbmVkICYmIHsgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCB9KSxcbiAgICBvd25lZEVtdWxhdG9yUGlkczogWy4uLnBhcmFtcy5vd25lZEVtdWxhdG9yUGlkc10sXG4gICAgb3duZXJQaWQ6IHByb2Nlc3MucGlkLFxuICAgIC8vIERyb3BwZWQgYnkgdGhlIHdyaXRlIHRoYXQgbGVhcm5zIHRoZSBiYWNrZW5kJ3MgUElEOiBmcm9tIHRoZW4gb24gdGhlIG93bmVkIHNldCBpcyBleGFjdCBhbmQgYSBkaWZmIHdvdWxkIG9ubHkgd2lkZW4gaXQuXG4gICAgLi4uKHBhcmFtcy5wcmVMYXVuY2hFbXVsYXRvclBpZHMgIT09IHVuZGVmaW5lZCAmJiB7IHByZUxhdW5jaEVtdWxhdG9yUGlkczogWy4uLnBhcmFtcy5wcmVMYXVuY2hFbXVsYXRvclBpZHNdIH0pLFxuICAgIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBwYXJhbXMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgPz8gRGF0ZS5ub3coKVxuICB9O1xuXG4gIHRyeSB7XG4gICAgbWtkaXJTeW5jKGdldE1hcmtlckRpcmVjdG9yeSgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB3cml0ZUZpbGVTeW5jKGdldE1hcmtlckZpbGVQYXRoKG1hcmtlci5hdmROYW1lKSwgSlNPTi5zdHJpbmdpZnkobWFya2VyKSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nKGBbZW11bGF0b3ItbWFya2VyXSBDb3VsZCBub3QgcmVjb3JkIHRoZSBlbXVsYXRvciBmb3IgQVZEIFwiJHttYXJrZXIuYXZkTmFtZX1cIjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSXNOdW1iZXJBcnJheSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlcltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBnZXRNYXJrZXJEaXJlY3RvcnkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIEhBUk5FU1NfVEVNUF9ESVJfTkFNRSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hcmtlckZpbGVQYXRoKGF2ZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGdldE1hcmtlckRpcmVjdG9yeSgpLCBgJHthdmROYW1lfSR7TUFSS0VSX0ZJTEVfU1VGRklYfWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1hcmtlcihwYXJzZWQ6IHVua25vd24sIGF2ZE5hbWU6IHN0cmluZyk6IEVtdWxhdG9yTWFya2VyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCByZWNvcmQgPSBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHsgYXZkTmFtZTogbWFya2VkQXZkTmFtZSwgZGV2aWNlSWQsIG93bmVkRW11bGF0b3JQaWRzLCBvd25lclBpZCwgcHJlTGF1bmNoRW11bGF0b3JQaWRzLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9ID0gcmVjb3JkO1xuXG4gIHJldHVybiBtYXJrZWRBdmROYW1lICE9PSBhdmROYW1lXG4gICAgICB8fCAoZGV2aWNlSWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGV2aWNlSWQgIT09ICdzdHJpbmcnKVxuICAgICAgfHwgdHlwZW9mIG93bmVyUGlkICE9PSAnbnVtYmVyJ1xuICAgICAgfHwgdHlwZW9mIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJ1xuICAgICAgfHwgIWNoZWNrSXNOdW1iZXJBcnJheShvd25lZEVtdWxhdG9yUGlkcylcbiAgICAgIHx8IChwcmVMYXVuY2hFbXVsYXRvclBpZHMgIT09IHVuZGVmaW5lZCAmJiAhY2hlY2tJc051bWJlckFycmF5KHByZUxhdW5jaEVtdWxhdG9yUGlkcykpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtcbiAgICAgIGF2ZE5hbWUsXG4gICAgICAuLi4oZGV2aWNlSWQgIT09IHVuZGVmaW5lZCAmJiB7IGRldmljZUlkIH0pLFxuICAgICAgb3duZWRFbXVsYXRvclBpZHMsXG4gICAgICBvd25lclBpZCxcbiAgICAgIC4uLihwcmVMYXVuY2hFbXVsYXRvclBpZHMgIT09IHVuZGVmaW5lZCAmJiB7IHByZUxhdW5jaEVtdWxhdG9yUGlkcyB9KSxcbiAgICAgIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzXG4gICAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0Q0EscUJBTU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQUVwQiw4QkFBc0M7QUFDdEMsaUJBQW9CO0FBQ3BCLDhCQUFvQztBQUVwQyxNQUFNLHFCQUFxQjtBQWtJcEIsU0FBUyw2QkFBNkIsUUFBNkM7QUFDeEYsU0FBTyxRQUFRLGtCQUFrQixLQUFLLENBQUMsWUFBUSw2Q0FBb0IsR0FBRyxDQUFDLEtBQUs7QUFDOUU7QUFRTyxTQUFTLG9CQUFvQixTQUF1QjtBQUN6RCxNQUFJO0FBQ0YsK0JBQU8sa0JBQWtCLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFD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
@@ -98,10 +98,7 @@ function parseEmulatorReaperArguments(argv) {
98
98
  return void 0;
99
99
  }
100
100
  const startedAtInMilliseconds = Number(startedAtText);
101
- if (!Number.isSafeInteger(startedAtInMilliseconds) || startedAtInMilliseconds <= 0) {
102
- return void 0;
103
- }
104
- return { avdName, startedAtInMilliseconds };
101
+ return !Number.isSafeInteger(startedAtInMilliseconds) || startedAtInMilliseconds <= 0 ? void 0 : { avdName, startedAtInMilliseconds };
105
102
  }
106
103
  function resolveEmulatorReaperLogOpenFlag(sizeInBytes) {
107
104
  return sizeInBytes !== void 0 && sizeInBytes > EMULATOR_REAPER_LOG_MAX_SIZE_IN_BYTES ? "w" : "a";
@@ -245,4 +242,4 @@ function resolveOwnModuleUrl() {
245
242
  runEmulatorReaper,
246
243
  spawnEmulatorReaper
247
244
  });
248
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5janMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0uY2pzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MuY2pzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLmNqcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJc1BpZEFsaXZlOiAocGlkOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBBVkQncyBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBpZiBhbnkuXG4gICAqL1xuICByZWFkb25seSBtYXJrZXI6IEVtdWxhdG9yTWFya2VyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzcGF3bkVtdWxhdG9yUmVhcGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgZW11bGF0b3Igd2FzIGp1c3QgcmVjb3JkZWQuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFJlY2VpdmVzIHRoZSBhcm1lZCAvIG5vdC1hcm1lZCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICBUaGUgcmVjb3JkZWQgZW11bGF0b3IncyBsYXVuY2ggdGltZSwgYXMgd3JpdHRlbiBpbnRvIGl0cyBtYXJrZXIuXG4gICAqL1xuICByZWFkb25seSBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIHJlYXBlcidzIGFyZ3VtZW50cyBmb3IgaXRzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0gcmVhcGVyQXJndW1lbnRzIC0gV2hhdCB0aGUgcmVhcGVyIHdhdGNoZXMgZm9yLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGluIHRoZSBvcmRlciB7QGxpbmsgcGFyc2VFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gcmVhZHMgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSwgU3RyaW5nKHJlYXBlckFyZ3VtZW50cy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyldO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2NyaXB0IGBub2RlIC1lYCBydW5zIHRvIHN0YXJ0IHRoZSByZWFwZXIuXG4gKlxuICogSXQgYGltcG9ydCgpYHMgdGhlIG1vZHVsZSB3aG9zZSBVUkwgaXMgaXRzIGZpcnN0IGFyZ3VtZW50IGFuZCBoYW5kcyB0aGUgcmVzdFxuICogdG8ge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS4gYGltcG9ydCgpYCByYXRoZXIgdGhhbiBgcmVxdWlyZWAsIGJlY2F1c2UgaXRcbiAqIGxvYWRzIGFsbCB0aHJlZSBmb3JtcyB0aGUgbW9kdWxlIHNoaXBzIGFzIFx1MjAxNCBFU00sIENKUywgYW5kIHRoaXMgcmVwbydzIG93blxuICogYC50c2Agc291cmNlIHVuZGVyIE5vZGUncyB0eXBlIHN0cmlwcGluZy4gQSBDSlMgbW9kdWxlJ3MgbmFtZWQgZXhwb3J0cyBhcmVcbiAqIGZvdW5kIGJ5IE5vZGUncyBzdGF0aWMgYW5hbHlzaXM7IGBkZWZhdWx0YCBpcyB0aGUgZmFsbGJhY2sgd2hlbiB0aGV5IGFyZSBub3QuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJCb290c3RyYXAoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICAnaW1wb3J0KHByb2Nlc3MuYXJndlsxXSkudGhlbigocmVhcGVyTW9kdWxlKSA9PiB7JyxcbiAgICBgICBjb25zdCBydW4gPSByZWFwZXJNb2R1bGUuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX0gPz8gcmVhcGVyTW9kdWxlLmRlZmF1bHQuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX07YCxcbiAgICAnICByZXR1cm4gcnVuKHByb2Nlc3MuYXJndi5zbGljZSgyKSk7JyxcbiAgICAnfSkuY2F0Y2goKGVycm9yKSA9PiB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30pOydcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyBhcyB0aGUgKipyZWxheSoqOiBpdCBzdGFydHMgdGhlIHJlYXBlciBhbmRcbiAqIGV4aXRzIGF0IG9uY2UsIHNvIHRoZSByZWFwZXIgaXMgbGVmdCB3aXRoIGEgZGVhZCBwYXJlbnQgYW5kIG5vIHRyZWUtd2Fsa2luZ1xuICoga2lsbCBvZiB0aGUgcnVuIGNhbiByZWFjaCBpdC4gU2VlIHRoZSByZWxheSBzZWN0aW9uIGluIHRoaXMgbW9kdWxlJ3MgaGVhZGVyXG4gKiBmb3Igd2h5IHRoYXQgaW5kaXJlY3Rpb24gZXhpc3RzIGF0IGFsbC5cbiAqXG4gKiBJdHMgb3duIGFyZ3VtZW50cyBhcmUgdGhlIHJlYXBlcidzIHdob2xlIGNvbW1hbmQgbGluZSBcdTIwMTQgdGhlIGJvb3RzdHJhcCBzY3JpcHRcbiAqIGZpcnN0LCB0aGVuIGV2ZXJ5dGhpbmcgdGhhdCBib290c3RyYXAgcmVhZHMgXHUyMDE0IHNvIHRoZSByZWxheSBuZXZlciBoYXMgdG8ga25vd1xuICogd2hhdCBhbnkgb2YgdGhlbSBtZWFuLiBJdCBoYW5kcyB0aGUgcmVhcGVyIGl0cyBvd24gc3Rkb3V0IGFuZCBzdGRlcnIsIHdoaWNoXG4gKiBhcmUgdGhlIGNhcHBlZCBsb2cgZmlsZSB0aGUgc3Bhd25lciBvcGVuZWQsIHNvIHRoZSBsb2cgaXMgdW5hZmZlY3RlZCBieSB0aGVcbiAqIGV4dHJhIGhvcC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2NvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7JyxcbiAgICAndHJ5IHsnLFxuICAgICcgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW1wiLWVcIiwgcHJvY2Vzcy5hcmd2WzFdLCAuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMildLCB7JyxcbiAgICAnICAgIGRldGFjaGVkOiB0cnVlLCcsXG4gICAgJyAgICBzdGRpbzogW1wiaWdub3JlXCIsIDEsIDJdLCcsXG4gICAgJyAgICB3aW5kb3dzSGlkZTogdHJ1ZScsXG4gICAgJyAgfSk7JyxcbiAgICAnICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9KTsnLFxuICAgICcgIGNoaWxkLnVucmVmKCk7JyxcbiAgICAnfSBjYXRjaCAoZXJyb3IpIHsnLFxuICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOycsXG4gICAgJyAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7JyxcbiAgICAnfSdcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSByZWFwZXIncyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgbW9kdWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhleSBhcmUgbm90IHRoZSB0d28ge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyaXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndjogcmVhZG9ubHkgc3RyaW5nW10pOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFthdmROYW1lLCBzdGFydGVkQXRUZXh0LCAuLi5yZXN0XSA9IGFyZ3Y7XG4gIGlmICghYXZkTmFtZSB8fCBzdGFydGVkQXRUZXh0ID09PSB1bmRlZmluZWQgfHwgcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzID0gTnVtYmVyKHN0YXJ0ZWRBdFRleHQpO1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB8fCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGF2ZE5hbWUsIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH07XG59XG5cbi8qKlxuICogRGVjaWRlcyBob3cgdGhlIHJlYXBlciBsb2cgaXMgb3BlbmVkLCBzbyBpdCBjYW4gbmV2ZXIgZ3JvdyB3aXRob3V0IGJvdW5kLlxuICpcbiAqIEBwYXJhbSBzaXplSW5CeXRlcyAtIFRoZSBsb2cncyBjdXJyZW50IHNpemUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqIEByZXR1cm5zIGAnYSdgIHRvIGFwcGVuZCwgb3IgYCd3J2AgdG8gc3RhcnQgaXQgYWZyZXNoIG9uY2UgaXQgaGFzIHBhc3NlZCB0aGUgY2FwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyTG9nT3BlbkZsYWcoc2l6ZUluQnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6ICdhJyB8ICd3JyB7XG4gIHJldHVybiBzaXplSW5CeXRlcyAhPT0gdW5kZWZpbmVkICYmIHNpemVJbkJ5dGVzID4gRU1VTEFUT1JfUkVBUEVSX0xPR19NQVhfU0laRV9JTl9CWVRFUyA/ICd3JyA6ICdhJztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoYXQgdGhlIG1hcmtlciBzYXlzIHRoZSByZWFwZXIgc2hvdWxkIGRvIG5leHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBhbmQgdGhlIGVtdWxhdG9yIHRoZSByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAqIEByZXR1cm5zIFRoZSB2ZXJkaWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2gocGFyYW1zOiBSZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaFBhcmFtcyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgY29uc3QgeyBtYXJrZXIgfSA9IHBhcmFtcztcbiAgaWYgKG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdlbXVsYXRvci1zdG9wcGVkJztcbiAgfVxuXG4gIGlmIChtYXJrZXIuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgIT09IHBhcmFtcy5hcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB7XG4gICAgcmV0dXJuICdzdXBlcnNlZGVkJztcbiAgfVxuXG4gIC8qXG4gICAqIEEgbGF1bmNoLXRpbWUgbWFya2VyJ3MgUElEIGxpc3QgaXMgZGVsaWJlcmF0ZWx5IGluY29tcGxldGUgXHUyMDE0IGl0IG5hbWVzIHRoZVxuICAgKiBsYXVuY2hlciwgYW5kIHRoZSBiYWNrZW5kIGl0IGZvcmtzIGlzIGlkZW50aWZpZWQgYnkgdGhlIHByZS1sYXVuY2ggZGlmZixcbiAgICogd2hpY2ggY29zdHMgYSBob3N0IHByb2Nlc3MgbGlzdGluZyB0aGlzIHBvbGwgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1ha2UuXG4gICAqIFNvIGl0IGlzIG5ldmVyIHJlYWQgYXMgc3RvcHBlZCBmcm9tIFBJRHMgYWxvbmU6IHRoZSByZWNsYWltLCB3aGljaCBkb2VzXG4gICAqIG1ha2UgdGhhdCBsaXN0aW5nLCBpcyB3aGF0IGp1ZGdlcyBpdC5cbiAgICovXG4gIGlmIChtYXJrZXIucHJlTGF1bmNoRW11bGF0b3JQaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3dhdGNoJztcbiAgfVxuXG4gIHJldHVybiBtYXJrZXIub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBwYXJhbXMuY2hlY2tJc1BpZEFsaXZlKHBpZCkpID8gJ3dhdGNoJyA6ICdlbXVsYXRvci1zdG9wcGVkJztcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERldGFjaGVkLXByb2Nlc3MgZ2x1ZSBjb3ZlcmVkIGJ5IHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHN1aXRlLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBUaGUgcmVhcGVyIHByb2Nlc3MncyBib2R5OiB3YXRjaGVzIHRoZSBtYXJrZXIgYW5kIHRoZSBsb2NrIHVudGlsIGVpdGhlciB0aGVcbiAqIGVtdWxhdG9yIGlzIGdvbmUgb3Igbm8gcnVuIGhvbGRzIHRoZSBsb2NrLCBhbmQgaW4gdGhlIHNlY29uZCBjYXNlIHN0b3BzIHRoZVxuICogaGFybmVzcydzIGxlZnRvdmVycyB3aGlsZSBob2xkaW5nIGl0LlxuICpcbiAqIEV4cG9ydGVkIGZvciB0aGUgYm9vdHN0cmFwLCB3aGljaCBpcyBpdHMgb25seSBjYWxsZXIuXG4gKlxuICogQHBhcmFtIGFyZ3YgLSBUaGUgcmVhcGVyJ3MgYXJndW1lbnRzLCBhcyB7QGxpbmsgYnVpbGRFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gd3JvdGUgdGhlbS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkVtdWxhdG9yUmVhcGVyKGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlYXBlckFyZ3VtZW50cyA9IHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndik7XG4gIGlmICghcmVhcGVyQXJndW1lbnRzKSB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyXSBSZWZ1c2luZyB0byBydW46IGV4cGVjdGVkIDxhdmROYW1lPiA8c3RhcnRlZEF0SW5NaWxsaXNlY29uZHM+LCBnb3QgJHtKU09OLnN0cmluZ2lmeShhcmd2KX0uYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9ID0gcmVhcGVyQXJndW1lbnRzO1xuICByZWFwZXJMb2coXG4gICAgYFdhdGNoaW5nIHRoZSBlbXVsYXRvciBzdGFydGVkIGF0ICR7bmV3IERhdGUoc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCl9IChyZWFwZXIgUElEICR7U3RyaW5nKHByb2Nlc3MucGlkKX0pOyBpdCBpcyBzdG9wcGVkIG9uY2Ugbm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2suYFxuICApO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCB2ZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgIGlmICh2ZXJkaWN0ICE9PSAnd2F0Y2gnKSB7XG4gICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KHZlcmRpY3QpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbG9jazogU2V0dXBMb2NrIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsb2NrID0gdHJ5QWNxdWlyZVNldHVwTG9jayh7XG4gICAgICAgIGxhYmVsOiBMT0NLX0xBQkVMLFxuICAgICAgICBzY29wZTogQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFLFxuICAgICAgICBzdGFsZUFmdGVyU2lsZW5jZUluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIC8vIEZhaWwgb3BlbjogYSBsb2NrIHRoaXMgcHJvY2VzcyBjYW5ub3QgZXZlbiBsb29rIGF0IGlzIG5vIGV2aWRlbmNlIHRoZSBydW4gaXMgb3Zlci5cbiAgICAgIHJlYXBlckxvZyhgR2l2aW5nIHVwOiB0aGUgc2V0dXAgbG9jayBjb3VsZCBub3QgYmUgcmVhZCAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KS4gVGhlIG5leHQgQW5kcm9pZCBydW4gcmVjbGFpbXMgdGhlIGVtdWxhdG9yIGluc3RlYWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvY2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZSBydW4gbWF5IGhhdmUgZW5kZWQgbm9ybWFsbHkgYmV0d2VlbiB0aGUgbG9vayBhYm92ZSBhbmQgdGhlIGxvY2s6IGl0cyB0ZWFyZG93biB0aGVuIHN0b3BwZWQgdGhlIGVtdWxhdG9yLlxuICAgICAgICBjb25zdCBsb2NrZWRWZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgICAgICBpZiAobG9ja2VkVmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgICAgIHJlYXBlckxvZyhkZXNjcmliZUV4aXQobG9ja2VkVmVyZGljdCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYXBlckxvZygnTm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlIHNldHVwIGxvY2sgYW55IG1vcmUsIHNvIG5vdGhpbmcgaXMgbGVmdCB0byBzdG9wIHRoZSBlbXVsYXRvci4gU3RvcHBpbmcgdGhlIGxlZnRvdmVycyB0aGlzIGhhcm5lc3Mgc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBuZXcgRW11bGF0b3JSZWNsYWltZXIocmVhcGVyTG9nKS5yZWNsYWltTGVmdG92ZXJFbXVsYXRvcnMoeyBzY29wZTogJ2VuZC1vZi1ydW4nIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9jay5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgRU1VTEFUT1JfUkVBUEVSX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYXBlckxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2coYFtlbXVsYXRvci1yZWFwZXI6JHthdmROYW1lfV0gJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZWFwZXIgZm9yIGFuIGVtdWxhdG9yIHRoZSBoYXJuZXNzIGp1c3QgcmVjb3JkZWQgYXMgaXRzIG93biwgd2hlblxuICogYSBsaXZlIHJ1biBob2xkcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2sgXHUyMDE0IGFuZCBzYXlzIHdoaWNoIGl0IGRpZC5cbiAqXG4gKiBOZXZlciB0aHJvd3M6IGEgcmVhcGVyIHRoYXQgY2Fubm90IGJlIHNwYXduZWQgaXMgYSBsb3N0IHNhZmV0eSBuZXQsIG5vdCBhXG4gKiByZWFzb24gdG8gZmFpbCB0aGUgbGF1bmNoIGl0IHdvdWxkIGhhdmUgZ3VhcmRlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJlY29yZGVkIGVtdWxhdG9yLCBhbmQgd2hlcmUgdG8gcmVwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25FbXVsYXRvclJlYXBlcihwYXJhbXM6IFNwYXduRW11bGF0b3JSZWFwZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhdmROYW1lIH0gPSBwYXJhbXM7XG4gIGlmICghY2hlY2tJc1NldHVwTG9ja0hlbGQoQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFKSkge1xuICAgIHBhcmFtcy5sb2coXG4gICAgICBgTm8gZW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IG5vIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jaywgc28gYSByZWFwZXIgY291bGQgbm90IHRlbGwgdGhpcyBydW4gZW5kaW5nIGZyb20gaXQgYmVpbmcga2lsbGVkLiBJZiB0aGlzIHByb2Nlc3MgaXMga2lsbGVkLCBvbmx5IHRoZSBuZXh0IEFuZHJvaWQgcnVuIG9uIHRoaXMgaG9zdCBzdG9wcyB0aGUgZW11bGF0b3IuYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZVBhdGggPSBqb2luKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCBgJHthdmROYW1lfSR7UkVBUEVSX0xPR19GSUxFX1NVRkZJWH1gKTtcbiAgdHJ5IHtcbiAgICBta2RpclN5bmMoZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IGxvZ0ZpbGVEZXNjcmlwdG9yID0gb3BlblN5bmMobG9nRmlsZVBhdGgsIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHJlYWRGaWxlU2l6ZShsb2dGaWxlUGF0aCkpKTtcbiAgICB0cnkge1xuICAgICAgLypcbiAgICAgICAqIFRocm91Z2ggdGhlIHJlbGF5LCBuZXZlciBzdHJhaWdodCBhdCB0aGUgcmVhcGVyOiBhIHJlYXBlciBzcGF3bmVkIGhlcmVcbiAgICAgICAqIHdvdWxkIGJlIGEgY2hpbGQgb2YgdGhpcyBydW4gYW5kIHdvdWxkIGRpZSB3aXRoIGl0IHVuZGVyIGFueSBraWxsIHRoYXRcbiAgICAgICAqIHdhbGtzIHRoZSBwcm9jZXNzIHRyZWUuIFRoZSByZWxheSBleGl0cyBhdCBvbmNlLCBsZWF2aW5nIHRoZSByZWFwZXIgd2l0aFxuICAgICAgICogYSBkZWFkIHBhcmVudCBhbmQgbm8gZWRnZSBiYWNrIHRvIHRoaXMgcnVuLlxuICAgICAgICovXG4gICAgICBjb25zdCByZWxheSA9IHNwYXduKFxuICAgICAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgICBbXG4gICAgICAgICAgJy1lJyxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXAoKSxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyQm9vdHN0cmFwKCksXG4gICAgICAgICAgcmVzb2x2ZU93bk1vZHVsZVVybCgpLFxuICAgICAgICAgIC4uLmJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcGFyYW1zLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHsgZGV0YWNoZWQ6IHRydWUsIHN0ZGlvOiBbJ2lnbm9yZScsIGxvZ0ZpbGVEZXNjcmlwdG9yLCBsb2dGaWxlRGVzY3JpcHRvcl0sIHdpbmRvd3NIaWRlOiB0cnVlIH1cbiAgICAgICk7XG4gICAgICByZWxheS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBwYXJhbXMubG9nKGBUaGUgZW11bGF0b3IgcmVhcGVyIHJlbGF5IGZvciBBVkQgXCIke2F2ZE5hbWV9XCIgZmFpbGVkIHRvIHN0YXJ0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICAgIHJlbGF5LnVucmVmKCk7XG4gICAgICBwYXJhbXMubG9nKFxuICAgICAgICBgRW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IGlmIHRoaXMgcnVuIGlzIGtpbGxlZCBcdTIwMTQgYSBwcm9jZXNzLXRyZWUga2lsbCBpbmNsdWRlZCwgc2luY2UgdGhlIHJlYXBlciBpcyBzdGFydGVkIHRocm91Z2ggYSByZWxheSB0aGF0IGV4aXRzIGF0IG9uY2UgXHUyMDE0IGl0IHN0b3BzIHRoZSBlbXVsYXRvciBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLiBJdHMgUElEIGlzIHRoZSBmaXJzdCBsaW5lIG9mIGl0cyBsb2c6ICR7bG9nRmlsZVBhdGh9YFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xvc2VTeW5jKGxvZ0ZpbGVEZXNjcmlwdG9yKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgcGFyYW1zLmxvZyhgQ291bGQgbm90IGFybSB0aGUgZW11bGF0b3IgcmVhcGVyIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRXhpdCh2ZXJkaWN0OiBFeGNsdWRlPEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0LCAnd2F0Y2gnPik6IHN0cmluZyB7XG4gIHJldHVybiB2ZXJkaWN0ID09PSAnc3VwZXJzZWRlZCdcbiAgICA/ICdUaGUgbWFya2VyIG5vdyByZWNvcmRzIGEgbGF0ZXIgZW11bGF0b3Igb2YgdGhpcyBBVkQsIHdoaWNoIGhhcyBpdHMgb3duIHJlYXBlcjsgbm90aGluZyBsZWZ0IHRvIHdhdGNoLidcbiAgICA6ICdUaGUgZW11bGF0b3Igd2FzIHN0b3BwZWQ7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nO1xufVxuXG5mdW5jdGlvbiBnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIEhBUk5FU1NfVEVNUF9ESVJfTkFNRSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGaWxlU2l6ZShwYXRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBzdGF0U3luYyhwYXRoKS5zaXplO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgcmV0dXJuIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHtcbiAgICBhcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiByZWFwZXJBcmd1bWVudHMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMsXG4gICAgY2hlY2tJc1BpZEFsaXZlOiBjaGVja0lzUHJvY2Vzc0FsaXZlLFxuICAgIG1hcmtlcjogcmVhZEVtdWxhdG9yTWFya2VyKHJlYXBlckFyZ3VtZW50cy5hdmROYW1lKVxuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGlzIG1vZHVsZSdzIG93biBVUkwgXHUyMDE0IHRoZSBvbmUgdGhlIGJvb3RzdHJhcCBpbXBvcnRzLlxuICpcbiAqIFRoZSBDSlMgYnVpbGQgaGFzIG5vIGBpbXBvcnQubWV0YWAgKGVzYnVpbGQgZW1wdGllcyBpdCksIGJ1dCBpdCBoYXNcbiAqIGBfX2ZpbGVuYW1lYDsgdGhlIEVTTSBidWlsZCBhbmQgdGhlIGAudHNgIHNvdXJjZSBoYXZlIGBpbXBvcnQubWV0YS51cmxgLlxuICpcbiAqIEByZXR1cm5zIFRoZSBVUkwgb2YgdGhpcyBtb2R1bGUgYXMgaXQgaXMgcnVubmluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU93bk1vZHVsZVVybCgpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIF9fZmlsZW5hbWUgPT09ICdzdHJpbmcnID8gcGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmIDogaW1wb3J0Lm1ldGEudXJsO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUVBLGdDQUFzQjtBQUN0QixxQkFLTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIsMEJBQW9C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
245
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5janMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0uY2pzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MuY2pzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLmNqcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJc1BpZEFsaXZlOiAocGlkOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBBVkQncyBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBpZiBhbnkuXG4gICAqL1xuICByZWFkb25seSBtYXJrZXI6IEVtdWxhdG9yTWFya2VyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzcGF3bkVtdWxhdG9yUmVhcGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgZW11bGF0b3Igd2FzIGp1c3QgcmVjb3JkZWQuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFJlY2VpdmVzIHRoZSBhcm1lZCAvIG5vdC1hcm1lZCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICBUaGUgcmVjb3JkZWQgZW11bGF0b3IncyBsYXVuY2ggdGltZSwgYXMgd3JpdHRlbiBpbnRvIGl0cyBtYXJrZXIuXG4gICAqL1xuICByZWFkb25seSBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIHJlYXBlcidzIGFyZ3VtZW50cyBmb3IgaXRzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0gcmVhcGVyQXJndW1lbnRzIC0gV2hhdCB0aGUgcmVhcGVyIHdhdGNoZXMgZm9yLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGluIHRoZSBvcmRlciB7QGxpbmsgcGFyc2VFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gcmVhZHMgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSwgU3RyaW5nKHJlYXBlckFyZ3VtZW50cy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyldO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2NyaXB0IGBub2RlIC1lYCBydW5zIHRvIHN0YXJ0IHRoZSByZWFwZXIuXG4gKlxuICogSXQgYGltcG9ydCgpYHMgdGhlIG1vZHVsZSB3aG9zZSBVUkwgaXMgaXRzIGZpcnN0IGFyZ3VtZW50IGFuZCBoYW5kcyB0aGUgcmVzdFxuICogdG8ge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS4gYGltcG9ydCgpYCByYXRoZXIgdGhhbiBgcmVxdWlyZWAsIGJlY2F1c2UgaXRcbiAqIGxvYWRzIGFsbCB0aHJlZSBmb3JtcyB0aGUgbW9kdWxlIHNoaXBzIGFzIFx1MjAxNCBFU00sIENKUywgYW5kIHRoaXMgcmVwbydzIG93blxuICogYC50c2Agc291cmNlIHVuZGVyIE5vZGUncyB0eXBlIHN0cmlwcGluZy4gQSBDSlMgbW9kdWxlJ3MgbmFtZWQgZXhwb3J0cyBhcmVcbiAqIGZvdW5kIGJ5IE5vZGUncyBzdGF0aWMgYW5hbHlzaXM7IGBkZWZhdWx0YCBpcyB0aGUgZmFsbGJhY2sgd2hlbiB0aGV5IGFyZSBub3QuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJCb290c3RyYXAoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICAnaW1wb3J0KHByb2Nlc3MuYXJndlsxXSkudGhlbigocmVhcGVyTW9kdWxlKSA9PiB7JyxcbiAgICBgICBjb25zdCBydW4gPSByZWFwZXJNb2R1bGUuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX0gPz8gcmVhcGVyTW9kdWxlLmRlZmF1bHQuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX07YCxcbiAgICAnICByZXR1cm4gcnVuKHByb2Nlc3MuYXJndi5zbGljZSgyKSk7JyxcbiAgICAnfSkuY2F0Y2goKGVycm9yKSA9PiB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30pOydcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyBhcyB0aGUgKipyZWxheSoqOiBpdCBzdGFydHMgdGhlIHJlYXBlciBhbmRcbiAqIGV4aXRzIGF0IG9uY2UsIHNvIHRoZSByZWFwZXIgaXMgbGVmdCB3aXRoIGEgZGVhZCBwYXJlbnQgYW5kIG5vIHRyZWUtd2Fsa2luZ1xuICoga2lsbCBvZiB0aGUgcnVuIGNhbiByZWFjaCBpdC4gU2VlIHRoZSByZWxheSBzZWN0aW9uIGluIHRoaXMgbW9kdWxlJ3MgaGVhZGVyXG4gKiBmb3Igd2h5IHRoYXQgaW5kaXJlY3Rpb24gZXhpc3RzIGF0IGFsbC5cbiAqXG4gKiBJdHMgb3duIGFyZ3VtZW50cyBhcmUgdGhlIHJlYXBlcidzIHdob2xlIGNvbW1hbmQgbGluZSBcdTIwMTQgdGhlIGJvb3RzdHJhcCBzY3JpcHRcbiAqIGZpcnN0LCB0aGVuIGV2ZXJ5dGhpbmcgdGhhdCBib290c3RyYXAgcmVhZHMgXHUyMDE0IHNvIHRoZSByZWxheSBuZXZlciBoYXMgdG8ga25vd1xuICogd2hhdCBhbnkgb2YgdGhlbSBtZWFuLiBJdCBoYW5kcyB0aGUgcmVhcGVyIGl0cyBvd24gc3Rkb3V0IGFuZCBzdGRlcnIsIHdoaWNoXG4gKiBhcmUgdGhlIGNhcHBlZCBsb2cgZmlsZSB0aGUgc3Bhd25lciBvcGVuZWQsIHNvIHRoZSBsb2cgaXMgdW5hZmZlY3RlZCBieSB0aGVcbiAqIGV4dHJhIGhvcC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2NvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7JyxcbiAgICAndHJ5IHsnLFxuICAgICcgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW1wiLWVcIiwgcHJvY2Vzcy5hcmd2WzFdLCAuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMildLCB7JyxcbiAgICAnICAgIGRldGFjaGVkOiB0cnVlLCcsXG4gICAgJyAgICBzdGRpbzogW1wiaWdub3JlXCIsIDEsIDJdLCcsXG4gICAgJyAgICB3aW5kb3dzSGlkZTogdHJ1ZScsXG4gICAgJyAgfSk7JyxcbiAgICAnICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9KTsnLFxuICAgICcgIGNoaWxkLnVucmVmKCk7JyxcbiAgICAnfSBjYXRjaCAoZXJyb3IpIHsnLFxuICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOycsXG4gICAgJyAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7JyxcbiAgICAnfSdcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSByZWFwZXIncyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgbW9kdWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhleSBhcmUgbm90IHRoZSB0d28ge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyaXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndjogcmVhZG9ubHkgc3RyaW5nW10pOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFthdmROYW1lLCBzdGFydGVkQXRUZXh0LCAuLi5yZXN0XSA9IGFyZ3Y7XG4gIGlmICghYXZkTmFtZSB8fCBzdGFydGVkQXRUZXh0ID09PSB1bmRlZmluZWQgfHwgcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzID0gTnVtYmVyKHN0YXJ0ZWRBdFRleHQpO1xuICByZXR1cm4gIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB8fCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA8PSAwID8gdW5kZWZpbmVkIDogeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9O1xufVxuXG4vKipcbiAqIERlY2lkZXMgaG93IHRoZSByZWFwZXIgbG9nIGlzIG9wZW5lZCwgc28gaXQgY2FuIG5ldmVyIGdyb3cgd2l0aG91dCBib3VuZC5cbiAqXG4gKiBAcGFyYW0gc2l6ZUluQnl0ZXMgLSBUaGUgbG9nJ3MgY3VycmVudCBzaXplLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUuXG4gKiBAcmV0dXJucyBgJ2EnYCB0byBhcHBlbmQsIG9yIGAndydgIHRvIHN0YXJ0IGl0IGFmcmVzaCBvbmNlIGl0IGhhcyBwYXNzZWQgdGhlIGNhcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHNpemVJbkJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiAnYScgfCAndycge1xuICByZXR1cm4gc2l6ZUluQnl0ZXMgIT09IHVuZGVmaW5lZCAmJiBzaXplSW5CeXRlcyA+IEVNVUxBVE9SX1JFQVBFUl9MT0dfTUFYX1NJWkVfSU5fQllURVMgPyAndycgOiAnYSc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGF0IHRoZSBtYXJrZXIgc2F5cyB0aGUgcmVhcGVyIHNob3VsZCBkbyBuZXh0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbWFya2VyIGFzIGl0IHJlYWRzIG5vdywgYW5kIHRoZSBlbXVsYXRvciB0aGUgcmVhcGVyIHdhcyBhcm1lZCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2hQYXJhbXMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIGNvbnN0IHsgbWFya2VyIH0gPSBwYXJhbXM7XG4gIGlmIChtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnZW11bGF0b3Itc3RvcHBlZCc7XG4gIH1cblxuICBpZiAobWFya2VyLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSBwYXJhbXMuYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kcykge1xuICAgIHJldHVybiAnc3VwZXJzZWRlZCc7XG4gIH1cblxuICAvKlxuICAgKiBBIGxhdW5jaC10aW1lIG1hcmtlcidzIFBJRCBsaXN0IGlzIGRlbGliZXJhdGVseSBpbmNvbXBsZXRlIFx1MjAxNCBpdCBuYW1lcyB0aGVcbiAgICogbGF1bmNoZXIsIGFuZCB0aGUgYmFja2VuZCBpdCBmb3JrcyBpcyBpZGVudGlmaWVkIGJ5IHRoZSBwcmUtbGF1bmNoIGRpZmYsXG4gICAqIHdoaWNoIGNvc3RzIGEgaG9zdCBwcm9jZXNzIGxpc3RpbmcgdGhpcyBwb2xsIGRlbGliZXJhdGVseSBkb2VzIG5vdCBtYWtlLlxuICAgKiBTbyBpdCBpcyBuZXZlciByZWFkIGFzIHN0b3BwZWQgZnJvbSBQSURzIGFsb25lOiB0aGUgcmVjbGFpbSwgd2hpY2ggZG9lc1xuICAgKiBtYWtlIHRoYXQgbGlzdGluZywgaXMgd2hhdCBqdWRnZXMgaXQuXG4gICAqL1xuICBpZiAobWFya2VyLnByZUxhdW5jaEVtdWxhdG9yUGlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd3YXRjaCc7XG4gIH1cblxuICByZXR1cm4gbWFya2VyLm93bmVkRW11bGF0b3JQaWRzLnNvbWUoKHBpZCkgPT4gcGFyYW1zLmNoZWNrSXNQaWRBbGl2ZShwaWQpKSA/ICd3YXRjaCcgOiAnZW11bGF0b3Itc3RvcHBlZCc7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZXRhY2hlZC1wcm9jZXNzIGdsdWUgY292ZXJlZCBieSB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiBzdWl0ZSwgbm90IHVuaXQgdGVzdHMuICovXG5cbi8qKlxuICogVGhlIHJlYXBlciBwcm9jZXNzJ3MgYm9keTogd2F0Y2hlcyB0aGUgbWFya2VyIGFuZCB0aGUgbG9jayB1bnRpbCBlaXRoZXIgdGhlXG4gKiBlbXVsYXRvciBpcyBnb25lIG9yIG5vIHJ1biBob2xkcyB0aGUgbG9jaywgYW5kIGluIHRoZSBzZWNvbmQgY2FzZSBzdG9wcyB0aGVcbiAqIGhhcm5lc3MncyBsZWZ0b3ZlcnMgd2hpbGUgaG9sZGluZyBpdC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGhlIGJvb3RzdHJhcCwgd2hpY2ggaXMgaXRzIG9ubHkgY2FsbGVyLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIHJlYXBlcidzIGFyZ3VtZW50cywgYXMge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyb3RlIHRoZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbXVsYXRvclJlYXBlcihhcmd2OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWFwZXJBcmd1bWVudHMgPSBwYXJzZUVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKGFyZ3YpO1xuICBpZiAoIXJlYXBlckFyZ3VtZW50cykge1xuICAgIGxvZyhgW2VtdWxhdG9yLXJlYXBlcl0gUmVmdXNpbmcgdG8gcnVuOiBleHBlY3RlZCA8YXZkTmFtZT4gPHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzPiwgZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJndil9LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlYXBlckFyZ3VtZW50cztcbiAgcmVhcGVyTG9nKFxuICAgIGBXYXRjaGluZyB0aGUgZW11bGF0b3Igc3RhcnRlZCBhdCAke25ldyBEYXRlKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpfSAocmVhcGVyIFBJRCAke1N0cmluZyhwcm9jZXNzLnBpZCl9KTsgaXQgaXMgc3RvcHBlZCBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLmBcbiAgKTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgdmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICBpZiAodmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgcmVhcGVyTG9nKGRlc2NyaWJlRXhpdCh2ZXJkaWN0KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxvY2s6IFNldHVwTG9jayB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbG9jayA9IHRyeUFjcXVpcmVTZXR1cExvY2soe1xuICAgICAgICBsYWJlbDogTE9DS19MQUJFTCxcbiAgICAgICAgc2NvcGU6IEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgICAgICAgc3RhbGVBZnRlclNpbGVuY2VJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfUkVBUEVSX0xPQ0tfU0lMRU5DRV9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBGYWlsIG9wZW46IGEgbG9jayB0aGlzIHByb2Nlc3MgY2Fubm90IGV2ZW4gbG9vayBhdCBpcyBubyBldmlkZW5jZSB0aGUgcnVuIGlzIG92ZXIuXG4gICAgICByZWFwZXJMb2coYEdpdmluZyB1cDogdGhlIHNldHVwIGxvY2sgY291bGQgbm90IGJlIHJlYWQgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSkuIFRoZSBuZXh0IEFuZHJvaWQgcnVuIHJlY2xhaW1zIHRoZSBlbXVsYXRvciBpbnN0ZWFkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsb2NrKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgcnVuIG1heSBoYXZlIGVuZGVkIG5vcm1hbGx5IGJldHdlZW4gdGhlIGxvb2sgYWJvdmUgYW5kIHRoZSBsb2NrOiBpdHMgdGVhcmRvd24gdGhlbiBzdG9wcGVkIHRoZSBlbXVsYXRvci5cbiAgICAgICAgY29uc3QgbG9ja2VkVmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICAgICAgaWYgKGxvY2tlZFZlcmRpY3QgIT09ICd3YXRjaCcpIHtcbiAgICAgICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KGxvY2tlZFZlcmRpY3QpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWFwZXJMb2coJ05vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSBzZXR1cCBsb2NrIGFueSBtb3JlLCBzbyBub3RoaW5nIGlzIGxlZnQgdG8gc3RvcCB0aGUgZW11bGF0b3IuIFN0b3BwaW5nIHRoZSBsZWZ0b3ZlcnMgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQuLi4nKTtcbiAgICAgICAgYXdhaXQgbmV3IEVtdWxhdG9yUmVjbGFpbWVyKHJlYXBlckxvZykucmVjbGFpbUxlZnRvdmVyRW11bGF0b3JzKHsgc2NvcGU6ICdlbmQtb2YtcnVuJyB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxvY2sucmVsZWFzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFwZXJMb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyOiR7YXZkTmFtZX1dICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgcmVhcGVyIGZvciBhbiBlbXVsYXRvciB0aGUgaGFybmVzcyBqdXN0IHJlY29yZGVkIGFzIGl0cyBvd24sIHdoZW5cbiAqIGEgbGl2ZSBydW4gaG9sZHMgdGhlIGBhbmRyb2lkYCBzZXR1cCBsb2NrIFx1MjAxNCBhbmQgc2F5cyB3aGljaCBpdCBkaWQuXG4gKlxuICogTmV2ZXIgdGhyb3dzOiBhIHJlYXBlciB0aGF0IGNhbm5vdCBiZSBzcGF3bmVkIGlzIGEgbG9zdCBzYWZldHkgbmV0LCBub3QgYVxuICogcmVhc29uIHRvIGZhaWwgdGhlIGxhdW5jaCBpdCB3b3VsZCBoYXZlIGd1YXJkZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZWNvcmRlZCBlbXVsYXRvciwgYW5kIHdoZXJlIHRvIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXduRW11bGF0b3JSZWFwZXIocGFyYW1zOiBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYXZkTmFtZSB9ID0gcGFyYW1zO1xuICBpZiAoIWNoZWNrSXNTZXR1cExvY2tIZWxkKEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSkpIHtcbiAgICBwYXJhbXMubG9nKFxuICAgICAgYE5vIGVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBubyBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2ssIHNvIGEgcmVhcGVyIGNvdWxkIG5vdCB0ZWxsIHRoaXMgcnVuIGVuZGluZyBmcm9tIGl0IGJlaW5nIGtpbGxlZC4gSWYgdGhpcyBwcm9jZXNzIGlzIGtpbGxlZCwgb25seSB0aGUgbmV4dCBBbmRyb2lkIHJ1biBvbiB0aGlzIGhvc3Qgc3RvcHMgdGhlIGVtdWxhdG9yLmBcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gam9pbihnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKSwgYCR7YXZkTmFtZX0ke1JFQVBFUl9MT0dfRklMRV9TVUZGSVh9YCk7XG4gIHRyeSB7XG4gICAgbWtkaXJTeW5jKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBsb2dGaWxlRGVzY3JpcHRvciA9IG9wZW5TeW5jKGxvZ0ZpbGVQYXRoLCByZXNvbHZlRW11bGF0b3JSZWFwZXJMb2dPcGVuRmxhZyhyZWFkRmlsZVNpemUobG9nRmlsZVBhdGgpKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8qXG4gICAgICAgKiBUaHJvdWdoIHRoZSByZWxheSwgbmV2ZXIgc3RyYWlnaHQgYXQgdGhlIHJlYXBlcjogYSByZWFwZXIgc3Bhd25lZCBoZXJlXG4gICAgICAgKiB3b3VsZCBiZSBhIGNoaWxkIG9mIHRoaXMgcnVuIGFuZCB3b3VsZCBkaWUgd2l0aCBpdCB1bmRlciBhbnkga2lsbCB0aGF0XG4gICAgICAgKiB3YWxrcyB0aGUgcHJvY2VzcyB0cmVlLiBUaGUgcmVsYXkgZXhpdHMgYXQgb25jZSwgbGVhdmluZyB0aGUgcmVhcGVyIHdpdGhcbiAgICAgICAqIGEgZGVhZCBwYXJlbnQgYW5kIG5vIGVkZ2UgYmFjayB0byB0aGlzIHJ1bi5cbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVsYXkgPSBzcGF3bihcbiAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgW1xuICAgICAgICAgICctZScsXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCksXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlckJvb3RzdHJhcCgpLFxuICAgICAgICAgIHJlc29sdmVPd25Nb2R1bGVVcmwoKSxcbiAgICAgICAgICAuLi5idWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IHBhcmFtcy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICBdLFxuICAgICAgICB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogWydpZ25vcmUnLCBsb2dGaWxlRGVzY3JpcHRvciwgbG9nRmlsZURlc2NyaXB0b3JdLCB3aW5kb3dzSGlkZTogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgcmVsYXkub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGFyYW1zLmxvZyhgVGhlIGVtdWxhdG9yIHJlYXBlciByZWxheSBmb3IgQVZEIFwiJHthdmROYW1lfVwiIGZhaWxlZCB0byBzdGFydDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gICAgICByZWxheS51bnJlZigpO1xuICAgICAgcGFyYW1zLmxvZyhcbiAgICAgICAgYEVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBpZiB0aGlzIHJ1biBpcyBraWxsZWQgXHUyMDE0IGEgcHJvY2Vzcy10cmVlIGtpbGwgaW5jbHVkZWQsIHNpbmNlIHRoZSByZWFwZXIgaXMgc3RhcnRlZCB0aHJvdWdoIGEgcmVsYXkgdGhhdCBleGl0cyBhdCBvbmNlIFx1MjAxNCBpdCBzdG9wcyB0aGUgZW11bGF0b3Igb25jZSBubyBBbmRyb2lkIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jay4gSXRzIFBJRCBpcyB0aGUgZmlyc3QgbGluZSBvZiBpdHMgbG9nOiAke2xvZ0ZpbGVQYXRofWBcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsb3NlU3luYyhsb2dGaWxlRGVzY3JpcHRvcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHBhcmFtcy5sb2coYENvdWxkIG5vdCBhcm0gdGhlIGVtdWxhdG9yIHJlYXBlciBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZUV4aXQodmVyZGljdDogRXhjbHVkZTxFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCwgJ3dhdGNoJz4pOiBzdHJpbmcge1xuICByZXR1cm4gdmVyZGljdCA9PT0gJ3N1cGVyc2VkZWQnXG4gICAgPyAnVGhlIG1hcmtlciBub3cgcmVjb3JkcyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoaXMgQVZELCB3aGljaCBoYXMgaXRzIG93biByZWFwZXI7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nXG4gICAgOiAnVGhlIGVtdWxhdG9yIHdhcyBzdG9wcGVkOyBub3RoaW5nIGxlZnQgdG8gd2F0Y2guJztcbn1cblxuZnVuY3Rpb24gZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKHRtcGRpcigpLCBIQVJORVNTX1RFTVBfRElSX05BTUUpO1xufVxuXG5mdW5jdGlvbiByZWFkRmlsZVNpemUocGF0aDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RhdFN5bmMocGF0aCkuc2l6ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkV2F0Y2hWZXJkaWN0KHJlYXBlckFyZ3VtZW50czogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIHJldHVybiByZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaCh7XG4gICAgYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcmVhcGVyQXJndW1lbnRzLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzLFxuICAgIGNoZWNrSXNQaWRBbGl2ZTogY2hlY2tJc1Byb2Nlc3NBbGl2ZSxcbiAgICBtYXJrZXI6IHJlYWRFbXVsYXRvck1hcmtlcihyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSlcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhpcyBtb2R1bGUncyBvd24gVVJMIFx1MjAxNCB0aGUgb25lIHRoZSBib290c3RyYXAgaW1wb3J0cy5cbiAqXG4gKiBUaGUgQ0pTIGJ1aWxkIGhhcyBubyBgaW1wb3J0Lm1ldGFgIChlc2J1aWxkIGVtcHRpZXMgaXQpLCBidXQgaXQgaGFzXG4gKiBgX19maWxlbmFtZWA7IHRoZSBFU00gYnVpbGQgYW5kIHRoZSBgLnRzYCBzb3VyY2UgaGF2ZSBgaW1wb3J0Lm1ldGEudXJsYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVVJMIG9mIHRoaXMgbW9kdWxlIGFzIGl0IGlzIHJ1bm5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPd25Nb2R1bGVVcmwoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJyA/IHBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZiA6IGltcG9ydC5tZXRhLnVybDtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVFQSxnQ0FBc0I7QUFDdEIscUJBS087QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQUNwQixzQkFBOEI7QUFLOUIsNkJBQW1D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