appium-adb 8.12.0 → 8.13.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.
- package/build/lib/helpers.js +13 -2
- package/build/lib/logcat.js +1 -1
- package/build/lib/tools/adb-commands.js +9 -5
- package/build/lib/tools/apk-utils.js +2 -2
- package/build/lib/tools/settings-client-commands.js +34 -4
- package/lib/.DS_Store +0 -0
- package/lib/helpers.js +20 -2
- package/lib/tools/adb-commands.js +8 -3
- package/lib/tools/apk-utils.js +4 -2
- package/lib/tools/settings-client-commands.js +31 -5
- package/package.json +3 -3
package/build/lib/helpers.js
CHANGED
|
@@ -27,6 +27,7 @@ exports.requireSdkRoot = requireSdkRoot;
|
|
|
27
27
|
exports.getSdkRootFromEnv = getSdkRootFromEnv;
|
|
28
28
|
exports.getAndroidPrefsRoot = getAndroidPrefsRoot;
|
|
29
29
|
exports.dirExists = dirExists;
|
|
30
|
+
exports.escapeShellArg = escapeShellArg;
|
|
30
31
|
exports.DEFAULT_ADB_EXEC_TIMEOUT = exports.APK_EXTENSION = exports.APKS_INSTALL_TIMEOUT = exports.APK_INSTALL_TIMEOUT = exports.APKS_EXTENSION = exports.extractMatchingPermissions = exports.getOpenSslForOs = exports.getBuildToolsDirs = exports.getSdkToolsVersion = exports.rootDir = exports.getJavaHome = exports.getJavaForOs = void 0;
|
|
31
32
|
|
|
32
33
|
require("source-map-support/register");
|
|
@@ -235,7 +236,7 @@ async function getApkanalyzerForOs(sysHelpers) {
|
|
|
235
236
|
}
|
|
236
237
|
|
|
237
238
|
function isShowingLockscreen(dumpsys) {
|
|
238
|
-
return _lodash.default.some(['mShowingLockscreen=true', 'mDreamingLockscreen=true'], x => dumpsys.includes(x)) || _lodash.default.every([
|
|
239
|
+
return _lodash.default.some(['mShowingLockscreen=true', 'mDreamingLockscreen=true'], x => dumpsys.includes(x)) || _lodash.default.every([/KeyguardStateMonitor[\n\s]+mIsShowing=true/, /\s+mInputRestricted=true/], x => x.test(dumpsys));
|
|
239
240
|
}
|
|
240
241
|
|
|
241
242
|
function isCurrentFocusOnKeyguard(dumpsys) {
|
|
@@ -823,7 +824,17 @@ async function getAndroidPrefsRoot() {
|
|
|
823
824
|
|
|
824
825
|
async function dirExists(location) {
|
|
825
826
|
return location && (await _appiumSupport.fs.exists(location)) && (await _appiumSupport.fs.stat(location)).isDirectory();
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
function escapeShellArg(arg) {
|
|
830
|
+
arg = `${arg}`;
|
|
831
|
+
|
|
832
|
+
if (_appiumSupport.system.isWindows()) {
|
|
833
|
+
return /[&|^\s]/.test(arg) ? `"${arg.replace(/"/g, '""')}"` : arg;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
return arg.replace(/&/g, '\\&');
|
|
826
837
|
}require('source-map-support').install();
|
|
827
838
|
|
|
828
839
|
|
|
829
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbInJvb3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiQVBLU19FWFRFTlNJT04iLCJBUEtfRVhURU5TSU9OIiwiQVBLX0lOU1RBTExfVElNRU9VVCIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiZ2V0U2RrUm9vdEZyb21FbnYiLCJBTkRST0lEX0hPTUUiLCJBTkRST0lEX1NES19ST09UIiwicmVxdWlyZVNka1Jvb3QiLCJjdXN0b21Sb290Iiwic2RrUm9vdCIsImRvY01zZyIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJmcyIsImV4aXN0cyIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicmVhZEZpbGUiLCJwbGF0Zm9ybVBhdGgiLCJkaXJuYW1lIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bnppcEZpbGUiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwiZXh0cmFjdEFsbFRvIiwidW5zaWduQXBrIiwiYXBrUGF0aCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsIm1ldGFJbmZGb2xkZXJOYW1lIiwiaGFzTWV0YUluZiIsInJlYWRFbnRyaWVzIiwiZW50cnkiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJ0bXBaaXBSb290IiwicmltcmFmIiwidG1wUmVzdWx0UGF0aCIsInRvQXJjaGl2ZSIsInVubGluayIsIm12IiwiZ2V0SU1FTGlzdEZyb21PdXRwdXQiLCJzdGRvdXQiLCJlbmdpbmVzIiwibGluZSIsInNwbGl0IiwibGVuZ3RoIiwicHVzaCIsInRyaW0iLCJyZXBsYWNlIiwiZ2V0SmF2YUhvbWUiLCJtZW1vaXplIiwiSkFWQV9IT01FIiwiZ2V0SmF2YUZvck9zIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiZ2V0T3BlblNzbEZvck9zIiwiYmluYXJ5TmFtZSIsIndoaWNoIiwiZXJyIiwiZ2V0QXBrc2lnbmVyRm9yT3MiLCJzeXNIZWxwZXJzIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRBcGthbmFseXplckZvck9zIiwiaXNTaG93aW5nTG9ja3NjcmVlbiIsImR1bXBzeXMiLCJzb21lIiwieCIsImluY2x1ZGVzIiwiZXZlcnkiLCJpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQiLCJtIiwiZ2V0U3VyZmFjZU9yaWVudGF0aW9uIiwiaXNTY3JlZW5PbkZ1bGx5IiwiYnVpbGRTdGFydENtZCIsInN0YXJ0QXBwT3B0aW9ucyIsImFwaUxldmVsIiwidXNlciIsIndhaXRGb3JMYXVuY2giLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsImZsYWdzIiwiY21kIiwidXRpbCIsImhhc1ZhbHVlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJwYXJzZUtleVZhbHVlIiwic3RyIiwic3BhY2UiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwicmUiLCJhcmdzIiwiYXBwbHkiLCJmbGFnIiwiZmxhZ1BvcyIsInByZXZBcmdzIiwiZ2V0U2RrVG9vbHNWZXJzaW9uIiwiYW5kcm9pZEhvbWUiLCJwcm9wZXJ0aWVzUGF0aCIsInByb3BlcnRpZXNDb250ZW50IiwidmVyc2lvbk1hdGNoZXIiLCJSZWdFeHAiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJnZXRCdWlsZFRvb2xzRGlycyIsImJ1aWxkVG9vbHNEaXJzIiwibWFwIiwiZGlyIiwiYSIsImIiLCJzZW12ZXIiLCJyY29tcGFyZSIsInBhaXIiLCJtZXNzYWdlIiwicGFpcnMiLCJCIiwibXRpbWUiLCJ2YWx1ZU9mIiwiaW5mbyIsImV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zIiwiZHVtcHN5c091dHB1dCIsImdyb3VwTmFtZXMiLCJncmFudGVkU3RhdGUiLCJncm91cFBhdHRlcm5CeU5hbWUiLCJncm91cE5hbWUiLCJlc2NhcGVSZWdFeHAiLCJpbmRlbnRQYXR0ZXJuIiwicGVybWlzc2lvbk5hbWVQYXR0ZXJuIiwiZ3JhbnRlZFN0YXRlUGF0dGVybiIsImdyb3VwTWF0Y2giLCJsaW5lcyIsInRpdGxlSW5kZW50Iiwic2VhcmNoIiwic2xpY2UiLCJjdXJyZW50SW5kZW50IiwicGVybWlzc2lvbk5hbWVNYXRjaCIsIml0ZW0iLCJwZXJtaXNzaW9uIiwiZ3JhbnRlZFN0YXRlTWF0Y2giLCJncmFudGVkIiwiZmlsdGVyZWRSZXN1bHQiLCJmaWx0ZXIiLCJpc0Jvb2xlYW4iLCJwbHVyYWxpemUiLCJidWlsZEluc3RhbGxBcmdzIiwib3B0aW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwidXNlU2RjYXJkIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInBhcnRpYWxJbnN0YWxsIiwicGFyc2VNYW5pZmVzdCIsIm1hbmlmZXN0IiwicGFja2FnZSIsInZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJhcHBsaWNhdGlvbiIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUFsaWFzZXMiLCJlbmFibGVkIiwiaW50ZW50RmlsdGVycyIsImFjdGlvbnMiLCJjYXRlZ29yaWVzIiwiaXNNYWluQWN0aW9uIiwibmFtZSIsImlzTGF1bmNoZXJDYXRlZ29yeSIsInBhcnNlQWFwdFN0cmluZ3MiLCJyYXdPdXRwdXQiLCJjb25maWdNYXJrZXIiLCJub3JtYWxpemVTdHJpbmdNYXRjaCIsInMiLCJhcGtTdHJpbmdzIiwiaXNJbkNvbmZpZyIsImN1cnJlbnRSZXNvdXJjZUlkIiwiaXNJblBsdXJhbEdyb3VwIiwicXVvdGVkU3RyaW5nUGF0dGVybiIsIm9zIiwiRU9MIiwidHJpbW1lZExpbmUiLCJwYXJzZUFhcHQyU3RyaW5ncyIsImFsbExpbmVzIiwiZXh0cmFjdENvbnRlbnQiLCJzdGFydElkeCIsImlkeCIsInN0YXJ0Q2hhclBvcyIsInRlcm1pbmF0aW9uQ2hhck1hdGNoIiwidGVybWluYXRpb25DaGFyUG9zIiwiaW5kZXgiLCJ0cmltU3RhcnQiLCJpc0luQ3VycmVudENvbmZpZyIsImxpbmVJbmRleCIsImNvbnRlbnQiLCJpc1N0cmluZyIsImZvcm1hdENvbmZpZ01hcmtlciIsImNvbmZpZ3NHZXR0ZXIiLCJkZXNpcmVkTWFya2VyIiwiZGVmYXVsdE1hcmtlciIsImNvbmZpZ3MiLCJ0b0xvd2VyQ2FzZSIsInBhcnNlSnNvbkRhdGEiLCJvdXRwdXQiLCJlbnRpdHlOYW1lIiwidGVzdCIsImpzb25TdHIiLCJwYXJzZSIsImUiLCJ0b0F2ZExvY2FsZUFyZ3MiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJ0b1VwcGVyQ2FzZSIsImxvY2FsZSIsImdldEFuZHJvaWRQcmVmc1Jvb3QiLCJsb2NhdGlvbiIsIkFORFJPSURfRU1VTEFUT1JfSE9NRSIsImRpckV4aXN0cyIsImhvbWUiLCJIT01FIiwiVVNFUlBST0ZJTEUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsYUFBWixHQUE0QixJQUE1QixHQUFtQyxPQUEzRCxDQUFoQjs7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE9BQXZCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxNQUF0Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1Qjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBR0QsbUJBQW1CLEdBQUcsQ0FBbkQ7O0FBQ0EsTUFB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QUFDRCxTQUFPeE0sTUFBUDtBQUNEOztBQU9ELGVBQWV5TSxtQkFBZixHQUFzQztBQUNwQyxNQUFJQyxRQUFRLEdBQUd2UCxPQUFPLENBQUNDLEdBQVIsQ0FBWXVQLHFCQUEzQjs7QUFDQSxNQUFJLE1BQU1DLFNBQVMsQ0FBQ0YsUUFBRCxDQUFuQixFQUErQjtBQUM3QixXQUFPQSxRQUFQO0FBQ0Q7O0FBRUQsTUFBSUEsUUFBSixFQUFjO0FBQ1pqTixvQkFBSUMsSUFBSixDQUFVLGdFQUErRGdOLFFBQVMsZ0NBQWxGO0FBQ0Q7O0FBRUQsUUFBTUcsSUFBSSxHQUFHMVAsT0FBTyxDQUFDQyxHQUFSLENBQVkwUCxJQUFaLElBQW9CM1AsT0FBTyxDQUFDQyxHQUFSLENBQVkyUCxXQUE3Qzs7QUFDQSxNQUFJRixJQUFKLEVBQVU7QUFDUkgsSUFBQUEsUUFBUSxHQUFHMVAsY0FBS0MsT0FBTCxDQUFhNFAsSUFBYixFQUFtQixVQUFuQixDQUFYO0FBQ0Q7O0FBRUQsTUFBSSxFQUFDLE1BQU1ELFNBQVMsQ0FBQ0YsUUFBRCxDQUFoQixDQUFKLEVBQWdDO0FBQzlCak4sb0JBQUlRLEtBQUosQ0FBVyx3QkFBdUJ5TSxRQUFTLGdDQUEzQzs7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFPQSxRQUFQO0FBQ0Q7O0FBUUQsZUFBZUUsU0FBZixDQUEwQkYsUUFBMUIsRUFBb0M7QUFDbEMsU0FBT0EsUUFBUSxLQUNWLE1BQU1yTyxrQkFBR0MsTUFBSCxDQUFVb08sUUFBVixDQURJLENBQVIsSUFFRixDQUFDLE1BQU1yTyxrQkFBR0csSUFBSCxDQUFRa08sUUFBUixDQUFQLEVBQTBCak8sV0FBMUIsRUFGTDtBQUdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCB6aXAsIHV0aWwsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuXG5jb25zdCByb290RGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKTtcbmNvbnN0IEFQS1NfRVhURU5TSU9OID0gJy5hcGtzJztcbmNvbnN0IEFQS19FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBBUEtfSU5TVEFMTF9USU1FT1VUID0gNjAwMDA7XG5jb25zdCBBUEtTX0lOU1RBTExfVElNRU9VVCA9IEFQS19JTlNUQUxMX1RJTUVPVVQgKiAyO1xuY29uc3QgREVGQVVMVF9BREJfRVhFQ19USU1FT1VUID0gMjAwMDA7IC8vIGluIG1pbGxpc2Vjb25kc1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBzZXQgZm9yIEFuZHJvaWQgVG9vbHMgdG8gd29yayBwcm9wZXJseScpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIHJldHVybiBwYXRoLnJlc29sdmUoYXdhaXQgZ2V0SmF2YUhvbWUoKSwgJ2JpbicsXG4gICAgYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWApO1xufSk7XG5cbmNvbnN0IGdldE9wZW5Tc2xGb3JPcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmluYXJ5TmFtZSA9IGBvcGVuc3NsJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy53aGljaChiaW5hcnlOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgb3BlbnNzbCB0b29sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gYW5kIGF2YWlsYWJsZSBvbiB0aGUgcGF0aCcpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGtzaWduZXIgdG9vbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGtzaWduZXIgdG9vbC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdG9vbCBpcyBub3QgcHJlc2VudCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFwa3NpZ25lckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGtzaWduZXIuamFyJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL2Fwa2FuYWx5emVyLmh0bWxcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdG9vbCBpcyBub3QgcHJlc2VudCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFwa2FuYWx5emVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa2FuYWx5emVyJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIG1TaG93aW5nTG9ja3NjcmVlbiBvciBtRHJlYW1pbmdMb2Nrc2NyZWVuIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZVxuICogaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZ1xuICpcbiAqIEEgbm90ZTogYGFkYiBzaGVsbCBkdW1wc3lzIHRydXN0YCBwZXJmb3JtcyBiZXR0ZXIgd2hpbGUgZGV0ZWN0aW5nIHRoZSBsb2NrZWQgc2NyZWVuIHN0YXRlXG4gKiBpbiBjb21wYXJpc29uIHRvIGBhZGIgZHVtcHN5cyB3aW5kb3dgIG91dHB1dCBwYXJzaW5nLlxuICogQnV0IHRoZSB0cnVzdCBjb21tYW5kIGRvZXMgbm90IHdvcmsgZm9yIGBTd2lwZWAgdW5sb2NrIHBhdHRlcm4uXG4gKlxuICogSW4gc29tZSBBbmRyb2lkIGRldmljZXMgKFByb2JhYmx5IGFyb3VuZCBBbmRyb2lkIDEwKyksIGBtU2hvd2luZ0xvY2tzY3JlZW5gIGFuZCBgbURyZWFtaW5nTG9ja3NjcmVlbmBcbiAqIGRvIG5vdCB3b3JrIHRvIGRldGVjdCBsb2NrIHN0YXR1cy4gSW5zdGVhZCwga2V5Z3VhcmQgcHJlZmVyZW5jZXMgaGVscHMgdG8gZGV0ZWN0IHRoZSBsb2NrIGNvbmRpdGlvbi5cbiAqIFNvbWUgZGV2aWNlcyBzdWNoIGFzIEFuZHJvaWQgVFYgZG8gbm90IGhhdmUga2V5Z3VhcmQsIHNvIHdlIHNob3VsZCBrZWVwXG4gKiBzY3JlZW4gY29uZGl0aW9uIGFzIHRoaXMgcHJpbWFyeSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgLSBUaGUgb3V0cHV0IG9mIGR1bXBzeXMgd2luZG93IGNvbW1hbmQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmcuXG4gKi9cbmZ1bmN0aW9uIGlzU2hvd2luZ0xvY2tzY3JlZW4gKGR1bXBzeXMpIHtcbiAgcmV0dXJuIF8uc29tZShbJ21TaG93aW5nTG9ja3NjcmVlbj10cnVlJywgJ21EcmVhbWluZ0xvY2tzY3JlZW49dHJ1ZSddLCAoeCkgPT4gZHVtcHN5cy5pbmNsdWRlcyh4KSlcbiAgICAvLyBgbUlzU2hvd2luZ2AgYW5kIGBtSW5wdXRSZXN0cmljdGVkYCBhcmUgYHRydWVgIGluIGxvY2sgY29uZGl0aW9uLiBgZmFsc2VgIGlzIHVubG9jayBjb25kaXRpb24uXG4gICAgfHwgXy5ldmVyeShbJ21Jc1Nob3dpbmc9ZmFsc2UnLCAnbUlucHV0UmVzdHJpY3RlZD1mYWxzZSddLCAoeCkgPT4gZHVtcHN5cy5pbmNsdWRlcyh4KSk7XG59XG5cbi8qXG4gKiBDaGVja3MgbUN1cnJlbnRGb2N1cyBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgS2V5Z3VhcmQgaXMgYWN0aXZhdGVkXG4gKi9cbmZ1bmN0aW9uIGlzQ3VycmVudEZvY3VzT25LZXlndWFyZCAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9tQ3VycmVudEZvY3VzLitLZXlndWFyZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gKG0gJiYgbS5sZW5ndGggJiYgbVswXSkgPyB0cnVlIDogZmFsc2U7XG59XG5cbi8qXG4gKiBSZWFkcyBTdXJmYWNlT3JpZW50YXRpb24gaW4gZHVtcHN5cyBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0U3VyZmFjZU9yaWVudGF0aW9uIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL1N1cmZhY2VPcmllbnRhdGlvbjogXFxkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiBtICYmIHBhcnNlSW50KG1bMF0uc3BsaXQoJzonKVsxXSwgMTApO1xufVxuXG4vKlxuICogQ2hlY2tzIG1TY3JlZW5PbkZ1bGx5IGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBzY3JlZW4gaXMgc2hvd2luZ1xuICogRGVmYXVsdCBpcyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzU2NyZWVuT25GdWxseSAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9tU2NyZWVuT25GdWxseT1cXHcrL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAhbSB8fCAvLyBpZiBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nIHdlIGFzc3VtZSBzY3JlZW4gaXMgZnVsbHkgb25cbiAgICAgICAgIChtICYmIG0ubGVuZ3RoID4gMCAmJiBtWzBdLnNwbGl0KCc9JylbMV0gPT09ICd0cnVlJykgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQnVpbGRzIGNvbW1hbmQgbGluZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGdpdmVuXG4gKiBhcHBsaWNhdGlvbiBzdGFydHVwIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YXJ0QXBwT3B0aW9uc30gc3RhcnRBcHBPcHRpb25zIC0gQXBwbGljYXRpb24gb3B0aW9ucyBtYXBwaW5nXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgYWN0dWFsIE9TIEFQSSBsZXZlbFxuICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBhY3R1YWwgY29tbWFuZCBsaW5lIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU3RhcnRDbWQgKHN0YXJ0QXBwT3B0aW9ucywgYXBpTGV2ZWwpIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgICBwa2csXG4gICAgYWN0aXZpdHksXG4gICAgYWN0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIHN0b3BBcHAsXG4gICAgZmxhZ3MsXG4gIH0gPSBzdGFydEFwcE9wdGlvbnM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nLCAnc3RhcnQnXTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgaWYgKHdhaXRGb3JMYXVuY2gpIHtcbiAgICBjbWQucHVzaCgnLVcnKTtcbiAgfVxuICBpZiAoYWN0aXZpdHkgJiYgcGtnKSB7XG4gICAgY21kLnB1c2goJy1uJywgYCR7cGtnfS8ke2FjdGl2aXR5fWApO1xuICB9XG4gIGlmIChzdG9wQXBwICYmIGFwaUxldmVsID49IDE1KSB7XG4gICAgY21kLnB1c2goJy1TJyk7XG4gIH1cbiAgaWYgKGFjdGlvbikge1xuICAgIGNtZC5wdXNoKCctYScsIGFjdGlvbik7XG4gIH1cbiAgaWYgKGNhdGVnb3J5KSB7XG4gICAgY21kLnB1c2goJy1jJywgY2F0ZWdvcnkpO1xuICB9XG4gIGlmIChmbGFncykge1xuICAgIGNtZC5wdXNoKCctZicsIGZsYWdzKTtcbiAgfVxuICBpZiAoc3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSB7XG4gICAgLy8gZXhwZWN0IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHRvIGJlIGEgc2luZ2xlIHN0cmluZyBvZiB0aGUgZm9ybTpcbiAgICAvLyAgICAgXCItZmxhZyBrZXlcIlxuICAgIC8vICAgICBcIi1mbGFnIGtleSB2YWx1ZVwiXG4gICAgLy8gb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSAoZS5nLiwgXCItZmxhZzEga2V5MSAtZmxhZzIga2V5MiB2YWx1ZTJcIilcblxuICAgIC8vIHRha2UgYSBzdHJpbmcgYW5kIHBhcnNlIG91dCB0aGUgcGFydCBiZWZvcmUgYW55IHNwYWNlcywgYW5kIGFueXRoaW5nIGFmdGVyXG4gICAgLy8gdGhlIGZpcnN0IHNwYWNlXG4gICAgbGV0IHBhcnNlS2V5VmFsdWUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICBzdHIgPSBzdHIudHJpbSgpO1xuICAgICAgbGV0IHNwYWNlID0gc3RyLmluZGV4T2YoJyAnKTtcbiAgICAgIGlmIChzcGFjZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPyBbc3RyXSA6IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtzdHIuc3Vic3RyaW5nKDAsIHNwYWNlKS50cmltKCksIHN0ci5zdWJzdHJpbmcoc3BhY2UgKyAxKS50cmltKCldO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyBhbmQgcHVsbCBvdXQgdGhlIGFyZ3VtZW50c1xuICAgIC8vIGFkZCBhIHNwYWNlIGluaXRpYWxseSBzbyBmbGFncyBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGFyZ3VtZW50cyB0aGF0XG4gICAgLy8gaGF2ZSBpbnRlcm5hbCBoeXBoZW5zXG4gICAgbGV0IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzID0gYCAke3N0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50c31gO1xuICAgIGxldCByZSA9IC8gKC1bXlxcc10rKSAoLispLztcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgbGV0IGFyZ3MgPSByZS5leGVjKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKTtcbiAgICAgIGlmICghYXJncykge1xuICAgICAgICBpZiAob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gbm8gbW9yZSBmbGFncywgc28gdGhlIHJlbWFpbmRlciBjYW4gYmUgdHJlYXRlZCBhcyAna2V5JyBvciAna2V5IHZhbHVlJ1xuICAgICAgICAgIGNtZC5wdXNoLmFwcGx5KGNtZCwgcGFyc2VLZXlWYWx1ZShvcHRpb25hbEludGVudEFyZ3VtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWtlIHRoZSBmbGFnIGFuZCBzZWUgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nXG4gICAgICAvLyBpZiBpdCBpcyBub3QsIHRoZW4gaXQgbWVhbnMgd2UgaGF2ZSBiZWVuIHRocm91Z2ggYWxyZWFkeSwgYW5kXG4gICAgICAvLyB3aGF0IGlzIGJlZm9yZSB0aGUgZmxhZyBpcyB0aGUgYXJndW1lbnQgZm9yIHRoZSBwcmV2aW91cyBmbGFnXG4gICAgICBsZXQgZmxhZyA9IGFyZ3NbMV07XG4gICAgICBsZXQgZmxhZ1BvcyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmluZGV4T2YoZmxhZyk7XG4gICAgICBpZiAoZmxhZ1BvcyAhPT0gMCkge1xuICAgICAgICBsZXQgcHJldkFyZ3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5zdWJzdHJpbmcoMCwgZmxhZ1Bvcyk7XG4gICAgICAgIGNtZC5wdXNoLmFwcGx5KGNtZCwgcGFyc2VLZXlWYWx1ZShwcmV2QXJncykpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIGZsYWcsIGFzIHRoZXJlIGFyZSBubyBtb3JlIGVhcmxpZXIgYXJndW1lbnRzXG4gICAgICBjbWQucHVzaChmbGFnKTtcblxuICAgICAgLy8gbWFrZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyBob2xkIHRoZSByZW1haW5kZXJcbiAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzID0gYXJnc1syXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNtZDtcbn1cblxuY29uc3QgZ2V0U2RrVG9vbHNWZXJzaW9uID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNka1Rvb2xzVmVyc2lvbiAoKSB7XG4gIGNvbnN0IGFuZHJvaWRIb21lID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9IT01FO1xuICBpZiAoIWFuZHJvaWRIb21lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBTkRST0lEX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZXhwZWN0ZWQgdG8gYmUgc2V0Jyk7XG4gIH1cbiAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUoYW5kcm9pZEhvbWUsICd0b29scycsICdzb3VyY2UucHJvcGVydGllcycpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwcm9wZXJ0aWVzUGF0aCkpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IGZpbmQgJHtwcm9wZXJ0aWVzUGF0aH0gZmlsZSB0byByZWFkIFNESyB2ZXJzaW9uIGZyb21gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcHJvcGVydGllc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wZXJ0aWVzUGF0aCwgJ3V0ZjgnKTtcbiAgY29uc3QgdmVyc2lvbk1hdGNoZXIgPSBuZXcgUmVnRXhwKC9Qa2dcXC5SZXZpc2lvbj0oXFxkKylcXC4/KFxcZCspP1xcLj8oXFxkKyk/Lyk7XG4gIGNvbnN0IG1hdGNoID0gdmVyc2lvbk1hdGNoZXIuZXhlYyhwcm9wZXJ0aWVzQ29udGVudCk7XG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYWpvcjogcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICAgIG1pbm9yOiBtYXRjaFsyXSA/IHBhcnNlSW50KG1hdGNoWzJdLCAxMCkgOiAwLFxuICAgICAgYnVpbGQ6IG1hdGNoWzNdID8gcGFyc2VJbnQobWF0Y2hbM10sIDEwKSA6IDBcbiAgICB9O1xuICB9XG4gIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgXCJQa2cuUmV2aXNpb25cIiB2YWx1ZSBmcm9tICR7cHJvcGVydGllc1BhdGh9YCk7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZnVsbCBwYXRocyB0byBhbGwgJ2J1aWxkLXRvb2xzJyBzdWJmb2xkZXJzIHVuZGVyIHRoZSBwYXJ0aWN1bGFyXG4gKiBTREsgcm9vdCBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrUm9vdCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGZ1bGwgcGF0aHMgdG8gdGhlIHJlc3VsdGluZyBmb2xkZXJzIHNvcnRlZCBieVxuICogbW9kaWZpY2F0aW9uIGRhdGUgKHRoZSBuZXdlc3QgY29tZXMgZmlyc3QpIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWFjdGhlcyB3ZXJlIGZvdW5kXG4gKi9cbmNvbnN0IGdldEJ1aWxkVG9vbHNEaXJzID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkVG9vbHNEaXJzIChzZGtSb290KSB7XG4gIGxldCBidWlsZFRvb2xzRGlycyA9IGF3YWl0IGZzLmdsb2IoJyovJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdidWlsZC10b29scycpLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBidWlsZFRvb2xzRGlycyA9IGJ1aWxkVG9vbHNEaXJzXG4gICAgICAubWFwKChkaXIpID0+IFtwYXRoLmJhc2VuYW1lKGRpciksIGRpcl0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gc2VtdmVyLnJjb21wYXJlKGFbMF0sIGJbMF0pKVxuICAgICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3Qgc29ydCBidWlsZC10b29scyBmb2xkZXJzICR7SlNPTi5zdHJpbmdpZnkoYnVpbGRUb29sc0RpcnMubWFwKChkaXIpID0+IHBhdGguYmFzZW5hbWUoZGlyKSkpfSBgICtcbiAgICAgIGBieSBzZW1hbnRpYyB2ZXJzaW9uIG5hbWVzLmApO1xuICAgIGxvZy53YXJuKGBGYWxsaW5nIGJhY2sgdG8gc29ydGluZyBieSBtb2RpZmljYXRpb24gZGF0ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgY29uc3QgcGFpcnMgPSBhd2FpdCBCLm1hcChidWlsZFRvb2xzRGlycywgYXN5bmMgKGRpcikgPT4gWyhhd2FpdCBmcy5zdGF0KGRpcikpLm10aW1lLnZhbHVlT2YoKSwgZGlyXSk7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBwYWlyc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdKVxuICAgICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSk7XG4gIH1cbiAgbG9nLmluZm8oYEZvdW5kICR7YnVpbGRUb29sc0RpcnMubGVuZ3RofSAnYnVpbGQtdG9vbHMnIGZvbGRlcnMgdW5kZXIgJyR7c2RrUm9vdH0nIChuZXdlc3QgZmlyc3QpOmApO1xuICBmb3IgKGxldCBkaXIgb2YgYnVpbGRUb29sc0RpcnMpIHtcbiAgICBsb2cuaW5mbyhgICAgICR7ZGlyfWApO1xuICB9XG4gIHJldHVybiBidWlsZFRvb2xzRGlycztcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9uIG5hbWVzIGVuY29kZWQgaW4gYGR1bXBzeXMgcGFja2FnZWAgY29tbWFuZCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXNPdXRwdXQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0LlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBncm91cE5hbWVzIC0gVGhlIGxpc3Qgb2YgZ3JvdXAgbmFtZXMgdG8gbGlzdCBwZXJtaXNzaW9ucyBmb3IuXG4gKiBAcGFyYW0gez9ib29sZWFufSBncmFudGVkU3RhdGUgLSBUaGUgZXhwZWN0ZWQgc3RhdGUgb2YgYGdyYW50ZWRgIGF0dHJpYnV0ZSB0byBmaWx0ZXIgd2l0aC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGZpbHRlcmluZyBpcyBkb25lIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNldC5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBtYXRjaGVkIHBlcm1pc3Npb24gbmFtZXMgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQuXG4gKi9cbmNvbnN0IGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zID0gZnVuY3Rpb24gKGR1bXBzeXNPdXRwdXQsIGdyb3VwTmFtZXMsIGdyYW50ZWRTdGF0ZSA9IG51bGwpIHtcbiAgY29uc3QgZ3JvdXBQYXR0ZXJuQnlOYW1lID0gKGdyb3VwTmFtZSkgPT4gbmV3IFJlZ0V4cChgXihcXFxccyoke18uZXNjYXBlUmVnRXhwKGdyb3VwTmFtZSl9IHBlcm1pc3Npb25zOltcXFxcc1xcXFxTXSspYCwgJ20nKTtcbiAgY29uc3QgaW5kZW50UGF0dGVybiA9IC9cXFN8JC87XG4gIGNvbnN0IHBlcm1pc3Npb25OYW1lUGF0dGVybiA9IC9hbmRyb2lkXFwuXFx3KlxcLj9wZXJtaXNzaW9uXFwuXFx3Ky87XG4gIGNvbnN0IGdyYW50ZWRTdGF0ZVBhdHRlcm4gPSAvXFxiZ3JhbnRlZD0oXFx3KykvO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBncm91cE5hbWUgb2YgZ3JvdXBOYW1lcykge1xuICAgIGNvbnN0IGdyb3VwTWF0Y2ggPSBncm91cFBhdHRlcm5CeU5hbWUoZ3JvdXBOYW1lKS5leGVjKGR1bXBzeXNPdXRwdXQpO1xuICAgIGlmICghZ3JvdXBNYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZXMgPSBncm91cE1hdGNoWzFdLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAobGluZXMubGVuZ3RoIDwgMikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGVJbmRlbnQgPSBsaW5lc1swXS5zZWFyY2goaW5kZW50UGF0dGVybik7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzLnNsaWNlKDEpKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5zZWFyY2goaW5kZW50UGF0dGVybik7XG4gICAgICBpZiAoY3VycmVudEluZGVudCA8PSB0aXRsZUluZGVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGVybWlzc2lvbk5hbWVNYXRjaCA9IHBlcm1pc3Npb25OYW1lUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZU1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvbk5hbWVNYXRjaFswXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBncmFudGVkU3RhdGVNYXRjaCA9IGdyYW50ZWRTdGF0ZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmIChncmFudGVkU3RhdGVNYXRjaCkge1xuICAgICAgICBpdGVtLmdyYW50ZWQgPSBncmFudGVkU3RhdGVNYXRjaFsxXSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRSZXN1bHQgPSByZXN1bHRcbiAgICAuZmlsdGVyKChpdGVtKSA9PiAhXy5pc0Jvb2xlYW4oZ3JhbnRlZFN0YXRlKSB8fCBpdGVtLmdyYW50ZWQgPT09IGdyYW50ZWRTdGF0ZSlcbiAgICAubWFwKChpdGVtKSA9PiBpdGVtLnBlcm1pc3Npb24pO1xuICBsb2cuZGVidWcoYFJldHJpZXZlZCAke3V0aWwucGx1cmFsaXplKCdwZXJtaXNzaW9uJywgZmlsdGVyZWRSZXN1bHQubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgYGZyb20gJHtncm91cE5hbWVzfSAke3V0aWwucGx1cmFsaXplKCdncm91cCcsIGdyb3VwTmFtZXMubGVuZ3RoLCBmYWxzZSl9YCk7XG4gIHJldHVybiBmaWx0ZXJlZFJlc3VsdDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgZ2l2ZW4gb3B0aW9ucyBpbnRvIHRoZSBsaXN0IG9mIGBhZGIgaW5zdGFsbC5pbnN0YWxsLW11bHRpcGxlYCBjb21tYW5kIGFyZ3VtZW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBjdXJyZW50IEFQSSBsZXZlbFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBtYXBwaW5nIHRvIHRyYW5zZm9ybVxuICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYnVpbGRJbnN0YWxsQXJncyAoYXBpTGV2ZWwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcblxuICBpZiAoIXV0aWwuaGFzVmFsdWUob3B0aW9ucy5yZXBsYWNlKSB8fCBvcHRpb25zLnJlcGxhY2UpIHtcbiAgICByZXN1bHQucHVzaCgnLXInKTtcbiAgfVxuICBpZiAob3B0aW9ucy5hbGxvd1Rlc3RQYWNrYWdlcykge1xuICAgIHJlc3VsdC5wdXNoKCctdCcpO1xuICB9XG4gIGlmIChvcHRpb25zLnVzZVNkY2FyZCkge1xuICAgIHJlc3VsdC5wdXNoKCctcycpO1xuICB9XG4gIGlmIChvcHRpb25zLmdyYW50UGVybWlzc2lvbnMpIHtcbiAgICBpZiAoYXBpTGV2ZWwgPCAyMykge1xuICAgICAgbG9nLmRlYnVnKGBTa2lwcGluZyBwZXJtaXNzaW9ucyBncmFudCBvcHRpb24sIHNpbmNlIGAgK1xuICAgICAgICAgICAgICAgIGB0aGUgY3VycmVudCBBUEkgbGV2ZWwgJHthcGlMZXZlbH0gZG9lcyBub3Qgc3VwcG9ydCBhcHBsaWNhdGlvbnMgYCArXG4gICAgICAgICAgICAgICAgYHBlcm1pc3Npb25zIGN1c3RvbWl6YXRpb25gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goJy1nJyk7XG4gICAgfVxuICB9XG4gIC8vIEZvciBtdWx0aXBsZS1pbnN0YWxsXG4gIGlmIChvcHRpb25zLnBhcnRpYWxJbnN0YWxsKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hbmlmZXN0SW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHBrZyAtIFRoZSBhcHBsaWNhdGlvbiBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aXZpdHkgLSBUaGUgbmFtZSBvZiB0aGUgbWFpbiBwYWNrYWdlIGFjdGl2aXR5XG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlcnNpb25Db2RlIC0gVGhlIHZlcnNpb24gY29kZSBudW1iZXIgKG1pZ2h0IGJlIGBOYU5gKVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uTmFtZSAtIFRoZSB2ZXJzaW9uIG5hbWUgKG1pZ2h0IGJlIGBudWxsYClcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gcGFyc2luZyBvZiB0aGUgbWFuaWZlc3Qgb2JqZWN0IGluIG9yZGVyXG4gKiB0byBleHRyYWN0IHNvbWUgdml0YWwgdmFsdWVzIGZyb20gaXRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbWFuaWZlc3QgVGhlIG1hbmlmZXN0IGNvbnRlbnQgZm9ybWF0dGVkIGFzIEpTT05cbiAqIFNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9hZGJraXQtYXBrcmVhZGVyIGZvciBkZXRhaWxlZCBmb3JtYXQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtNYW5pZmVzdEluZm99XG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWFuaWZlc3QgKG1hbmlmZXN0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBwa2c6IG1hbmlmZXN0LnBhY2thZ2UsXG4gICAgdmVyc2lvbkNvZGU6IHBhcnNlSW50KG1hbmlmZXN0LnZlcnNpb25Db2RlLCAxMCksXG4gICAgdmVyc2lvbk5hbWU6IG1hbmlmZXN0LnZlcnNpb25OYW1lIHx8IG51bGwsXG4gIH07XG4gIGlmICghbWFuaWZlc3QuYXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gTG9vayBmb3IgZW5hYmxlZCBhY3Rpdml0eSBvciBhY3Rpdml0eS1hbGlhcyB3aXRoXG4gIC8vIGFjdGlvbiA9PSBhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiBhbmRcbiAgLy8gY2F0ZWdvcnkgPT0gYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVJcbiAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiBbXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdGllcyxcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0eUFsaWFzZXMsXG4gIF0pIHtcbiAgICBpZiAoYWN0aXZpdHkuZW5hYmxlZCA9PT0gZmFsc2UgfHwgXy5pc0VtcHR5KGFjdGl2aXR5LmludGVudEZpbHRlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHthY3Rpb25zLCBjYXRlZ29yaWVzfSBvZiBhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KGFjdGlvbnMpIHx8IF8uaXNFbXB0eShjYXRlZ29yaWVzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYWluQWN0aW9uID0gYWN0aW9uc1xuICAgICAgICAuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nKTtcbiAgICAgIGNvbnN0IGlzTGF1bmNoZXJDYXRlZ29yeSA9IGNhdGVnb3JpZXNcbiAgICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyk7XG4gICAgICBpZiAoaXNNYWluQWN0aW9uICYmIGlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgICByZXN1bHQuYWN0aXZpdHkgPSBhY3Rpdml0eS5uYW1lO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGAoZGVmYXVsdClgXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdFN0cmluZ3MgKHJhd091dHB1dCwgY29uZmlnTWFya2VyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZVN0cmluZ01hdGNoID0gZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9cIiQvLCAnJykucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgfTtcblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBpc0luQ29uZmlnID0gZmFsc2U7XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgLy8gVGhlIHBhdHRlcm4gbWF0Y2hlcyBhbnkgcXVvdGVkIGNvbnRlbnQgaW5jbHVkaW5nIGVzY2FwZWQgcXVvdGVzXG4gIGNvbnN0IHF1b3RlZFN0cmluZ1BhdHRlcm4gPSAvXCJbXlwiXFxcXF0qKD86XFxcXC5bXlwiXFxcXF0qKSpcIi87XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXdPdXRwdXQuc3BsaXQob3MuRU9MKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChbJ2NvbmZpZycsICd0eXBlJywgJ3NwZWMnLCAnUGFja2FnZSddLnNvbWUoKHgpID0+IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoeCkpKSB7XG4gICAgICBpc0luQ29uZmlnID0gdHJpbW1lZExpbmUuc3RhcnRzV2l0aChgY29uZmlnICR7Y29uZmlnTWFya2VyfTpgKTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0luQ29uZmlnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG5cbiAgICAgIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnN0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86c3RyaW5nXFwvKFxcUyspOi8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpwbHVyYWxzXFwvKFxcUyspOi8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgICAgaXNJblBsdXJhbEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkICYmIHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJyhzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pO1xuICAgICAgfVxuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkICYmIGlzSW5QbHVyYWxHcm91cCAmJiB0cmltbWVkTGluZS5pbmNsdWRlcygnOiAoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IFtcbiAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgIG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0MiB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBvbmVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0MlN0cmluZ3MgKHJhd091dHB1dCwgY29uZmlnTWFya2VyKSB7XG4gIGNvbnN0IGFsbExpbmVzID0gcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCk7XG4gIGZ1bmN0aW9uIGV4dHJhY3RDb250ZW50IChzdGFydElkeCkge1xuICAgIGxldCBpZHggPSBzdGFydElkeDtcbiAgICBjb25zdCBzdGFydENoYXJQb3MgPSBhbGxMaW5lc1tzdGFydElkeF0uaW5kZXhPZignXCInKTtcbiAgICBpZiAoc3RhcnRDaGFyUG9zIDwgMCkge1xuICAgICAgcmV0dXJuIFtudWxsLCBpZHhdO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgd2hpbGUgKGlkeCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyTWF0Y2ggPSAvXCIkLy5leGVjKGFsbExpbmVzW2lkeF0pO1xuICAgICAgaWYgKHRlcm1pbmF0aW9uQ2hhck1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhclBvcyA9IHRlcm1pbmF0aW9uQ2hhck1hdGNoLmluZGV4O1xuICAgICAgICBpZiAoc3RhcnRJZHggPT09IGlkeCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBhbGxMaW5lc1tpZHhdLnN1YnN0cmluZyhzdGFydENoYXJQb3MgKyAxLCB0ZXJtaW5hdGlvbkNoYXJQb3MpLFxuICAgICAgICAgICAgaWR4XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3Jlc3VsdH1cXFxcbiR7Xy50cmltU3RhcnQoYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoMCwgdGVybWluYXRpb25DaGFyUG9zKSl9YCxcbiAgICAgICAgICBpZHgsXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBpZiAoaWR4ID4gc3RhcnRJZHgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGBcXFxcbiR7Xy50cmltU3RhcnQoYWxsTGluZXNbaWR4XSl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBhbGxMaW5lc1tpZHhdLnN1YnN0cmluZyhzdGFydENoYXJQb3MgKyAxKTtcbiAgICAgIH1cbiAgICAgICsraWR4O1xuICAgIH1cbiAgICByZXR1cm4gW3Jlc3VsdCwgaWR4XTtcbiAgfVxuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICBsZXQgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgbGV0IGxpbmVJbmRleCA9IDA7XG4gIHdoaWxlIChsaW5lSW5kZXggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGFsbExpbmVzW2xpbmVJbmRleF0udHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChbJ3R5cGUnLCAnUGFja2FnZSddLnNvbWUoKHgpID0+IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoeCkpKSB7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG5cbiAgICAgIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnc3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3N0cmluZ1xcLyhcXFMrKS8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3BsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvcGx1cmFsc1xcLyhcXFMrKS8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgICAgaXNJblBsdXJhbEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQpIHtcbiAgICAgIGlmIChpc0luUGx1cmFsR3JvdXApIHtcbiAgICAgICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJygnKSkge1xuICAgICAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gdHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKTtcbiAgICAgICAgICArK2xpbmVJbmRleDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbkN1cnJlbnRDb25maWcpIHtcbiAgICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IFtcbiAgICAgICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCkpIHtcbiAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgKytsaW5lSW5kZXg7XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgY29uZmlnIG1hcmtlciwgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gcGFyc2UuLiBtZXRob2RzXG4gKiB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCByZXNvdXJjZSBmb3JtYXRzIGdlbmVyYXRlZCBieSBhYXB0KDIpIHRvb2xcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maWdzR2V0dGVyIFRoZSBmdW5jdGlvbiB3aG9zZSByZXN1bHQgaXMgYSBsaXN0XG4gKiBvZiBhcGsgY29uZmlnc1xuICogQHBhcmFtIHtzdHJpbmd9IGRlc2lyZWRNYXJrZXIgVGhlIGRlc2lyZWQgY29uZmlnIG1hcmtlciB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRNYXJrZXIgVGhlIGRlZmF1bHQgY29uZmlnIG1hcmtlciB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGNvbmZpZyBtYXJrZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZm9ybWF0Q29uZmlnTWFya2VyIChjb25maWdzR2V0dGVyLCBkZXNpcmVkTWFya2VyLCBkZWZhdWx0TWFya2VyKSB7XG4gIGxldCBjb25maWdNYXJrZXIgPSBkZXNpcmVkTWFya2VyIHx8IGRlZmF1bHRNYXJrZXI7XG4gIGlmIChjb25maWdNYXJrZXIuaW5jbHVkZXMoJy0nKSAmJiAhY29uZmlnTWFya2VyLmluY2x1ZGVzKCctcicpKSB7XG4gICAgY29uZmlnTWFya2VyID0gY29uZmlnTWFya2VyLnJlcGxhY2UoJy0nLCAnLXInKTtcbiAgfVxuICBjb25zdCBjb25maWdzID0gYXdhaXQgY29uZmlnc0dldHRlcigpO1xuICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb25zOiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZ3MpfWApO1xuICAvLyBBc3N1bWUgdGhlICdlbicgY29uZmlndXJhdGlvbiBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKGNvbmZpZ01hcmtlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2VuJylcbiAgICAmJiAhY29uZmlncy5zb21lKCh4KSA9PiB4LnRyaW0oKSA9PT0gY29uZmlnTWFya2VyKSkge1xuICAgIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbiBuYW1lICcke2NvbmZpZ01hcmtlcn0nIGlzIHVua25vd24uIGAgK1xuICAgICAgYFJlcGxhY2luZyBpdCB3aXRoICcke2RlZmF1bHRNYXJrZXJ9J2ApO1xuICAgIGNvbmZpZ01hcmtlciA9IGRlZmF1bHRNYXJrZXI7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBjb25maWd1cmF0aW9uOiAnJHtjb25maWdNYXJrZXJ9J2ApO1xuICB9XG4gIHJldHVybiBjb25maWdNYXJrZXI7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBvdXRwdXQgaW4gSlNPTiBmb3JtYXQgcmV0cmlldmVkIGZyb21cbiAqIHRoZSBjb3JyZXNwb25kaW5nIEFwcGl1bSBTZXR0aW5ncyBicm9hZGNhc3QgY2FsbHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0IFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbnRpdHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgd2hpY2ggaXNcbiAqIGdvaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gVGhlIHBhcnNlZCBKU09OIG9iamVjdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBvdXRwdXQgY2Fubm90IGJlIHBhcnNlZFxuICogYXMgYSB2YWxpZCBKU09OXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbkRhdGEgKG91dHB1dCwgZW50aXR5TmFtZSkge1xuICBpZiAoIS9cXGJyZXN1bHQ9LTFcXGIvLnRlc3Qob3V0cHV0KSB8fCAhL1xcYmRhdGE9XCIvLnRlc3Qob3V0cHV0KSkge1xuICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSAvXFxiZGF0YT0oXCIuKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBqc29uU3RyID0gXy50cmltKG1hdGNoWzFdKS5yZXBsYWNlKC8oXlwiKXwoXCIkKS9nLCAnJyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoanNvblN0cik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSByZXN1bHRpbmcgZGF0YSBzdHJpbmcuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIGdpdmVuIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGFiYnJldmlhdGlvbnNcbiAqIHRvIEFWRCBhcmd1bWVudHMgYXJyYXlcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIExhbmd1YWdlIG5hbWUsIGZvciBleGFtcGxlICdmcidcbiAqIEBwYXJhbSB7P3N0cmluZ30gY291bnRyeSBDb3VudHJ5IG5hbWUsIGZvciBleGFtcGxlICdDQSdcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZ2VuZXJhdGVkIGFyZ3VtZW50cy4gVGhlXG4gKiByZXN1bHRpbmcgYXJyYXkgbWlnaHQgYmUgZW1wdHkgaWYgYm90aCBhcmd1bWVudHMgYXJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIHRvQXZkTG9jYWxlQXJncyAobGFuZ3VhZ2UsIGNvdW50cnkpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sYW5ndWFnZT0ke2xhbmd1YWdlLnRvTG93ZXJDYXNlKCl9YCk7XG4gIH1cbiAgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5jb3VudHJ5PSR7Y291bnRyeS50b1VwcGVyQ2FzZSgpfWApO1xuICB9XG4gIGxldCBsb2NhbGU7XG4gIGlmIChfLmlzU3RyaW5nKGxhbmd1YWdlKSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpICYmIGxhbmd1YWdlICYmIGNvdW50cnkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpICsgJy0nICsgY291bnRyeS50b1VwcGVyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2NhbGUgPSBjb3VudHJ5O1xuICB9XG4gIGlmIChsb2NhbGUpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubG9jYWxlPSR7bG9jYWxlfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIEFuZHJvaWQgcHJlZmVyZW5jZXMgcm9vdFxuICpcbiAqIEByZXR1cm5zIHs/c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgYG51bGxgIGlmIHRoZSBmb2xkZXIgY2Fubm90IGJlIGZvdW5kXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQcmVmc1Jvb3QgKCkge1xuICBsZXQgbG9jYXRpb24gPSBwcm9jZXNzLmVudi5BTkRST0lEX0VNVUxBVE9SX0hPTUU7XG4gIGlmIChhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG5cbiAgaWYgKGxvY2F0aW9uKSB7XG4gICAgbG9nLndhcm4oYFRoZSB2YWx1ZSBvZiB0aGUgQU5EUk9JRF9FTVVMQVRPUl9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICB9XG5cbiAgY29uc3QgaG9tZSA9IHByb2Nlc3MuZW52LkhPTUUgfHwgcHJvY2Vzcy5lbnYuVVNFUlBST0ZJTEU7XG4gIGlmIChob21lKSB7XG4gICAgbG9jYXRpb24gPSBwYXRoLnJlc29sdmUoaG9tZSwgJy5hbmRyb2lkJyk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICBsb2cuZGVidWcoYEFuZHJvaWQgY29uZmlnIHJvb3QgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbG9jYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBvbiB0aGUgZmlsZXN5c3RlbSBhbmQgaXMgYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxvY2F0aW9uIFRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpckV4aXN0cyAobG9jYXRpb24pIHtcbiAgcmV0dXJuIGxvY2F0aW9uXG4gICAgJiYgYXdhaXQgZnMuZXhpc3RzKGxvY2F0aW9uKVxuICAgICYmIChhd2FpdCBmcy5zdGF0KGxvY2F0aW9uKSkuaXNEaXJlY3RvcnkoKTtcbn1cblxuZXhwb3J0IHtcbiAgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCwgdW56aXBGaWxlLFxuICBnZXRJTUVMaXN0RnJvbU91dHB1dCwgZ2V0SmF2YUZvck9zLCBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsXG4gIGdldFN1cmZhY2VPcmllbnRhdGlvbiwgaXNTY3JlZW5PbkZ1bGx5LCBidWlsZFN0YXJ0Q21kLCBnZXRKYXZhSG9tZSxcbiAgcm9vdERpciwgZ2V0U2RrVG9vbHNWZXJzaW9uLCBnZXRBcGtzaWduZXJGb3JPcywgZ2V0QnVpbGRUb29sc0RpcnMsXG4gIGdldEFwa2FuYWx5emVyRm9yT3MsIGdldE9wZW5Tc2xGb3JPcywgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMsIEFQS1NfRVhURU5TSU9OLFxuICBBUEtfSU5TVEFMTF9USU1FT1VULCBBUEtTX0lOU1RBTExfVElNRU9VVCwgYnVpbGRJbnN0YWxsQXJncywgQVBLX0VYVEVOU0lPTixcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBwYXJzZU1hbmlmZXN0LCBwYXJzZUFhcHRTdHJpbmdzLCBwYXJzZUFhcHQyU3RyaW5ncyxcbiAgZm9ybWF0Q29uZmlnTWFya2VyLCBwYXJzZUpzb25EYXRhLCB1bnNpZ25BcGssIHRvQXZkTG9jYWxlQXJncywgcmVxdWlyZVNka1Jvb3QsXG4gIGdldFNka1Jvb3RGcm9tRW52LCBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMsXG59O1xuIl0sImZpbGUiOiJsaWIvaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
840
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbInJvb3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiQVBLU19FWFRFTlNJT04iLCJBUEtfRVhURU5TSU9OIiwiQVBLX0lOU1RBTExfVElNRU9VVCIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiZ2V0U2RrUm9vdEZyb21FbnYiLCJBTkRST0lEX0hPTUUiLCJBTkRST0lEX1NES19ST09UIiwicmVxdWlyZVNka1Jvb3QiLCJjdXN0b21Sb290Iiwic2RrUm9vdCIsImRvY01zZyIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJmcyIsImV4aXN0cyIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicmVhZEZpbGUiLCJwbGF0Zm9ybVBhdGgiLCJkaXJuYW1lIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bnppcEZpbGUiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwiZXh0cmFjdEFsbFRvIiwidW5zaWduQXBrIiwiYXBrUGF0aCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsIm1ldGFJbmZGb2xkZXJOYW1lIiwiaGFzTWV0YUluZiIsInJlYWRFbnRyaWVzIiwiZW50cnkiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJ0bXBaaXBSb290IiwicmltcmFmIiwidG1wUmVzdWx0UGF0aCIsInRvQXJjaGl2ZSIsInVubGluayIsIm12IiwiZ2V0SU1FTGlzdEZyb21PdXRwdXQiLCJzdGRvdXQiLCJlbmdpbmVzIiwibGluZSIsInNwbGl0IiwibGVuZ3RoIiwicHVzaCIsInRyaW0iLCJyZXBsYWNlIiwiZ2V0SmF2YUhvbWUiLCJtZW1vaXplIiwiSkFWQV9IT01FIiwiZ2V0SmF2YUZvck9zIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiZ2V0T3BlblNzbEZvck9zIiwiYmluYXJ5TmFtZSIsIndoaWNoIiwiZXJyIiwiZ2V0QXBrc2lnbmVyRm9yT3MiLCJzeXNIZWxwZXJzIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRBcGthbmFseXplckZvck9zIiwiaXNTaG93aW5nTG9ja3NjcmVlbiIsImR1bXBzeXMiLCJzb21lIiwieCIsImluY2x1ZGVzIiwiZXZlcnkiLCJ0ZXN0IiwiaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIiwibSIsImdldFN1cmZhY2VPcmllbnRhdGlvbiIsImlzU2NyZWVuT25GdWxseSIsImJ1aWxkU3RhcnRDbWQiLCJzdGFydEFwcE9wdGlvbnMiLCJhcGlMZXZlbCIsInVzZXIiLCJ3YWl0Rm9yTGF1bmNoIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJmbGFncyIsImNtZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwicGFyc2VLZXlWYWx1ZSIsInN0ciIsInNwYWNlIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlIiwiYXJncyIsImFwcGx5IiwiZmxhZyIsImZsYWdQb3MiLCJwcmV2QXJncyIsImdldFNka1Rvb2xzVmVyc2lvbiIsImFuZHJvaWRIb21lIiwicHJvcGVydGllc1BhdGgiLCJwcm9wZXJ0aWVzQ29udGVudCIsInZlcnNpb25NYXRjaGVyIiwiUmVnRXhwIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZ2V0QnVpbGRUb29sc0RpcnMiLCJidWlsZFRvb2xzRGlycyIsIm1hcCIsImRpciIsImEiLCJiIiwic2VtdmVyIiwicmNvbXBhcmUiLCJwYWlyIiwibWVzc2FnZSIsInBhaXJzIiwiQiIsIm10aW1lIiwidmFsdWVPZiIsImluZm8iLCJleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyIsImR1bXBzeXNPdXRwdXQiLCJncm91cE5hbWVzIiwiZ3JhbnRlZFN0YXRlIiwiZ3JvdXBQYXR0ZXJuQnlOYW1lIiwiZ3JvdXBOYW1lIiwiZXNjYXBlUmVnRXhwIiwiaW5kZW50UGF0dGVybiIsInBlcm1pc3Npb25OYW1lUGF0dGVybiIsImdyYW50ZWRTdGF0ZVBhdHRlcm4iLCJncm91cE1hdGNoIiwibGluZXMiLCJ0aXRsZUluZGVudCIsInNlYXJjaCIsInNsaWNlIiwiY3VycmVudEluZGVudCIsInBlcm1pc3Npb25OYW1lTWF0Y2giLCJpdGVtIiwicGVybWlzc2lvbiIsImdyYW50ZWRTdGF0ZU1hdGNoIiwiZ3JhbnRlZCIsImZpbHRlcmVkUmVzdWx0IiwiZmlsdGVyIiwiaXNCb29sZWFuIiwicGx1cmFsaXplIiwiYnVpbGRJbnN0YWxsQXJncyIsIm9wdGlvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsInVzZVNkY2FyZCIsImdyYW50UGVybWlzc2lvbnMiLCJwYXJ0aWFsSW5zdGFsbCIsInBhcnNlTWFuaWZlc3QiLCJtYW5pZmVzdCIsInBhY2thZ2UiLCJ2ZXJzaW9uQ29kZSIsInZlcnNpb25OYW1lIiwiYXBwbGljYXRpb24iLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlBbGlhc2VzIiwiZW5hYmxlZCIsImludGVudEZpbHRlcnMiLCJhY3Rpb25zIiwiY2F0ZWdvcmllcyIsImlzTWFpbkFjdGlvbiIsIm5hbWUiLCJpc0xhdW5jaGVyQ2F0ZWdvcnkiLCJwYXJzZUFhcHRTdHJpbmdzIiwicmF3T3V0cHV0IiwiY29uZmlnTWFya2VyIiwibm9ybWFsaXplU3RyaW5nTWF0Y2giLCJzIiwiYXBrU3RyaW5ncyIsImlzSW5Db25maWciLCJjdXJyZW50UmVzb3VyY2VJZCIsImlzSW5QbHVyYWxHcm91cCIsInF1b3RlZFN0cmluZ1BhdHRlcm4iLCJvcyIsIkVPTCIsInRyaW1tZWRMaW5lIiwicGFyc2VBYXB0MlN0cmluZ3MiLCJhbGxMaW5lcyIsImV4dHJhY3RDb250ZW50Iiwic3RhcnRJZHgiLCJpZHgiLCJzdGFydENoYXJQb3MiLCJ0ZXJtaW5hdGlvbkNoYXJNYXRjaCIsInRlcm1pbmF0aW9uQ2hhclBvcyIsImluZGV4IiwidHJpbVN0YXJ0IiwiaXNJbkN1cnJlbnRDb25maWciLCJsaW5lSW5kZXgiLCJjb250ZW50IiwiaXNTdHJpbmciLCJmb3JtYXRDb25maWdNYXJrZXIiLCJjb25maWdzR2V0dGVyIiwiZGVzaXJlZE1hcmtlciIsImRlZmF1bHRNYXJrZXIiLCJjb25maWdzIiwidG9Mb3dlckNhc2UiLCJwYXJzZUpzb25EYXRhIiwib3V0cHV0IiwiZW50aXR5TmFtZSIsImpzb25TdHIiLCJwYXJzZSIsImUiLCJ0b0F2ZExvY2FsZUFyZ3MiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJ0b1VwcGVyQ2FzZSIsImxvY2FsZSIsImdldEFuZHJvaWRQcmVmc1Jvb3QiLCJsb2NhdGlvbiIsIkFORFJPSURfRU1VTEFUT1JfSE9NRSIsImRpckV4aXN0cyIsImhvbWUiLCJIT01FIiwiVVNFUlBST0ZJTEUiLCJlc2NhcGVTaGVsbEFyZyIsImFyZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsYUFBWixHQUE0QixJQUE1QixHQUFtQyxPQUEzRCxDQUFoQjs7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE9BQXZCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxNQUF0Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1Qjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBR0QsbUJB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ZixJQUF1QixJQUFHQSxHQUFHLENBQUM5SyxPQUFKLENBQVksSUFBWixFQUFrQixJQUFsQixDQUF3QixHQUFsRCxHQUF1RDhLLEdBQTlEO0FBQ0Q7O0FBQ0QsU0FBT0EsR0FBRyxDQUFDOUssT0FBSixDQUFZLElBQVosRUFBa0IsS0FBbEIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCB6aXAsIHV0aWwsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuXG5jb25zdCByb290RGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKTtcbmNvbnN0IEFQS1NfRVhURU5TSU9OID0gJy5hcGtzJztcbmNvbnN0IEFQS19FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBBUEtfSU5TVEFMTF9USU1FT1VUID0gNjAwMDA7XG5jb25zdCBBUEtTX0lOU1RBTExfVElNRU9VVCA9IEFQS19JTlNUQUxMX1RJTUVPVVQgKiAyO1xuY29uc3QgREVGQVVMVF9BREJfRVhFQ19USU1FT1VUID0gMjAwMDA7IC8vIGluIG1pbGxpc2Vjb25kc1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBzZXQgZm9yIEFuZHJvaWQgVG9vbHMgdG8gd29yayBwcm9wZXJseScpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIHJldHVybiBwYXRoLnJlc29sdmUoYXdhaXQgZ2V0SmF2YUhvbWUoKSwgJ2JpbicsXG4gICAgYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWApO1xufSk7XG5cbmNvbnN0IGdldE9wZW5Tc2xGb3JPcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmluYXJ5TmFtZSA9IGBvcGVuc3NsJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy53aGljaChiaW5hcnlOYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgb3BlbnNzbCB0b29sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gYW5kIGF2YWlsYWJsZSBvbiB0aGUgcGF0aCcpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGtzaWduZXIgdG9vbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGtzaWduZXIgdG9vbC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdG9vbCBpcyBub3QgcHJlc2VudCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFwa3NpZ25lckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGtzaWduZXIuamFyJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL2Fwa2FuYWx5emVyLmh0bWxcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgdG9vbCBpcyBub3QgcHJlc2VudCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFwa2FuYWx5emVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa2FuYWx5emVyJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIG1TaG93aW5nTG9ja3NjcmVlbiBvciBtRHJlYW1pbmdMb2Nrc2NyZWVuIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZVxuICogaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZ1xuICpcbiAqIEEgbm90ZTogYGFkYiBzaGVsbCBkdW1wc3lzIHRydXN0YCBwZXJmb3JtcyBiZXR0ZXIgd2hpbGUgZGV0ZWN0aW5nIHRoZSBsb2NrZWQgc2NyZWVuIHN0YXRlXG4gKiBpbiBjb21wYXJpc29uIHRvIGBhZGIgZHVtcHN5cyB3aW5kb3dgIG91dHB1dCBwYXJzaW5nLlxuICogQnV0IHRoZSB0cnVzdCBjb21tYW5kIGRvZXMgbm90IHdvcmsgZm9yIGBTd2lwZWAgdW5sb2NrIHBhdHRlcm4uXG4gKlxuICogSW4gc29tZSBBbmRyb2lkIGRldmljZXMgKFByb2JhYmx5IGFyb3VuZCBBbmRyb2lkIDEwKyksIGBtU2hvd2luZ0xvY2tzY3JlZW5gIGFuZCBgbURyZWFtaW5nTG9ja3NjcmVlbmBcbiAqIGRvIG5vdCB3b3JrIHRvIGRldGVjdCBsb2NrIHN0YXR1cy4gSW5zdGVhZCwga2V5Z3VhcmQgcHJlZmVyZW5jZXMgaGVscHMgdG8gZGV0ZWN0IHRoZSBsb2NrIGNvbmRpdGlvbi5cbiAqIFNvbWUgZGV2aWNlcyBzdWNoIGFzIEFuZHJvaWQgVFYgZG8gbm90IGhhdmUga2V5Z3VhcmQsIHNvIHdlIHNob3VsZCBrZWVwXG4gKiBzY3JlZW4gY29uZGl0aW9uIGFzIHRoaXMgcHJpbWFyeSBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgLSBUaGUgb3V0cHV0IG9mIGR1bXBzeXMgd2luZG93IGNvbW1hbmQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmcuXG4gKi9cbmZ1bmN0aW9uIGlzU2hvd2luZ0xvY2tzY3JlZW4gKGR1bXBzeXMpIHtcbiAgcmV0dXJuIF8uc29tZShbJ21TaG93aW5nTG9ja3NjcmVlbj10cnVlJywgJ21EcmVhbWluZ0xvY2tzY3JlZW49dHJ1ZSddLCAoeCkgPT4gZHVtcHN5cy5pbmNsdWRlcyh4KSlcbiAgICAvLyBgbUlzU2hvd2luZ2AgYW5kIGBtSW5wdXRSZXN0cmljdGVkYCBhcmUgYHRydWVgIGluIGxvY2sgY29uZGl0aW9uLiBgZmFsc2VgIGlzIHVubG9jayBjb25kaXRpb24uXG4gICAgfHwgXy5ldmVyeShbL0tleWd1YXJkU3RhdGVNb25pdG9yW1xcblxcc10rbUlzU2hvd2luZz10cnVlLywgL1xccyttSW5wdXRSZXN0cmljdGVkPXRydWUvXSwgKHgpID0+IHgudGVzdChkdW1wc3lzKSk7XG59XG5cbi8qXG4gKiBDaGVja3MgbUN1cnJlbnRGb2N1cyBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgS2V5Z3VhcmQgaXMgYWN0aXZhdGVkXG4gKi9cbmZ1bmN0aW9uIGlzQ3VycmVudEZvY3VzT25LZXlndWFyZCAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9tQ3VycmVudEZvY3VzLitLZXlndWFyZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gKG0gJiYgbS5sZW5ndGggJiYgbVswXSkgPyB0cnVlIDogZmFsc2U7XG59XG5cbi8qXG4gKiBSZWFkcyBTdXJmYWNlT3JpZW50YXRpb24gaW4gZHVtcHN5cyBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gZ2V0U3VyZmFjZU9yaWVudGF0aW9uIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL1N1cmZhY2VPcmllbnRhdGlvbjogXFxkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiBtICYmIHBhcnNlSW50KG1bMF0uc3BsaXQoJzonKVsxXSwgMTApO1xufVxuXG4vKlxuICogQ2hlY2tzIG1TY3JlZW5PbkZ1bGx5IGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBzY3JlZW4gaXMgc2hvd2luZ1xuICogRGVmYXVsdCBpcyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzU2NyZWVuT25GdWxseSAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9tU2NyZWVuT25GdWxseT1cXHcrL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAhbSB8fCAvLyBpZiBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nIHdlIGFzc3VtZSBzY3JlZW4gaXMgZnVsbHkgb25cbiAgICAgICAgIChtICYmIG0ubGVuZ3RoID4gMCAmJiBtWzBdLnNwbGl0KCc9JylbMV0gPT09ICd0cnVlJykgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQnVpbGRzIGNvbW1hbmQgbGluZSByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGdpdmVuXG4gKiBhcHBsaWNhdGlvbiBzdGFydHVwIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0YXJ0QXBwT3B0aW9uc30gc3RhcnRBcHBPcHRpb25zIC0gQXBwbGljYXRpb24gb3B0aW9ucyBtYXBwaW5nXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgYWN0dWFsIE9TIEFQSSBsZXZlbFxuICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBhY3R1YWwgY29tbWFuZCBsaW5lIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU3RhcnRDbWQgKHN0YXJ0QXBwT3B0aW9ucywgYXBpTGV2ZWwpIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgICBwa2csXG4gICAgYWN0aXZpdHksXG4gICAgYWN0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIHN0b3BBcHAsXG4gICAgZmxhZ3MsXG4gIH0gPSBzdGFydEFwcE9wdGlvbnM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nLCAnc3RhcnQnXTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgaWYgKHdhaXRGb3JMYXVuY2gpIHtcbiAgICBjbWQucHVzaCgnLVcnKTtcbiAgfVxuICBpZiAoYWN0aXZpdHkgJiYgcGtnKSB7XG4gICAgY21kLnB1c2goJy1uJywgYCR7cGtnfS8ke2FjdGl2aXR5fWApO1xuICB9XG4gIGlmIChzdG9wQXBwICYmIGFwaUxldmVsID49IDE1KSB7XG4gICAgY21kLnB1c2goJy1TJyk7XG4gIH1cbiAgaWYgKGFjdGlvbikge1xuICAgIGNtZC5wdXNoKCctYScsIGFjdGlvbik7XG4gIH1cbiAgaWYgKGNhdGVnb3J5KSB7XG4gICAgY21kLnB1c2goJy1jJywgY2F0ZWdvcnkpO1xuICB9XG4gIGlmIChmbGFncykge1xuICAgIGNtZC5wdXNoKCctZicsIGZsYWdzKTtcbiAgfVxuICBpZiAoc3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSB7XG4gICAgLy8gZXhwZWN0IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHRvIGJlIGEgc2luZ2xlIHN0cmluZyBvZiB0aGUgZm9ybTpcbiAgICAvLyAgICAgXCItZmxhZyBrZXlcIlxuICAgIC8vICAgICBcIi1mbGFnIGtleSB2YWx1ZVwiXG4gICAgLy8gb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSAoZS5nLiwgXCItZmxhZzEga2V5MSAtZmxhZzIga2V5MiB2YWx1ZTJcIilcblxuICAgIC8vIHRha2UgYSBzdHJpbmcgYW5kIHBhcnNlIG91dCB0aGUgcGFydCBiZWZvcmUgYW55IHNwYWNlcywgYW5kIGFueXRoaW5nIGFmdGVyXG4gICAgLy8gdGhlIGZpcnN0IHNwYWNlXG4gICAgbGV0IHBhcnNlS2V5VmFsdWUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICBzdHIgPSBzdHIudHJpbSgpO1xuICAgICAgbGV0IHNwYWNlID0gc3RyLmluZGV4T2YoJyAnKTtcbiAgICAgIGlmIChzcGFjZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPyBbc3RyXSA6IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtzdHIuc3Vic3RyaW5nKDAsIHNwYWNlKS50cmltKCksIHN0ci5zdWJzdHJpbmcoc3BhY2UgKyAxKS50cmltKCldO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyBhbmQgcHVsbCBvdXQgdGhlIGFyZ3VtZW50c1xuICAgIC8vIGFkZCBhIHNwYWNlIGluaXRpYWxseSBzbyBmbGFncyBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIGFyZ3VtZW50cyB0aGF0XG4gICAgLy8gaGF2ZSBpbnRlcm5hbCBoeXBoZW5zXG4gICAgbGV0IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzID0gYCAke3N0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50c31gO1xuICAgIGxldCByZSA9IC8gKC1bXlxcc10rKSAoLispLztcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgbGV0IGFyZ3MgPSByZS5leGVjKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKTtcbiAgICAgIGlmICghYXJncykge1xuICAgICAgICBpZiAob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gbm8gbW9yZSBmbGFncywgc28gdGhlIHJlbWFpbmRlciBjYW4gYmUgdHJlYXRlZCBhcyAna2V5JyBvciAna2V5IHZhbHVlJ1xuICAgICAgICAgIGNtZC5wdXNoLmFwcGx5KGNtZCwgcGFyc2VLZXlWYWx1ZShvcHRpb25hbEludGVudEFyZ3VtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWtlIHRoZSBmbGFnIGFuZCBzZWUgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nXG4gICAgICAvLyBpZiBpdCBpcyBub3QsIHRoZW4gaXQgbWVhbnMgd2UgaGF2ZSBiZWVuIHRocm91Z2ggYWxyZWFkeSwgYW5kXG4gICAgICAvLyB3aGF0IGlzIGJlZm9yZSB0aGUgZmxhZyBpcyB0aGUgYXJndW1lbnQgZm9yIHRoZSBwcmV2aW91cyBmbGFnXG4gICAgICBsZXQgZmxhZyA9IGFyZ3NbMV07XG4gICAgICBsZXQgZmxhZ1BvcyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmluZGV4T2YoZmxhZyk7XG4gICAgICBpZiAoZmxhZ1BvcyAhPT0gMCkge1xuICAgICAgICBsZXQgcHJldkFyZ3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5zdWJzdHJpbmcoMCwgZmxhZ1Bvcyk7XG4gICAgICAgIGNtZC5wdXNoLmFwcGx5KGNtZCwgcGFyc2VLZXlWYWx1ZShwcmV2QXJncykpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIGZsYWcsIGFzIHRoZXJlIGFyZSBubyBtb3JlIGVhcmxpZXIgYXJndW1lbnRzXG4gICAgICBjbWQucHVzaChmbGFnKTtcblxuICAgICAgLy8gbWFrZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyBob2xkIHRoZSByZW1haW5kZXJcbiAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzID0gYXJnc1syXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNtZDtcbn1cblxuY29uc3QgZ2V0U2RrVG9vbHNWZXJzaW9uID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNka1Rvb2xzVmVyc2lvbiAoKSB7XG4gIGNvbnN0IGFuZHJvaWRIb21lID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9IT01FO1xuICBpZiAoIWFuZHJvaWRIb21lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBTkRST0lEX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZXhwZWN0ZWQgdG8gYmUgc2V0Jyk7XG4gIH1cbiAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUoYW5kcm9pZEhvbWUsICd0b29scycsICdzb3VyY2UucHJvcGVydGllcycpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwcm9wZXJ0aWVzUGF0aCkpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IGZpbmQgJHtwcm9wZXJ0aWVzUGF0aH0gZmlsZSB0byByZWFkIFNESyB2ZXJzaW9uIGZyb21gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcHJvcGVydGllc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wZXJ0aWVzUGF0aCwgJ3V0ZjgnKTtcbiAgY29uc3QgdmVyc2lvbk1hdGNoZXIgPSBuZXcgUmVnRXhwKC9Qa2dcXC5SZXZpc2lvbj0oXFxkKylcXC4/KFxcZCspP1xcLj8oXFxkKyk/Lyk7XG4gIGNvbnN0IG1hdGNoID0gdmVyc2lvbk1hdGNoZXIuZXhlYyhwcm9wZXJ0aWVzQ29udGVudCk7XG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYWpvcjogcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICAgIG1pbm9yOiBtYXRjaFsyXSA/IHBhcnNlSW50KG1hdGNoWzJdLCAxMCkgOiAwLFxuICAgICAgYnVpbGQ6IG1hdGNoWzNdID8gcGFyc2VJbnQobWF0Y2hbM10sIDEwKSA6IDBcbiAgICB9O1xuICB9XG4gIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgXCJQa2cuUmV2aXNpb25cIiB2YWx1ZSBmcm9tICR7cHJvcGVydGllc1BhdGh9YCk7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZnVsbCBwYXRocyB0byBhbGwgJ2J1aWxkLXRvb2xzJyBzdWJmb2xkZXJzIHVuZGVyIHRoZSBwYXJ0aWN1bGFyXG4gKiBTREsgcm9vdCBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrUm9vdCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGZ1bGwgcGF0aHMgdG8gdGhlIHJlc3VsdGluZyBmb2xkZXJzIHNvcnRlZCBieVxuICogbW9kaWZpY2F0aW9uIGRhdGUgKHRoZSBuZXdlc3QgY29tZXMgZmlyc3QpIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWFjdGhlcyB3ZXJlIGZvdW5kXG4gKi9cbmNvbnN0IGdldEJ1aWxkVG9vbHNEaXJzID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkVG9vbHNEaXJzIChzZGtSb290KSB7XG4gIGxldCBidWlsZFRvb2xzRGlycyA9IGF3YWl0IGZzLmdsb2IoJyovJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdidWlsZC10b29scycpLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBidWlsZFRvb2xzRGlycyA9IGJ1aWxkVG9vbHNEaXJzXG4gICAgICAubWFwKChkaXIpID0+IFtwYXRoLmJhc2VuYW1lKGRpciksIGRpcl0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gc2VtdmVyLnJjb21wYXJlKGFbMF0sIGJbMF0pKVxuICAgICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3Qgc29ydCBidWlsZC10b29scyBmb2xkZXJzICR7SlNPTi5zdHJpbmdpZnkoYnVpbGRUb29sc0RpcnMubWFwKChkaXIpID0+IHBhdGguYmFzZW5hbWUoZGlyKSkpfSBgICtcbiAgICAgIGBieSBzZW1hbnRpYyB2ZXJzaW9uIG5hbWVzLmApO1xuICAgIGxvZy53YXJuKGBGYWxsaW5nIGJhY2sgdG8gc29ydGluZyBieSBtb2RpZmljYXRpb24gZGF0ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgY29uc3QgcGFpcnMgPSBhd2FpdCBCLm1hcChidWlsZFRvb2xzRGlycywgYXN5bmMgKGRpcikgPT4gWyhhd2FpdCBmcy5zdGF0KGRpcikpLm10aW1lLnZhbHVlT2YoKSwgZGlyXSk7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBwYWlyc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdKVxuICAgICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSk7XG4gIH1cbiAgbG9nLmluZm8oYEZvdW5kICR7YnVpbGRUb29sc0RpcnMubGVuZ3RofSAnYnVpbGQtdG9vbHMnIGZvbGRlcnMgdW5kZXIgJyR7c2RrUm9vdH0nIChuZXdlc3QgZmlyc3QpOmApO1xuICBmb3IgKGxldCBkaXIgb2YgYnVpbGRUb29sc0RpcnMpIHtcbiAgICBsb2cuaW5mbyhgICAgICR7ZGlyfWApO1xuICB9XG4gIHJldHVybiBidWlsZFRvb2xzRGlycztcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9uIG5hbWVzIGVuY29kZWQgaW4gYGR1bXBzeXMgcGFja2FnZWAgY29tbWFuZCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXNPdXRwdXQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0LlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBncm91cE5hbWVzIC0gVGhlIGxpc3Qgb2YgZ3JvdXAgbmFtZXMgdG8gbGlzdCBwZXJtaXNzaW9ucyBmb3IuXG4gKiBAcGFyYW0gez9ib29sZWFufSBncmFudGVkU3RhdGUgLSBUaGUgZXhwZWN0ZWQgc3RhdGUgb2YgYGdyYW50ZWRgIGF0dHJpYnV0ZSB0byBmaWx0ZXIgd2l0aC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGZpbHRlcmluZyBpcyBkb25lIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNldC5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiBtYXRjaGVkIHBlcm1pc3Npb24gbmFtZXMgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQuXG4gKi9cbmNvbnN0IGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zID0gZnVuY3Rpb24gKGR1bXBzeXNPdXRwdXQsIGdyb3VwTmFtZXMsIGdyYW50ZWRTdGF0ZSA9IG51bGwpIHtcbiAgY29uc3QgZ3JvdXBQYXR0ZXJuQnlOYW1lID0gKGdyb3VwTmFtZSkgPT4gbmV3IFJlZ0V4cChgXihcXFxccyoke18uZXNjYXBlUmVnRXhwKGdyb3VwTmFtZSl9IHBlcm1pc3Npb25zOltcXFxcc1xcXFxTXSspYCwgJ20nKTtcbiAgY29uc3QgaW5kZW50UGF0dGVybiA9IC9cXFN8JC87XG4gIGNvbnN0IHBlcm1pc3Npb25OYW1lUGF0dGVybiA9IC9hbmRyb2lkXFwuXFx3KlxcLj9wZXJtaXNzaW9uXFwuXFx3Ky87XG4gIGNvbnN0IGdyYW50ZWRTdGF0ZVBhdHRlcm4gPSAvXFxiZ3JhbnRlZD0oXFx3KykvO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBncm91cE5hbWUgb2YgZ3JvdXBOYW1lcykge1xuICAgIGNvbnN0IGdyb3VwTWF0Y2ggPSBncm91cFBhdHRlcm5CeU5hbWUoZ3JvdXBOYW1lKS5leGVjKGR1bXBzeXNPdXRwdXQpO1xuICAgIGlmICghZ3JvdXBNYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZXMgPSBncm91cE1hdGNoWzFdLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAobGluZXMubGVuZ3RoIDwgMikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGVJbmRlbnQgPSBsaW5lc1swXS5zZWFyY2goaW5kZW50UGF0dGVybik7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzLnNsaWNlKDEpKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5zZWFyY2goaW5kZW50UGF0dGVybik7XG4gICAgICBpZiAoY3VycmVudEluZGVudCA8PSB0aXRsZUluZGVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGVybWlzc2lvbk5hbWVNYXRjaCA9IHBlcm1pc3Npb25OYW1lUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZU1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvbk5hbWVNYXRjaFswXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBncmFudGVkU3RhdGVNYXRjaCA9IGdyYW50ZWRTdGF0ZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmIChncmFudGVkU3RhdGVNYXRjaCkge1xuICAgICAgICBpdGVtLmdyYW50ZWQgPSBncmFudGVkU3RhdGVNYXRjaFsxXSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRSZXN1bHQgPSByZXN1bHRcbiAgICAuZmlsdGVyKChpdGVtKSA9PiAhXy5pc0Jvb2xlYW4oZ3JhbnRlZFN0YXRlKSB8fCBpdGVtLmdyYW50ZWQgPT09IGdyYW50ZWRTdGF0ZSlcbiAgICAubWFwKChpdGVtKSA9PiBpdGVtLnBlcm1pc3Npb24pO1xuICBsb2cuZGVidWcoYFJldHJpZXZlZCAke3V0aWwucGx1cmFsaXplKCdwZXJtaXNzaW9uJywgZmlsdGVyZWRSZXN1bHQubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgYGZyb20gJHtncm91cE5hbWVzfSAke3V0aWwucGx1cmFsaXplKCdncm91cCcsIGdyb3VwTmFtZXMubGVuZ3RoLCBmYWxzZSl9YCk7XG4gIHJldHVybiBmaWx0ZXJlZFJlc3VsdDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgZ2l2ZW4gb3B0aW9ucyBpbnRvIHRoZSBsaXN0IG9mIGBhZGIgaW5zdGFsbC5pbnN0YWxsLW11bHRpcGxlYCBjb21tYW5kIGFyZ3VtZW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBjdXJyZW50IEFQSSBsZXZlbFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBtYXBwaW5nIHRvIHRyYW5zZm9ybVxuICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBhcnJheSBvZiBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gYnVpbGRJbnN0YWxsQXJncyAoYXBpTGV2ZWwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcblxuICBpZiAoIXV0aWwuaGFzVmFsdWUob3B0aW9ucy5yZXBsYWNlKSB8fCBvcHRpb25zLnJlcGxhY2UpIHtcbiAgICByZXN1bHQucHVzaCgnLXInKTtcbiAgfVxuICBpZiAob3B0aW9ucy5hbGxvd1Rlc3RQYWNrYWdlcykge1xuICAgIHJlc3VsdC5wdXNoKCctdCcpO1xuICB9XG4gIGlmIChvcHRpb25zLnVzZVNkY2FyZCkge1xuICAgIHJlc3VsdC5wdXNoKCctcycpO1xuICB9XG4gIGlmIChvcHRpb25zLmdyYW50UGVybWlzc2lvbnMpIHtcbiAgICBpZiAoYXBpTGV2ZWwgPCAyMykge1xuICAgICAgbG9nLmRlYnVnKGBTa2lwcGluZyBwZXJtaXNzaW9ucyBncmFudCBvcHRpb24sIHNpbmNlIGAgK1xuICAgICAgICAgICAgICAgIGB0aGUgY3VycmVudCBBUEkgbGV2ZWwgJHthcGlMZXZlbH0gZG9lcyBub3Qgc3VwcG9ydCBhcHBsaWNhdGlvbnMgYCArXG4gICAgICAgICAgICAgICAgYHBlcm1pc3Npb25zIGN1c3RvbWl6YXRpb25gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goJy1nJyk7XG4gICAgfVxuICB9XG4gIC8vIEZvciBtdWx0aXBsZS1pbnN0YWxsXG4gIGlmIChvcHRpb25zLnBhcnRpYWxJbnN0YWxsKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hbmlmZXN0SW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHBrZyAtIFRoZSBhcHBsaWNhdGlvbiBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aXZpdHkgLSBUaGUgbmFtZSBvZiB0aGUgbWFpbiBwYWNrYWdlIGFjdGl2aXR5XG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlcnNpb25Db2RlIC0gVGhlIHZlcnNpb24gY29kZSBudW1iZXIgKG1pZ2h0IGJlIGBOYU5gKVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uTmFtZSAtIFRoZSB2ZXJzaW9uIG5hbWUgKG1pZ2h0IGJlIGBudWxsYClcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gcGFyc2luZyBvZiB0aGUgbWFuaWZlc3Qgb2JqZWN0IGluIG9yZGVyXG4gKiB0byBleHRyYWN0IHNvbWUgdml0YWwgdmFsdWVzIGZyb20gaXRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbWFuaWZlc3QgVGhlIG1hbmlmZXN0IGNvbnRlbnQgZm9ybWF0dGVkIGFzIEpTT05cbiAqIFNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9hZGJraXQtYXBrcmVhZGVyIGZvciBkZXRhaWxlZCBmb3JtYXQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtNYW5pZmVzdEluZm99XG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWFuaWZlc3QgKG1hbmlmZXN0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBwa2c6IG1hbmlmZXN0LnBhY2thZ2UsXG4gICAgdmVyc2lvbkNvZGU6IHBhcnNlSW50KG1hbmlmZXN0LnZlcnNpb25Db2RlLCAxMCksXG4gICAgdmVyc2lvbk5hbWU6IG1hbmlmZXN0LnZlcnNpb25OYW1lIHx8IG51bGwsXG4gIH07XG4gIGlmICghbWFuaWZlc3QuYXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gTG9vayBmb3IgZW5hYmxlZCBhY3Rpdml0eSBvciBhY3Rpdml0eS1hbGlhcyB3aXRoXG4gIC8vIGFjdGlvbiA9PSBhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiBhbmRcbiAgLy8gY2F0ZWdvcnkgPT0gYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVJcbiAgZm9yIChjb25zdCBhY3Rpdml0eSBvZiBbXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdGllcyxcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0eUFsaWFzZXMsXG4gIF0pIHtcbiAgICBpZiAoYWN0aXZpdHkuZW5hYmxlZCA9PT0gZmFsc2UgfHwgXy5pc0VtcHR5KGFjdGl2aXR5LmludGVudEZpbHRlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHthY3Rpb25zLCBjYXRlZ29yaWVzfSBvZiBhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KGFjdGlvbnMpIHx8IF8uaXNFbXB0eShjYXRlZ29yaWVzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYWluQWN0aW9uID0gYWN0aW9uc1xuICAgICAgICAuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nKTtcbiAgICAgIGNvbnN0IGlzTGF1bmNoZXJDYXRlZ29yeSA9IGNhdGVnb3JpZXNcbiAgICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyk7XG4gICAgICBpZiAoaXNNYWluQWN0aW9uICYmIGlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgICByZXN1bHQuYWN0aXZpdHkgPSBhY3Rpdml0eS5uYW1lO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGAoZGVmYXVsdClgXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdFN0cmluZ3MgKHJhd091dHB1dCwgY29uZmlnTWFya2VyKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZVN0cmluZ01hdGNoID0gZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9cIiQvLCAnJykucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKTtcbiAgfTtcblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBpc0luQ29uZmlnID0gZmFsc2U7XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgLy8gVGhlIHBhdHRlcm4gbWF0Y2hlcyBhbnkgcXVvdGVkIGNvbnRlbnQgaW5jbHVkaW5nIGVzY2FwZWQgcXVvdGVzXG4gIGNvbnN0IHF1b3RlZFN0cmluZ1BhdHRlcm4gPSAvXCJbXlwiXFxcXF0qKD86XFxcXC5bXlwiXFxcXF0qKSpcIi87XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXdPdXRwdXQuc3BsaXQob3MuRU9MKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChbJ2NvbmZpZycsICd0eXBlJywgJ3NwZWMnLCAnUGFja2FnZSddLnNvbWUoKHgpID0+IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoeCkpKSB7XG4gICAgICBpc0luQ29uZmlnID0gdHJpbW1lZExpbmUuc3RhcnRzV2l0aChgY29uZmlnICR7Y29uZmlnTWFya2VyfTpgKTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0luQ29uZmlnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG5cbiAgICAgIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnN0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86c3RyaW5nXFwvKFxcUyspOi8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpwbHVyYWxzXFwvKFxcUyspOi8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgICAgaXNJblBsdXJhbEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkICYmIHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJyhzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pO1xuICAgICAgfVxuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkICYmIGlzSW5QbHVyYWxHcm91cCAmJiB0cmltbWVkTGluZS5pbmNsdWRlcygnOiAoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IFtcbiAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgIG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0MiB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBvbmVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0MlN0cmluZ3MgKHJhd091dHB1dCwgY29uZmlnTWFya2VyKSB7XG4gIGNvbnN0IGFsbExpbmVzID0gcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCk7XG4gIGZ1bmN0aW9uIGV4dHJhY3RDb250ZW50IChzdGFydElkeCkge1xuICAgIGxldCBpZHggPSBzdGFydElkeDtcbiAgICBjb25zdCBzdGFydENoYXJQb3MgPSBhbGxMaW5lc1tzdGFydElkeF0uaW5kZXhPZignXCInKTtcbiAgICBpZiAoc3RhcnRDaGFyUG9zIDwgMCkge1xuICAgICAgcmV0dXJuIFtudWxsLCBpZHhdO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgd2hpbGUgKGlkeCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyTWF0Y2ggPSAvXCIkLy5leGVjKGFsbExpbmVzW2lkeF0pO1xuICAgICAgaWYgKHRlcm1pbmF0aW9uQ2hhck1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhclBvcyA9IHRlcm1pbmF0aW9uQ2hhck1hdGNoLmluZGV4O1xuICAgICAgICBpZiAoc3RhcnRJZHggPT09IGlkeCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBhbGxMaW5lc1tpZHhdLnN1YnN0cmluZyhzdGFydENoYXJQb3MgKyAxLCB0ZXJtaW5hdGlvbkNoYXJQb3MpLFxuICAgICAgICAgICAgaWR4XG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3Jlc3VsdH1cXFxcbiR7Xy50cmltU3RhcnQoYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoMCwgdGVybWluYXRpb25DaGFyUG9zKSl9YCxcbiAgICAgICAgICBpZHgsXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBpZiAoaWR4ID4gc3RhcnRJZHgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGBcXFxcbiR7Xy50cmltU3RhcnQoYWxsTGluZXNbaWR4XSl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBhbGxMaW5lc1tpZHhdLnN1YnN0cmluZyhzdGFydENoYXJQb3MgKyAxKTtcbiAgICAgIH1cbiAgICAgICsraWR4O1xuICAgIH1cbiAgICByZXR1cm4gW3Jlc3VsdCwgaWR4XTtcbiAgfVxuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICBsZXQgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgbGV0IGxpbmVJbmRleCA9IDA7XG4gIHdoaWxlIChsaW5lSW5kZXggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGFsbExpbmVzW2xpbmVJbmRleF0udHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChbJ3R5cGUnLCAnUGFja2FnZSddLnNvbWUoKHgpID0+IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoeCkpKSB7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG5cbiAgICAgIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnc3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3N0cmluZ1xcLyhcXFMrKS8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3BsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvcGx1cmFsc1xcLyhcXFMrKS8uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbWF0Y2hbMV07XG4gICAgICAgICAgaXNJblBsdXJhbEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQpIHtcbiAgICAgIGlmIChpc0luUGx1cmFsR3JvdXApIHtcbiAgICAgICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJygnKSkge1xuICAgICAgICAgIGlzSW5DdXJyZW50Q29uZmlnID0gdHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKTtcbiAgICAgICAgICArK2xpbmVJbmRleDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbkN1cnJlbnRDb25maWcpIHtcbiAgICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IFtcbiAgICAgICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCkpIHtcbiAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgIGlmIChfLmlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgKytsaW5lSW5kZXg7XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0aGUgY29uZmlnIG1hcmtlciwgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gcGFyc2UuLiBtZXRob2RzXG4gKiB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCByZXNvdXJjZSBmb3JtYXRzIGdlbmVyYXRlZCBieSBhYXB0KDIpIHRvb2xcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maWdzR2V0dGVyIFRoZSBmdW5jdGlvbiB3aG9zZSByZXN1bHQgaXMgYSBsaXN0XG4gKiBvZiBhcGsgY29uZmlnc1xuICogQHBhcmFtIHtzdHJpbmd9IGRlc2lyZWRNYXJrZXIgVGhlIGRlc2lyZWQgY29uZmlnIG1hcmtlciB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRNYXJrZXIgVGhlIGRlZmF1bHQgY29uZmlnIG1hcmtlciB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGNvbmZpZyBtYXJrZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZm9ybWF0Q29uZmlnTWFya2VyIChjb25maWdzR2V0dGVyLCBkZXNpcmVkTWFya2VyLCBkZWZhdWx0TWFya2VyKSB7XG4gIGxldCBjb25maWdNYXJrZXIgPSBkZXNpcmVkTWFya2VyIHx8IGRlZmF1bHRNYXJrZXI7XG4gIGlmIChjb25maWdNYXJrZXIuaW5jbHVkZXMoJy0nKSAmJiAhY29uZmlnTWFya2VyLmluY2x1ZGVzKCctcicpKSB7XG4gICAgY29uZmlnTWFya2VyID0gY29uZmlnTWFya2VyLnJlcGxhY2UoJy0nLCAnLXInKTtcbiAgfVxuICBjb25zdCBjb25maWdzID0gYXdhaXQgY29uZmlnc0dldHRlcigpO1xuICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb25zOiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZ3MpfWApO1xuICAvLyBBc3N1bWUgdGhlICdlbicgY29uZmlndXJhdGlvbiBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKGNvbmZpZ01hcmtlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2VuJylcbiAgICAmJiAhY29uZmlncy5zb21lKCh4KSA9PiB4LnRyaW0oKSA9PT0gY29uZmlnTWFya2VyKSkge1xuICAgIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbiBuYW1lICcke2NvbmZpZ01hcmtlcn0nIGlzIHVua25vd24uIGAgK1xuICAgICAgYFJlcGxhY2luZyBpdCB3aXRoICcke2RlZmF1bHRNYXJrZXJ9J2ApO1xuICAgIGNvbmZpZ01hcmtlciA9IGRlZmF1bHRNYXJrZXI7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBjb25maWd1cmF0aW9uOiAnJHtjb25maWdNYXJrZXJ9J2ApO1xuICB9XG4gIHJldHVybiBjb25maWdNYXJrZXI7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBvdXRwdXQgaW4gSlNPTiBmb3JtYXQgcmV0cmlldmVkIGZyb21cbiAqIHRoZSBjb3JyZXNwb25kaW5nIEFwcGl1bSBTZXR0aW5ncyBicm9hZGNhc3QgY2FsbHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0IFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbnRpdHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgd2hpY2ggaXNcbiAqIGdvaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gVGhlIHBhcnNlZCBKU09OIG9iamVjdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBvdXRwdXQgY2Fubm90IGJlIHBhcnNlZFxuICogYXMgYSB2YWxpZCBKU09OXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbkRhdGEgKG91dHB1dCwgZW50aXR5TmFtZSkge1xuICBpZiAoIS9cXGJyZXN1bHQ9LTFcXGIvLnRlc3Qob3V0cHV0KSB8fCAhL1xcYmRhdGE9XCIvLnRlc3Qob3V0cHV0KSkge1xuICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSAvXFxiZGF0YT0oXCIuKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBqc29uU3RyID0gXy50cmltKG1hdGNoWzFdKS5yZXBsYWNlKC8oXlwiKXwoXCIkKS9nLCAnJyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoanNvblN0cik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSByZXN1bHRpbmcgZGF0YSBzdHJpbmcuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIGdpdmVuIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGFiYnJldmlhdGlvbnNcbiAqIHRvIEFWRCBhcmd1bWVudHMgYXJyYXlcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIExhbmd1YWdlIG5hbWUsIGZvciBleGFtcGxlICdmcidcbiAqIEBwYXJhbSB7P3N0cmluZ30gY291bnRyeSBDb3VudHJ5IG5hbWUsIGZvciBleGFtcGxlICdDQSdcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZ2VuZXJhdGVkIGFyZ3VtZW50cy4gVGhlXG4gKiByZXN1bHRpbmcgYXJyYXkgbWlnaHQgYmUgZW1wdHkgaWYgYm90aCBhcmd1bWVudHMgYXJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIHRvQXZkTG9jYWxlQXJncyAobGFuZ3VhZ2UsIGNvdW50cnkpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sYW5ndWFnZT0ke2xhbmd1YWdlLnRvTG93ZXJDYXNlKCl9YCk7XG4gIH1cbiAgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5jb3VudHJ5PSR7Y291bnRyeS50b1VwcGVyQ2FzZSgpfWApO1xuICB9XG4gIGxldCBsb2NhbGU7XG4gIGlmIChfLmlzU3RyaW5nKGxhbmd1YWdlKSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpICYmIGxhbmd1YWdlICYmIGNvdW50cnkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpICsgJy0nICsgY291bnRyeS50b1VwcGVyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2NhbGUgPSBjb3VudHJ5O1xuICB9XG4gIGlmIChsb2NhbGUpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubG9jYWxlPSR7bG9jYWxlfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIEFuZHJvaWQgcHJlZmVyZW5jZXMgcm9vdFxuICpcbiAqIEByZXR1cm5zIHs/c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgYG51bGxgIGlmIHRoZSBmb2xkZXIgY2Fubm90IGJlIGZvdW5kXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQcmVmc1Jvb3QgKCkge1xuICBsZXQgbG9jYXRpb24gPSBwcm9jZXNzLmVudi5BTkRST0lEX0VNVUxBVE9SX0hPTUU7XG4gIGlmIChhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG5cbiAgaWYgKGxvY2F0aW9uKSB7XG4gICAgbG9nLndhcm4oYFRoZSB2YWx1ZSBvZiB0aGUgQU5EUk9JRF9FTVVMQVRPUl9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICB9XG5cbiAgY29uc3QgaG9tZSA9IHByb2Nlc3MuZW52LkhPTUUgfHwgcHJvY2Vzcy5lbnYuVVNFUlBST0ZJTEU7XG4gIGlmIChob21lKSB7XG4gICAgbG9jYXRpb24gPSBwYXRoLnJlc29sdmUoaG9tZSwgJy5hbmRyb2lkJyk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICBsb2cuZGVidWcoYEFuZHJvaWQgY29uZmlnIHJvb3QgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbG9jYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBvbiB0aGUgZmlsZXN5c3RlbSBhbmQgaXMgYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxvY2F0aW9uIFRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpckV4aXN0cyAobG9jYXRpb24pIHtcbiAgcmV0dXJuIGxvY2F0aW9uXG4gICAgJiYgYXdhaXQgZnMuZXhpc3RzKGxvY2F0aW9uKVxuICAgICYmIChhd2FpdCBmcy5zdGF0KGxvY2F0aW9uKSkuaXNEaXJlY3RvcnkoKTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLlxuICogVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgcG9zc2libGUgaXNzdWVzIHdpdGggaG93IHN5c3RlbSBgc3Bhd25gXG4gKiBjYWxsIGhhbmRsZXMgdGhlbS5cbiAqIFNlZSBodHRwczovL2Rpc2N1c3MuYXBwaXVtLmlvL3QvaG93LXRvLW1vZGlmeS13ZC1wcm94eS1hbmQtdWlhdXRvbWF0b3IyLXNvdXJjZS1jb2RlLXRvLXN1cHBvcnQtdW5pY29kZS8zMzQ2NlxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJnIE5vbi1lc2NhcGVkIGFyZ3VtZW50IHN0cmluZ1xuICogQHJldHVybnMgVGhlIGVzY2FwZWQgYXJndW1lbnRcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU2hlbGxBcmcgKGFyZykge1xuICBhcmcgPSBgJHthcmd9YDtcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiAvWyZ8Xlxcc10vLnRlc3QoYXJnKSA/IGBcIiR7YXJnLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgIDogYXJnO1xuICB9XG4gIHJldHVybiBhcmcucmVwbGFjZSgvJi9nLCAnXFxcXCYnKTtcbn1cblxuZXhwb3J0IHtcbiAgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCwgdW56aXBGaWxlLFxuICBnZXRJTUVMaXN0RnJvbU91dHB1dCwgZ2V0SmF2YUZvck9zLCBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsXG4gIGdldFN1cmZhY2VPcmllbnRhdGlvbiwgaXNTY3JlZW5PbkZ1bGx5LCBidWlsZFN0YXJ0Q21kLCBnZXRKYXZhSG9tZSxcbiAgcm9vdERpciwgZ2V0U2RrVG9vbHNWZXJzaW9uLCBnZXRBcGtzaWduZXJGb3JPcywgZ2V0QnVpbGRUb29sc0RpcnMsXG4gIGdldEFwa2FuYWx5emVyRm9yT3MsIGdldE9wZW5Tc2xGb3JPcywgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMsIEFQS1NfRVhURU5TSU9OLFxuICBBUEtfSU5TVEFMTF9USU1FT1VULCBBUEtTX0lOU1RBTExfVElNRU9VVCwgYnVpbGRJbnN0YWxsQXJncywgQVBLX0VYVEVOU0lPTixcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBwYXJzZU1hbmlmZXN0LCBwYXJzZUFhcHRTdHJpbmdzLCBwYXJzZUFhcHQyU3RyaW5ncyxcbiAgZm9ybWF0Q29uZmlnTWFya2VyLCBwYXJzZUpzb25EYXRhLCB1bnNpZ25BcGssIHRvQXZkTG9jYWxlQXJncywgcmVxdWlyZVNka1Jvb3QsXG4gIGdldFNka1Jvb3RGcm9tRW52LCBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMsIGVzY2FwZVNoZWxsQXJnLFxufTtcbiJdLCJmaWxlIjoibGliL2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/build/lib/logcat.js
CHANGED
|
@@ -218,4 +218,4 @@ var _default = Logcat;
|
|
|
218
218
|
exports.default = _default;require('source-map-support').install();
|
|
219
219
|
|
|
220
220
|
|
|
221
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2djYXQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwiZXZlbnRzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTUFYX0JVRkZFUl9TSVpFIiwiTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUIiwiU1VQUE9SVEVEX0ZPUk1BVFMiLCJTVVBQT1JURURfUFJJT1JJVElFUyIsIkRFRkFVTFRfUFJJT1JJVFkiLCJERUZBVUxUX1RBRyIsIkRFRkFVTFRfRk9STUFUIiwicmVxdWlyZUZvcm1hdCIsImZvcm1hdCIsImluY2x1ZGVzIiwiaW5mbyIsInJlcXVpcmVTcGVjIiwic3BlYyIsInRhZyIsInByaW9yaXR5Iiwic3BsaXQiLCJyZXN1bHRUYWciLCJzb21lIiwicCIsIl8iLCJ0b0xvd2VyIiwiZm9ybWF0RmlsdGVyU3BlY3MiLCJmaWx0ZXJTcGVjcyIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpc1N0cmluZyIsInN0YXJ0c1dpdGgiLCJtYXAiLCJMb2djYXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhZGIiLCJjbGVhckxvZ3MiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiZGVidWciLCJkZWJ1Z1RyYWNlIiwibWF4QnVmZmVyU2l6ZSIsImxvZ3MiLCJsb2dJZHhTaW5jZUxhc3RSZXF1ZXN0Iiwic3RhcnRDYXB0dXJlIiwic3RhcnRlZCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJyZXNvbHZlIiwiYXJncyIsInJlamVjdCIsImNsZWFyIiwiY21kIiwiZGVmYXVsdEFyZ3MiLCJ1dGlsIiwicXVvdGUiLCJwYXRoIiwicHJvYyIsIlN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJlcnJvciIsIndhcm4iLCJsaW5lcyIsImxpbmUiLCJ0ZXN0IiwiRXJyb3IiLCJvdXRwdXRIYW5kbGVyIiwidHJpbSIsInN0YXJ0Iiwic2V0VGltZW91dCIsIm91dHB1dCIsInByZWZpeCIsImxlbmd0aCIsInNoaWZ0Iiwib3V0cHV0T2JqIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImxldmVsIiwibWVzc2FnZSIsInB1c2giLCJlbWl0IiwiaXNUcmFjZSIsInN0b3BDYXB0dXJlIiwiaXNSdW5uaW5nIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsImdldExvZ3MiLCJyZXN1bHQiLCJzbGljZSIsImdldEFsbExvZ3MiLCJlcnIiLCJzdGRlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBREEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQW1CQyxlQUF6Qjs7QUFHQSxNQUFNQyxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBcEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLEtBQXJCLEVBQTRCLFFBQTVCLEVBQXNDLEtBQXRDLEVBQTZDLE1BQTdDLEVBQXFELFlBQXJELEVBQW1FLE1BQW5FLENBQTFCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0IsR0FBL0IsQ0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxHQUF6QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxZQUF2Qjs7QUFFQSxTQUFTQyxhQUFULENBQXdCQyxNQUF4QixFQUFnQztBQUM5QixNQUFJLENBQUNOLGlCQUFpQixDQUFDTyxRQUFsQixDQUEyQkQsTUFBM0IsQ0FBTCxFQUF5QztBQUN2Q1gsSUFBQUEsR0FBRyxDQUFDYSxJQUFKLENBQVUscUJBQW9CRixNQUFPLHVDQUFzQ04saUJBQWtCLEVBQTdGO0FBQ0FMLElBQUFBLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLGtCQUFpQkosY0FBZSxHQUEx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QVVpQyxNQUF4QztBQUNBLGFBQU9nQixNQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0Q7O0FBRURFLEVBQUFBLFVBQVUsR0FBSTtBQUNaLFdBQU8sS0FBS25ELElBQVo7QUFDRDs7QUFFVSxRQUFMVSxLQUFLLEdBQUk7QUFDYmxELElBQUFBLEdBQUcsQ0FBQ3FDLEtBQUosQ0FBVSxrQ0FBVjs7QUFDQSxRQUFJO0FBQ0YsWUFBTVcsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLZCxHQUFMLENBQVNrQixXQUFiLEVBQTBCLFFBQTFCLEVBQW9DLElBQXBDLENBQWI7QUFDQSxZQUFNLHdCQUFLLEtBQUtsQixHQUFMLENBQVNxQixJQUFkLEVBQW9CUCxJQUFwQixDQUFOO0FBQ0QsS0FIRCxDQUdFLE9BQU80QyxHQUFQLEVBQVk7QUFDWjVGLE1BQUFBLEdBQUcsQ0FBQzhELElBQUosQ0FBVSxnQ0FBK0I4QixHQUFHLENBQUNDLE1BQUosSUFBY0QsR0FBRyxDQUFDWixPQUFRLEVBQW5FO0FBQ0Q7QUFDRjs7QUEvSCtCOztlQWtJbkJqRCxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignTG9nY2F0Jyk7XG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAwMDtcbmNvbnN0IExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgU1VQUE9SVEVEX0ZPUk1BVFMgPSBbJ2JyaWVmJywgJ3Byb2Nlc3MnLCAndGFnJywgJ3RocmVhZCcsICdyYXcnLCAndGltZScsICd0aHJlYWR0aW1lJywgJ2xvbmcnXTtcbmNvbnN0IFNVUFBPUlRFRF9QUklPUklUSUVTID0gWyd2JywgJ2QnLCAnaScsICd3JywgJ2UnLCAnZicsICdzJ107XG5jb25zdCBERUZBVUxUX1BSSU9SSVRZID0gJ3YnO1xuY29uc3QgREVGQVVMVF9UQUcgPSAnKic7XG5jb25zdCBERUZBVUxUX0ZPUk1BVCA9ICd0aHJlYWR0aW1lJztcblxuZnVuY3Rpb24gcmVxdWlyZUZvcm1hdCAoZm9ybWF0KSB7XG4gIGlmICghU1VQUE9SVEVEX0ZPUk1BVFMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIGxvZy5pbmZvKGBUaGUgZm9ybWF0IHZhbHVlICcke2Zvcm1hdH0nIGlzIHVua25vd24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke1NVUFBPUlRFRF9GT1JNQVRTfWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfRk9STUFUfSdgKTtcbiAgICByZXR1cm4gREVGQVVMVF9GT1JNQVQ7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZVNwZWMgKHNwZWMpIHtcbiAgY29uc3QgW3RhZywgcHJpb3JpdHldID0gc3BlYy5zcGxpdCgnOicpO1xuICBsZXQgcmVzdWx0VGFnID0gdGFnO1xuICBpZiAoIXJlc3VsdFRhZykge1xuICAgIGxvZy5pbmZvKGBUaGUgdGFnIHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfVEFHfSdgKTtcbiAgICByZXN1bHRUYWcgPSBERUZBVUxUX1RBRztcbiAgfVxuICBpZiAoIXByaW9yaXR5KSB7XG4gICAgbG9nLmluZm8oYFRoZSBwcmlvcml0eSB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBpcyBlbXB0eS4gRGVmYXVsdGluZyB0byBWZXJib3NlICgke0RFRkFVTFRfUFJJT1JJVFl9KWApO1xuICAgIHJldHVybiBgJHtyZXN1bHRUYWd9OiR7REVGQVVMVF9QUklPUklUWX1gO1xuICB9XG4gIGlmICghU1VQUE9SVEVEX1BSSU9SSVRJRVMuc29tZSgocCkgPT4gXy50b0xvd2VyKHByaW9yaXR5KSA9PT0gXy50b0xvd2VyKHApKSkge1xuICAgIGxvZy5pbmZvKGBUaGUgcHJpb3JpdHkgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgaXMgdW5rbm93bi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7U1VQUE9SVEVEX1BSSU9SSVRJRVN9YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gVmVyYm9zZSAoJHtERUZBVUxUX1BSSU9SSVRZfSlgKTtcbiAgICByZXR1cm4gYCR7cmVzdWx0VGFnfToke0RFRkFVTFRfUFJJT1JJVFl9YDtcbiAgfVxuICByZXR1cm4gc3BlYztcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyU3BlY3MgKGZpbHRlclNwZWNzKSB7XG4gIGlmICghXy5pc0FycmF5KGZpbHRlclNwZWNzKSkge1xuICAgIGZpbHRlclNwZWNzID0gW2ZpbHRlclNwZWNzXTtcbiAgfVxuICByZXR1cm4gZmlsdGVyU3BlY3NcbiAgICAuZmlsdGVyKChzcGVjKSA9PiBzcGVjICYmIF8uaXNTdHJpbmcoc3BlYykgJiYgIXNwZWMuc3RhcnRzV2l0aCgnLScpKVxuICAgIC5tYXAoKHNwZWMpID0+IHNwZWMuaW5jbHVkZXMoJzonKSA/IHJlcXVpcmVTcGVjKHNwZWMpIDogc3BlYyk7XG59XG5cblxuY2xhc3MgTG9nY2F0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBvcHRzLmFkYjtcbiAgICB0aGlzLmNsZWFyTG9ncyA9IG9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCB8fCBmYWxzZTtcbiAgICB0aGlzLmRlYnVnID0gb3B0cy5kZWJ1ZztcbiAgICB0aGlzLmRlYnVnVHJhY2UgPSBvcHRzLmRlYnVnVHJhY2U7XG4gICAgdGhpcy5tYXhCdWZmZXJTaXplID0gb3B0cy5tYXhCdWZmZXJTaXplIHx8IE1BWF9CVUZGRVJfU0laRTtcbiAgICB0aGlzLmxvZ3MgPSBbXTtcbiAgICB0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPSAwO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDYXB0dXJlIChvcHRzID0ge30pIHtcbiAgICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAoX3Jlc29sdmUsIF9yZWplY3QpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgICBjb25zdCByZXNvbHZlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF9yZXNvbHZlKC4uLmFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfcmVqZWN0KC4uLmFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuY2xlYXJMb2dzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVCxcbiAgICAgICAgZmlsdGVyU3BlY3MgPSBbXSxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgY29uc3QgY21kID0gW1xuICAgICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICAgJ2xvZ2NhdCcsXG4gICAgICAgICctdicsIHJlcXVpcmVGb3JtYXQoZm9ybWF0KSxcbiAgICAgICAgLi4uZm9ybWF0RmlsdGVyU3BlY3MoZmlsdGVyU3BlY3MpLFxuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgbG9ncyBjYXB0dXJlIHdpdGggY29tbWFuZDogJHt1dGlsLnF1b3RlKFt0aGlzLmFkYi5wYXRoLCAuLi5jbWRdKX1gKTtcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuYWRiLnBhdGgsIGNtZCk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgTG9nY2F0IHRlcm1pbmF0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0xvZ2NhdCBub3Qgc3RhcnRlZC4gQ29udGludWluZycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZGVycicsIChsaW5lcykgPT4ge1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKC9leGVjdnBcXChcXCkvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignTG9nY2F0IHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2djYXQgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIHN0ZGVycjogJHtsaW5lfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vdXRwdXRIYW5kbGVyKF8udHJpbShsaW5lKSwgJ1NUREVSUjogJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZG91dCcsIChsaW5lcykgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEhhbmRsZXIoXy50cmltKGxpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgICAvLyByZXNvbHZlIGFmdGVyIGEgdGltZW91dCwgZXZlbiBpZiBubyBvdXRwdXQgd2FzIHJlY29yZGVkXG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCk7XG4gICAgfSk7XG4gIH1cblxuICBvdXRwdXRIYW5kbGVyIChvdXRwdXQsIHByZWZpeCA9ICcnKSB7XG4gICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dzLmxlbmd0aCA+PSB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMubG9ncy5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA+IDApIHtcbiAgICAgICAgLS10aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dE9iaiA9IHtcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgIG1lc3NhZ2U6IG91dHB1dCxcbiAgICB9O1xuICAgIHRoaXMubG9ncy5wdXNoKG91dHB1dE9iaik7XG4gICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBvdXRwdXRPYmopO1xuICAgIGNvbnN0IGlzVHJhY2UgPSAvV1xcL1RyYWNlLy50ZXN0KG91dHB1dCk7XG4gICAgaWYgKHRoaXMuZGVidWcgJiYgKCFpc1RyYWNlIHx8IHRoaXMuZGVidWdUcmFjZSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhwcmVmaXggKyBvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3BDYXB0dXJlICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIGxvZ2NhdCBjYXB0dXJlJyk7XG4gICAgaWYgKCF0aGlzLnByb2MgfHwgIXRoaXMucHJvYy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTG9nY2F0IGFscmVhZHkgc3RvcHBlZCcpO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jLnJlbW92ZUFsbExpc3RlbmVycygnZXhpdCcpO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldExvZ3MgKCkge1xuICAgIGlmICh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPCB0aGlzLmxvZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvZ3Muc2xpY2UodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0KTtcbiAgICAgIHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA9IHRoaXMubG9ncy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRBbGxMb2dzICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2xlYXJpbmcgbG9nY2F0IGxvZ3MgZnJvbSBkZXZpY2UnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi50aGlzLmFkYi5kZWZhdWx0QXJncywgJ2xvZ2NhdCcsICctYyddO1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmFkYi5wYXRoLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gY2xlYXIgbG9nY2F0IGxvZ3M6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nY2F0O1xuIl0sImZpbGUiOiJsaWIvbG9nY2F0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2djYXQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwiZXZlbnRzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTUFYX0JVRkZFUl9TSVpFIiwiTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUIiwiU1VQUE9SVEVEX0ZPUk1BVFMiLCJTVVBQT1JURURfUFJJT1JJVElFUyIsIkRFRkFVTFRfUFJJT1JJVFkiLCJERUZBVUxUX1RBRyIsIkRFRkFVTFRfRk9STUFUIiwicmVxdWlyZUZvcm1hdCIsImZvcm1hdCIsImluY2x1ZGVzIiwiaW5mbyIsInJlcXVpcmVTcGVjIiwic3BlYyIsInRhZyIsInByaW9yaXR5Iiwic3BsaXQiLCJyZXN1bHRUYWciLCJzb21lIiwicCIsIl8iLCJ0b0xvd2VyIiwiZm9ybWF0RmlsdGVyU3BlY3MiLCJmaWx0ZXJTcGVjcyIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpc1N0cmluZyIsInN0YXJ0c1dpdGgiLCJtYXAiLCJMb2djYXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhZGIiLCJjbGVhckxvZ3MiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiZGVidWciLCJkZWJ1Z1RyYWNlIiwibWF4QnVmZmVyU2l6ZSIsImxvZ3MiLCJsb2dJZHhTaW5jZUxhc3RSZXF1ZXN0Iiwic3RhcnRDYXB0dXJlIiwic3RhcnRlZCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJyZXNvbHZlIiwiYXJncyIsInJlamVjdCIsImNsZWFyIiwiY21kIiwiZGVmYXVsdEFyZ3MiLCJ1dGlsIiwicXVvdGUiLCJwYXRoIiwicHJvYyIsIlN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJlcnJvciIsIndhcm4iLCJsaW5lcyIsImxpbmUiLCJ0ZXN0IiwiRXJyb3IiLCJvdXRwdXRIYW5kbGVyIiwidHJpbSIsInN0YXJ0Iiwic2V0VGltZW91dCIsIm91dHB1dCIsInByZWZpeCIsImxlbmd0aCIsInNoaWZ0Iiwib3V0cHV0T2JqIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImxldmVsIiwibWVzc2FnZSIsInB1c2giLCJlbWl0IiwiaXNUcmFjZSIsInN0b3BDYXB0dXJlIiwiaXNSdW5uaW5nIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsImdldExvZ3MiLCJyZXN1bHQiLCJzbGljZSIsImdldEFsbExvZ3MiLCJlcnIiLCJzdGRlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBREEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQW1CQyxlQUF6Qjs7QUFHQSxNQUFNQyxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBcEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLEtBQXJCLEVBQTRCLFFBQTVCLEVBQXNDLEtBQXRDLEVBQTZDLE1BQTdDLEVBQXFELFlBQXJELEVBQW1FLE1BQW5FLENBQTFCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0IsR0FBL0IsQ0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxHQUF6QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxZQUF2Qjs7QUFFQSxTQUFTQyxhQUFULENBQXdCQyxNQUF4QixFQUFnQztBQUM5QixNQUFJLENBQUNOLGlCQUFpQixDQUFDTyxRQUFsQixDQUEyQkQsTUFBM0IsQ0FBTCxFQUF5QztBQUN2Q1gsSUFBQUEsR0FBRyxDQUFDYSxJQUFKLENBQVUscUJBQW9CRixNQUFPLHVDQUFzQ04saUJBQWtCLEVBQTdGO0FBQ0FMLElBQUFBLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLGtCQUFpQkosY0FBZSxHQUEx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Q0FBVWlDLE1BQXhDO0FBQ0EsYUFBT2dCLE1BQVA7QUFDRDs7QUFDRCxXQUFPLEVBQVA7QUFDRDs7QUFFREUsRUFBQUEsVUFBVSxHQUFJO0FBQ1osV0FBTyxLQUFLbkQsSUFBWjtBQUNEOztBQUVELFFBQU1VLEtBQU4sR0FBZTtBQUNibEQsSUFBQUEsR0FBRyxDQUFDcUMsS0FBSixDQUFVLGtDQUFWOztBQUNBLFFBQUk7QUFDRixZQUFNVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUtkLEdBQUwsQ0FBU2tCLFdBQWIsRUFBMEIsUUFBMUIsRUFBb0MsSUFBcEMsQ0FBYjtBQUNBLFlBQU0sd0JBQUssS0FBS2xCLEdBQUwsQ0FBU3FCLElBQWQsRUFBb0JQLElBQXBCLENBQU47QUFDRCxLQUhELENBR0UsT0FBTzRDLEdBQVAsRUFBWTtBQUNaNUYsTUFBQUEsR0FBRyxDQUFDOEQsSUFBSixDQUFVLGdDQUErQjhCLEdBQUcsQ0FBQ0MsTUFBSixJQUFjRCxHQUFHLENBQUNaLE9BQVEsRUFBbkU7QUFDRDtBQUNGOztBQS9IK0I7O2VBa0luQmpELE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IGV2ZW50cztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdMb2djYXQnKTtcbmNvbnN0IE1BWF9CVUZGRVJfU0laRSA9IDEwMDAwO1xuY29uc3QgTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUID0gMTAwMDA7XG5jb25zdCBTVVBQT1JURURfRk9STUFUUyA9IFsnYnJpZWYnLCAncHJvY2VzcycsICd0YWcnLCAndGhyZWFkJywgJ3JhdycsICd0aW1lJywgJ3RocmVhZHRpbWUnLCAnbG9uZyddO1xuY29uc3QgU1VQUE9SVEVEX1BSSU9SSVRJRVMgPSBbJ3YnLCAnZCcsICdpJywgJ3cnLCAnZScsICdmJywgJ3MnXTtcbmNvbnN0IERFRkFVTFRfUFJJT1JJVFkgPSAndic7XG5jb25zdCBERUZBVUxUX1RBRyA9ICcqJztcbmNvbnN0IERFRkFVTFRfRk9STUFUID0gJ3RocmVhZHRpbWUnO1xuXG5mdW5jdGlvbiByZXF1aXJlRm9ybWF0IChmb3JtYXQpIHtcbiAgaWYgKCFTVVBQT1JURURfRk9STUFUUy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgbG9nLmluZm8oYFRoZSBmb3JtYXQgdmFsdWUgJyR7Zm9ybWF0fScgaXMgdW5rbm93bi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7U1VQUE9SVEVEX0ZPUk1BVFN9YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gJyR7REVGQVVMVF9GT1JNQVR9J2ApO1xuICAgIHJldHVybiBERUZBVUxUX0ZPUk1BVDtcbiAgfVxuICByZXR1cm4gZm9ybWF0O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlU3BlYyAoc3BlYykge1xuICBjb25zdCBbdGFnLCBwcmlvcml0eV0gPSBzcGVjLnNwbGl0KCc6Jyk7XG4gIGxldCByZXN1bHRUYWcgPSB0YWc7XG4gIGlmICghcmVzdWx0VGFnKSB7XG4gICAgbG9nLmluZm8oYFRoZSB0YWcgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gJyR7REVGQVVMVF9UQUd9J2ApO1xuICAgIHJlc3VsdFRhZyA9IERFRkFVTFRfVEFHO1xuICB9XG4gIGlmICghcHJpb3JpdHkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIHByaW9yaXR5IHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGlzIGVtcHR5LiBEZWZhdWx0aW5nIHRvIFZlcmJvc2UgKCR7REVGQVVMVF9QUklPUklUWX0pYCk7XG4gICAgcmV0dXJuIGAke3Jlc3VsdFRhZ306JHtERUZBVUxUX1BSSU9SSVRZfWA7XG4gIH1cbiAgaWYgKCFTVVBQT1JURURfUFJJT1JJVElFUy5zb21lKChwKSA9PiBfLnRvTG93ZXIocHJpb3JpdHkpID09PSBfLnRvTG93ZXIocCkpKSB7XG4gICAgbG9nLmluZm8oYFRoZSBwcmlvcml0eSB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBpcyB1bmtub3duLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtTVVBQT1JURURfUFJJT1JJVElFU31gKTtcbiAgICBsb2cuaW5mbyhgRGVmYXVsdGluZyB0byBWZXJib3NlICgke0RFRkFVTFRfUFJJT1JJVFl9KWApO1xuICAgIHJldHVybiBgJHtyZXN1bHRUYWd9OiR7REVGQVVMVF9QUklPUklUWX1gO1xuICB9XG4gIHJldHVybiBzcGVjO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJTcGVjcyAoZmlsdGVyU3BlY3MpIHtcbiAgaWYgKCFfLmlzQXJyYXkoZmlsdGVyU3BlY3MpKSB7XG4gICAgZmlsdGVyU3BlY3MgPSBbZmlsdGVyU3BlY3NdO1xuICB9XG4gIHJldHVybiBmaWx0ZXJTcGVjc1xuICAgIC5maWx0ZXIoKHNwZWMpID0+IHNwZWMgJiYgXy5pc1N0cmluZyhzcGVjKSAmJiAhc3BlYy5zdGFydHNXaXRoKCctJykpXG4gICAgLm1hcCgoc3BlYykgPT4gc3BlYy5pbmNsdWRlcygnOicpID8gcmVxdWlyZVNwZWMoc3BlYykgOiBzcGVjKTtcbn1cblxuXG5jbGFzcyBMb2djYXQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYiA9IG9wdHMuYWRiO1xuICAgIHRoaXMuY2xlYXJMb2dzID0gb3B0cy5jbGVhckRldmljZUxvZ3NPblN0YXJ0IHx8IGZhbHNlO1xuICAgIHRoaXMuZGVidWcgPSBvcHRzLmRlYnVnO1xuICAgIHRoaXMuZGVidWdUcmFjZSA9IG9wdHMuZGVidWdUcmFjZTtcbiAgICB0aGlzLm1heEJ1ZmZlclNpemUgPSBvcHRzLm1heEJ1ZmZlclNpemUgfHwgTUFYX0JVRkZFUl9TSVpFO1xuICAgIHRoaXMubG9ncyA9IFtdO1xuICAgIHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA9IDA7XG4gIH1cblxuICBhc3luYyBzdGFydENhcHR1cmUgKG9wdHMgPSB7fSkge1xuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChfcmVzb2x2ZSwgX3JlamVjdCkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcGFyYW0tbmFtZXNcbiAgICAgIGNvbnN0IHJlc29sdmUgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgX3Jlc29sdmUoLi4uYXJncyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVqZWN0ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF9yZWplY3QoLi4uYXJncyk7XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5jbGVhckxvZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhcigpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGZvcm1hdCA9IERFRkFVTFRfRk9STUFULFxuICAgICAgICBmaWx0ZXJTcGVjcyA9IFtdLFxuICAgICAgfSA9IG9wdHM7XG4gICAgICBjb25zdCBjbWQgPSBbXG4gICAgICAgIC4uLnRoaXMuYWRiLmRlZmF1bHRBcmdzLFxuICAgICAgICAnbG9nY2F0JyxcbiAgICAgICAgJy12JywgcmVxdWlyZUZvcm1hdChmb3JtYXQpLFxuICAgICAgICAuLi5mb3JtYXRGaWx0ZXJTcGVjcyhmaWx0ZXJTcGVjcyksXG4gICAgICBdO1xuICAgICAgbG9nLmRlYnVnKGBTdGFydGluZyBsb2dzIGNhcHR1cmUgd2l0aCBjb21tYW5kOiAke3V0aWwucXVvdGUoW3RoaXMuYWRiLnBhdGgsIC4uLmNtZF0pfWApO1xuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3ModGhpcy5hZGIucGF0aCwgY21kKTtcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgbG9nLmVycm9yKGBMb2djYXQgdGVybWluYXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgICBsb2cud2FybignTG9nY2F0IG5vdCBzdGFydGVkLiBDb250aW51aW5nJyk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvYy5vbignbGluZXMtc3RkZXJyJywgKGxpbmVzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICBpZiAoL2V4ZWN2cFxcKFxcKS8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdMb2djYXQgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQnKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYExvZ2NhdCBwcm9jZXNzIGZhaWxlZCB0byBzdGFydC4gc3RkZXJyOiAke2xpbmV9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm91dHB1dEhhbmRsZXIoXy50cmltKGxpbmUpLCAnU1RERVJSOiAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvYy5vbignbGluZXMtc3Rkb3V0JywgKGxpbmVzKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIHRoaXMub3V0cHV0SGFuZGxlcihfLnRyaW0obGluZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICAgIC8vIHJlc29sdmUgYWZ0ZXIgYSB0aW1lb3V0LCBldmVuIGlmIG5vIG91dHB1dCB3YXMgcmVjb3JkZWRcbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUKTtcbiAgICB9KTtcbiAgfVxuXG4gIG91dHB1dEhhbmRsZXIgKG91dHB1dCwgcHJlZml4ID0gJycpIHtcbiAgICBpZiAoIW91dHB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ3MubGVuZ3RoID49IHRoaXMubWF4QnVmZmVyU2l6ZSkge1xuICAgICAgdGhpcy5sb2dzLnNoaWZ0KCk7XG4gICAgICBpZiAodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0ID4gMCkge1xuICAgICAgICAtLXRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0T2JqID0ge1xuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbGV2ZWw6ICdBTEwnLFxuICAgICAgbWVzc2FnZTogb3V0cHV0LFxuICAgIH07XG4gICAgdGhpcy5sb2dzLnB1c2gob3V0cHV0T2JqKTtcbiAgICB0aGlzLmVtaXQoJ291dHB1dCcsIG91dHB1dE9iaik7XG4gICAgY29uc3QgaXNUcmFjZSA9IC9XXFwvVHJhY2UvLnRlc3Qob3V0cHV0KTtcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAoIWlzVHJhY2UgfHwgdGhpcy5kZWJ1Z1RyYWNlKSkge1xuICAgICAgbG9nLmRlYnVnKHByZWZpeCArIG91dHB1dCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcENhcHR1cmUgKCkge1xuICAgIGxvZy5kZWJ1ZygnU3RvcHBpbmcgbG9nY2F0IGNhcHR1cmUnKTtcbiAgICBpZiAoIXRoaXMucHJvYyB8fCAhdGhpcy5wcm9jLmlzUnVubmluZykge1xuICAgICAgbG9nLmRlYnVnKCdMb2djYXQgYWxyZWFkeSBzdG9wcGVkJyk7XG4gICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2MucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7XG4gICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0TG9ncyAoKSB7XG4gICAgaWYgKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA8IHRoaXMubG9ncy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubG9ncy5zbGljZSh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QpO1xuICAgICAgdGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0ID0gdGhpcy5sb2dzLmxlbmd0aDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldEFsbExvZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLmxvZ3M7XG4gIH1cblxuICBhc3luYyBjbGVhciAoKSB7XG4gICAgbG9nLmRlYnVnKCdDbGVhcmluZyBsb2djYXQgbG9ncyBmcm9tIGRldmljZScpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLnRoaXMuYWRiLmRlZmF1bHRBcmdzLCAnbG9nY2F0JywgJy1jJ107XG4gICAgICBhd2FpdCBleGVjKHRoaXMuYWRiLnBhdGgsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBjbGVhciBsb2djYXQgbG9nczogJHtlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2djYXQ7XG4iXSwiZmlsZSI6ImxpYi9sb2djYXQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|