appium-uiautomator2-driver 1.75.0 → 2.0.3

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.
@@ -9,16 +9,16 @@ exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _appiumSupport = require("appium-support");
12
+ var _support = require("@appium/support");
13
13
 
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
- var _appiumBaseDriver = require("appium-base-driver");
16
+ var _baseDriver = require("@appium/base-driver");
17
17
 
18
18
  const commands = {};
19
19
 
20
20
  function toOrigin(element) {
21
- return element ? _appiumSupport.util.wrapElement(_appiumSupport.util.unwrapElement(element)) : undefined;
21
+ return element ? _support.util.wrapElement(_support.util.unwrapElement(element)) : undefined;
22
22
  }
23
23
 
24
24
  function toPoint(x, y) {
@@ -193,10 +193,10 @@ commands.mobileScrollBackTo = async function (opts = {}) {
193
193
  } = opts;
194
194
 
195
195
  if (!elementId || !elementToId) {
196
- throw new _appiumBaseDriver.errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);
196
+ throw new _baseDriver.errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);
197
197
  }
198
198
 
199
- return await this.uiautomator2.jwproxy.command(`/appium/element/${_appiumSupport.util.unwrapElement(elementId)}/scroll_to/${_appiumSupport.util.unwrapElement(elementToId)}`, 'POST', {});
199
+ return await this.uiautomator2.jwproxy.command(`/appium/element/${_support.util.unwrapElement(elementId)}/scroll_to/${_support.util.unwrapElement(elementToId)}`, 'POST', {});
200
200
  };
201
201
 
202
202
  commands.mobileScroll = async function (opts = {}) {
@@ -209,7 +209,7 @@ commands.mobileScroll = async function (opts = {}) {
209
209
  } = opts;
210
210
 
211
211
  if (!strategy || !selector) {
212
- throw new _appiumBaseDriver.errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);
212
+ throw new _baseDriver.errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);
213
213
  }
214
214
 
215
215
  return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {
@@ -226,4 +226,4 @@ var _default = commands;
226
226
  exports.default = _default;require('source-map-support').install();
227
227
 
228
228
 
229
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUdBLFNBQVNDLFFBQVQsQ0FBbUJDLE9BQW5CLEVBQTRCO0FBQzFCLFNBQU9BLE9BQU8sR0FBR0Msb0JBQUtDLFdBQUwsQ0FBaUJELG9CQUFLRSxhQUFMLENBQW1CSCxPQUFuQixDQUFq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QSxNQUFNLEVBQUV4QixRQUFRLENBQUNvQixTQUFTLElBQUluQixPQUFkLENBRHNEO0FBRXRFb0QsSUFBQUEsTUFBTSxFQUFFO0FBQUNILE1BQUFBLFFBQUQ7QUFBV0MsTUFBQUEsUUFBWDtBQUFxQkMsTUFBQUE7QUFBckI7QUFGOEQsR0FBM0QsQ0FBYjtBQUlELENBWkQ7O2VBY2VyRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5cbmZ1bmN0aW9uIHRvT3JpZ2luIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gdXRpbC53cmFwRWxlbWVudCh1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCkpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1BvaW50ICh4LCB5KSB7XG4gIHJldHVybiBfLmlzRmluaXRlKHgpICYmIF8uaXNGaW5pdGUoeSkgPyB7eCwgeX0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHRvUmVjdCAobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBbbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0XS5zb21lKCh2KSA9PiAhXy5pc0Zpbml0ZSh2KSlcbiAgICA/IHVuZGVmaW5lZFxuICAgIDoge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjbGljayBvblxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzaW1wbGUgY2xpY2svdGFwIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0gez9DbGlja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xpY2tHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICB4LCB5LFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb25nQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBkdXJhdGlvbiBbNTAwXSAtIENsaWNrIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAqIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBjbGljayB0aGF0IGxhc3RzIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb25cbiAqXG4gKiBAcGFyYW0gez9Mb25nQ2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxvbmdDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMb25nQ2xpY2tHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICB4LCB5LFxuICAgIGR1cmF0aW9uLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9sb25nX2NsaWNrJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIG9mZnNldDogdG9Qb2ludCh4LCB5KSxcbiAgICBkdXJhdGlvbixcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZUNsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZG91YmxlIGNsaWNrZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBtaXNzaW5nIHRoZW4gYm90aCBjbGljayBvZmZzZXQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIG9mZnNldCBhcmUgcHJvdmlkZWQgdGhlbiB0aGUgY29vcmRpbmF0ZXNcbiAqIGFyZSBwYXJzZWQgYXMgcmVsYXRpdmUgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggLSBUaGUgeCBjb29yZGluYXRlIHRvIGRvdWJsZSBjbGljayBvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/RG91YmxlQ2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvZG91YmxlX2NsaWNrJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIG9mZnNldDogdG9Qb2ludCh4LCB5KSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERyYWdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBkcmFnZ2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHRoZSBzdGFydCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN0YXJ0IGNvb3JkaW5hdGVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXNlXG4gKiBjb29yZGluYXRlcyBhcmUgY29uc2lkZXJlZCBhcyBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGVsZW1lbnQgY29ybmVyLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBzdGFydHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGVuZFggLSBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBlbmRzXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGVuZFkgLSBUaGUgeSBjb29yZGluYXRlIHdoZXJlIHRoZSBkcmFnZ2luZyBlbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBEcmFncyB0aGlzIG9iamVjdCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7P0RyYWdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURyYWdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRHJhZ0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RyYWcnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgc3RhcnQ6IHRvUG9pbnQoc3RhcnRYLCBzdGFydFkpLFxuICAgIGVuZDogdG9Qb2ludChlbmRYLCBlbmRZKSxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEZsaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZmxpbmdlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBmbGluZyBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGlzXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBmbGluZyBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgZmxpbmcuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNzUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bSBmbGluZ1xuICogdmVsb2NpdHkgZm9yIHRoZSBnaXZlbiB2aWV3ICg1MCBieSBkZWZhdWx0KVxuICovXG5cbi8qKlxuICogRHJhZ3MgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9GbGluZ09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBvYmplY3QgY2FuIHN0aWxsIHNjcm9sbCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGluZ0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGluZ0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2ZsaW5nJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIGRpcmVjdGlvbixcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBpbmNoT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgcGluY2hlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBwaW5jaCBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgcGluY2ggYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGVcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBwaW5jaCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBpbmNoIGFyZWEgc2l6ZS5cbiAqIFZhbGlkIHZhbHVlcyBtdXN0IGJlIGZsb2F0IG51bWJlcnMgaW4gcmFuZ2UgMC4uMSwgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzI1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybVxuICogdGhpcyBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgcGluY2ggY2xvc2UgZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9QaW5jaE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaENsb3NlR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3BpbmNoX2Nsb3NlJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIG9wZW4gZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9QaW5jaE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBwcm92aWRlZCBvcHRpb25zIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlUGluY2hPcGVuR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9vcGVuJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTd2lwZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHN3aXBlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzd2lwZSBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYSBhcmUgcHJvdmlkZWQgdGhlbiB0aGVcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBzd2lwZS5cbiAqIEFjY2VwdGFibGUgdmFsdWVzIGFyZTogYHVwYCwgYGRvd25gLCBgbGVmdGAgYW5kIGByaWdodGAgKGNhc2UgaW5zZW5zaXRpdmUpXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgc3dpcGUgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzd2lwZSBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFs1MDAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm0gdGhpc1xuICogZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHN3aXBlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U3dpcGVPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN3aXBlR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9zd2lwZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNjcm9sbGVkLlxuICogSWYgdGhlIGVsZW1lbnQgaWQgaXMgbWlzc2luZyB0aGVuIHNjcm9sbCBib3VuZGluZyBhcmVhIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdG9wIC0gVGhlIHRvcCBjb29yZGluYXRlIG9mIHRoZSBzY3JvbGwgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIC0gRGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHNjcm9sbCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHNjcm9sbGluZyBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXMgZ2VzdHVyZVxuICogaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzY3JvbGwgZ2VzdHVyZS5cbiAqXG4gKiBAcGFyYW0gez9TY3JvbGxPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbEdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc2Nyb2xsJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIGFyZWE6IHRvUmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpLFxuICAgIGRpcmVjdGlvbixcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsRWxlbWVudFRvRWxlbWVudE9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50SWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHNjcm9sbGFibGUgZWxlbWVudCxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkLiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGVsZW1lbnRUb0lkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBpdGVtLCB3aGljaCBiZWxvbmdzXG4gKiB0byB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50IGFib3ZlLCBhbmQgd2hpY2ggc2hvdWxkIGJlY29tZSB2aXNpYmxlIGFmdGVyXG4gKiB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgIHN0cmF0ZWd5LlxuICovXG5cbi8qKlxuICogU2Nyb2xscyB0aGUgZ2l2ZW4gc2Nyb2xsYWJsZSBlbGVtZW50IGBlbGVtZW50SWRgIHVudGlsIGBlbGVtZW50VG9JZGBcbiAqIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZSBgZWxlbWVudFRvSWRgXG4gKiBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsRWxlbWVudFRvRWxlbWVudE9wdHN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgc2Nyb2xsaW5nIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEJhY2tUbyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnRJZCwgZWxlbWVudFRvSWR9ID0gb3B0cztcbiAgaWYgKCFlbGVtZW50SWQgfHwgIWVsZW1lbnRUb0lkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgQm90aCBlbGVtZW50SWQgYW5kIGVsZW1lbnRUb0lkIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChcbiAgICBgL2FwcGl1bS9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnRJZCl9L3Njcm9sbF90by8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50VG9JZCl9YCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbE9wdHNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIGFuIGVsZW1lbnQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogaXMgYSB2YWxpZCBzY3JvbGxhYmxlIGNvbnRhaW5lciBhbmQgaXQgd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYFxuICogc3RyYXRlZ3kuIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByb3ZpZGVkIHRoZW4gdGhlIGZpcnN0IGN1cnJlbnRseSBhdmFpbGFibGUgc2Nyb2xsYWJsZSB2aWV3XG4gKiBpcyBzZWxlY3RlZCBmb3IgdGhlIGludGVyYWN0aW9uLlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBzdHJhdGVneSBUaGUgZm9sbG93aW5nIHN0cmF0ZWdpZXMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gYGFjY2Vzc2liaWxpdHkgaWRgIChVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24pXG4gKiAtIGBjbGFzcyBuYW1lYCAoVWlTZWxlY3RvcigpLmNsYXNzTmFtZSlcbiAqIC0gYC1hbmRyb2lkIHVpYXV0b21hdG9yYCAoVWlTZWxlY3RvcilcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc2VsZWN0b3IgVGhlIGNvcnJlc3BvbmRpbmcgbG9va3VwIHZhbHVlIGZvciB0aGUgZ2l2ZW5cbiAqIHN0cmF0ZWd5LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBtYXhTd2lwZXMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHN3aXBlcyB0byBwZXJmb3JtXG4gKiBvbiB0aGUgdGFyZ2V0IHNjcm9sbGFibGUgdmlldyBpbiBvcmRlciB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudC5cbiAqIEluIGNhc2UgdGhpcyB2YWx1ZSBpcyB1bnNldCB0aGVuIGl0IHdvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzY3JvbGxhYmxlXG4gKiBlbGVtZW50IGl0c2VsZiAodnVhIGBnZXRNYXhTZWFyY2hTd2lwZXMoKWAgcHJvcGVydHkpLlxuICovXG5cbi8qKlxuICogU2Nyb2xscyB0aGUgZ2l2ZW4gc2Nyb2xsYWJsZSBlbGVtZW50IHVudGlsIHRoZSBlbGVtZW50IGlkZW50aWZpZWRcbiAqIGJ5IGBzdHJhdGVneWAgYW5kIGBzZWxlY3RvcmAgYmVjb21lcyB2aXNpYmxlLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgdGhlXG4gKiBkZXN0aW5hdGlvbiBlbGVtZW50IGlzIGFscmVhZHkgdmlzaWJsZSBpbiB0aGUgdmlldyBwb3J0LiBPdGhlcndpc2UgaXQgd291bGQgc2Nyb2xsXG4gKiB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIHNjcm9sbGFibGUgY29udHJvbCBhbmQgdHJpZXMgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnRcbiAqIGJ5IHNjcm9sbGluZyBpdHMgcGFyZW50IHRvIHRoZSBlbmQgc3RlcCBieSBzdGVwLiBUaGUgc2Nyb2xsIGRpcmVjdGlvbiAodmVydGljYWwgb3IgaG9yaXpvbnRhbClcbiAqIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHBhcmFtIHtTY3JvbGxPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGwgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LCBlbGVtZW50SWQsIC8vIGBlbGVtZW50YCBpcyBkZXByZWNhdGVkLCB1c2UgYGVsZW1lbnRJZGAgaW5zdGVhZFxuICAgIHN0cmF0ZWd5LCBzZWxlY3RvciwgbWF4U3dpcGVzXG4gIH0gPSBvcHRzO1xuICBpZiAoIXN0cmF0ZWd5IHx8ICFzZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggc3RyYXRlZ3kgYW5kIHNlbGVjdG9yIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkIHx8IGVsZW1lbnQpLFxuICAgIHBhcmFtczoge3N0cmF0ZWd5LCBzZWxlY3RvciwgbWF4U3dpcGVzfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
229
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUdBLFNBQVNDLFFBQVQsQ0FBbUJDLE9BQW5CLEVBQTRCO0FBQzFCLFNBQU9BLE9BQU8sR0FBR0MsY0FBS0MsV0FBTCxDQUFpQkQsY0FBS0UsYUFBTCxDQUFtQkgsT0FBbkIsQ0FBakIs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QU0sRUFBRXhCLFFBQVEsQ0FBQ29CLFNBQVMsSUFBSW5CLE9BQWQsQ0FEc0Q7QUFFdEVvRCxJQUFBQSxNQUFNLEVBQUU7QUFBQ0gsTUFBQUEsUUFBRDtBQUFXQyxNQUFBQSxRQUFYO0FBQXFCQyxNQUFBQTtBQUFyQjtBQUY4RCxHQUEzRCxDQUFiO0FBSUQsQ0FaRDs7ZUFjZXJELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuXG5mdW5jdGlvbiB0b09yaWdpbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IHV0aWwud3JhcEVsZW1lbnQodXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9Qb2ludCAoeCwgeSkge1xuICByZXR1cm4gXy5pc0Zpbml0ZSh4KSAmJiBfLmlzRmluaXRlKHkpID8ge3gsIHl9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1JlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gW2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0uc29tZSgodikgPT4gIV8uaXNGaW5pdGUodikpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2ltcGxlIGNsaWNrL3RhcCBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHs/Q2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9uZ0NsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZHVyYXRpb24gWzUwMF0gLSBDbGljayBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/TG9uZ0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVMb25nQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvbG9uZ19jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gICAgZHVyYXRpb24sXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRvdWJsZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RvdWJsZV9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzdGFydCBjb29yZGluYXRlcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGVzZVxuICogY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBlbGVtZW50IGNvcm5lci5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogRHJhZ3MgdGhpcyBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9EcmFnT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEcmFnR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURyYWdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kcmFnJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIHN0YXJ0OiB0b1BvaW50KHN0YXJ0WCwgc3RhcnRZKSxcbiAgICBlbmQ6IHRvUG9pbnQoZW5kWCwgZW5kWSksXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGbGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGZsaW5nZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gZmxpbmcgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIGZsaW5nLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzc1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gZmxpbmdcbiAqIHZlbG9jaXR5IGZvciB0aGUgZ2l2ZW4gdmlldyAoNTAgYnkgZGVmYXVsdClcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RmxpbmdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlRmxpbmdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxpbmdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9mbGluZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQaW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHBpbmNoZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gcGluY2ggYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgcGluY2ggYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBwaW5jaCBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIGNsb3NlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9jbG9zZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBvcGVuIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaE9wZW5HZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfb3BlbicsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc3dpcGUgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc3dpcGUuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHN3aXBlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3dpcGUgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzd2lwZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1N3aXBlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVTd2lwZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc3dpcGUnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzY3JvbGwgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzY3JvbGwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzY3JvbGxpbmcgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBncmVhdGVyIHRoYW4gemVybywgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzIGdlc3R1cmVcbiAqIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2Nyb2xsIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U2Nyb2xsT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50VG9JZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSwgd2hpY2ggYmVsb25nc1xuICogdG8gdGhlIHNjcm9sbGFibGUgZWxlbWVudCBhYm92ZSwgYW5kIHdoaWNoIHNob3VsZCBiZWNvbWUgdmlzaWJsZSBhZnRlclxuICogdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gaXMgZmluaXNoZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYCBzdHJhdGVneS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCBgZWxlbWVudElkYCB1bnRpbCBgZWxlbWVudFRvSWRgXG4gKiBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgYGVsZW1lbnRUb0lkYFxuICogaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxCYWNrVG8gPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGVsZW1lbnRUb0lkfSA9IG9wdHM7XG4gIGlmICghZWxlbWVudElkIHx8ICFlbGVtZW50VG9JZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggZWxlbWVudElkIGFuZCBlbGVtZW50VG9JZCBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoXG4gICAgYC9hcHBpdW0vZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50SWQpfS9zY3JvbGxfdG8vJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudFRvSWQpfWAsICdQT1NUJywge30pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiBhbiBlbGVtZW50LiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmaXJzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNjcm9sbGFibGUgdmlld1xuICogaXMgc2VsZWN0ZWQgZm9yIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc3RyYXRlZ3kgVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGBhY2Nlc3NpYmlsaXR5IGlkYCAoVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKVxuICogLSBgY2xhc3MgbmFtZWAgKFVpU2VsZWN0b3IoKS5jbGFzc05hbWUpXG4gKiAtIGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgKFVpU2VsZWN0b3IpXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHNlbGVjdG9yIFRoZSBjb3JyZXNwb25kaW5nIGxvb2t1cCB2YWx1ZSBmb3IgdGhlIGdpdmVuXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbWF4U3dpcGVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2lwZXMgdG8gcGVyZm9ybVxuICogb24gdGhlIHRhcmdldCBzY3JvbGxhYmxlIHZpZXcgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnQuXG4gKiBJbiBjYXNlIHRoaXMgdmFsdWUgaXMgdW5zZXQgdGhlbiBpdCB3b3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZVxuICogZWxlbWVudCBpdHNlbGYgKHZ1YSBgZ2V0TWF4U2VhcmNoU3dpcGVzKClgIHByb3BlcnR5KS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCB1bnRpbCB0aGUgZWxlbWVudCBpZGVudGlmaWVkXG4gKiBieSBgc3RyYXRlZ3lgIGFuZCBgc2VsZWN0b3JgIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZVxuICogZGVzdGluYXRpb24gZWxlbWVudCBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsT3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCwgZWxlbWVudElkLCAvLyBgZWxlbWVudGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlbGVtZW50SWRgIGluc3RlYWRcbiAgICBzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc1xuICB9ID0gb3B0cztcbiAgaWYgKCFzdHJhdGVneSB8fCAhc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIHN0cmF0ZWd5IGFuZCBzZWxlY3RvciBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCB8fCBlbGVtZW50KSxcbiAgICBwYXJhbXM6IHtzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc30sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -7,7 +7,7 @@ exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _appiumSupport = require("appium-support");
10
+ var _support = require("@appium/support");
11
11
 
12
12
  let extensions = {},
13
13
  commands = {};
@@ -27,7 +27,7 @@ commands.getDevicePixelRatio = async function () {
27
27
  commands.getViewportScreenshot = async function () {
28
28
  const screenshot = await this.getScreenshot();
29
29
  const rect = await this.getViewPortRect();
30
- return await _appiumSupport.imageUtil.cropBase64Image(screenshot, rect);
30
+ return await _support.imageUtil.cropBase64Image(screenshot, rect);
31
31
  };
32
32
 
33
33
  commands.getViewPortRect = async function () {
@@ -46,4 +46,4 @@ var _default = extensions;
46
46
  exports.default = _default;require('source-map-support').install();
47
47
 
48
48
 
49
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy92aWV3cG9ydC5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJzdGF0dXNCYXIiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldERldmljZVBpeGVsUmF0aW8iLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJzY3JlZW5zaG90IiwiZ2V0U2NyZWVuc2hvdCIsInJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJpbWFnZVV0aWwiLCJjcm9wQmFzZTY0SW1hZ2UiLCJ3aW5kb3dTaXplIiwiZ2V0V2luZG93U2l6ZSIsInN0YXR1c0JhckhlaWdodCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsSUFBSUEsVUFBVSxHQUFHLEVBQWpCO0FBQUEsSUFBcUJDLFFBQVEsR0FBRyxFQUFoQzs7O0FBR0FBLFFBQVEsQ0FBQ0Msa0JBQVQsR0FBOEIsa0JBQWtCO0FBQzlDLFFBQU07QUFBQ0MsSUFBQUE7QUFBRCxNQUFjLE1BQU0sS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQW1DLDRCQUFuQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUExQjtBQUNBLFNBQU9ILFNBQVA7QUFDRCxDQUhEOztBQU1BRixRQUFRLENBQUNNLG1CQUFULEdBQStCLGtCQUFrQjtBQUMvQyxTQUFPLE1BQU0sS0FBS0gsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLDRCQUFsQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTyxxQkFBVCxHQUFpQyxrQkFBa0I7QUFDakQsUUFBTUMsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLElBQUksR0FBRyxNQUFNLEtBQUtDLGVBQUwsRUFBbkI7QUFDQSxTQUFPLE1BQU1DLHlCQUFVQyxlQUFWLENBQTBCTCxVQUExQixFQUFzQ0UsSUFBdEMsQ0FBYjtBQUNELENBSkQ7O0FBTUFWLFFBQVEsQ0FBQ1csZUFBVCxHQUEyQixrQkFBa0I7QUFDM0MsUUFBTUcsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxNQUFNLEtBQUtmLGtCQUFMLEVBQTlCO0FBR0EsU0FBTztBQUNMZ0IsSUFBQUEsSUFBSSxFQUFFLENBREQ7QUFFTEMsSUFBQUEsR0FBRyxFQUFFRixlQUZBO0FBR0xHLElBQUFBLEtBQUssRUFBRUwsVUFBVSxDQUFDSyxLQUhiO0FBSUxDLElBQUFBLE1BQU0sRUFBRU4sVUFBVSxDQUFDTSxNQUFYLEdBQW9CSjtBQUp2QixHQUFQO0FBTUQsQ0FYRDs7QUFhQUssTUFBTSxDQUFDQyxNQUFQLENBQWN2QixVQUFkLEVBQTBCQyxRQUExQjtlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1hZ2VVdGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuXG5cbmxldCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbi8vIG1lbW9pemVkIGluIGNvbnN0cnVjdG9yXG5jb21tYW5kcy5nZXRTdGF0dXNCYXJIZWlnaHQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHtzdGF0dXNCYXJ9ID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFyc2AsICdHRVQnLCB7fSk7XG4gIHJldHVybiBzdGF0dXNCYXI7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0RGV2aWNlUGl4ZWxSYXRpbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvcGl4ZWxfcmF0aW8nLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Vmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzY3JlZW5zaG90ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90KCk7XG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICByZXR1cm4gYXdhaXQgaW1hZ2VVdGlsLmNyb3BCYXNlNjRJbWFnZShzY3JlZW5zaG90LCByZWN0KTtcbn07XG5cbmNvbW1hbmRzLmdldFZpZXdQb3J0UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICBjb25zdCBzdGF0dXNCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAvLyBhbmRyb2lkIHJldHVybnMgdGhlIHVwc2NhbGVkIHdpbmRvdyBzaXplLCBzbyB0byBnZXQgdGhlIHRydWUgc2l6ZSBvZiB0aGVcbiAgLy8gcmVjdCB3ZSBoYXZlIHRvIGRvd25zY2FsZVxuICByZXR1cm4ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiBzdGF0dXNCYXJIZWlnaHQsXG4gICAgd2lkdGg6IHdpbmRvd1NpemUud2lkdGgsXG4gICAgaGVpZ2h0OiB3aW5kb3dTaXplLmhlaWdodCAtIHN0YXR1c0JhckhlaWdodFxuICB9O1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcyk7XG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL3ZpZXdwb3J0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
49
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy92aWV3cG9ydC5qcyJdLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJzdGF0dXNCYXIiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldERldmljZVBpeGVsUmF0aW8iLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJzY3JlZW5zaG90IiwiZ2V0U2NyZWVuc2hvdCIsInJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJpbWFnZVV0aWwiLCJjcm9wQmFzZTY0SW1hZ2UiLCJ3aW5kb3dTaXplIiwiZ2V0V2luZG93U2l6ZSIsInN0YXR1c0JhckhlaWdodCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsSUFBSUEsVUFBVSxHQUFHLEVBQWpCO0FBQUEsSUFBcUJDLFFBQVEsR0FBRyxFQUFoQzs7O0FBR0FBLFFBQVEsQ0FBQ0Msa0JBQVQsR0FBOEIsa0JBQWtCO0FBQzlDLFFBQU07QUFBQ0MsSUFBQUE7QUFBRCxNQUFjLE1BQU0sS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQW1DLDRCQUFuQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUExQjtBQUNBLFNBQU9ILFNBQVA7QUFDRCxDQUhEOztBQU1BRixRQUFRLENBQUNNLG1CQUFULEdBQStCLGtCQUFrQjtBQUMvQyxTQUFPLE1BQU0sS0FBS0gsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLDRCQUFsQyxFQUFnRSxLQUFoRSxFQUF1RSxFQUF2RSxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTyxxQkFBVCxHQUFpQyxrQkFBa0I7QUFDakQsUUFBTUMsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLElBQUksR0FBRyxNQUFNLEtBQUtDLGVBQUwsRUFBbkI7QUFDQSxTQUFPLE1BQU1DLG1CQUFVQyxlQUFWLENBQTBCTCxVQUExQixFQUFzQ0UsSUFBdEMsQ0FBYjtBQUNELENBSkQ7O0FBTUFWLFFBQVEsQ0FBQ1csZUFBVCxHQUEyQixrQkFBa0I7QUFDM0MsUUFBTUcsVUFBVSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUF6QjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxNQUFNLEtBQUtmLGtCQUFMLEVBQTlCO0FBR0EsU0FBTztBQUNMZ0IsSUFBQUEsSUFBSSxFQUFFLENBREQ7QUFFTEMsSUFBQUEsR0FBRyxFQUFFRixlQUZBO0FBR0xHLElBQUFBLEtBQUssRUFBRUwsVUFBVSxDQUFDSyxLQUhiO0FBSUxDLElBQUFBLE1BQU0sRUFBRU4sVUFBVSxDQUFDTSxNQUFYLEdBQW9CSjtBQUp2QixHQUFQO0FBTUQsQ0FYRDs7QUFhQUssTUFBTSxDQUFDQyxNQUFQLENBQWN2QixVQUFkLEVBQTBCQyxRQUExQjtlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1hZ2VVdGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0U3RhdHVzQmFySGVpZ2h0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7c3RhdHVzQmFyfSA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3lzdGVtX2JhcnNgLCAnR0VUJywge30pO1xuICByZXR1cm4gc3RhdHVzQmFyO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldERldmljZVBpeGVsUmF0aW8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BpeGVsX3JhdGlvJywgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2NyZWVuc2hvdCA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdCgpO1xuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbiAgcmV0dXJuIGF3YWl0IGltYWdlVXRpbC5jcm9wQmFzZTY0SW1hZ2Uoc2NyZWVuc2hvdCwgcmVjdCk7XG59O1xuXG5jb21tYW5kcy5nZXRWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHdpbmRvd1NpemUgPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgY29uc3Qgc3RhdHVzQmFySGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXNCYXJIZWlnaHQoKTtcbiAgLy8gYW5kcm9pZCByZXR1cm5zIHRoZSB1cHNjYWxlZCB3aW5kb3cgc2l6ZSwgc28gdG8gZ2V0IHRoZSB0cnVlIHNpemUgb2YgdGhlXG4gIC8vIHJlY3Qgd2UgaGF2ZSB0byBkb3duc2NhbGVcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogc3RhdHVzQmFySGVpZ2h0LFxuICAgIHdpZHRoOiB3aW5kb3dTaXplLndpZHRoLFxuICAgIGhlaWdodDogd2luZG93U2l6ZS5oZWlnaHQgLSBzdGF0dXNCYXJIZWlnaHRcbiAgfTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMpO1xuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy92aWV3cG9ydC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -11,7 +11,7 @@ var _cssSelectorParser = require("css-selector-parser");
11
11
 
12
12
  var _lodash = require("lodash");
13
13
 
14
- var _appiumBaseDriver = require("appium-base-driver");
14
+ var _baseDriver = require("@appium/base-driver");
15
15
 
16
16
  const parser = new _cssSelectorParser.CssSelectorParser();
17
17
  parser.registerSelectorPseudos('has');
@@ -221,13 +221,13 @@ class CssConverter {
221
221
  try {
222
222
  cssObj = parser.parse(this.selector);
223
223
  } catch (e) {
224
- throw new _appiumBaseDriver.errors.InvalidSelectorError(`Invalid CSS selector '${this.selector}'. Reason: '${e}'`);
224
+ throw new _baseDriver.errors.InvalidSelectorError(`Invalid CSS selector '${this.selector}'. Reason: '${e}'`);
225
225
  }
226
226
 
227
227
  try {
228
228
  return this.parseCssObject(cssObj);
229
229
  } catch (e) {
230
- throw new _appiumBaseDriver.errors.InvalidSelectorError(`Unsupported CSS selector '${this.selector}'. Reason: '${e}'`);
230
+ throw new _baseDriver.errors.InvalidSelectorError(`Unsupported CSS selector '${this.selector}'. Reason: '${e}'`);
231
231
  }
232
232
  }
233
233
 
@@ -237,4 +237,4 @@ var _default = CssConverter;
237
237
  exports.default = _default;require('source-map-support').install();
238
238
 
239
239
 
240
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jc3MtY29udmVydGVyLmpzIl0sIm5hbWVzIjpbInBhcnNlciIsIkNzc1NlbGVjdG9yUGFyc2VyIiwicmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MiLCJyZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMiLCJyZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMiLCJlbmFibGVTdWJzdGl0dXRlcyIsIlJFU09VUkNFX0lEIiwiSURfTE9DQVRPUl9QQVRURVJOIiwiQk9PTEVBTl9BVFRSUyIsIk5VTUVSSUNfQVRUUlMiLCJTVFJfQVRUUlMiLCJBTExfQVRUUlMiLCJBVFRSSUJVVEVfQUxJQVNFUyIsInRvU25ha2VDYXNlIiwic3RyIiwidG9rZW5zIiwic3BsaXQiLCJtYXAiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJvdXQiLCJqb2luIiwiYXNzZXJ0R2V0Qm9vbCIsImNzcyIsInZhbCIsInZhbHVlIiwiaW5jbHVkZXMiLCJFcnJvciIsIm5hbWUiLCJhc3NlcnRHZXRBdHRyTmFtZSIsImF0dHJOYW1lIiwib2ZmaWNpYWxBdHRyIiwiYWxpYXNBdHRycyIsImdldFdvcmRNYXRjaGVyUmVnZXgiLCJ3b3JkIiwiQ3NzQ29udmVydGVyIiwiY29uc3RydWN0b3IiLCJzZWxlY3RvciIsInBrZyIsImZvcm1hdElkTG9jYXRvciIsImxvY2F0b3IiLCJ0ZXN0IiwicGFyc2VBdHRyIiwiY3NzQXR0ciIsInZhbHVlVHlwZSIsIm1ldGhvZE5hbWUiLCJvcGVyYXRvciIsInBhcnNlUHNldWRvIiwiY3NzUHNldWRvIiwicHNldWRvTmFtZSIsInBhcnNlQ3NzUnVsZSIsImNzc1J1bGUiLCJuZXN0aW5nT3BlcmF0b3IiLCJ1aUF1dG9tYXRvclNlbGVjdG9yIiwidGFnTmFtZSIsImFuZHJvaWRDbGFzcyIsImNsYXNzTmFtZXMiLCJjc3NDbGFzc05hbWVzIiwicHVzaCIsImlkIiwiYXR0cnMiLCJhdHRyIiwicHNldWRvcyIsInBzZXVkbyIsInJ1bGUiLCJwYXJzZUNzc09iamVjdCIsInR5cGUiLCJzZWxlY3RvcnMiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJjc3NPYmoiLCJwYXJzZSIsImUiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFHLElBQUlDLG9DQUFKLEVBQWY7QUFDQUQsTUFBTSxDQUFDRSx1QkFBUCxDQUErQixLQUEvQjtBQUNBRixNQUFNLENBQUNHLHdCQUFQLENBQWdDLEdBQWhDLEVBQXFDLEdBQXJDLEVBQTBDLEdBQTFDO0FBQ0FILE1BQU0sQ0FBQ0ksd0JBQVAsQ0FBZ0MsR0FBaEMsRUFBcUMsR0FBckMsRUFBMEMsR0FBMUMsRUFBK0MsR0FBL0M7QUFDQUosTUFBTSxDQUFDSyxpQkFBUDtBQUVBLE1BQU1DLFdBQVcsR0FBRyxhQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLHFDQUEzQjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQURvQixFQUNQLFNBRE8sRUFDSSxXQURKLEVBQ2lCLFNBRGpCLEVBQzRCLFdBRDVCLEVBRXBCLFNBRm9CLEVBRVQsZ0JBRlMsRUFFUyxZQUZULEVBRXVCLFVBRnZCLENBQXRCO0FBS0EsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLE9BRG9CLEVBQ1gsVUFEVyxDQUF0QjtBQUlBLE1BQU1DLFNBQVMsR0FBRyxDQUNoQixhQURnQixFQUNESixXQURDLEVBQ1ksTUFEWixFQUNvQixZQURwQixFQUNrQyxjQURsQyxDQUFsQjtBQUlBLE1BQU1LLFNBQVMsR0FBRyxDQUNoQixHQUFHSCxhQURhLEVBRWhCLEdBQUdDLGFBRmEsRUFHaEIsR0FBR0MsU0FIYSxDQUFsQjtBQU1BLE1BQU1FLGlCQUFpQixHQUFHLENBQ3hCLENBQUNOLFdBQUQsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUR3QixFQUV4QixDQUFDLGFBQUQsRUFBZ0IsQ0FDZCxxQkFEYyxFQUNTLGNBRFQsRUFFZCxNQUZjLEVBRU4sa0JB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QUN2QixRQUFJQyxNQUFKOztBQUNBLFFBQUk7QUFDRkEsTUFBQUEsTUFBTSxHQUFHdkUsTUFBTSxDQUFDd0UsS0FBUCxDQUFhLEtBQUtqQyxRQUFsQixDQUFUO0FBQ0QsS0FGRCxDQUVFLE9BQU9rQyxDQUFQLEVBQVU7QUFDVixZQUFNLElBQUlDLHlCQUFPQyxvQkFBWCxDQUFpQyx5QkFBd0IsS0FBS3BDLFFBQVMsZUFBY2tDLENBQUUsR0FBdkYsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixhQUFPLEtBQUtOLGNBQUwsQ0FBb0JJLE1BQXBCLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1YsWUFBTSxJQUFJQyx5QkFBT0Msb0JBQVgsQ0FBaUMsNkJBQTRCLEtBQUtwQyxRQUFTLGVBQWNrQyxDQUFFLEdBQTNGLENBQU47QUFDRDtBQUNGOztBQXJMZ0I7O2VBd0xKcEMsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENzc1NlbGVjdG9yUGFyc2VyIH0gZnJvbSAnY3NzLXNlbGVjdG9yLXBhcnNlcic7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcblxuY29uc3QgcGFyc2VyID0gbmV3IENzc1NlbGVjdG9yUGFyc2VyKCk7XG5wYXJzZXIucmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MoJ2hhcycpO1xucGFyc2VyLnJlZ2lzdGVyTmVzdGluZ09wZXJhdG9ycygnPicsICcrJywgJ34nKTtcbnBhcnNlci5yZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMoJ14nLCAnJCcsICcqJywgJ34nKTtcbnBhcnNlci5lbmFibGVTdWJzdGl0dXRlcygpO1xuXG5jb25zdCBSRVNPVVJDRV9JRCA9ICdyZXNvdXJjZS1pZCc7XG5jb25zdCBJRF9MT0NBVE9SX1BBVFRFUk4gPSAvXlthLXpBLVpfXVthLXpBLVowLTkuX10qOmlkXFwvW1xcU10rJC87XG5cbmNvbnN0IEJPT0xFQU5fQVRUUlMgPSBbXG4gICdjaGVja2FibGUnLCAnY2hlY2tlZCcsICdjbGlja2FibGUnLCAnZW5hYmxlZCcsICdmb2N1c2FibGUnLFxuICAnZm9jdXNlZCcsICdsb25nLWNsaWNrYWJsZScsICdzY3JvbGxhYmxlJywgJ3NlbGVjdGVkJyxcbl07XG5cbmNvbnN0IE5VTUVSSUNfQVRUUlMgPSBbXG4gICdpbmRleCcsICdpbnN0YW5jZScsXG5dO1xuXG5jb25zdCBTVFJfQVRUUlMgPSBbXG4gICdkZXNjcmlwdGlvbicsIFJFU09VUkNFX0lELCAndGV4dCcsICdjbGFzcy1uYW1lJywgJ3BhY2thZ2UtbmFtZSdcbl07XG5cbmNvbnN0IEFMTF9BVFRSUyA9IFtcbiAgLi4uQk9PTEVBTl9BVFRSUyxcbiAgLi4uTlVNRVJJQ19BVFRSUyxcbiAgLi4uU1RSX0FUVFJTLFxuXTtcblxuY29uc3QgQVRUUklCVVRFX0FMSUFTRVMgPSBbXG4gIFtSRVNPVVJDRV9JRCwgWydpZCddXSxcbiAgWydkZXNjcmlwdGlvbicsIFtcbiAgICAnY29udGVudC1kZXNjcmlwdGlvbicsICdjb250ZW50LWRlc2MnLFxuICAgICdkZXNjJywgJ2FjY2Vzc2liaWxpdHktaWQnLFxuICBdXSxcbiAgWydpbmRleCcsIFsnbnRoLWNoaWxkJ11dLFxuXTtcblxuLyoqXG4gKiBDb252ZXJ0IGh5cGhlbiBzZXBhcmF0ZWQgd29yZCB0byBzbmFrZSBjYXNlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGh5cGhlbiBzZXBhcmF0ZWQgd29yZCB0cmFuc2xhdGVkIHRvIHNuYWtlIGNhc2VcbiAqL1xuZnVuY3Rpb24gdG9TbmFrZUNhc2UgKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCB0b2tlbnMgPSBzdHIuc3BsaXQoJy0nKS5tYXAoKHN0cikgPT4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpO1xuICBjb25zdCBvdXQgPSB0b2tlbnMuam9pbignJyk7XG4gIHJldHVybiBvdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBvdXQuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzTmFtZVZhbHVlT2JqZWN0XG4gKiBAcHJvcGVydHkgez9uYW1lfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBDU1Mgb2JqZWN0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgQ1NTIG9iamVjdFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBib29sZWFuIGZyb20gYSBDU1Mgb2JqZWN0LiBJZiBlbXB0eSwgcmV0dXJuIHRydWUuIElmIG5vdCB0cnVlL2ZhbHNlL2VtcHR5LCB0aHJvdyBleGNlcHRpb25cbiAqXG4gKiBAcGFyYW0ge0Nzc05hbWVWYWx1ZU9iamVjdH0gY3NzIEEgQ1NTIG9iamVjdCB0aGF0IGhhcyAnbmFtZScgYW5kICd2YWx1ZSdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEVpdGhlciAndHJ1ZScgb3IgJ2ZhbHNlJy4gSWYgdmFsdWUgaXMgZW1wdHksIHJldHVybiAndHJ1ZSdcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0R2V0Qm9vbCAoY3NzKSB7XG4gIGNvbnN0IHZhbCA9IGNzcy52YWx1ZT8udG9Mb3dlckNhc2UoKSB8fCAndHJ1ZSc7IC8vIGFuIG9taXR0ZWQgYm9vbGVhbiBhdHRyaWJ1dGUgbWVhbnMgJ3RydWUnIChlLmcuOiBpbnB1dFtjaGVja2VkXSBtZWFucyBjaGVja2VkIGlzIHRydWUpXG4gIGlmIChbJ3RydWUnLCAnZmFsc2UnXS5pbmNsdWRlcyh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzcy5uYW1lfScgbXVzdCBiZSB0cnVlLCBmYWxzZSBvciBlbXB0eS4gRm91bmQgJyR7Y3NzLnZhbHVlfSdgKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNhbm9uaWNhbCBmb3JtIG9mIGEgQ1NTIGF0dHJpYnV0ZSBuYW1lXG4gKlxuICogQ29udmVydHMgdG8gbG93ZXJjYXNlIGFuZCBpZiBhbiBhdHRyaWJ1dGUgbmFtZSBpcyBhbiBhbGlhcyBmb3Igc29tZXRoaW5nIGVsc2UsIHJldHVyblxuICogd2hhdCBpdCBpcyBhbiBhbGlhcyBmb3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjYW5vbmljYWwgYXR0cmlidXRlIG5hbWVcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0R2V0QXR0ck5hbWUgKGNzcykge1xuICBjb25zdCBhdHRyTmFtZSA9IGNzcy5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gQ2hlY2sgaWYgaXQncyBzdXBwb3J0ZWQgYW5kIGlmIGl0IGlzLCByZXR1cm4gaXRcbiAgaWYgKEFMTF9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICByZXR1cm4gYXR0ck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vIElmIGF0dHJOYW1lIGlzIGFuIGFsaWFzIGZvciBzb21ldGhpbmcgZWxzZSwgcmV0dXJuIHRoYXRcbiAgZm9yIChjb25zdCBbb2ZmaWNpYWxBdHRyLCBhbGlhc0F0dHJzXSBvZiBBVFRSSUJVVEVfQUxJQVNFUykge1xuICAgIGlmIChhbGlhc0F0dHJzLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIG9mZmljaWFsQXR0cjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAnJHthdHRyTmFtZX0nIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZS4gYCArXG4gICAgYFN1cHBvcnRlZCBhdHRyaWJ1dGVzIGFyZSAnJHtBTExfQVRUUlMuam9pbignLCAnKX0nYCk7XG59XG5cbi8qKlxuICogR2V0IGEgcmVnZXggdGhhdCBtYXRjaGVzIGEgd2hvbGUgd29yZC4gRm9yIHRoZSB+PSBDU1MgYXR0cmlidXRlIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHJlZ2V4IFwid29yZFwiIG1hdGNoZXJcbiAqL1xuZnVuY3Rpb24gZ2V0V29yZE1hdGNoZXJSZWdleCAod29yZCkge1xuICByZXR1cm4gYFxcXFxiKFxcXFx3KiR7ZXNjYXBlUmVnRXhwKHdvcmQpfVxcXFx3KilcXFxcYmA7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzQXR0clxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZVR5cGUgVHlwZSBvZiBhdHRyaWJ1dGUgKG11c3QgYmUgc3RyaW5nIG9yIGVtcHR5KVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciBiZXR3ZWVuIHZhbHVlIGFuZCB2YWx1ZSB0eXBlICg9LCAqPSwgLCBePSwgJD0pXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NSdWxlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5lc3RpbmdPcGVyYXRvciBUaGUgbmVzdGluZyBvcGVyYXRvciAoYWthOiBjb21iaW5hdG9yIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfU2VsZWN0b3JzKVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB0YWdOYW1lIFRoZSB0YWcgbmFtZSAoYWthOiB0eXBlIHNlbGVjdG9yIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9UeXBlX3NlbGVjdG9ycylcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ1tdfSBjbGFzc05hbWVzIEFuIGFycmF5IG9mIENTUyBjbGFzcyBuYW1lc1xuICogQHByb3BlcnR5IHs/Q3NzQXR0cltdfSBhdHRycyBBbiBhcnJheSBvZiBDU1MgYXR0cmlidXRlc1xuICogQHByb3BlcnR5IHs/Q3NzUHNldWRvW119IGF0dHJzIEFuIGFycmF5IG9mIENTUyBwc2V1ZG9zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkIENTUyBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9Dc3NSdWxlfSBydWxlIEEgZGVzY2VuZGFudCBvZiB0aGlzIENTUyBydWxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NPYmplY3RcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdHlwZSBUeXBlIG9mIENTUyBvYmplY3QuICdydWxlJywgJ3J1bGVzZXQnIG9yICdzZWxlY3RvcnMnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDc3NQc2V1ZG9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWVUeXBlIFRoZSB0eXBlIG9mIENTUyBwc2V1ZG8gc2VsZWN0b3IgKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Nzcy1zZWxlY3Rvci1wYXJzZXIgZm9yIHJlZmVyZW5jZSlcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHNldWRvIHNlbGVjdG9yXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcHNldWRvIHNlbGVjdG9yXG4gKi9cblxuY2xhc3MgQ3NzQ29udmVydGVyIHtcblxuICBjb25zdHJ1Y3RvciAoc2VsZWN0b3IsIHBrZykge1xuICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB0aGlzLnBrZyA9IHBrZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYDxwa2dOYW1lPjppZC9gIHByZWZpeCB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nIGlmIGl0J3Mgbm90IHRoZXJlIGFscmVhZHlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0b3IgVGhlIGluaXRpYWwgbG9jYXRvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgd2l0aCBgPHBrZ05hbWU+OmlkL2AgcHJlcGVuZGVkIChpZiBpdCB3YXNuJ3QgYWxyZWFkeSlcbiAgICovXG4gIGZvcm1hdElkTG9jYXRvciAobG9jYXRvcikge1xuICAgIHJldHVybiBJRF9MT0NBVE9SX1BBVFRFUk4udGVzdChsb2NhdG9yKVxuICAgICAgPyBsb2NhdG9yXG4gICAgICA6IGAke3RoaXMucGtnIHx8ICdhbmRyb2lkJ306aWQvJHtsb2NhdG9yfWA7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBhdHRyaWJ1dGUgaW50byBhIFVpU2VsZWN0b3IgbWV0aG9kIGNhbGxcbiAgICpcbiAgICogQHBhcmFtIHtDc3NBdHRyfSBjc3NBdHRyIENTUyBhdHRyaWJ1dGUgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IENTUyBhdHRyaWJ1dGUgcGFyc2VkIGFzIFVpU2VsZWN0b3JcbiAgICovXG4gIHBhcnNlQXR0ciAoY3NzQXR0cikge1xuICAgIGlmIChjc3NBdHRyLnZhbHVlVHlwZSAmJiBjc3NBdHRyLnZhbHVlVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7Y3NzQXR0ci5uYW1lfT0ke2Nzc0F0dHIudmFsdWV9JyBpcyBhbiBpbnZhbGlkIGF0dHJpYnV0ZS4gYCArXG4gICAgICAgIGBPbmx5ICdzdHJpbmcnIGFuZCBlbXB0eSBhdHRyaWJ1dGUgdHlwZXMgYXJlIHN1cHBvcnRlZC4gRm91bmQgJyR7Y3NzQXR0ci52YWx1ZVR5cGV9J2ApO1xuICAgIH1cbiAgICBjb25zdCBhdHRyTmFtZSA9IGFzc2VydEdldEF0dHJOYW1lKGNzc0F0dHIpO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSB0b1NuYWtlQ2FzZShhdHRyTmFtZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IGl0J3MgYSBzdXBwb3J0ZWQgYXR0cmlidXRlXG4gICAgaWYgKCFTVFJfQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpICYmICFCT09MRUFOX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHthdHRyTmFtZX0nIGlzIG5vdCBzdXBwb3J0ZWQuIFN1cHBvcnRlZCBhdHRyaWJ1dGVzIGFyZSBgICtcbiAgICAgICAgYCcke1suLi5TVFJfQVRUUlMsIC4uLkJPT0xFQU5fQVRUUlNdLmpvaW4oJywgJyl9J2ApO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIGJvb2xlYW4sIGlmIGl0J3MgYSBib29sZWFuIGF0dHJpYnV0ZVxuICAgIGlmIChCT09MRUFOX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfSgke2Fzc2VydEdldEJvb2woY3NzQXR0cil9KWA7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHBhcnNlIGFzIHN0cmluZ1xuICAgIGxldCB2YWx1ZSA9IGNzc0F0dHIudmFsdWUgfHwgJyc7XG4gICAgaWYgKGF0dHJOYW1lID09PSBSRVNPVVJDRV9JRCkge1xuICAgICAgdmFsdWUgPSB0aGlzLmZvcm1hdElkTG9jYXRvcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiXCIpYDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNzc0F0dHIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJz0nOlxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9KFwiJHt2YWx1ZX1cIilgO1xuICAgICAgY2FzZSAnKj0nOlxuICAgICAgICBpZiAoWydkZXNjcmlwdGlvbicsICd0ZXh0J10uaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfUNvbnRhaW5zKFwiJHt2YWx1ZX1cIilgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiJHtlc2NhcGVSZWdFeHAodmFsdWUpfVwiKWA7XG4gICAgICBjYXNlICdePSc6XG4gICAgICAgIGlmIChbJ2Rlc2NyaXB0aW9uJywgJ3RleHQnXS5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9U3RhcnRzV2l0aChcIiR7dmFsdWV9XCIpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIl4ke2VzY2FwZVJlZ0V4cCh2YWx1ZSl9XCIpYDtcbiAgICAgIGNhc2UgJyQ9JzpcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCIke2VzY2FwZVJlZ0V4cCh2YWx1ZSl9JFwiKWA7XG4gICAgICBjYXNlICd+PSc6XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiJHtnZXRXb3JkTWF0Y2hlclJlZ2V4KHZhbHVlKX1cIilgO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVW5yZWFjaGFibGUsIGJ1dCBhZGRpbmcgZXJyb3IgaW4gY2FzZSBhIG5ldyBDU1MgYXR0cmlidXRlIGlzIGFkZGVkLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIENTUyBhdHRyaWJ1dGUgb3BlcmF0b3IgJyR7Y3NzQXR0ci5vcGVyYXRvcn0nLiBgICtcbiAgICAgICAgICBgICc9JywgJyo9JywgJ149JywgJyQ9JyBhbmQgJ349JyBhcmUgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgQ1NTIHBzZXVkbyBjbGFzcyB0byBhIFVpU2VsZWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtDc3NQc2V1ZG99IGNzc1BzZXVkbyBDU1MgUHNldWRvIGNsYXNzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFBzZXVkbyBzZWxlY3RvciBwYXJzZWQgYXMgVWlTZWxlY3RvclxuICAgKi9cbiAgcGFyc2VQc2V1ZG8gKGNzc1BzZXVkbykge1xuICAgIGlmIChjc3NQc2V1ZG8udmFsdWVUeXBlICYmIGNzc1BzZXVkby52YWx1ZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzc1BzZXVkby5uYW1lfT0ke2Nzc1BzZXVkby52YWx1ZX0nLiBgICtcbiAgICAgICAgYFVuc3VwcG9ydGVkIGNzcyBwc2V1ZG8gY2xhc3MgdmFsdWUgdHlwZTogJyR7Y3NzUHNldWRvLnZhbHVlVHlwZX0nLiBPbmx5ICdzdHJpbmcnIHR5cGUgb3IgZW1wdHkgaXMgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHBzZXVkb05hbWUgPSBhc3NlcnRHZXRBdHRyTmFtZShjc3NQc2V1ZG8pO1xuXG4gICAgaWYgKEJPT0xFQU5fQVRUUlMuaW5jbHVkZXMocHNldWRvTmFtZSkpIHtcbiAgICAgIHJldHVybiBgLiR7dG9TbmFrZUNhc2UocHNldWRvTmFtZSl9KCR7YXNzZXJ0R2V0Qm9vbChjc3NQc2V1ZG8pfSlgO1xuICAgIH1cblxuICAgIGlmIChOVU1FUklDX0FUVFJTLmluY2x1ZGVzKHBzZXVkb05hbWUpKSB7XG4gICAgICByZXR1cm4gYC4ke3BzZXVkb05hbWV9KCR7Y3NzUHNldWRvLnZhbHVlfSlgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgQ1NTIHJ1bGUgdG8gYSBVaVNlbGVjdG9yXG4gICAqIEBwYXJhbSB7Q3NzUnVsZX0gY3NzUnVsZSBDU1MgcnVsZSBkZWZpbml0aW9uXG4gICAqL1xuICBwYXJzZUNzc1J1bGUgKGNzc1J1bGUpIHtcbiAgICBjb25zdCB7IG5lc3RpbmdPcGVyYXRvciB9ID0gY3NzUnVsZTtcbiAgICBpZiAobmVzdGluZ09wZXJhdG9yICYmIG5lc3RpbmdPcGVyYXRvciAhPT0gJyAnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25lc3RpbmdPcGVyYXRvcn0nIGlzIG5vdCBhIHN1cHBvcnRlZCBjb21iaW5hdG9yLiBgICtcbiAgICAgICAgYE9ubHkgY2hpbGQgY29tYmluYXRvciAoPikgYW5kIGRlc2NlbmRhbnQgY29tYmluYXRvciBhcmUgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGxldCB1aUF1dG9tYXRvclNlbGVjdG9yID0gJ25ldyBVaVNlbGVjdG9yKCknO1xuICAgIGlmIChjc3NSdWxlLnRhZ05hbWUgJiYgY3NzUnVsZS50YWdOYW1lICE9PSAnKicpIHtcbiAgICAgIGxldCBhbmRyb2lkQ2xhc3MgPSBbY3NzUnVsZS50YWdOYW1lXTtcbiAgICAgIGlmIChjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzc05hbWVzIG9mIGNzc1J1bGUuY2xhc3NOYW1lcykge1xuICAgICAgICAgIGFuZHJvaWRDbGFzcy5wdXNoKGNzc0NsYXNzTmFtZXMpO1xuICAgICAgICB9XG4gICAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWUoXCIke2FuZHJvaWRDbGFzcy5qb2luKCcuJyl9XCIpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWVNYXRjaGVzKFwiJHtjc3NSdWxlLnRhZ05hbWV9XCIpYDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1J1bGUuY2xhc3NOYW1lcykge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNsYXNzTmFtZU1hdGNoZXMoXCIke2Nzc1J1bGUuY2xhc3NOYW1lcy5qb2luKCdcXFxcLicpfVwiKWA7XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLmlkKSB7XG4gICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAucmVzb3VyY2VJZChcIiR7dGhpcy5mb3JtYXRJZExvY2F0b3IoY3NzUnVsZS5pZCl9XCIpYDtcbiAgICB9XG4gICAgaWYgKGNzc1J1bGUuYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBjc3NSdWxlLmF0dHJzKSB7XG4gICAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gdGhpcy5wYXJzZUF0dHIoYXR0cik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLnBzZXVkb3MpIHtcbiAgICAgIGZvciAoY29uc3QgcHNldWRvIG9mIGNzc1J1bGUucHNldWRvcykge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IHRoaXMucGFyc2VQc2V1ZG8ocHNldWRvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNzc1J1bGUucnVsZSkge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLmNoaWxkU2VsZWN0b3IoJHt0aGlzLnBhcnNlQ3NzUnVsZShjc3NSdWxlLnJ1bGUpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gdWlBdXRvbWF0b3JTZWxlY3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IENTUyBvYmplY3QgdG8gVWlBdXRvbWF0b3IyIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7Q3NzT2JqZWN0fSBjc3MgQ1NTIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgQ1NTIG9iamVjdCBwYXJzZWQgYXMgYSBVaVNlbGVjdG9yXG4gICAqL1xuICBwYXJzZUNzc09iamVjdCAoY3NzKSB7XG4gICAgc3dpdGNoIChjc3MudHlwZSkge1xuICAgICAgY2FzZSAncnVsZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ3NzUnVsZShjc3MpO1xuICAgICAgY2FzZSAncnVsZVNldCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQ3NzT2JqZWN0KGNzcy5ydWxlKTtcbiAgICAgIGNhc2UgJ3NlbGVjdG9ycyc6XG4gICAgICAgIHJldHVybiBjc3Muc2VsZWN0b3JzLm1hcCgoc2VsZWN0b3IpID0+IHRoaXMucGFyc2VDc3NPYmplY3Qoc2VsZWN0b3IpKS5qb2luKCc7ICcpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBUaGlzIGlzIG5ldmVyIHJlYWNoYWJsZSwgYnV0IGlmIGl0IGV2ZXIgaXMgZG8gdGhpcy5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVaUF1dG9tYXRvciBkb2VzIG5vdCBzdXBwb3J0ICcke2Nzcy50eXBlfScgY3NzLiBPbmx5IHN1cHBvcnRzICdydWxlJywgJ3J1bGVTZXQnLCAnc2VsZWN0b3JzJyBgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBzZWxlY3RvciB0byBhIFVpQXV0b21hdG9yMiBzZWxlY3RvclxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgQ1NTIHNlbGVjdG9yIGNvbnZlcnRlZCB0byBhIFVpU2VsZWN0b3JcbiAgICovXG4gIHRvVWlBdXRvbWF0b3JTZWxlY3RvciAoKSB7XG4gICAgbGV0IGNzc09iajtcbiAgICB0cnkge1xuICAgICAgY3NzT2JqID0gcGFyc2VyLnBhcnNlKHRoaXMuc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYEludmFsaWQgQ1NTIHNlbGVjdG9yICcke3RoaXMuc2VsZWN0b3J9Jy4gUmVhc29uOiAnJHtlfSdgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlQ3NzT2JqZWN0KGNzc09iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkU2VsZWN0b3JFcnJvcihgVW5zdXBwb3J0ZWQgQ1NTIHNlbGVjdG9yICcke3RoaXMuc2VsZWN0b3J9Jy4gUmVhc29uOiAnJHtlfSdgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3NzQ29udmVydGVyOyJdLCJmaWxlIjoibGliL2Nzcy1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
240
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jc3MtY29udmVydGVyLmpzIl0sIm5hbWVzIjpbInBhcnNlciIsIkNzc1NlbGVjdG9yUGFyc2VyIiwicmVnaXN0ZXJTZWxlY3RvclBzZXVkb3MiLCJyZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMiLCJyZWdpc3RlckF0dHJFcXVhbGl0eU1vZHMiLCJlbmFibGVTdWJzdGl0dXRlcyIsIlJFU09VUkNFX0lEIiwiSURfTE9DQVRPUl9QQVRURVJOIiwiQk9PTEVBTl9BVFRSUyIsIk5VTUVSSUNfQVRUUlMiLCJTVFJfQVRUUlMiLCJBTExfQVRUUlMiLCJBVFRSSUJVVEVfQUxJQVNFUyIsInRvU25ha2VDYXNlIiwic3RyIiwidG9rZW5zIiwic3BsaXQiLCJtYXAiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJvdXQiLCJqb2luIiwiYXNzZXJ0R2V0Qm9vbCIsImNzcyIsInZhbCIsInZhbHVlIiwiaW5jbHVkZXMiLCJFcnJvciIsIm5hbWUiLCJhc3NlcnRHZXRBdHRyTmFtZSIsImF0dHJOYW1lIiwib2ZmaWNpYWxBdHRyIiwiYWxpYXNBdHRycyIsImdldFdvcmRNYXRjaGVyUmVnZXgiLCJ3b3JkIiwiQ3NzQ29udmVydGVyIiwiY29uc3RydWN0b3IiLCJzZWxlY3RvciIsInBrZyIsImZvcm1hdElkTG9jYXRvciIsImxvY2F0b3IiLCJ0ZXN0IiwicGFyc2VBdHRyIiwiY3NzQXR0ciIsInZhbHVlVHlwZSIsIm1ldGhvZE5hbWUiLCJvcGVyYXRvciIsInBhcnNlUHNldWRvIiwiY3NzUHNldWRvIiwicHNldWRvTmFtZSIsInBhcnNlQ3NzUnVsZSIsImNzc1J1bGUiLCJuZXN0aW5nT3BlcmF0b3IiLCJ1aUF1dG9tYXRvclNlbGVjdG9yIiwidGFnTmFtZSIsImFuZHJvaWRDbGFzcyIsImNsYXNzTmFtZXMiLCJjc3NDbGFzc05hbWVzIiwicHVzaCIsImlkIiwiYXR0cnMiLCJhdHRyIiwicHNldWRvcyIsInBzZXVkbyIsInJ1bGUiLCJwYXJzZUNzc09iamVjdCIsInR5cGUiLCJzZWxlY3RvcnMiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJjc3NPYmoiLCJwYXJzZSIsImUiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFHLElBQUlDLG9DQUFKLEVBQWY7QUFDQUQsTUFBTSxDQUFDRSx1QkFBUCxDQUErQixLQUEvQjtBQUNBRixNQUFNLENBQUNHLHdCQUFQLENBQWdDLEdBQWhDLEVBQXFDLEdBQXJDLEVBQTBDLEdBQTFDO0FBQ0FILE1BQU0sQ0FBQ0ksd0JBQVAsQ0FBZ0MsR0FBaEMsRUFBcUMsR0FBckMsRUFBMEMsR0FBMUMsRUFBK0MsR0FBL0M7QUFDQUosTUFBTSxDQUFDSyxpQkFBUDtBQUVBLE1BQU1DLFdBQVcsR0FBRyxhQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLHFDQUEzQjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxDQUNwQixXQURvQixFQUNQLFNBRE8sRUFDSSxXQURKLEVBQ2lCLFNBRGpCLEVBQzRCLFdBRDVCLEVBRXBCLFNBRm9CLEVBRVQsZ0JBRlMsRUFFUyxZQUZULEVBRXVCLFVBRnZCLENBQXRCO0FBS0EsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLE9BRG9CLEVBQ1gsVUFEVyxDQUF0QjtBQUlBLE1BQU1DLFNBQVMsR0FBRyxDQUNoQixhQURnQixFQUNESixXQURDLEVBQ1ksTUFEWixFQUNvQixZQURwQixFQUNrQyxjQURsQyxDQUFsQjtBQUlBLE1BQU1LLFNBQVMsR0FBRyxDQUNoQixHQUFHSCxhQURhLEVBRWhCLEdBQUdDLGFBRmEsRUFHaEIsR0FBR0MsU0FIYSxDQUFsQjtBQU1BLE1BQU1FLGlCQUFpQixHQUFHLENBQ3hCLENBQUNOLFdBQUQsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUR3QixFQUV4QixDQUFDLGFBQUQsRUFBZ0IsQ0FDZCxxQkFEYyxFQUNTLGNBRFQsRUFFZCxNQUZjLEVBRU4sa0JB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QUN2QixRQUFJQyxNQUFKOztBQUNBLFFBQUk7QUFDRkEsTUFBQUEsTUFBTSxHQUFHdkUsTUFBTSxDQUFDd0UsS0FBUCxDQUFhLEtBQUtqQyxRQUFsQixDQUFUO0FBQ0QsS0FGRCxDQUVFLE9BQU9rQyxDQUFQLEVBQVU7QUFDVixZQUFNLElBQUlDLG1CQUFPQyxvQkFBWCxDQUFpQyx5QkFBd0IsS0FBS3BDLFFBQVMsZUFBY2tDLENBQUUsR0FBdkYsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixhQUFPLEtBQUtOLGNBQUwsQ0FBb0JJLE1BQXBCLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1YsWUFBTSxJQUFJQyxtQkFBT0Msb0JBQVgsQ0FBaUMsNkJBQTRCLEtBQUtwQyxRQUFTLGVBQWNrQyxDQUFFLEdBQTNGLENBQU47QUFDRDtBQUNGOztBQXJMZ0I7O2VBd0xKcEMsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENzc1NlbGVjdG9yUGFyc2VyIH0gZnJvbSAnY3NzLXNlbGVjdG9yLXBhcnNlcic7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5cbmNvbnN0IHBhcnNlciA9IG5ldyBDc3NTZWxlY3RvclBhcnNlcigpO1xucGFyc2VyLnJlZ2lzdGVyU2VsZWN0b3JQc2V1ZG9zKCdoYXMnKTtcbnBhcnNlci5yZWdpc3Rlck5lc3RpbmdPcGVyYXRvcnMoJz4nLCAnKycsICd+Jyk7XG5wYXJzZXIucmVnaXN0ZXJBdHRyRXF1YWxpdHlNb2RzKCdeJywgJyQnLCAnKicsICd+Jyk7XG5wYXJzZXIuZW5hYmxlU3Vic3RpdHV0ZXMoKTtcblxuY29uc3QgUkVTT1VSQ0VfSUQgPSAncmVzb3VyY2UtaWQnO1xuY29uc3QgSURfTE9DQVRPUl9QQVRURVJOID0gL15bYS16QS1aX11bYS16QS1aMC05Ll9dKjppZFxcL1tcXFNdKyQvO1xuXG5jb25zdCBCT09MRUFOX0FUVFJTID0gW1xuICAnY2hlY2thYmxlJywgJ2NoZWNrZWQnLCAnY2xpY2thYmxlJywgJ2VuYWJsZWQnLCAnZm9jdXNhYmxlJyxcbiAgJ2ZvY3VzZWQnLCAnbG9uZy1jbGlja2FibGUnLCAnc2Nyb2xsYWJsZScsICdzZWxlY3RlZCcsXG5dO1xuXG5jb25zdCBOVU1FUklDX0FUVFJTID0gW1xuICAnaW5kZXgnLCAnaW5zdGFuY2UnLFxuXTtcblxuY29uc3QgU1RSX0FUVFJTID0gW1xuICAnZGVzY3JpcHRpb24nLCBSRVNPVVJDRV9JRCwgJ3RleHQnLCAnY2xhc3MtbmFtZScsICdwYWNrYWdlLW5hbWUnXG5dO1xuXG5jb25zdCBBTExfQVRUUlMgPSBbXG4gIC4uLkJPT0xFQU5fQVRUUlMsXG4gIC4uLk5VTUVSSUNfQVRUUlMsXG4gIC4uLlNUUl9BVFRSUyxcbl07XG5cbmNvbnN0IEFUVFJJQlVURV9BTElBU0VTID0gW1xuICBbUkVTT1VSQ0VfSUQsIFsnaWQnXV0sXG4gIFsnZGVzY3JpcHRpb24nLCBbXG4gICAgJ2NvbnRlbnQtZGVzY3JpcHRpb24nLCAnY29udGVudC1kZXNjJyxcbiAgICAnZGVzYycsICdhY2Nlc3NpYmlsaXR5LWlkJyxcbiAgXV0sXG4gIFsnaW5kZXgnLCBbJ250aC1jaGlsZCddXSxcbl07XG5cbi8qKlxuICogQ29udmVydCBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdG8gc25ha2UgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoeXBoZW4gc2VwYXJhdGVkIHdvcmQgdHJhbnNsYXRlZCB0byBzbmFrZSBjYXNlXG4gKi9cbmZ1bmN0aW9uIHRvU25ha2VDYXNlIChzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgdG9rZW5zID0gc3RyLnNwbGl0KCctJykubWFwKChzdHIpID0+IHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKTtcbiAgY29uc3Qgb3V0ID0gdG9rZW5zLmpvaW4oJycpO1xuICByZXR1cm4gb3V0LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgb3V0LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc05hbWVWYWx1ZU9iamVjdFxuICogQHByb3BlcnR5IHs/bmFtZX0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgQ1NTIG9iamVjdFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIENTUyBvYmplY3RcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgYm9vbGVhbiBmcm9tIGEgQ1NTIG9iamVjdC4gSWYgZW1wdHksIHJldHVybiB0cnVlLiBJZiBub3QgdHJ1ZS9mYWxzZS9lbXB0eSwgdGhyb3cgZXhjZXB0aW9uXG4gKlxuICogQHBhcmFtIHtDc3NOYW1lVmFsdWVPYmplY3R9IGNzcyBBIENTUyBvYmplY3QgdGhhdCBoYXMgJ25hbWUnIGFuZCAndmFsdWUnXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBFaXRoZXIgJ3RydWUnIG9yICdmYWxzZScuIElmIHZhbHVlIGlzIGVtcHR5LCByZXR1cm4gJ3RydWUnXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEJvb2wgKGNzcykge1xuICBjb25zdCB2YWwgPSBjc3MudmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJ3RydWUnOyAvLyBhbiBvbWl0dGVkIGJvb2xlYW4gYXR0cmlidXRlIG1lYW5zICd0cnVlJyAoZS5nLjogaW5wdXRbY2hlY2tlZF0gbWVhbnMgY2hlY2tlZCBpcyB0cnVlKVxuICBpZiAoWyd0cnVlJywgJ2ZhbHNlJ10uaW5jbHVkZXModmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3MubmFtZX0nIG11c3QgYmUgdHJ1ZSwgZmFsc2Ugb3IgZW1wdHkuIEZvdW5kICcke2Nzcy52YWx1ZX0nYCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjYW5vbmljYWwgZm9ybSBvZiBhIENTUyBhdHRyaWJ1dGUgbmFtZVxuICpcbiAqIENvbnZlcnRzIHRvIGxvd2VyY2FzZSBhbmQgaWYgYW4gYXR0cmlidXRlIG5hbWUgaXMgYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBlbHNlLCByZXR1cm5cbiAqIHdoYXQgaXQgaXMgYW4gYWxpYXMgZm9yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNzcyBDU1Mgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2Fub25pY2FsIGF0dHJpYnV0ZSBuYW1lXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEdldEF0dHJOYW1lIChjc3MpIHtcbiAgY29uc3QgYXR0ck5hbWUgPSBjc3MubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENoZWNrIGlmIGl0J3Mgc3VwcG9ydGVkIGFuZCBpZiBpdCBpcywgcmV0dXJuIGl0XG4gIGlmIChBTExfQVRUUlMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgcmV0dXJuIGF0dHJOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvLyBJZiBhdHRyTmFtZSBpcyBhbiBhbGlhcyBmb3Igc29tZXRoaW5nIGVsc2UsIHJldHVybiB0aGF0XG4gIGZvciAoY29uc3QgW29mZmljaWFsQXR0ciwgYWxpYXNBdHRyc10gb2YgQVRUUklCVVRFX0FMSUFTRVMpIHtcbiAgICBpZiAoYWxpYXNBdHRycy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBvZmZpY2lhbEF0dHI7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgIGBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgJyR7QUxMX0FUVFJTLmpvaW4oJywgJyl9J2ApO1xufVxuXG4vKipcbiAqIEdldCBhIHJlZ2V4IHRoYXQgbWF0Y2hlcyBhIHdob2xlIHdvcmQuIEZvciB0aGUgfj0gQ1NTIGF0dHJpYnV0ZSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHJldHVybnMge3N0cmluZ30gQSByZWdleCBcIndvcmRcIiBtYXRjaGVyXG4gKi9cbmZ1bmN0aW9uIGdldFdvcmRNYXRjaGVyUmVnZXggKHdvcmQpIHtcbiAgcmV0dXJuIGBcXFxcYihcXFxcdyoke2VzY2FwZVJlZ0V4cCh3b3JkKX1cXFxcdyopXFxcXGJgO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENzc0F0dHJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWVUeXBlIFR5cGUgb2YgYXR0cmlidXRlIChtdXN0IGJlIHN0cmluZyBvciBlbXB0eSlcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmFsdWUgVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgYmV0d2VlbiB2YWx1ZSBhbmQgdmFsdWUgdHlwZSAoPSwgKj0sICwgXj0sICQ9KVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUnVsZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBuZXN0aW5nT3BlcmF0b3IgVGhlIG5lc3Rpbmcgb3BlcmF0b3IgKGFrYTogY29tYmluYXRvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ1NTX1NlbGVjdG9ycylcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdGFnTmFtZSBUaGUgdGFnIG5hbWUgKGFrYTogdHlwZSBzZWxlY3RvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvVHlwZV9zZWxlY3RvcnMpXG4gKiBAcHJvcGVydHkgez9zdHJpbmdbXX0gY2xhc3NOYW1lcyBBbiBhcnJheSBvZiBDU1MgY2xhc3MgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc0F0dHJbXX0gYXR0cnMgQW4gYXJyYXkgb2YgQ1NTIGF0dHJpYnV0ZXNcbiAqIEBwcm9wZXJ0eSB7P0Nzc1BzZXVkb1tdfSBhdHRycyBBbiBhcnJheSBvZiBDU1MgcHNldWRvc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZCBDU1MgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/Q3NzUnVsZX0gcnVsZSBBIGRlc2NlbmRhbnQgb2YgdGhpcyBDU1MgcnVsZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzT2JqZWN0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHR5cGUgVHlwZSBvZiBDU1Mgb2JqZWN0LiAncnVsZScsICdydWxlc2V0JyBvciAnc2VsZWN0b3JzJ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ3NzUHNldWRvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZhbHVlVHlwZSBUaGUgdHlwZSBvZiBDU1MgcHNldWRvIHNlbGVjdG9yIChodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9jc3Mtc2VsZWN0b3ItcGFyc2VyIGZvciByZWZlcmVuY2UpXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBzZXVkbyBzZWxlY3RvclxuICovXG5cbmNsYXNzIENzc0NvbnZlcnRlciB7XG5cbiAgY29uc3RydWN0b3IgKHNlbGVjdG9yLCBwa2cpIHtcbiAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgdGhpcy5wa2cgPSBwa2c7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGA8cGtnTmFtZT46aWQvYCBwcmVmaXggdG8gYmVnaW5uaW5nIG9mIHN0cmluZyBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdG9yIFRoZSBpbml0aWFsIGxvY2F0b3JcbiAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHdpdGggYDxwa2dOYW1lPjppZC9gIHByZXBlbmRlZCAoaWYgaXQgd2Fzbid0IGFscmVhZHkpXG4gICAqL1xuICBmb3JtYXRJZExvY2F0b3IgKGxvY2F0b3IpIHtcbiAgICByZXR1cm4gSURfTE9DQVRPUl9QQVRURVJOLnRlc3QobG9jYXRvcilcbiAgICAgID8gbG9jYXRvclxuICAgICAgOiBgJHt0aGlzLnBrZyB8fCAnYW5kcm9pZCd9OmlkLyR7bG9jYXRvcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1MgYXR0cmlidXRlIGludG8gYSBVaVNlbGVjdG9yIG1ldGhvZCBjYWxsXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzQXR0cn0gY3NzQXR0ciBDU1MgYXR0cmlidXRlIG9iamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDU1MgYXR0cmlidXRlIHBhcnNlZCBhcyBVaVNlbGVjdG9yXG4gICAqL1xuICBwYXJzZUF0dHIgKGNzc0F0dHIpIHtcbiAgICBpZiAoY3NzQXR0ci52YWx1ZVR5cGUgJiYgY3NzQXR0ci52YWx1ZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Nzc0F0dHIubmFtZX09JHtjc3NBdHRyLnZhbHVlfScgaXMgYW4gaW52YWxpZCBhdHRyaWJ1dGUuIGAgK1xuICAgICAgICBgT25seSAnc3RyaW5nJyBhbmQgZW1wdHkgYXR0cmlidXRlIHR5cGVzIGFyZSBzdXBwb3J0ZWQuIEZvdW5kICcke2Nzc0F0dHIudmFsdWVUeXBlfSdgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0ck5hbWUgPSBhc3NlcnRHZXRBdHRyTmFtZShjc3NBdHRyKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gdG9TbmFrZUNhc2UoYXR0ck5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBpdCdzIGEgc3VwcG9ydGVkIGF0dHJpYnV0ZVxuICAgIGlmICghU1RSX0FUVFJTLmluY2x1ZGVzKGF0dHJOYW1lKSAmJiAhQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7YXR0ck5hbWV9JyBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgYXR0cmlidXRlcyBhcmUgYCArXG4gICAgICAgIGAnJHtbLi4uU1RSX0FUVFJTLCAuLi5CT09MRUFOX0FUVFJTXS5qb2luKCcsICcpfSdgKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBib29sZWFuLCBpZiBpdCdzIGEgYm9vbGVhbiBhdHRyaWJ1dGVcbiAgICBpZiAoQk9PTEVBTl9BVFRSUy5pbmNsdWRlcyhhdHRyTmFtZSkpIHtcbiAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX0oJHthc3NlcnRHZXRCb29sKGNzc0F0dHIpfSlgO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSBwYXJzZSBhcyBzdHJpbmdcbiAgICBsZXQgdmFsdWUgPSBjc3NBdHRyLnZhbHVlIHx8ICcnO1xuICAgIGlmIChhdHRyTmFtZSA9PT0gUkVTT1VSQ0VfSUQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXRJZExvY2F0b3IodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIlwiKWA7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjc3NBdHRyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICc9JzpcbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfShcIiR7dmFsdWV9XCIpYDtcbiAgICAgIGNhc2UgJyo9JzpcbiAgICAgICAgaWYgKFsnZGVzY3JpcHRpb24nLCAndGV4dCddLmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1Db250YWlucyhcIiR7dmFsdWV9XCIpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7ZXNjYXBlUmVnRXhwKHZhbHVlKX1cIilgO1xuICAgICAgY2FzZSAnXj0nOlxuICAgICAgICBpZiAoWydkZXNjcmlwdGlvbicsICd0ZXh0J10uaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfVN0YXJ0c1dpdGgoXCIke3ZhbHVlfVwiKWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAuJHttZXRob2ROYW1lfU1hdGNoZXMoXCJeJHtlc2NhcGVSZWdFeHAodmFsdWUpfVwiKWA7XG4gICAgICBjYXNlICckPSc6XG4gICAgICAgIHJldHVybiBgLiR7bWV0aG9kTmFtZX1NYXRjaGVzKFwiJHtlc2NhcGVSZWdFeHAodmFsdWUpfSRcIilgO1xuICAgICAgY2FzZSAnfj0nOlxuICAgICAgICByZXR1cm4gYC4ke21ldGhvZE5hbWV9TWF0Y2hlcyhcIiR7Z2V0V29yZE1hdGNoZXJSZWdleCh2YWx1ZSl9XCIpYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFVucmVhY2hhYmxlLCBidXQgYWRkaW5nIGVycm9yIGluIGNhc2UgYSBuZXcgQ1NTIGF0dHJpYnV0ZSBpcyBhZGRlZC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBDU1MgYXR0cmlidXRlIG9wZXJhdG9yICcke2Nzc0F0dHIub3BlcmF0b3J9Jy4gYCArXG4gICAgICAgICAgYCAnPScsICcqPScsICdePScsICckPScgYW5kICd+PScgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBwc2V1ZG8gY2xhc3MgdG8gYSBVaVNlbGVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Q3NzUHNldWRvfSBjc3NQc2V1ZG8gQ1NTIFBzZXVkbyBjbGFzc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBQc2V1ZG8gc2VsZWN0b3IgcGFyc2VkIGFzIFVpU2VsZWN0b3JcbiAgICovXG4gIHBhcnNlUHNldWRvIChjc3NQc2V1ZG8pIHtcbiAgICBpZiAoY3NzUHNldWRvLnZhbHVlVHlwZSAmJiBjc3NQc2V1ZG8udmFsdWVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjc3NQc2V1ZG8ubmFtZX09JHtjc3NQc2V1ZG8udmFsdWV9Jy4gYCArXG4gICAgICAgIGBVbnN1cHBvcnRlZCBjc3MgcHNldWRvIGNsYXNzIHZhbHVlIHR5cGU6ICcke2Nzc1BzZXVkby52YWx1ZVR5cGV9Jy4gT25seSAnc3RyaW5nJyB0eXBlIG9yIGVtcHR5IGlzIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwc2V1ZG9OYW1lID0gYXNzZXJ0R2V0QXR0ck5hbWUoY3NzUHNldWRvKTtcblxuICAgIGlmIChCT09MRUFOX0FUVFJTLmluY2x1ZGVzKHBzZXVkb05hbWUpKSB7XG4gICAgICByZXR1cm4gYC4ke3RvU25ha2VDYXNlKHBzZXVkb05hbWUpfSgke2Fzc2VydEdldEJvb2woY3NzUHNldWRvKX0pYDtcbiAgICB9XG5cbiAgICBpZiAoTlVNRVJJQ19BVFRSUy5pbmNsdWRlcyhwc2V1ZG9OYW1lKSkge1xuICAgICAgcmV0dXJuIGAuJHtwc2V1ZG9OYW1lfSgke2Nzc1BzZXVkby52YWx1ZX0pYDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIENTUyBydWxlIHRvIGEgVWlTZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc1J1bGV9IGNzc1J1bGUgQ1NTIHJ1bGUgZGVmaW5pdGlvblxuICAgKi9cbiAgcGFyc2VDc3NSdWxlIChjc3NSdWxlKSB7XG4gICAgY29uc3QgeyBuZXN0aW5nT3BlcmF0b3IgfSA9IGNzc1J1bGU7XG4gICAgaWYgKG5lc3RpbmdPcGVyYXRvciAmJiBuZXN0aW5nT3BlcmF0b3IgIT09ICcgJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuZXN0aW5nT3BlcmF0b3J9JyBpcyBub3QgYSBzdXBwb3J0ZWQgY29tYmluYXRvci4gYCArXG4gICAgICAgIGBPbmx5IGNoaWxkIGNvbWJpbmF0b3IgKD4pIGFuZCBkZXNjZW5kYW50IGNvbWJpbmF0b3IgYXJlIHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBsZXQgdWlBdXRvbWF0b3JTZWxlY3RvciA9ICduZXcgVWlTZWxlY3RvcigpJztcbiAgICBpZiAoY3NzUnVsZS50YWdOYW1lICYmIGNzc1J1bGUudGFnTmFtZSAhPT0gJyonKSB7XG4gICAgICBsZXQgYW5kcm9pZENsYXNzID0gW2Nzc1J1bGUudGFnTmFtZV07XG4gICAgICBpZiAoY3NzUnVsZS5jbGFzc05hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3NzQ2xhc3NOYW1lcyBvZiBjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgICAgICBhbmRyb2lkQ2xhc3MucHVzaChjc3NDbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lKFwiJHthbmRyb2lkQ2xhc3Muam9pbignLicpfVwiKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IGAuY2xhc3NOYW1lTWF0Y2hlcyhcIiR7Y3NzUnVsZS50YWdOYW1lfVwiKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NSdWxlLmNsYXNzTmFtZXMpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jbGFzc05hbWVNYXRjaGVzKFwiJHtjc3NSdWxlLmNsYXNzTmFtZXMuam9pbignXFxcXC4nKX1cIilgO1xuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5pZCkge1xuICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSBgLnJlc291cmNlSWQoXCIke3RoaXMuZm9ybWF0SWRMb2NhdG9yKGNzc1J1bGUuaWQpfVwiKWA7XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLmF0dHJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgY3NzUnVsZS5hdHRycykge1xuICAgICAgICB1aUF1dG9tYXRvclNlbGVjdG9yICs9IHRoaXMucGFyc2VBdHRyKGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3NzUnVsZS5wc2V1ZG9zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBzZXVkbyBvZiBjc3NSdWxlLnBzZXVkb3MpIHtcbiAgICAgICAgdWlBdXRvbWF0b3JTZWxlY3RvciArPSB0aGlzLnBhcnNlUHNldWRvKHBzZXVkbyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjc3NSdWxlLnJ1bGUpIHtcbiAgICAgIHVpQXV0b21hdG9yU2VsZWN0b3IgKz0gYC5jaGlsZFNlbGVjdG9yKCR7dGhpcy5wYXJzZUNzc1J1bGUoY3NzUnVsZS5ydWxlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHVpQXV0b21hdG9yU2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBDU1Mgb2JqZWN0IHRvIFVpQXV0b21hdG9yMiBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0Nzc09iamVjdH0gY3NzIENTUyBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBvYmplY3QgcGFyc2VkIGFzIGEgVWlTZWxlY3RvclxuICAgKi9cbiAgcGFyc2VDc3NPYmplY3QgKGNzcykge1xuICAgIHN3aXRjaCAoY3NzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3J1bGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc1J1bGUoY3NzKTtcbiAgICAgIGNhc2UgJ3J1bGVTZXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3MucnVsZSk7XG4gICAgICBjYXNlICdzZWxlY3RvcnMnOlxuICAgICAgICByZXR1cm4gY3NzLnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiB0aGlzLnBhcnNlQ3NzT2JqZWN0KHNlbGVjdG9yKSkuam9pbignOyAnKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gVGhpcyBpcyBuZXZlciByZWFjaGFibGUsIGJ1dCBpZiBpdCBldmVyIGlzIGRvIHRoaXMuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVWlBdXRvbWF0b3IgZG9lcyBub3Qgc3VwcG9ydCAnJHtjc3MudHlwZX0nIGNzcy4gT25seSBzdXBwb3J0cyAncnVsZScsICdydWxlU2V0JywgJ3NlbGVjdG9ycycgYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBDU1Mgc2VsZWN0b3IgdG8gYSBVaUF1dG9tYXRvcjIgc2VsZWN0b3JcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIENTUyBzZWxlY3RvciBjb252ZXJ0ZWQgdG8gYSBVaVNlbGVjdG9yXG4gICAqL1xuICB0b1VpQXV0b21hdG9yU2VsZWN0b3IgKCkge1xuICAgIGxldCBjc3NPYmo7XG4gICAgdHJ5IHtcbiAgICAgIGNzc09iaiA9IHBhcnNlci5wYXJzZSh0aGlzLnNlbGVjdG9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKGBJbnZhbGlkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUNzc09iamVjdChjc3NPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYFVuc3VwcG9ydGVkIENTUyBzZWxlY3RvciAnJHt0aGlzLnNlbGVjdG9yfScuIFJlYXNvbjogJyR7ZX0nYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENzc0NvbnZlcnRlcjsiXSwiZmlsZSI6ImxpYi9jc3MtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=