@wppconnect/server 2.10.8 → 2.10.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [2.10.9](https://github.com/wppconnect-team/wppconnect-server/compare/v2.10.8...v2.10.9) (2026-08-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **messages:** forward to normalized contact list ([#2550](https://github.com/wppconnect-team/wppconnect-server/issues/2550)) ([27433d3](https://github.com/wppconnect-team/wppconnect-server/commit/27433d3c82da6a6d7936759fd2ec6dd5a3c090bb))
|
|
7
|
+
|
|
1
8
|
## [2.10.8](https://github.com/wppconnect-team/wppconnect-server/compare/v2.10.7...v2.10.8) (2026-08-27)
|
|
2
9
|
|
|
3
10
|
## [2.10.7](https://github.com/wppconnect-team/wppconnect-server/compare/v2.10.6...v2.10.7) (2026-08-27)
|
|
@@ -1006,15 +1006,14 @@ async function forwardMessages(req, res) {
|
|
|
1006
1006
|
const { phone, messageId, isGroup = false } = req.body;
|
|
1007
1007
|
|
|
1008
1008
|
try {
|
|
1009
|
+
const contacts = (0, _functions.contactToArray)(phone, isGroup);
|
|
1009
1010
|
let response;
|
|
1010
1011
|
|
|
1011
|
-
|
|
1012
|
-
response = await req.client.forwardMessagesV2(
|
|
1013
|
-
} else {
|
|
1014
|
-
response = await req.client.forwardMessagesV2(`${phone[0]}`, messageId);
|
|
1012
|
+
for (const contact of contacts) {
|
|
1013
|
+
response = await req.client.forwardMessagesV2(contact, messageId);
|
|
1015
1014
|
}
|
|
1016
1015
|
|
|
1017
|
-
res.status(201).json({ status: 'success', response
|
|
1016
|
+
res.status(201).json({ status: 'success', response });
|
|
1018
1017
|
} catch (e) {
|
|
1019
1018
|
req.logger.error(e);
|
|
1020
1019
|
res.
|
|
@@ -2348,4 +2347,4 @@ async function getPlatformFromMessage(req, res) {
|
|
|
2348
2347
|
});
|
|
2349
2348
|
}
|
|
2350
2349
|
}
|
|
2351
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsIl9zZXNzaW9uVXRpbCIsInJldHVyblN1Y2VzcyIsInJlcyIsInNlc3Npb24iLCJwaG9uZSIsImRhdGEiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2UiLCJtZXNzYWdlIiwiY29udGFjdCIsInJldHVybkVycm9yIiwicmVxIiwiZXJyb3IiLCJsb2dnZXIiLCJsb2ciLCJzZXRQcm9maWxlTmFtZSIsIm5hbWUiLCJib2R5IiwicmVzdWx0IiwiY2xpZW50Iiwic2hvd0FsbENvbnRhY3RzIiwiY29udGFjdHMiLCJnZXRBbGxDb250YWN0cyIsImdldEFsbENoYXRzIiwibWFwcGVyIiwiZSIsImxpc3RDaGF0cyIsImlkIiwiY291bnQiLCJkaXJlY3Rpb24iLCJvbmx5R3JvdXBzIiwib25seVVzZXJzIiwib25seVdpdGhVbnJlYWRNZXNzYWdlIiwid2l0aExhYmVscyIsImdldEFsbENoYXRzV2l0aE1lc3NhZ2VzIiwiZ2V0QWxsTWVzc2FnZXNJbkNoYXQiLCJwYXJhbXMiLCJpc0dyb3VwIiwiaW5jbHVkZU1lIiwiaW5jbHVkZU5vdGlmaWNhdGlvbnMiLCJxdWVyeSIsImNvbnRhdG8iLCJjb250YWN0VG9BcnJheSIsImdldEFsbE5ld01lc3NhZ2VzIiwiZ2V0QWxsVW5yZWFkTWVzc2FnZXMiLCJnZXRDaGF0QnlJZCIsImlzTmV3c2xldHRlciIsImlzTGlkIiwiZ2V0TWVzc2FnZUJ5SWQiLCJtZXNzYWdlSWQiLCJjaGF0SWQiLCJ1c2VyIiwiZ2V0QmF0dGVyeUxldmVsIiwiZ2V0SG9zdERldmljZSIsInBob25lTnVtYmVyIiwiZ2V0V2lkIiwiZ2V0UGhvbmVOdW1iZXIiLCJnZXRCbG9ja0xpc3QiLCJibG9ja2VkIiwibWFwIiwic3BsaXQiLCJkZWxldGVDaGF0IiwicmVzdWx0cyIsImRlbGV0ZUFsbENoYXRzIiwiY2hhdHMiLCJjaGF0IiwiY2xlYXJDaGF0IiwiY2xlYXJBbGxDaGF0cyIsImFyY2hpdmVDaGF0IiwidmFsdWUiLCJhcmNoaXZlQWxsQ2hhdHMiLCJnZXRBbGxDaGF0c0FyY2hpdmVkcyIsImFyY2hpdmVkIiwiYXJjaGl2ZSIsInB1c2giLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVkaWFJbkRldmljZSIsIm9ubHlMb2NhbCIsInJlYWN0TWVzc2FnZSIsIm1zZ0lkIiwicmVhY3Rpb24iLCJzZW5kUmVhY3Rpb25Ub01lc3NhZ2UiLCJyZXBseSIsInRleHQiLCJtZXNzYWdlaWQiLCJmb3J3YXJkTWVzc2FnZXMiLCJmb3J3YXJkTWVzc2FnZXNWMiIsIm1hcmtVbnNlZW5NZXNzYWdlIiwiYmxvY2tDb250YWN0IiwidW5ibG9ja0NvbnRhY3QiLCJwaW5DaGF0Iiwic3RhdGUiLCJzZXRQcm9maWxlUGljIiwiZmlsZSIsInBhdGgiLCJwYXRoRmlsZSIsInVubGlua0FzeW5jIiwiZ2V0VW5yZWFkTWVzc2FnZXMiLCJnZXRDaGF0SXNPbmxpbmUiLCJnZXRMYXN0U2VlbiIsImdldExpc3RNdXRlcyIsInR5cGUiLCJsb2FkQW5kR2V0QWxsTWVzc2FnZXNJbkNoYXQiLCJnZXRNZXNzYWdlcyIsInBhcnNlSW50IiwidG9TdHJpbmciLCJzZW5kQ29udGFjdFZjYXJkIiwiY29udGFjdHNJZCIsInNlbmRNdXRlIiwidGltZSIsInNlbmRTZWVuIiwic2V0Q2hhdFN0YXRlIiwiY2hhdHN0YXRlIiwic2V0VGVtcG9yYXJ5TWVzc2FnZXMiLCJzZXRUeXBpbmciLCJzdGFydFR5cGluZyIsInN0b3BUeXBpbmciLCJzZXRSZWNvcmRpbmciLCJkdXJhdGlvbiIsInN0YXJ0UmVjb3JkaW5nIiwic3RvcFJlY29yZGluZyIsImNoZWNrTnVtYmVyU3RhdHVzIiwiZ2V0Q29udGFjdCIsImdldE51bWJlclByb2ZpbGUiLCJnZXRQcm9maWxlUGljRnJvbVNlcnZlciIsImdldFN0YXR1cyIsInNldFByb2ZpbGVTdGF0dXMiLCJyZWplY3RDYWxsIiwiY2FsbElkIiwic3Rhck1lc3NhZ2UiLCJzdGFyIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Vm90ZXMiLCJjaGF0V29vdCIsImNsaWVudHNBcnJheSIsImlzQ29ubmVjdGVkIiwiZXZlbnQiLCJpc19wcml2YXRlIiwicHJpdmF0ZSIsIm1lc3NhZ2VfdHlwZSIsImNvbnZlcnNhdGlvbiIsIm1ldGEiLCJzZW5kZXIiLCJwaG9uZV9udW1iZXIiLCJyZXBsYWNlIiwibWVzc2FnZXMiLCJhdHRhY2htZW50cyIsImJhc2VfdXJsIiwiY29uZmlnIiwiYmFzZVVSTCIsImRhdGFfdXJsIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImZpbGVfdHlwZSIsInNlbmRQdHQiLCJjb250ZW50Iiwic2VuZEZpbGUiLCJzZW5kVGV4dCIsImNvbnNvbGUiLCJnZXRQbGF0Zm9ybUZyb21NZXNzYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvZGV2aWNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDaGF0IH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IGNvbnRhY3RUb0FycmF5LCB1bmxpbmtBc3luYyB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcbmltcG9ydCB7IGNsaWVudHNBcnJheSB9IGZyb20gJy4uL3V0aWwvc2Vzc2lvblV0aWwnO1xuXG5mdW5jdGlvbiByZXR1cm5TdWNlc3MocmVzOiBhbnksIHNlc3Npb246IGFueSwgcGhvbmU6IGFueSwgZGF0YTogYW55KSB7XG4gIHJlcy5zdGF0dXMoMjAxKS5qc29uKHtcbiAgICBzdGF0dXM6ICdTdWNjZXNzJyxcbiAgICByZXNwb25zZToge1xuICAgICAgbWVzc2FnZTogJ0luZm9ybWF0aW9uIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgIGNvbnRhY3Q6IHBob25lLFxuICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJldHVybkVycm9yKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgc2Vzc2lvbjogYW55LCBlcnJvcjogYW55KSB7XG4gIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgc3RhdHVzOiAnRXJyb3InLFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICBtZXNzYWdlOiAnRXJyb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbicsXG4gICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgbG9nOiBlcnJvcixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFByb2ZpbGVOYW1lKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIlByb2ZpbGVcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJNeSBuZXcgbmFtZVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IG5hbWUgfSA9IHJlcS5ib2R5O1xuXG4gIGlmICghbmFtZSlcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNDAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdQYXJhbWV0ZXIgbmFtZSBpcyByZXF1aXJlZCEnIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5zZXRQcm9maWxlTmFtZShuYW1lKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgcHJvZmlsZSBuYW1lLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dBbGxDb250YWN0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDb250YWN0c1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWN0cyA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QWxsQ29udGFjdHMoKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogY29udGFjdHMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nIGNvbnRhY3RzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsQ2hhdHMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgKiAjc3dhZ2dlci5zdW1tYXJ5ID0gJ0RlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgJ2xpc3QtY2hhdHMnXG4gICAqICNzd2FnZ2VyLmRlcHJlY2F0ZWQgPSB0cnVlXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UsIG1hcHBlcjogJ2NoYXQnIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIGNoYXRzJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdENoYXRzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICogI3N3YWdnZXIuc3VtbWFyeSA9ICdSZXRyaWV2ZSBhIGxpc3Qgb2YgY2hhdHMnXG4gICAqICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1RoaXMgYm9keSBpcyBub3QgcmVxdWlyZWQuIE5vdCBzZW50IGJvZHkgdG8gZ2V0IGFsbCBjaGF0cyBvciBmaWx0ZXIuJ1xuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBjb3VudDogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgIGRpcmVjdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIG9ubHlHcm91cHM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgb25seVVzZXJzOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIG9ubHlXaXRoVW5yZWFkTWVzc2FnZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICB3aXRoTGFiZWxzOiB7IHR5cGU6IFwiYXJyYXlcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiQWxsIG9wdGlvbnMgLSBFZGl0IHRoaXNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlkOiBcIjxjaGF0SWQ+XCIsXG4gICAgICAgICAgICAgICAgY291bnQ6IDIwLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhZnRlclwiLFxuICAgICAgICAgICAgICAgIG9ubHlHcm91cHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlVc2VyczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aXRoTGFiZWxzOiBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJBbGwgY2hhdHNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJDaGF0cyBncm91cFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgb25seUdyb3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiT25seSB3aXRoIHVucmVhZCBtZXNzYWdlc1wiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiUGFnaW5hdGVkIHJlc3VsdHNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlkOiBcIjxjaGF0SWQ+XCIsXG4gICAgICAgICAgICAgICAgY291bnQ6IDIwLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhZnRlclwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkLFxuICAgICAgY291bnQsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBvbmx5R3JvdXBzLFxuICAgICAgb25seVVzZXJzLFxuICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlLFxuICAgICAgd2l0aExhYmVscyxcbiAgICB9ID0gcmVxLmJvZHk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQubGlzdENoYXRzKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgb25seUdyb3Vwczogb25seUdyb3VwcyxcbiAgICAgIG9ubHlVc2Vyczogb25seVVzZXJzLFxuICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBvbmx5V2l0aFVucmVhZE1lc3NhZ2UsXG4gICAgICB3aXRoTGFiZWxzOiB3aXRoTGFiZWxzLFxuICAgIH0pO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24ocmVzcG9uc2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIGNoYXRzJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsQ2hhdHNXaXRoTWVzc2FnZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgKiAjc3dhZ2dlci5zdW1tYXJ5ID0gJ0RlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbGlzdC1jaGF0cydcbiAgICogI3N3YWdnZXIuZGVwcmVjYXRlZCA9IHRydWVcbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50Lmxpc3RDaGF0cygpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBhbGwgY2hhdHMgd2hpdCBtZXNzYWdlcycsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBEZXByZWNpYWRvIGVtIGZhdm9yIGRlIGdldE1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxNZXNzYWdlc0luQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImlzR3JvdXBcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdmYWxzZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU1lXCJdID0ge1xuICAgICAgc2NoZW1hOiAndHJ1ZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU5vdGlmaWNhdGlvbnNcIl0gPSB7XG4gICAgICBzY2hlbWE6ICd0cnVlJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3Qge1xuICAgICAgaXNHcm91cCA9IGZhbHNlLFxuICAgICAgaW5jbHVkZU1lID0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVOb3RpZmljYXRpb25zID0gdHJ1ZSxcbiAgICB9ID0gcmVxLnF1ZXJ5O1xuXG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCBhcyBib29sZWFuKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbE1lc3NhZ2VzSW5DaGF0KFxuICAgICAgICBjb250YXRvLFxuICAgICAgICBpbmNsdWRlTWUgYXMgYm9vbGVhbixcbiAgICAgICAgaW5jbHVkZU5vdGlmaWNhdGlvbnMgYXMgYm9vbGVhblxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIG1lc3NhZ2VzIGluIGNoYXQnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbE5ld01lc3NhZ2VzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbE5ld01lc3NhZ2VzKCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGFsbCBtZXNzYWdlcyBpbiBjaGF0JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxVbnJlYWRNZXNzYWdlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxVbnJlYWRNZXNzYWdlcygpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBhbGwgbWVzc2FnZXMgaW4gY2hhdCcsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hhdEJ5SWQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5QGMudXMnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImlzR3JvdXBcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdmYWxzZSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgeyBpc0dyb3VwID0gZmFsc2UsIGlzTmV3c2xldHRlciA9IGZhbHNlLCBpc0xpZCA9IGZhbHNlIH0gPSByZXEucXVlcnk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgcmVzdWx0ID0ge30gYXMgQ2hhdDtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkoXG4gICAgICBwaG9uZSBhcyBzdHJpbmcsXG4gICAgICBpc0dyb3VwIGFzIGJvb2xlYW4sXG4gICAgICBpc05ld3NsZXR0ZXIgYXMgYm9vbGVhbixcbiAgICAgIGlzTGlkIGFzIGJvb2xlYW5cbiAgICApKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmdldENoYXRCeUlkKGNvbnRhdG8pO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBjaGFuZ2luZyBjaGF0IGJ5IElkJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNZXNzYWdlQnlJZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJtZXNzYWdlSWRcIl0gPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHNjaGVtYTogJzxtZXNzYWdlX2lkPidcbiAgICAgfVxuICAgKi9cbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuICBjb25zdCB7IG1lc3NhZ2VJZCB9ID0gcmVxLnBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0TWVzc2FnZUJ5SWQobWVzc2FnZUlkKTtcblxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHNlc3Npb24sIChyZXN1bHQgYXMgYW55KS5jaGF0SWQudXNlciwgcmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgc2Vzc2lvbiwgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXR0ZXJ5TGV2ZWwocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QmF0dGVyeUxldmVsKCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdTdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3IgcmV0cmlldmluZyBiYXR0ZXJ5IHN0YXR1cycsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SG9zdERldmljZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRIb3N0RGV2aWNlKCk7XG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBhd2FpdCByZXEuY2xpZW50LmdldFdpZCgpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgcmVzcG9uc2U6IHsgLi4ucmVzcG9uc2UsIHBob25lTnVtYmVyIH0sXG4gICAgICBtYXBwZXI6ICdkZXZpY2UnLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJybyBhbyByZWN1cGVyYXIgZGFkb3MgZG8gdGVsZWZvbmUnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBob25lTnVtYmVyKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBhd2FpdCByZXEuY2xpZW50LmdldFdpZCgpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcGhvbmVOdW1iZXIsIG1hcHBlcjogJ2RldmljZScgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIHBob25lIG51bWJlcicsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tMaXN0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRCbG9ja0xpc3QoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGJsb2NrZWQgPSByZXNwb25zZS5tYXAoKGNvbnRhdG86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHsgcGhvbmU6IGNvbnRhdG8gPyBjb250YXRvLnNwbGl0KCdAJylbMF0gOiAnJyB9O1xuICAgIH0pO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IGJsb2NrZWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIGJsb2NrZWQgY29udGFjdCBsaXN0JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDaGF0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzW2NvbnRhdG9dID0gYXdhaXQgcmVxLmNsaWVudC5kZWxldGVDaGF0KGNvbnRhdG8pO1xuICAgIH1cbiAgICByZXR1cm5TdWNlc3MocmVzLCBzZXNzaW9uLCBwaG9uZSwgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIHNlc3Npb24sIGVycm9yKTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFsbENoYXRzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgY2hhdHMgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbENoYXRzKCk7XG4gICAgZm9yIChjb25zdCBjaGF0IG9mIGNoYXRzKSB7XG4gICAgICBhd2FpdCByZXEuY2xpZW50LmRlbGV0ZUNoYXQoKGNoYXQgYXMgYW55KS5jaGF0SWQpO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgYWxsIGNoYXRzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJDaGF0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgXG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLmJvZHk7XG4gIGNvbnN0IHNlc3Npb24gPSByZXEuc2Vzc2lvbjtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0c1tjb250YXRvXSA9IGF3YWl0IHJlcS5jbGllbnQuY2xlYXJDaGF0KGNvbnRhdG8pO1xuICAgIH1cbiAgICByZXR1cm5TdWNlc3MocmVzLCBzZXNzaW9uLCBwaG9uZSwgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIHNlc3Npb24sIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJBbGxDaGF0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIGZvciAoY29uc3QgY2hhdCBvZiBjaGF0cykge1xuICAgICAgYXdhaXQgcmVxLmNsaWVudC5jbGVhckNoYXQoYCR7KGNoYXQgYXMgYW55KS5jaGF0SWR9YCk7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIGNsZWFyIGFsbCBjaGF0cycsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmNoaXZlQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHZhbHVlID0gdHJ1ZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuYXJjaGl2ZUNoYXQoYCR7cGhvbmV9YCwgdmFsdWUpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gYXJjaGl2ZSBjaGF0JywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyY2hpdmVBbGxDaGF0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIGZvciAoY29uc3QgY2hhdCBvZiBjaGF0cykge1xuICAgICAgYXdhaXQgcmVxLmNsaWVudC5hcmNoaXZlQ2hhdChgJHsoY2hhdCBhcyBhbnkpLmNoYXRJZH1gLCB0cnVlKTtcbiAgICB9XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGFyY2hpdmUgYWxsIGNoYXRzJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxDaGF0c0FyY2hpdmVkcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAqICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1JldHJpZXZlcyBhbGwgYXJjaGl2ZWQgY2hhdHMuJ1xuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCBjaGF0cyA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QWxsQ2hhdHMoKTtcbiAgICBjb25zdCBhcmNoaXZlZCA9IFtdIGFzIGFueTtcbiAgICBmb3IgKGNvbnN0IGNoYXQgb2YgY2hhdHMpIHtcbiAgICAgIGlmIChjaGF0LmFyY2hpdmUgPT09IHRydWUpIHtcbiAgICAgICAgYXJjaGl2ZWQucHVzaChjaGF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oYXJjaGl2ZWQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gYXJjaGl2ZSBhbGwgY2hhdHMnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIG9ubHlMb2NhbDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBkZWxldGVNZWRpYUluRGV2aWNlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWxldGUgbWVzc2FnZSB0byBhbGxcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IFwiPG1lc3NhZ2VJZD5cIixcbiAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUluRGV2aWNlOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJEZWxldGUgbWVzc2FnZSBvbmx5IG1lXCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2VJZCwgZGVsZXRlTWVkaWFJbkRldmljZSwgb25seUxvY2FsIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZGVsZXRlTWVzc2FnZShcbiAgICAgIGAke3Bob25lfWAsXG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBvbmx5TG9jYWwsXG4gICAgICBkZWxldGVNZWRpYUluRGV2aWNlXG4gICAgKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdNZXNzYWdlIGRlbGV0ZWQnIH0gfSk7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoNDAxKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdFcnJvciB1bmtub3duIG9uIGRlbGV0ZSBtZXNzYWdlJyB9LFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgbWVzc2FnZScsIGVycm9yOiBlIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhY3RNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBtc2dJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHJlYWN0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIG1zZ0lkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IFwi8J+YnFwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IG1zZ0lkLCByZWFjdGlvbiB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRSZWFjdGlvblRvTWVzc2FnZShtc2dJZCwgcmVhY3Rpb24pO1xuXG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdSZWFjdGlvbiBzZW5kZWQnIH0gfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIHJlYWN0aW9uIHRvIG1lc3NhZ2UnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGx5KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIuZGVwcmVjYXRlZD10cnVlXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZWlkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgdGV4dDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZWlkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiVGV4dCB0byByZXBseVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB0ZXh0LCBtZXNzYWdlaWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnJlcGx5KGAke3Bob25lfUBjLnVzYCwgdGV4dCwgbWVzc2FnZWlkKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIHJlcGx5aW5nIG1lc3NhZ2UnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9yd2FyZE1lc3NhZ2VzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogXCI8bWVzc2FnZUlkPlwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlSWQsIGlzR3JvdXAgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICBpZiAoIWlzR3JvdXApIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5mb3J3YXJkTWVzc2FnZXNWMihgJHtwaG9uZVswXX1gLCBtZXNzYWdlSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZm9yd2FyZE1lc3NhZ2VzVjIoYCR7cGhvbmVbMF19YCwgbWVzc2FnZUlkKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIGZvcndhcmRpbmcgbWVzc2FnZScsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXJrVW5zZWVuTWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZXEuY2xpZW50Lm1hcmtVbnNlZW5NZXNzYWdlKGAke3Bob25lfWApO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogeyBtZXNzYWdlOiAndW5zZWVuIGNoZWNrZWQnIH0gfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIG1hcmsgdW5zZWVuJywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2NrQ29udGFjdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcmVxLmNsaWVudC5ibG9ja0NvbnRhY3QoYCR7cGhvbmV9YCk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdDb250YWN0IGJsb2NrZWQnIH0gfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIGJsb2NrIGNvbnRhY3QnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5ibG9ja0NvbnRhY3QocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJlcS5jbGllbnQudW5ibG9ja0NvbnRhY3QoYCR7cGhvbmV9YCk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdDb250YWN0IFVuQmxvY2tlZCcgfSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gdW5sb2NrIGNvbnRhY3QnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGluQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJvYmpcIl0gPSB7XG4gICAgICBpbjogJ2JvZHknLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgICRwaG9uZTogJzU1MjE5OTk5OTk5OTknLFxuICAgICAgICAkaXNHcm91cDogZmFsc2UsXG4gICAgICAgICRzdGF0ZTogdHJ1ZSxcbiAgICAgIH1cbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBzdGF0ZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIGF3YWl0IHJlcS5jbGllbnQucGluQ2hhdChjb250YXRvLCBzdGF0ZSA9PT0gJ3RydWUnLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdDaGF0IGZpeGVkJyB9IH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IGUudGV4dCB8fCAnRXJyb3Igb24gcGluIGNoYXQnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFByb2ZpbGVQaWMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiUHJvZmlsZVwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5jb25zdW1lcyA9IFsnbXVsdGlwYXJ0L2Zvcm0tZGF0YSddICBcbiAgICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbJ2ZpbGUnXSA9IHtcbiAgICAgICAgICBpbjogJ2Zvcm1EYXRhJyxcbiAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgcmVxdWlyZWQ6ICd0cnVlJyxcbiAgICAgIH1cbiAgICovXG4gIGlmICghcmVxLmZpbGUpXG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDQwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnRXJyb3InLCBtZXNzYWdlOiAnRmlsZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQhJyB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHsgcGF0aDogcGF0aEZpbGUgfSA9IHJlcS5maWxlIGFzIGFueTtcblxuICAgIGF3YWl0IHJlcS5jbGllbnQuc2V0UHJvZmlsZVBpYyhwYXRoRmlsZSk7XG4gICAgYXdhaXQgdW5saW5rQXN5bmMocGF0aEZpbGUpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICByZXNwb25zZTogeyBtZXNzYWdlOiAnUHJvZmlsZSBwaG90byBzdWNjZXNzZnVsbHkgY2hhbmdlZCcgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIGNoYW5naW5nIHByb2ZpbGUgcGhvdG8nLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVucmVhZE1lc3NhZ2VzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIuZGVwcmVjYXRlZD10cnVlXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0VW5yZWFkTWVzc2FnZXMoZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgcmVzcG9uc2U6ICdFcnJvciBvbiBvcGVuIGxpc3QnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hhdElzT25saW5lKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldENoYXRJc09ubGluZShgJHtwaG9uZX1AYy51c2ApO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgcmVzcG9uc2U6ICdFcnJvciBvbiBnZXQgY2hhdCBpcyBvbmxpbmUnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExhc3RTZWVuKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldExhc3RTZWVuKGAke3Bob25lfUBjLnVzYCk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgcmVzcG9uc2U6ICdFcnJvciBvbiBnZXQgY2hhdCBsYXN0IHNlZW4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMaXN0TXV0ZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1widHlwZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ2FsbCcsXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgdHlwZSA9ICdhbGwnIH0gPSByZXEucGFyYW1zO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRMaXN0TXV0ZXModHlwZSk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgcmVzcG9uc2U6ICdFcnJvciBvbiBnZXQgbGlzdCBtdXRlcycsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRBbmRHZXRBbGxNZXNzYWdlc0luQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLmRlcHJlY2F0ZWQ9dHJ1ZVxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5J1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJpbmNsdWRlTWVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICd0cnVlJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJpbmNsdWRlTm90aWZpY2F0aW9uc1wiXSA9IHtcbiAgICAgIHNjaGVtYTogJ2ZhbHNlJ1xuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBpbmNsdWRlTWUgPSB0cnVlLCBpbmNsdWRlTm90aWZpY2F0aW9ucyA9IGZhbHNlIH0gPSByZXEucGFyYW1zO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5sb2FkQW5kR2V0QWxsTWVzc2FnZXNJbkNoYXQoXG4gICAgICBgJHtwaG9uZX1AYy51c2AsXG4gICAgICBpbmNsdWRlTWUgYXMgYm9vbGVhbixcbiAgICAgIGluY2x1ZGVOb3RpZmljYXRpb25zIGFzIGJvb2xlYW5cbiAgICApO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgcmVzcG9uc2U6ICdFcnJvciBvbiBvcGVuIGxpc3QnLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNZXNzYWdlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5QGMudXMnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImNvdW50XCJdID0ge1xuICAgICAgc2NoZW1hOiAnMjAnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImRpcmVjdGlvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ2JlZm9yZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaWRcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc8bWVzc2FnZV9pZF90b191c2VfZGlyZWN0aW9uPidcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgeyBjb3VudCA9IDIwLCBkaXJlY3Rpb24gPSAnYmVmb3JlJywgaWQgPSBudWxsIH0gPSByZXEucXVlcnk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldE1lc3NhZ2VzKGAke3Bob25lfWAsIHtcbiAgICAgIGNvdW50OiBwYXJzZUludChjb3VudCBhcyBzdHJpbmcpLFxuICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24udG9TdHJpbmcoKSBhcyBhbnksXG4gICAgICBpZDogaWQgYXMgc3RyaW5nLFxuICAgIH0pO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDQwMSlcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCByZXNwb25zZTogJ0Vycm9yIG9uIG9wZW4gbGlzdCcsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQ29udGFjdFZjYXJkKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgY29udGFjdHNJZDogeyB0eXBlOiBcImFycmF5XCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmFtZSBvZiBjb250YWN0JyxcbiAgICAgICAgICAgICAgICBjb250YWN0c0lkOiBbJzU1MjE5OTk5OTk5OTknXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgY29udGFjdHNJZCwgbmFtZSA9IG51bGwsIGlzR3JvdXAgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZW5kQ29udGFjdFZjYXJkKFxuICAgICAgICBgJHtjb250YXRvfWAsXG4gICAgICAgIGNvbnRhY3RzSWQsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIGNvbnRhY3QgdmNhcmQnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTXV0ZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHRpbWU6IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICB0eXBlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aW1lOiAxLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdob3VycycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHRpbWUsIHR5cGUgPSAnaG91cnMnLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZW5kTXV0ZShgJHtjb250YXRvfWAsIHRpbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIG11dGUnLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTZWVuKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5ib2R5O1xuICBjb25zdCBzZXNzaW9uID0gcmVxLnNlc3Npb247XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgcGhvbmUpIHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCByZXEuY2xpZW50LnNlbmRTZWVuKGNvbnRhdG8pKTtcbiAgICB9XG4gICAgcmV0dXJuU3VjZXNzKHJlcywgc2Vzc2lvbiwgcGhvbmUsIHJlc3VsdHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybkVycm9yKHJlcSwgcmVzLCBzZXNzaW9uLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldENoYXRTdGF0ZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLmRlcHJlY2F0ZWQ9dHJ1ZVxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgY2hhdHN0YXRlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjaGF0c3RhdGU6IFwiMVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBjaGF0c3RhdGUsIGlzR3JvdXAgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnNldENoYXRTdGF0ZShgJHtjb250YXRvfWAsIGNoYXRzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIGNoYXQgc3RhdGUnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRUZW1wb3JhcnlNZXNzYWdlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgdmFsdWUgPSB0cnVlLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZXRUZW1wb3JhcnlNZXNzYWdlcyhgJHtjb250YXRvfWAsIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCB0ZW1wb3JhcnkgbWVzc2FnZXMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRUeXBpbmcocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgdmFsdWUgPSB0cnVlLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGlzR3JvdXApKSB7XG4gICAgICBpZiAodmFsdWUpIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zdGFydFR5cGluZyhjb250YXRvKTtcbiAgICAgIGVsc2UgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnN0b3BUeXBpbmcoY29udGF0byk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCB0eXBpbmcnLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFJlY29yZGluZyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgZHVyYXRpb246IHsgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICB2YWx1ZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiA1LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB2YWx1ZSA9IHRydWUsIGR1cmF0aW9uLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGlzR3JvdXApKSB7XG4gICAgICBpZiAodmFsdWUpIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zdGFydFJlY29yZGluZyhjb250YXRvLCBkdXJhdGlvbik7XG4gICAgICBlbHNlIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zdG9wUmVjb3JkaW5nKGNvbnRhdG8pO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gc2V0IHJlY29yZGluZycsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrTnVtYmVyU3RhdHVzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBmYWxzZSkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5jaGVja051bWJlclN0YXR1cyhgJHtjb250YXRvfWApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gY2hlY2sgbnVtYmVyIHN0YXR1cycsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRhY3QocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5J1xuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lID0gdHJ1ZSB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lIGFzIHN0cmluZywgZmFsc2UpKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0Q29udGFjdChjb250YXRvKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGNvbnRhY3QnLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbENvbnRhY3RzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNvbnRhY3RcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbENvbnRhY3RzKCk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBhbGwgY29uc3RhY3RzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TnVtYmVyUHJvZmlsZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLmRlcHJlY2F0ZWQ9dHJ1ZVxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5J1xuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lID0gdHJ1ZSB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lIGFzIHN0cmluZywgZmFsc2UpKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0TnVtYmVyUHJvZmlsZShjb250YXRvKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBudW1iZXIgcHJvZmlsZScsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2ZpbGVQaWNGcm9tU2VydmVyKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNvbnRhY3RcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSA9IHRydWUgfSA9IHJlcS5wYXJhbXM7XG4gIGNvbnN0IHsgaXNHcm91cCA9IGZhbHNlIH0gPSByZXEucXVlcnk7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSBhcyBzdHJpbmcsIGlzR3JvdXAgYXMgYm9vbGVhbikpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRQcm9maWxlUGljRnJvbVNlcnZlcihjb250YXRvKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uICBnZXQgcHJvZmlsZSBwaWMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTdGF0dXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ29udGFjdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5J1xuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lID0gdHJ1ZSB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lIGFzIHN0cmluZywgZmFsc2UpKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0U3RhdHVzKGNvbnRhdG8pO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gIGdldCBzdGF0dXMnLCBlcnJvcjogZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFByb2ZpbGVTdGF0dXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiUHJvZmlsZVwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkc3RhdHVzOiAnTXkgbmV3IHN0YXR1cycsXG4gICAgICB9XG4gICAgIH1cbiAgICAgXG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHN0YXR1czogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IFwiTXkgbmV3IHN0YXR1c1wiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHN0YXR1cyB9ID0gcmVxLmJvZHk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnNldFByb2ZpbGVTdGF0dXMoc3RhdHVzKTtcblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gc2V0IHByb2ZpbGUgc3RhdHVzJyB9KTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlamVjdENhbGwocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICBcbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgY2FsbElkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGNhbGxJZDogXCI8Y2FsbGlkPlwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IGNhbGxJZCB9ID0gcmVxLmJvZHk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnJlamVjdENhbGwoY2FsbElkKTtcblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gcmVqZWN0Q2FsbCcsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFyTWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBzdGFyOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIHN0YXI6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgbWVzc2FnZUlkLCBzdGFyID0gdHJ1ZSB9ID0gcmVxLmJvZHk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnN0YXJNZXNzYWdlKG1lc3NhZ2VJZCwgc3Rhcik7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uICBzdGFydCBtZXNzYWdlJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVhY3Rpb25zKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJtZXNzYWdlSWRcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc8bWVzc2FnZUlkPidcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgbWVzc2FnZUlkID0gcmVxLnBhcmFtcy5pZDtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0UmVhY3Rpb25zKG1lc3NhZ2VJZCk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCByZWFjdGlvbnMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRWb3RlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wibWVzc2FnZUlkXCJdID0ge1xuICAgICAgc2NoZW1hOiAnPG1lc3NhZ2VJZD4nXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IG1lc3NhZ2VJZCA9IHJlcS5wYXJhbXMuaWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldFZvdGVzKG1lc3NhZ2VJZCk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IHZvdGVzJywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hhdFdvb3QocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+IHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1lvdSBjYW4gcG9pbnQgeW91ciBDaGF0d29vdCB0byB0aGlzIHJvdXRlIHNvIHRoYXQgaXQgY2FuIHBlcmZvcm0gZnVuY3Rpb25zLidcbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgZXZlbnQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBwcml2YXRlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJjb252ZXJzYXRpb25fc3RhdHVzX2NoYW5nZWRcIixcbiAgICAgICAgICAgICAgICBwcml2YXRlOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgc2Vzc2lvbiB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgY2xpZW50OiBhbnkgPSBjbGllbnRzQXJyYXlbc2Vzc2lvbl07XG4gIGlmIChjbGllbnQgPT0gbnVsbCB8fCBjbGllbnQuc3RhdHVzICE9PSAnQ09OTkVDVEVEJykgcmV0dXJuO1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgY29uc3QgZXZlbnQgPSByZXEuYm9keS5ldmVudDtcbiAgICAgIGNvbnN0IGlzX3ByaXZhdGUgPSByZXEuYm9keS5wcml2YXRlIHx8IHJlcS5ib2R5LmlzX3ByaXZhdGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnQgPT0gJ2NvbnZlcnNhdGlvbl9zdGF0dXNfY2hhbmdlZCcgfHxcbiAgICAgICAgZXZlbnQgPT0gJ2NvbnZlcnNhdGlvbl9yZXNvbHZlZCcgfHxcbiAgICAgICAgaXNfcHJpdmF0ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAuc3RhdHVzKDIwMClcbiAgICAgICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCBtZXNzYWdlOiAnU3VjY2VzcyBvbiByZWNlaXZlIGNoYXR3b290JyB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBtZXNzYWdlX3R5cGUsXG4gICAgICAgIHBob25lID0gcmVxLmJvZHkuY29udmVyc2F0aW9uLm1ldGEuc2VuZGVyLnBob25lX251bWJlci5yZXBsYWNlKCcrJywgJycpLFxuICAgICAgICBtZXNzYWdlID0gcmVxLmJvZHkuY29udmVyc2F0aW9uLm1lc3NhZ2VzWzBdLFxuICAgICAgfSA9IHJlcS5ib2R5O1xuXG4gICAgICBpZiAoZXZlbnQgIT0gJ21lc3NhZ2VfY3JlYXRlZCcgJiYgbWVzc2FnZV90eXBlICE9ICdvdXRnb2luZycpXG4gICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAuc3RhdHVzKDIwMClcbiAgICAgICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCBtZXNzYWdlOiAnU3VjY2VzcyBvbiByZWNlaXZlIGNoYXR3b290JyB9KTtcbiAgICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgZmFsc2UpKSB7XG4gICAgICAgIGlmIChtZXNzYWdlX3R5cGUgPT0gJ291dGdvaW5nJykge1xuICAgICAgICAgIGlmIChtZXNzYWdlLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlX3VybCA9IGAke1xuICAgICAgICAgICAgICBjbGllbnQuY29uZmlnLmNoYXRXb290LmJhc2VVUkxcbiAgICAgICAgICAgIH0vJHttZXNzYWdlLmF0dGFjaG1lbnRzWzBdLmRhdGFfdXJsLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgbWVzc2FnZS5hdHRhY2htZW50c1swXS5kYXRhX3VybC5pbmRleE9mKCcvcmFpbHMvJykgKyAxXG4gICAgICAgICAgICApfWA7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGF0dGFjaG1lbnRzIGlzIFB1c2gtdG8tdGFsayBhbmQgc2VuZCB0aGlzXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRhY2htZW50c1swXS5maWxlX3R5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LnNlbmRQdHQoXG4gICAgICAgICAgICAgICAgYCR7Y29udGF0b31gLFxuICAgICAgICAgICAgICAgIGJhc2VfdXJsLFxuICAgICAgICAgICAgICAgICdWb2ljZSBBdWRpbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZS5jb250ZW50XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCBjbGllbnQuc2VuZEZpbGUoXG4gICAgICAgICAgICAgICAgYCR7Y29udGF0b31gLFxuICAgICAgICAgICAgICAgIGJhc2VfdXJsLFxuICAgICAgICAgICAgICAgICdmaWxlJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlLmNvbnRlbnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50LnNlbmRUZXh0KGNvbnRhdG8sIG1lc3NhZ2UuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIG1lc3NhZ2U6ICdTdWNjZXNzIG9uICByZWNlaXZlIGNoYXR3b290JyB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmxvZyhlKTtcbiAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gIHJlY2VpdmUgY2hhdHdvb3QnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQbGF0Zm9ybUZyb21NZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm1lc3NhZ2VJZFwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzxtZXNzYWdlSWQ+J1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0UGxhdGZvcm1Gcm9tTWVzc2FnZShcbiAgICAgIHJlcS5wYXJhbXMubWVzc2FnZUlkXG4gICAgKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbihyZXN1bHQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGdldCBwbGF0Zm9ybSBmcm9tIG1lc3NhZ2UnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQSx3QkFBbUQsQ0FuQm5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQU9BLFNBQVNFLFlBQVlBLENBQUNDLEdBQVEsRUFBRUMsT0FBWSxFQUFFQyxLQUFVLEVBQUVDLElBQVMsRUFBRSxDQUNuRUgsR0FBRyxDQUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUNuQkQsTUFBTSxFQUFFLFNBQVMsRUFDakJFLFFBQVEsRUFBRSxFQUNSQyxPQUFPLEVBQUUscUNBQXFDLEVBQzlDQyxPQUFPLEVBQUVOLEtBQUssRUFDZEQsT0FBTyxFQUFFQSxPQUFPLEVBQ2hCRSxJQUFJLEVBQUVBLElB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
|
|
2350
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsIl9zZXNzaW9uVXRpbCIsInJldHVyblN1Y2VzcyIsInJlcyIsInNlc3Npb24iLCJwaG9uZSIsImRhdGEiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2UiLCJtZXNzYWdlIiwiY29udGFjdCIsInJldHVybkVycm9yIiwicmVxIiwiZXJyb3IiLCJsb2dnZXIiLCJsb2ciLCJzZXRQcm9maWxlTmFtZSIsIm5hbWUiLCJib2R5IiwicmVzdWx0IiwiY2xpZW50Iiwic2hvd0FsbENvbnRhY3RzIiwiY29udGFjdHMiLCJnZXRBbGxDb250YWN0cyIsImdldEFsbENoYXRzIiwibWFwcGVyIiwiZSIsImxpc3RDaGF0cyIsImlkIiwiY291bnQiLCJkaXJlY3Rpb24iLCJvbmx5R3JvdXBzIiwib25seVVzZXJzIiwib25seVdpdGhVbnJlYWRNZXNzYWdlIiwid2l0aExhYmVscyIsImdldEFsbENoYXRzV2l0aE1lc3NhZ2VzIiwiZ2V0QWxsTWVzc2FnZXNJbkNoYXQiLCJwYXJhbXMiLCJpc0dyb3VwIiwiaW5jbHVkZU1lIiwiaW5jbHVkZU5vdGlmaWNhdGlvbnMiLCJxdWVyeSIsImNvbnRhdG8iLCJjb250YWN0VG9BcnJheSIsImdldEFsbE5ld01lc3NhZ2VzIiwiZ2V0QWxsVW5yZWFkTWVzc2FnZXMiLCJnZXRDaGF0QnlJZCIsImlzTmV3c2xldHRlciIsImlzTGlkIiwiZ2V0TWVzc2FnZUJ5SWQiLCJtZXNzYWdlSWQiLCJjaGF0SWQiLCJ1c2VyIiwiZ2V0QmF0dGVyeUxldmVsIiwiZ2V0SG9zdERldmljZSIsInBob25lTnVtYmVyIiwiZ2V0V2lkIiwiZ2V0UGhvbmVOdW1iZXIiLCJnZXRCbG9ja0xpc3QiLCJibG9ja2VkIiwibWFwIiwic3BsaXQiLCJkZWxldGVDaGF0IiwicmVzdWx0cyIsImRlbGV0ZUFsbENoYXRzIiwiY2hhdHMiLCJjaGF0IiwiY2xlYXJDaGF0IiwiY2xlYXJBbGxDaGF0cyIsImFyY2hpdmVDaGF0IiwidmFsdWUiLCJhcmNoaXZlQWxsQ2hhdHMiLCJnZXRBbGxDaGF0c0FyY2hpdmVkcyIsImFyY2hpdmVkIiwiYXJjaGl2ZSIsInB1c2giLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVkaWFJbkRldmljZSIsIm9ubHlMb2NhbCIsInJlYWN0TWVzc2FnZSIsIm1zZ0lkIiwicmVhY3Rpb24iLCJzZW5kUmVhY3Rpb25Ub01lc3NhZ2UiLCJyZXBseSIsInRleHQiLCJtZXNzYWdlaWQiLCJmb3J3YXJkTWVzc2FnZXMiLCJmb3J3YXJkTWVzc2FnZXNWMiIsIm1hcmtVbnNlZW5NZXNzYWdlIiwiYmxvY2tDb250YWN0IiwidW5ibG9ja0NvbnRhY3QiLCJwaW5DaGF0Iiwic3RhdGUiLCJzZXRQcm9maWxlUGljIiwiZmlsZSIsInBhdGgiLCJwYXRoRmlsZSIsInVubGlua0FzeW5jIiwiZ2V0VW5yZWFkTWVzc2FnZXMiLCJnZXRDaGF0SXNPbmxpbmUiLCJnZXRMYXN0U2VlbiIsImdldExpc3RNdXRlcyIsInR5cGUiLCJsb2FkQW5kR2V0QWxsTWVzc2FnZXNJbkNoYXQiLCJnZXRNZXNzYWdlcyIsInBhcnNlSW50IiwidG9TdHJpbmciLCJzZW5kQ29udGFjdFZjYXJkIiwiY29udGFjdHNJZCIsInNlbmRNdXRlIiwidGltZSIsInNlbmRTZWVuIiwic2V0Q2hhdFN0YXRlIiwiY2hhdHN0YXRlIiwic2V0VGVtcG9yYXJ5TWVzc2FnZXMiLCJzZXRUeXBpbmciLCJzdGFydFR5cGluZyIsInN0b3BUeXBpbmciLCJzZXRSZWNvcmRpbmciLCJkdXJhdGlvbiIsInN0YXJ0UmVjb3JkaW5nIiwic3RvcFJlY29yZGluZyIsImNoZWNrTnVtYmVyU3RhdHVzIiwiZ2V0Q29udGFjdCIsImdldE51bWJlclByb2ZpbGUiLCJnZXRQcm9maWxlUGljRnJvbVNlcnZlciIsImdldFN0YXR1cyIsInNldFByb2ZpbGVTdGF0dXMiLCJyZWplY3RDYWxsIiwiY2FsbElkIiwic3Rhck1lc3NhZ2UiLCJzdGFyIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Vm90ZXMiLCJjaGF0V29vdCIsImNsaWVudHNBcnJheSIsImlzQ29ubmVjdGVkIiwiZXZlbnQiLCJpc19wcml2YXRlIiwicHJpdmF0ZSIsIm1lc3NhZ2VfdHlwZSIsImNvbnZlcnNhdGlvbiIsIm1ldGEiLCJzZW5kZXIiLCJwaG9uZV9udW1iZXIiLCJyZXBsYWNlIiwibWVzc2FnZXMiLCJhdHRhY2htZW50cyIsImJhc2VfdXJsIiwiY29uZmlnIiwiYmFzZVVSTCIsImRhdGFfdXJsIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImZpbGVfdHlwZSIsInNlbmRQdHQiLCJjb250ZW50Iiwic2VuZEZpbGUiLCJzZW5kVGV4dCIsImNvbnNvbGUiLCJnZXRQbGF0Zm9ybUZyb21NZXNzYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvZGV2aWNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDaGF0IH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IGNvbnRhY3RUb0FycmF5LCB1bmxpbmtBc3luYyB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcbmltcG9ydCB7IGNsaWVudHNBcnJheSB9IGZyb20gJy4uL3V0aWwvc2Vzc2lvblV0aWwnO1xuXG5mdW5jdGlvbiByZXR1cm5TdWNlc3MocmVzOiBhbnksIHNlc3Npb246IGFueSwgcGhvbmU6IGFueSwgZGF0YTogYW55KSB7XG4gIHJlcy5zdGF0dXMoMjAxKS5qc29uKHtcbiAgICBzdGF0dXM6ICdTdWNjZXNzJyxcbiAgICByZXNwb25zZToge1xuICAgICAgbWVzc2FnZTogJ0luZm9ybWF0aW9uIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgIGNvbnRhY3Q6IHBob25lLFxuICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJldHVybkVycm9yKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgc2Vzc2lvbjogYW55LCBlcnJvcjogYW55KSB7XG4gIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgc3RhdHVzOiAnRXJyb3InLFxuICAgIHJlc3BvbnNlOiB7XG4gICAgICBtZXNzYWdlOiAnRXJyb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbicsXG4gICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgbG9nOiBlcnJvcixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFByb2ZpbGVOYW1lKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIlByb2ZpbGVcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJNeSBuZXcgbmFtZVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IG5hbWUgfSA9IHJlcS5ib2R5O1xuXG4gIGlmICghbmFtZSlcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNDAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdQYXJhbWV0ZXIgbmFtZSBpcyByZXF1aXJlZCEnIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5zZXRQcm9maWxlTmFtZShuYW1lKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgcHJvZmlsZSBuYW1lLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dBbGxDb250YWN0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDb250YWN0c1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWN0cyA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QWxsQ29udGFjdHMoKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogY29udGFjdHMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIGZldGNoaW5nIGNvbnRhY3RzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsQ2hhdHMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgKiAjc3dhZ2dlci5zdW1tYXJ5ID0gJ0RlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgJ2xpc3QtY2hhdHMnXG4gICAqICNzd2FnZ2VyLmRlcHJlY2F0ZWQgPSB0cnVlXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UsIG1hcHBlcjogJ2NoYXQnIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIGNoYXRzJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdENoYXRzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICogI3N3YWdnZXIuc3VtbWFyeSA9ICdSZXRyaWV2ZSBhIGxpc3Qgb2YgY2hhdHMnXG4gICAqICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1RoaXMgYm9keSBpcyBub3QgcmVxdWlyZWQuIE5vdCBzZW50IGJvZHkgdG8gZ2V0IGFsbCBjaGF0cyBvciBmaWx0ZXIuJ1xuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBjb3VudDogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgIGRpcmVjdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIG9ubHlHcm91cHM6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgb25seVVzZXJzOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIG9ubHlXaXRoVW5yZWFkTWVzc2FnZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICB3aXRoTGFiZWxzOiB7IHR5cGU6IFwiYXJyYXlcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiQWxsIG9wdGlvbnMgLSBFZGl0IHRoaXNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlkOiBcIjxjaGF0SWQ+XCIsXG4gICAgICAgICAgICAgICAgY291bnQ6IDIwLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhZnRlclwiLFxuICAgICAgICAgICAgICAgIG9ubHlHcm91cHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlVc2VyczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aXRoTGFiZWxzOiBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJBbGwgY2hhdHNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJDaGF0cyBncm91cFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgb25seUdyb3VwczogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiT25seSB3aXRoIHVucmVhZCBtZXNzYWdlc1wiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiUGFnaW5hdGVkIHJlc3VsdHNcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlkOiBcIjxjaGF0SWQ+XCIsXG4gICAgICAgICAgICAgICAgY291bnQ6IDIwLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhZnRlclwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIGlkLFxuICAgICAgY291bnQsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBvbmx5R3JvdXBzLFxuICAgICAgb25seVVzZXJzLFxuICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlLFxuICAgICAgd2l0aExhYmVscyxcbiAgICB9ID0gcmVxLmJvZHk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQubGlzdENoYXRzKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGNvdW50OiBjb3VudCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgb25seUdyb3Vwczogb25seUdyb3VwcyxcbiAgICAgIG9ubHlVc2Vyczogb25seVVzZXJzLFxuICAgICAgb25seVdpdGhVbnJlYWRNZXNzYWdlOiBvbmx5V2l0aFVucmVhZE1lc3NhZ2UsXG4gICAgICB3aXRoTGFiZWxzOiB3aXRoTGFiZWxzLFxuICAgIH0pO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24ocmVzcG9uc2UpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIGNoYXRzJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsQ2hhdHNXaXRoTWVzc2FnZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgKiAjc3dhZ2dlci5zdW1tYXJ5ID0gJ0RlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbGlzdC1jaGF0cydcbiAgICogI3N3YWdnZXIuZGVwcmVjYXRlZCA9IHRydWVcbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50Lmxpc3RDaGF0cygpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBhbGwgY2hhdHMgd2hpdCBtZXNzYWdlcycsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBEZXByZWNpYWRvIGVtIGZhdm9yIGRlIGdldE1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxNZXNzYWdlc0luQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImlzR3JvdXBcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdmYWxzZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU1lXCJdID0ge1xuICAgICAgc2NoZW1hOiAndHJ1ZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU5vdGlmaWNhdGlvbnNcIl0gPSB7XG4gICAgICBzY2hlbWE6ICd0cnVlJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3Qge1xuICAgICAgaXNHcm91cCA9IGZhbHNlLFxuICAgICAgaW5jbHVkZU1lID0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVOb3RpZmljYXRpb25zID0gdHJ1ZSxcbiAgICB9ID0gcmVxLnF1ZXJ5O1xuXG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCBhcyBib29sZWFuKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbE1lc3NhZ2VzSW5DaGF0KFxuICAgICAgICBjb250YXRvLFxuICAgICAgICBpbmNsdWRlTWUgYXMgYm9vbGVhbixcbiAgICAgICAgaW5jbHVkZU5vdGlmaWNhdGlvbnMgYXMgYm9vbGVhblxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIG1lc3NhZ2VzIGluIGNoYXQnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFsbE5ld01lc3NhZ2VzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbE5ld01lc3NhZ2VzKCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGFsbCBtZXNzYWdlcyBpbiBjaGF0JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxVbnJlYWRNZXNzYWdlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxVbnJlYWRNZXNzYWdlcygpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBhbGwgbWVzc2FnZXMgaW4gY2hhdCcsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2hhdEJ5SWQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wicGhvbmVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc1NTIxOTk5OTk5OTk5QGMudXMnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImlzR3JvdXBcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdmYWxzZSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgeyBpc0dyb3VwID0gZmFsc2UsIGlzTmV3c2xldHRlciA9IGZhbHNlLCBpc0xpZCA9IGZhbHNlIH0gPSByZXEucXVlcnk7XG5cbiAgdHJ5IHtcbiAgICBsZXQgcmVzdWx0ID0ge30gYXMgQ2hhdDtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkoXG4gICAgICBwaG9uZSBhcyBzdHJpbmcsXG4gICAgICBpc0dyb3VwIGFzIGJvb2xlYW4sXG4gICAgICBpc05ld3NsZXR0ZXIgYXMgYm9vbGVhbixcbiAgICAgIGlzTGlkIGFzIGJvb2xlYW5cbiAgICApKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmdldENoYXRCeUlkKGNvbnRhdG8pO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBjaGFuZ2luZyBjaGF0IGJ5IElkJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNZXNzYWdlQnlJZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJtZXNzYWdlSWRcIl0gPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHNjaGVtYTogJzxtZXNzYWdlX2lkPidcbiAgICAgfVxuICAgKi9cbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuICBjb25zdCB7IG1lc3NhZ2VJZCB9ID0gcmVxLnBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0TWVzc2FnZUJ5SWQobWVzc2FnZUlkKTtcblxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHNlc3Npb24sIChyZXN1bHQgYXMgYW55KS5jaGF0SWQudXNlciwgcmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgc2Vzc2lvbiwgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXR0ZXJ5TGV2ZWwocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QmF0dGVyeUxldmVsKCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdTdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3IgcmV0cmlldmluZyBiYXR0ZXJ5IHN0YXR1cycsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SG9zdERldmljZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRIb3N0RGV2aWNlKCk7XG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBhd2FpdCByZXEuY2xpZW50LmdldFdpZCgpO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgcmVzcG9uc2U6IHsgLi4ucmVzcG9uc2UsIHBob25lTnVtYmVyIH0sXG4gICAgICBtYXBwZXI6ICdkZXZpY2UnLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJybyBhbyByZWN1cGVyYXIgZGFkb3MgZG8gdGVsZWZvbmUnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBob25lTnVtYmVyKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBhd2FpdCByZXEuY2xpZW50LmdldFdpZCgpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcGhvbmVOdW1iZXIsIG1hcHBlcjogJ2RldmljZScgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIHBob25lIG51bWJlcicsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmxvY2tMaXN0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRCbG9ja0xpc3QoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGJsb2NrZWQgPSByZXNwb25zZS5tYXAoKGNvbnRhdG86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHsgcGhvbmU6IGNvbnRhdG8gPyBjb250YXRvLnNwbGl0KCdAJylbMF0gOiAnJyB9O1xuICAgIH0pO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IGJsb2NrZWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIGJsb2NrZWQgY29udGFjdCBsaXN0JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDaGF0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0ge307XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzW2NvbnRhdG9dID0gYXdhaXQgcmVxLmNsaWVudC5kZWxldGVDaGF0KGNvbnRhdG8pO1xuICAgIH1cbiAgICByZXR1cm5TdWNlc3MocmVzLCBzZXNzaW9uLCBwaG9uZSwgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIHNlc3Npb24sIGVycm9yKTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFsbENoYXRzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgY2hhdHMgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbENoYXRzKCk7XG4gICAgZm9yIChjb25zdCBjaGF0IG9mIGNoYXRzKSB7XG4gICAgICBhd2FpdCByZXEuY2xpZW50LmRlbGV0ZUNoYXQoKGNoYXQgYXMgYW55KS5jaGF0SWQpO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgYWxsIGNoYXRzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJDaGF0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgXG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLmJvZHk7XG4gIGNvbnN0IHNlc3Npb24gPSByZXEuc2Vzc2lvbjtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBwaG9uZSkge1xuICAgICAgcmVzdWx0c1tjb250YXRvXSA9IGF3YWl0IHJlcS5jbGllbnQuY2xlYXJDaGF0KGNvbnRhdG8pO1xuICAgIH1cbiAgICByZXR1cm5TdWNlc3MocmVzLCBzZXNzaW9uLCBwaG9uZSwgcmVzdWx0cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuRXJyb3IocmVxLCByZXMsIHNlc3Npb24sIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJBbGxDaGF0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIGZvciAoY29uc3QgY2hhdCBvZiBjaGF0cykge1xuICAgICAgYXdhaXQgcmVxLmNsaWVudC5jbGVhckNoYXQoYCR7KGNoYXQgYXMgYW55KS5jaGF0SWR9YCk7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIGNsZWFyIGFsbCBjaGF0cycsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmNoaXZlQ2hhdChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHZhbHVlID0gdHJ1ZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuYXJjaGl2ZUNoYXQoYCR7cGhvbmV9YCwgdmFsdWUpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gYXJjaGl2ZSBjaGF0JywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyY2hpdmVBbGxDaGF0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDaGF0cygpO1xuICAgIGZvciAoY29uc3QgY2hhdCBvZiBjaGF0cykge1xuICAgICAgYXdhaXQgcmVxLmNsaWVudC5hcmNoaXZlQ2hhdChgJHsoY2hhdCBhcyBhbnkpLmNoYXRJZH1gLCB0cnVlKTtcbiAgICB9XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGFyY2hpdmUgYWxsIGNoYXRzJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxDaGF0c0FyY2hpdmVkcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAqICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1JldHJpZXZlcyBhbGwgYXJjaGl2ZWQgY2hhdHMuJ1xuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCBjaGF0cyA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0QWxsQ2hhdHMoKTtcbiAgICBjb25zdCBhcmNoaXZlZCA9IFtdIGFzIGFueTtcbiAgICBmb3IgKGNvbnN0IGNoYXQgb2YgY2hhdHMpIHtcbiAgICAgIGlmIChjaGF0LmFyY2hpdmUgPT09IHRydWUpIHtcbiAgICAgICAgYXJjaGl2ZWQucHVzaChjaGF0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oYXJjaGl2ZWQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gYXJjaGl2ZSBhbGwgY2hhdHMnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIG9ubHlMb2NhbDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBkZWxldGVNZWRpYUluRGV2aWNlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWxldGUgbWVzc2FnZSB0byBhbGxcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IFwiPG1lc3NhZ2VJZD5cIixcbiAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUluRGV2aWNlOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJEZWxldGUgbWVzc2FnZSBvbmx5IG1lXCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIG1lc3NhZ2VJZCwgZGVsZXRlTWVkaWFJbkRldmljZSwgb25seUxvY2FsIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZGVsZXRlTWVzc2FnZShcbiAgICAgIGAke3Bob25lfWAsXG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBvbmx5TG9jYWwsXG4gICAgICBkZWxldGVNZWRpYUluRGV2aWNlXG4gICAgKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdNZXNzYWdlIGRlbGV0ZWQnIH0gfSk7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoNDAxKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdFcnJvciB1bmtub3duIG9uIGRlbGV0ZSBtZXNzYWdlJyB9LFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgbWVzc2FnZScsIGVycm9yOiBlIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhY3RNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBtc2dJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHJlYWN0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIG1zZ0lkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgICAgcmVhY3Rpb246IFwi8J+YnFwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IG1zZ0lkLCByZWFjdGlvbiB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZXEuY2xpZW50LnNlbmRSZWFjdGlvblRvTWVzc2FnZShtc2dJZCwgcmVhY3Rpb24pO1xuXG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiB7IG1lc3NhZ2U6ICdSZWFjdGlvbiBzZW5kZWQnIH0gfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZW5kIHJlYWN0aW9uIHRvIG1lc3NhZ2UnLFxuICAgICAgZXJyb3I6IGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGx5KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIuZGVwcmVjYXRlZD10cnVlXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZWlkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgdGV4dDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWVzc2FnZWlkOiBcIjxtZXNzYWdlSWQ+XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiVGV4dCB0byByZXBseVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB0ZXh0LCBtZXNzYWdlaWQgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LnJlcGx5KGAke3Bob25lfUBjLnVzYCwgdGV4dCwgbWVzc2FnZWlkKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIHJlcGx5aW5nIG1lc3NhZ2UnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9yd2FyZE1lc3NhZ2VzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogXCI8bWVzc2FnZUlkPlwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCBtZXNzYWdlSWQsIGlzR3JvdXAgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250YWN0cyA9IGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKTtcbiAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRhY3Qgb2YgY29udGFjdHMpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5mb3J3YXJkTWVzc2FnZXNWMihjb250YWN0LCBtZXNzYWdlSWQpO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBmb3J3YXJkaW5nIG1lc3NhZ2UnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFya1Vuc2Vlbk1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcmVxLmNsaWVudC5tYXJrVW5zZWVuTWVzc2FnZShgJHtwaG9uZX1gKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHsgbWVzc2FnZTogJ3Vuc2VlbiBjaGVja2VkJyB9IH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBtYXJrIHVuc2VlbicsIGVycm9yOiBlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBibG9ja0NvbnRhY3QocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJlcS5jbGllbnQuYmxvY2tDb250YWN0KGAke3Bob25lfWApO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogeyBtZXNzYWdlOiAnQ29udGFjdCBibG9ja2VkJyB9IH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBibG9jayBjb250YWN0JywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuYmxvY2tDb250YWN0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSB9ID0gcmVxLmJvZHk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZXEuY2xpZW50LnVuYmxvY2tDb250YWN0KGAke3Bob25lfWApO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogeyBtZXNzYWdlOiAnQ29udGFjdCBVbkJsb2NrZWQnIH0gfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIHVubG9jayBjb250YWN0JywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBpbkNoYXQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wib2JqXCJdID0ge1xuICAgICAgaW46ICdib2R5JyxcbiAgICAgIHNjaGVtYToge1xuICAgICAgICAkcGhvbmU6ICc1NTIxOTk5OTk5OTk5JyxcbiAgICAgICAgJGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAkc3RhdGU6IHRydWUsXG4gICAgICB9XG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHN0YXRlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgc3RhdGUgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICBhd2FpdCByZXEuY2xpZW50LnBpbkNoYXQoY29udGF0bywgc3RhdGUgPT09ICd0cnVlJywgZmFsc2UpO1xuICAgIH1cblxuICAgIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogeyBtZXNzYWdlOiAnQ2hhdCBmaXhlZCcgfSB9KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiBlLnRleHQgfHwgJ0Vycm9yIG9uIHBpbiBjaGF0JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRQcm9maWxlUGljKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIlByb2ZpbGVcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIuY29uc3VtZXMgPSBbJ211bHRpcGFydC9mb3JtLWRhdGEnXSAgXG4gICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzWydmaWxlJ10gPSB7XG4gICAgICAgICAgaW46ICdmb3JtRGF0YScsXG4gICAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICAgIHJlcXVpcmVkOiAndHJ1ZScsXG4gICAgICB9XG4gICAqL1xuICBpZiAoIXJlcS5maWxlKVxuICAgIHJlc1xuICAgICAgLnN0YXR1cyg0MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ0Vycm9yJywgbWVzc2FnZTogJ0ZpbGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIScgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IHBhdGg6IHBhdGhGaWxlIH0gPSByZXEuZmlsZSBhcyBhbnk7XG5cbiAgICBhd2FpdCByZXEuY2xpZW50LnNldFByb2ZpbGVQaWMocGF0aEZpbGUpO1xuICAgIGF3YWl0IHVubGlua0FzeW5jKHBhdGhGaWxlKTtcblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgcmVzcG9uc2U6IHsgbWVzc2FnZTogJ1Byb2ZpbGUgcGhvdG8gc3VjY2Vzc2Z1bGx5IGNoYW5nZWQnIH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBjaGFuZ2luZyBwcm9maWxlIHBob3RvJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbnJlYWRNZXNzYWdlcyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLmRlcHJlY2F0ZWQ9dHJ1ZVxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldFVucmVhZE1lc3NhZ2VzKGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIHJlc3BvbnNlOiAnRXJyb3Igb24gb3BlbiBsaXN0JywgZXJyb3I6IGUgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENoYXRJc09ubGluZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknLFxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEucGFyYW1zO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRDaGF0SXNPbmxpbmUoYCR7cGhvbmV9QGMudXNgKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIHJlc3BvbnNlOiAnRXJyb3Igb24gZ2V0IGNoYXQgaXMgb25saW5lJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMYXN0U2VlbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknLFxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEucGFyYW1zO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRMYXN0U2VlbihgJHtwaG9uZX1AYy51c2ApO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIHJlc3BvbnNlOiAnRXJyb3Igb24gZ2V0IGNoYXQgbGFzdCBzZWVuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlzdE11dGVzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInR5cGVcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdhbGwnLFxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHR5cGUgPSAnYWxsJyB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0TGlzdE11dGVzKHR5cGUpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIHJlc3BvbnNlOiAnRXJyb3Igb24gZ2V0IGxpc3QgbXV0ZXMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQW5kR2V0QWxsTWVzc2FnZXNJbkNoYXQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci5kZXByZWNhdGVkPXRydWVcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU1lXCJdID0ge1xuICAgICAgc2NoZW1hOiAndHJ1ZSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wiaW5jbHVkZU5vdGlmaWNhdGlvbnNcIl0gPSB7XG4gICAgICBzY2hlbWE6ICdmYWxzZSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgaW5jbHVkZU1lID0gdHJ1ZSwgaW5jbHVkZU5vdGlmaWNhdGlvbnMgPSBmYWxzZSB9ID0gcmVxLnBhcmFtcztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQubG9hZEFuZEdldEFsbE1lc3NhZ2VzSW5DaGF0KFxuICAgICAgYCR7cGhvbmV9QGMudXNgLFxuICAgICAgaW5jbHVkZU1lIGFzIGJvb2xlYW4sXG4gICAgICBpbmNsdWRlTm90aWZpY2F0aW9ucyBhcyBib29sZWFuXG4gICAgKTtcblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIHJlc3BvbnNlOiAnRXJyb3Igb24gb3BlbiBsaXN0JywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWVzc2FnZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OUBjLnVzJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJjb3VudFwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzIwJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJkaXJlY3Rpb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdiZWZvcmUnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcImlkXCJdID0ge1xuICAgICAgc2NoZW1hOiAnPG1lc3NhZ2VfaWRfdG9fdXNlX2RpcmVjdGlvbj4nXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gIGNvbnN0IHsgY291bnQgPSAyMCwgZGlyZWN0aW9uID0gJ2JlZm9yZScsIGlkID0gbnVsbCB9ID0gcmVxLnF1ZXJ5O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRNZXNzYWdlcyhgJHtwaG9uZX1gLCB7XG4gICAgICBjb3VudDogcGFyc2VJbnQoY291bnQgYXMgc3RyaW5nKSxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLnRvU3RyaW5nKCkgYXMgYW55LFxuICAgICAgaWQ6IGlkIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg0MDEpXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgcmVzcG9uc2U6ICdFcnJvciBvbiBvcGVuIGxpc3QnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZENvbnRhY3RWY2FyZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBwaG9uZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGlzR3JvdXA6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGNvbnRhY3RzSWQ6IHsgdHlwZTogXCJhcnJheVwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogJ05hbWUgb2YgY29udGFjdCcsXG4gICAgICAgICAgICAgICAgY29udGFjdHNJZDogWyc1NTIxOTk5OTk5OTk5J10sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIGNvbnRhY3RzSWQsIG5hbWUgPSBudWxsLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGlzR3JvdXApKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc2VuZENvbnRhY3RWY2FyZChcbiAgICAgICAgYCR7Y29udGF0b31gLFxuICAgICAgICBjb250YWN0c0lkLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gc2VuZCBjb250YWN0IHZjYXJkJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE11dGUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICB0aW1lOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgdHlwZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGltZTogMSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaG91cnMnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lLCB0aW1lLCB0eXBlID0gJ2hvdXJzJywgaXNHcm91cCA9IGZhbHNlIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGlzR3JvdXApKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc2VuZE11dGUoYCR7Y29udGF0b31gLCB0aW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3Igb24gc2VuZCBtdXRlJywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU2VlbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDaGF0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgcGhvbmU6IFwiNTUyMTk5OTk5OTk5OVwiLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IGZhbHNlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHBob25lIH0gPSByZXEuYm9keTtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIHBob25lKSB7XG4gICAgICByZXN1bHRzLnB1c2goYXdhaXQgcmVxLmNsaWVudC5zZW5kU2Vlbihjb250YXRvKSk7XG4gICAgfVxuICAgIHJldHVyblN1Y2VzcyhyZXMsIHNlc3Npb24sIHBob25lLCByZXN1bHRzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm5FcnJvcihyZXEsIHJlcywgc2Vzc2lvbiwgZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRDaGF0U3RhdGUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci5kZXByZWNhdGVkPXRydWVcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIGNoYXRzdGF0ZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY2hhdHN0YXRlOiBcIjFcIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgY2hhdHN0YXRlLCBpc0dyb3VwID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuXG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgaXNHcm91cCkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZXRDaGF0U3RhdGUoYCR7Y29udGF0b31gLCBjaGF0c3RhdGUpO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gc2VuZCBjaGF0IHN0YXRlJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5TWVzc2FnZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHZhbHVlID0gdHJ1ZSwgaXNHcm91cCA9IGZhbHNlIH0gPSByZXEuYm9keTtcblxuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGlzR3JvdXApKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc2V0VGVtcG9yYXJ5TWVzc2FnZXMoYCR7Y29udGF0b31gLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgdGVtcG9yYXJ5IG1lc3NhZ2VzJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0VHlwaW5nKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIHZhbHVlOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBwaG9uZTogXCI1NTIxOTk5OTk5OTk5XCIsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUsIHZhbHVlID0gdHJ1ZSwgaXNHcm91cCA9IGZhbHNlIH0gPSByZXEuYm9keTtcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKSkge1xuICAgICAgaWYgKHZhbHVlKSByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc3RhcnRUeXBpbmcoY29udGF0byk7XG4gICAgICBlbHNlIHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zdG9wVHlwaW5nKGNvbnRhdG8pO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXNwb25zZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgdHlwaW5nJywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRSZWNvcmRpbmcocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiQ2hhdFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICBcbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgcGhvbmU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBpc0dyb3VwOiB7IHR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiB7IHR5cGU6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICBcIkRlZmF1bHRcIjoge1xuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHBob25lOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogNSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSwgdmFsdWUgPSB0cnVlLCBkdXJhdGlvbiwgaXNHcm91cCA9IGZhbHNlIH0gPSByZXEuYm9keTtcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKSkge1xuICAgICAgaWYgKHZhbHVlKSByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc3RhcnRSZWNvcmRpbmcoY29udGF0bywgZHVyYXRpb24pO1xuICAgICAgZWxzZSByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuc3RvcFJlY29yZGluZyhjb250YXRvKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCByZWNvcmRpbmcnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja051bWJlclN0YXR1cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSwgZmFsc2UpKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuY2hlY2tOdW1iZXJTdGF0dXMoYCR7Y29udGF0b31gKTtcbiAgICB9XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGNoZWNrIG51bWJlciBzdGF0dXMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb250YWN0KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSA9IHRydWUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSBhcyBzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldENvbnRhY3QoY29udGF0byk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBjb250YWN0JywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBbGxDb250YWN0cyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJDb250YWN0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDb250YWN0cygpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgYWxsIGNvbnN0YWN0cycsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE51bWJlclByb2ZpbGUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci5kZXByZWNhdGVkPXRydWVcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNoYXRcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSA9IHRydWUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSBhcyBzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldE51bWJlclByb2ZpbGUoY29udGF0byk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgbnVtYmVyIHByb2ZpbGUnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9maWxlUGljRnJvbVNlcnZlcihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJDb250YWN0XCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJwaG9uZVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzU1MjE5OTk5OTk5OTknXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHsgcGhvbmUgPSB0cnVlIH0gPSByZXEucGFyYW1zO1xuICBjb25zdCB7IGlzR3JvdXAgPSBmYWxzZSB9ID0gcmVxLnF1ZXJ5O1xuICB0cnkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUgYXMgc3RyaW5nLCBpc0dyb3VwIGFzIGJvb2xlYW4pKSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0UHJvZmlsZVBpY0Zyb21TZXJ2ZXIoY29udGF0byk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiAgZ2V0IHByb2ZpbGUgcGljJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHVzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIkNvbnRhY3RcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInBob25lXCJdID0ge1xuICAgICAgc2NoZW1hOiAnNTUyMTk5OTk5OTk5OSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBwaG9uZSA9IHRydWUgfSA9IHJlcS5wYXJhbXM7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgY29udGF0byBvZiBjb250YWN0VG9BcnJheShwaG9uZSBhcyBzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldFN0YXR1cyhjb250YXRvKTtcbiAgICB9XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uICBnZXQgc3RhdHVzJywgZXJyb3I6IGVycm9yIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRQcm9maWxlU3RhdHVzKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIlByb2ZpbGVcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm9ialwiXSA9IHtcbiAgICAgIGluOiAnYm9keScsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgJHN0YXR1czogJ015IG5ldyBzdGF0dXMnLFxuICAgICAgfVxuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBzdGF0dXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiBcIk15IG5ldyBzdGF0dXNcIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBzdGF0dXMgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zZXRQcm9maWxlU3RhdHVzKHN0YXR1cyk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCBwcm9maWxlIHN0YXR1cycgfSk7XG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWplY3RDYWxsKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICAgI3N3YWdnZXIudGFncyA9IFtcIk1pc2NcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgXG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGNhbGxJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBjYWxsSWQ6IFwiPGNhbGxpZD5cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBjYWxsSWQgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5yZWplY3RDYWxsKGNhbGxJZCk7XG5cbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzcG9uc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIHJlamVjdENhbGwnLCBlcnJvcjogZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3Rhck1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgc3RhcjogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZXM6IHtcbiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBcIjU1MjE5OTk5OTk5OTlcIixcbiAgICAgICAgICAgICAgICBzdGFyOiB0cnVlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IG1lc3NhZ2VJZCwgc3RhciA9IHRydWUgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5zdGFyTWVzc2FnZShtZXNzYWdlSWQsIHN0YXIpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiAgc3RhcnQgbWVzc2FnZScsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlYWN0aW9ucyhyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAgICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wibWVzc2FnZUlkXCJdID0ge1xuICAgICAgc2NoZW1hOiAnPG1lc3NhZ2VJZD4nXG4gICAgIH1cbiAgICovXG4gIGNvbnN0IG1lc3NhZ2VJZCA9IHJlcS5wYXJhbXMuaWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXEuY2xpZW50LmdldFJlYWN0aW9ucyhtZXNzYWdlSWQpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgcmVhY3Rpb25zJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Vm90ZXMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcIm1lc3NhZ2VJZFwiXSA9IHtcbiAgICAgIHNjaGVtYTogJzxtZXNzYWdlSWQ+J1xuICAgICB9XG4gICAqL1xuICBjb25zdCBtZXNzYWdlSWQgPSByZXEucGFyYW1zLmlkO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxLmNsaWVudC5nZXRWb3RlcyhtZXNzYWdlSWQpO1xuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCB2b3RlcycsIGVycm9yOiBlcnJvciB9KTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoYXRXb290KHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8YW55PiB7XG4gIC8qKlxuICAgICAjc3dhZ2dlci50YWdzID0gW1wiTWlzY1wiXVxuICAgICAjc3dhZ2dlci5kZXNjcmlwdGlvbiA9ICdZb3UgY2FuIHBvaW50IHlvdXIgQ2hhdHdvb3QgdG8gdGhpcyByb3V0ZSBzbyB0aGF0IGl0IGNhbiBwZXJmb3JtIGZ1bmN0aW9ucy4nXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGV2ZW50OiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgcHJpdmF0ZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlczoge1xuICAgICAgICAgICAgXCJEZWZhdWx0XCI6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IFwiY29udmVyc2F0aW9uX3N0YXR1c19jaGFuZ2VkXCIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZTogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHNlc3Npb24gfSA9IHJlcS5wYXJhbXM7XG4gIGNvbnN0IGNsaWVudDogYW55ID0gY2xpZW50c0FycmF5W3Nlc3Npb25dO1xuICBpZiAoY2xpZW50ID09IG51bGwgfHwgY2xpZW50LnN0YXR1cyAhPT0gJ0NPTk5FQ1RFRCcpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gcmVxLmJvZHkuZXZlbnQ7XG4gICAgICBjb25zdCBpc19wcml2YXRlID0gcmVxLmJvZHkucHJpdmF0ZSB8fCByZXEuYm9keS5pc19wcml2YXRlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50ID09ICdjb252ZXJzYXRpb25fc3RhdHVzX2NoYW5nZWQnIHx8XG4gICAgICAgIGV2ZW50ID09ICdjb252ZXJzYXRpb25fcmVzb2x2ZWQnIHx8XG4gICAgICAgIGlzX3ByaXZhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgICAgLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgbWVzc2FnZTogJ1N1Y2Nlc3Mgb24gcmVjZWl2ZSBjaGF0d29vdCcgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWVzc2FnZV90eXBlLFxuICAgICAgICBwaG9uZSA9IHJlcS5ib2R5LmNvbnZlcnNhdGlvbi5tZXRhLnNlbmRlci5waG9uZV9udW1iZXIucmVwbGFjZSgnKycsICcnKSxcbiAgICAgICAgbWVzc2FnZSA9IHJlcS5ib2R5LmNvbnZlcnNhdGlvbi5tZXNzYWdlc1swXSxcbiAgICAgIH0gPSByZXEuYm9keTtcblxuICAgICAgaWYgKGV2ZW50ICE9ICdtZXNzYWdlX2NyZWF0ZWQnICYmIG1lc3NhZ2VfdHlwZSAhPSAnb3V0Z29pbmcnKVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgICAgLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgbWVzc2FnZTogJ1N1Y2Nlc3Mgb24gcmVjZWl2ZSBjaGF0d29vdCcgfSk7XG4gICAgICBmb3IgKGNvbnN0IGNvbnRhdG8gb2YgY29udGFjdFRvQXJyYXkocGhvbmUsIGZhbHNlKSkge1xuICAgICAgICBpZiAobWVzc2FnZV90eXBlID09ICdvdXRnb2luZycpIHtcbiAgICAgICAgICBpZiAobWVzc2FnZS5hdHRhY2htZW50cykge1xuICAgICAgICAgICAgY29uc3QgYmFzZV91cmwgPSBgJHtcbiAgICAgICAgICAgICAgY2xpZW50LmNvbmZpZy5jaGF0V29vdC5iYXNlVVJMXG4gICAgICAgICAgICB9LyR7bWVzc2FnZS5hdHRhY2htZW50c1swXS5kYXRhX3VybC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIG1lc3NhZ2UuYXR0YWNobWVudHNbMF0uZGF0YV91cmwuaW5kZXhPZignL3JhaWxzLycpICsgMVxuICAgICAgICAgICAgKX1gO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBhdHRhY2htZW50cyBpcyBQdXNoLXRvLXRhbGsgYW5kIHNlbmQgdGhpc1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuYXR0YWNobWVudHNbMF0uZmlsZV90eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zZW5kUHR0KFxuICAgICAgICAgICAgICAgIGAke2NvbnRhdG99YCxcbiAgICAgICAgICAgICAgICBiYXNlX3VybCxcbiAgICAgICAgICAgICAgICAnVm9pY2UgQXVkaW8nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UuY29udGVudFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LnNlbmRGaWxlKFxuICAgICAgICAgICAgICAgIGAke2NvbnRhdG99YCxcbiAgICAgICAgICAgICAgICBiYXNlX3VybCxcbiAgICAgICAgICAgICAgICAnZmlsZScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZS5jb250ZW50XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zZW5kVGV4dChjb250YXRvLCBtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzXG4gICAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgICAuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCBtZXNzYWdlOiAnU3VjY2VzcyBvbiAgcmVjZWl2ZSBjaGF0d29vdCcgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coZSk7XG4gICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uICByZWNlaXZlIGNoYXR3b290JyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGxhdGZvcm1Gcm9tTWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJtZXNzYWdlSWRcIl0gPSB7XG4gICAgICBzY2hlbWE6ICc8bWVzc2FnZUlkPidcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmdldFBsYXRmb3JtRnJvbU1lc3NhZ2UoXG4gICAgICByZXEucGFyYW1zLm1lc3NhZ2VJZFxuICAgICk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24ocmVzdWx0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZSk7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGdldCBnZXQgcGxhdGZvcm0gZnJvbSBtZXNzYWdlJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUEsd0JBQW1ELENBbkJuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FPQSxTQUFTRSxZQUFZQSxDQUFDQyxHQUFRLEVBQUVDLE9BQVksRUFBRUMsS0FBVSxFQUFFQyxJQUFTLEVBQUUsQ0FDbkVILEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFDbkJELE1BQU0sRUFBRSxTQUFTLEVBQ2pCRSxRQUFRLEVBQUUsRUFDUkMsT0FBTyxFQUFFLHFDQUFxQyxFQUM5Q0MsT0FBTyxFQUFFTixLQUFLLEVBQ2RELE9BQU8sRUFBRUEsT0FBTyxFQUNoQkUsSUFBSSxFQUFFQSxJQUFJLENBQ1osQ0FBQyxDQUNILENBQUMsQ0FBQyxDQUNKLENBRUEs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
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
var _deviceController = require("../../controller/deviceController"); /*
|
|
17
|
+
* Copyright 2021 WPPConnect Team
|
|
18
|
+
*
|
|
19
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
20
|
+
* you may not use this file except in compliance with the License.
|
|
21
|
+
* You may obtain a copy of the License at
|
|
22
|
+
*
|
|
23
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
24
|
+
*
|
|
25
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
26
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
27
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
28
|
+
* See the License for the specific language governing permissions and
|
|
29
|
+
* limitations under the License.
|
|
30
|
+
*/jest.mock('../../util/functions', () => ({ contactToArray: jest.fn(), unlinkAsync: jest.fn() }));jest.mock('../../util/sessionUtil', () => ({ clientsArray: [] }));const { contactToArray: mockContactToArray } = jest.requireMock('../../util/functions');describe('forwardMessages', () => {beforeEach(() => {jest.clearAllMocks();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
function createResponse() {
|
|
34
|
+
const res = {
|
|
35
|
+
status: jest.fn(),
|
|
36
|
+
json: jest.fn()
|
|
37
|
+
};
|
|
38
|
+
res.status.mockReturnValue(res);
|
|
39
|
+
res.json.mockReturnValue(res);
|
|
40
|
+
return res;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
it('normalizes and forwards every requested contact', async () => {
|
|
44
|
+
mockContactToArray.mockReturnValue([
|
|
45
|
+
'5511999999999@c.us',
|
|
46
|
+
'5521888888888@c.us']
|
|
47
|
+
);
|
|
48
|
+
const forwardMessagesV2 = jest.
|
|
49
|
+
fn().
|
|
50
|
+
mockResolvedValueOnce('first').
|
|
51
|
+
mockResolvedValueOnce('second');
|
|
52
|
+
const req = {
|
|
53
|
+
body: {
|
|
54
|
+
phone: '5511999999999,5521888888888',
|
|
55
|
+
messageId: 'message-id'
|
|
56
|
+
},
|
|
57
|
+
client: { forwardMessagesV2 },
|
|
58
|
+
logger: { error: jest.fn() }
|
|
59
|
+
};
|
|
60
|
+
const res = createResponse();
|
|
61
|
+
|
|
62
|
+
await (0, _deviceController.forwardMessages)(req, res);
|
|
63
|
+
|
|
64
|
+
expect(mockContactToArray).toHaveBeenCalledWith(
|
|
65
|
+
'5511999999999,5521888888888',
|
|
66
|
+
false
|
|
67
|
+
);
|
|
68
|
+
expect(forwardMessagesV2).toHaveBeenNthCalledWith(
|
|
69
|
+
1,
|
|
70
|
+
'5511999999999@c.us',
|
|
71
|
+
'message-id'
|
|
72
|
+
);
|
|
73
|
+
expect(forwardMessagesV2).toHaveBeenNthCalledWith(
|
|
74
|
+
2,
|
|
75
|
+
'5521888888888@c.us',
|
|
76
|
+
'message-id'
|
|
77
|
+
);
|
|
78
|
+
expect(res.status).toHaveBeenCalledWith(201);
|
|
79
|
+
expect(res.json).toHaveBeenCalledWith({
|
|
80
|
+
status: 'success',
|
|
81
|
+
response: 'second'
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('keeps a complete group identifier instead of its first character', async () => {
|
|
86
|
+
mockContactToArray.mockReturnValue(['120363000000000000@g.us']);
|
|
87
|
+
const forwardMessagesV2 = jest.fn().mockResolvedValue('forwarded');
|
|
88
|
+
const req = {
|
|
89
|
+
body: {
|
|
90
|
+
phone: '120363000000000000@g.us',
|
|
91
|
+
messageId: 'message-id',
|
|
92
|
+
isGroup: true
|
|
93
|
+
},
|
|
94
|
+
client: { forwardMessagesV2 },
|
|
95
|
+
logger: { error: jest.fn() }
|
|
96
|
+
};
|
|
97
|
+
const res = createResponse();
|
|
98
|
+
|
|
99
|
+
await (0, _deviceController.forwardMessages)(req, res);
|
|
100
|
+
|
|
101
|
+
expect(forwardMessagesV2).toHaveBeenCalledWith(
|
|
102
|
+
'120363000000000000@g.us',
|
|
103
|
+
'message-id'
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGV2aWNlQ29udHJvbGxlciIsInJlcXVpcmUiLCJqZXN0IiwibW9jayIsImNvbnRhY3RUb0FycmF5IiwiZm4iLCJ1bmxpbmtBc3luYyIsImNsaWVudHNBcnJheSIsIm1vY2tDb250YWN0VG9BcnJheSIsInJlcXVpcmVNb2NrIiwiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwiY2xlYXJBbGxNb2NrcyIsImNyZWF0ZVJlc3BvbnNlIiwicmVzIiwic3RhdHVzIiwianNvbiIsIm1vY2tSZXR1cm5WYWx1ZSIsIml0IiwiZm9yd2FyZE1lc3NhZ2VzVjIiLCJtb2NrUmVzb2x2ZWRWYWx1ZU9uY2UiLCJyZXEiLCJib2R5IiwicGhvbmUiLCJtZXNzYWdlSWQiLCJjbGllbnQiLCJsb2dnZXIiLCJlcnJvciIsImZvcndhcmRNZXNzYWdlcyIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidG9IYXZlQmVlbk50aENhbGxlZFdpdGgiLCJyZXNwb25zZSIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiaXNHcm91cCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0cy9jb250cm9sbGVyL2RldmljZUNvbnRyb2xsZXIudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBmb3J3YXJkTWVzc2FnZXMgfSBmcm9tICcuLi8uLi9jb250cm9sbGVyL2RldmljZUNvbnRyb2xsZXInO1xuXG5qZXN0Lm1vY2soJy4uLy4uL3V0aWwvZnVuY3Rpb25zJywgKCkgPT4gKHtcbiAgY29udGFjdFRvQXJyYXk6IGplc3QuZm4oKSxcbiAgdW5saW5rQXN5bmM6IGplc3QuZm4oKSxcbn0pKTtcbmplc3QubW9jaygnLi4vLi4vdXRpbC9zZXNzaW9uVXRpbCcsICgpID0+ICh7IGNsaWVudHNBcnJheTogW10gfSkpO1xuXG5jb25zdCB7IGNvbnRhY3RUb0FycmF5OiBtb2NrQ29udGFjdFRvQXJyYXkgfSA9IGplc3QucmVxdWlyZU1vY2soXG4gICcuLi8uLi91dGlsL2Z1bmN0aW9ucydcbikgYXMgeyBjb250YWN0VG9BcnJheTogamVzdC5Nb2NrIH07XG5cbmRlc2NyaWJlKCdmb3J3YXJkTWVzc2FnZXMnLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZSgpIHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBzdGF0dXM6IGplc3QuZm4oKSxcbiAgICAgIGpzb246IGplc3QuZm4oKSxcbiAgICB9O1xuICAgIHJlcy5zdGF0dXMubW9ja1JldHVyblZhbHVlKHJlcyk7XG4gICAgcmVzLmpzb24ubW9ja1JldHVyblZhbHVlKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGl0KCdub3JtYWxpemVzIGFuZCBmb3J3YXJkcyBldmVyeSByZXF1ZXN0ZWQgY29udGFjdCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrQ29udGFjdFRvQXJyYXkubW9ja1JldHVyblZhbHVlKFtcbiAgICAgICc1NTExOTk5OTk5OTk5QGMudXMnLFxuICAgICAgJzU1MjE4ODg4ODg4ODhAYy51cycsXG4gICAgXSk7XG4gICAgY29uc3QgZm9yd2FyZE1lc3NhZ2VzVjIgPSBqZXN0XG4gICAgICAuZm4oKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSgnZmlyc3QnKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSgnc2Vjb25kJyk7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgYm9keToge1xuICAgICAgICBwaG9uZTogJzU1MTE5OTk5OTk5OTksNTUyMTg4ODg4ODg4OCcsXG4gICAgICAgIG1lc3NhZ2VJZDogJ21lc3NhZ2UtaWQnLFxuICAgICAgfSxcbiAgICAgIGNsaWVudDogeyBmb3J3YXJkTWVzc2FnZXNWMiB9LFxuICAgICAgbG9nZ2VyOiB7IGVycm9yOiBqZXN0LmZuKCkgfSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcyA9IGNyZWF0ZVJlc3BvbnNlKCk7XG5cbiAgICBhd2FpdCBmb3J3YXJkTWVzc2FnZXMocmVxIGFzIGFueSwgcmVzIGFzIGFueSk7XG5cbiAgICBleHBlY3QobW9ja0NvbnRhY3RUb0FycmF5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICc1NTExOTk5OTk5OTk5LDU1MjE4ODg4ODg4ODgnLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGV4cGVjdChmb3J3YXJkTWVzc2FnZXNWMikudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAxLFxuICAgICAgJzU1MTE5OTk5OTk5OTlAYy51cycsXG4gICAgICAnbWVzc2FnZS1pZCdcbiAgICApO1xuICAgIGV4cGVjdChmb3J3YXJkTWVzc2FnZXNWMikudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoXG4gICAgICAyLFxuICAgICAgJzU1MjE4ODg4ODg4ODhAYy51cycsXG4gICAgICAnbWVzc2FnZS1pZCdcbiAgICApO1xuICAgIGV4cGVjdChyZXMuc3RhdHVzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgyMDEpO1xuICAgIGV4cGVjdChyZXMuanNvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICByZXNwb25zZTogJ3NlY29uZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdrZWVwcyBhIGNvbXBsZXRlIGdyb3VwIGlkZW50aWZpZXIgaW5zdGVhZCBvZiBpdHMgZmlyc3QgY2hhcmFjdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tDb250YWN0VG9BcnJheS5tb2NrUmV0dXJuVmFsdWUoWycxMjAzNjMwMDAwMDAwMDAwMDBAZy51cyddKTtcbiAgICBjb25zdCBmb3J3YXJkTWVzc2FnZXNWMiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgnZm9yd2FyZGVkJyk7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgYm9keToge1xuICAgICAgICBwaG9uZTogJzEyMDM2MzAwMDAwMDAwMDAwMEBnLnVzJyxcbiAgICAgICAgbWVzc2FnZUlkOiAnbWVzc2FnZS1pZCcsXG4gICAgICAgIGlzR3JvdXA6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2xpZW50OiB7IGZvcndhcmRNZXNzYWdlc1YyIH0sXG4gICAgICBsb2dnZXI6IHsgZXJyb3I6IGplc3QuZm4oKSB9LFxuICAgIH07XG4gICAgY29uc3QgcmVzID0gY3JlYXRlUmVzcG9uc2UoKTtcblxuICAgIGF3YWl0IGZvcndhcmRNZXNzYWdlcyhyZXEgYXMgYW55LCByZXMgYXMgYW55KTtcblxuICAgIGV4cGVjdChmb3J3YXJkTWVzc2FnZXNWMikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAnMTIwMzYzMDAwMDAwMDAwMDAwQGcudXMnLFxuICAgICAgJ21lc3NhZ2UtaWQnXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsSUFBQUEsaUJBQUEsR0FBQUMsT0FBQSxzQ0FBb0UsQ0FmcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBR0FDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFDdkNDLGNBQWMsRUFBRUYsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQyxFQUN6QkMsV0FBVyxFQUFFSixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQ0hILElBQUksQ0FBQ0MsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sRUFBRUksWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUVqRSxNQUFNLEVBQUVILGNBQWMsRUFBRUksa0JBQWtCLENBQUMsQ0FBQyxHQUFHTixJQUFJLENBQUNPLFdBQVcsQ0FDN0Qsc0JBQ0YsQ0FBa0MsQ0FFbENDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQ2hDQyxVQUFVLENBQUMsTUFBTSxDQUNmVCxJQUFJLENBQUNVLGFBQWEsQ0FBQyxDQUFDO01BQ3RCLENBQUMsQ0FBQzs7SUFFRixTQUFTQyxjQUFjQSxDQUFBLEVBQUc7TUFDeEIsTUFBTUMsR0FBRyxHQUFHO1FBQ1ZDLE1BQU0sRUFBRWIsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztRQUNqQlcsSUFBSSxFQUFFZCxJQUFJLENBQUNHLEVBQUUsQ0FBQztNQUNoQixDQUFDO01BQ0RTLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDRSxlQUFlLENBQUNILEdBQUcsQ0FBQztNQUMvQkEsR0FBRyxDQUFDRSxJQUFJLENBQUNDLGVBQWUsQ0FBQ0gsR0FBRyxDQUFDO01BQzdCLE9BQU9BLEdBQUc7SUFDWjs7SUFFQUksRUFBRSxDQUFDLGlEQUFpRCxFQUFFLFlBQVk7TUFDaEVWLGtCQUFrQixDQUFDUyxlQUFlLENBQUM7TUFDakMsb0JBQW9CO01BQ3BCLG9CQUFvQjtNQUNyQixDQUFDO01BQ0YsTUFBTUUsaUJBQWlCLEdBQUdqQixJQUFJO01BQzNCRyxFQUFFLENBQUMsQ0FBQztNQUNKZSxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7TUFDOUJBLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztNQUNsQyxNQUFNQyxHQUFHLEdBQUc7UUFDVkMsSUFBSSxFQUFFO1VBQ0pDLEtBQUssRUFBRSw2QkFBNkI7VUFDcENDLFNBQVMsRUFBRTtRQUNiLENBQUM7UUFDREMsTUFBTSxFQUFFLEVBQUVOLGlCQUFpQixDQUFDLENBQUM7UUFDN0JPLE1BQU0sRUFBRSxFQUFFQyxLQUFLLEVBQUV6QixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDN0IsQ0FBQztNQUNELE1BQU1TLEdBQUcsR0FBR0QsY0FBYyxDQUFDLENBQUM7O01BRTVCLE1BQU0sSUFBQWUsaUNBQWUsRUFBQ1AsR0FBRyxFQUFTUCxHQUFVLENBQUM7O01BRTdDZSxNQUFNLENBQUNyQixrQkFBa0IsQ0FBQyxDQUFDc0Isb0JBQW9CO1FBQzdDLDZCQUE2QjtRQUM3QjtNQUNGLENBQUM7TUFDREQsTUFBTSxDQUFDVixpQkFBaUIsQ0FBQyxDQUFDWSx1QkFBdUI7UUFDL0MsQ0FBQztRQUNELG9CQUFvQjtRQUNwQjtNQUNGLENBQUM7TUFDREYsTUFBTSxDQUFDVixpQkFBaUIsQ0FBQyxDQUFDWSx1QkFBdUI7UUFDL0MsQ0FBQztRQUNELG9CQUFvQjtRQUNwQjtNQUNGLENBQUM7TUFDREYsTUFBTSxDQUFDZixHQUFHLENBQUNDLE1BQU0sQ0FBQyxDQUFDZSxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7TUFDNUNELE1BQU0sQ0FBQ2YsR0FBRyxDQUFDRSxJQUFJLENBQUMsQ0FBQ2Msb0JBQW9CLENBQUM7UUFDcENmLE1BQU0sRUFBRSxTQUFTO1FBQ2pCaUIsUUFBUSxFQUFFO01BQ1osQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDOztJQUVGZCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsWUFBWTtNQUNqRlYsa0JBQWtCLENBQUNTLGVBQWUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUM7TUFDL0QsTUFBTUUsaUJBQWlCLEdBQUdqQixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDLENBQUM0QixpQkFBaUIsQ0FBQyxXQUFXLENBQUM7TUFDbEUsTUFBTVosR0FBRyxHQUFHO1FBQ1ZDLElBQUksRUFBRTtVQUNKQyxLQUFLLEVBQUUseUJBQXlCO1VBQ2hDQyxTQUFTLEVBQUUsWUFBWTtVQUN2QlUsT0FBTyxFQUFFO1FBQ1gsQ0FBQztRQUNEVCxNQUFNLEVBQUUsRUFBRU4saUJBQWlCLENBQUMsQ0FBQztRQUM3Qk8sTUFBTSxFQUFFLEVBQUVDLEtBQUssRUFBRXpCLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM3QixDQUFDO01BQ0QsTUFBTVMsR0FBRyxHQUFHRCxjQUFjLENBQUMsQ0FBQzs7TUFFNUIsTUFBTSxJQUFBZSxpQ0FBZSxFQUFDUCxHQUFHLEVBQVNQLEdBQVUsQ0FBQzs7TUFFN0NlLE1BQU0sQ0FBQ1YsaUJBQWlCLENBQUMsQ0FBQ1csb0JBQW9CO1FBQzVDLHlCQUF5QjtRQUN6QjtNQUNGLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wppconnect/server",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.9",
|
|
4
4
|
"description": "Projeto feito para autenticar a automomacao do WhatsappWeb com multi-clientes de forma dinamica. Backend feito em Nodejs(express, socketio), FrontEnd (ReactJS)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"author": "kingaspx",
|