oxygen-cli 1.29.0 → 1.29.1

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,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.29.1 (2023-07-26)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Invalid chrome-remote-interface require.
7
+
3
8
  ## v1.29.0 (2023-07-26)
4
9
 
5
10
  #### :tada: New Feature
@@ -19,7 +19,7 @@ const {
19
19
  EventEmitter
20
20
  } = require('events');
21
21
 
22
- const CDP = require('@oxygenhq/chrome-remote-interface');
22
+ const CDP = require('chrome-remote-interface');
23
23
 
24
24
  const CONNECT_RETRIES = 4;
25
25
  const CONNECT_SNOOZE_INTERVAL_MULT = 2;
@@ -963,4 +963,4 @@ class Debugger extends EventEmitter {
963
963
  }
964
964
 
965
965
  exports.default = Debugger;
966
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTIiwibWF4RmluZGVkRGVwdGgiLCJ0cmFuc2Zvcm1Ub0lERVN0eWxlIiwiZmlsZU5hbWUiLCJ1cmlJbmRleCIsImluZGV4T2YiLCJicERhdGEiLCJzdWJzdHJpbmciLCJ1cmkiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwidmFsaWRhdGVCcmVha3BvaW50IiwiYnJlYWtwb2ludCIsImJyT2JqIiwiYnJlYWtwb2ludElkIiwiYnJMaW5lTnVtYmVyIiwibG9jYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiYnJGaWxlTmFtZSIsIml0ZW1MaW5lTnVtYmVyIiwibXNnIiwibGluZSIsIkRlYnVnZ2VyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJfcGlkIiwiX3BvcnQiLCJ1bmRlZmluZWQiLCJfaG9zdCIsIl9icmVha3BvaW50cyIsIl9wZW5kaW5nQlAiLCJfcGF1c2VkIiwiX2NsaWVudCIsIl9maWxlTmFtZUFsaWFzZXMiLCJfYnJlYWtwb2ludEVycm9ycyIsInJlc2V0IiwiY2xvc2UiLCJnZXRQcm9wZXJ0aWVzQnlPYmplY3RJZCIsImVsbSIsImRhdGEiLCJfUnVudGltZSIsImdldFByb3BlcnRpZXMiLCJnZXRQcm9taWNlQWxsUmVzdWx0IiwibWFwUmVzdWx0RmlsdGVyZWQiLCJwcm9taXNlQWxsUHJvbWlzZSIsImFsbCIsInRoZW4iLCJmaWx0ZXIiLCJwcm9taXNlcyIsImdldFByb3BlcnRpZXNSZXN1bHQiLCJtYXBSZXN1bHQiLCJnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQiLCJzY29wZUl0ZW0iLCJvYmplY3RJZFJlc3BvbnNlIiwiY2hpbGQiLCJ2YWx1ZXMiLCJwcm9jZXNzU2NvcGUiLCJzY29wZUNoYWluIiwic2NvcGVDaGFpblJlc3VsdCIsImNoYWluIiwib2JqZWN0IiwidHlwZSIsImVsIiwicHJvY2Vzc0NhbGxGcmFtZXMiLCJjYWxsRnJhbWVzIiwiY2FsbEZyYW1lc01hcFJlc3VsdCIsImNhbGxGcmFtZSIsInByb2Nlc3NTY29wZVJlc3VsdCIsImluQnJlYWtwb2ludHMiLCJpdGVtVXJsIiwiYnAiLCJ0b0xvd2VyQ2FzZSIsIm9yaWdpbiIsInNjcmlwdFBhdGgiLCJpbkZpbGVOYW1lQWxpYXNlcyIsImFsaWFzIiwiY29udGludWVDb25uZWN0Iiwib24iLCJtIiwiZmlsZWxjIiwiYnJlYWtwb2ludEZvckNoYW5nZSIsImZpbmRSZXN1bHQiLCJmaW5kIiwiYnJlYWtwb2ludGxjIiwiaW5jbHVkZXMiLCJwdXNoIiwiX0RlYnVnZ2VyIiwicGF1c2UiLCJtVXJsIiwiYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24iLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCIsInNldEJyZWFrcG9pbnQiLCJyZXN1bWUiLCJyZWFzb24iLCJfYnJva2VPblN0YXJ0IiwicG9zc2libGVCcmVha3BvaW50c0RhdGEiLCJlQ2FsbEZyYW1lcyIsImJyZWFrcG9pbnRzTWFwUmVzdWx0Iiwic2NyaXB0SWQiLCJsb2NhdGlvbiIsImluaXRpYWxEZXB0aCIsInVuaXF1ZVNjcmlwdElkQXJyIiwiZmluZGVkIiwiZW5kc1dpdGgiLCJwb3NzaWJsZUJyZWFrcG9pbnRzIiwiZ2V0UG9zc2libGVCcmVha3BvaW50cyIsInNjcmlwdFNvdXJjZSIsImdldFNjcmlwdFNvdXJjZSIsInNjcmlwdFNvdXJjZVNwbGl0IiwiZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIiwiYnJlYWtwb2ludHMiLCJmaWxlIiwic2NvcGVDaGFpblRyZWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSIsImFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0TG9jYXRpb24iLCJzdGFydCIsInAiLCJwb3AiLCJzY29wZVZhciIsIm5hbWUiLCJ0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUiLCJvYmpWYWx1ZSIsImZvckVhY2giLCJwcm9wRGVzYyIsInBvRXZhbFJlc3VsdCIsImV2YWx1YXRlIiwiZXhwcmVzc2lvbiIsInJldHVybkJ5VmFsdWUiLCJlbnZFdmFsUmVzdWx0IiwidmFyc0V2YWxSZXN1bHQiLCJwYXJhbXNFdmFsUmVzdWx0IiwicmVzdWx0cyIsInBvIiwiZW52IiwidmFycyIsInBhcmFtcyIsImtleXMiLCJrZXkiLCJnZXRCcmVha3BvaW50cyIsImJwcyJdLCJtYXBwaW5ncyI6IkFBYUE7Ozs7Ozs7OztBQUVBOztBQUlBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLFVBQVAsQ0FBWjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBbUJDLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLG1DQUFELENBQW5COztBQUdBLE1BQU1FLGVBQWUsR0FBRyxDQUF4QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FDakMsU0FEaUMsRUFFakMsU0FGaUMsRUFHakMsUUFIaUMsRUFJakMsWUFKaUMsRUFLakMsV0FMaUMsQ0FBckM7QUFPQSxJQUFJQyxjQUFjLEdBQUcsQ0FBckI7O0FBRUEsTUFBTUMsbUJBQW1CLEdBQUlDLFFBQUQsSUFBYztBQUN0QyxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsT0FBakIsQ0FBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdILFFBQVEsQ0FB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Uy9FLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNOEosYUFBYSxHQUFHLEtBQUsxRixpQkFBTCxDQUF1QndGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZjZCLFVBQUFBLEdBQUcsQ0FBQzVHLElBQUosQ0FBUy9FLFVBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTzJMLEdBQVA7QUFDSDs7QUFuN0I4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVjggZGVidWdnZXIgY2xpZW50LlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignRGVidWdnZXInKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5jb25zdCBDRFAgPSByZXF1aXJlKCdAb3h5Z2VuaHEvY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnKTtcclxuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xyXG5cclxuY29uc3QgQ09OTkVDVF9SRVRSSUVTID0gNDtcclxuY29uc3QgQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVCA9IDI7XHJcbmNvbnN0IE1BWF9ERVBUSCA9IDU7XHJcbmNvbnN0IElHTk9SRV9TQ09QRV9DSEFJTl9WQVJJQUJMRVMgPSBbXHJcbiAgICAnZXhwb3J0cycsXHJcbiAgICAncmVxdWlyZScsXHJcbiAgICAnbW9kdWxlJyxcclxuICAgICdfX2ZpbGVuYW1lJyxcclxuICAgICdfX2Rpcm5hbWUnXHJcbl07XHJcbmxldCBtYXhGaW5kZWREZXB0aCA9IDA7XHJcblxyXG5jb25zdCB0cmFuc2Zvcm1Ub0lERVN0eWxlID0gKGZpbGVOYW1lKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHVyaUluZGV4ID0gZmlsZU5hbWUuaW5kZXhPZignZmlsZTonKTtcclxuICAgICAgICBjb25zdCBicERhdGEgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgdXJpSW5kZXgpO1xyXG4gICAgICAgIGxldCB1cmkgPSBmaWxlTmFtZS5zdWJzdHJpbmcodXJpSW5kZXgpO1xyXG4gICAgICAgIC8vIGZpeCBVTkMgcGF0aHNcclxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiB1cmkuc3RhcnRzV2l0aCgnZmlsZTovLy8nKSkge1xyXG4gICAgICAgICAgICB1cmkgPSAnZmlsZTovLycgKyB1cmkuc3Vic3RyaW5nKCdmaWxlOi8vLycubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJwRGF0YSArIHVybC5maWxlVVJMVG9QYXRoKHVyaSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RyYW5zZm9ybVRvSURFU3R5bGUgZmlsZU5hbWUnLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcigndHJhbnNmb3JtVG9JREVTdHlsZSBlcnJvcicsIGUpO1xyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuY29uc3QgZGVsZXRlVmFsdWVzID0gKGFyciwgZGVwdGgpID0+IHtcclxuXHJcbiAgICBpZiAoZGVwdGggPiBtYXhGaW5kZWREZXB0aCkge1xyXG4gICAgICAgIG1heEZpbmRlZERlcHRoID0gZGVwdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlcHRoID4gTUFYX0RFUFRIKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQgPSBhcnIubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSAmJiBpdGVtLnZhbHVlLmNsYXNzTmFtZSA9PT0gJ0Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9uZVZhbHVlID0gT2JqZWN0LmFzc2lnbihpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lVmFsdWUub2JqZWN0SWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmFzc2lnbihpdGVtLCB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2xvbmVWYWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVsZXRlIGNsb25lLm9iamVjdElkO1xyXG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RCcmVha3BvaW50RGF0YShicFN0cikge1xyXG4gICAgaWYgKCFicFN0ciB8fCB0eXBlb2YgYnBTdHIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBicFN0ciA9IHRyYW5zZm9ybVRvSURFU3R5bGUoYnBTdHIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYnBTdHIuc3BsaXQoJzonKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKTtcclxuXHJcbiAgICAgICAgLy8gcm9tb3ZlIGZpbGUgbnVtYmVyLCBsaW5lIG51bWJlciwgY29sdW1uIG51bWJlclxyXG4gICAgICAgIHBhcnRzLnNwbGljZSgwLCAzKTtcclxuXHJcbiAgICAgICAgLy8gbG9va3MgbGluZSBuZWVkIG9ubHkgZm9yIHdpbmRvd3MgcGF0aCB3aGl0aCBkaXNrLCBsaWtlIEM6Ly9cclxuICAgICAgICAvLyBmb3Igd2luZG93cyBuZXR3b3JrIGZvbGRlcnMgYW5kIG1hYyBub3QgbmVlZFxyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHMuam9pbignOicpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBleHRyYWN0IGJyZWFrcG9pbnQgZGF0YTogJHticFN0cn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQpIHtcclxuICAgIGNvbnN0IGJyT2JqID0gZXh0cmFjdEJyZWFrcG9pbnREYXRhKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkKTtcclxuXHJcbiAgICBjb25zdCBickxpbmVOdW1iZXIgPSBick9iai5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xyXG5cclxuICAgIGlmIChicmVha3BvaW50ICYmIGJyZWFrcG9pbnQubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludC5sb2NhdGlvbnMpICYmIGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnJGaWxlTmFtZSA9IGJyT2JqLmZpbGVOYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtTGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEgYmFzZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChickxpbmVOdW1iZXIgIT09IGl0ZW1MaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBgQnJlYWtwb2ludHMgd2FybmluZyA6ICR7YnJGaWxlTmFtZX0gRG9uJ3QgaGF2ZSBvcHBvcnR1bml0eSB0byBoYXZlIGJyZWFrcG9pbnQgYXQgbGluZSA6IGAsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGJyRmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZTogYnJMaW5lTnVtYmVyXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxufVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWJ1Z2dlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwaWQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0JQID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzID0gW107XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGllbnQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7fTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZ2V0UHJvcGVydGllcyh7XHJcbiAgICAgICAgICAgICAgICBvYmplY3RJZCA6IG9iamVjdElkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZWxtJywgZWxtKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2dldFByb3BlcnRpZXMgZScsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2xvbmUgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lICYmIGNsb25lICYmIGNsb25lLnJlc3VsdCkge1xyXG4gICAgICAgICAgICBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGNsb25lLCB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVZhbHVlcyhjbG9uZS5yZXN1bHQsIGRlcHRoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQcm9taWNlQWxsUmVzdWx0KG1hcFJlc3VsdEZpbHRlcmVkKSB7XHJcbiAgICAgICAgbGV0IHByb21pc2VBbGxQcm9taXNlID0gYXdhaXQgUHJvbWlzZS5hbGwobWFwUmVzdWx0RmlsdGVyZWQpLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHByb21pc2VBbGxQcm9taXNlID0gcHJvbWlzZUFsbFByb21pc2UuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHByb21pc2VBbGxQcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb3BlcnRpZXMob2JqZWN0SWQsIGRlcHRoLCBlbG0pIHtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBnZXRQcm9wZXJ0aWVzUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzQnlPYmplY3RJZChvYmplY3RJZCwgZGVwdGgsIGVsbSk7XHJcblxyXG4gICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChnZXRQcm9wZXJ0aWVzUmVzdWx0ICYmIGdldFByb3BlcnRpZXNSZXN1bHQucmVzdWx0ICYmIEFycmF5LmlzQXJyYXkoZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0ID0gZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLm9iamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNJbm5lclJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhpdGVtLnZhbHVlLm9iamVjdElkLCBkZXB0aCsxLCBpdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNjb3BlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwUmVzdWx0RmlsdGVyZWQgPSBtYXBSZXN1bHQuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1hcFJlc3VsdEZpbHRlcmVkICYmIEFycmF5LmlzQXJyYXkobWFwUmVzdWx0RmlsdGVyZWQpICYmIG1hcFJlc3VsdEZpbHRlcmVkLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCB0aGlzLmdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZUFsbFByb21pc2UgJiYgQXJyYXkuaXNBcnJheShwcm9taXNlQWxsUHJvbWlzZSkgJiYgcHJvbWlzZUFsbFByb21pc2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGQgPSBwcm9taXNlQWxsUHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogZGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdElkUmVzcG9uc2U6IE9iamVjdC5hc3NpZ24oe30sIGdldFByb3BlcnRpZXNSZXN1bHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWQ6IG9iamVjdElkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc1Njb3BlKHNjb3BlQ2hhaW4sIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IHNjb3BlQ2hhaW5SZXN1bHQgPSBhd2FpdCBzY29wZUNoYWluLm1hcChhc3luYyAoY2hhaW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoYWluICYmIGNoYWluLm9iamVjdCAmJiBjaGFpbi5vYmplY3Qub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hhaW4ub2JqZWN0Lm9iamVjdElkID09PSAnc3RyaW5nJyAmJiBjaGFpbi50eXBlICE9PSAnZ2xvYmFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXMoY2hhaW4ub2JqZWN0Lm9iamVjdElkLCBkZXB0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjb3BlQ2hhaW5SZXN1bHQgPSBzY29wZUNoYWluUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoc2NvcGVDaGFpblJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGRlcHRoKSB7XHJcbiAgICAgICAgbGV0IGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBhd2FpdCBjYWxsRnJhbWVzLm1hcChhc3luYyhjYWxsRnJhbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUuc2NvcGVDaGFpbiAmJiBBcnJheS5pc0FycmF5KGNhbGxGcmFtZS5zY29wZUNoYWluKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1Njb3BlUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzU2NvcGUoY2FsbEZyYW1lLnNjb3BlQ2hhaW4sIGRlcHRoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NvcGVSZXN1bHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gY2FsbEZyYW1lc01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGNhbGxGcmFtZXNNYXBSZXN1bHQpLnRoZW4odmFsdWVzID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpbkJyZWFrcG9pbnRzKGl0ZW1VcmwpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmIHRoaXMuX2JyZWFrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtVXJsLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aC50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UoKSA9PT0gYnAub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW5GaWxlTmFtZUFsaWFzZXMoZmlsZU5hbWUpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVOYW1lQWxpYXNlcyAmJiBBcnJheS5pc0FycmF5KHRoaXMuX2ZpbGVOYW1lQWxpYXNlcykgJiYgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLm1hcCgoYWxpYXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBhbGlhcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZS50b0xvd2VyQ2FzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnRvTG93ZXJDYXNlKCkgPT09IGZpbGVOYW1lLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsaWFzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZUNvbm5lY3QoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudC5vbignRGVidWdnZXIuc2NyaXB0UGFyc2VkJywgYXN5bmMobSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG0udXJsLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZWxjID0gbS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludEZvckNoYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kUmVzdWx0ID0gdGhpcy5fYnJlYWtwb2ludHMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5vcmlnaW4gJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50bGMgPSBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRsYyA9PT0gZmlsZWxjICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGggIT09IG0udXJsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlTmFtZUFsaWFzZXMuaW5jbHVkZXMobS51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVOYW1lQWxpYXNlcy5wdXNoKG0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludDogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVybDogbS51cmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLm1hcCgoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UubVVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCA9PT0gYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbi5zY3JpcHRQYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBicC5vcmlnaW4ubGluZU51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiAmJiBBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uKSAmJiBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbi5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRCcmVha3BvaW50KGJwLnNjcmlwdFBhdGgsIGJwLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb25SZXN1bHQgPSBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCkudGhlbihhc3luYyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlc3VtZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ0JyZWFrIG9uIHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYnJva2VPblN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIENocm9tZSBkZWJ1Z2dlciBkb2Vzbid0IHNlZW0gdG8gcmVtb3ZlIGJyZWFrcG9pbnRzIHdoZW4gdXNpbmcgcmVtb3ZlQnJlYWtwb2ludFxyXG4gICAgICAgICAgICAgICAgLy8gYW5kICdzb21ldGhpbmcnIGlzIHN0aWxsIGdldHRpbmcgaGl0LiBub3QgY2xlYXIgd2h5IHRoaXMgaXMgaGFwcGVuaW5nLlxyXG4gICAgICAgICAgICAgICAgLy8gdGh1cywgd2UgZW1pdCBicmVhayBldmVudCBvbmx5IGlmIG1hdGNoaW5nIGJyZWFrcG9pbnQgc3RpbGwgZXhpc3RzIGluIHRoaXMuX2JyZWFrcG9pbnRzXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50c0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBlQ2FsbEZyYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBlLmNhbGxGcmFtZXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsICYmIHRoaXMuaW5CcmVha3BvaW50cyhpdGVtLnVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5tYXAoYXN5bmMoYnApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVDYWxsRnJhbWVzWzBdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9uc1swXS5zY3JpcHRJZCA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24uc2NyaXB0SWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zWzBdLmxpbmVOdW1iZXIgPT09IGVDYWxsRnJhbWVzWzBdLmxvY2F0aW9uLmxpbmVOdW1iZXIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEZXB0aCA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmNhbGxGcmFtZXMgJiYgQXJyYXkuaXNBcnJheShlLmNhbGxGcmFtZXMpICYmIGUuY2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVTY3JpcHRJZEFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbEZyYW1lcyA9IGUuY2FsbEZyYW1lcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kZWQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChicmVha3BvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuYnJlYWtwb2ludElkLmVuZHNXaXRoKGl0ZW0udXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5sb2NhdGlvbiAmJiBpdGVtLmxvY2F0aW9uLnNjcmlwdElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVNjcmlwdElkQXJyLmluY2x1ZGVzKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTY3JpcHRJZEFyci5wdXNoKGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lcy5tYXAoYXN5bmMoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuZ2V0UG9zc2libGVCcmVha3BvaW50cyhpdGVtLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlID0gYXdhaXQgdGhpcy5nZXRTY3JpcHRTb3VyY2UoaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2VTcGxpdCA9IHNjcmlwdFNvdXJjZS5zY3JpcHRTb3VyY2Uuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHRTb3VyY2VTcGxpdCAmJiBBcnJheS5pc0FycmF5KHNjcmlwdFNvdXJjZVNwbGl0KSAmJiBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTGluZU51bWJlcnNMZW5ndGggPSBzY3JpcHRTb3VyY2VTcGxpdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzZWUgaG93IGRlYmJ1Z2VyIHNlZSBzY3JpcHRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JpcHRTb3VyY2VTcGxpdC5tYXAoKHNjcmlwdFNvdXJjZUl0ZW0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKChpZHgpICsgJyAnICsgc2NyaXB0U291cmNlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50czogcG9zc2libGVCcmVha3BvaW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGl0ZW0udXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUxpbmVOdW1iZXJzTGVuZ3RoOiBmaWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRTY3JpcHRTb3VyY2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYWxsRnJhbWVzTWFwUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzQ2FsbEZyYW1lcyhjYWxsRnJhbWVzLCBpbml0aWFsRGVwdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBjYWxsRnJhbWVzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsRnJhbWVzTWFwUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludHNNYXBSZXN1bHQgPSBicmVha3BvaW50c01hcFJlc3VsdC5maWx0ZXIoKGVsKSA9PiAhIWVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChicmVha3BvaW50c01hcFJlc3VsdCkudGhlbihhc3luYyAoc2NvcGVDaGFpblRyZWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVDaGFpblRyZWUgJiYgQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZSkgJiYgc2NvcGVDaGFpblRyZWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNoYWluVHJlZSA9IHNjb3BlQ2hhaW5UcmVlLmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnJlYWtwb2ludERhdGEgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHdlIGFsd2F5cyBzZW5kIGJyZWFrcG9pbnQgb2YgdGhlIHRvcCBjYWxsIGZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlQ2FsbEZyYW1lcyAmJiBlQ2FsbEZyYW1lcy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24ubGluZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogdHJhbnNmb3JtVG9JREVTdHlsZShlQ2FsbEZyYW1lc1swXS51cmwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkVmFyaWFibGVzRnJvbVNjb3BlQ2hhaW5UcmVlKGJyZWFrcG9pbnREYXRhLnZhcmlhYmxlcywgc2NvcGVDaGFpblRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRPeHlnZW5WYXJpYWJsZXNGcm9tR2xvYmFsU2NvcGUoYnJlYWtwb2ludERhdGEudmFyaWFibGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50RXJyb3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNzZXQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3JpZ2luLmxpbmVOdW1iZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaXRlbS5vcmlnaW4ubGluZU51bWJlcikrMSA9PT0gcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0ubG9jYXRpb25zKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxvY2F0aW9ucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zLmZpbmQobG9jID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChsb2MubGluZU51bWJlcikgPT09IHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpdGVtLm9yaWdpbi5saW5lTnVtYmVyKSAhPT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKSAhPT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxCcmZpbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMubWFwKChicmVha3BvaW50RXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5fYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyRmlsZU5hbWUgPSB0cmFuc2Zvcm1Ub0lERVN0eWxlKGJyLm9yaWdpbi5zY3JpcHRQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgPSBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmZpbGUgPT09IGVDYWxsRnJhbWVzWzBdLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyRmlsZU5hbWUgPT09IGJyZWFrcG9pbnREYXRhLmZpbGVOYW1lICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKzEgPT09IGJyLm9yaWdpbi5saW5lTnVtYmVyIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBici5vcmlnaW4ubGluZU51bWJlcisxID09PSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxCcmZpbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFsQnJmaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludERhdGEucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvc3NpYmxlQnJlYWtwb2ludERhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhID0gcG9zc2libGVCcmVha3BvaW50c0RhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5maWxlID09PSBlQ2FsbEZyYW1lc1swXS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKzEgPj0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5saW5lTnVtYmVyID0gcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggLSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrJywgYnJlYWtwb2ludERhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50RXJyb3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5tYXAoKGJyZWFrcG9pbnRFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IuZmlsZU5hbWUgJiYgYnJlYWtwb2ludEVycm9yLmxpbmUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZ25vcmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSAmJiBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJiBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5tYXAoKGl0ZW0pID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5maWxlID0gdHJhbnNmb3JtVG9JREVTdHlsZShpdGVtLmZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5maWxlID09PSBicmVha3BvaW50RXJyb3IuZmlsZU5hbWUgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnREYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpdGVtLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yLmxpbmUgPj0gaXRlbS5maWxlTGluZU51bWJlcnNMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBicmVha3BvaW50RXJyb3IubGluZSAtIDI7IC8vIC8vIyBzb3VyY2VNYXBwaW5nVVJMIGFuZCB9LmNhbGwodGhpcywgZXhwb3J0cywgcmVxdWlyZSwgbW9kdWxlLCBfX2ZpbGVuYW1lLCBfX2Rpcm5hbWUpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBicmVha3BvaW50RXJyb3IubGluZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYnJlYWtwb2ludHMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmJyZWFrcG9pbnRzKSAmJiBpdGVtLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IubXNnLmluY2x1ZGVzKCdQb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYnJlYWtwb2ludHMuaW5jbHVkZXMobGluZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGJyZWFrcG9pbnRFcnJvci5tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAke2xpbmV9LiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSBgIFBvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMgOiAke2l0ZW0uYnJlYWtwb2ludHMubWFwKChsaW5lKSA9PiBsaW5lKS5qb2luKCcsICcpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludEVycm9yICYmIGJyZWFrcG9pbnRFcnJvci5tc2cgJiYgYnJlYWtwb2ludEVycm9yLm1zZy5pbmNsdWRlcygncG9zc2libGUgYnJlYWtwb2ludCBsaW5lcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGJyZWFrcG9pbnRFcnJvci5tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAke2xpbmV9LiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnIEZpbGUgZG9uXFwndCBoYXZlIHBvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrRXJyb3InLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGJyZWFrcG9pbnRFcnJvci5saW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBicmVha3BvaW50RXJyb3IuZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5yZWFzb24gPT09ICdPT00nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXQgb2YgbWVtb3J5IGxlYWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGludWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9LCByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdicmVha3BvaW50c01hcFJlc3VsdCByZXMgcmVhc29uJyAsIHJlYXNvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5icmVha3BvaW50UmVzb2x2ZWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB7IERlYnVnZ2VyLCBSdW50aW1lIH0gPSB0aGlzLl9jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5fRGVidWdnZXIgPSBEZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLl9SdW50aW1lID0gUnVudGltZTtcclxuICAgICAgICBSdW50aW1lLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLmVuYWJsZSgpO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zKHsgc3RhdGU6ICdub25lJyB9KTtcclxuICAgICAgICBEZWJ1Z2dlci5zZXRBc3luY0NhbGxTdGFja0RlcHRoKHsgbWF4RGVwdGg6IDMyIH0pO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldEJsYWNrYm94UGF0dGVybnMoeyBwYXR0ZXJuczogW10gfSk7XHJcbiAgICAgICAgLy8gb25seSB1c2UgJ2F3YWl0JyBmb3IgdGhlIGxhc3QgY2FsbCwgYWxsIHByZXZpb3VzIGNhbGwgdG8gRGVidWdnZXIgb3IgUnVudGltZSB3aWxsIHN0YWNrIG90aGVyd2lzZVxyXG4gICAgICAgIGF3YWl0IFJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoKTtcclxuICAgICAgICAvLyBhd2FpdCBmb3IgdGhlIGZpcnN0IGJyZWFrcG9pbnQgd2hpY2ggaXMgcGxhY2VkIGJ5IHRoZSBkZWJ1Z2dlciBhdXRvbWF0aWNhbGx5IFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnBhdXNlZCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJyZWFrcG9pbnRSZXNvbHZlZChlKSB7XHJcbiAgICAgICAgLy8gYnJlYWtwb2ludHMgc2V0IGJlZm9yZSB0aGUgc2NyaXB0IHdhcyBsb2FkZWQgd2lsbCBiZSByZXNvbHZlZCBvbmNlIGl0IGxvYWRzXHJcbiAgICAgICAgZm9yICh2YXIgYnAgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgYnAgJiZcclxuICAgICAgICAgICAgICAgIGUgJiZcclxuICAgICAgICAgICAgICAgIGJwLmJyZWFrcG9pbnRJZCA9PT0gZS5icmVha3BvaW50SWRcclxuICAgICAgICAgICAgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCBlLmxvY2F0aW9uICkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmVkIG9uIHJ1bnRpbWVcclxuICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgPSBbZS5sb2NhdGlvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVSZXN1bHQgPSB2YWxpZGF0ZUJyZWFrcG9pbnQoYnApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZS5sb2NhdGlvbnMgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcGF1c2VcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlQnJlYWtwb2ludChicCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5wdXNoKHZhbGlkYXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lY3RzIHRvIGEgZGVidWdnZXIuIERvZXMgbm90aGluZyBpZiBhbHJlYWR5IGNvbm5lY3RlZC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gRGVidWdnZXIgcG9ydC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY29ubmVjdChwb3J0LCBob3N0KSB7XHJcbiAgICAgICAgdGhpcy5fcG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgdGhpcy5faG9zdCA9IGhvc3QgfHwgJ2xvY2FsaG9zdCc7XHJcblxyXG4gICAgICAgIGxldCBzbm9vemVUaW1lID0gMTAwMDtcclxuICAgICAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmV0cmllcyA9IDA7IHJldHJpZXMgPCBDT05ORUNUX1JFVFJJRVM7IHJldHJpZXMrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gYXdhaXQgQ0RQKHsgcG9ydDogdGhpcy5fcG9ydCwgaG9zdDogdGhpcy5faG9zdCB9KTtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbG9nLndhcm4oYERlYnVnZ2VyIGNvbm5lY3Rpb24gZmFpbGVkLiBXaWxsIHJldHJ5IGluICR7c25vb3plVGltZS8xMDAwfXMuIEVycm9yOiBgLCBsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoc25vb3plVGltZSk7XHJcbiAgICAgICAgICAgIHNub296ZVRpbWUgKj0gQ09OTkVDVF9TTk9PWkVfSU5URVJWQUxfTVVMVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29udGludWVDb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYnJlYWtwb2ludCBmb3IgYSBwYXJ0aWN1bGFyIHNjcmlwdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBTY3JpcHQgcGF0aC5cclxuICAgICAqIEBwYXJhbSB7SW50ZWdlcn0gTGluZSBudW1iZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEJyZWFrcG9pbnQoc2NyaXB0UGF0aCwgbGluZU51bWJlcikge1xyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IHNjcmlwdFBhdGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGFsaWFzUmVzdWx0ID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmIChhbGlhc1Jlc3VsdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGFsaWFzUmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZmlsZU5hbWUgPSB1cmwucGF0aFRvRmlsZVVSTChmaWxlTmFtZSkudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgZXJyID0gbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IGJyZWFrcG9pbnQgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50QnlVcmwoe1xyXG4gICAgICAgICAgICB1cmw6IGZpbGVOYW1lLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLTEsIC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxyXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXI6IDBcclxuICAgICAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgZXJyID0gZTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCBhbiBsYXJlYWR5IGV4aXN0aW5nIGJyZWFrcG9pbnRcclxuICAgICAgICAgICAgaWYgKCFlLnJlc3BvbnNlIHx8IGUucmVzcG9uc2UubWVzc2FnZSAhPT0gJ0JyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luID0ge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0UGF0aDogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBicmVhY2twb2ludCByZXNvbHZlZCBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYnJlYWtwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRCcmVha3BvaW50c0FjdGl2ZShhY3RpdmUpIHtcclxuICAgICAgICBpZiAodGhpcy5fRGVidWdnZXIgJiYgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHsnYWN0aXZlJzogYWN0aXZlfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKSB7XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50cy5maWx0ZXIoKGJwKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBicC5icmVha3BvaW50SWQgIT09IGJyZWFrcG9pbnRJZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlQnIgPSB7IGJyZWFrcG9pbnRJZDogYnJlYWtwb2ludElkIH07XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KHJlbW92ZUJyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlc3VtZVRlcm1pbmF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIuZGlzYWJsZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGlucHV0TGluZSkge1xyXG5cclxuICAgICAgICBjb25zdCBmaWxlUGF0aEFsaWFzID0gdGhpcy5pbkZpbGVOYW1lQWxpYXNlcyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBpbnB1dExpbmUgLSAxOyAvLyBmcm9tIDEtYmFzZSB0byAwLWJhc2VcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIgJiYgYi5icmVha3BvaW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBiLmJyZWFrcG9pbnRJZC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHsgLy8gcGF0aCBtYXkgY29udGFpbiBhIERyaXZlIGxldHRlciBvbiB3aW4zMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl0gKyAnOicgKyBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZU5hbWUgPT09IGZpbGVQYXRoIHx8IGZpbGVOYW1lID09PSBmaWxlUGF0aEFsaWFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGluZU51bWJlciA9PT0gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgd2hlbiB3b3JrIHdpdGggYnJlYWtwb2ludCBkYXRhOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbGVhckJyZWFrcG9pbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzZWxmLnJlbW92ZUJyZWFrcG9pbnQoYi5icmVha3BvaW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBvc3NpYmxlQnJlYWtwb2ludHMoc3RhcnRMb2NhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlQnJlYWtwb2ludHMgPSBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5nZXRQb3NzaWJsZUJyZWFrcG9pbnRzKHtcclxuICAgICAgICAgICAgc3RhcnQ6IHtcclxuICAgICAgICAgICAgICAgIHNjcmlwdElkOiBzdGFydExvY2F0aW9uLnNjcmlwdElkLFxyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogMCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwb3NzaWJsZUJyZWFrcG9pbnRzICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zICYmIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMpICYmIHBvc3NpYmxlQnJlYWtwb2ludHMubG9jYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbS5saW5lTnVtYmVyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBpdGVtLmxpbmVOdW1iZXIgKyAxOyAvLyBmcm9tIDAtYmFzZSB0byAxLWJhc2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhsaW5lTnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcCA9IHJlc3VsdC5wb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZXMocC0xKSkge1xyXG4gICAgICAgICAgICAgICAgLy9pbmdvcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwLTEgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIuZ2V0U2NyaXB0U291cmNlKHsgc2NyaXB0SWQ6IHNjcmlwdElkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRWYXJpYWJsZXNGcm9tU2NvcGVDaGFpblRyZWUodmFyaWFibGVzLCBzY29wZUNoYWluVHJlZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc2NvcGVDaGFpblRyZWUpXHJcbiAgICAgICAgICAgIHx8IHNjb3BlQ2hhaW5UcmVlLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdKVxyXG4gICAgICAgICAgICB8fCBzY29wZUNoYWluVHJlZVswXS5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICB8fCAhQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZVswXVswXSlcclxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWVbMF1bMF0ubGVuZ3RoID09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IG9iamVjdElkUmVzcG9uc2UgfSA9IHNjb3BlQ2hhaW5UcmVlWzBdWzBdWzBdO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBvYmplY3RJZFJlc3BvbnNlO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGVWYXIgb2YgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmICghSUdOT1JFX1NDT1BFX0NIQUlOX1ZBUklBQkxFUy5pbmNsdWRlcyhzY29wZVZhci5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHR5cGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGVWYXIgJiYgc2NvcGVWYXIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gc2NvcGVWYXIudmFsdWUudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGVWYXIudmFsdWUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY29wZVZhci52YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKHNjb3BlVmFyLnZhbHVlLm9iamVjdElkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogc2NvcGVWYXIubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlIHx8ICd1bmRlZmluZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdHJ5VG9SZXRyaWV2ZU9iamVjdFZhbHVlKG9iamVjdElkKSB7XHJcbiAgICAgICAgaWYgKCFvYmplY3RJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5nZXRQcm9wZXJ0aWVzKHsgb2JqZWN0SWQgfSk7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ialZhbHVlID0ge307XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChwcm9wRGVzYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BEZXNjLnZhbHVlICYmIHByb3BEZXNjLnZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialZhbHVlW3Byb3BEZXNjLm5hbWVdID0gcHJvcERlc2MudmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUnVudGltZS5nZXRQcm9wZXJ0aWVzIGNhbGwgZmFpbGVkJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkT3h5Z2VuVmFyaWFibGVzRnJvbUdsb2JhbFNjb3BlKHZhcmlhYmxlcykge1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBwb0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAncG8nLCByZXR1cm5CeVZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBlbnZFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ2VudicsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHZhcnNFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ3ZhcnMnLCByZXR1cm5CeVZhbHVlOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IHsgcmVzdWx0OiBwYXJhbXNFdmFsUmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbjogJ3BhcmFtcycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHtcclxuICAgICAgICAgICAgcG86IHBvRXZhbFJlc3VsdCxcclxuICAgICAgICAgICAgZW52OiBlbnZFdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICB2YXJzOiB2YXJzRXZhbFJlc3VsdCxcclxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNFdmFsUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgYnBzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYiBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgICAgICAgbGV0IGxpbmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgeyAvLyBwYXRoIG1heSBjb250YWluIGEgRHJpdmUgbGV0dGVyIG9uIHdpbjMyXHJcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0yXSArICc6JyArIHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSkrMTsgLy9mcm9tIDAtYmFzZSB0byAxLWJhc2VcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT09IGZpbGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlUGF0aEFsaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnBzLnB1c2gobGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJwcztcclxuICAgIH1cclxufVxyXG4iXX0=
966
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZGVidWdnZXIuanMiXSwibmFtZXMiOlsibG9nIiwiRXZlbnRFbWl0dGVyIiwicmVxdWlyZSIsIkNEUCIsIkNPTk5FQ1RfUkVUUklFUyIsIkNPTk5FQ1RfU05PT1pFX0lOVEVSVkFMX01VTFQiLCJNQVhfREVQVEgiLCJJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTIiwibWF4RmluZGVkRGVwdGgiLCJ0cmFuc2Zvcm1Ub0lERVN0eWxlIiwiZmlsZU5hbWUiLCJ1cmlJbmRleCIsImluZGV4T2YiLCJicERhdGEiLCJzdWJzdHJpbmciLCJ1cmkiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwidXJsIiwiZmlsZVVSTFRvUGF0aCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImRlbGV0ZVZhbHVlcyIsImFyciIsImRlcHRoIiwicmVzdWx0IiwibWFwIiwiaXRlbSIsInZhbHVlIiwiY2xhc3NOYW1lIiwiY2xvbmVWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIm9iamVjdElkIiwiY2xvbmUiLCJleHRyYWN0QnJlYWtwb2ludERhdGEiLCJicFN0ciIsInBhcnRzIiwic3BsaXQiLCJsaW5lTnVtYmVyIiwicGFyc2VJbnQiLCJzcGxpY2UiLCJqb2luIiwidmFsaWRhdGVCcmVha3BvaW50IiwiYnJlYWtwb2ludCIsImJyT2JqIiwiYnJlYWtwb2ludElkIiwiYnJMaW5lTnVtYmVyIiwibG9jYXRpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiYnJGaWxlTmFtZSIsIml0ZW1MaW5lTnVtYmVyIiwibXNnIiwibGluZSIsIkRlYnVnZ2VyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJfcGlkIiwiX3BvcnQiLCJ1bmRlZmluZWQiLCJfaG9zdCIsIl9icmVha3BvaW50cyIsIl9wZW5kaW5nQlAiLCJfcGF1c2VkIiwiX2NsaWVudCIsIl9maWxlTmFtZUFsaWFzZXMiLCJfYnJlYWtwb2ludEVycm9ycyIsInJlc2V0IiwiY2xvc2UiLCJnZXRQcm9wZXJ0aWVzQnlPYmplY3RJZCIsImVsbSIsImRhdGEiLCJfUnVudGltZSIsImdldFByb3BlcnRpZXMiLCJnZXRQcm9taWNlQWxsUmVzdWx0IiwibWFwUmVzdWx0RmlsdGVyZWQiLCJwcm9taXNlQWxsUHJvbWlzZSIsImFsbCIsInRoZW4iLCJmaWx0ZXIiLCJwcm9taXNlcyIsImdldFByb3BlcnRpZXNSZXN1bHQiLCJtYXBSZXN1bHQiLCJnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQiLCJzY29wZUl0ZW0iLCJvYmplY3RJZFJlc3BvbnNlIiwiY2hpbGQiLCJ2YWx1ZXMiLCJwcm9jZXNzU2NvcGUiLCJzY29wZUNoYWluIiwic2NvcGVDaGFpblJlc3VsdCIsImNoYWluIiwib2JqZWN0IiwidHlwZSIsImVsIiwicHJvY2Vzc0NhbGxGcmFtZXMiLCJjYWxsRnJhbWVzIiwiY2FsbEZyYW1lc01hcFJlc3VsdCIsImNhbGxGcmFtZSIsInByb2Nlc3NTY29wZVJlc3VsdCIsImluQnJlYWtwb2ludHMiLCJpdGVtVXJsIiwiYnAiLCJ0b0xvd2VyQ2FzZSIsIm9yaWdpbiIsInNjcmlwdFBhdGgiLCJpbkZpbGVOYW1lQWxpYXNlcyIsImFsaWFzIiwiY29udGludWVDb25uZWN0Iiwib24iLCJtIiwiZmlsZWxjIiwiYnJlYWtwb2ludEZvckNoYW5nZSIsImZpbmRSZXN1bHQiLCJmaW5kIiwiYnJlYWtwb2ludGxjIiwiaW5jbHVkZXMiLCJwdXNoIiwiX0RlYnVnZ2VyIiwicGF1c2UiLCJtVXJsIiwiYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24iLCJicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCIsInNldEJyZWFrcG9pbnQiLCJyZXN1bWUiLCJyZWFzb24iLCJfYnJva2VPblN0YXJ0IiwicG9zc2libGVCcmVha3BvaW50c0RhdGEiLCJlQ2FsbEZyYW1lcyIsImJyZWFrcG9pbnRzTWFwUmVzdWx0Iiwic2NyaXB0SWQiLCJsb2NhdGlvbiIsImluaXRpYWxEZXB0aCIsInVuaXF1ZVNjcmlwdElkQXJyIiwiZmluZGVkIiwiZW5kc1dpdGgiLCJwb3NzaWJsZUJyZWFrcG9pbnRzIiwiZ2V0UG9zc2libGVCcmVha3BvaW50cyIsInNjcmlwdFNvdXJjZSIsImdldFNjcmlwdFNvdXJjZSIsInNjcmlwdFNvdXJjZVNwbGl0IiwiZmlsZUxpbmVOdW1iZXJzTGVuZ3RoIiwiYnJlYWtwb2ludHMiLCJmaWxlIiwic2NvcGVDaGFpblRyZWUiLCJicmVha3BvaW50RGF0YSIsInZhcmlhYmxlcyIsImFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSIsImFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZSIsImlzc2V0IiwibG9jIiwicmVhbEJyZmluZGVkIiwiYnJlYWtwb2ludEVycm9yIiwiYnIiLCJwb3NzaWJsZUJyZWFrcG9pbnREYXRhIiwicmVzb2x2ZWQiLCJlbWl0IiwiaWdub3JlIiwibWVzc2FnZSIsImNvbnRpbnVlIiwib25CcmVha3BvaW50UmVzb2x2ZWQiLCJSdW50aW1lIiwiZW5hYmxlIiwic2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCJzdGF0ZSIsInNldEFzeW5jQ2FsbFN0YWNrRGVwdGgiLCJtYXhEZXB0aCIsInNldEJsYWNrYm94UGF0dGVybnMiLCJwYXR0ZXJucyIsInJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyIiwicGF1c2VkIiwidmFsaWRhdGVSZXN1bHQiLCJjb25uZWN0IiwicG9ydCIsImhvc3QiLCJzbm9vemVUaW1lIiwibGFzdEVycm9yIiwicmV0cmllcyIsIndhcm4iLCJhbGlhc1Jlc3VsdCIsInBhdGhUb0ZpbGVVUkwiLCJ0b1N0cmluZyIsImVyciIsInNldEJyZWFrcG9pbnRCeVVybCIsImNvbHVtbk51bWJlciIsImNhdGNoIiwicmVzcG9uc2UiLCJzZXRCcmVha3BvaW50c0FjdGl2ZSIsImFjdGl2ZSIsInJlbW92ZUJyZWFrcG9pbnQiLCJyZW1vdmVCciIsInJlc3VtZVRlcm1pbmF0ZSIsImRpc2FibGUiLCJyZW1vdmVCcmVha3BvaW50QnlWYWx1ZSIsImZpbGVQYXRoIiwiaW5wdXRMaW5lIiwiZmlsZVBhdGhBbGlhcyIsInNlbGYiLCJiIiwiY2xlYXJCcmVha3BvaW50cyIsInN0YXJ0TG9jYXRpb24iLCJzdGFydCIsInAiLCJwb3AiLCJzY29wZVZhciIsIm5hbWUiLCJ0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUiLCJvYmpWYWx1ZSIsImZvckVhY2giLCJwcm9wRGVzYyIsInBvRXZhbFJlc3VsdCIsImV2YWx1YXRlIiwiZXhwcmVzc2lvbiIsInJldHVybkJ5VmFsdWUiLCJlbnZFdmFsUmVzdWx0IiwidmFyc0V2YWxSZXN1bHQiLCJwYXJhbXNFdmFsUmVzdWx0IiwicmVzdWx0cyIsInBvIiwiZW52IiwidmFycyIsInBhcmFtcyIsImtleXMiLCJrZXkiLCJnZXRCcmVha3BvaW50cyIsImJwcyJdLCJtYXBwaW5ncyI6IkFBYUE7Ozs7Ozs7OztBQUVBOztBQUlBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLFVBQVAsQ0FBWjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBbUJDLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsT0FBTyxDQUFDLHlCQUFELENBQW5COztBQUdBLE1BQU1FLGVBQWUsR0FBRyxDQUF4QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLENBQXJDO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FDakMsU0FEaUMsRUFFakMsU0FGaUMsRUFHakMsUUFIaUMsRUFJakMsWUFKaUMsRUFLakMsV0FMaUMsQ0FBckM7QUFPQSxJQUFJQyxjQUFjLEdBQUcsQ0FBckI7O0FBRUEsTUFBTUMsbUJBQW1CLEdBQUlDLFFBQUQsSUFBYztBQUN0QyxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsT0FBakIsQ0FBakI7QUFDQSxVQUFNQyxNQUFNLEdBQUdILFFBQVEsQ0FB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Uy9FLFVBQVQ7QUFDSCxPQUZELE1BRU87QUFDSCxjQUFNOEosYUFBYSxHQUFHLEtBQUsxRixpQkFBTCxDQUF1QndGLFFBQXZCLENBQXRCOztBQUNBLFlBQUlFLGFBQUosRUFBbUI7QUFDZjZCLFVBQUFBLEdBQUcsQ0FBQzVHLElBQUosQ0FBUy9FLFVBQVQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTzJMLEdBQVA7QUFDSDs7QUFuN0I4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVjggZGVidWdnZXIgY2xpZW50LlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignRGVidWdnZXInKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5jb25zdCBDRFAgPSByZXF1aXJlKCdjaHJvbWUtcmVtb3RlLWludGVyZmFjZScpO1xyXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XHJcblxyXG5jb25zdCBDT05ORUNUX1JFVFJJRVMgPSA0O1xyXG5jb25zdCBDT05ORUNUX1NOT09aRV9JTlRFUlZBTF9NVUxUID0gMjtcclxuY29uc3QgTUFYX0RFUFRIID0gNTtcclxuY29uc3QgSUdOT1JFX1NDT1BFX0NIQUlOX1ZBUklBQkxFUyA9IFtcclxuICAgICdleHBvcnRzJyxcclxuICAgICdyZXF1aXJlJyxcclxuICAgICdtb2R1bGUnLFxyXG4gICAgJ19fZmlsZW5hbWUnLFxyXG4gICAgJ19fZGlybmFtZSdcclxuXTtcclxubGV0IG1heEZpbmRlZERlcHRoID0gMDtcclxuXHJcbmNvbnN0IHRyYW5zZm9ybVRvSURFU3R5bGUgPSAoZmlsZU5hbWUpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdXJpSW5kZXggPSBmaWxlTmFtZS5pbmRleE9mKCdmaWxlOicpO1xyXG4gICAgICAgIGNvbnN0IGJwRGF0YSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCB1cmlJbmRleCk7XHJcbiAgICAgICAgbGV0IHVyaSA9IGZpbGVOYW1lLnN1YnN0cmluZyh1cmlJbmRleCk7XHJcbiAgICAgICAgLy8gZml4IFVOQyBwYXRoc1xyXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHVyaS5zdGFydHNXaXRoKCdmaWxlOi8vLycpKSB7XHJcbiAgICAgICAgICAgIHVyaSA9ICdmaWxlOi8vJyArIHVyaS5zdWJzdHJpbmcoJ2ZpbGU6Ly8vJy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBEYXRhICsgdXJsLmZpbGVVUkxUb1BhdGgodXJpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndHJhbnNmb3JtVG9JREVTdHlsZSBmaWxlTmFtZScsIGZpbGVOYW1lKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd0cmFuc2Zvcm1Ub0lERVN0eWxlIGVycm9yJywgZSk7XHJcbiAgICAgICAgdGhyb3cgZTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cclxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcblxyXG5jb25zdCBkZWxldGVWYWx1ZXMgPSAoYXJyLCBkZXB0aCkgPT4ge1xyXG5cclxuICAgIGlmIChkZXB0aCA+IG1heEZpbmRlZERlcHRoKSB7XHJcbiAgICAgICAgbWF4RmluZGVkRGVwdGggPSBkZXB0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVwdGggPiBNQVhfREVQVEgpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGFyci5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUuY2xhc3NOYW1lICYmIGl0ZW0udmFsdWUuY2xhc3NOYW1lID09PSAnRnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lVmFsdWUgPSBPYmplY3QuYXNzaWduKGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmVWYWx1ZS5vYmplY3RJZDtcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBPYmplY3QuYXNzaWduKGl0ZW0sIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjbG9uZVZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmUub2JqZWN0SWQ7XHJcbiAgICAgICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZXh0cmFjdEJyZWFrcG9pbnREYXRhKGJwU3RyKSB7XHJcbiAgICBpZiAoIWJwU3RyIHx8IHR5cGVvZiBicFN0ciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGJwU3RyID0gdHJhbnNmb3JtVG9JREVTdHlsZShicFN0cik7XHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBicFN0ci5zcGxpdCgnOicpO1xyXG5cclxuICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pO1xyXG5cclxuICAgICAgICAvLyByb21vdmUgZmlsZSBudW1iZXIsIGxpbmUgbnVtYmVyLCBjb2x1bW4gbnVtYmVyXHJcbiAgICAgICAgcGFydHMuc3BsaWNlKDAsIDMpO1xyXG5cclxuICAgICAgICAvLyBsb29rcyBsaW5lIG5lZWQgb25seSBmb3Igd2luZG93cyBwYXRoIHdoaXRoIGRpc2ssIGxpa2UgQzovL1xyXG4gICAgICAgIC8vIGZvciB3aW5kb3dzIG5ldHdvcmsgZm9sZGVycyBhbmQgbWFjIG5vdCBuZWVkXHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5qb2luKCc6Jyk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGV4dHJhY3QgYnJlYWtwb2ludCBkYXRhOiAke2JwU3RyfWApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkge1xyXG4gICAgY29uc3QgYnJPYmogPSBleHRyYWN0QnJlYWtwb2ludERhdGEoYnJlYWtwb2ludC5icmVha3BvaW50SWQpO1xyXG5cclxuICAgIGNvbnN0IGJyTGluZU51bWJlciA9IGJyT2JqLmxpbmVOdW1iZXIgKyAxOyAvLyBmcm9tIDAtYmFzZSB0byAxIGJhc2U7XHJcblxyXG4gICAgaWYgKGJyZWFrcG9pbnQgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShicmVha3BvaW50LmxvY2F0aW9ucykgJiYgYnJlYWtwb2ludC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrcG9pbnQubG9jYXRpb25zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBickZpbGVOYW1lID0gYnJPYmouZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1MaW5lTnVtYmVyID0gaXRlbS5saW5lTnVtYmVyICsgMTsgLy8gZnJvbSAwLWJhc2UgdG8gMSBiYXNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyTGluZU51bWJlciAhPT0gaXRlbUxpbmVOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IGBCcmVha3BvaW50cyB3YXJuaW5nIDogJHtickZpbGVOYW1lfSBEb24ndCBoYXZlIG9wcG9ydHVuaXR5IHRvIGhhdmUgYnJlYWtwb2ludCBhdCBsaW5lIDogYCxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogYnJGaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lOiBickxpbmVOdW1iZXJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlYnVnZ2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBpZCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BpZCA9IHBpZDtcclxuICAgICAgICB0aGlzLl9wb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2hvc3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSBbXTtcclxuICAgICAgICB0aGlzLl9wZW5kaW5nQlAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9maWxlTmFtZUFsaWFzZXMgPSBbXTtcclxuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzZXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2xpZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllc0J5T2JqZWN0SWQob2JqZWN0SWQsIGRlcHRoLCBlbG0pIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHt9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5fUnVudGltZS5nZXRQcm9wZXJ0aWVzKHtcclxuICAgICAgICAgICAgICAgIG9iamVjdElkIDogb2JqZWN0SWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0UHJvcGVydGllcyBlbG0nLCBlbG0pO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0UHJvcGVydGllcyBlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAoY2xvbmUgJiYgY2xvbmUgJiYgY2xvbmUucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNsb25lID0gT2JqZWN0LmFzc2lnbih7fSwgY2xvbmUsIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogZGVsZXRlVmFsdWVzKGNsb25lLnJlc3VsdCwgZGVwdGgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFByb21pY2VBbGxSZXN1bHQobWFwUmVzdWx0RmlsdGVyZWQpIHtcclxuICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChtYXBSZXN1bHRGaWx0ZXJlZCkudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHByb21pc2VBbGxQcm9taXNlICYmIEFycmF5LmlzQXJyYXkocHJvbWlzZUFsbFByb21pc2UpICYmIHByb21pc2VBbGxQcm9taXNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcHJvbWlzZUFsbFByb21pc2UgPSBwcm9taXNlQWxsUHJvbWlzZS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJvbWlzZUFsbFByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgZGVwdGgsIGVsbSkge1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGdldFByb3BlcnRpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb3BlcnRpZXNCeU9iamVjdElkKG9iamVjdElkLCBkZXB0aCwgZWxtKTtcclxuXHJcbiAgICAgICAgaWYgKGdldFByb3BlcnRpZXNSZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGdldFByb3BlcnRpZXNSZXN1bHQgJiYgZ2V0UHJvcGVydGllc1Jlc3VsdC5yZXN1bHQgJiYgQXJyYXkuaXNBcnJheShnZXRQcm9wZXJ0aWVzUmVzdWx0LnJlc3VsdCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBSZXN1bHQgPSBnZXRQcm9wZXJ0aWVzUmVzdWx0LnJlc3VsdC5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc0lubmVyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0aWVzKGl0ZW0udmFsdWUub2JqZWN0SWQsIGRlcHRoKzEsIGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2NvcGVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzSW5uZXJSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBSZXN1bHRGaWx0ZXJlZCA9IG1hcFJlc3VsdC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoOiBkZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0RmlsdGVyZWQgJiYgQXJyYXkuaXNBcnJheShtYXBSZXN1bHRGaWx0ZXJlZCkgJiYgbWFwUmVzdWx0RmlsdGVyZWQubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IHRoaXMuZ2V0UHJvbWljZUFsbFJlc3VsdChtYXBSZXN1bHRGaWx0ZXJlZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlQWxsUHJvbWlzZSAmJiBBcnJheS5pc0FycmF5KHByb21pc2VBbGxQcm9taXNlKSAmJiBwcm9taXNlQWxsUHJvbWlzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaGlsZCA9IHByb21pc2VBbGxQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoOiBkZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0SWRSZXNwb25zZTogT2JqZWN0LmFzc2lnbih7fSwgZ2V0UHJvcGVydGllc1Jlc3VsdCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKHZhbHVlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzU2NvcGUoc2NvcGVDaGFpbiwgZGVwdGgpIHtcclxuICAgICAgICBsZXQgc2NvcGVDaGFpblJlc3VsdCA9IGF3YWl0IHNjb3BlQ2hhaW4ubWFwKGFzeW5jIChjaGFpbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hhaW4gJiYgY2hhaW4ub2JqZWN0ICYmIGNoYWluLm9iamVjdC5vYmplY3RJZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFpbi5vYmplY3Qub2JqZWN0SWQgPT09ICdzdHJpbmcnICYmIGNoYWluLnR5cGUgIT09ICdnbG9iYWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UHJvcGVydGllc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvcGVydGllcyhjaGFpbi5vYmplY3Qub2JqZWN0SWQsIGRlcHRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFByb3BlcnRpZXNSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NvcGVDaGFpblJlc3VsdCA9IHNjb3BlQ2hhaW5SZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChzY29wZUNoYWluUmVzdWx0KS50aGVuKHZhbHVlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc0NhbGxGcmFtZXMoY2FsbEZyYW1lcywgZGVwdGgpIHtcclxuICAgICAgICBsZXQgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGF3YWl0IGNhbGxGcmFtZXMubWFwKGFzeW5jKGNhbGxGcmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS5zY29wZUNoYWluICYmIEFycmF5LmlzQXJyYXkoY2FsbEZyYW1lLnNjb3BlQ2hhaW4pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzU2NvcGVSZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NTY29wZShjYWxsRnJhbWUuc2NvcGVDaGFpbiwgZGVwdGgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY29wZVJlc3VsdDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBjYWxsRnJhbWVzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2FsbEZyYW1lc01hcFJlc3VsdCkudGhlbih2YWx1ZXMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluQnJlYWtwb2ludHMoaXRlbVVybCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50cykgJiYgdGhpcy5fYnJlYWtwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5tYXAoKGJwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1VcmwudG9Mb3dlckNhc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICBicC5vcmlnaW4uc2NyaXB0UGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVVybC50b0xvd2VyQ2FzZSgpID09PSBicC5vcmlnaW4uc2NyaXB0UGF0aC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBpbkZpbGVOYW1lQWxpYXNlcyhmaWxlTmFtZSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5fZmlsZU5hbWVBbGlhc2VzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fZmlsZU5hbWVBbGlhc2VzKSAmJiB0aGlzLl9maWxlTmFtZUFsaWFzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTmFtZUFsaWFzZXMubWFwKChhbGlhcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpYXMudG9Mb3dlckNhc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnRvTG93ZXJDYXNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpYXMudG9Mb3dlckNhc2UoKSA9PT0gZmlsZU5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWxpYXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbnRpbnVlQ29ubmVjdCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xpZW50Lm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBhc3luYyhtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobS51cmwudG9Mb3dlckNhc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlbGMgPSBtLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50Rm9yQ2hhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRSZXN1bHQgPSB0aGlzLl9icmVha3BvaW50cy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbiAmJiBpdGVtLm9yaWdpbi5zY3JpcHRQYXRoICYmIGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRsYyA9IGl0ZW0ub3JpZ2luLnNjcmlwdFBhdGgudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludGxjID09PSBmaWxlbGMgJiYgaXRlbS5vcmlnaW4uc2NyaXB0UGF0aCAhPT0gbS51cmwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVOYW1lQWxpYXNlcy5pbmNsdWRlcyhtLnVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZU5hbWVBbGlhc2VzLnB1c2gobS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9EZWJ1Z2dlci5wYXVzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50OiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXJsOiBtLnVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMubWFwKChicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAub3JpZ2luLnNjcmlwdFBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50Rm9yQ2hhbmdlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5tVXJsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludEZvckNoYW5nZS5icmVha3BvaW50Lm9yaWdpbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRGb3JDaGFuZ2UuYnJlYWtwb2ludC5vcmlnaW4uc2NyaXB0UGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwLm9yaWdpbi5zY3JpcHRQYXRoID09PSBicmVha3BvaW50Rm9yQ2hhbmdlLmJyZWFrcG9pbnQub3JpZ2luLnNjcmlwdFBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRQYXRoOiBicmVha3BvaW50Rm9yQ2hhbmdlLm1VcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGJwLm9yaWdpbi5saW5lTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uICYmIEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludHNGcm9tT2xkTG9jYXRpb24pICYmIGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCA9IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uLm1hcChhc3luYyhicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEJyZWFrcG9pbnQoYnAuc2NyaXB0UGF0aCwgYnAubGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50c0Zyb21PbGRMb2NhdGlvblJlc3VsdCA9IGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJyZWFrcG9pbnRzRnJvbU9sZExvY2F0aW9uUmVzdWx0KS50aGVuKGFzeW5jKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucmVzdW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudC5vbignRGVidWdnZXIucGF1c2VkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGUucmVhc29uID09PSAnQnJlYWsgb24gc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9icm9rZU9uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hyb21lIGRlYnVnZ2VyIGRvZXNuJ3Qgc2VlbSB0byByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiB1c2luZyByZW1vdmVCcmVha3BvaW50XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgJ3NvbWV0aGluZycgaXMgc3RpbGwgZ2V0dGluZyBoaXQuIG5vdCBjbGVhciB3aHkgdGhpcyBpcyBoYXBwZW5pbmcuXHJcbiAgICAgICAgICAgICAgICAvLyB0aHVzLCB3ZSBlbWl0IGJyZWFrIGV2ZW50IG9ubHkgaWYgbWF0Y2hpbmcgYnJlYWtwb2ludCBzdGlsbCBleGlzdHMgaW4gdGhpcy5fYnJlYWtwb2ludHNcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVDYWxsRnJhbWVzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5jYWxsRnJhbWVzICYmIEFycmF5LmlzQXJyYXkoZS5jYWxsRnJhbWVzKSAmJiBlLmNhbGxGcmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUuY2FsbEZyYW1lcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS51cmwgJiYgdGhpcy5pbkJyZWFrcG9pbnRzKGl0ZW0udXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50c01hcFJlc3VsdCA9IHRoaXMuX2JyZWFrcG9pbnRzLm1hcChhc3luYyhicCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChicCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZUNhbGxGcmFtZXNbMF0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnAubG9jYXRpb25zWzBdLnNjcmlwdElkID09PSBlQ2FsbEZyYW1lc1swXS5sb2NhdGlvbi5zY3JpcHRJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicC5sb2NhdGlvbnNbMF0ubGluZU51bWJlciA9PT0gZUNhbGxGcmFtZXNbMF0ubG9jYXRpb24ubGluZU51bWJlcikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5pdGlhbERlcHRoID0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY2FsbEZyYW1lcyAmJiBBcnJheS5pc0FycmF5KGUuY2FsbEZyYW1lcykgJiYgZS5jYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVNjcmlwdElkQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsRnJhbWVzID0gZS5jYWxsRnJhbWVzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRlZCA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbmQoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5icmVha3BvaW50SWQuZW5kc1dpdGgoaXRlbS51cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmxvY2F0aW9uICYmIGl0ZW0ubG9jYXRpb24uc2NyaXB0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pcXVlU2NyaXB0SWRBcnIuaW5jbHVkZXMoaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZVNjcmlwdElkQXJyLnB1c2goaXRlbS5sb2NhdGlvbi5zY3JpcHRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWVzLm1hcChhc3luYyhpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3NzaWJsZUJyZWFrcG9pbnRzID0gYXdhaXQgdGhpcy5nZXRQb3NzaWJsZUJyZWFrcG9pbnRzKGl0ZW0ubG9jYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRTb3VyY2UgPSBhd2FpdCB0aGlzLmdldFNjcmlwdFNvdXJjZShpdGVtLmxvY2F0aW9uLnNjcmlwdElkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdFNvdXJjZVNwbGl0ID0gc2NyaXB0U291cmNlLnNjcmlwdFNvdXJjZS5zcGxpdCgnXFxuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZUxpbmVOdW1iZXJzTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFNvdXJjZVNwbGl0ICYmIEFycmF5LmlzQXJyYXkoc2NyaXB0U291cmNlU3BsaXQpICYmIHNjcmlwdFNvdXJjZVNwbGl0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVMaW5lTnVtYmVyc0xlbmd0aCA9IHNjcmlwdFNvdXJjZVNwbGl0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBob3cgZGViYnVnZXIgc2VlIHNjcmlwdFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdFNvdXJjZVNwbGl0Lm1hcCgoc2NyaXB0U291cmNlSXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coKGlkeCkgKyAnICcgKyBzY3JpcHRTb3VyY2VJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiBwb3NzaWJsZUJyZWFrcG9pbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaXRlbS51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTGluZU51bWJlcnNMZW5ndGg6IGZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFNjcmlwdFNvdXJjZSBlJywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNhbGxGcmFtZXNNYXBSZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NDYWxsRnJhbWVzKGNhbGxGcmFtZXMsIGluaXRpYWxEZXB0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lc01hcFJlc3VsdCA9IGNhbGxGcmFtZXNNYXBSZXN1bHQuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZXNNYXBSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVha3BvaW50c01hcFJlc3VsdCA9IGJyZWFrcG9pbnRzTWFwUmVzdWx0LmZpbHRlcigoZWwpID0+ICEhZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJyZWFrcG9pbnRzTWFwUmVzdWx0KS50aGVuKGFzeW5jIChzY29wZUNoYWluVHJlZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZUNoYWluVHJlZSAmJiBBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlKSAmJiBzY29wZUNoYWluVHJlZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2hhaW5UcmVlID0gc2NvcGVDaGFpblRyZWUuZmlsdGVyKChlbCkgPT4gISFlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicmVha3BvaW50RGF0YSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgd2UgYWx3YXlzIHNlbmQgYnJlYWtwb2ludCBvZiB0aGUgdG9wIGNhbGwgZnJhbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVDYWxsRnJhbWVzICYmIGVDYWxsRnJhbWVzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBlQ2FsbEZyYW1lc1swXS5sb2NhdGlvbi5saW5lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0cmFuc2Zvcm1Ub0lERVN0eWxlKGVDYWxsRnJhbWVzWzBdLnVybCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRWYXJpYWJsZXNGcm9tU2NvcGVDaGFpblRyZWUoYnJlYWtwb2ludERhdGEudmFyaWFibGVzLCBzY29wZUNoYWluVHJlZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZE94eWdlblZhcmlhYmxlc0Zyb21HbG9iYWxTY29wZShicmVha3BvaW50RGF0YS52YXJpYWJsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3NldCA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcmlnaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcmlnaW4ubGluZU51bWJlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpdGVtLm9yaWdpbi5saW5lTnVtYmVyKSsxID09PSBwYXJzZUludChicmVha3BvaW50RGF0YS5saW5lTnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbS5sb2NhdGlvbnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9jYXRpb25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2NhdGlvbnMuZmluZChsb2MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGxvYy5saW5lTnVtYmVyKSA9PT0gcGFyc2VJbnQoYnJlYWtwb2ludERhdGEubGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGl0ZW0ub3JpZ2luLmxpbmVOdW1iZXIpICE9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpICE9PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbEJyZmluZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEVycm9ycy5tYXAoKGJyZWFrcG9pbnRFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLl9icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50cy5tYXAoKGJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJGaWxlTmFtZSA9IHRyYW5zZm9ybVRvSURFU3R5bGUoYnIub3JpZ2luLnNjcmlwdFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50RGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSA9IHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmlsZSA9PT0gZUNhbGxGcmFtZXNbMF0udXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJGaWxlTmFtZSA9PT0gYnJlYWtwb2ludERhdGEuZmlsZU5hbWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50RGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcG9zc2libGVCcmVha3BvaW50RGF0YS5maWxlTGluZU51bWJlcnNMZW5ndGggIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIrMSA9PT0gYnIub3JpZ2luLmxpbmVOdW1iZXIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyLm9yaWdpbi5saW5lTnVtYmVyKzEgPT09IHBvc3NpYmxlQnJlYWtwb2ludERhdGEuZmlsZUxpbmVOdW1iZXJzTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEJyZmluZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWxCcmZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50RGF0YS5yZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zc2libGVCcmVha3BvaW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVCcmVha3BvaW50c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgPSBwb3NzaWJsZUJyZWFrcG9pbnRzRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmZpbGUgPT09IGVDYWxsRnJhbWVzWzBdLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIrMSA+PSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIgPSBwb3NzaWJsZUJyZWFrcG9pbnREYXRhLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCAtIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWsnLCBicmVha3BvaW50RGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLm1hcCgoYnJlYWtwb2ludEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiBicmVha3BvaW50RXJyb3IubGluZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhICYmIEFycmF5LmlzQXJyYXkocG9zc2libGVCcmVha3BvaW50c0RhdGEpICYmIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludHNEYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbGUgPSB0cmFuc2Zvcm1Ub0lERVN0eWxlKGl0ZW0uZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbGUgPT09IGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQnJlYWtwb2ludERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0uZmlsZUxpbmVOdW1iZXJzTGVuZ3RoICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IubGluZSA+PSBpdGVtLmZpbGVMaW5lTnVtYmVyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJyZWFrcG9pbnRFcnJvci5saW5lIC0gMjsgLy8gLy8jIHNvdXJjZU1hcHBpbmdVUkwgYW5kIH0uY2FsbCh0aGlzLCBleHBvcnRzLCByZXF1aXJlLCBtb2R1bGUsIF9fZmlsZW5hbWUsIF9fZGlybmFtZSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJyZWFrcG9pbnRFcnJvci5saW5lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5icmVha3BvaW50cyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uYnJlYWtwb2ludHMpICYmIGl0ZW0uYnJlYWtwb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRFcnJvciAmJiBicmVha3BvaW50RXJyb3IubXNnICYmIGJyZWFrcG9pbnRFcnJvci5tc2cuaW5jbHVkZXMoJ1Bvc3NpYmxlIGJyZWFrcG9pbnQgbGluZXMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5icmVha3BvaW50cy5pbmNsdWRlcyhsaW5lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnJlYWtwb2ludEVycm9yLm1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gYCR7bGluZX0uIGA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9IGAgUG9zc2libGUgYnJlYWtwb2ludCBsaW5lcyA6ICR7aXRlbS5icmVha3BvaW50cy5tYXAoKGxpbmUpID0+IGxpbmUpLmpvaW4oJywgJyl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50RXJyb3IgJiYgYnJlYWtwb2ludEVycm9yLm1zZyAmJiBicmVha3BvaW50RXJyb3IubXNnLmluY2x1ZGVzKCdwb3NzaWJsZSBicmVha3BvaW50IGxpbmVzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnJlYWtwb2ludEVycm9yLm1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gYCR7bGluZX0uIGA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICcgRmlsZSBkb25cXCd0IGhhdmUgcG9zc2libGUgYnJlYWtwb2ludCBsaW5lcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtFcnJvcicsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogYnJlYWtwb2ludEVycm9yLmxpbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGJyZWFrcG9pbnRFcnJvci5maWxlTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnJlYXNvbiA9PT0gJ09PTScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnkgbGVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250aW51ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2JyZWFrcG9pbnRzTWFwUmVzdWx0IHJlcyByZWFzb24nICwgcmVhc29uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jbGllbnQub24oJ0RlYnVnZ2VyLmJyZWFrcG9pbnRSZXNvbHZlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25CcmVha3BvaW50UmVzb2x2ZWQoZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgRGVidWdnZXIsIFJ1bnRpbWUgfSA9IHRoaXMuX2NsaWVudDtcclxuICAgICAgICB0aGlzLl9EZWJ1Z2dlciA9IERlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuX1J1bnRpbWUgPSBSdW50aW1lO1xyXG4gICAgICAgIFJ1bnRpbWUuZW5hYmxlKCk7XHJcbiAgICAgICAgRGVidWdnZXIuZW5hYmxlKCk7XHJcbiAgICAgICAgRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMoeyBzdGF0ZTogJ25vbmUnIH0pO1xyXG4gICAgICAgIERlYnVnZ2VyLnNldEFzeW5jQ2FsbFN0YWNrRGVwdGgoeyBtYXhEZXB0aDogMzIgfSk7XHJcbiAgICAgICAgRGVidWdnZXIuc2V0QmxhY2tib3hQYXR0ZXJucyh7IHBhdHRlcm5zOiBbXSB9KTtcclxuICAgICAgICAvLyBvbmx5IHVzZSAnYXdhaXQnIGZvciB0aGUgbGFzdCBjYWxsLCBhbGwgcHJldmlvdXMgY2FsbCB0byBEZWJ1Z2dlciBvciBSdW50aW1lIHdpbGwgc3RhY2sgb3RoZXJ3aXNlXHJcbiAgICAgICAgYXdhaXQgUnVudGltZS5ydW5JZldhaXRpbmdGb3JEZWJ1Z2dlcigpO1xyXG4gICAgICAgIC8vIGF3YWl0IGZvciB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBwbGFjZWQgYnkgdGhlIGRlYnVnZ2VyIGF1dG9tYXRpY2FsbHkgXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fRGVidWdnZXIucGF1c2VkKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnJlYWtwb2ludFJlc29sdmVkKGUpIHtcclxuICAgICAgICAvLyBicmVha3BvaW50cyBzZXQgYmVmb3JlIHRoZSBzY3JpcHQgd2FzIGxvYWRlZCB3aWxsIGJlIHJlc29sdmVkIG9uY2UgaXQgbG9hZHNcclxuICAgICAgICBmb3IgKHZhciBicCBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBicCAmJlxyXG4gICAgICAgICAgICAgICAgZSAmJlxyXG4gICAgICAgICAgICAgICAgYnAuYnJlYWtwb2ludElkID09PSBlLmJyZWFrcG9pbnRJZFxyXG4gICAgICAgICAgICApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdGVSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIGUubG9jYXRpb24gKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQgb24gcnVudGltZVxyXG4gICAgICAgICAgICAgICAgICAgIGJwLmxvY2F0aW9ucyA9IFtlLmxvY2F0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlc3VsdCA9IHZhbGlkYXRlQnJlYWtwb2ludChicCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlLmxvY2F0aW9ucyApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlZCBvbiBwYXVzZVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUmVzdWx0ID0gdmFsaWRhdGVCcmVha3BvaW50KGJwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzLnB1c2godmFsaWRhdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVjdHMgdG8gYSBkZWJ1Z2dlci4gRG9lcyBub3RoaW5nIGlmIGFscmVhZHkgY29ubmVjdGVkLlxyXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBEZWJ1Z2dlciBwb3J0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjb25uZWN0KHBvcnQsIGhvc3QpIHtcclxuICAgICAgICB0aGlzLl9wb3J0ID0gcG9ydDtcclxuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdCB8fCAnbG9jYWxob3N0JztcclxuXHJcbiAgICAgICAgbGV0IHNub296ZVRpbWUgPSAxMDAwO1xyXG4gICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgICBmb3IgKGxldCByZXRyaWVzID0gMDsgcmV0cmllcyA8IENPTk5FQ1RfUkVUUklFUzsgcmV0cmllcysrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQgPSBhd2FpdCBDRFAoeyBwb3J0OiB0aGlzLl9wb3J0LCBob3N0OiB0aGlzLl9ob3N0IH0pO1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsb2cud2FybihgRGVidWdnZXIgY29ubmVjdGlvbiBmYWlsZWQuIFdpbGwgcmV0cnkgaW4gJHtzbm9vemVUaW1lLzEwMDB9cy4gRXJyb3I6IGAsIGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZShzbm9vemVUaW1lKTtcclxuICAgICAgICAgICAgc25vb3plVGltZSAqPSBDT05ORUNUX1NOT09aRV9JTlRFUlZBTF9NVUxUO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgbGFzdEVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb250aW51ZUNvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBicmVha3BvaW50IGZvciBhIHBhcnRpY3VsYXIgc2NyaXB0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFNjcmlwdCBwYXRoLlxyXG4gICAgICogQHBhcmFtIHtJbnRlZ2VyfSBMaW5lIG51bWJlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2V0QnJlYWtwb2ludChzY3JpcHRQYXRoLCBsaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gc2NyaXB0UGF0aDtcclxuXHJcbiAgICAgICAgY29uc3QgYWxpYXNSZXN1bHQgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVOYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKGFsaWFzUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gYWxpYXNSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaWxlTmFtZSA9IHVybC5wYXRoVG9GaWxlVVJMKGZpbGVOYW1lKS50b1N0cmluZygpO1xyXG4gICAgICAgIGxldCBlcnIgPSBudWxsO1xyXG5cclxuICAgICAgICBsZXQgYnJlYWtwb2ludCA9IGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCh7XHJcbiAgICAgICAgICAgIHVybDogZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXItMSwgLy8gZnJvbSAxLWJhc2UgdG8gMC1iYXNlXHJcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogMFxyXG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3Igd2hlbiB0cnlpbmcgdG8gc2V0IGFuIGxhcmVhZHkgZXhpc3RpbmcgYnJlYWtwb2ludFxyXG4gICAgICAgICAgICBpZiAoIWUucmVzcG9uc2UgfHwgZS5yZXNwb25zZS5tZXNzYWdlICE9PSAnQnJlYWtwb2ludCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuJykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWtwb2ludC5vcmlnaW4gPSB7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHRQYXRoOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXJcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnJlYWtwb2ludCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbmV3IGJyZWFja3BvaW50IHJlc29sdmVkIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgIHRoaXMub25CcmVha3BvaW50UmVzb2x2ZWQoYnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBicmVha3BvaW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldEJyZWFrcG9pbnRzQWN0aXZlKGFjdGl2ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9EZWJ1Z2dlciAmJiB0aGlzLl9EZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoeydhY3RpdmUnOiBhY3RpdmV9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0QnJlYWtwb2ludHNBY3RpdmUoYWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpIHtcclxuICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzLmZpbHRlcigoYnApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGJwLmJyZWFrcG9pbnRJZCAhPT0gYnJlYWtwb2ludElkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVCciA9IHsgYnJlYWtwb2ludElkOiBicmVha3BvaW50SWQgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQocmVtb3ZlQnIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzdW1lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzdW1lVGVybWluYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX0RlYnVnZ2VyLnJlc3VtZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5kaXNhYmxlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgaW5wdXRMaW5lKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoQWxpYXMgPSB0aGlzLmluRmlsZU5hbWVBbGlhc2VzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluZSA9IGlucHV0TGluZSAtIDE7IC8vIGZyb20gMS1iYXNlIHRvIDAtYmFzZVxyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgYiBvZiB0aGlzLl9icmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYiAmJiBiLmJyZWFrcG9pbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGIuYnJlYWtwb2ludElkLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgeyAvLyBwYXRoIG1heSBjb250YWluIGEgRHJpdmUgbGV0dGVyIG9uIHdpbjMyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0yXSArICc6JyArIHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChwYXJ0c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlTmFtZSA9PT0gZmlsZVBhdGggfHwgZmlsZU5hbWUgPT09IGZpbGVQYXRoQWxpYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBsaW5lTnVtYmVyID09PSBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VsZi5yZW1vdmVCcmVha3BvaW50KGIuYnJlYWtwb2ludElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0ZhaWxlZCB3aGVuIHdvcmsgd2l0aCBicmVha3BvaW50IGRhdGE6JywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsZWFyQnJlYWtwb2ludHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgb2YgdGhpcy5fYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVtb3ZlQnJlYWtwb2ludChiLmJyZWFrcG9pbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UG9zc2libGVCcmVha3BvaW50cyhzdGFydExvY2F0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgY29uc3QgcG9zc2libGVCcmVha3BvaW50cyA9IGF3YWl0IHRoaXMuX0RlYnVnZ2VyLmdldFBvc3NpYmxlQnJlYWtwb2ludHMoe1xyXG4gICAgICAgICAgICBzdGFydDoge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0SWQ6IHN0YXJ0TG9jYXRpb24uc2NyaXB0SWQsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAwLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHBvc3NpYmxlQnJlYWtwb2ludHMgJiYgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucykgJiYgcG9zc2libGVCcmVha3BvaW50cy5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwb3NzaWJsZUJyZWFrcG9pbnRzLmxvY2F0aW9ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtLmxpbmVOdW1iZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZU51bWJlciA9IGl0ZW0ubGluZU51bWJlciArIDE7IC8vIGZyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmluY2x1ZGVzKGxpbmVOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGluZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBwID0gcmVzdWx0LnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhwLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2luZ29yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAtMSA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwLTEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNjcmlwdFNvdXJjZShzY3JpcHRJZCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9EZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UoeyBzY3JpcHRJZDogc2NyaXB0SWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2UoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkZFZhcmlhYmxlc0Zyb21TY29wZUNoYWluVHJlZSh2YXJpYWJsZXMsIHNjb3BlQ2hhaW5UcmVlKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzY29wZUNoYWluVHJlZSlcclxuICAgICAgICAgICAgfHwgc2NvcGVDaGFpblRyZWUubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgfHwgIUFycmF5LmlzQXJyYXkoc2NvcGVDaGFpblRyZWVbMF0pXHJcbiAgICAgICAgICAgIHx8IHNjb3BlQ2hhaW5UcmVlWzBdLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIHx8ICFBcnJheS5pc0FycmF5KHNjb3BlQ2hhaW5UcmVlWzBdWzBdKVxyXG4gICAgICAgICAgICB8fCBzY29wZUNoYWluVHJlZVswXVswXS5sZW5ndGggPT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgb2JqZWN0SWRSZXNwb25zZSB9ID0gc2NvcGVDaGFpblRyZWVbMF1bMF1bMF07XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IG9iamVjdElkUmVzcG9uc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBzY29wZVZhciBvZiByZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKCFJR05PUkVfU0NPUEVfQ0hBSU5fVkFSSUFCTEVTLmluY2x1ZGVzKHNjb3BlVmFyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgdHlwZTtcclxuICAgICAgICAgICAgICAgIGlmIChzY29wZVZhciAmJiBzY29wZVZhci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBzY29wZVZhci52YWx1ZS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZVZhci52YWx1ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNjb3BlVmFyLnZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy50cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUoc2NvcGVWYXIudmFsdWUub2JqZWN0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBzY29wZVZhci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgJ3VuZGVmaW5lZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB0cnlUb1JldHJpZXZlT2JqZWN0VmFsdWUob2JqZWN0SWQpIHtcclxuICAgICAgICBpZiAoIW9iamVjdElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCB0aGlzLl9SdW50aW1lLmdldFByb3BlcnRpZXMoeyBvYmplY3RJZCB9KTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqVmFsdWUgPSB7fTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHByb3BEZXNjID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcERlc2MudmFsdWUgJiYgcHJvcERlc2MudmFsdWUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqVmFsdWVbcHJvcERlc2MubmFtZV0gPSBwcm9wRGVzYy52YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSdW50aW1lLmdldFByb3BlcnRpZXMgY2FsbCBmYWlsZWQnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRPeHlnZW5WYXJpYWJsZXNGcm9tR2xvYmFsU2NvcGUodmFyaWFibGVzKSB7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBvRXZhbFJlc3VsdCB9ID0gYXdhaXQgdGhpcy5fUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICdwbycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IGVudkV2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAnZW52JywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCB7IHJlc3VsdDogdmFyc0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAndmFycycsIHJldHVybkJ5VmFsdWU6IHRydWUgfSk7XHJcbiAgICAgICAgY29uc3QgeyByZXN1bHQ6IHBhcmFtc0V2YWxSZXN1bHQgfSA9IGF3YWl0IHRoaXMuX1J1bnRpbWUuZXZhbHVhdGUoeyBleHByZXNzaW9uOiAncGFyYW1zJywgcmV0dXJuQnlWYWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0ge1xyXG4gICAgICAgICAgICBwbzogcG9FdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICBlbnY6IGVudkV2YWxSZXN1bHQsXHJcbiAgICAgICAgICAgIHZhcnM6IHZhcnNFdmFsUmVzdWx0LFxyXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtc0V2YWxSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCcmVha3BvaW50cyhmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBicHMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBiIG9mIHRoaXMuX2JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gYi5icmVha3BvaW50SWQuc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICBsZXQgbGluZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7IC8vIHBhdGggbWF5IGNvbnRhaW4gYSBEcml2ZSBsZXR0ZXIgb24gd2luMzJcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcGFydHNbcGFydHMubGVuZ3RoLTJdICsgJzonICsgcGFydHNbcGFydHMubGVuZ3RoLTFdO1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KHBhcnRzWzFdKSsxOyAvL2Zyb20gMC1iYXNlIHRvIDEtYmFzZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gcGFyc2VJbnQocGFydHNbMV0pKzE7IC8vZnJvbSAwLWJhc2UgdG8gMS1iYXNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PT0gZmlsZVBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGJwcy5wdXNoKGxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGhBbGlhcyA9IHRoaXMuaW5GaWxlTmFtZUFsaWFzZXMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVQYXRoQWxpYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBicHMucHVzaChsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnBzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.29.0",
3
+ "version": "1.29.1",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {