appium-adb 9.11.0 → 9.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/build/lib/adb.js +1 -1
- package/build/lib/adb.js.map +1 -1
- package/build/lib/helpers.js +1 -1
- package/build/lib/helpers.js.map +1 -1
- package/build/lib/logcat.js +1 -1
- package/build/lib/logcat.js.map +1 -1
- package/build/lib/tools/aab-utils.js +1 -1
- package/build/lib/tools/aab-utils.js.map +1 -1
- package/build/lib/tools/adb-commands.js +11 -4
- package/build/lib/tools/adb-commands.js.map +1 -1
- package/build/lib/tools/adb-emu-commands.js +1 -1
- package/build/lib/tools/adb-emu-commands.js.map +1 -1
- package/build/lib/tools/android-manifest.js +1 -1
- package/build/lib/tools/android-manifest.js.map +1 -1
- package/build/lib/tools/apk-signing.js +1 -1
- package/build/lib/tools/apk-signing.js.map +1 -1
- package/build/lib/tools/apk-utils.js +1 -1
- package/build/lib/tools/apk-utils.js.map +1 -1
- package/build/lib/tools/apks-utils.js +1 -1
- package/build/lib/tools/apks-utils.js.map +1 -1
- package/build/lib/tools/index.js +1 -1
- package/build/lib/tools/index.js.map +1 -1
- package/build/lib/tools/keyboard-commands.js +1 -1
- package/build/lib/tools/keyboard-commands.js.map +1 -1
- package/build/lib/tools/lockmgmt.js +1 -1
- package/build/lib/tools/lockmgmt.js.map +1 -1
- package/build/lib/tools/settings-client-commands.js +1 -1
- package/build/lib/tools/settings-client-commands.js.map +1 -1
- package/build/lib/tools/system-calls.js +1 -1
- package/build/lib/tools/system-calls.js.map +1 -1
- package/lib/tools/adb-commands.js +19 -6
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [9.11.2](https://github.com/appium/appium-adb/compare/v9.11.1...v9.11.2) (2023-04-29)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Update GPS toggle logic since Android 11 ([#655](https://github.com/appium/appium-adb/issues/655)) ([6251cf0](https://github.com/appium/appium-adb/commit/6251cf0548b7e4baec81122dddbf6e2bce3d7364))
|
|
7
|
+
|
|
8
|
+
## [9.11.1](https://github.com/appium/appium-adb/compare/v9.11.0...v9.11.1) (2023-04-18)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* Bump rimraf from 4.4.1 to 5.0.0 ([#644](https://github.com/appium/appium-adb/issues/644)) ([c47ad4d](https://github.com/appium/appium-adb/commit/c47ad4de460e77a813e064344edf697143687af5))
|
|
14
|
+
|
|
1
15
|
## [9.11.0](https://github.com/appium/appium-adb/compare/v9.10.24...v9.11.0) (2023-04-03)
|
|
2
16
|
|
|
3
17
|
|
package/build/lib/adb.js
CHANGED
|
@@ -99,4 +99,4 @@ for (const [fnName, fn] of _lodash.default.toPairs(_index.default)) {
|
|
|
99
99
|
}
|
|
100
100
|
var _default = ADB;
|
|
101
101
|
exports.default = _default;
|
|
102
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfb3MiLCJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9oZWxwZXJzIiwiX2xvZ2dlciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJERUZBVUxUX0FEQl9QT1JUIiwiZXhwb3J0cyIsIkRFRkFVTFRfT1BUUyIsInNka1Jvb3QiLCJnZXRTZGtSb290RnJvbUVudiIsInVkaWQiLCJhcHBEZXZpY2VSZWFkeVRpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiZXhlY3V0YWJsZSIsInBhdGgiLCJkZWZhdWx0QXJncyIsInRtcERpciIsIm9zIiwidG1wZGlyIiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJsb2djYXQiLCJiaW5hcmllcyIsImluc3RydW1lbnRQcm9jIiwic3VwcHJlc3NLaWxsU2VydmVyIiwiamFycyIsImFkYlBvcnQiLCJhZGJIb3N0IiwiYWRiRXhlY1RpbWVvdXQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJyZW1vdGVBcHBzQ2FjaGVMaW1pdCIsImJ1aWxkVG9vbHNWZXJzaW9uIiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImFsbG93RGVsYXlBZGIiLCJBREIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhc3NpZ24iLCJfIiwiZGVmYXVsdHNEZWVwIiwiY2xvbmVEZWVwIiwicmVtb3RlQWRiSG9zdCIsInB1c2giLCJyZW1vdGVBZGJQb3J0IiwiY2xvbmUiLCJvcmlnaW5hbE9wdGlvbnMiLCJwaWNrIiwia2V5cyIsImNsb25lT3B0aW9ucyIsImluY2x1ZGVzIiwic3BsaWNlIiwiaW5kZXhPZiIsImNyZWF0ZUFEQiIsImFkYiIsInJlcXVpcmVTZGtSb290IiwiZ2V0QWRiV2l0aENvcnJlY3RBZGJQYXRoIiwiYWRiRXhlYyIsImUiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImZuTmFtZSIsImZuIiwidG9QYWlycyIsIm1ldGhvZHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hZGIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgbWV0aG9kcywgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9IGZyb20gJy4vdG9vbHMvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCByZXF1aXJlU2RrUm9vdCwgZ2V0U2RrUm9vdEZyb21FbnZcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBERUZBVUxUX0FEQl9QT1JUID0gNTAzNztcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgc2RrUm9vdDogZ2V0U2RrUm9vdEZyb21FbnYoKSB8fCBudWxsLFxuICB1ZGlkOiBudWxsLFxuICBhcHBEZXZpY2VSZWFkeVRpbWVvdXQ6IG51bGwsXG4gIHVzZUtleXN0b3JlOiBudWxsLFxuICBrZXlzdG9yZVBhdGg6IG51bGwsXG4gIGtleXN0b3JlUGFzc3dvcmQ6IG51bGwsXG4gIGtleUFsaWFzOiBudWxsLFxuICBrZXlQYXNzd29yZDogbnVsbCxcbiAgZXhlY3V0YWJsZToge3BhdGg6ICdhZGInLCBkZWZhdWx0QXJnczogW119LFxuICB0bXBEaXI6IG9zLnRtcGRpcigpLFxuICBjdXJEZXZpY2VJZDogbnVsbCxcbiAgZW11bGF0b3JQb3J0OiBudWxsLFxuICBsb2djYXQ6IG51bGwsXG4gIGJpbmFyaWVzOiB7fSxcbiAgaW5zdHJ1bWVudFByb2M6IG51bGwsXG4gIHN1cHByZXNzS2lsbFNlcnZlcjogbnVsbCxcbiAgamFyczoge30sXG4gIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gIGFkYkhvc3Q6IG51bGwsXG4gIGFkYkV4ZWNUaW1lb3V0OiBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQsXG4gIHJlbW90ZUFwcHNDYWNoZUxpbWl0OiAxMCxcbiAgYnVpbGRUb29sc1ZlcnNpb246IG51bGwsXG4gIGFsbG93T2ZmbGluZURldmljZXM6IGZhbHNlLFxuICBhbGxvd0RlbGF5QWRiOiB0cnVlLFxufTtcblxuY2xhc3MgQURCIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0cyk7XG4gICAgXy5kZWZhdWx0c0RlZXAodGhpcywgXy5jbG9uZURlZXAoREVGQVVMVF9PUFRTKSk7XG5cbiAgICBpZiAob3B0cy5yZW1vdGVBZGJIb3N0KSB7XG4gICAgICB0aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MucHVzaCgnLUgnLCBvcHRzLnJlbW90ZUFkYkhvc3QpO1xuICAgICAgdGhpcy5hZGJIb3N0ID0gb3B0cy5yZW1vdGVBZGJIb3N0O1xuICAgIH1cbiAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgd2h5IHdlIGhhdmUgdGhpcyBvcHRpb24gYXMgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGJlXG4gICAgLy8gdXNlZCBhbnl3aGVyZS4gUHJvYmFibHkgZGVwcmVjYXRlIGluIGZhdm9yIG9mIHNpbXBsZSBvcHRzLmFkYlBvcnRcbiAgICBpZiAob3B0cy5yZW1vdGVBZGJQb3J0KSB7XG4gICAgICB0aGlzLmFkYlBvcnQgPSBvcHRzLnJlbW90ZUFkYlBvcnQ7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5wdXNoKCctUCcsIHRoaXMuYWRiUG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGBBREJgIHRoYXQgaW5oZXJpdHMgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgYEFEQmAgaW5zdGFuY2UuXG4gICAqIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIGNhbGwgYEFEQi5jcmVhdGVBREIoKWAgbXVsdGlwbGUgdGltZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zIG1hcHBpbmcgdG8gcGFzcyB0byB0aGUgYEFEQmAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtBREJ9IFRoZSByZXN1bHRpbmcgY2xhc3MgaW5zdGFuY2UuXG4gICAqL1xuICBjbG9uZSAob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gXy5jbG9uZURlZXAoXy5waWNrKHRoaXMsIE9iamVjdC5rZXlzKERFRkFVTFRfT1BUUykpKTtcbiAgICBjb25zdCBjbG9uZU9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRzLCBvcmlnaW5hbE9wdGlvbnMpO1xuXG4gICAgLy8gUmVzZXQgZGVmYXVsdCBhcmd1bWVudHMgY3JlYXRlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNvZGUsIC1IIGFuZCAtUCBjYW4gYmUgaW5qZWN0ZWQgaW50byBkZWZhdWx0QXJncyBtdWx0aXBsZSB0aW1lcy5cbiAgICBjb25zdCBkZWZhdWx0QXJncyA9IGNsb25lT3B0aW9ucy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzO1xuICAgIGlmIChjbG9uZU9wdGlvbnMucmVtb3RlQWRiSG9zdCAmJiBkZWZhdWx0QXJncy5pbmNsdWRlcygnLUgnKSkge1xuICAgICAgZGVmYXVsdEFyZ3Muc3BsaWNlKGRlZmF1bHRBcmdzLmluZGV4T2YoJy1IJyksIDIpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdEFyZ3MuaW5jbHVkZXMoJy1QJykpIHtcbiAgICAgIGRlZmF1bHRBcmdzLnNwbGljZShkZWZhdWx0QXJncy5pbmRleE9mKCctUCcpLCAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFEQihjbG9uZU9wdGlvbnMpO1xuICB9XG59XG5cbkFEQi5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMpIHtcbiAgY29uc3QgYWRiID0gbmV3IEFEQihvcHRzKTtcbiAgYWRiLnNka1Jvb3QgPSBhd2FpdCByZXF1aXJlU2RrUm9vdChhZGIuc2RrUm9vdCk7XG4gIGF3YWl0IGFkYi5nZXRBZGJXaXRoQ29ycmVjdEFkYlBhdGgoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuYWRiRXhlYyhbJ3N0YXJ0LXNlcnZlciddKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKGUuc3RkZXJyIHx8IGUubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIGFkYjtcbn07XG5cbi8vIGFkZCBhbGwgdGhlIG1ldGhvZHMgdG8gdGhlIEFEQiBwcm90b3R5cGVcbmZvciAoY29uc3QgW2ZuTmFtZSwgZm5dIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICBBREIucHJvdG90eXBlW2ZuTmFtZV0gPSBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQURCO1xuZXhwb3J0IHsgQURCLCBERUZBVUxUX0FEQl9QT1JULCBnZXRBbmRyb2lkQmluYXJ5UGF0aCwgZ2V0U2RrUm9vdEZyb21FbnYgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFHQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENB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
|
|
102
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfb3MiLCJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9oZWxwZXJzIiwiX2xvZ2dlciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJERUZBVUxUX0FEQl9QT1JUIiwiZXhwb3J0cyIsIkRFRkFVTFRfT1BUUyIsInNka1Jvb3QiLCJnZXRTZGtSb290RnJvbUVudiIsInVkaWQiLCJhcHBEZXZpY2VSZWFkeVRpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiZXhlY3V0YWJsZSIsInBhdGgiLCJkZWZhdWx0QXJncyIsInRtcERpciIsIm9zIiwidG1wZGlyIiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJsb2djYXQiLCJiaW5hcmllcyIsImluc3RydW1lbnRQcm9jIiwic3VwcHJlc3NLaWxsU2VydmVyIiwiamFycyIsImFkYlBvcnQiLCJhZGJIb3N0IiwiYWRiRXhlY1RpbWVvdXQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJyZW1vdGVBcHBzQ2FjaGVMaW1pdCIsImJ1aWxkVG9vbHNWZXJzaW9uIiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImFsbG93RGVsYXlBZGIiLCJBREIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhc3NpZ24iLCJfIiwiZGVmYXVsdHNEZWVwIiwiY2xvbmVEZWVwIiwicmVtb3RlQWRiSG9zdCIsInB1c2giLCJyZW1vdGVBZGJQb3J0IiwiY2xvbmUiLCJvcmlnaW5hbE9wdGlvbnMiLCJwaWNrIiwia2V5cyIsImNsb25lT3B0aW9ucyIsImluY2x1ZGVzIiwic3BsaWNlIiwiaW5kZXhPZiIsImNyZWF0ZUFEQiIsImFkYiIsInJlcXVpcmVTZGtSb290IiwiZ2V0QWRiV2l0aENvcnJlY3RBZGJQYXRoIiwiYWRiRXhlYyIsImUiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImZuTmFtZSIsImZuIiwidG9QYWlycyIsIm1ldGhvZHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hZGIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgbWV0aG9kcywgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9IGZyb20gJy4vdG9vbHMvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCByZXF1aXJlU2RrUm9vdCwgZ2V0U2RrUm9vdEZyb21FbnZcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBERUZBVUxUX0FEQl9QT1JUID0gNTAzNztcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgc2RrUm9vdDogZ2V0U2RrUm9vdEZyb21FbnYoKSB8fCBudWxsLFxuICB1ZGlkOiBudWxsLFxuICBhcHBEZXZpY2VSZWFkeVRpbWVvdXQ6IG51bGwsXG4gIHVzZUtleXN0b3JlOiBudWxsLFxuICBrZXlzdG9yZVBhdGg6IG51bGwsXG4gIGtleXN0b3JlUGFzc3dvcmQ6IG51bGwsXG4gIGtleUFsaWFzOiBudWxsLFxuICBrZXlQYXNzd29yZDogbnVsbCxcbiAgZXhlY3V0YWJsZToge3BhdGg6ICdhZGInLCBkZWZhdWx0QXJnczogW119LFxuICB0bXBEaXI6IG9zLnRtcGRpcigpLFxuICBjdXJEZXZpY2VJZDogbnVsbCxcbiAgZW11bGF0b3JQb3J0OiBudWxsLFxuICBsb2djYXQ6IG51bGwsXG4gIGJpbmFyaWVzOiB7fSxcbiAgaW5zdHJ1bWVudFByb2M6IG51bGwsXG4gIHN1cHByZXNzS2lsbFNlcnZlcjogbnVsbCxcbiAgamFyczoge30sXG4gIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gIGFkYkhvc3Q6IG51bGwsXG4gIGFkYkV4ZWNUaW1lb3V0OiBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQsXG4gIHJlbW90ZUFwcHNDYWNoZUxpbWl0OiAxMCxcbiAgYnVpbGRUb29sc1ZlcnNpb246IG51bGwsXG4gIGFsbG93T2ZmbGluZURldmljZXM6IGZhbHNlLFxuICBhbGxvd0RlbGF5QWRiOiB0cnVlLFxufTtcblxuY2xhc3MgQURCIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0cyk7XG4gICAgXy5kZWZhdWx0c0RlZXAodGhpcywgXy5jbG9uZURlZXAoREVGQVVMVF9PUFRTKSk7XG5cbiAgICBpZiAob3B0cy5yZW1vdGVBZGJIb3N0KSB7XG4gICAgICB0aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MucHVzaCgnLUgnLCBvcHRzLnJlbW90ZUFkYkhvc3QpO1xuICAgICAgdGhpcy5hZGJIb3N0ID0gb3B0cy5yZW1vdGVBZGJIb3N0O1xuICAgIH1cbiAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgd2h5IHdlIGhhdmUgdGhpcyBvcHRpb24gYXMgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGJlXG4gICAgLy8gdXNlZCBhbnl3aGVyZS4gUHJvYmFibHkgZGVwcmVjYXRlIGluIGZhdm9yIG9mIHNpbXBsZSBvcHRzLmFkYlBvcnRcbiAgICBpZiAob3B0cy5yZW1vdGVBZGJQb3J0KSB7XG4gICAgICB0aGlzLmFkYlBvcnQgPSBvcHRzLnJlbW90ZUFkYlBvcnQ7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5wdXNoKCctUCcsIHRoaXMuYWRiUG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGBBREJgIHRoYXQgaW5oZXJpdHMgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgYEFEQmAgaW5zdGFuY2UuXG4gICAqIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIGNhbGwgYEFEQi5jcmVhdGVBREIoKWAgbXVsdGlwbGUgdGltZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zIG1hcHBpbmcgdG8gcGFzcyB0byB0aGUgYEFEQmAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtBREJ9IFRoZSByZXN1bHRpbmcgY2xhc3MgaW5zdGFuY2UuXG4gICAqL1xuICBjbG9uZSAob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gXy5jbG9uZURlZXAoXy5waWNrKHRoaXMsIE9iamVjdC5rZXlzKERFRkFVTFRfT1BUUykpKTtcbiAgICBjb25zdCBjbG9uZU9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRzLCBvcmlnaW5hbE9wdGlvbnMpO1xuXG4gICAgLy8gUmVzZXQgZGVmYXVsdCBhcmd1bWVudHMgY3JlYXRlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNvZGUsIC1IIGFuZCAtUCBjYW4gYmUgaW5qZWN0ZWQgaW50byBkZWZhdWx0QXJncyBtdWx0aXBsZSB0aW1lcy5cbiAgICBjb25zdCBkZWZhdWx0QXJncyA9IGNsb25lT3B0aW9ucy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzO1xuICAgIGlmIChjbG9uZU9wdGlvbnMucmVtb3RlQWRiSG9zdCAmJiBkZWZhdWx0QXJncy5pbmNsdWRlcygnLUgnKSkge1xuICAgICAgZGVmYXVsdEFyZ3Muc3BsaWNlKGRlZmF1bHRBcmdzLmluZGV4T2YoJy1IJyksIDIpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdEFyZ3MuaW5jbHVkZXMoJy1QJykpIHtcbiAgICAgIGRlZmF1bHRBcmdzLnNwbGljZShkZWZhdWx0QXJncy5pbmRleE9mKCctUCcpLCAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFEQihjbG9uZU9wdGlvbnMpO1xuICB9XG59XG5cbkFEQi5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMpIHtcbiAgY29uc3QgYWRiID0gbmV3IEFEQihvcHRzKTtcbiAgYWRiLnNka1Jvb3QgPSBhd2FpdCByZXF1aXJlU2RrUm9vdChhZGIuc2RrUm9vdCk7XG4gIGF3YWl0IGFkYi5nZXRBZGJXaXRoQ29ycmVjdEFkYlBhdGgoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuYWRiRXhlYyhbJ3N0YXJ0LXNlcnZlciddKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKGUuc3RkZXJyIHx8IGUubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIGFkYjtcbn07XG5cbi8vIGFkZCBhbGwgdGhlIG1ldGhvZHMgdG8gdGhlIEFEQiBwcm90b3R5cGVcbmZvciAoY29uc3QgW2ZuTmFtZSwgZm5dIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICBBREIucHJvdG90eXBlW2ZuTmFtZV0gPSBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQURCO1xuZXhwb3J0IHsgQURCLCBERUZBVUxUX0FEQl9QT1JULCBnZXRBbmRyb2lkQmluYXJ5UGF0aCwgZ2V0U2RrUm9vdEZyb21FbnYgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFHQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENB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
|
package/build/lib/adb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adb.js","names":["_lodash","_interopRequireDefault","require","_os","_index","_interopRequireWildcard","_helpers","_logger","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","DEFAULT_ADB_PORT","exports","DEFAULT_OPTS","sdkRoot","getSdkRootFromEnv","udid","appDeviceReadyTimeout","useKeystore","keystorePath","keystorePassword","keyAlias","keyPassword","executable","path","defaultArgs","tmpDir","os","tmpdir","curDeviceId","emulatorPort","logcat","binaries","instrumentProc","suppressKillServer","jars","adbPort","adbHost","adbExecTimeout","DEFAULT_ADB_EXEC_TIMEOUT","remoteAppsCacheLimit","buildToolsVersion","allowOfflineDevices","allowDelayAdb","ADB","constructor","opts","assign","_","defaultsDeep","cloneDeep","remoteAdbHost","push","remoteAdbPort","clone","originalOptions","pick","keys","cloneOptions","includes","splice","indexOf","createADB","adb","requireSdkRoot","getAdbWithCorrectAdbPath","adbExec","e","log","warn","stderr","message","fnName","fn","toPairs","methods","_default"],"sources":["../../lib/adb.js"],"sourcesContent":["import _ from 'lodash';\nimport os from 'os';\nimport methods, { getAndroidBinaryPath } from './tools/index.js';\nimport {\n DEFAULT_ADB_EXEC_TIMEOUT, requireSdkRoot, getSdkRootFromEnv\n} from './helpers';\nimport log from './logger.js';\n\nconst DEFAULT_ADB_PORT = 5037;\nconst DEFAULT_OPTS = {\n sdkRoot: getSdkRootFromEnv() || null,\n udid: null,\n appDeviceReadyTimeout: null,\n useKeystore: null,\n keystorePath: null,\n keystorePassword: null,\n keyAlias: null,\n keyPassword: null,\n executable: {path: 'adb', defaultArgs: []},\n tmpDir: os.tmpdir(),\n curDeviceId: null,\n emulatorPort: null,\n logcat: null,\n binaries: {},\n instrumentProc: null,\n suppressKillServer: null,\n jars: {},\n adbPort: DEFAULT_ADB_PORT,\n adbHost: null,\n adbExecTimeout: DEFAULT_ADB_EXEC_TIMEOUT,\n remoteAppsCacheLimit: 10,\n buildToolsVersion: null,\n allowOfflineDevices: false,\n allowDelayAdb: true,\n};\n\nclass ADB {\n constructor (opts = {}) {\n Object.assign(this, opts);\n _.defaultsDeep(this, _.cloneDeep(DEFAULT_OPTS));\n\n if (opts.remoteAdbHost) {\n this.executable.defaultArgs.push('-H', opts.remoteAdbHost);\n this.adbHost = opts.remoteAdbHost;\n }\n // TODO figure out why we have this option as it does not appear to be\n // used anywhere. Probably deprecate in favor of simple opts.adbPort\n if (opts.remoteAdbPort) {\n this.adbPort = opts.remoteAdbPort;\n }\n this.executable.defaultArgs.push('-P', this.adbPort);\n }\n\n /**\n * Create a new instance of `ADB` that inherits configuration from this `ADB` instance.\n * This avoids the need to call `ADB.createADB()` multiple times.\n * @param {object} opts - Additional options mapping to pass to the `ADB` constructor.\n * @returns {ADB} The resulting class instance.\n */\n clone (opts = {}) {\n const originalOptions = _.cloneDeep(_.pick(this, Object.keys(DEFAULT_OPTS)));\n const cloneOptions = _.defaultsDeep(opts, originalOptions);\n\n // Reset default arguments created in the constructor.\n // Without this code, -H and -P can be injected into defaultArgs multiple times.\n const defaultArgs = cloneOptions.executable.defaultArgs;\n if (cloneOptions.remoteAdbHost && defaultArgs.includes('-H')) {\n defaultArgs.splice(defaultArgs.indexOf('-H'), 2);\n }\n if (defaultArgs.includes('-P')) {\n defaultArgs.splice(defaultArgs.indexOf('-P'), 2);\n }\n\n return new ADB(cloneOptions);\n }\n}\n\nADB.createADB = async function createADB (opts) {\n const adb = new ADB(opts);\n adb.sdkRoot = await requireSdkRoot(adb.sdkRoot);\n await adb.getAdbWithCorrectAdbPath();\n try {\n await adb.adbExec(['start-server']);\n } catch (e) {\n log.warn(e.stderr || e.message);\n }\n return adb;\n};\n\n// add all the methods to the ADB prototype\nfor (const [fnName, fn] of _.toPairs(methods)) {\n ADB.prototype[fnName] = fn;\n}\n\nexport default ADB;\nexport { ADB, DEFAULT_ADB_PORT, getAndroidBinaryPath, getSdkRootFromEnv };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,GAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAGA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AAA8B,SAAAM,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAJ,wBAAAQ,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAE9B,MAAMW,gBAAgB,GAAG,IAAI;AAACC,OAAA,CAAAD,gBAAA,GAAAA,gBAAA;AAC9B,MAAME,YAAY,GAAG;EACnBC,OAAO,EAAE,IAAAC,0BAAiB,
|
|
1
|
+
{"version":3,"file":"adb.js","names":["_lodash","_interopRequireDefault","require","_os","_index","_interopRequireWildcard","_helpers","_logger","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","DEFAULT_ADB_PORT","exports","DEFAULT_OPTS","sdkRoot","getSdkRootFromEnv","udid","appDeviceReadyTimeout","useKeystore","keystorePath","keystorePassword","keyAlias","keyPassword","executable","path","defaultArgs","tmpDir","os","tmpdir","curDeviceId","emulatorPort","logcat","binaries","instrumentProc","suppressKillServer","jars","adbPort","adbHost","adbExecTimeout","DEFAULT_ADB_EXEC_TIMEOUT","remoteAppsCacheLimit","buildToolsVersion","allowOfflineDevices","allowDelayAdb","ADB","constructor","opts","assign","_","defaultsDeep","cloneDeep","remoteAdbHost","push","remoteAdbPort","clone","originalOptions","pick","keys","cloneOptions","includes","splice","indexOf","createADB","adb","requireSdkRoot","getAdbWithCorrectAdbPath","adbExec","e","log","warn","stderr","message","fnName","fn","toPairs","methods","_default"],"sources":["../../lib/adb.js"],"sourcesContent":["import _ from 'lodash';\nimport os from 'os';\nimport methods, { getAndroidBinaryPath } from './tools/index.js';\nimport {\n DEFAULT_ADB_EXEC_TIMEOUT, requireSdkRoot, getSdkRootFromEnv\n} from './helpers';\nimport log from './logger.js';\n\nconst DEFAULT_ADB_PORT = 5037;\nconst DEFAULT_OPTS = {\n sdkRoot: getSdkRootFromEnv() || null,\n udid: null,\n appDeviceReadyTimeout: null,\n useKeystore: null,\n keystorePath: null,\n keystorePassword: null,\n keyAlias: null,\n keyPassword: null,\n executable: {path: 'adb', defaultArgs: []},\n tmpDir: os.tmpdir(),\n curDeviceId: null,\n emulatorPort: null,\n logcat: null,\n binaries: {},\n instrumentProc: null,\n suppressKillServer: null,\n jars: {},\n adbPort: DEFAULT_ADB_PORT,\n adbHost: null,\n adbExecTimeout: DEFAULT_ADB_EXEC_TIMEOUT,\n remoteAppsCacheLimit: 10,\n buildToolsVersion: null,\n allowOfflineDevices: false,\n allowDelayAdb: true,\n};\n\nclass ADB {\n constructor (opts = {}) {\n Object.assign(this, opts);\n _.defaultsDeep(this, _.cloneDeep(DEFAULT_OPTS));\n\n if (opts.remoteAdbHost) {\n this.executable.defaultArgs.push('-H', opts.remoteAdbHost);\n this.adbHost = opts.remoteAdbHost;\n }\n // TODO figure out why we have this option as it does not appear to be\n // used anywhere. Probably deprecate in favor of simple opts.adbPort\n if (opts.remoteAdbPort) {\n this.adbPort = opts.remoteAdbPort;\n }\n this.executable.defaultArgs.push('-P', this.adbPort);\n }\n\n /**\n * Create a new instance of `ADB` that inherits configuration from this `ADB` instance.\n * This avoids the need to call `ADB.createADB()` multiple times.\n * @param {object} opts - Additional options mapping to pass to the `ADB` constructor.\n * @returns {ADB} The resulting class instance.\n */\n clone (opts = {}) {\n const originalOptions = _.cloneDeep(_.pick(this, Object.keys(DEFAULT_OPTS)));\n const cloneOptions = _.defaultsDeep(opts, originalOptions);\n\n // Reset default arguments created in the constructor.\n // Without this code, -H and -P can be injected into defaultArgs multiple times.\n const defaultArgs = cloneOptions.executable.defaultArgs;\n if (cloneOptions.remoteAdbHost && defaultArgs.includes('-H')) {\n defaultArgs.splice(defaultArgs.indexOf('-H'), 2);\n }\n if (defaultArgs.includes('-P')) {\n defaultArgs.splice(defaultArgs.indexOf('-P'), 2);\n }\n\n return new ADB(cloneOptions);\n }\n}\n\nADB.createADB = async function createADB (opts) {\n const adb = new ADB(opts);\n adb.sdkRoot = await requireSdkRoot(adb.sdkRoot);\n await adb.getAdbWithCorrectAdbPath();\n try {\n await adb.adbExec(['start-server']);\n } catch (e) {\n log.warn(e.stderr || e.message);\n }\n return adb;\n};\n\n// add all the methods to the ADB prototype\nfor (const [fnName, fn] of _.toPairs(methods)) {\n ADB.prototype[fnName] = fn;\n}\n\nexport default ADB;\nexport { ADB, DEFAULT_ADB_PORT, getAndroidBinaryPath, getSdkRootFromEnv };\n"],"mappings":"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"}
|
package/build/lib/helpers.js
CHANGED
|
@@ -741,4 +741,4 @@ function parseLaunchableActivityNames(dumpsys) {
|
|
|
741
741
|
function matchComponentName(classString) {
|
|
742
742
|
return /^[a-z0-9./_]+$/i.exec(classString);
|
|
743
743
|
}
|
|
744
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9nZ2VyIiwiX2xvZGFzaCIsIl9ibHVlYmlyZCIsIl9zZW12ZXIiLCJfb3MiLCJBUEtTX0VYVEVOU0lPTiIsImV4cG9ydHMiLCJBUEtfRVhURU5TSU9OIiwiQVBLX0lOU1RBTExfVElNRU9VVCIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiTUFJTl9BQ1RJT04iLCJMQVVOQ0hFUl9DQVRFR09SWSIsIk1PRFVMRV9OQU1FIiwiZ2V0TW9kdWxlUm9vdCIsIl8iLCJtZW1vaXplIiwibW9kdWxlUm9vdCIsInBhdGgiLCJkaXJuYW1lIiwicmVzb2x2ZSIsIl9fZmlsZW5hbWUiLCJpc0F0RnNSb290IiwibWFuaWZlc3RQYXRoIiwiam9pbiIsImZzIiwiZXhpc3RzIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJuYW1lIiwiaWduIiwibGVuZ3RoIiwiRXJyb3IiLCJnZXRSZXNvdXJjZVBhdGgiLCJyZWxQYXRoIiwicmVzdWx0UGF0aCIsImdldFNka1Jvb3RGcm9tRW52IiwicHJvY2VzcyIsImVudiIsIkFORFJPSURfSE9NRSIsIkFORFJPSURfU0RLX1JPT1QiLCJyZXF1aXJlU2RrUm9vdCIsImN1c3RvbVJvb3QiLCJzZGtSb290IiwiZG9jTXNnIiwiaXNFbXB0eSIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicGxhdGZvcm1QYXRoIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsInN0cmluZ2lmeSIsInVuemlwRmlsZSIsInppcFBhdGgiLCJkc3RSb290IiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJleHRyYWN0QWxsVG8iLCJ1bnNpZ25BcGsiLCJhcGtQYXRoIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwibWV0YUluZkZvbGRlck5hbWUiLCJoYXNNZXRhSW5mIiwicmVhZEVudHJpZXMiLCJlbnRyeSIsImZpbGVOYW1lIiwic3RhcnRzV2l0aCIsInRtcFppcFJvb3QiLCJyaW1yYWYiLCJ0bXBSZXN1bHRQYXRoIiwidG9BcmNoaXZlIiwidW5saW5rIiwibXYiLCJnZXRJTUVMaXN0RnJvbU91dHB1dCIsInN0ZG91dCIsImVuZ2luZXMiLCJsaW5lIiwic3BsaXQiLCJwdXNoIiwidHJpbSIsInJlcGxhY2UiLCJnZXRKYXZhSG9tZSIsIkpBVkFfSE9NRSIsImdldEphdmFGb3JPcyIsImphdmFIb21lIiwiZXJyTXNnIiwiZXJyIiwibWVzc2FnZSIsImV4ZWN1dGFibGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwid2hpY2giLCJnZXRPcGVuU3NsRm9yT3MiLCJiaW5hcnlOYW1lIiwiZ2V0QXBrc2lnbmVyRm9yT3MiLCJzeXNIZWxwZXJzIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRBcGthbmFseXplckZvck9zIiwiaXNTaG93aW5nTG9ja3NjcmVlbiIsImR1bXBzeXMiLCJzb21lIiwieCIsImluY2x1ZGVzIiwiZXZlcnkiLCJ0ZXN0IiwiaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIiwibSIsImdldFN1cmZhY2VPcmllbnRhdGlvbiIsImlzU2NyZWVuT25GdWxseSIsImJ1aWxkU3RhcnRDbWQiLCJzdGFydEFwcE9wdGlvbnMiLCJhcGlMZXZlbCIsInVzZXIiLCJ3YWl0Rm9yTGF1bmNoIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJmbGFncyIsImNtZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwicGFyc2VLZXlWYWx1ZSIsInN0ciIsInNwYWNlIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlIiwiYXJncyIsImFwcGx5IiwiZmxhZyIsImZsYWdQb3MiLCJwcmV2QXJncyIsImdldFNka1Rvb2xzVmVyc2lvbiIsImFuZHJvaWRIb21lIiwicHJvcGVydGllc1BhdGgiLCJwcm9wZXJ0aWVzQ29udGVudCIsInZlcnNpb25NYXRjaGVyIiwiUmVnRXhwIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZ2V0QnVpbGRUb29sc0RpcnMiLCJidWlsZFRvb2xzRGlycyIsIm1hcCIsImRpciIsImEiLCJiIiwic2VtdmVyIiwicmNvbXBhcmUiLCJwYWlyIiwicGFpcnMiLCJCIiwibXRpbWUiLCJ2YWx1ZU9mIiwiaW5mbyIsImV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zIiwiZHVtcHN5c091dHB1dCIsImdyb3VwTmFtZXMiLCJncmFudGVkU3RhdGUiLCJncm91cFBhdHRlcm5CeU5hbWUiLCJncm91cE5hbWUiLCJlc2NhcGVSZWdFeHAiLCJpbmRlbnRQYXR0ZXJuIiwicGVybWlzc2lvbk5hbWVQYXR0ZXJuIiwiZ3JhbnRlZFN0YXRlUGF0dGVybiIsImdyb3VwTWF0Y2giLCJsaW5lcyIsInRpdGxlSW5kZW50Iiwic2VhcmNoIiwic2xpY2UiLCJjdXJyZW50SW5kZW50IiwicGVybWlzc2lvbk5hbWVNYXRjaCIsIml0ZW0iLCJwZXJtaXNzaW9uIiwiZ3JhbnRlZFN0YXRlTWF0Y2giLCJncmFudGVkIiwiZmlsdGVyZWRSZXN1bHQiLCJmaWx0ZXIiLCJpc0Jvb2xlYW4iLCJwbHVyYWxpemUiLCJidWlsZEluc3RhbGxBcmdzIiwib3B0aW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwidXNlU2RjYXJkIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInBhcnRpYWxJbnN0YWxsIiwicGFyc2VNYW5pZmVzdCIsIm1hbmlmZXN0IiwicGFja2FnZSIsInZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJhcHBsaWNhdGlvbiIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUFsaWFzZXMiLCJlbmFibGVkIiwiaW50ZW50RmlsdGVycyIsImFjdGlvbnMiLCJjYXRlZ29yaWVzIiwiaXNNYWluQWN0aW9uIiwiaXNMYXVuY2hlckNhdGVnb3J5IiwicGFyc2VBYXB0U3RyaW5ncyIsInJhd091dHB1dCIsImNvbmZpZ01hcmtlciIsIm5vcm1hbGl6ZVN0cmluZ01hdGNoIiwicyIsImFwa1N0cmluZ3MiLCJpc0luQ29uZmlnIiwiY3VycmVudFJlc291cmNlSWQiLCJpc0luUGx1cmFsR3JvdXAiLCJxdW90ZWRTdHJpbmdQYXR0ZXJuIiwib3MiLCJFT0wiLCJ0cmltbWVkTGluZSIsInBhcnNlQWFwdDJTdHJpbmdzIiwiYWxsTGluZXMiLCJleHRyYWN0Q29udGVudCIsInN0YXJ0SWR4IiwiaWR4Iiwic3RhcnRDaGFyUG9zIiwidGVybWluYXRpb25DaGFyTWF0Y2giLCJ0ZXJtaW5hdGlvbkNoYXJQb3MiLCJpbmRleCIsInRyaW1TdGFydCIsImlzSW5DdXJyZW50Q29uZmlnIiwibGluZUluZGV4IiwiY29udGVudCIsImlzU3RyaW5nIiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiY29uZmlnc0dldHRlciIsImRlc2lyZWRNYXJrZXIiLCJkZWZhdWx0TWFya2VyIiwiY29uZmlncyIsInRvTG93ZXJDYXNlIiwicGFyc2VKc29uRGF0YSIsIm91dHB1dCIsImVudGl0eU5hbWUiLCJqc29uU3RyIiwiZSIsInRvQXZkTG9jYWxlQXJncyIsImxhbmd1YWdlIiwiY291bnRyeSIsInRvVXBwZXJDYXNlIiwibG9jYWxlIiwiZ2V0QW5kcm9pZFByZWZzUm9vdCIsImxvY2F0aW9uIiwiQU5EUk9JRF9FTVVMQVRPUl9IT01FIiwiZGlyRXhpc3RzIiwiaG9tZSIsIkhPTUUiLCJVU0VSUFJPRklMRSIsImVzY2FwZVNoZWxsQXJnIiwiYXJnIiwicGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyIsIm1haW5BY3Rpdml0eU5hbWVSZSIsImNhdGVnb3J5TmFtZVJlIiwiYmxvY2tzIiwiYmxvY2tTdGFydEluZGVudCIsImJsb2NrIiwidHJpbUVuZCIsImlzTmlsIiwiaGFzQ2F0ZWdvcnkiLCJhY3Rpdml0eU5hbWVTdHIiLCJCb29sZWFuIiwiZnFBY3Rpdml0eU5hbWUiLCJtYXRjaENvbXBvbmVudE5hbWUiLCJjbGFzc1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IEFQS1NfRVhURU5TSU9OID0gJy5hcGtzJztcbmNvbnN0IEFQS19FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBBUEtfSU5TVEFMTF9USU1FT1VUID0gNjAwMDA7XG5jb25zdCBBUEtTX0lOU1RBTExfVElNRU9VVCA9IEFQS19JTlNUQUxMX1RJTUVPVVQgKiAyO1xuY29uc3QgREVGQVVMVF9BREJfRVhFQ19USU1FT1VUID0gMjAwMDA7IC8vIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgTUFJTl9BQ1RJT04gPSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nO1xuY29uc3QgTEFVTkNIRVJfQ0FURUdPUlkgPSAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInO1xuY29uc3QgTU9EVUxFX05BTUUgPSAnYXBwaXVtLWFkYic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgbGV0IG1vZHVsZVJvb3QgPSBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKF9fZmlsZW5hbWUpKTtcbiAgbGV0IGlzQXRGc1Jvb3QgPSBmYWxzZTtcbiAgd2hpbGUgKCFpc0F0RnNSb290KSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKG1vZHVsZVJvb3QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhtYW5pZmVzdFBhdGgpICYmXG4gICAgICAgICAgSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShtYW5pZmVzdFBhdGgsICd1dGY4JykpLm5hbWUgPT09IE1PRFVMRV9OQU1FKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVSb290O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBtb2R1bGVSb290ID0gcGF0aC5kaXJuYW1lKG1vZHVsZVJvb3QpO1xuICAgIGlzQXRGc1Jvb3QgPSBtb2R1bGVSb290Lmxlbmd0aCA8PSBwYXRoLmRpcm5hbWUobW9kdWxlUm9vdCkubGVuZ3RoO1xuICB9XG4gIGlmIChpc0F0RnNSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlICR7TU9EVUxFX05BTUV9IE5vZGUuanMgbW9kdWxlYCk7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZVJvb3Q7XG59KTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHN1dGUgcGF0aCB0byB0aGUgZ2l2ZW4gcmVzb3VyY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsUGF0aCBSZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IG1vZHVsZSByb290XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZXNvdXJjZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhYnNvbHV0ZSByZXNvdXJjZSBwYXRoIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmNvbnN0IGdldFJlc291cmNlUGF0aCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRSZXNvdXJjZVBhdGggKHJlbFBhdGgpIHtcbiAgY29uc3QgbW9kdWxlUm9vdCA9IGF3YWl0IGdldE1vZHVsZVJvb3QoKTtcbiAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShtb2R1bGVSb290LCByZWxQYXRoKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSByZXNvdXJjZSAnJHtyZWxQYXRofScgdW5kZXIgdGhlICcke21vZHVsZVJvb3R9JyBgICtcbiAgICAgIGBmb2xkZXIgb2YgJHtNT0RVTEVfTkFNRX0gTm9kZS5qcyBtb2R1bGVgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0UGF0aDtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcycpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIGxldCBqYXZhSG9tZTtcbiAgbGV0IGVyck1zZztcbiAgdHJ5IHtcbiAgICBqYXZhSG9tZSA9IGF3YWl0IGdldEphdmFIb21lKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyck1zZyA9IGVyci5tZXNzYWdlO1xuICB9XG4gIGNvbnN0IGV4ZWN1dGFibGVOYW1lID0gYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIGlmIChqYXZhSG9tZSkge1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nLCBleGVjdXRhYmxlTmFtZSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGV4ZWN1dGFibGVOYW1lKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtleGVjdXRhYmxlTmFtZX0nIGJpbmFyeSBjb3VsZCBub3QgYmUgZm91bmQgYCArXG4gICAgYG5laXRoZXIgaW4gUEFUSCBub3IgdW5kZXIgSkFWQV9IT01FICgke2Vyck1zZyB8fCBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nKX0pYCk7XG59KTtcblxuY29uc3QgZ2V0T3BlblNzbEZvck9zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaW5hcnlOYW1lID0gYG9wZW5zc2wke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcGVuc3NsIHRvb2wgbXVzdCBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhbmQgYXZhaWxhYmxlIG9uIHRoZSBwYXRoJyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrc2lnbmVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa3NpZ25lci5qYXInKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYXBrYW5hbHl6ZXIuaHRtbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrYW5hbHl6ZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrYW5hbHl6ZXInKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgbVNob3dpbmdMb2Nrc2NyZWVuIG9yIG1EcmVhbWluZ0xvY2tzY3JlZW4gaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lXG4gKiBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nXG4gKlxuICogQSBub3RlOiBgYWRiIHNoZWxsIGR1bXBzeXMgdHJ1c3RgIHBlcmZvcm1zIGJldHRlciB3aGlsZSBkZXRlY3RpbmcgdGhlIGxvY2tlZCBzY3JlZW4gc3RhdGVcbiAqIGluIGNvbXBhcmlzb24gdG8gYGFkYiBkdW1wc3lzIHdpbmRvd2Agb3V0cHV0IHBhcnNpbmcuXG4gKiBCdXQgdGhlIHRydXN0IGNvbW1hbmQgZG9lcyBub3Qgd29yayBmb3IgYFN3aXBlYCB1bmxvY2sgcGF0dGVybi5cbiAqXG4gKiBJbiBzb21lIEFuZHJvaWQgZGV2aWNlcyAoUHJvYmFibHkgYXJvdW5kIEFuZHJvaWQgMTArKSwgYG1TaG93aW5nTG9ja3NjcmVlbmAgYW5kIGBtRHJlYW1pbmdMb2Nrc2NyZWVuYFxuICogZG8gbm90IHdvcmsgdG8gZGV0ZWN0IGxvY2sgc3RhdHVzLiBJbnN0ZWFkLCBrZXlndWFyZCBwcmVmZXJlbmNlcyBoZWxwcyB0byBkZXRlY3QgdGhlIGxvY2sgY29uZGl0aW9uLlxuICogU29tZSBkZXZpY2VzIHN1Y2ggYXMgQW5kcm9pZCBUViBkbyBub3QgaGF2ZSBrZXlndWFyZCwgc28gd2Ugc2hvdWxkIGtlZXBcbiAqIHNjcmVlbiBjb25kaXRpb24gYXMgdGhpcyBwcmltYXJ5IG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyAtIFRoZSBvdXRwdXQgb2YgZHVtcHN5cyB3aW5kb3cgY29tbWFuZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZy5cbiAqL1xuZnVuY3Rpb24gaXNTaG93aW5nTG9ja3NjcmVlbiAoZHVtcHN5cykge1xuICByZXR1cm4gXy5zb21lKFsnbVNob3dpbmdMb2Nrc2NyZWVuPXRydWUnLCAnbURyZWFtaW5nTG9ja3NjcmVlbj10cnVlJ10sICh4KSA9PiBkdW1wc3lzLmluY2x1ZGVzKHgpKVxuICAgIC8vIGBtSXNTaG93aW5nYCBhbmQgYG1JbnB1dFJlc3RyaWN0ZWRgIGFyZSBgdHJ1ZWAgaW4gbG9jayBjb25kaXRpb24uIGBmYWxzZWAgaXMgdW5sb2NrIGNvbmRpdGlvbi5cbiAgICB8fCBfLmV2ZXJ5KFsvS2V5Z3VhcmRTdGF0ZU1vbml0b3JbXFxuXFxzXSttSXNTaG93aW5nPXRydWUvLCAvXFxzK21JbnB1dFJlc3RyaWN0ZWQ9dHJ1ZS9dLCAoeCkgPT4geC50ZXN0KGR1bXBzeXMpKTtcbn1cblxuLypcbiAqIENoZWNrcyBtQ3VycmVudEZvY3VzIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBLZXlndWFyZCBpcyBhY3RpdmF0ZWRcbiAqL1xuZnVuY3Rpb24gaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21DdXJyZW50Rm9jdXMuK0tleWd1YXJkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAobSAmJiBtLmxlbmd0aCAmJiBtWzBdKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLypcbiAqIFJlYWRzIFN1cmZhY2VPcmllbnRhdGlvbiBpbiBkdW1wc3lzIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRTdXJmYWNlT3JpZW50YXRpb24gKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvU3VyZmFjZU9yaWVudGF0aW9uOiBcXGQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIG0gJiYgcGFyc2VJbnQobVswXS5zcGxpdCgnOicpWzFdLCAxMCk7XG59XG5cbi8qXG4gKiBDaGVja3MgbVNjcmVlbk9uRnVsbHkgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIHNjcmVlbiBpcyBzaG93aW5nXG4gKiBEZWZhdWx0IGlzIHRydWVcbiAqL1xuZnVuY3Rpb24gaXNTY3JlZW5PbkZ1bGx5IChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21TY3JlZW5PbkZ1bGx5PVxcdysvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuICFtIHx8IC8vIGlmIGluZm9ybWF0aW9uIGlzIG1pc3Npbmcgd2UgYXNzdW1lIHNjcmVlbiBpcyBmdWxseSBvblxuICAgICAgICAgKG0gJiYgbS5sZW5ndGggPiAwICYmIG1bMF0uc3BsaXQoJz0nKVsxXSA9PT0gJ3RydWUnKSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29tbWFuZCBsaW5lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2l2ZW5cbiAqIGFwcGxpY2F0aW9uIHN0YXJ0dXAgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3RhcnRBcHBPcHRpb25zfSBzdGFydEFwcE9wdGlvbnMgLSBBcHBsaWNhdGlvbiBvcHRpb25zIG1hcHBpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBhY3R1YWwgT1MgQVBJIGxldmVsXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFjdHVhbCBjb21tYW5kIGxpbmUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gYnVpbGRTdGFydENtZCAoc3RhcnRBcHBPcHRpb25zLCBhcGlMZXZlbCkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICAgIHBrZyxcbiAgICBhY3Rpdml0eSxcbiAgICBhY3Rpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgc3RvcEFwcCxcbiAgICBmbGFncyxcbiAgfSA9IHN0YXJ0QXBwT3B0aW9ucztcbiAgY29uc3QgY21kID0gWydhbScsICdzdGFydCddO1xuICBpZiAodXRpbC5oYXNWYWx1ZSh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAod2FpdEZvckxhdW5jaCkge1xuICAgIGNtZC5wdXNoKCctVycpO1xuICB9XG4gIGlmIChhY3Rpdml0eSAmJiBwa2cpIHtcbiAgICBjbWQucHVzaCgnLW4nLCBgJHtwa2d9LyR7YWN0aXZpdHl9YCk7XG4gIH1cbiAgaWYgKHN0b3BBcHAgJiYgYXBpTGV2ZWwgPj0gMTUpIHtcbiAgICBjbWQucHVzaCgnLVMnKTtcbiAgfVxuICBpZiAoYWN0aW9uKSB7XG4gICAgY21kLnB1c2goJy1hJywgYWN0aW9uKTtcbiAgfVxuICBpZiAoY2F0ZWdvcnkpIHtcbiAgICBjbWQucHVzaCgnLWMnLCBjYXRlZ29yeSk7XG4gIH1cbiAgaWYgKGZsYWdzKSB7XG4gICAgY21kLnB1c2goJy1mJywgZmxhZ3MpO1xuICB9XG4gIGlmIChzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpIHtcbiAgICAvLyBleHBlY3Qgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgdG8gYmUgYSBzaW5nbGUgc3RyaW5nIG9mIHRoZSBmb3JtOlxuICAgIC8vICAgICBcIi1mbGFnIGtleVwiXG4gICAgLy8gICAgIFwiLWZsYWcga2V5IHZhbHVlXCJcbiAgICAvLyBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIChlLmcuLCBcIi1mbGFnMSBrZXkxIC1mbGFnMiBrZXkyIHZhbHVlMlwiKVxuXG4gICAgLy8gdGFrZSBhIHN0cmluZyBhbmQgcGFyc2Ugb3V0IHRoZSBwYXJ0IGJlZm9yZSBhbnkgc3BhY2VzLCBhbmQgYW55dGhpbmcgYWZ0ZXJcbiAgICAvLyB0aGUgZmlyc3Qgc3BhY2VcbiAgICBsZXQgcGFyc2VLZXlWYWx1ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgICBsZXQgc3BhY2UgPSBzdHIuaW5kZXhPZignICcpO1xuICAgICAgaWYgKHNwYWNlID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IFtzdHJdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3N0ci5zdWJzdHJpbmcoMCwgc3BhY2UpLnRyaW0oKSwgc3RyLnN1YnN0cmluZyhzcGFjZSArIDEpLnRyaW0oKV07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGN5Y2xlIHRocm91Z2ggdGhlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGFuZCBwdWxsIG91dCB0aGUgYXJndW1lbnRzXG4gICAgLy8gYWRkIGEgc3BhY2UgaW5pdGlhbGx5IHNvIGZsYWdzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYXJndW1lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGludGVybmFsIGh5cGhlbnNcbiAgICBsZXQgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBgICR7c3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzfWA7XG4gICAgbGV0IHJlID0gLyAoLVteXFxzXSspICguKykvO1xuICAgIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICBsZXQgYXJncyA9IHJlLmV4ZWMob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpO1xuICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgIGlmIChvcHRpb25hbEludGVudEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBubyBtb3JlIGZsYWdzLCBzbyB0aGUgcmVtYWluZGVyIGNhbiBiZSB0cmVhdGVkIGFzICdrZXknIG9yICdrZXkgdmFsdWUnXG4gICAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHRha2UgdGhlIGZsYWcgYW5kIHNlZSBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcbiAgICAgIC8vIGlmIGl0IGlzIG5vdCwgdGhlbiBpdCBtZWFucyB3ZSBoYXZlIGJlZW4gdGhyb3VnaCBhbHJlYWR5LCBhbmRcbiAgICAgIC8vIHdoYXQgaXMgYmVmb3JlIHRoZSBmbGFnIGlzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHByZXZpb3VzIGZsYWdcbiAgICAgIGxldCBmbGFnID0gYXJnc1sxXTtcbiAgICAgIGxldCBmbGFnUG9zID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuaW5kZXhPZihmbGFnKTtcbiAgICAgIGlmIChmbGFnUG9zICE9PSAwKSB7XG4gICAgICAgIGxldCBwcmV2QXJncyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLnN1YnN0cmluZygwLCBmbGFnUG9zKTtcbiAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKHByZXZBcmdzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgZmxhZywgYXMgdGhlcmUgYXJlIG5vIG1vcmUgZWFybGllciBhcmd1bWVudHNcbiAgICAgIGNtZC5wdXNoKGZsYWcpO1xuXG4gICAgICAvLyBtYWtlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGhvbGQgdGhlIHJlbWFpbmRlclxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBhcmdzWzJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5jb25zdCBnZXRTZGtUb29sc1ZlcnNpb24gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2RrVG9vbHNWZXJzaW9uICgpIHtcbiAgY29uc3QgYW5kcm9pZEhvbWUgPSBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUU7XG4gIGlmICghYW5kcm9pZEhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBiZSBzZXQnKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzUGF0aCA9IHBhdGgucmVzb2x2ZShhbmRyb2lkSG9tZSwgJ3Rvb2xzJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BlcnRpZXNQYXRoKSkge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgZmluZCAke3Byb3BlcnRpZXNQYXRofSBmaWxlIHRvIHJlYWQgU0RLIHZlcnNpb24gZnJvbWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICBjb25zdCB2ZXJzaW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoL1BrZ1xcLlJldmlzaW9uPShcXGQrKVxcLj8oXFxkKyk/XFwuPyhcXGQrKT8vKTtcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uTWF0Y2hlci5leGVjKHByb3BlcnRpZXNDb250ZW50KTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ham9yOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgbWlub3I6IG1hdGNoWzJdID8gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSA6IDAsXG4gICAgICBidWlsZDogbWF0Y2hbM10gPyBwYXJzZUludChtYXRjaFszXSwgMTApIDogMFxuICAgIH07XG4gIH1cbiAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSBcIlBrZy5SZXZpc2lvblwiIHZhbHVlIGZyb20gJHtwcm9wZXJ0aWVzUGF0aH1gKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBmdWxsIHBhdGhzIHRvIGFsbCAnYnVpbGQtdG9vbHMnIHN1YmZvbGRlcnMgdW5kZXIgdGhlIHBhcnRpY3VsYXJcbiAqIFNESyByb290IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtSb290IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXJcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRocyB0byB0aGUgcmVzdWx0aW5nIGZvbGRlcnMgc29ydGVkIGJ5XG4gKiBtb2RpZmljYXRpb24gZGF0ZSAodGhlIG5ld2VzdCBjb21lcyBmaXJzdCkgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYWN0aGVzIHdlcmUgZm91bmRcbiAqL1xuY29uc3QgZ2V0QnVpbGRUb29sc0RpcnMgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRUb29sc0RpcnMgKHNka1Jvb3QpIHtcbiAgbGV0IGJ1aWxkVG9vbHNEaXJzID0gYXdhaXQgZnMuZ2xvYignKi8nLCB7XG4gICAgY3dkOiBwYXRoLnJlc29sdmUoc2RrUm9vdCwgJ2J1aWxkLXRvb2xzJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICB0cnkge1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gYnVpbGRUb29sc0RpcnNcbiAgICAgIC5tYXAoKGRpcikgPT4gW3BhdGguYmFzZW5hbWUoZGlyKSwgZGlyXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzZW12ZXIucmNvbXBhcmUoYVswXSwgYlswXSkpXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBzb3J0IGJ1aWxkLXRvb2xzIGZvbGRlcnMgJHtKU09OLnN0cmluZ2lmeShidWlsZFRvb2xzRGlycy5tYXAoKGRpcikgPT4gcGF0aC5iYXNlbmFtZShkaXIpKSl9IGAgK1xuICAgICAgYGJ5IHNlbWFudGljIHZlcnNpb24gbmFtZXMuYCk7XG4gICAgbG9nLndhcm4oYEZhbGxpbmcgYmFjayB0byBzb3J0aW5nIGJ5IG1vZGlmaWNhdGlvbiBkYXRlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBjb25zdCBwYWlycyA9IGF3YWl0IEIubWFwKGJ1aWxkVG9vbHNEaXJzLCBhc3luYyAoZGlyKSA9PiBbKGF3YWl0IGZzLnN0YXQoZGlyKSkubXRpbWUudmFsdWVPZigpLCBkaXJdKTtcbiAgICBidWlsZFRvb2xzRGlycyA9IHBhaXJzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0pXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfVxuICBsb2cuaW5mbyhgRm91bmQgJHtidWlsZFRvb2xzRGlycy5sZW5ndGh9ICdidWlsZC10b29scycgZm9sZGVycyB1bmRlciAnJHtzZGtSb290fScgKG5ld2VzdCBmaXJzdCk6YCk7XG4gIGZvciAobGV0IGRpciBvZiBidWlsZFRvb2xzRGlycykge1xuICAgIGxvZy5pbmZvKGAgICAgJHtkaXJ9YCk7XG4gIH1cbiAgcmV0dXJuIGJ1aWxkVG9vbHNEaXJzO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb24gbmFtZXMgZW5jb2RlZCBpbiBgZHVtcHN5cyBwYWNrYWdlYCBjb21tYW5kIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5c091dHB1dCAtIFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGdyb3VwTmFtZXMgLSBUaGUgbGlzdCBvZiBncm91cCBuYW1lcyB0byBsaXN0IHBlcm1pc3Npb25zIGZvci5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGdyYW50ZWRTdGF0ZSAtIFRoZSBleHBlY3RlZCBzdGF0ZSBvZiBgZ3JhbnRlZGAgYXR0cmlidXRlIHRvIGZpbHRlciB3aXRoLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZmlsdGVyaW5nIGlzIGRvbmUgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIG1hdGNoZWQgcGVybWlzc2lvbiBuYW1lcyBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAqL1xuY29uc3QgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMgPSBmdW5jdGlvbiAoZHVtcHN5c091dHB1dCwgZ3JvdXBOYW1lcywgZ3JhbnRlZFN0YXRlID0gbnVsbCkge1xuICBjb25zdCBncm91cFBhdHRlcm5CeU5hbWUgPSAoZ3JvdXBOYW1lKSA9PiBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7Xy5lc2NhcGVSZWdFeHAoZ3JvdXBOYW1lKX0gcGVybWlzc2lvbnM6W1xcXFxzXFxcXFNdKylgLCAnbScpO1xuICBjb25zdCBpbmRlbnRQYXR0ZXJuID0gL1xcU3wkLztcbiAgY29uc3QgcGVybWlzc2lvbk5hbWVQYXR0ZXJuID0gL2FuZHJvaWRcXC5cXHcqXFwuP3Blcm1pc3Npb25cXC5cXHcrLztcbiAgY29uc3QgZ3JhbnRlZFN0YXRlUGF0dGVybiA9IC9cXGJncmFudGVkPShcXHcrKS87XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBncm91cE5hbWVzKSB7XG4gICAgY29uc3QgZ3JvdXBNYXRjaCA9IGdyb3VwUGF0dGVybkJ5TmFtZShncm91cE5hbWUpLmV4ZWMoZHVtcHN5c091dHB1dCk7XG4gICAgaWYgKCFncm91cE1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lcyA9IGdyb3VwTWF0Y2hbMV0uc3BsaXQoJ1xcbicpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPCAyKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZUluZGVudCA9IGxpbmVzWzBdLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICAgIGlmIChjdXJyZW50SW5kZW50IDw9IHRpdGxlSW5kZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uTmFtZU1hdGNoID0gcGVybWlzc2lvbk5hbWVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lTWF0Y2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uTmFtZU1hdGNoWzBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyYW50ZWRTdGF0ZU1hdGNoID0gZ3JhbnRlZFN0YXRlUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKGdyYW50ZWRTdGF0ZU1hdGNoKSB7XG4gICAgICAgIGl0ZW0uZ3JhbnRlZCA9IGdyYW50ZWRTdGF0ZU1hdGNoWzFdID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IHJlc3VsdFxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFfLmlzQm9vbGVhbihncmFudGVkU3RhdGUpIHx8IGl0ZW0uZ3JhbnRlZCA9PT0gZ3JhbnRlZFN0YXRlKVxuICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ucGVybWlzc2lvbik7XG4gIGxvZy5kZWJ1ZyhgUmV0cmlldmVkICR7dXRpbC5wbHVyYWxpemUoJ3Blcm1pc3Npb24nLCBmaWx0ZXJlZFJlc3VsdC5sZW5ndGgsIHRydWUpfSBgICtcbiAgICBgZnJvbSAke2dyb3VwTmFtZXN9ICR7dXRpbC5wbHVyYWxpemUoJ2dyb3VwJywgZ3JvdXBOYW1lcy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogVHJhbnNmb3JtcyBnaXZlbiBvcHRpb25zIGludG8gdGhlIGxpc3Qgb2YgYGFkYiBpbnN0YWxsLmluc3RhbGwtbXVsdGlwbGVgIGNvbW1hbmQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGN1cnJlbnQgQVBJIGxldmVsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG1hcHBpbmcgdG8gdHJhbnNmb3JtXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBidWlsZEluc3RhbGxBcmdzIChhcGlMZXZlbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmICghdXRpbC5oYXNWYWx1ZShvcHRpb25zLnJlcGxhY2UpIHx8IG9wdGlvbnMucmVwbGFjZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcicpO1xuICB9XG4gIGlmIChvcHRpb25zLmFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgcmVzdWx0LnB1c2goJy10Jyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudXNlU2RjYXJkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1zJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgICBsb2cuZGVidWcoYFNraXBwaW5nIHBlcm1pc3Npb25zIGdyYW50IG9wdGlvbiwgc2luY2UgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBjdXJyZW50IEFQSSBsZXZlbCAke2FwaUxldmVsfSBkb2VzIG5vdCBzdXBwb3J0IGFwcGxpY2F0aW9ucyBgICtcbiAgICAgICAgICAgICAgICBgcGVybWlzc2lvbnMgY3VzdG9taXphdGlvbmApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCgnLWcnKTtcbiAgICB9XG4gIH1cbiAgLy8gRm9yIG11bHRpcGxlLWluc3RhbGxcbiAgaWYgKG9wdGlvbnMucGFydGlhbEluc3RhbGwpIHtcbiAgICByZXN1bHQucHVzaCgnLXAnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFuaWZlc3RJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnIC0gVGhlIGFwcGxpY2F0aW9uIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBtYWluIHBhY2thZ2UgYWN0aXZpdHlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVyc2lvbkNvZGUgLSBUaGUgdmVyc2lvbiBjb2RlIG51bWJlciAobWlnaHQgYmUgYE5hTmApXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb25OYW1lIC0gVGhlIHZlcnNpb24gbmFtZSAobWlnaHQgYmUgYG51bGxgKVxuICovXG5cbi8qKlxuICogUGVyZm9ybSBwYXJzaW5nIG9mIHRoZSBtYW5pZmVzdCBvYmplY3QgaW4gb3JkZXJcbiAqIHRvIGV4dHJhY3Qgc29tZSB2aXRhbCB2YWx1ZXMgZnJvbSBpdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYW5pZmVzdCBUaGUgbWFuaWZlc3QgY29udGVudCBmb3JtYXR0ZWQgYXMgSlNPTlxuICogU2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FkYmtpdC1hcGtyZWFkZXIgZm9yIGRldGFpbGVkIGZvcm1hdCBkZXNjcmlwdGlvblxuICogQHJldHVybnMge01hbmlmZXN0SW5mb31cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYW5pZmVzdCAobWFuaWZlc3QpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHBrZzogbWFuaWZlc3QucGFja2FnZSxcbiAgICB2ZXJzaW9uQ29kZTogcGFyc2VJbnQobWFuaWZlc3QudmVyc2lvbkNvZGUsIDEwKSxcbiAgICB2ZXJzaW9uTmFtZTogbWFuaWZlc3QudmVyc2lvbk5hbWUgfHwgbnVsbCxcbiAgfTtcbiAgaWYgKCFtYW5pZmVzdC5hcHBsaWNhdGlvbikge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBMb29rIGZvciBlbmFibGVkIGFjdGl2aXR5IG9yIGFjdGl2aXR5LWFsaWFzIHdpdGhcbiAgLy8gYWN0aW9uID09IGFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIGFuZFxuICAvLyBjYXRlZ29yeSA9PSBhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUlxuICBmb3IgKGNvbnN0IGFjdGl2aXR5IG9mIFtcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0aWVzLFxuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXR5QWxpYXNlcyxcbiAgXSkge1xuICAgIGlmIChhY3Rpdml0eS5lbmFibGVkID09PSBmYWxzZSB8fCBfLmlzRW1wdHkoYWN0aXZpdHkuaW50ZW50RmlsdGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qge2FjdGlvbnMsIGNhdGVnb3JpZXN9IG9mIGFjdGl2aXR5LmludGVudEZpbHRlcnMpIHtcbiAgICAgIGlmIChfLmlzRW1wdHkoYWN0aW9ucykgfHwgXy5pc0VtcHR5KGNhdGVnb3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01haW5BY3Rpb24gPSBhY3Rpb25zLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTUFJTl9BQ1RJT04pO1xuICAgICAgY29uc3QgaXNMYXVuY2hlckNhdGVnb3J5ID0gY2F0ZWdvcmllcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IExBVU5DSEVSX0NBVEVHT1JZKTtcbiAgICAgIGlmIChpc01haW5BY3Rpb24gJiYgaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICAgIHJlc3VsdC5hY3Rpdml0eSA9IGFjdGl2aXR5Lm5hbWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdCB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYChkZWZhdWx0KWBcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0U3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplU3RyaW5nTWF0Y2ggPSBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1wiJC8sICcnKS5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuICB9O1xuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGlzSW5Db25maWcgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAvLyBUaGUgcGF0dGVybiBtYXRjaGVzIGFueSBxdW90ZWQgY29udGVudCBpbmNsdWRpbmcgZXNjYXBlZCBxdW90ZXNcbiAgY29uc3QgcXVvdGVkU3RyaW5nUGF0dGVybiA9IC9cIlteXCJcXFxcXSooPzpcXFxcLlteXCJcXFxcXSopKlwiLztcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd091dHB1dC5zcGxpdChvcy5FT0wpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsnY29uZmlnJywgJ3R5cGUnLCAnc3BlYycsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGlzSW5Db25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGBjb25maWcgJHtjb25maWdNYXJrZXJ9OmApO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSW5Db25maWcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6c3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpzdHJpbmdcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnBsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnBsdXJhbHNcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgaXNJblBsdXJhbEdyb3VwICYmIHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6IChzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQyIHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IG9uZVxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHQyU3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3QgYWxsTGluZXMgPSByYXdPdXRwdXQuc3BsaXQob3MuRU9MKTtcbiAgZnVuY3Rpb24gZXh0cmFjdENvbnRlbnQgKHN0YXJ0SWR4KSB7XG4gICAgbGV0IGlkeCA9IHN0YXJ0SWR4O1xuICAgIGNvbnN0IHN0YXJ0Q2hhclBvcyA9IGFsbExpbmVzW3N0YXJ0SWR4XS5pbmRleE9mKCdcIicpO1xuICAgIGlmIChzdGFydENoYXJQb3MgPCAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIGlkeF07XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoaWR4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJNYXRjaCA9IC9cIiQvLmV4ZWMoYWxsTGluZXNbaWR4XSk7XG4gICAgICBpZiAodGVybWluYXRpb25DaGFyTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyUG9zID0gdGVybWluYXRpb25DaGFyTWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChzdGFydElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEsIHRlcm1pbmF0aW9uQ2hhclBvcyksXG4gICAgICAgICAgICBpZHhcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYCR7cmVzdWx0fVxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdLnN1YnN0cmluZygwLCB0ZXJtaW5hdGlvbkNoYXJQb3MpKX1gLFxuICAgICAgICAgIGlkeCxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggPiBzdGFydElkeCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEpO1xuICAgICAgfVxuICAgICAgKytpZHg7XG4gICAgfVxuICAgIHJldHVybiBbcmVzdWx0LCBpZHhdO1xuICB9XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIGxldCBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICBsZXQgbGluZUluZGV4ID0gMDtcbiAgd2hpbGUgKGxpbmVJbmRleCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gYWxsTGluZXNbbGluZUluZGV4XS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsndHlwZScsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvc3RyaW5nXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygncGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9wbHVyYWxzXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCkge1xuICAgICAgaWYgKGlzSW5QbHVyYWxHcm91cCkge1xuICAgICAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApO1xuICAgICAgICAgICsrbGluZUluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ3VycmVudENvbmZpZykge1xuICAgICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKSkge1xuICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICArK2xpbmVJbmRleDtcbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBjb25maWcgbWFya2VyLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBwYXJzZS4uIG1ldGhvZHNcbiAqIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoIHJlc291cmNlIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGFhcHQoMikgdG9vbFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ3NHZXR0ZXIgVGhlIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBpcyBhIGxpc3RcbiAqIG9mIGFwayBjb25maWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzaXJlZE1hcmtlciBUaGUgZGVzaXJlZCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdE1hcmtlciBUaGUgZGVmYXVsdCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZmlnIG1hcmtlclxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JtYXRDb25maWdNYXJrZXIgKGNvbmZpZ3NHZXR0ZXIsIGRlc2lyZWRNYXJrZXIsIGRlZmF1bHRNYXJrZXIpIHtcbiAgbGV0IGNvbmZpZ01hcmtlciA9IGRlc2lyZWRNYXJrZXIgfHwgZGVmYXVsdE1hcmtlcjtcbiAgaWYgKGNvbmZpZ01hcmtlci5pbmNsdWRlcygnLScpICYmICFjb25maWdNYXJrZXIuaW5jbHVkZXMoJy1yJykpIHtcbiAgICBjb25maWdNYXJrZXIgPSBjb25maWdNYXJrZXIucmVwbGFjZSgnLScsICctcicpO1xuICB9XG4gIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBjb25maWdzR2V0dGVyKCk7XG4gIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlncyl9YCk7XG4gIC8vIEFzc3VtZSB0aGUgJ2VuJyBjb25maWd1cmF0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoY29uZmlnTWFya2VyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZW4nKVxuICAgICYmICFjb25maWdzLnNvbWUoKHgpID0+IHgudHJpbSgpID09PSBjb25maWdNYXJrZXIpKSB7XG4gICAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uIG5hbWUgJyR7Y29uZmlnTWFya2VyfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgUmVwbGFjaW5nIGl0IHdpdGggJyR7ZGVmYXVsdE1hcmtlcn0nYCk7XG4gICAgY29uZmlnTWFya2VyID0gZGVmYXVsdE1hcmtlcjtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGNvbmZpZ3VyYXRpb246ICcke2NvbmZpZ01hcmtlcn0nYCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ01hcmtlcjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG91dHB1dCBpbiBKU09OIGZvcm1hdCByZXRyaWV2ZWQgZnJvbVxuICogdGhlIGNvcnJlc3BvbmRpbmcgQXBwaXVtIFNldHRpbmdzIGJyb2FkY2FzdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQgVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB3aGljaCBpc1xuICogZ29pbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIEpTT04gb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG91dHB1dCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBhcyBhIHZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uRGF0YSAob3V0cHV0LCBlbnRpdHlOYW1lKSB7XG4gIGlmICghL1xcYnJlc3VsdD0tMVxcYi8udGVzdChvdXRwdXQpIHx8ICEvXFxiZGF0YT1cIi8udGVzdChvdXRwdXQpKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IC9cXGJkYXRhPShcIi4rKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBjb21tYW5kIG91dHB1dC4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IGpzb25TdHIgPSBfLnRyaW0obWF0Y2hbMV0pLnJlcGxhY2UoLyheXCIpfChcIiQpL2csICcnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1Zyhqc29uU3RyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIHJlc3VsdGluZyBkYXRhIHN0cmluZy4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGNvdW50cnkgYWJicmV2aWF0aW9uc1xuICogdG8gQVZEIGFyZ3VtZW50cyBhcnJheVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgTGFuZ3VhZ2UgbmFtZSwgZm9yIGV4YW1wbGUgJ2ZyJ1xuICogQHBhcmFtIHs/c3RyaW5nfSBjb3VudHJ5IENvdW50cnkgbmFtZSwgZm9yIGV4YW1wbGUgJ0NBJ1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBnZW5lcmF0ZWQgYXJndW1lbnRzLiBUaGVcbiAqIHJlc3VsdGluZyBhcnJheSBtaWdodCBiZSBlbXB0eSBpZiBib3RoIGFyZ3VtZW50cyBhcmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gdG9BdmRMb2NhbGVBcmdzIChsYW5ndWFnZSwgY291bnRyeSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxhbmd1YWdlPSR7bGFuZ3VhZ2UudG9Mb3dlckNhc2UoKX1gKTtcbiAgfVxuICBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmNvdW50cnk9JHtjb3VudHJ5LnRvVXBwZXJDYXNlKCl9YCk7XG4gIH1cbiAgbGV0IGxvY2FsZTtcbiAgaWYgKF8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmIF8uaXNTdHJpbmcoY291bnRyeSkgJiYgbGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCkgKyAnLScgKyBjb3VudHJ5LnRvVXBwZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvY2FsZSA9IGNvdW50cnk7XG4gIH1cbiAgaWYgKGxvY2FsZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sb2NhbGU9JHtsb2NhbGV9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBwcmVmZXJlbmNlcyByb290XG4gKlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBvciBgbnVsbGAgaWYgdGhlIGZvbGRlciBjYW5ub3QgYmUgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFByZWZzUm9vdCAoKSB7XG4gIGxldCBsb2NhdGlvbiA9IHByb2Nlc3MuZW52LkFORFJPSURfRU1VTEFUT1JfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBpZiAobG9jYXRpb24pIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0VNVUxBVE9SX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gIH1cblxuICBjb25zdCBob21lID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRTtcbiAgaWYgKGhvbWUpIHtcbiAgICBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShob21lLCAnLmFuZHJvaWQnKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIGxvZy5kZWJ1ZyhgQW5kcm9pZCBjb25maWcgcm9vdCAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggZXhpc3RzIG9uIHRoZSBmaWxlc3lzdGVtIGFuZCBpcyBhIGRpcmVjdG9yeVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbG9jYXRpb24gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlyRXhpc3RzIChsb2NhdGlvbikge1xuICByZXR1cm4gbG9jYXRpb25cbiAgICAmJiBhd2FpdCBmcy5leGlzdHMobG9jYXRpb24pXG4gICAgJiYgKGF3YWl0IGZzLnN0YXQobG9jYXRpb24pKS5pc0RpcmVjdG9yeSgpO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKiBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBob3cgc3lzdGVtIGBzcGF3bmBcbiAqIGNhbGwgaGFuZGxlcyB0aGVtLlxuICogU2VlIGh0dHBzOi8vZGlzY3Vzcy5hcHBpdW0uaW8vdC9ob3ctdG8tbW9kaWZ5LXdkLXByb3h5LWFuZC11aWF1dG9tYXRvcjItc291cmNlLWNvZGUtdG8tc3VwcG9ydC11bmljb2RlLzMzNDY2XG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmcgTm9uLWVzY2FwZWQgYXJndW1lbnQgc3RyaW5nXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBhcmd1bWVudFxuICovXG5mdW5jdGlvbiBlc2NhcGVTaGVsbEFyZyAoYXJnKSB7XG4gIGFyZyA9IGAke2FyZ31gO1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIC9bJnxeXFxzXS8udGVzdChhcmcpID8gYFwiJHthcmcucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImAgOiBhcmc7XG4gIH1cbiAgcmV0dXJuIGFyZy5yZXBsYWNlKC8mL2csICdcXFxcJicpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmFtZSBvZiBsYXVuY2hhYmxlIHBhY2thZ2UgYWN0aXZpdHlcbiAqIGZyb20gZHVtcHN5cyBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgdGhlIGFjdHVhbCBkdW1wc3lzIG91dHB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfSBFaXRoZXIgdGhlIGZ1bGx5IHF1YWxpZmllZFxuICogYWN0aXZpdHkgbmFtZSBhcyBhIHNpbmdsZSBsaXN0IGl0ZW0gb3IgYW4gZW1wdHkgbGlzdCBpZiBub3RoaW5nIGNvdWxkIGJlIHBhcnNlZC5cbiAqIEluIEFuZHJvaWQgNiBhbmQgb2xkZXIgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGRldGVybWluZVxuICogdGhlIGNhdGVnb3J5IG5hbWUgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSwgc28gdGhpcyBBUEkganVzdFxuICogcmV0dXJucyBhbGwgYWN0aXZpdHkgbmFtZXMgYmVsb25naW5nIHRvICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTidcbiAqIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIGFwcCBtYW5pZmVzdCBjb3VsZCBiZSBwYXJzZWQgbmV4dFxuICogaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IG5hbWVzIGZvciB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyAoZHVtcHN5cykge1xuICBjb25zdCBtYWluQWN0aXZpdHlOYW1lUmUgPSBuZXcgUmVnRXhwKGBeXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChNQUlOX0FDVElPTil9OiRgKTtcbiAgY29uc3QgY2F0ZWdvcnlOYW1lUmUgPSAvXlxccypDYXRlZ29yeTpcXHMrXCIoW2EtekEtWjAtOS5fLy1dKylcIiQvO1xuICBjb25zdCBibG9ja3MgPSBbXTtcbiAgbGV0IGJsb2NrU3RhcnRJbmRlbnQ7XG4gIGxldCBibG9jayA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgZHVtcHN5cy5zcGxpdCgnXFxuJykubWFwKF8udHJpbUVuZCkpIHtcbiAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5sZW5ndGggLSBfLnRyaW1TdGFydChsaW5lKS5sZW5ndGg7XG4gICAgaWYgKG1haW5BY3Rpdml0eU5hbWVSZS50ZXN0KGxpbmUpKSB7XG4gICAgICBibG9ja1N0YXJ0SW5kZW50ID0gY3VycmVudEluZGVudDtcbiAgICAgIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICBibG9ja3MucHVzaChibG9jayk7XG4gICAgICAgIGJsb2NrID0gW107XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKF8uaXNOaWwoYmxvY2tTdGFydEluZGVudCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZW50ID4gYmxvY2tTdGFydEluZGVudCkge1xuICAgICAgYmxvY2sucHVzaChsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICBibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGJsb2Nrcykge1xuICAgIGxldCBoYXNDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGxldCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaXRlbSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBjYXRlZ29yeU5hbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaGFzQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgaXNMYXVuY2hlckNhdGVnb3J5ID0gbWF0Y2hbMV0gPT09IExBVU5DSEVSX0NBVEVHT1JZO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIE9uIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMgdGhlIGNhdGVnb3J5IG5hbWVcbiAgICAvLyBtaWdodCBub3QgYmUgbGlzdGVkLCBzbyB3ZSBqdXN0IHRyeSB0byBmZXRjaFxuICAgIC8vIGFsbCBtYXRjaGVzIGluc3RlYWRcbiAgICBpZiAoaGFzQ2F0ZWdvcnkgJiYgIWlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3Rpdml0eU5hbWVTdHIgb2YgaXRlbS5tYXAoXy50cmltKS5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGNvbnN0IGZxQWN0aXZpdHlOYW1lID0gYWN0aXZpdHlOYW1lU3RyLnNwbGl0KC9cXHMrLylbMV07XG4gICAgICBpZiAoIW1hdGNoQ29tcG9uZW50TmFtZShmcUFjdGl2aXR5TmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmV0dXJuIFtmcUFjdGl2aXR5TmFtZV07XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmcUFjdGl2aXR5TmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGNvbXBvbmVudCBuYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzU3RyaW5nIFRoZSBzdHJpbmcgdG8gdmVyaWZ5XG4gKiBAcmV0dXJuIHs/QXJyYXk8TWF0Y2g+fSBUaGUgcmVzdWx0IG9mIFJlZ2V4cC5leGVjIG9wZXJhdGlvblxuICogb3IgX251bGxfIGlmIG5vIG1hdGNoZXMgYXJlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIG1hdGNoQ29tcG9uZW50TmFtZSAoY2xhc3NTdHJpbmcpIHtcbiAgLy8gc29tZS5wYWNrYWdlL3NvbWUucGFja2FnZS5BY3Rpdml0eVxuICByZXR1cm4gL15bYS16MC05Li9fXSskL2kuZXhlYyhjbGFzc1N0cmluZyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbiAgcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcywgbWF0Y2hDb21wb25lbnRO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
|
|
744
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9nZ2VyIiwiX2xvZGFzaCIsIl9ibHVlYmlyZCIsIl9zZW12ZXIiLCJfb3MiLCJBUEtTX0VYVEVOU0lPTiIsImV4cG9ydHMiLCJBUEtfRVhURU5TSU9OIiwiQVBLX0lOU1RBTExfVElNRU9VVCIsIkFQS1NfSU5TVEFMTF9USU1FT1VUIiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiTUFJTl9BQ1RJT04iLCJMQVVOQ0hFUl9DQVRFR09SWSIsIk1PRFVMRV9OQU1FIiwiZ2V0TW9kdWxlUm9vdCIsIl8iLCJtZW1vaXplIiwibW9kdWxlUm9vdCIsInBhdGgiLCJkaXJuYW1lIiwicmVzb2x2ZSIsIl9fZmlsZW5hbWUiLCJpc0F0RnNSb290IiwibWFuaWZlc3RQYXRoIiwiam9pbiIsImZzIiwiZXhpc3RzIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJuYW1lIiwiaWduIiwibGVuZ3RoIiwiRXJyb3IiLCJnZXRSZXNvdXJjZVBhdGgiLCJyZWxQYXRoIiwicmVzdWx0UGF0aCIsImdldFNka1Jvb3RGcm9tRW52IiwicHJvY2VzcyIsImVudiIsIkFORFJPSURfSE9NRSIsIkFORFJPSURfU0RLX1JPT1QiLCJyZXF1aXJlU2RrUm9vdCIsImN1c3RvbVJvb3QiLCJzZGtSb290IiwiZG9jTXNnIiwiaXNFbXB0eSIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicGxhdGZvcm1QYXRoIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsInN0cmluZ2lmeSIsInVuemlwRmlsZSIsInppcFBhdGgiLCJkc3RSb290IiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJleHRyYWN0QWxsVG8iLCJ1bnNpZ25BcGsiLCJhcGtQYXRoIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwibWV0YUluZkZvbGRlck5hbWUiLCJoYXNNZXRhSW5mIiwicmVhZEVudHJpZXMiLCJlbnRyeSIsImZpbGVOYW1lIiwic3RhcnRzV2l0aCIsInRtcFppcFJvb3QiLCJyaW1yYWYiLCJ0bXBSZXN1bHRQYXRoIiwidG9BcmNoaXZlIiwidW5saW5rIiwibXYiLCJnZXRJTUVMaXN0RnJvbU91dHB1dCIsInN0ZG91dCIsImVuZ2luZXMiLCJsaW5lIiwic3BsaXQiLCJwdXNoIiwidHJpbSIsInJlcGxhY2UiLCJnZXRKYXZhSG9tZSIsIkpBVkFfSE9NRSIsImdldEphdmFGb3JPcyIsImphdmFIb21lIiwiZXJyTXNnIiwiZXJyIiwibWVzc2FnZSIsImV4ZWN1dGFibGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwid2hpY2giLCJnZXRPcGVuU3NsRm9yT3MiLCJiaW5hcnlOYW1lIiwiZ2V0QXBrc2lnbmVyRm9yT3MiLCJzeXNIZWxwZXJzIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRBcGthbmFseXplckZvck9zIiwiaXNTaG93aW5nTG9ja3NjcmVlbiIsImR1bXBzeXMiLCJzb21lIiwieCIsImluY2x1ZGVzIiwiZXZlcnkiLCJ0ZXN0IiwiaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIiwibSIsImdldFN1cmZhY2VPcmllbnRhdGlvbiIsImlzU2NyZWVuT25GdWxseSIsImJ1aWxkU3RhcnRDbWQiLCJzdGFydEFwcE9wdGlvbnMiLCJhcGlMZXZlbCIsInVzZXIiLCJ3YWl0Rm9yTGF1bmNoIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJmbGFncyIsImNtZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwicGFyc2VLZXlWYWx1ZSIsInN0ciIsInNwYWNlIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlIiwiYXJncyIsImFwcGx5IiwiZmxhZyIsImZsYWdQb3MiLCJwcmV2QXJncyIsImdldFNka1Rvb2xzVmVyc2lvbiIsImFuZHJvaWRIb21lIiwicHJvcGVydGllc1BhdGgiLCJwcm9wZXJ0aWVzQ29udGVudCIsInZlcnNpb25NYXRjaGVyIiwiUmVnRXhwIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZ2V0QnVpbGRUb29sc0RpcnMiLCJidWlsZFRvb2xzRGlycyIsIm1hcCIsImRpciIsImEiLCJiIiwic2VtdmVyIiwicmNvbXBhcmUiLCJwYWlyIiwicGFpcnMiLCJCIiwibXRpbWUiLCJ2YWx1ZU9mIiwiaW5mbyIsImV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zIiwiZHVtcHN5c091dHB1dCIsImdyb3VwTmFtZXMiLCJncmFudGVkU3RhdGUiLCJncm91cFBhdHRlcm5CeU5hbWUiLCJncm91cE5hbWUiLCJlc2NhcGVSZWdFeHAiLCJpbmRlbnRQYXR0ZXJuIiwicGVybWlzc2lvbk5hbWVQYXR0ZXJuIiwiZ3JhbnRlZFN0YXRlUGF0dGVybiIsImdyb3VwTWF0Y2giLCJsaW5lcyIsInRpdGxlSW5kZW50Iiwic2VhcmNoIiwic2xpY2UiLCJjdXJyZW50SW5kZW50IiwicGVybWlzc2lvbk5hbWVNYXRjaCIsIml0ZW0iLCJwZXJtaXNzaW9uIiwiZ3JhbnRlZFN0YXRlTWF0Y2giLCJncmFudGVkIiwiZmlsdGVyZWRSZXN1bHQiLCJmaWx0ZXIiLCJpc0Jvb2xlYW4iLCJwbHVyYWxpemUiLCJidWlsZEluc3RhbGxBcmdzIiwib3B0aW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwidXNlU2RjYXJkIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInBhcnRpYWxJbnN0YWxsIiwicGFyc2VNYW5pZmVzdCIsIm1hbmlmZXN0IiwicGFja2FnZSIsInZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJhcHBsaWNhdGlvbiIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUFsaWFzZXMiLCJlbmFibGVkIiwiaW50ZW50RmlsdGVycyIsImFjdGlvbnMiLCJjYXRlZ29yaWVzIiwiaXNNYWluQWN0aW9uIiwiaXNMYXVuY2hlckNhdGVnb3J5IiwicGFyc2VBYXB0U3RyaW5ncyIsInJhd091dHB1dCIsImNvbmZpZ01hcmtlciIsIm5vcm1hbGl6ZVN0cmluZ01hdGNoIiwicyIsImFwa1N0cmluZ3MiLCJpc0luQ29uZmlnIiwiY3VycmVudFJlc291cmNlSWQiLCJpc0luUGx1cmFsR3JvdXAiLCJxdW90ZWRTdHJpbmdQYXR0ZXJuIiwib3MiLCJFT0wiLCJ0cmltbWVkTGluZSIsInBhcnNlQWFwdDJTdHJpbmdzIiwiYWxsTGluZXMiLCJleHRyYWN0Q29udGVudCIsInN0YXJ0SWR4IiwiaWR4Iiwic3RhcnRDaGFyUG9zIiwidGVybWluYXRpb25DaGFyTWF0Y2giLCJ0ZXJtaW5hdGlvbkNoYXJQb3MiLCJpbmRleCIsInRyaW1TdGFydCIsImlzSW5DdXJyZW50Q29uZmlnIiwibGluZUluZGV4IiwiY29udGVudCIsImlzU3RyaW5nIiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiY29uZmlnc0dldHRlciIsImRlc2lyZWRNYXJrZXIiLCJkZWZhdWx0TWFya2VyIiwiY29uZmlncyIsInRvTG93ZXJDYXNlIiwicGFyc2VKc29uRGF0YSIsIm91dHB1dCIsImVudGl0eU5hbWUiLCJqc29uU3RyIiwiZSIsInRvQXZkTG9jYWxlQXJncyIsImxhbmd1YWdlIiwiY291bnRyeSIsInRvVXBwZXJDYXNlIiwibG9jYWxlIiwiZ2V0QW5kcm9pZFByZWZzUm9vdCIsImxvY2F0aW9uIiwiQU5EUk9JRF9FTVVMQVRPUl9IT01FIiwiZGlyRXhpc3RzIiwiaG9tZSIsIkhPTUUiLCJVU0VSUFJPRklMRSIsImVzY2FwZVNoZWxsQXJnIiwiYXJnIiwicGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyIsIm1haW5BY3Rpdml0eU5hbWVSZSIsImNhdGVnb3J5TmFtZVJlIiwiYmxvY2tzIiwiYmxvY2tTdGFydEluZGVudCIsImJsb2NrIiwidHJpbUVuZCIsImlzTmlsIiwiaGFzQ2F0ZWdvcnkiLCJhY3Rpdml0eU5hbWVTdHIiLCJCb29sZWFuIiwiZnFBY3Rpdml0eU5hbWUiLCJtYXRjaENvbXBvbmVudE5hbWUiLCJjbGFzc1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IEFQS1NfRVhURU5TSU9OID0gJy5hcGtzJztcbmNvbnN0IEFQS19FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBBUEtfSU5TVEFMTF9USU1FT1VUID0gNjAwMDA7XG5jb25zdCBBUEtTX0lOU1RBTExfVElNRU9VVCA9IEFQS19JTlNUQUxMX1RJTUVPVVQgKiAyO1xuY29uc3QgREVGQVVMVF9BREJfRVhFQ19USU1FT1VUID0gMjAwMDA7IC8vIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgTUFJTl9BQ1RJT04gPSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nO1xuY29uc3QgTEFVTkNIRVJfQ0FURUdPUlkgPSAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInO1xuY29uc3QgTU9EVUxFX05BTUUgPSAnYXBwaXVtLWFkYic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgbGV0IG1vZHVsZVJvb3QgPSBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKF9fZmlsZW5hbWUpKTtcbiAgbGV0IGlzQXRGc1Jvb3QgPSBmYWxzZTtcbiAgd2hpbGUgKCFpc0F0RnNSb290KSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKG1vZHVsZVJvb3QsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhtYW5pZmVzdFBhdGgpICYmXG4gICAgICAgICAgSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShtYW5pZmVzdFBhdGgsICd1dGY4JykpLm5hbWUgPT09IE1PRFVMRV9OQU1FKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVSb290O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBtb2R1bGVSb290ID0gcGF0aC5kaXJuYW1lKG1vZHVsZVJvb3QpO1xuICAgIGlzQXRGc1Jvb3QgPSBtb2R1bGVSb290Lmxlbmd0aCA8PSBwYXRoLmRpcm5hbWUobW9kdWxlUm9vdCkubGVuZ3RoO1xuICB9XG4gIGlmIChpc0F0RnNSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlICR7TU9EVUxFX05BTUV9IE5vZGUuanMgbW9kdWxlYCk7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZVJvb3Q7XG59KTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHN1dGUgcGF0aCB0byB0aGUgZ2l2ZW4gcmVzb3VyY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsUGF0aCBSZWxhdGl2ZSBwYXRoIHRvIHRoZSByZXNvdXJjZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IG1vZHVsZSByb290XG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZXNvdXJjZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhYnNvbHV0ZSByZXNvdXJjZSBwYXRoIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmNvbnN0IGdldFJlc291cmNlUGF0aCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRSZXNvdXJjZVBhdGggKHJlbFBhdGgpIHtcbiAgY29uc3QgbW9kdWxlUm9vdCA9IGF3YWl0IGdldE1vZHVsZVJvb3QoKTtcbiAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShtb2R1bGVSb290LCByZWxQYXRoKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSByZXNvdXJjZSAnJHtyZWxQYXRofScgdW5kZXIgdGhlICcke21vZHVsZVJvb3R9JyBgICtcbiAgICAgIGBmb2xkZXIgb2YgJHtNT0RVTEVfTkFNRX0gTm9kZS5qcyBtb2R1bGVgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0UGF0aDtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcycpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIGxldCBqYXZhSG9tZTtcbiAgbGV0IGVyck1zZztcbiAgdHJ5IHtcbiAgICBqYXZhSG9tZSA9IGF3YWl0IGdldEphdmFIb21lKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyck1zZyA9IGVyci5tZXNzYWdlO1xuICB9XG4gIGNvbnN0IGV4ZWN1dGFibGVOYW1lID0gYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIGlmIChqYXZhSG9tZSkge1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nLCBleGVjdXRhYmxlTmFtZSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGV4ZWN1dGFibGVOYW1lKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtleGVjdXRhYmxlTmFtZX0nIGJpbmFyeSBjb3VsZCBub3QgYmUgZm91bmQgYCArXG4gICAgYG5laXRoZXIgaW4gUEFUSCBub3IgdW5kZXIgSkFWQV9IT01FICgke2Vyck1zZyB8fCBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nKX0pYCk7XG59KTtcblxuY29uc3QgZ2V0T3BlblNzbEZvck9zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaW5hcnlOYW1lID0gYG9wZW5zc2wke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcGVuc3NsIHRvb2wgbXVzdCBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhbmQgYXZhaWxhYmxlIG9uIHRoZSBwYXRoJyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrc2lnbmVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa3NpZ25lci5qYXInKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYXBrYW5hbHl6ZXIuaHRtbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrYW5hbHl6ZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrYW5hbHl6ZXInKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgbVNob3dpbmdMb2Nrc2NyZWVuIG9yIG1EcmVhbWluZ0xvY2tzY3JlZW4gaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lXG4gKiBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nXG4gKlxuICogQSBub3RlOiBgYWRiIHNoZWxsIGR1bXBzeXMgdHJ1c3RgIHBlcmZvcm1zIGJldHRlciB3aGlsZSBkZXRlY3RpbmcgdGhlIGxvY2tlZCBzY3JlZW4gc3RhdGVcbiAqIGluIGNvbXBhcmlzb24gdG8gYGFkYiBkdW1wc3lzIHdpbmRvd2Agb3V0cHV0IHBhcnNpbmcuXG4gKiBCdXQgdGhlIHRydXN0IGNvbW1hbmQgZG9lcyBub3Qgd29yayBmb3IgYFN3aXBlYCB1bmxvY2sgcGF0dGVybi5cbiAqXG4gKiBJbiBzb21lIEFuZHJvaWQgZGV2aWNlcyAoUHJvYmFibHkgYXJvdW5kIEFuZHJvaWQgMTArKSwgYG1TaG93aW5nTG9ja3NjcmVlbmAgYW5kIGBtRHJlYW1pbmdMb2Nrc2NyZWVuYFxuICogZG8gbm90IHdvcmsgdG8gZGV0ZWN0IGxvY2sgc3RhdHVzLiBJbnN0ZWFkLCBrZXlndWFyZCBwcmVmZXJlbmNlcyBoZWxwcyB0byBkZXRlY3QgdGhlIGxvY2sgY29uZGl0aW9uLlxuICogU29tZSBkZXZpY2VzIHN1Y2ggYXMgQW5kcm9pZCBUViBkbyBub3QgaGF2ZSBrZXlndWFyZCwgc28gd2Ugc2hvdWxkIGtlZXBcbiAqIHNjcmVlbiBjb25kaXRpb24gYXMgdGhpcyBwcmltYXJ5IG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyAtIFRoZSBvdXRwdXQgb2YgZHVtcHN5cyB3aW5kb3cgY29tbWFuZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZy5cbiAqL1xuZnVuY3Rpb24gaXNTaG93aW5nTG9ja3NjcmVlbiAoZHVtcHN5cykge1xuICByZXR1cm4gXy5zb21lKFsnbVNob3dpbmdMb2Nrc2NyZWVuPXRydWUnLCAnbURyZWFtaW5nTG9ja3NjcmVlbj10cnVlJ10sICh4KSA9PiBkdW1wc3lzLmluY2x1ZGVzKHgpKVxuICAgIC8vIGBtSXNTaG93aW5nYCBhbmQgYG1JbnB1dFJlc3RyaWN0ZWRgIGFyZSBgdHJ1ZWAgaW4gbG9jayBjb25kaXRpb24uIGBmYWxzZWAgaXMgdW5sb2NrIGNvbmRpdGlvbi5cbiAgICB8fCBfLmV2ZXJ5KFsvS2V5Z3VhcmRTdGF0ZU1vbml0b3JbXFxuXFxzXSttSXNTaG93aW5nPXRydWUvLCAvXFxzK21JbnB1dFJlc3RyaWN0ZWQ9dHJ1ZS9dLCAoeCkgPT4geC50ZXN0KGR1bXBzeXMpKTtcbn1cblxuLypcbiAqIENoZWNrcyBtQ3VycmVudEZvY3VzIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBLZXlndWFyZCBpcyBhY3RpdmF0ZWRcbiAqL1xuZnVuY3Rpb24gaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21DdXJyZW50Rm9jdXMuK0tleWd1YXJkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAobSAmJiBtLmxlbmd0aCAmJiBtWzBdKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLypcbiAqIFJlYWRzIFN1cmZhY2VPcmllbnRhdGlvbiBpbiBkdW1wc3lzIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRTdXJmYWNlT3JpZW50YXRpb24gKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvU3VyZmFjZU9yaWVudGF0aW9uOiBcXGQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIG0gJiYgcGFyc2VJbnQobVswXS5zcGxpdCgnOicpWzFdLCAxMCk7XG59XG5cbi8qXG4gKiBDaGVja3MgbVNjcmVlbk9uRnVsbHkgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIHNjcmVlbiBpcyBzaG93aW5nXG4gKiBEZWZhdWx0IGlzIHRydWVcbiAqL1xuZnVuY3Rpb24gaXNTY3JlZW5PbkZ1bGx5IChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21TY3JlZW5PbkZ1bGx5PVxcdysvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuICFtIHx8IC8vIGlmIGluZm9ybWF0aW9uIGlzIG1pc3Npbmcgd2UgYXNzdW1lIHNjcmVlbiBpcyBmdWxseSBvblxuICAgICAgICAgKG0gJiYgbS5sZW5ndGggPiAwICYmIG1bMF0uc3BsaXQoJz0nKVsxXSA9PT0gJ3RydWUnKSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29tbWFuZCBsaW5lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2l2ZW5cbiAqIGFwcGxpY2F0aW9uIHN0YXJ0dXAgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3RhcnRBcHBPcHRpb25zfSBzdGFydEFwcE9wdGlvbnMgLSBBcHBsaWNhdGlvbiBvcHRpb25zIG1hcHBpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBhY3R1YWwgT1MgQVBJIGxldmVsXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFjdHVhbCBjb21tYW5kIGxpbmUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gYnVpbGRTdGFydENtZCAoc3RhcnRBcHBPcHRpb25zLCBhcGlMZXZlbCkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICAgIHBrZyxcbiAgICBhY3Rpdml0eSxcbiAgICBhY3Rpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgc3RvcEFwcCxcbiAgICBmbGFncyxcbiAgfSA9IHN0YXJ0QXBwT3B0aW9ucztcbiAgY29uc3QgY21kID0gWydhbScsICdzdGFydCddO1xuICBpZiAodXRpbC5oYXNWYWx1ZSh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAod2FpdEZvckxhdW5jaCkge1xuICAgIGNtZC5wdXNoKCctVycpO1xuICB9XG4gIGlmIChhY3Rpdml0eSAmJiBwa2cpIHtcbiAgICBjbWQucHVzaCgnLW4nLCBgJHtwa2d9LyR7YWN0aXZpdHl9YCk7XG4gIH1cbiAgaWYgKHN0b3BBcHAgJiYgYXBpTGV2ZWwgPj0gMTUpIHtcbiAgICBjbWQucHVzaCgnLVMnKTtcbiAgfVxuICBpZiAoYWN0aW9uKSB7XG4gICAgY21kLnB1c2goJy1hJywgYWN0aW9uKTtcbiAgfVxuICBpZiAoY2F0ZWdvcnkpIHtcbiAgICBjbWQucHVzaCgnLWMnLCBjYXRlZ29yeSk7XG4gIH1cbiAgaWYgKGZsYWdzKSB7XG4gICAgY21kLnB1c2goJy1mJywgZmxhZ3MpO1xuICB9XG4gIGlmIChzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpIHtcbiAgICAvLyBleHBlY3Qgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgdG8gYmUgYSBzaW5nbGUgc3RyaW5nIG9mIHRoZSBmb3JtOlxuICAgIC8vICAgICBcIi1mbGFnIGtleVwiXG4gICAgLy8gICAgIFwiLWZsYWcga2V5IHZhbHVlXCJcbiAgICAvLyBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIChlLmcuLCBcIi1mbGFnMSBrZXkxIC1mbGFnMiBrZXkyIHZhbHVlMlwiKVxuXG4gICAgLy8gdGFrZSBhIHN0cmluZyBhbmQgcGFyc2Ugb3V0IHRoZSBwYXJ0IGJlZm9yZSBhbnkgc3BhY2VzLCBhbmQgYW55dGhpbmcgYWZ0ZXJcbiAgICAvLyB0aGUgZmlyc3Qgc3BhY2VcbiAgICBsZXQgcGFyc2VLZXlWYWx1ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgICBsZXQgc3BhY2UgPSBzdHIuaW5kZXhPZignICcpO1xuICAgICAgaWYgKHNwYWNlID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IFtzdHJdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3N0ci5zdWJzdHJpbmcoMCwgc3BhY2UpLnRyaW0oKSwgc3RyLnN1YnN0cmluZyhzcGFjZSArIDEpLnRyaW0oKV07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGN5Y2xlIHRocm91Z2ggdGhlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGFuZCBwdWxsIG91dCB0aGUgYXJndW1lbnRzXG4gICAgLy8gYWRkIGEgc3BhY2UgaW5pdGlhbGx5IHNvIGZsYWdzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYXJndW1lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGludGVybmFsIGh5cGhlbnNcbiAgICBsZXQgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBgICR7c3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzfWA7XG4gICAgbGV0IHJlID0gLyAoLVteXFxzXSspICguKykvO1xuICAgIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICBsZXQgYXJncyA9IHJlLmV4ZWMob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpO1xuICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgIGlmIChvcHRpb25hbEludGVudEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBubyBtb3JlIGZsYWdzLCBzbyB0aGUgcmVtYWluZGVyIGNhbiBiZSB0cmVhdGVkIGFzICdrZXknIG9yICdrZXkgdmFsdWUnXG4gICAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHRha2UgdGhlIGZsYWcgYW5kIHNlZSBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcbiAgICAgIC8vIGlmIGl0IGlzIG5vdCwgdGhlbiBpdCBtZWFucyB3ZSBoYXZlIGJlZW4gdGhyb3VnaCBhbHJlYWR5LCBhbmRcbiAgICAgIC8vIHdoYXQgaXMgYmVmb3JlIHRoZSBmbGFnIGlzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHByZXZpb3VzIGZsYWdcbiAgICAgIGxldCBmbGFnID0gYXJnc1sxXTtcbiAgICAgIGxldCBmbGFnUG9zID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuaW5kZXhPZihmbGFnKTtcbiAgICAgIGlmIChmbGFnUG9zICE9PSAwKSB7XG4gICAgICAgIGxldCBwcmV2QXJncyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLnN1YnN0cmluZygwLCBmbGFnUG9zKTtcbiAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKHByZXZBcmdzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgZmxhZywgYXMgdGhlcmUgYXJlIG5vIG1vcmUgZWFybGllciBhcmd1bWVudHNcbiAgICAgIGNtZC5wdXNoKGZsYWcpO1xuXG4gICAgICAvLyBtYWtlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGhvbGQgdGhlIHJlbWFpbmRlclxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBhcmdzWzJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5jb25zdCBnZXRTZGtUb29sc1ZlcnNpb24gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2RrVG9vbHNWZXJzaW9uICgpIHtcbiAgY29uc3QgYW5kcm9pZEhvbWUgPSBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUU7XG4gIGlmICghYW5kcm9pZEhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBiZSBzZXQnKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzUGF0aCA9IHBhdGgucmVzb2x2ZShhbmRyb2lkSG9tZSwgJ3Rvb2xzJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BlcnRpZXNQYXRoKSkge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgZmluZCAke3Byb3BlcnRpZXNQYXRofSBmaWxlIHRvIHJlYWQgU0RLIHZlcnNpb24gZnJvbWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICBjb25zdCB2ZXJzaW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoL1BrZ1xcLlJldmlzaW9uPShcXGQrKVxcLj8oXFxkKyk/XFwuPyhcXGQrKT8vKTtcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uTWF0Y2hlci5leGVjKHByb3BlcnRpZXNDb250ZW50KTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ham9yOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgbWlub3I6IG1hdGNoWzJdID8gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSA6IDAsXG4gICAgICBidWlsZDogbWF0Y2hbM10gPyBwYXJzZUludChtYXRjaFszXSwgMTApIDogMFxuICAgIH07XG4gIH1cbiAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSBcIlBrZy5SZXZpc2lvblwiIHZhbHVlIGZyb20gJHtwcm9wZXJ0aWVzUGF0aH1gKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBmdWxsIHBhdGhzIHRvIGFsbCAnYnVpbGQtdG9vbHMnIHN1YmZvbGRlcnMgdW5kZXIgdGhlIHBhcnRpY3VsYXJcbiAqIFNESyByb290IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtSb290IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXJcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRocyB0byB0aGUgcmVzdWx0aW5nIGZvbGRlcnMgc29ydGVkIGJ5XG4gKiBtb2RpZmljYXRpb24gZGF0ZSAodGhlIG5ld2VzdCBjb21lcyBmaXJzdCkgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYWN0aGVzIHdlcmUgZm91bmRcbiAqL1xuY29uc3QgZ2V0QnVpbGRUb29sc0RpcnMgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRUb29sc0RpcnMgKHNka1Jvb3QpIHtcbiAgbGV0IGJ1aWxkVG9vbHNEaXJzID0gYXdhaXQgZnMuZ2xvYignKi8nLCB7XG4gICAgY3dkOiBwYXRoLnJlc29sdmUoc2RrUm9vdCwgJ2J1aWxkLXRvb2xzJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICB0cnkge1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gYnVpbGRUb29sc0RpcnNcbiAgICAgIC5tYXAoKGRpcikgPT4gW3BhdGguYmFzZW5hbWUoZGlyKSwgZGlyXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzZW12ZXIucmNvbXBhcmUoYVswXSwgYlswXSkpXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBzb3J0IGJ1aWxkLXRvb2xzIGZvbGRlcnMgJHtKU09OLnN0cmluZ2lmeShidWlsZFRvb2xzRGlycy5tYXAoKGRpcikgPT4gcGF0aC5iYXNlbmFtZShkaXIpKSl9IGAgK1xuICAgICAgYGJ5IHNlbWFudGljIHZlcnNpb24gbmFtZXMuYCk7XG4gICAgbG9nLndhcm4oYEZhbGxpbmcgYmFjayB0byBzb3J0aW5nIGJ5IG1vZGlmaWNhdGlvbiBkYXRlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBjb25zdCBwYWlycyA9IGF3YWl0IEIubWFwKGJ1aWxkVG9vbHNEaXJzLCBhc3luYyAoZGlyKSA9PiBbKGF3YWl0IGZzLnN0YXQoZGlyKSkubXRpbWUudmFsdWVPZigpLCBkaXJdKTtcbiAgICBidWlsZFRvb2xzRGlycyA9IHBhaXJzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0pXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfVxuICBsb2cuaW5mbyhgRm91bmQgJHtidWlsZFRvb2xzRGlycy5sZW5ndGh9ICdidWlsZC10b29scycgZm9sZGVycyB1bmRlciAnJHtzZGtSb290fScgKG5ld2VzdCBmaXJzdCk6YCk7XG4gIGZvciAobGV0IGRpciBvZiBidWlsZFRvb2xzRGlycykge1xuICAgIGxvZy5pbmZvKGAgICAgJHtkaXJ9YCk7XG4gIH1cbiAgcmV0dXJuIGJ1aWxkVG9vbHNEaXJzO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb24gbmFtZXMgZW5jb2RlZCBpbiBgZHVtcHN5cyBwYWNrYWdlYCBjb21tYW5kIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5c091dHB1dCAtIFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGdyb3VwTmFtZXMgLSBUaGUgbGlzdCBvZiBncm91cCBuYW1lcyB0byBsaXN0IHBlcm1pc3Npb25zIGZvci5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGdyYW50ZWRTdGF0ZSAtIFRoZSBleHBlY3RlZCBzdGF0ZSBvZiBgZ3JhbnRlZGAgYXR0cmlidXRlIHRvIGZpbHRlciB3aXRoLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZmlsdGVyaW5nIGlzIGRvbmUgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIG1hdGNoZWQgcGVybWlzc2lvbiBuYW1lcyBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAqL1xuY29uc3QgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMgPSBmdW5jdGlvbiAoZHVtcHN5c091dHB1dCwgZ3JvdXBOYW1lcywgZ3JhbnRlZFN0YXRlID0gbnVsbCkge1xuICBjb25zdCBncm91cFBhdHRlcm5CeU5hbWUgPSAoZ3JvdXBOYW1lKSA9PiBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7Xy5lc2NhcGVSZWdFeHAoZ3JvdXBOYW1lKX0gcGVybWlzc2lvbnM6W1xcXFxzXFxcXFNdKylgLCAnbScpO1xuICBjb25zdCBpbmRlbnRQYXR0ZXJuID0gL1xcU3wkLztcbiAgY29uc3QgcGVybWlzc2lvbk5hbWVQYXR0ZXJuID0gL2FuZHJvaWRcXC5cXHcqXFwuP3Blcm1pc3Npb25cXC5cXHcrLztcbiAgY29uc3QgZ3JhbnRlZFN0YXRlUGF0dGVybiA9IC9cXGJncmFudGVkPShcXHcrKS87XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBncm91cE5hbWVzKSB7XG4gICAgY29uc3QgZ3JvdXBNYXRjaCA9IGdyb3VwUGF0dGVybkJ5TmFtZShncm91cE5hbWUpLmV4ZWMoZHVtcHN5c091dHB1dCk7XG4gICAgaWYgKCFncm91cE1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lcyA9IGdyb3VwTWF0Y2hbMV0uc3BsaXQoJ1xcbicpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPCAyKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZUluZGVudCA9IGxpbmVzWzBdLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICAgIGlmIChjdXJyZW50SW5kZW50IDw9IHRpdGxlSW5kZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uTmFtZU1hdGNoID0gcGVybWlzc2lvbk5hbWVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lTWF0Y2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uTmFtZU1hdGNoWzBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyYW50ZWRTdGF0ZU1hdGNoID0gZ3JhbnRlZFN0YXRlUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKGdyYW50ZWRTdGF0ZU1hdGNoKSB7XG4gICAgICAgIGl0ZW0uZ3JhbnRlZCA9IGdyYW50ZWRTdGF0ZU1hdGNoWzFdID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IHJlc3VsdFxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFfLmlzQm9vbGVhbihncmFudGVkU3RhdGUpIHx8IGl0ZW0uZ3JhbnRlZCA9PT0gZ3JhbnRlZFN0YXRlKVxuICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ucGVybWlzc2lvbik7XG4gIGxvZy5kZWJ1ZyhgUmV0cmlldmVkICR7dXRpbC5wbHVyYWxpemUoJ3Blcm1pc3Npb24nLCBmaWx0ZXJlZFJlc3VsdC5sZW5ndGgsIHRydWUpfSBgICtcbiAgICBgZnJvbSAke2dyb3VwTmFtZXN9ICR7dXRpbC5wbHVyYWxpemUoJ2dyb3VwJywgZ3JvdXBOYW1lcy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogVHJhbnNmb3JtcyBnaXZlbiBvcHRpb25zIGludG8gdGhlIGxpc3Qgb2YgYGFkYiBpbnN0YWxsLmluc3RhbGwtbXVsdGlwbGVgIGNvbW1hbmQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGN1cnJlbnQgQVBJIGxldmVsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG1hcHBpbmcgdG8gdHJhbnNmb3JtXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBidWlsZEluc3RhbGxBcmdzIChhcGlMZXZlbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmICghdXRpbC5oYXNWYWx1ZShvcHRpb25zLnJlcGxhY2UpIHx8IG9wdGlvbnMucmVwbGFjZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcicpO1xuICB9XG4gIGlmIChvcHRpb25zLmFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgcmVzdWx0LnB1c2goJy10Jyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudXNlU2RjYXJkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1zJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgICBsb2cuZGVidWcoYFNraXBwaW5nIHBlcm1pc3Npb25zIGdyYW50IG9wdGlvbiwgc2luY2UgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBjdXJyZW50IEFQSSBsZXZlbCAke2FwaUxldmVsfSBkb2VzIG5vdCBzdXBwb3J0IGFwcGxpY2F0aW9ucyBgICtcbiAgICAgICAgICAgICAgICBgcGVybWlzc2lvbnMgY3VzdG9taXphdGlvbmApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCgnLWcnKTtcbiAgICB9XG4gIH1cbiAgLy8gRm9yIG11bHRpcGxlLWluc3RhbGxcbiAgaWYgKG9wdGlvbnMucGFydGlhbEluc3RhbGwpIHtcbiAgICByZXN1bHQucHVzaCgnLXAnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFuaWZlc3RJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnIC0gVGhlIGFwcGxpY2F0aW9uIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBtYWluIHBhY2thZ2UgYWN0aXZpdHlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVyc2lvbkNvZGUgLSBUaGUgdmVyc2lvbiBjb2RlIG51bWJlciAobWlnaHQgYmUgYE5hTmApXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb25OYW1lIC0gVGhlIHZlcnNpb24gbmFtZSAobWlnaHQgYmUgYG51bGxgKVxuICovXG5cbi8qKlxuICogUGVyZm9ybSBwYXJzaW5nIG9mIHRoZSBtYW5pZmVzdCBvYmplY3QgaW4gb3JkZXJcbiAqIHRvIGV4dHJhY3Qgc29tZSB2aXRhbCB2YWx1ZXMgZnJvbSBpdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYW5pZmVzdCBUaGUgbWFuaWZlc3QgY29udGVudCBmb3JtYXR0ZWQgYXMgSlNPTlxuICogU2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FkYmtpdC1hcGtyZWFkZXIgZm9yIGRldGFpbGVkIGZvcm1hdCBkZXNjcmlwdGlvblxuICogQHJldHVybnMge01hbmlmZXN0SW5mb31cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYW5pZmVzdCAobWFuaWZlc3QpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHBrZzogbWFuaWZlc3QucGFja2FnZSxcbiAgICB2ZXJzaW9uQ29kZTogcGFyc2VJbnQobWFuaWZlc3QudmVyc2lvbkNvZGUsIDEwKSxcbiAgICB2ZXJzaW9uTmFtZTogbWFuaWZlc3QudmVyc2lvbk5hbWUgfHwgbnVsbCxcbiAgfTtcbiAgaWYgKCFtYW5pZmVzdC5hcHBsaWNhdGlvbikge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBMb29rIGZvciBlbmFibGVkIGFjdGl2aXR5IG9yIGFjdGl2aXR5LWFsaWFzIHdpdGhcbiAgLy8gYWN0aW9uID09IGFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIGFuZFxuICAvLyBjYXRlZ29yeSA9PSBhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUlxuICBmb3IgKGNvbnN0IGFjdGl2aXR5IG9mIFtcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0aWVzLFxuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXR5QWxpYXNlcyxcbiAgXSkge1xuICAgIGlmIChhY3Rpdml0eS5lbmFibGVkID09PSBmYWxzZSB8fCBfLmlzRW1wdHkoYWN0aXZpdHkuaW50ZW50RmlsdGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qge2FjdGlvbnMsIGNhdGVnb3JpZXN9IG9mIGFjdGl2aXR5LmludGVudEZpbHRlcnMpIHtcbiAgICAgIGlmIChfLmlzRW1wdHkoYWN0aW9ucykgfHwgXy5pc0VtcHR5KGNhdGVnb3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01haW5BY3Rpb24gPSBhY3Rpb25zLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTUFJTl9BQ1RJT04pO1xuICAgICAgY29uc3QgaXNMYXVuY2hlckNhdGVnb3J5ID0gY2F0ZWdvcmllcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IExBVU5DSEVSX0NBVEVHT1JZKTtcbiAgICAgIGlmIChpc01haW5BY3Rpb24gJiYgaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICAgIHJlc3VsdC5hY3Rpdml0eSA9IGFjdGl2aXR5Lm5hbWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdCB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYChkZWZhdWx0KWBcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0U3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplU3RyaW5nTWF0Y2ggPSBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1wiJC8sICcnKS5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuICB9O1xuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGlzSW5Db25maWcgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAvLyBUaGUgcGF0dGVybiBtYXRjaGVzIGFueSBxdW90ZWQgY29udGVudCBpbmNsdWRpbmcgZXNjYXBlZCBxdW90ZXNcbiAgY29uc3QgcXVvdGVkU3RyaW5nUGF0dGVybiA9IC9cIlteXCJcXFxcXSooPzpcXFxcLlteXCJcXFxcXSopKlwiLztcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd091dHB1dC5zcGxpdChvcy5FT0wpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsnY29uZmlnJywgJ3R5cGUnLCAnc3BlYycsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGlzSW5Db25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGBjb25maWcgJHtjb25maWdNYXJrZXJ9OmApO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSW5Db25maWcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6c3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpzdHJpbmdcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnBsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnBsdXJhbHNcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgaXNJblBsdXJhbEdyb3VwICYmIHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6IChzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQyIHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IG9uZVxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHQyU3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3QgYWxsTGluZXMgPSByYXdPdXRwdXQuc3BsaXQob3MuRU9MKTtcbiAgZnVuY3Rpb24gZXh0cmFjdENvbnRlbnQgKHN0YXJ0SWR4KSB7XG4gICAgbGV0IGlkeCA9IHN0YXJ0SWR4O1xuICAgIGNvbnN0IHN0YXJ0Q2hhclBvcyA9IGFsbExpbmVzW3N0YXJ0SWR4XS5pbmRleE9mKCdcIicpO1xuICAgIGlmIChzdGFydENoYXJQb3MgPCAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIGlkeF07XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoaWR4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJNYXRjaCA9IC9cIiQvLmV4ZWMoYWxsTGluZXNbaWR4XSk7XG4gICAgICBpZiAodGVybWluYXRpb25DaGFyTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyUG9zID0gdGVybWluYXRpb25DaGFyTWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChzdGFydElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEsIHRlcm1pbmF0aW9uQ2hhclBvcyksXG4gICAgICAgICAgICBpZHhcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYCR7cmVzdWx0fVxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdLnN1YnN0cmluZygwLCB0ZXJtaW5hdGlvbkNoYXJQb3MpKX1gLFxuICAgICAgICAgIGlkeCxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggPiBzdGFydElkeCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEpO1xuICAgICAgfVxuICAgICAgKytpZHg7XG4gICAgfVxuICAgIHJldHVybiBbcmVzdWx0LCBpZHhdO1xuICB9XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIGxldCBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICBsZXQgbGluZUluZGV4ID0gMDtcbiAgd2hpbGUgKGxpbmVJbmRleCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gYWxsTGluZXNbbGluZUluZGV4XS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsndHlwZScsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvc3RyaW5nXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygncGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9wbHVyYWxzXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCkge1xuICAgICAgaWYgKGlzSW5QbHVyYWxHcm91cCkge1xuICAgICAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApO1xuICAgICAgICAgICsrbGluZUluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ3VycmVudENvbmZpZykge1xuICAgICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKSkge1xuICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICArK2xpbmVJbmRleDtcbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBjb25maWcgbWFya2VyLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBwYXJzZS4uIG1ldGhvZHNcbiAqIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoIHJlc291cmNlIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGFhcHQoMikgdG9vbFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ3NHZXR0ZXIgVGhlIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBpcyBhIGxpc3RcbiAqIG9mIGFwayBjb25maWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzaXJlZE1hcmtlciBUaGUgZGVzaXJlZCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdE1hcmtlciBUaGUgZGVmYXVsdCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZmlnIG1hcmtlclxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JtYXRDb25maWdNYXJrZXIgKGNvbmZpZ3NHZXR0ZXIsIGRlc2lyZWRNYXJrZXIsIGRlZmF1bHRNYXJrZXIpIHtcbiAgbGV0IGNvbmZpZ01hcmtlciA9IGRlc2lyZWRNYXJrZXIgfHwgZGVmYXVsdE1hcmtlcjtcbiAgaWYgKGNvbmZpZ01hcmtlci5pbmNsdWRlcygnLScpICYmICFjb25maWdNYXJrZXIuaW5jbHVkZXMoJy1yJykpIHtcbiAgICBjb25maWdNYXJrZXIgPSBjb25maWdNYXJrZXIucmVwbGFjZSgnLScsICctcicpO1xuICB9XG4gIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBjb25maWdzR2V0dGVyKCk7XG4gIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlncyl9YCk7XG4gIC8vIEFzc3VtZSB0aGUgJ2VuJyBjb25maWd1cmF0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoY29uZmlnTWFya2VyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZW4nKVxuICAgICYmICFjb25maWdzLnNvbWUoKHgpID0+IHgudHJpbSgpID09PSBjb25maWdNYXJrZXIpKSB7XG4gICAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uIG5hbWUgJyR7Y29uZmlnTWFya2VyfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgUmVwbGFjaW5nIGl0IHdpdGggJyR7ZGVmYXVsdE1hcmtlcn0nYCk7XG4gICAgY29uZmlnTWFya2VyID0gZGVmYXVsdE1hcmtlcjtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGNvbmZpZ3VyYXRpb246ICcke2NvbmZpZ01hcmtlcn0nYCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ01hcmtlcjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG91dHB1dCBpbiBKU09OIGZvcm1hdCByZXRyaWV2ZWQgZnJvbVxuICogdGhlIGNvcnJlc3BvbmRpbmcgQXBwaXVtIFNldHRpbmdzIGJyb2FkY2FzdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQgVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB3aGljaCBpc1xuICogZ29pbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIEpTT04gb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG91dHB1dCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBhcyBhIHZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uRGF0YSAob3V0cHV0LCBlbnRpdHlOYW1lKSB7XG4gIGlmICghL1xcYnJlc3VsdD0tMVxcYi8udGVzdChvdXRwdXQpIHx8ICEvXFxiZGF0YT1cIi8udGVzdChvdXRwdXQpKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IC9cXGJkYXRhPShcIi4rKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBjb21tYW5kIG91dHB1dC4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IGpzb25TdHIgPSBfLnRyaW0obWF0Y2hbMV0pLnJlcGxhY2UoLyheXCIpfChcIiQpL2csICcnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1Zyhqc29uU3RyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIHJlc3VsdGluZyBkYXRhIHN0cmluZy4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGNvdW50cnkgYWJicmV2aWF0aW9uc1xuICogdG8gQVZEIGFyZ3VtZW50cyBhcnJheVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgTGFuZ3VhZ2UgbmFtZSwgZm9yIGV4YW1wbGUgJ2ZyJ1xuICogQHBhcmFtIHs/c3RyaW5nfSBjb3VudHJ5IENvdW50cnkgbmFtZSwgZm9yIGV4YW1wbGUgJ0NBJ1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBnZW5lcmF0ZWQgYXJndW1lbnRzLiBUaGVcbiAqIHJlc3VsdGluZyBhcnJheSBtaWdodCBiZSBlbXB0eSBpZiBib3RoIGFyZ3VtZW50cyBhcmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gdG9BdmRMb2NhbGVBcmdzIChsYW5ndWFnZSwgY291bnRyeSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxhbmd1YWdlPSR7bGFuZ3VhZ2UudG9Mb3dlckNhc2UoKX1gKTtcbiAgfVxuICBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmNvdW50cnk9JHtjb3VudHJ5LnRvVXBwZXJDYXNlKCl9YCk7XG4gIH1cbiAgbGV0IGxvY2FsZTtcbiAgaWYgKF8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmIF8uaXNTdHJpbmcoY291bnRyeSkgJiYgbGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCkgKyAnLScgKyBjb3VudHJ5LnRvVXBwZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvY2FsZSA9IGNvdW50cnk7XG4gIH1cbiAgaWYgKGxvY2FsZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sb2NhbGU9JHtsb2NhbGV9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBwcmVmZXJlbmNlcyByb290XG4gKlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBvciBgbnVsbGAgaWYgdGhlIGZvbGRlciBjYW5ub3QgYmUgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFByZWZzUm9vdCAoKSB7XG4gIGxldCBsb2NhdGlvbiA9IHByb2Nlc3MuZW52LkFORFJPSURfRU1VTEFUT1JfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBpZiAobG9jYXRpb24pIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0VNVUxBVE9SX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gIH1cblxuICBjb25zdCBob21lID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRTtcbiAgaWYgKGhvbWUpIHtcbiAgICBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShob21lLCAnLmFuZHJvaWQnKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIGxvZy5kZWJ1ZyhgQW5kcm9pZCBjb25maWcgcm9vdCAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggZXhpc3RzIG9uIHRoZSBmaWxlc3lzdGVtIGFuZCBpcyBhIGRpcmVjdG9yeVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbG9jYXRpb24gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlyRXhpc3RzIChsb2NhdGlvbikge1xuICByZXR1cm4gbG9jYXRpb25cbiAgICAmJiBhd2FpdCBmcy5leGlzdHMobG9jYXRpb24pXG4gICAgJiYgKGF3YWl0IGZzLnN0YXQobG9jYXRpb24pKS5pc0RpcmVjdG9yeSgpO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKiBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBob3cgc3lzdGVtIGBzcGF3bmBcbiAqIGNhbGwgaGFuZGxlcyB0aGVtLlxuICogU2VlIGh0dHBzOi8vZGlzY3Vzcy5hcHBpdW0uaW8vdC9ob3ctdG8tbW9kaWZ5LXdkLXByb3h5LWFuZC11aWF1dG9tYXRvcjItc291cmNlLWNvZGUtdG8tc3VwcG9ydC11bmljb2RlLzMzNDY2XG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmcgTm9uLWVzY2FwZWQgYXJndW1lbnQgc3RyaW5nXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBhcmd1bWVudFxuICovXG5mdW5jdGlvbiBlc2NhcGVTaGVsbEFyZyAoYXJnKSB7XG4gIGFyZyA9IGAke2FyZ31gO1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIC9bJnxeXFxzXS8udGVzdChhcmcpID8gYFwiJHthcmcucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImAgOiBhcmc7XG4gIH1cbiAgcmV0dXJuIGFyZy5yZXBsYWNlKC8mL2csICdcXFxcJicpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmFtZSBvZiBsYXVuY2hhYmxlIHBhY2thZ2UgYWN0aXZpdHlcbiAqIGZyb20gZHVtcHN5cyBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgdGhlIGFjdHVhbCBkdW1wc3lzIG91dHB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfSBFaXRoZXIgdGhlIGZ1bGx5IHF1YWxpZmllZFxuICogYWN0aXZpdHkgbmFtZSBhcyBhIHNpbmdsZSBsaXN0IGl0ZW0gb3IgYW4gZW1wdHkgbGlzdCBpZiBub3RoaW5nIGNvdWxkIGJlIHBhcnNlZC5cbiAqIEluIEFuZHJvaWQgNiBhbmQgb2xkZXIgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGRldGVybWluZVxuICogdGhlIGNhdGVnb3J5IG5hbWUgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSwgc28gdGhpcyBBUEkganVzdFxuICogcmV0dXJucyBhbGwgYWN0aXZpdHkgbmFtZXMgYmVsb25naW5nIHRvICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTidcbiAqIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIGFwcCBtYW5pZmVzdCBjb3VsZCBiZSBwYXJzZWQgbmV4dFxuICogaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IG5hbWVzIGZvciB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyAoZHVtcHN5cykge1xuICBjb25zdCBtYWluQWN0aXZpdHlOYW1lUmUgPSBuZXcgUmVnRXhwKGBeXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChNQUlOX0FDVElPTil9OiRgKTtcbiAgY29uc3QgY2F0ZWdvcnlOYW1lUmUgPSAvXlxccypDYXRlZ29yeTpcXHMrXCIoW2EtekEtWjAtOS5fLy1dKylcIiQvO1xuICBjb25zdCBibG9ja3MgPSBbXTtcbiAgbGV0IGJsb2NrU3RhcnRJbmRlbnQ7XG4gIGxldCBibG9jayA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgZHVtcHN5cy5zcGxpdCgnXFxuJykubWFwKF8udHJpbUVuZCkpIHtcbiAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5sZW5ndGggLSBfLnRyaW1TdGFydChsaW5lKS5sZW5ndGg7XG4gICAgaWYgKG1haW5BY3Rpdml0eU5hbWVSZS50ZXN0KGxpbmUpKSB7XG4gICAgICBibG9ja1N0YXJ0SW5kZW50ID0gY3VycmVudEluZGVudDtcbiAgICAgIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICBibG9ja3MucHVzaChibG9jayk7XG4gICAgICAgIGJsb2NrID0gW107XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKF8uaXNOaWwoYmxvY2tTdGFydEluZGVudCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZW50ID4gYmxvY2tTdGFydEluZGVudCkge1xuICAgICAgYmxvY2sucHVzaChsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICBibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGJsb2Nrcykge1xuICAgIGxldCBoYXNDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGxldCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaXRlbSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBjYXRlZ29yeU5hbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaGFzQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgaXNMYXVuY2hlckNhdGVnb3J5ID0gbWF0Y2hbMV0gPT09IExBVU5DSEVSX0NBVEVHT1JZO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIE9uIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMgdGhlIGNhdGVnb3J5IG5hbWVcbiAgICAvLyBtaWdodCBub3QgYmUgbGlzdGVkLCBzbyB3ZSBqdXN0IHRyeSB0byBmZXRjaFxuICAgIC8vIGFsbCBtYXRjaGVzIGluc3RlYWRcbiAgICBpZiAoaGFzQ2F0ZWdvcnkgJiYgIWlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3Rpdml0eU5hbWVTdHIgb2YgaXRlbS5tYXAoXy50cmltKS5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGNvbnN0IGZxQWN0aXZpdHlOYW1lID0gYWN0aXZpdHlOYW1lU3RyLnNwbGl0KC9cXHMrLylbMV07XG4gICAgICBpZiAoIW1hdGNoQ29tcG9uZW50TmFtZShmcUFjdGl2aXR5TmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmV0dXJuIFtmcUFjdGl2aXR5TmFtZV07XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmcUFjdGl2aXR5TmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGNvbXBvbmVudCBuYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzU3RyaW5nIFRoZSBzdHJpbmcgdG8gdmVyaWZ5XG4gKiBAcmV0dXJuIHs/QXJyYXk8TWF0Y2g+fSBUaGUgcmVzdWx0IG9mIFJlZ2V4cC5leGVjIG9wZXJhdGlvblxuICogb3IgX251bGxfIGlmIG5vIG1hdGNoZXMgYXJlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIG1hdGNoQ29tcG9uZW50TmFtZSAoY2xhc3NTdHJpbmcpIHtcbiAgLy8gc29tZS5wYWNrYWdlL3NvbWUucGFja2FnZS5BY3Rpdml0eVxuICByZXR1cm4gL15bYS16MC05Li9fXSskL2kuZXhlYyhjbGFzc1N0cmluZyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbiAgcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcywgbWF0Y2hDb21wb25lbnRO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
|