@carto/kepler.gl 0.0.53-alpha.interactivity.2 → 0.0.53-alpha.interactivity.4

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.
@@ -134,7 +134,7 @@ var KEPLER_GL_NAME = 'kepler.gl'; // __PACKAGE_VERSION__ is automatically inject
134
134
  // an empty string which will allow us to retrieve the latest umd version
135
135
 
136
136
  exports.KEPLER_GL_NAME = KEPLER_GL_NAME;
137
- var KEPLER_GL_VERSION = "0.0.53-alpha.interactivity.2";
137
+ var KEPLER_GL_VERSION = "0.0.53-alpha.interactivity.4";
138
138
  exports.KEPLER_GL_VERSION = KEPLER_GL_VERSION;
139
139
  var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
140
140
  exports.KEPLER_GL_WEBSITE = KEPLER_GL_WEBSITE;
@@ -310,6 +310,20 @@ var Layer = /*#__PURE__*/function () {
310
310
  set: function set(interactivitySettings) {
311
311
  this._interactivitySettings = interactivitySettings;
312
312
  }
313
+ }, {
314
+ key: "hasTooltip",
315
+ get: function get() {
316
+ var _this$interactivitySe, _this$interactivitySe2, _this$interactivitySe3, _this$interactivitySe4;
317
+
318
+ return Boolean(((_this$interactivitySe = this.interactivitySettings) === null || _this$interactivitySe === void 0 ? void 0 : (_this$interactivitySe2 = _this$interactivitySe.hover) === null || _this$interactivitySe2 === void 0 ? void 0 : _this$interactivitySe2.fields.length) || ((_this$interactivitySe3 = this.interactivitySettings) === null || _this$interactivitySe3 === void 0 ? void 0 : (_this$interactivitySe4 = _this$interactivitySe3.click) === null || _this$interactivitySe4 === void 0 ? void 0 : _this$interactivitySe4.fields.length));
319
+ }
320
+ }, {
321
+ key: "hasInteractivity",
322
+ get: function get() {
323
+ var _this$interactivitySe5;
324
+
325
+ return Boolean(this.hasTooltip && ((_this$interactivitySe5 = this.interactivitySettings) === null || _this$interactivitySe5 === void 0 ? void 0 : _this$interactivitySe5.enabled));
326
+ }
313
327
  /*
314
328
  * Given a dataset, automatically find props to create layer based on it
315
329
  * and return the props and previous found layers.
@@ -1418,8 +1432,6 @@ var Layer = /*#__PURE__*/function () {
1418
1432
  }, {
1419
1433
  key: "getDefaultDeckLayerProps",
1420
1434
  value: function getDefaultDeckLayerProps(_ref11) {
1421
- var _this$interactivitySe;
1422
-
1423
1435
  var idx = _ref11.idx,
1424
1436
  gpuFilter = _ref11.gpuFilter,
1425
1437
  mapState = _ref11.mapState,
@@ -1430,7 +1442,7 @@ var Layer = /*#__PURE__*/function () {
1430
1442
  id: this.id,
1431
1443
  idx: idx,
1432
1444
  coordinateSystem: _core.COORDINATE_SYSTEM.LNGLAT,
1433
- pickable: (_this$interactivitySe = this.interactivitySettings) === null || _this$interactivitySe === void 0 ? void 0 : _this$interactivitySe.enabled,
1445
+ pickable: this.hasInteractivity,
1434
1446
  wrapLongitude: true,
1435
1447
  parameters: {
1436
1448
  depthTest: Boolean(mapState.dragRotate || this.config.visConfig.enable3d)
@@ -1648,4 +1660,4 @@ var Layer = /*#__PURE__*/function () {
1648
1660
 
1649
1661
  var _default = Layer;
1650
1662
  exports["default"] = _default;
1651
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJfaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsIkRlZmF1bHRMYXllckljb24iLCJ0eXBlIiwiY29sb3IiLCJwcm9wZXJ0eSIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJudWxsVmFsdWUiLCJOT19WQUxVRV9DT0xPUiIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJsYXQiLCJwYWlyIiwiZmllbGRQYWlyS2V5IiwibG5nIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsImludGVyYWN0aXZpdHlTZXR0aW5ncyIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInJhZGl1c0ZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwiZW5hYmxlZCIsInZpc3VhbENoYW5uZWxzIiwibWVhc3VyZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsImRlZmF1bHRNZWFzdXJlIiwidXBkYXRlIiwiZmllbGRJZHgiLCJjb2x1bW5QYWlycyIsInBhcnRuZXJLZXkiLCJwYXJ0bmVyRmllbGRQYWlyS2V5Iiwiem9vbSIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsImRhdGFzZXRzIiwiZmlsdGVyZWRJbmRleCIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJjb25maWdUb0NvcHkiLCJzaGFsbG93Q29weSIsImNvbmNhdCIsIm5vdFRvQ29weSIsImZvckVhY2giLCJncm91cCIsInB1c2giLCJjdXJyZW50Q29uZmlnIiwiY29waWVkIiwiY29weUxheWVyQ29uZmlnIiwidXBkYXRlTGF5ZXJDb25maWciLCJrZXlzIiwiY2hhbm5lbCIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImluY2x1ZGVzIiwibGF5ZXJWaXNDb25maWdzIiwiaXRlbSIsIkxBWUVSX1ZJU19DT05GSUdTIiwiZXZlcnkiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjb2x1bW5WYWxpZGF0b3JzIiwicmVxdWlyZWQiLCJyZXF1aXJlZExheWVyQ29sdW1ucyIsInJlZHVjZSIsImFjY3UiLCJ2YWxpZGF0b3IiLCJvcHRpb25hbCIsIm9wdGlvbmFsQ29sdW1ucyIsIm5ld0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInByb3AiLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsImlzQ29sb3JSYW5nZSIsImNvbG9ycyIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJjdXN0b21QYWxldHRlIiwic2hvd0Ryb3Bkb3duIiwic3RlcHMiLCJyZXZlcnNlZCIsIkJvb2xlYW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwic2FtZUdyb3VwIiwiQ09MT1JfUkFOR0VTIiwiZmlsdGVyIiwiY3IiLCJmaW5kIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlQ2F0ZWdvcnlDb2xvck1hcCIsInVwZGF0ZU51bWVyaWNDb2xvck1hcCIsImFzc2lnbmVkQ2F0ZWdvcmllcyIsIm5ld0NvbG9yTWFwIiwic2xpY2UiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsImNhdGVnb3J5IiwiY29sb3JNYXBWYWx1ZXMiLCJjIiwibWF4VmFsdWUiLCJwcmV2VmFsdWUiLCJzdGVwIiwiaSIsImxheWVyRGF0YSIsImRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwicmVuZGVyTGF5ZXIiLCJBcnJheSIsImlzQXJyYXkiLCJNYXAiLCJrIiwic2V0IiwiU0NBTEVfRlVOQyIsImZyb20iLCJ1bmtub3duIiwiVU5LTk9XTl9DT0xPUiIsImdldFZpc0NoYW5uZWxTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJtYXJrZXJNYXAiLCJtYXJrZXJVcmwiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tTWFya2VyIiwiZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlIiwiY3VzdG9tTWFya2Vyc1VybCIsImdldEVuY29kZWRDaGFubmVsVmFsdWUiLCJDb25zb2xlIiwid2FybiIsIm9yZGluYWwiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJudW1Sb3dzIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJsbmdCb3VuZHMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJfYWdncmVnYXRpb24iLCJnZXRWYWx1ZSIsImF0dHJpYnV0ZVZhbHVlIiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiRGF0ZSIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwib2xkTGF5ZXJEYXRhIiwibGF5ZXJEYXRhc2V0IiwidXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJnZXREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJ1cGRhdGVMYXllck1ldGEiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwiZGF0YXNldCIsIm9sZEZpZWxkIiwibmV3RGF0YVNldEZpZWxkIiwiZmllbGRzIiwiZmQiLCJuZXdGaWx0ZXIiLCJ0YWJsZSIsImdldERhdGFzZXQiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZiIsImdldENvbHVtbkxheWVyRG9tYWluIiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwicGlja2VkIiwibGF5ZXIiLCJtYXBTdGF0ZSIsImZpeGVkUmFkaXVzIiwicmFkaXVzQ2hhbm5lbCIsInZjIiwidW5kZWZpbmVkIiwicmFkaXVzIiwiZ2V0Wm9vbUZhY3RvciIsInJhZGl1c1JhbmdlIiwiY2VpbCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImludGVyYWN0aW9uQ29uZmlnIiwiYnJ1c2hpbmdUYXJnZXQiLCJicnVzaCIsImF1dG9IaWdobGlnaHQiLCJicnVzaGluZ1JhZGl1cyIsImJydXNoaW5nRW5hYmxlZCIsImlkeCIsImdwdUZpbHRlciIsInZpc2libGUiLCJtYXNrUG9seWdvbiIsIm1hc2tFeHRlbnNpb25Qcm9wcyIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsInBpY2thYmxlIiwid3JhcExvbmdpdHVkZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJkcmFnUm90YXRlIiwiZW5hYmxlM2QiLCJvcGFjaXR5IiwiZXh0ZW5zaW9ucyIsImZpbHRlclJhbmdlIiwicmVuZGVyT3B0cyIsImdldFBpeGVsT2Zmc2V0Iiwic2hhcmVkUHJvcHMiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIlRleHRMYXllciIsImNoYXJhY3RlclNldCIsImdldFNpemUiLCJnZXRUZXh0QW5jaG9yIiwiYW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJhbGlnbm1lbnQiLCJnZXRDb2xvciIsImdldEZpbHRlclZhbHVlIiwiZ2V0UmFkaXVzIiwiY3VzdG9tTWFya2Vyc1N0YXR1cyIsImljb25VcmxBY2Nlc3NvciIsIm1heEljb25TaXplIiwiZ2V0TWF4TWFya2VyU2l6ZSIsIndhbnRlZFVybCIsInVybCIsIndpZHRoIiwiaGVpZ2h0IiwibWFzayIsImtlcGxlclRhYmxlIiwiZm91bmRMYXllcnMiLCJkZWZhdWx0RmllbGRzIiwiYWxsRmllbGRzIiwicmVxdWlyZWRDb2x1bW5zIiwicHJldiIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyIsImFsbEtleXMiLCJwb2ludGVycyIsImNvdW50UGVyS2V5IiwicGFpcnMiLCJpbmNyZW1lbnRQb2ludGVycyIsIm5ld1BhaXIiLCJjdXVyIiwicHRzIiwiY291bnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFZQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O3dEQTRCVUEsYTs7QUExQlY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxlQUFlLEdBQUcsQ0FBeEIsQyxDQUVQOzs7QUFDQSxJQUFNQyxhQUFhLEdBQ2pCLDBMQURGO0FBR0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBdEI7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxJQUFJQywrQkFBSixDQUF3QjtBQUFDQyxFQUFBQSxVQUFVLEVBQUVDO0FBQWIsQ0FBeEIsQ0FBNUI7O0FBRUEsSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFBQyxFQUFFO0FBQUEsU0FBSSxVQUFBQyxDQUFDO0FBQUEsV0FBSUEsQ0FBSjtBQUFBLEdBQUw7QUFBQSxDQUE5Qjs7QUFDQSxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQUNDLEtBQUQsRUFBUUYsQ0FBUjtBQUFBLFNBQWNFLEtBQUssQ0FBQ0MsYUFBTixDQUFvQkgsQ0FBcEIsQ0FBZDtBQUFBLENBQTdCOztBQUNBLElBQU1JLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQUMsQ0FBQztBQUFBLFNBQUlBLENBQUo7QUFBQSxDQUF2Qjs7QUFFTyxJQUFNQyxZQUFZLEdBQUcsMkJBQVU7QUFDcENDLEVBQUFBLE1BQU0sRUFBRSxJQUQ0QjtBQUVwQ0MsRUFBQUEsUUFBUSxFQUFFO0FBRjBCLENBQVYsQ0FBckI7O0FBS0EsSUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0MsZ0NBQWQsRUFBNkJDLEdBQTdCLENBQWlDQyxvQkFBakMsQ0FBcEI7OztBQUNQLFNBQVV6QixhQUFWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNNMEIsVUFBQUEsS0FETixHQUNjLENBRGQ7O0FBQUE7QUFBQSxnQkFFU0EsS0FBSyxHQUFHTixXQUFXLENBQUNPLE1BQVosR0FBcUIsQ0FGdEM7QUFBQTtBQUFBO0FBQUE7O0FBR0ksY0FBSUQsS0FBSyxLQUFLTixXQUFXLENBQUNPLE1BQTFCLEVBQWtDO0FBQ2hDRCxZQUFBQSxLQUFLLEdBQUcsQ0FBUjtBQUNEOztBQUxMO0FBTUksaUJBQU1OLFdBQVcsQ0FBQ00sS0FBSyxFQUFOLENBQWpCOztBQU5KO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFVTyxJQUFNRSxVQUFVLEdBQUc1QixhQUFhLEVBQWhDO0FBRVA7Ozs7SUFDTTZCLEs7QUFDSixtQkFBd0I7QUFBQSxRQUFaQyxLQUFZLHVFQUFKLEVBQUk7QUFBQTtBQUN0QixTQUFLQyxFQUFMLEdBQVVELEtBQUssQ0FBQ0MsRUFBTixJQUFZLDJCQUFlOUIsZUFBZixDQUF0QixDQURzQixDQUd0Qjs7QUFDQSxTQUFLK0IsSUFBTCxHQUFZLEVBQVosQ0FKc0IsQ0FNdEI7O0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsRUFBekIsQ0FQc0IsQ0FTdEI7O0FBQ0EsU0FBS0Msc0JBQUwsR0FBOEIsRUFBOUIsQ0FWc0IsQ0FZdEI7O0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEtBQUtDLHFCQUFMO0FBQ1pDLE1BQUFBLE9BQU8sRUFBRSxLQUFLQyxlQUFMO0FBREcsT0FFVFIsS0FGUyxFQUFkO0FBSUQ7Ozs7U0FFRCxlQUFnQjtBQUNkLGFBQU9TLDRCQUFQO0FBQ0Q7OztTQUVELGVBQWtCO0FBQ2hCLGFBQU90QixZQUFZLENBQUNDLE1BQXBCO0FBQ0Q7OztTQUVELGVBQVc7QUFDVCxhQUFPLElBQVA7QUFDRDs7O1NBRUQsZUFBVztBQUNULGFBQU8sS0FBS3NCLElBQVo7QUFDRDs7O1NBRUQsZUFBbUI7QUFDakIsYUFBTyxLQUFQO0FBQ0Q7OztTQUVELGVBQTJCO0FBQ3pCLGFBQU8sRUFBUDtBQUNEOzs7U0FFRCxlQUFzQjtBQUNwQixhQUFPLEVBQVA7QUFDRDs7O1NBRUQsZUFBa0M7QUFDaEMsYUFBTyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLFdBQXJCLEVBQWtDLFdBQWxDLEVBQStDLFFBQS9DLENBQVA7QUFDRDs7O1NBRUQsZUFBcUI7QUFDbkIsYUFBTztBQUNMQyxRQUFBQSxLQUFLLEVBQUU7QUFDTEMsVUFBQUEsUUFBUSxFQUFFLE9BREw7QUFFTDdCLFVBQUFBLEtBQUssRUFBRSxZQUZGO0FBR0w4QixVQUFBQSxLQUFLLEVBQUUsWUFIRjtBQUlMQyxVQUFBQSxNQUFNLEVBQUUsYUFKSDtBQUtMQyxVQUFBQSxLQUFLLEVBQUUsWUFMRjtBQU1MQyxVQUFBQSxHQUFHLEVBQUUsT0FOQTtBQU9MQyxVQUFBQSxnQkFBZ0IsRUFBRUMsZ0NBQWVQLEtBUDVCO0FBUUxRLFVBQUFBLFNBQVMsRUFBRUMsK0JBUk47QUFTTEMsVUFBQUEsWUFBWSxFQUFFLHNCQUFBaEIsTUFBTTtBQUFBLG1CQUFJQSxNQUFNLENBQUNNLEtBQVg7QUFBQTtBQVRmLFNBREY7QUFZTFcsUUFBQUEsSUFBSSxFQUFFO0FBQ0pWLFVBQUFBLFFBQVEsRUFBRSxNQUROO0FBRUo3QixVQUFBQSxLQUFLLEVBQUUsV0FGSDtBQUdKOEIsVUFBQUEsS0FBSyxFQUFFLFdBSEg7QUFJSkMsVUFBQUEsTUFBTSxFQUFFLFlBSko7QUFLSkMsVUFBQUEsS0FBSyxFQUFFLFdBTEg7QUFNSkMsVUFBQUEsR0FBRyxFQUFFLE1BTkQ7QUFPSkMsVUFBQUEsZ0JBQWdCLEVBQUVDLGdDQUFlSSxJQVA3QjtBQVFKSCxVQUFBQSxTQUFTLEVBQUUsQ0FSUDtBQVNKRSxVQUFBQSxZQUFZLEVBQUU7QUFUVjtBQVpELE9BQVA7QUF3QkQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztTQUNFLGVBQWtCO0FBQ2hCLGFBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7O1NBQ0UsZUFBOEI7QUFDNUIsYUFBTztBQUNMRSxRQUFBQSxHQUFHLEVBQUU7QUFBQ0MsVUFBQUEsSUFBSSxFQUFFLEtBQVA7QUFBY0MsVUFBQUEsWUFBWSxFQUFFO0FBQTVCLFNBREE7QUFFTEMsUUFBQUEsR0FBRyxFQUFFO0FBQUNGLFVBQUFBLElBQUksRUFBRSxLQUFQO0FBQWNDLFVBQUFBLFlBQVksRUFBRTtBQUE1QjtBQUZBLE9BQVA7QUFJRDtBQUVEO0FBQ0Y7QUFDQTs7OztTQUNFLGVBQTZCO0FBQzNCLGFBQU87QUFDTEUsUUFBQUEsSUFBSSxFQUFFO0FBQUNILFVBQUFBLElBQUksRUFBRSxNQUFQO0FBQWVDLFVBQUFBLFlBQVksRUFBRTtBQUE3QixTQUREO0FBRUxHLFFBQUFBLElBQUksRUFBRTtBQUFDSixVQUFBQSxJQUFJLEVBQUUsTUFBUDtBQUFlQyxVQUFBQSxZQUFZLEVBQUU7QUFBN0IsU0FGRDtBQUdMSSxRQUFBQSxJQUFJLEVBQUU7QUFBQ0wsVUFBQUEsSUFBSSxFQUFFLE1BQVA7QUFBZUMsVUFBQUEsWUFBWSxFQUFFO0FBQTdCLFNBSEQ7QUFJTEssUUFBQUEsSUFBSSxFQUFFO0FBQUNOLFVBQUFBLElBQUksRUFBRSxNQUFQO0FBQWVDLFVBQUFBLFlBQVksRUFBRTtBQUE3QjtBQUpELE9BQVA7QUFNRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztTQUNFLGVBQXFCO0FBQ25CLGFBQU8sSUFBUDtBQUNEOzs7U0FFRCxlQUE0QjtBQUMxQixhQUFPLEtBQUtyQixzQkFBWjtBQUNELEs7U0FFRCxhQUEwQjJCLHFCQUExQixFQUFpRDtBQUMvQyxXQUFLM0Isc0JBQUwsR0FBOEIyQixxQkFBOUI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FnRkUsaUNBQWtDO0FBQUE7O0FBQUEsVUFBWi9CLEtBQVksdUVBQUosRUFBSTtBQUNoQyxhQUFPO0FBQ0xnQyxRQUFBQSxNQUFNLEVBQUVoQyxLQUFLLENBQUNnQyxNQUFOLElBQWdCLElBRG5CO0FBRUxDLFFBQUFBLGdCQUFnQixFQUFFO0FBQ2hCQyxVQUFBQSxHQUFHLEVBQUUsMEJBQUFsQyxLQUFLLENBQUNpQyxnQkFBTixnRkFBd0JDLEdBQXhCLEtBQStCQyxtQ0FBa0JELEdBRHRDO0FBRWhCRSxVQUFBQSxHQUFHLEVBQUUsMkJBQUFwQyxLQUFLLENBQUNpQyxnQkFBTixrRkFBd0JHLEdBQXhCLEtBQStCRCxtQ0FBa0JDO0FBRnRDLFNBRmI7QUFNTEMsUUFBQUEsS0FBSyxFQUFFckMsS0FBSyxDQUFDcUMsS0FBTixJQUFlQyxpQ0FOakI7QUFPTDNCLFFBQUFBLEtBQUssRUFBRVgsS0FBSyxDQUFDVyxLQUFOLElBQWViLFVBQVUsQ0FBQ3lDLElBQVgsR0FBa0JDLEtBUG5DO0FBUUxqQyxRQUFBQSxPQUFPLEVBQUVQLEtBQUssQ0FBQ08sT0FBTixJQUFpQixJQVJyQjtBQVNMa0MsUUFBQUEsU0FBUyxFQUFFekMsS0FBSyxDQUFDeUMsU0FBTixJQUFtQixLQVR6QjtBQVVMQyxRQUFBQSxjQUFjLEVBQUUxQyxLQUFLLENBQUMwQyxjQUFOLElBQXdCLEtBVm5DO0FBV0xDLFFBQUFBLGNBQWMsRUFBRTNDLEtBQUssQ0FBQzJDLGNBQU4sSUFBd0JDLHFDQVhuQztBQVlMQyxRQUFBQSxNQUFNLEVBQUU3QyxLQUFLLENBQUM2QyxNQUFOLElBQWdCLEtBWm5CO0FBY0w7QUFDQTtBQUNBQyxRQUFBQSxVQUFVLEVBQUUsSUFoQlA7QUFpQkxDLFFBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBakJSO0FBa0JMQyxRQUFBQSxVQUFVLEVBQUVDLDZCQUFZQyxRQWxCbkI7QUFvQkw7QUFDQUMsUUFBQUEsVUFBVSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FyQlA7QUFzQkxDLFFBQUFBLFNBQVMsRUFBRUgsNkJBQVlJLE1BdEJsQjtBQXVCTEMsUUFBQUEsU0FBUyxFQUFFLElBdkJOO0FBd0JMQyxRQUFBQSxXQUFXLEVBQUUsSUF4QlI7QUEwQkxDLFFBQUFBLFNBQVMsRUFBRSxFQTFCTjtBQTRCTEMsUUFBQUEsU0FBUyxFQUFFLENBQUNDLGdDQUFELENBNUJOO0FBOEJMQyxRQUFBQSxPQUFPLEVBQUU7QUFDUGhELFVBQUFBLEtBQUssRUFBRWlELDhCQURBO0FBRVBDLFVBQUFBLFVBQVUsRUFBRUQ7QUFGTCxTQTlCSjtBQWtDTEUsUUFBQUEsU0FBUyxFQUFFO0FBQUNDLFVBQUFBLE9BQU8sRUFBRTtBQUFWO0FBbENOLE9BQVA7QUFvQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UscUNBQTRCL0MsR0FBNUIsRUFBaUM7QUFDL0I7QUFDQSxhQUFPO0FBQ0xxQixRQUFBQSxLQUFLLEVBQUUsS0FBS2xDLGlCQUFMLENBQXVCLEtBQUs2RCxjQUFMLENBQW9CaEQsR0FBcEIsRUFBeUJELEtBQWhELEVBQXVEc0IsS0FEekQ7QUFFTDRCLFFBQUFBLE9BQU8sRUFBRSxLQUFLNUQsTUFBTCxDQUFZLEtBQUsyRCxjQUFMLENBQW9CaEQsR0FBcEIsRUFBeUJqQyxLQUFyQyxJQUNKLEtBQUtzQixNQUFMLENBQVksS0FBSzJELGNBQUwsQ0FBb0JoRCxHQUFwQixFQUF5QmpDLEtBQXJDLEVBQTRDbUYsV0FBNUMsSUFDRCxLQUFLN0QsTUFBTCxDQUFZLEtBQUsyRCxjQUFMLENBQW9CaEQsR0FBcEIsRUFBeUJqQyxLQUFyQyxFQUE0Q29GLElBRnZDLEdBR0wsS0FBS0gsY0FBTCxDQUFvQmhELEdBQXBCLEVBQXlCb0Q7QUFMeEIsT0FBUDtBQU9EO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0Usc0JBQWFwRCxHQUFiLEVBQWtCakMsS0FBbEIsRUFBeUI7QUFDdkI7QUFDQSxVQUFNc0YsTUFBTSxHQUFHdEYsS0FBSyxHQUNoQjtBQUNFeUQsUUFBQUEsS0FBSyxFQUFFekQsS0FBSyxDQUFDb0YsSUFEZjtBQUVFRyxRQUFBQSxRQUFRLEVBQUV2RixLQUFLLENBQUN1RjtBQUZsQixPQURnQixHQUtoQjtBQUFDOUIsUUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBYzhCLFFBQUFBLFFBQVEsRUFBRSxDQUFDO0FBQXpCLE9BTEo7QUFPQSw2Q0FDSyxLQUFLakUsTUFBTCxDQUFZRSxPQURqQiw0Q0FFR1MsR0FGSCxrQ0FHTyxLQUFLWCxNQUFMLENBQVlFLE9BQVosQ0FBb0JTLEdBQXBCLENBSFAsR0FJT3FELE1BSlA7QUFPRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLDJCQUFrQnJELEdBQWxCLEVBQXVCUSxJQUF2QixFQUE2QjtBQUFBOztBQUMzQixVQUFJLENBQUMsS0FBSytDLFdBQU4sSUFBcUIsdUJBQUMsS0FBS0EsV0FBTiw4Q0FBQyxrQkFBbUJ2RCxHQUFuQixDQUFELENBQXpCLEVBQW1EO0FBQ2pEO0FBQ0EsZUFBTyxLQUFLWCxNQUFMLENBQVlFLE9BQW5CO0FBQ0Q7O0FBSjBCLHdEQU1jLEtBQUtnRSxXQU5uQix1REFNYyxtQkFBbUJ2RCxHQUFuQixDQU5kO0FBQUEsVUFNZHdELFVBTmMseUJBTXBCaEQsSUFOb0I7QUFBQSxVQU1GQyxZQU5FLHlCQU1GQSxZQU5FOztBQUFBLHdEQU9pQixLQUFLOEMsV0FQdEIsdURBT2lCLG1CQUFtQkMsVUFBbkIsQ0FQakI7QUFBQSxVQU9OQyxtQkFQTSx5QkFPcEJoRCxZQVBvQjs7QUFTM0IsNkNBQ0ssS0FBS3BCLE1BQUwsQ0FBWUUsT0FEakIsOEVBRUdTLEdBRkgsRUFFU1EsSUFBSSxDQUFDQyxZQUFELENBRmIsb0RBR0crQyxVQUhILEVBR2dCaEQsSUFBSSxDQUFDaUQsbUJBQUQsQ0FIcEI7QUFLRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsNkJBQXNDO0FBQUEsVUFBdkJDLElBQXVCLFFBQXZCQSxJQUF1QjtBQUFBLGlDQUFqQkMsVUFBaUI7QUFBQSxVQUFqQkEsVUFBaUIsZ0NBQUosQ0FBSTtBQUNwQyxhQUFPQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVlELElBQUksQ0FBQ3hDLEdBQUwsQ0FBUyxLQUFLc0MsSUFBTCxHQUFZQyxVQUFyQixFQUFpQyxDQUFqQyxDQUFaLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsdUNBQStDO0FBQUEsVUFBdkJELElBQXVCLFNBQXZCQSxJQUF1QjtBQUFBLG1DQUFqQkMsVUFBaUI7QUFBQSxVQUFqQkEsVUFBaUIsaUNBQUosQ0FBSTtBQUM3QyxhQUFPLEtBQUt0RSxNQUFMLENBQVltRCxTQUFaLENBQXNCc0IseUJBQXRCLEdBQ0hGLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDeEMsR0FBTCxDQUFTLElBQUlzQyxJQUFKLEdBQVdDLFVBQXBCLEVBQWdDLENBQWhDLENBQVosQ0FERyxHQUVILENBRko7QUFHRDs7O1dBRUQseUJBQWdCSSxRQUFoQixFQUEwQkMsYUFBMUIsRUFBeUM7QUFDdkMsYUFBTyxFQUFQO0FBQ0Q7OztXQUVELHVCQUFjO0FBQ1osYUFBTyxFQUFQO0FBQ0Q7OztXQUVELHNCQUFhQyxNQUFiLEVBQXFCQyxhQUFyQixFQUFvQztBQUNsQyxVQUFJLENBQUNELE1BQUwsRUFBYTtBQUNYLGVBQU8sSUFBUDtBQUNELE9BSGlDLENBS2xDO0FBQ0E7OztBQUNBLGFBQU9DLGFBQWEsQ0FBQ0MsR0FBZCxDQUFrQkYsTUFBTSxDQUFDckYsS0FBekIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLDZCQUFvQndGLFlBQXBCLEVBQWtDakYsaUJBQWxDLEVBQXFEO0FBQUE7O0FBQ25EO0FBQ0E7QUFDQSxVQUFNa0YsV0FBVyxHQUFHLENBQUMsWUFBRCxFQUFlLGtCQUFmLEVBQW1DQyxNQUFuQyxDQUNsQi9GLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUt3RSxjQUFuQixFQUFtQ3RFLEdBQW5DLENBQXVDLFVBQUFSLENBQUM7QUFBQSxlQUFJQSxDQUFDLENBQUNILEtBQU47QUFBQSxPQUF4QyxDQURrQixDQUFwQixDQUhtRCxDQU9uRDs7QUFDQSxVQUFNd0csU0FBUyxHQUFHLENBQUMsV0FBRCxFQUFjRCxNQUFkLENBQXFCL0YsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3dFLGNBQW5CLEVBQW1DdEUsR0FBbkMsQ0FBdUMsVUFBQVIsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQzRCLE1BQU47QUFBQSxPQUF4QyxDQUFyQixDQUFsQixDQVJtRCxDQVNuRDs7QUFDQXZCLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUt3RSxjQUFuQixFQUFtQ3dCLE9BQW5DLENBQTJDLFVBQUF0RyxDQUFDLEVBQUk7QUFDOUMsWUFDRWtHLFlBQVksQ0FBQzVCLFNBQWIsQ0FBdUJ0RSxDQUFDLENBQUM2QixLQUF6QixLQUNBLEtBQUksQ0FBQ1osaUJBQUwsQ0FBdUJqQixDQUFDLENBQUM2QixLQUF6QixDQURBLElBRUFaLGlCQUFpQixDQUFDakIsQ0FBQyxDQUFDNkIsS0FBSCxDQUFqQixDQUEyQjBFLEtBQTNCLEtBQXFDLEtBQUksQ0FBQ3RGLGlCQUFMLENBQXVCakIsQ0FBQyxDQUFDNkIsS0FBekIsRUFBZ0MwRSxLQUh2RSxFQUlFO0FBQ0FGLFVBQUFBLFNBQVMsQ0FBQ0csSUFBVixDQUFleEcsQ0FBQyxDQUFDNkIsS0FBakI7QUFDRDtBQUNGLE9BUkQsRUFWbUQsQ0FvQm5EOztBQUNBLFVBQU00RSxhQUFhLEdBQUcsS0FBS3RGLE1BQTNCO0FBQ0EsVUFBTXVGLE1BQU0sR0FBRyxLQUFLQyxlQUFMLENBQXFCRixhQUFyQixFQUFvQ1AsWUFBcEMsRUFBa0Q7QUFDL0RDLFFBQUFBLFdBQVcsRUFBWEEsV0FEK0Q7QUFFL0RFLFFBQUFBLFNBQVMsRUFBVEE7QUFGK0QsT0FBbEQsQ0FBZjtBQUlBLFdBQUtPLGlCQUFMLENBQXVCRixNQUF2QixFQTFCbUQsQ0EyQm5EOztBQUNBckcsTUFBQUEsTUFBTSxDQUFDd0csSUFBUCxDQUFZLEtBQUsvQixjQUFqQixFQUFpQ3dCLE9BQWpDLENBQXlDLFVBQUFRLE9BQU8sRUFBSTtBQUNsRCxRQUFBLEtBQUksQ0FBQ0MscUJBQUwsQ0FBMkJELE9BQTNCO0FBQ0QsT0FGRDtBQUdEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSx5QkFBZ0JMLGFBQWhCLEVBQStCUCxZQUEvQixFQUFzRjtBQUFBOztBQUFBLHNGQUFKLEVBQUk7QUFBQSxvQ0FBeENDLFdBQXdDO0FBQUEsVUFBeENBLFdBQXdDLGtDQUExQixFQUEwQjtBQUFBLGtDQUF0QkUsU0FBc0I7QUFBQSxVQUF0QkEsU0FBc0IsZ0NBQVYsRUFBVTs7QUFDcEYsVUFBTUssTUFBTSxHQUFHLEVBQWY7QUFDQXJHLE1BQUFBLE1BQU0sQ0FBQ3dHLElBQVAsQ0FBWUosYUFBWixFQUEyQkgsT0FBM0IsQ0FBbUMsVUFBQXhFLEdBQUcsRUFBSTtBQUN4QyxZQUNFLDBCQUFjMkUsYUFBYSxDQUFDM0UsR0FBRCxDQUEzQixLQUNBLDBCQUFjb0UsWUFBWSxDQUFDcEUsR0FBRCxDQUExQixDQURBLElBRUEsQ0FBQ3FFLFdBQVcsQ0FBQ2EsUUFBWixDQUFxQmxGLEdBQXJCLENBRkQsSUFHQSxDQUFDdUUsU0FBUyxDQUFDVyxRQUFWLENBQW1CbEYsR0FBbkIsQ0FKSCxFQUtFO0FBQ0E7QUFDQTRFLFVBQUFBLE1BQU0sQ0FBQzVFLEdBQUQsQ0FBTixHQUFjLE1BQUksQ0FBQzZFLGVBQUwsQ0FBcUJGLGFBQWEsQ0FBQzNFLEdBQUQsQ0FBbEMsRUFBeUNvRSxZQUFZLENBQUNwRSxHQUFELENBQXJELEVBQTREO0FBQ3hFcUUsWUFBQUEsV0FBVyxFQUFYQSxXQUR3RTtBQUV4RUUsWUFBQUEsU0FBUyxFQUFUQTtBQUZ3RSxXQUE1RCxDQUFkO0FBSUQsU0FYRCxNQVdPLElBQUksbUNBQW1CSCxZQUFZLENBQUNwRSxHQUFELENBQS9CLEtBQXlDLENBQUN1RSxTQUFTLENBQUNXLFFBQVYsQ0FBbUJsRixHQUFuQixDQUE5QyxFQUF1RTtBQUM1RTtBQUNBNEUsVUFBQUEsTUFBTSxDQUFDNUUsR0FBRCxDQUFOLEdBQWNvRSxZQUFZLENBQUNwRSxHQUFELENBQTFCO0FBQ0QsU0FITSxNQUdBO0FBQ0w7QUFDQTRFLFVBQUFBLE1BQU0sQ0FBQzVFLEdBQUQsQ0FBTixHQUFjMkUsYUFBYSxDQUFDM0UsR0FBRCxDQUEzQjtBQUNEO0FBQ0YsT0FuQkQ7QUFxQkEsYUFBTzRFLE1BQVA7QUFDRDs7O1dBRUQsMkJBQWtCTyxlQUFsQixFQUFtQztBQUFBOztBQUNqQzVHLE1BQUFBLE1BQU0sQ0FBQ3dHLElBQVAsQ0FBWUksZUFBWixFQUE2QlgsT0FBN0IsQ0FBcUMsVUFBQVksSUFBSSxFQUFJO0FBQzNDLFlBQUksT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QkMsZ0NBQWtCRixlQUFlLENBQUNDLElBQUQsQ0FBakMsQ0FBaEMsRUFBMEU7QUFDeEU7QUFDQSxVQUFBLE1BQUksQ0FBQy9GLE1BQUwsQ0FBWW1ELFNBQVosQ0FBc0I0QyxJQUF0QixJQUE4QkMsZ0NBQWtCRixlQUFlLENBQUNDLElBQUQsQ0FBakMsRUFBeUMvRSxZQUF2RTtBQUNBLFVBQUEsTUFBSSxDQUFDbEIsaUJBQUwsQ0FBdUJpRyxJQUF2QixJQUErQkMsZ0NBQWtCRixlQUFlLENBQUNDLElBQUQsQ0FBakMsQ0FBL0I7QUFDRCxTQUpELE1BSU8sSUFBSSxDQUFDLE1BQUQsRUFBUyxjQUFULEVBQXlCRSxLQUF6QixDQUErQixVQUFBQyxDQUFDO0FBQUEsaUJBQUlKLGVBQWUsQ0FBQ0MsSUFBRCxDQUFmLENBQXNCSSxjQUF0QixDQUFxQ0QsQ0FBckMsQ0FBSjtBQUFBLFNBQWhDLENBQUosRUFBa0Y7QUFDdkY7QUFDQTtBQUNBLFVBQUEsTUFBSSxDQUFDbEcsTUFBTCxDQUFZbUQsU0FBWixDQUFzQjRDLElBQXRCLElBQThCRCxlQUFlLENBQUNDLElBQUQsQ0FBZixDQUFzQi9FLFlBQXBEO0FBQ0EsVUFBQSxNQUFJLENBQUNsQixpQkFBTCxDQUF1QmlHLElBQXZCLElBQStCRCxlQUFlLENBQUNDLElBQUQsQ0FBOUM7QUFDRDtBQUNGLE9BWEQ7QUFZRDs7O1dBRUQsMkJBQWtCO0FBQ2hCLFVBQU1LLGdCQUFnQixHQUFHLEtBQUtBLGdCQUFMLElBQXlCLEVBQWxEO0FBQ0EsVUFBTUMsUUFBUSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCQyxNQUExQixDQUNmLFVBQUNDLElBQUQsRUFBTzdGLEdBQVA7QUFBQSwrQ0FDSzZGLElBREwsNENBRUc3RixHQUZILEVBRVN5RixnQkFBZ0IsQ0FBQ3pGLEdBQUQsQ0FBaEIsR0FDSDtBQUFDd0IsVUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBYzhCLFVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQXpCO0FBQTRCd0MsVUFBQUEsU0FBUyxFQUFFTCxnQkFBZ0IsQ0FBQ3pGLEdBQUQ7QUFBdkQsU0FERyxHQUVIO0FBQUN3QixVQUFBQSxLQUFLLEVBQUUsSUFBUjtBQUFjOEIsVUFBQUEsUUFBUSxFQUFFLENBQUM7QUFBekIsU0FKTjtBQUFBLE9BRGUsRUFPZixFQVBlLENBQWpCO0FBU0EsVUFBTXlDLFFBQVEsR0FBRyxLQUFLQyxlQUFMLENBQXFCSixNQUFyQixDQUNmLFVBQUNDLElBQUQsRUFBTzdGLEdBQVA7QUFBQSwrQ0FDSzZGLElBREwsNENBRUc3RixHQUZILEVBRVM7QUFBQ3dCLFVBQUFBLEtBQUssRUFBRSxJQUFSO0FBQWM4QixVQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUF6QjtBQUE0QnlDLFVBQUFBLFFBQVEsRUFBRTtBQUF0QyxTQUZUO0FBQUEsT0FEZSxFQUtmLEVBTGUsQ0FBakI7QUFRQSw2Q0FBV0wsUUFBWCxHQUF3QkssUUFBeEI7QUFDRDs7O1dBRUQsMkJBQWtCRSxTQUFsQixFQUE2QjtBQUMzQixXQUFLNUcsTUFBTCxtQ0FBa0IsS0FBS0EsTUFBdkIsR0FBa0M0RyxTQUFsQztBQUNBLGFBQU8sSUFBUDtBQUNEOzs7V0FFRCw4QkFBcUJDLFlBQXJCLEVBQW1DO0FBQ2pDLFdBQUs3RyxNQUFMLENBQVltRCxTQUFaLG1DQUE0QixLQUFLbkQsTUFBTCxDQUFZbUQsU0FBeEMsR0FBc0QwRCxZQUF0RDtBQUNBLGFBQU8sSUFBUDtBQUNEOzs7V0FFRCw0QkFBbUJDLElBQW5CLEVBQXlCRixTQUF6QixFQUFvQztBQUFBLHlCQUNLLEtBQUs1RyxNQURWO0FBQUEsVUFDbEIrRyxRQURrQixnQkFDM0J6RCxPQUQyQjtBQUFBLFVBQ1JILFNBRFEsZ0JBQ1JBLFNBRFE7O0FBR2xDLFVBQUksQ0FBQywwQkFBY3lELFNBQWQsQ0FBRCxJQUE2QixPQUFPRSxJQUFQLEtBQWdCLFFBQWpELEVBQTJEO0FBQ3pELGVBQU8sSUFBUDtBQUNEOztBQUVELFVBQU1FLFdBQVcsR0FBRzlILE1BQU0sQ0FBQytILE9BQVAsQ0FBZUwsU0FBZixFQUEwQkwsTUFBMUIsQ0FBaUMsVUFBQ0MsSUFBRCxTQUF3QjtBQUFBO0FBQUEsWUFBaEI3RixHQUFnQjtBQUFBLFlBQVh3QixLQUFXOztBQUMzRSwrQ0FDS3FFLElBREwsNENBRUc3RixHQUZILEVBRVMsMEJBQWM2RixJQUFJLENBQUM3RixHQUFELENBQWxCLEtBQTRCLDBCQUFjd0IsS0FBZCxDQUE1QixtQ0FBdURxRSxJQUFJLENBQUM3RixHQUFELENBQTNELEdBQXFFd0IsS0FBckUsSUFBOEVBLEtBRnZGO0FBSUQsT0FMbUIsRUFLakI0RSxRQUFRLENBQUNELElBQUQsQ0FBUixJQUFrQnZELDhCQUxELENBQXBCOztBQU9BLFVBQU1ELE9BQU8sbUNBQ1J5RCxRQURRLDRDQUVWRCxJQUZVLEVBRUhFLFdBRkcsRUFBYjs7QUFLQSxXQUFLdkIsaUJBQUwsQ0FBdUI7QUFBQ25DLFFBQUFBLE9BQU8sRUFBUEE7QUFBRCxPQUF2QixFQW5Ca0MsQ0FvQmxDOztBQUNBLFVBQU00RCxZQUFZLEdBQUcvRCxTQUFTLENBQUMyRCxJQUFELENBQVQsSUFBbUIzRCxTQUFTLENBQUMyRCxJQUFELENBQVQsQ0FBZ0JLLE1BQXhEOztBQUVBLFVBQUlELFlBQUosRUFBa0I7QUFDaEIsYUFBS0UseUJBQUwsQ0FBK0JSLFNBQS9CLEVBQTBDRSxJQUExQztBQUNBLGFBQUtPLHlCQUFMLENBQStCVCxTQUEvQixFQUEwQ0csUUFBMUMsRUFBb0RELElBQXBEO0FBQ0EsYUFBS1EsbUJBQUwsQ0FBeUJWLFNBQXpCLEVBQW9DRyxRQUFwQyxFQUE4Q0QsSUFBOUM7QUFDRDs7QUFFRCxhQUFPLElBQVA7QUFDRDs7O1dBRUQsNkJBQW9CRixTQUFwQixFQUErQkcsUUFBL0IsRUFBeUNELElBQXpDLEVBQStDO0FBQzdDLFVBQUksQ0FBQ0YsU0FBUyxDQUFDVyxnQkFBWCxJQUErQixDQUFDWCxTQUFTLENBQUNXLGdCQUFWLENBQTJCQyxNQUEvRCxFQUF1RTtBQUNyRTtBQUNEOztBQUg0QywwQkFLaEIsS0FBS3hILE1BTFc7QUFBQSxVQUt0Q3NELE9BTHNDLGlCQUt0Q0EsT0FMc0M7QUFBQSxVQUs3QkgsU0FMNkIsaUJBSzdCQSxTQUw2QjtBQU83QyxVQUFJLENBQUNBLFNBQVMsQ0FBQzJELElBQUQsQ0FBZCxFQUFzQjtBQVB1QixVQVF0Q0ssTUFSc0MsR0FRNUJoRSxTQUFTLENBQUMyRCxJQUFELENBUm1CLENBUXRDSyxNQVJzQzs7QUFTN0MsVUFBTU0sYUFBYSxtQ0FDZG5FLE9BQU8sQ0FBQ3dELElBQUQsQ0FBUCxDQUFjVyxhQURBO0FBRWpCM0QsUUFBQUEsSUFBSSxFQUFFLGdCQUZXO0FBR2pCcUQsUUFBQUEsTUFBTSxzQ0FBTUEsTUFBTjtBQUhXLFFBQW5COztBQUtBLFdBQUsxQixpQkFBTCxDQUF1QjtBQUNyQm5DLFFBQUFBLE9BQU8sa0NBQ0ZBLE9BREUsNENBRUp3RCxJQUZJLGtDQUdBeEQsT0FBTyxDQUFDd0QsSUFBRCxDQUhQO0FBSUhXLFVBQUFBLGFBQWEsRUFBYkE7QUFKRztBQURjLE9BQXZCO0FBU0Q7QUFDRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxtQ0FBMEJiLFNBQTFCLEVBQXFDRSxJQUFyQyxFQUEyQztBQUN6QyxVQUFJLE9BQU9GLFNBQVMsQ0FBQ2MsWUFBakIsS0FBa0MsUUFBdEMsRUFBZ0Q7QUFEUCwwQkFHWixLQUFLMUgsTUFITztBQUFBLFVBR2xDc0QsT0FIa0MsaUJBR2xDQSxPQUhrQztBQUFBLFVBR3pCSCxTQUh5QixpQkFHekJBLFNBSHlCO0FBSXpDLFdBQUtzQyxpQkFBTCxDQUF1QjtBQUNyQm5DLFFBQUFBLE9BQU8sa0NBQ0ZBLE9BREUsNENBRUp3RCxJQUZJLGtDQUdBeEQsT0FBTyxDQUFDd0QsSUFBRCxDQUhQO0FBSUhTLFVBQUFBLGdCQUFnQixrQ0FDWGpFLE9BQU8sQ0FBQ3dELElBQUQsQ0FBUCxDQUFjUyxnQkFESDtBQUVkbEgsWUFBQUEsSUFBSSxFQUFFOEMsU0FBUyxDQUFDMkQsSUFBRCxDQUFULENBQWdCekcsSUFGUjtBQUdkc0gsWUFBQUEsS0FBSyxFQUFFeEUsU0FBUyxDQUFDMkQsSUFBRCxDQUFULENBQWdCSyxNQUFoQixDQUF1QjNILE1BSGhCO0FBSWRvSSxZQUFBQSxRQUFRLEVBQUVDLE9BQU8sQ0FBQzFFLFNBQVMsQ0FBQzJELElBQUQsQ0FBVCxDQUFnQmMsUUFBakI7QUFKSDtBQUpiO0FBRGMsT0FBdkI7QUFjRCxLLENBRUQ7Ozs7V0FDQSxtQ0FBMEJoQixTQUExQixFQUFxQ0csUUFBckMsRUFBK0NELElBQS9DLEVBQXFEO0FBQ25EO0FBQ0EsVUFBTWdCLFlBQVksR0FDaEJsQixTQUFTLENBQUNXLGdCQUFWLElBQ0EsQ0FBQyxVQUFELEVBQWEsT0FBYixFQUFzQlEsSUFBdEIsQ0FDRSxVQUFBcEgsR0FBRztBQUFBLGVBQ0RpRyxTQUFTLENBQUNXLGdCQUFWLENBQTJCcEIsY0FBM0IsQ0FBMEN4RixHQUExQyxLQUNBaUcsU0FBUyxDQUFDVyxnQkFBVixDQUEyQjVHLEdBQTNCLE1BQ0UsQ0FBQ29HLFFBQVEsQ0FBQ0QsSUFBRCxDQUFSLElBQWtCdkQsOEJBQW5CLEVBQXFDZ0UsZ0JBQXJDLENBQXNENUcsR0FBdEQsQ0FIRDtBQUFBLE9BREwsQ0FGRjtBQVFBLFVBQUksQ0FBQ21ILFlBQUwsRUFBbUI7QUFWZ0MsMEJBWXRCLEtBQUs5SCxNQVppQjtBQUFBLFVBWTVDc0QsT0FaNEMsaUJBWTVDQSxPQVo0QztBQUFBLFVBWW5DSCxTQVptQyxpQkFZbkNBLFNBWm1DO0FBQUEsa0NBYXpCRyxPQUFPLENBQUN3RCxJQUFELENBQVAsQ0FBY1MsZ0JBYlc7QUFBQSxVQWE1Q0ksS0FiNEMseUJBYTVDQSxLQWI0QztBQUFBLFVBYXJDQyxRQWJxQyx5QkFhckNBLFFBYnFDO0FBY25ELFVBQU1wRSxVQUFVLEdBQUdMLFNBQVMsQ0FBQzJELElBQUQsQ0FBNUIsQ0FkbUQsQ0FlbkQ7O0FBQ0EsVUFBSTlDLE1BQUo7O0FBQ0EsVUFBSTRDLFNBQVMsQ0FBQ1csZ0JBQVYsQ0FBMkJwQixjQUEzQixDQUEwQyxPQUExQyxDQUFKLEVBQXdEO0FBQ3RELFlBQU1mLEtBQUssR0FBRyxxQ0FBb0I1QixVQUFwQixDQUFkOztBQUVBLFlBQUk0QixLQUFKLEVBQVc7QUFDVCxjQUFNNEMsU0FBUyxHQUFHQywwQkFBYUMsTUFBYixDQUFvQixVQUFBQyxFQUFFO0FBQUEsbUJBQUkscUNBQW9CQSxFQUFwQixNQUE0Qi9DLEtBQWhDO0FBQUEsV0FBdEIsQ0FBbEI7O0FBRUFwQixVQUFBQSxNQUFNLEdBQUdnRSxTQUFTLENBQUNJLElBQVYsQ0FBZSxVQUFBRCxFQUFFO0FBQUEsbUJBQUlBLEVBQUUsQ0FBQ2hCLE1BQUgsQ0FBVTNILE1BQVYsS0FBcUJtSSxLQUF6QjtBQUFBLFdBQWpCLENBQVQ7O0FBRUEsY0FBSTNELE1BQU0sSUFBSVIsVUFBVSxDQUFDb0UsUUFBekIsRUFBbUM7QUFDakM1RCxZQUFBQSxNQUFNLEdBQUcsbUNBQWtCLElBQWxCLEVBQXdCQSxNQUF4QixDQUFUO0FBQ0Q7O0FBRUQsY0FBSUEsTUFBTSxJQUFJUixVQUFVLENBQUM2RSxRQUF6QixFQUFtQztBQUNqQ3JFLFlBQUFBLE1BQU0sR0FBRyxLQUFLc0UsY0FBTCxDQUFvQnhCLElBQXBCLEVBQTBCdEQsVUFBVSxDQUFDNkUsUUFBckMsRUFBK0NyRSxNQUEvQyxDQUFUO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFVBQUk0QyxTQUFTLENBQUNXLGdCQUFWLENBQTJCcEIsY0FBM0IsQ0FBMEMsVUFBMUMsQ0FBSixFQUEyRDtBQUN6RG5DLFFBQUFBLE1BQU0sR0FBRyxtQ0FBa0I0RCxRQUFsQixFQUE0QjVELE1BQU0sSUFBSVIsVUFBdEMsQ0FBVDtBQUNEOztBQUVELFVBQUlRLE1BQUosRUFBWTtBQUNWLGFBQUt1RSxvQkFBTCxzQ0FBNEJ6QixJQUE1QixFQUFtQzlDLE1BQW5DO0FBQ0Q7QUFDRjs7O1dBRUQsd0JBQWU4QyxJQUFmLEVBQXFCdUIsUUFBckIsRUFBK0I3RSxVQUEvQixFQUEyQztBQUFBOztBQUN6QztBQUR5QyxnQ0FFakJ0RSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLd0UsY0FBbkIsRUFBbUN5RSxJQUFuQyxDQUF3QyxVQUFBakcsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ3pCLEtBQU4sS0FBZ0JvRyxJQUFwQjtBQUFBLE9BQTdDLENBRmlCO0FBQUEsVUFFbENwSSxLQUZrQyx1QkFFbENBLEtBRmtDO0FBQUEsVUFFM0IrQixNQUYyQix1QkFFM0JBLE1BRjJCOztBQUd6QyxVQUFNSixJQUFJLHlCQUFHLEtBQUtMLE1BQUwsQ0FBWXRCLEtBQVosQ0FBSCx1REFBRyxtQkFBb0IyQixJQUFqQzs7QUFFQSxVQUFJQSxJQUFJLEtBQUssUUFBVCxJQUFxQkEsSUFBSSxLQUFLLFNBQTlCLElBQTJDQSxJQUFJLEtBQUssTUFBeEQsRUFBZ0U7QUFDOUQsZUFBTyxLQUFLbUksc0JBQUwsQ0FBNEJILFFBQTVCLEVBQXNDLEtBQUtySSxNQUFMLENBQVlTLE1BQVosQ0FBdEMsRUFBMkQrQyxVQUEzRCxDQUFQO0FBQ0QsT0FQd0MsQ0FTekM7OztBQUNBLGFBQU8sS0FBS2lGLHFCQUFMLENBQTJCSixRQUEzQixFQUFxQyxLQUFLckksTUFBTCxDQUFZUyxNQUFaLENBQXJDLEVBQTBEK0MsVUFBMUQsQ0FBUDtBQUNEOzs7V0FFRCxnQ0FBdUI2RSxRQUF2QixFQUFpQzVILE1BQWpDLEVBQXlDK0MsVUFBekMsRUFBcUQ7QUFDbkQsVUFBTTJELE1BQU0sR0FBRzNELFVBQVUsQ0FBQzJELE1BQTFCO0FBQ0EsVUFBTXVCLGtCQUFrQixHQUFHLEVBQTNCO0FBQ0EsVUFBTUMsV0FBVyxHQUFHTixRQUFRLENBQUNPLEtBQVQsQ0FBZSxDQUFmLEVBQWtCekIsTUFBTSxDQUFDM0gsTUFBekIsRUFBaUNILEdBQWpDLENBQXFDLFVBQUN3SixJQUFELEVBQU90SixLQUFQLEVBQWlCO0FBQ3hFbUosUUFBQUEsa0JBQWtCLENBQUNyRCxJQUFuQixDQUF3QndELElBQUksQ0FBQyxDQUFELENBQTVCO0FBQ0EsZUFBTyxDQUFDQSxJQUFJLENBQUMsQ0FBRCxDQUFMLEVBQVUxQixNQUFNLENBQUM1SCxLQUFELENBQWhCLENBQVA7QUFDRCxPQUhtQixDQUFwQjtBQUlBLFVBQU11SixnQkFBZ0IsR0FBRzNCLE1BQU0sQ0FBQ3lCLEtBQVAsQ0FBYUQsV0FBVyxDQUFDbkosTUFBekIsRUFBaUMySCxNQUFNLENBQUMzSCxNQUF4QyxDQUF6Qjs7QUFQbUQsaURBUy9Cc0osZ0JBVCtCO0FBQUE7O0FBQUE7QUFTbkQsNERBQXNDO0FBQUEsY0FBM0J4SSxLQUEyQjtBQUNwQyxjQUFNeUksUUFBUSxHQUFHdEksTUFBTSxDQUFDMkgsSUFBUCxDQUFZLFVBQUE1SixDQUFDO0FBQUEsbUJBQUksQ0FBQ2tLLGtCQUFrQixDQUFDN0MsUUFBbkIsQ0FBNEJySCxDQUE1QixDQUFMO0FBQUEsV0FBYixDQUFqQjs7QUFDQSxjQUFJLENBQUN1SyxRQUFMLEVBQWU7QUFDYjtBQUNEOztBQUNETCxVQUFBQSxrQkFBa0IsQ0FBQ3JELElBQW5CLENBQXdCMEQsUUFBeEI7QUFDQUosVUFBQUEsV0FBVyxDQUFDdEQsSUFBWixDQUFpQixDQUFDMEQsUUFBRCxFQUFXekksS0FBWCxDQUFqQjtBQUNEO0FBaEJrRDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWlCbkQsNkNBQ0trRCxVQURMO0FBRUU2RSxRQUFBQSxRQUFRLEVBQUVNO0FBRlo7QUFJRDs7O1dBRUQsK0JBQXNCTixRQUF0QixFQUFnQzVILE1BQWhDLEVBQXdDdUQsTUFBeEMsRUFBZ0Q7QUFDOUMsVUFBTW1ELE1BQU0sR0FBR25ELE1BQU0sQ0FBQ21ELE1BQXRCO0FBQ0EsVUFBSXdCLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxLQUFULENBQWUsQ0FBZixFQUFrQnpCLE1BQU0sQ0FBQzNILE1BQXpCLENBQWxCO0FBRUFtSixNQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ3RKLEdBQVosQ0FBZ0IsVUFBQ3dKLElBQUQsRUFBT3RKLEtBQVAsRUFBaUI7QUFDN0MsWUFBTTRDLEtBQUssR0FBRzVDLEtBQUssS0FBS29KLFdBQVcsQ0FBQ25KLE1BQVosR0FBcUIsQ0FBL0IsR0FBbUMsSUFBbkMsR0FBMENxSixJQUFJLENBQUMsQ0FBRCxDQUE1RDtBQUNBLGVBQU8sQ0FBQzFHLEtBQUQsRUFBUWdGLE1BQU0sQ0FBQzVILEtBQUQsQ0FBZCxDQUFQO0FBQ0QsT0FIYSxDQUFkO0FBSUEsVUFBTXVKLGdCQUFnQixHQUFHM0IsTUFBTSxDQUFDeUIsS0FBUCxDQUFhRCxXQUFXLENBQUNuSixNQUF6QixFQUFpQzJILE1BQU0sQ0FBQzNILE1BQXhDLENBQXpCOztBQUVBLFVBQUlzSixnQkFBZ0IsQ0FBQ3RKLE1BQWpCLEdBQTBCLENBQTlCLEVBQWlDO0FBQy9CLFlBQU13SixjQUFjLEdBQUdYLFFBQVEsQ0FBQ2hKLEdBQVQsQ0FBYSxVQUFBNEosQ0FBQztBQUFBLGlCQUFJQSxDQUFDLENBQUMsQ0FBRCxDQUFMO0FBQUEsU0FBZCxFQUF3QmYsTUFBeEIsQ0FBK0IsVUFBQWUsQ0FBQztBQUFBLGlCQUFJLE9BQU9BLENBQVAsS0FBYSxRQUFqQjtBQUFBLFNBQWhDLENBQXZCO0FBQ0EsWUFBTUMsUUFBUSxHQUFHM0UsSUFBSSxDQUFDeEMsR0FBTCxPQUFBd0MsSUFBSSxzQ0FBUXlFLGNBQVIsVUFBd0J2SSxNQUFNLENBQUNBLE1BQU0sQ0FBQ2pCLE1BQVAsR0FBZ0IsQ0FBakIsQ0FBOUIsR0FBckI7QUFDQSxZQUFNMkosU0FBUyxHQUFHUixXQUFXLENBQUNBLFdBQVcsQ0FBQ25KLE1BQVosR0FBcUIsQ0FBdEIsQ0FBWCxDQUFvQyxDQUFwQyxDQUFsQjtBQUNBLFlBQU00SixJQUFJLEdBQUcsQ0FBQ0YsUUFBUSxHQUFHQyxTQUFaLEtBQTBCTCxnQkFBZ0IsQ0FBQ3RKLE1BQWpCLEdBQTBCLENBQXBELENBQWI7QUFDQW1KLFFBQUFBLFdBQVcsQ0FBQ0EsV0FBVyxDQUFDbkosTUFBWixHQUFxQixDQUF0QixDQUFYLENBQW9DLENBQXBDLElBQXlDMkosU0FBUyxHQUFHQyxJQUFyRDs7QUFMK0Isb0RBT05OLGdCQUFnQixDQUFDN0IsT0FBakIsRUFQTTtBQUFBOztBQUFBO0FBTy9CLGlFQUFxRDtBQUFBO0FBQUEsZ0JBQXpDb0MsQ0FBeUM7QUFBQSxnQkFBdEMvSSxLQUFzQzs7QUFDbkQsZ0JBQU02QixLQUFLLEdBQUdrSCxDQUFDLEtBQUtQLGdCQUFnQixDQUFDdEosTUFBakIsR0FBMEIsQ0FBaEMsR0FBb0MsSUFBcEMsR0FBMkMySixTQUFTLEdBQUlDLElBQUksSUFBSUMsQ0FBQyxHQUFHLENBQVIsQ0FBMUU7QUFDQVYsWUFBQUEsV0FBVyxDQUFDdEQsSUFBWixDQUFpQixDQUFDbEQsS0FBRCxFQUFRN0IsS0FBUixDQUFqQjtBQUNEO0FBVjhCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXaEM7O0FBQ0QsNkNBQ0swRCxNQURMO0FBRUVxRSxRQUFBQSxRQUFRLEVBQUVNO0FBRlo7QUFJRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7O1dBQ0UseUJBQWdCO0FBQUEsVUFDUHpJLE9BRE8sR0FDSSxLQUFLRixNQURULENBQ1BFLE9BRE87QUFFZCxhQUNHQSxPQUFPLElBQ1JoQixNQUFNLENBQUNDLE1BQVAsQ0FBY2UsT0FBZCxFQUF1QitGLEtBQXZCLENBQTZCLFVBQUFwSCxDQUFDLEVBQUk7QUFDaEMsZUFBT2dKLE9BQU8sQ0FBQ2hKLENBQUMsQ0FBQzZILFFBQUYsSUFBZTdILENBQUMsQ0FBQ3NELEtBQUYsSUFBV3RELENBQUMsQ0FBQ29GLFFBQUYsR0FBYSxDQUFDLENBQXpDLENBQWQ7QUFDRCxPQUZELENBRkY7QUFNRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHNCQUFhcUYsU0FBYixFQUF3QjtBQUN0QixVQUFJLENBQUNBLFNBQUwsRUFBZ0I7QUFDZCxlQUFPLEtBQVA7QUFDRDs7QUFDRCxhQUFPekIsT0FBTyxDQUFDeUIsU0FBUyxDQUFDQyxJQUFWLElBQWtCRCxTQUFTLENBQUNDLElBQVYsQ0FBZS9KLE1BQWxDLENBQWQ7QUFDRDs7O1dBRUQseUJBQWdCO0FBQ2QsYUFBTyxLQUFLYSxJQUFMLElBQWEsS0FBS21KLGFBQUwsRUFBcEI7QUFDRDs7O1dBRUQsMkJBQWtCRCxJQUFsQixFQUF3QjtBQUN0QixhQUNHLEtBQUtsSixJQUFMLElBQ0QsS0FBS21KLGFBQUwsRUFEQyxJQUVELEtBQUtDLFlBQUwsQ0FBa0JGLElBQWxCLENBRkMsSUFHRCxPQUFPLEtBQUtHLFdBQVosS0FBNEIsVUFKOUI7QUFNRDs7O1dBRUQsdUJBQWMvRyxVQUFkLEVBQTBCRCxXQUExQixFQUF1Q2MsVUFBdkMsRUFBbUQ7QUFDakQsVUFBSW1HLEtBQUssQ0FBQ0MsT0FBTixDQUFjcEcsVUFBVSxDQUFDNkUsUUFBekIsQ0FBSixFQUF3QztBQUN0QyxZQUFNUSxJQUFJLEdBQUcsSUFBSWdCLEdBQUosRUFBYjtBQUNBckcsUUFBQUEsVUFBVSxDQUFDNkUsUUFBWCxDQUFvQmxELE9BQXBCLENBQTRCLGlCQUFZO0FBQUE7QUFBQSxjQUFWMkUsQ0FBVTtBQUFBLGNBQVBqTCxDQUFPOztBQUN0Q2dLLFVBQUFBLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU0QsQ0FBVCxFQUFZLE9BQU9qTCxDQUFQLEtBQWEsUUFBYixHQUF3QiwwQkFBU0EsQ0FBVCxDQUF4QixHQUFzQ0EsQ0FBbEQ7QUFDRCxTQUZELEVBRnNDLENBTXRDOztBQUNBLFlBQU0yQixLQUFLLEdBQUd3Siw0QkFBV3JILFVBQVgsSUFDWGxDLE1BRFcsQ0FDSmtKLEtBQUssQ0FBQ00sSUFBTixDQUFXcEIsSUFBSSxDQUFDbkQsSUFBTCxFQUFYLENBREksRUFFWGhGLEtBRlcsQ0FFTGlKLEtBQUssQ0FBQ00sSUFBTixDQUFXcEIsSUFBSSxDQUFDMUosTUFBTCxFQUFYLENBRkssRUFHWCtLLE9BSFcsQ0FHSEMsOEJBSEcsQ0FBZDs7QUFJQSxlQUFPM0osS0FBUDtBQUNEOztBQUVELGFBQU8sS0FBSzRKLGtCQUFMLENBQXdCekgsVUFBeEIsRUFBb0NELFdBQXBDLEVBQWlEYyxVQUFVLENBQUMyRCxNQUFYLENBQWtCOUgsR0FBbEIsQ0FBc0JDLG9CQUF0QixDQUFqRCxDQUFQO0FBQ0Q7OztXQUVELCtCQUFzQm9CLEtBQXRCLEVBQTZCMkosWUFBN0IsRUFBMkM7QUFDekMsVUFBSUMsWUFBWSxHQUFHRCxZQUFZLElBQUl0TSxhQUFuQzs7QUFDQSxVQUFJLENBQUMyQyxLQUFMLEVBQVk7QUFDVixlQUFPO0FBQUEsaUJBQU00SixZQUFOO0FBQUEsU0FBUDtBQUNEOztBQUVELFVBQU1DLE9BQU8sR0FBRyxJQUFJVixHQUFKLEVBQWhCOztBQUVBLFVBQUluSixLQUFLLENBQUM4SixZQUFWLEVBQXdCO0FBQ3RCRixRQUFBQSxZQUFZLEdBQUc1SixLQUFLLENBQUM4SixZQUFyQjtBQUNEOztBQVZ3QyxrREFXUjlKLEtBQUssQ0FBQytKLFNBWEU7QUFBQTs7QUFBQTtBQVd6QywrREFBa0Q7QUFBQTtBQUFBLGNBQXRDdEksS0FBc0MsZ0JBQXRDQSxLQUFzQztBQUFBLGNBQS9CdUksU0FBK0IsZ0JBQS9CQSxTQUErQjs7QUFDaEQsY0FBSUEsU0FBSixFQUFlO0FBQ2JILFlBQUFBLE9BQU8sQ0FBQ1IsR0FBUixDQUFZNUgsS0FBWixFQUFtQnVJLFNBQW5CO0FBQ0Q7QUFDRixTQWZ3QyxDQWlCekM7O0FBakJ5QztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWtCekMsVUFBTWxLLEtBQUssR0FBRyw2QkFDWEMsTUFEVyxDQUNKa0osS0FBSyxDQUFDTSxJQUFOLENBQVdNLE9BQU8sQ0FBQzdFLElBQVIsRUFBWCxDQURJLEVBRVhoRixLQUZXLENBRUxpSixLQUFLLENBQUNNLElBQU4sQ0FBV00sT0FBTyxDQUFDcEwsTUFBUixFQUFYLENBRkssRUFHWCtLLE9BSFcsQ0FHSEksWUFIRyxDQUFkO0FBSUEsYUFBTzlKLEtBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0Usc0NBQTJFO0FBQUE7O0FBQUEscUNBQXBEbUssWUFBb0Q7QUFBQSxVQUFwREEsWUFBb0QsbUNBQXJDck0sbUJBQXFDO0FBQUEsVUFBaEJ1RyxhQUFnQixTQUFoQkEsYUFBZ0I7QUFDekUsVUFBTStGLGtCQUFrQixHQUFHLEVBQTNCLENBRHlFLENBR3pFOztBQUNBMUwsTUFBQUEsTUFBTSxDQUFDd0csSUFBUCxDQUFZLEtBQUsvQixjQUFqQixFQUFpQ3dCLE9BQWpDLENBQXlDLFVBQUFRLE9BQU8sRUFBSTtBQUFBLG9DQWE5QyxNQUFJLENBQUNoQyxjQUFMLENBQW9CZ0MsT0FBcEIsQ0FiOEM7QUFBQSxZQUVoRGpILEtBRmdELHlCQUVoREEsS0FGZ0Q7QUFBQSxZQUdoRG1NLEtBSGdELHlCQUdoREEsS0FIZ0Q7QUFBQSxZQUloRHJLLEtBSmdELHlCQUloREEsS0FKZ0Q7QUFBQSxZQUtoREMsTUFMZ0QseUJBS2hEQSxNQUxnRDtBQUFBLFlBTWhEQyxLQU5nRCx5QkFNaERBLEtBTmdEO0FBQUEsWUFPaERvSyxRQVBnRCx5QkFPaERBLFFBUGdEO0FBQUEsWUFRaEQ5SixZQVJnRCx5QkFRaERBLFlBUmdEO0FBQUEsWUFTaEQrSixpQkFUZ0QseUJBU2hEQSxpQkFUZ0Q7QUFBQSxZQVVoRGpLLFNBVmdELHlCQVVoREEsU0FWZ0Q7QUFBQSxZQVdoREYsZ0JBWGdELHlCQVdoREEsZ0JBWGdEO0FBQUEsWUFZaERvSyxXQVpnRCx5QkFZaERBLFdBWmdEO0FBZWxELFlBQU1DLGNBQWMsR0FBR3BELE9BQU8sQ0FDNUIsQ0FBQ3JILEtBQUssSUFBSUksZ0JBQWdCLEtBQUtDLGdDQUFlcUssUUFBOUMsS0FBMkQsTUFBSSxDQUFDbEwsTUFBTCxDQUFZdEIsS0FBWixDQUQvQixDQUE5Qjs7QUFJQSxZQUFJdU0sY0FBSixFQUFvQjtBQUNsQixjQUFNRSxJQUFJLEdBQUcsQ0FBQyxNQUFJLENBQUNuTCxNQUFMLENBQVlRLEtBQVosQ0FBRCxFQUFxQixNQUFJLENBQUNSLE1BQUwsQ0FBWVMsTUFBWixDQUFyQixFQUEwQyxNQUFJLENBQUNULE1BQUwsQ0FBWW1ELFNBQVosQ0FBc0J6QyxLQUF0QixDQUExQyxDQUFiO0FBQ0EsY0FBTTBLLE9BQU8sR0FBR1AsS0FBSyxJQUFJLE1BQUksQ0FBQzdLLE1BQUwsQ0FBWW1ELFNBQVosQ0FBc0IwSCxLQUF0QixDQUF6QixDQUZrQixDQUdsQjtBQUNBOztBQUNBLGNBQU1RLFdBQVcsR0FBRyxNQUFJLENBQUNyTCxNQUFMLENBQVl0QixLQUFaLENBQXBCO0FBQ0EsY0FBTTRNLGdCQUFnQixHQUFHLE1BQUksQ0FBQ3RMLE1BQUwsQ0FBWW1ELFNBQVosQ0FBc0I2SCxXQUF0QixDQUF6QjtBQUVBLGNBQU1PLGFBQWEsR0FDakIzSyxnQkFBZ0IsS0FBS0MsZ0NBQWVxSyxRQUFwQyxHQUNJdE0sYUFESixHQUVJZ0MsZ0JBQWdCLEtBQUtDLGdDQUFlUCxLQUFwQyxHQUNBLE1BQUksQ0FBQ2tMLGFBQUwsT0FBQSxNQUFJLEVBQWtCTCxJQUFsQixDQURKLEdBRUF2SyxnQkFBZ0IsS0FBS0MsZ0NBQWU0SyxZQUFwQyxHQUNBLE1BQUksQ0FBQ0MscUJBQUwsQ0FDRSxNQUFJLENBQUMxTCxNQUFMLENBQVltRCxTQUFaLENBQXNCekMsS0FBdEIsQ0FERixFQUVFLE1BQUksQ0FBQ1YsTUFBTCxDQUFZbUQsU0FBWixDQUFzQndJLGdCQUZ4QixDQURBLEdBS0EsTUFBSSxDQUFDdkIsa0JBQUwsT0FBQSxNQUFJLEVBQXVCZSxJQUF2QixTQUE2QkMsT0FBN0IsR0FWVjs7QUFZQVIsVUFBQUEsa0JBQWtCLENBQUNFLFFBQUQsQ0FBbEIsR0FBK0IsVUFBQXRNLENBQUM7QUFBQSxtQkFDOUIsTUFBSSxDQUFDb04sc0JBQUwsQ0FDRUwsYUFERixFQUVFWixZQUFZLENBQUM5RixhQUFELENBQVosQ0FBNEJyRyxDQUE1QixDQUZGLEVBR0U2TSxXQUhGLEVBSUVDLGdCQUpGLEVBS0V4SyxTQUxGLENBRDhCO0FBQUEsV0FBaEM7QUFRRCxTQTVCRCxNQTRCTyxJQUFJLE9BQU9pSyxpQkFBUCxLQUE2QixVQUFqQyxFQUE2QztBQUNsREgsVUFBQUEsa0JBQWtCLENBQUNFLFFBQUQsQ0FBbEIsR0FBK0JDLGlCQUFpQixDQUFDLE1BQUksQ0FBQy9LLE1BQU4sQ0FBaEQ7QUFDRCxTQUZNLE1BRUE7QUFDTDRLLFVBQUFBLGtCQUFrQixDQUFDRSxRQUFELENBQWxCLEdBQ0UsT0FBTzlKLFlBQVAsS0FBd0IsVUFBeEIsR0FBcUNBLFlBQVksQ0FBQyxNQUFJLENBQUNoQixNQUFOLENBQWpELEdBQWlFZ0IsWUFEbkU7QUFFRDs7QUFFRCxZQUFJLEVBQUU4SixRQUFRLElBQUlGLGtCQUFkLENBQUosRUFBdUM7QUFDckNpQiwwQkFBUUMsSUFBUixtREFBd0RoQixRQUFRLElBQUluRixPQUFwRTtBQUNEO0FBQ0YsT0F6REQ7QUEyREEsYUFBT2lGLGtCQUFQO0FBQ0Q7OztXQUVELDRCQUFtQnBLLEtBQW5CLEVBQTBCQyxNQUExQixFQUFrQ0MsS0FBbEMsRUFBeUNtSyxLQUF6QyxFQUFnRDtBQUM5QyxVQUFJckssS0FBSyxLQUFLb0MsNkJBQVltSixPQUExQixFQUFtQztBQUNqQztBQUNBLGVBQU8vQiw0QkFBV3hKLEtBQVgsSUFDSkMsTUFESSxDQUNHQSxNQUFNLENBQUNtSSxLQUFQLENBQWEsQ0FBYixFQUFnQmxJLEtBQUssQ0FBQ2xCLE1BQXRCLENBREgsRUFFSmtCLEtBRkksQ0FFRUEsS0FGRixFQUdKd0osT0FISSxDQUdJQyw4QkFISixDQUFQO0FBSUQsT0FQNkMsQ0FTOUM7OztBQUNBLGFBQU9ILDRCQUFXYSxLQUFLLEdBQUcsUUFBSCxHQUFjckssS0FBOUIsSUFDSkMsTUFESSxDQUNHQSxNQURILEVBRUpDLEtBRkksQ0FFRW1LLEtBQUssR0FBR3BLLE1BQUgsR0FBWUMsS0FGbkIsQ0FBUDtBQUdEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UseUJBQWdCbUUsYUFBaEIsRUFBK0JtSCxXQUEvQixFQUE0QztBQUMxQztBQUNBO0FBQ0EsVUFBTUMsVUFBVSxHQUNkcEgsYUFBYSxDQUFDcUgsT0FBZCxLQUEwQmxPLGVBQTFCLEdBQ0ksdUNBQWM2RyxhQUFkLEVBQTZCN0csZUFBN0IsQ0FESixHQUVJNkcsYUFITjtBQUtBLFVBQU1zSCxNQUFNLEdBQUdGLFVBQVUsQ0FBQ0csUUFBWCxDQUFvQkosV0FBcEIsQ0FBZjtBQUVBLFVBQU1LLFNBQVMsR0FBRyxnQ0FBZ0JGLE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCLENBQUMsQ0FBQyxFQUFGLEVBQU0sRUFBTixDQUEzQixDQUFsQjtBQUNBLFVBQU1HLFNBQVMsR0FBRyxnQ0FBZ0JILE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCLENBQUMsQ0FBQyxHQUFGLEVBQU8sR0FBUCxDQUEzQixDQUFsQjs7QUFFQSxVQUFJLENBQUNFLFNBQUQsSUFBYyxDQUFDQyxTQUFuQixFQUE4QjtBQUM1QixlQUFPLElBQVA7QUFDRDs7QUFFRCxhQUFPLENBQUNBLFNBQVMsQ0FBQyxDQUFELENBQVYsRUFBZUQsU0FBUyxDQUFDLENBQUQsQ0FBeEIsRUFBNkJDLFNBQVMsQ0FBQyxDQUFELENBQXRDLEVBQTJDRCxTQUFTLENBQUMsQ0FBRCxDQUFwRCxDQUFQO0FBQ0Q7OztXQUVELDRCQUFtQkUsa0JBQW5CLEVBQXVDO0FBQ3JDLFVBQU1DLGNBQWMsR0FBRyxxQ0FBbUJELGtCQUFuQixFQUF1QyxLQUFLRSxzQkFBNUMsQ0FBdkI7QUFDQSxXQUFLQSxzQkFBTCxHQUE4QkYsa0JBQTlCO0FBRUEsYUFBT0MsY0FBUDtBQUNEOzs7V0FFRCxnQ0FDRWhNLEtBREYsRUFFRStJLElBRkYsRUFHRTdLLEtBSEYsRUFJRTtBQUNBZ08sSUFBQUEsWUFMRixFQVFFO0FBQUEsVUFGQTVMLFNBRUEsdUVBRllDLCtCQUVaO0FBQUEsVUFEQTRMLFFBQ0EsdUVBRFdsTyxvQkFDWDtBQUFBLFVBQ080QixJQURQLEdBQ2UzQixLQURmLENBQ08yQixJQURQO0FBRUEsVUFBTThCLEtBQUssR0FBR3dLLFFBQVEsQ0FBQ2pPLEtBQUQsRUFBUTZLLElBQVIsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDLG1DQUFtQnBILEtBQW5CLENBQUwsRUFBZ0M7QUFDOUIsZUFBT3JCLFNBQVA7QUFDRDs7QUFFRCxVQUFJOEwsY0FBSjs7QUFDQSxVQUFJdk0sSUFBSSxLQUFLd00saUNBQWdCQyxTQUE3QixFQUF3QztBQUN0QztBQUNBO0FBQ0FGLFFBQUFBLGNBQWMsR0FBR3BNLEtBQUssQ0FBQyxJQUFJdU0sSUFBSixDQUFTNUssS0FBVCxDQUFELENBQXRCO0FBQ0QsT0FKRCxNQUlPO0FBQ0x5SyxRQUFBQSxjQUFjLEdBQUdwTSxLQUFLLENBQUMyQixLQUFELENBQXRCO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDLG1DQUFtQnlLLGNBQW5CLENBQUwsRUFBeUM7QUFDdkNBLFFBQUFBLGNBQWMsR0FBRzlMLFNBQWpCO0FBQ0Q7O0FBRUQsYUFBTzhMLGNBQVA7QUFDRDs7O1dBRUQsb0JBQVcvTSxJQUFYLEVBQWlCO0FBQ2YsV0FBS0EsSUFBTCxtQ0FBZ0IsS0FBS0EsSUFBckIsR0FBOEJBLElBQTlCO0FBQ0Q7OztXQUVELHNDQUFvRDtBQUFBLFVBQTdCOEUsYUFBNkIsU0FBN0JBLGFBQTZCO0FBQUEsVUFBZC9FLEVBQWMsU0FBZEEsRUFBYztBQUFBLFVBQVZvTixPQUFVLFNBQVZBLE9BQVU7QUFBQSxVQUMzQzlNLE9BRDJDLEdBQ2hDLEtBQUtGLE1BRDJCLENBQzNDRSxPQUQyQztBQUdsRDtBQUNFK00sUUFBQUEsT0FBTyxFQUFFO0FBQUNDLFVBQUFBLFNBQVMsRUFBRXROLEVBQVo7QUFBZ0JvTixVQUFBQSxPQUFPLEVBQVBBLE9BQWhCO0FBQXlCOU0sVUFBQUEsT0FBTyxFQUFQQSxPQUF6QjtBQUFrQ3lFLFVBQUFBLGFBQWEsRUFBYkE7QUFBbEMsU0FEWDtBQUVFd0ksUUFBQUEsT0FBTyxFQUFFO0FBQUNELFVBQUFBLFNBQVMsRUFBRXROLEVBQVo7QUFBZ0JvTixVQUFBQSxPQUFPLEVBQVBBLE9BQWhCO0FBQXlCOU0sVUFBQUEsT0FBTyxFQUFQQTtBQUF6QjtBQUZYLFNBR0ssQ0FBQyxLQUFLRixNQUFMLENBQVlvRCxTQUFaLElBQXlCLEVBQTFCLEVBQThCbUQsTUFBOUIsQ0FDRCxVQUFDQyxJQUFELEVBQU80RyxFQUFQLEVBQVcvRCxDQUFYO0FBQUEsK0NBQ0s3QyxJQURMLDJFQUUyQjZDLENBRjNCLEdBRWlDK0QsRUFBRSxDQUFDMU8sS0FBSCxHQUFXME8sRUFBRSxDQUFDMU8sS0FBSCxDQUFTb0YsSUFBcEIsR0FBMkIsSUFGNUQ7QUFBQSxPQURDLEVBS0QsRUFMQyxDQUhMO0FBV0Q7OztXQUVELG9CQUFXWSxRQUFYLEVBQXFCMkksWUFBckIsRUFBbUM7QUFDakMsVUFBSSxDQUFDLEtBQUtyTixNQUFMLENBQVkyQixNQUFqQixFQUF5QjtBQUN2QixlQUFPLEVBQVA7QUFDRDs7QUFDRCxVQUFNMkwsWUFBWSxHQUFHNUksUUFBUSxDQUFDLEtBQUsxRSxNQUFMLENBQVkyQixNQUFiLENBQTdCO0FBSmlDLFVBSzFCa0QsYUFMMEIsR0FLVHlJLFlBTFMsQ0FLMUJ6SSxhQUwwQjtBQU9qQyxXQUFLMEkseUJBQUwsQ0FBK0JELFlBQS9CO0FBRUEsVUFBTXRCLFdBQVcsR0FBRyxLQUFLd0IsbUJBQUwsQ0FBeUIzSSxhQUF6QixDQUFwQjtBQUNBLFVBQU0wSCxrQkFBa0IsR0FBRyxLQUFLa0IscUJBQUwsQ0FBMkJILFlBQTNCLENBQTNCO0FBQ0EsVUFBTWQsY0FBYyxHQUFHLEtBQUtrQixrQkFBTCxDQUF3Qm5CLGtCQUF4QixDQUF2Qjs7QUFFQSxVQUFJQyxjQUFjLENBQUNXLE9BQW5CLEVBQTRCO0FBQzFCLGFBQUtRLGVBQUwsQ0FBcUI5SSxhQUFyQixFQUFvQ21ILFdBQXBDO0FBQ0Q7O0FBRUQsVUFBSXpDLElBQUksR0FBRyxFQUFYOztBQUVBLFVBQUksQ0FBQ2lELGNBQWMsQ0FBQ1MsT0FBaEIsSUFBMkJJLFlBQTNCLElBQTJDQSxZQUFZLENBQUM5RCxJQUE1RCxFQUFrRTtBQUNoRTtBQUNBQSxRQUFBQSxJQUFJLEdBQUc4RCxZQUFZLENBQUM5RCxJQUFwQjtBQUNELE9BSEQsTUFHTztBQUNMQSxRQUFBQSxJQUFJLEdBQUcsS0FBS3FFLHNCQUFMLENBQTRCTixZQUE1QixFQUEwQ3RCLFdBQTFDLENBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQUN6QyxRQUFBQSxJQUFJLEVBQUpBLElBQUQ7QUFBT2lELFFBQUFBLGNBQWMsRUFBZEE7QUFBUCxPQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsbUNBQTBCcUIsT0FBMUIsRUFBbUM7QUFBQTs7QUFBQTtBQUFBLFlBQ3JCblAsS0FEcUIsc0JBQ3JCQSxLQURxQjtBQUUvQixZQUFNb1AsUUFBUSxHQUFHLE1BQUksQ0FBQzlOLE1BQUwsQ0FBWXRCLEtBQVosQ0FBakI7O0FBQ0EsWUFBSSxDQUFDb1AsUUFBTCxFQUFlO0FBQ2I7QUFBQTtBQUFBO0FBQ0Q7O0FBQ0QsWUFBTUMsZUFBZSxHQUFHRixPQUFPLENBQUNHLE1BQVIsQ0FBZTVGLElBQWYsQ0FBb0IsVUFBQTZGLEVBQUU7QUFBQSxpQkFBSUEsRUFBRSxDQUFDbkssSUFBSCxLQUFZZ0ssUUFBUSxDQUFDaEssSUFBekI7QUFBQSxTQUF0QixLQUF3RCxJQUFoRjs7QUFDQSxRQUFBLE1BQUksQ0FBQzJCLGlCQUFMLHNDQUF5Qi9HLEtBQXpCLEVBQWlDcVAsZUFBakM7QUFQK0I7O0FBQ2pDLHdDQUFzQjdPLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUt3RSxjQUFuQixDQUF0QixvQ0FBMEQ7QUFBQTs7QUFBQTtBQU96RDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLDJCQUFrQmUsUUFBbEIsRUFBNEJ3SixTQUE1QixFQUF1QztBQUFBOztBQUNyQyxVQUFNQyxLQUFLLEdBQUcsS0FBS0MsVUFBTCxDQUFnQjFKLFFBQWhCLENBQWQ7O0FBQ0EsVUFBSSxDQUFDeUosS0FBTCxFQUFZO0FBQ1YsZUFBTyxJQUFQO0FBQ0Q7O0FBQ0RqUCxNQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLd0UsY0FBbkIsRUFBbUN3QixPQUFuQyxDQUEyQyxVQUFBUSxPQUFPLEVBQUk7QUFBQSxZQUM3Q25GLEtBRDZDLEdBQ3BDbUYsT0FEb0MsQ0FDN0NuRixLQUQ2QztBQUVwRCxZQUFNNk4sU0FBUyxHQUFHLE1BQUksQ0FBQ3JPLE1BQUwsQ0FBWVEsS0FBWixDQUFsQixDQUZvRCxDQUdwRDtBQUNBOztBQUNBLFlBQUksQ0FBQzBOLFNBQUQsSUFBY0csU0FBUyxLQUFLekwsNkJBQVltSixPQUE1QyxFQUFxRDtBQUFBLGNBQzVDdEwsTUFENEMsR0FDbENrRixPQURrQyxDQUM1Q2xGLE1BRDRDOztBQUVuRCxjQUFNNk4sYUFBYSxHQUFHLE1BQUksQ0FBQ0Msb0JBQUwsQ0FBMEJKLEtBQTFCLEVBQWlDeEksT0FBakMsQ0FBdEI7O0FBQ0EsVUFBQSxNQUFJLENBQUNGLGlCQUFMLHNDQUF5QmhGLE1BQXpCLEVBQWtDNk4sYUFBbEM7QUFDRDtBQUNGLE9BVkQ7QUFZQSxhQUFPLElBQVA7QUFDRDs7O1dBRUQsb0JBQVc1SixRQUFYLEVBQXFCO0FBQ25CLGFBQU8sS0FBSzFFLE1BQUwsQ0FBWTJCLE1BQVosR0FBcUIrQyxRQUFRLENBQUMsS0FBSzFFLE1BQUwsQ0FBWTJCLE1BQWIsQ0FBN0IsR0FBb0QsSUFBM0Q7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7O1dBQ0UsK0JBQXNCZ0UsT0FBdEIsRUFBK0I7QUFDN0IsV0FBSzZJLGlCQUFMLENBQXVCN0ksT0FBdkI7QUFDQSxXQUFLOEksYUFBTCxDQUFtQjlJLE9BQW5CO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7Ozs7V0FDRSwyQkFBa0JBLE9BQWxCLEVBQTJCO0FBQ3pCLFVBQU0rSSxhQUFhLEdBQUcsS0FBSy9LLGNBQUwsQ0FBb0JnQyxPQUFwQixDQUF0QjtBQUR5QixVQUVsQmpILEtBRmtCLEdBRThCZ1EsYUFGOUIsQ0FFbEJoUSxLQUZrQjtBQUFBLFVBRVhrQyxnQkFGVyxHQUU4QjhOLGFBRjlCLENBRVg5TixnQkFGVztBQUFBLFVBRU8rTixtQkFGUCxHQUU4QkQsYUFGOUIsQ0FFT0MsbUJBRlA7O0FBSXpCLFVBQUksS0FBSzNPLE1BQUwsQ0FBWXRCLEtBQVosQ0FBSixFQUF3QjtBQUN0QjtBQUNBLFlBQU1rUSwwQkFBMEIsR0FDOUJELG1CQUFtQixJQUFJRSxnREFBK0JqTyxnQkFBL0IsQ0FEekI7O0FBR0EsWUFBSSxDQUFDZ08sMEJBQTBCLENBQUMvSSxRQUEzQixDQUFvQyxLQUFLN0YsTUFBTCxDQUFZdEIsS0FBWixFQUFtQjJCLElBQXZELENBQUwsRUFBbUU7QUFDakU7QUFDQTtBQUNBLGVBQUtvRixpQkFBTCxzQ0FBeUIvRyxLQUF6QixFQUFpQyxJQUFqQztBQUNEO0FBQ0Y7QUFDRjtBQUVEO0FBQ0Y7QUFDQTs7OztXQUNFLHVCQUFjaUgsT0FBZCxFQUF1QjtBQUNyQixVQUFNK0ksYUFBYSxHQUFHLEtBQUsvSyxjQUFMLENBQW9CZ0MsT0FBcEIsQ0FBdEI7QUFEcUIsVUFFZG5GLEtBRmMsR0FFTGtPLGFBRkssQ0FFZGxPLEtBRmM7O0FBR3JCLFVBQUksQ0FBQ0EsS0FBTCxFQUFZO0FBQ1Y7QUFDQTtBQUNEOztBQUNELFVBQU1zTyxZQUFZLEdBQUcsS0FBS0MsZUFBTCxDQUFxQnBKLE9BQXJCLENBQXJCLENBUHFCLENBUXJCO0FBQ0E7O0FBQ0EsVUFBSSxDQUFDbUosWUFBWSxDQUFDakosUUFBYixDQUFzQixLQUFLN0YsTUFBTCxDQUFZUSxLQUFaLENBQXRCLENBQUwsRUFBZ0Q7QUFDOUMsYUFBS2lGLGlCQUFMLHNDQUF5QmpGLEtBQXpCLEVBQWlDc08sWUFBWSxDQUFDLENBQUQsQ0FBN0M7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHlCQUFnQm5KLE9BQWhCLEVBQXlCO0FBQ3ZCLFVBQU0rSSxhQUFhLEdBQUcsS0FBSy9LLGNBQUwsQ0FBb0JnQyxPQUFwQixDQUF0QjtBQUR1QixVQUVoQmpILEtBRmdCLEdBRWtCZ1EsYUFGbEIsQ0FFaEJoUSxLQUZnQjtBQUFBLFVBRVQ4QixLQUZTLEdBRWtCa08sYUFGbEIsQ0FFVGxPLEtBRlM7QUFBQSxVQUVGSSxnQkFGRSxHQUVrQjhOLGFBRmxCLENBRUY5TixnQkFGRTtBQUl2QixhQUFPLEtBQUtaLE1BQUwsQ0FBWXRCLEtBQVosSUFDSHNRLDRCQUFXLEtBQUtoUCxNQUFMLENBQVl0QixLQUFaLEVBQW1CMkIsSUFBOUIsRUFBb0NHLEtBQXBDLENBQTBDSSxnQkFBMUMsQ0FERyxHQUVILENBQUMsS0FBS1gscUJBQUwsR0FBNkJPLEtBQTdCLENBQUQsQ0FGSjtBQUdEOzs7V0FFRCxrQ0FBeUJxTixPQUF6QixFQUFrQ2xJLE9BQWxDLEVBQTJDO0FBQ3pDLFVBQU0rSSxhQUFhLEdBQUcsS0FBSy9LLGNBQUwsQ0FBb0JnQyxPQUFwQixDQUF0QjtBQUNBLFdBQUtDLHFCQUFMLENBQTJCRCxPQUEzQixFQUZ5QyxDQUd6Qzs7QUFDQSxVQUFNMkksYUFBYSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCVixPQUExQixFQUFtQ2EsYUFBbkMsQ0FBdEI7QUFDQSxXQUFLakosaUJBQUwsc0NBQXlCaUosYUFBYSxDQUFDak8sTUFBdkMsRUFBZ0Q2TixhQUFoRDtBQUNEOzs7V0FFRCwwQ0FBaUM7QUFBQTs7QUFDL0IsVUFBTVcsY0FBYyxHQUFHLEVBQXZCO0FBQ0EvUCxNQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLd0UsY0FBbkIsRUFBbUN3QixPQUFuQyxDQUEyQyxVQUFBdUosYUFBYSxFQUFJO0FBQUE7O0FBQzFEO0FBRDBELFlBRW5ENUQsUUFGbUQsR0FFVzRELGFBRlgsQ0FFbkQ1RCxRQUZtRDtBQUFBLFlBRXpDcE0sS0FGeUMsR0FFV2dRLGFBRlgsQ0FFekNoUSxLQUZ5QztBQUFBLFlBRWxDOEIsS0FGa0MsR0FFV2tPLGFBRlgsQ0FFbENsTyxLQUZrQztBQUFBLFlBRTNCQyxNQUYyQixHQUVXaU8sYUFGWCxDQUUzQmpPLE1BRjJCO0FBQUEsWUFFbkJDLEtBRm1CLEdBRVdnTyxhQUZYLENBRW5CaE8sS0FGbUI7QUFBQSxZQUVaTSxZQUZZLEdBRVcwTixhQUZYLENBRVoxTixZQUZZO0FBQUEsWUFFRTZKLEtBRkYsR0FFVzZELGFBRlgsQ0FFRTdELEtBRkY7QUFJMURvRSxRQUFBQSxjQUFjLENBQUNuRSxRQUFELENBQWQsMEZBQ0dwTSxLQURILEVBQ1csTUFBSSxDQUFDc0IsTUFBTCxDQUFZdEIsS0FBWixDQURYLHFEQUVHOEIsS0FGSCxFQUVXLE1BQUksQ0FBQ1IsTUFBTCxDQUFZUSxLQUFaLENBRlgscURBR0dDLE1BSEgsRUFHWSxNQUFJLENBQUNULE1BQUwsQ0FBWVMsTUFBWixDQUhaLHFEQUlHQyxLQUpILEVBSVcsTUFBSSxDQUFDVixNQUFMLENBQVltRCxTQUFaLENBQXNCekMsS0FBdEIsQ0FKWCxxRUFLZ0IsT0FBT00sWUFBUCxLQUF3QixVQUF4QixHQUFxQ0EsWUFBWSxDQUFDLE1BQUksQ0FBQ2hCLE1BQU4sQ0FBakQsR0FBaUVnQixZQUxqRixxQkFNTTZKLEtBQUssd0NBQUtBLEtBQUwsRUFBYSxNQUFJLENBQUM3SyxNQUFMLENBQVltRCxTQUFaLENBQXNCMEgsS0FBdEIsQ0FBYixJQUE2QyxFQU54RDtBQVFELE9BWkQ7QUFhQSxhQUFPb0UsY0FBUDtBQUNEOzs7V0FFRCw4QkFBcUJwQixPQUFyQixFQUE4QmEsYUFBOUIsRUFBNkM7QUFBQSxVQUNwQ2xPLEtBRG9DLEdBQzNCa08sYUFEMkIsQ0FDcENsTyxLQURvQztBQUUzQyxVQUFNOUIsS0FBSyxHQUFHLEtBQUtzQixNQUFMLENBQVkwTyxhQUFhLENBQUNoUSxLQUExQixDQUFkOztBQUNBLFVBQUksQ0FBQ0EsS0FBRCxJQUFVLENBQUM4QixLQUFmLEVBQXNCO0FBQ3BCO0FBQ0EsZUFBT3ZDLGFBQVA7QUFDRDs7QUFFRCxVQUFNb1EsU0FBUyxHQUFHLEtBQUtyTyxNQUFMLENBQVlRLEtBQVosQ0FBbEI7QUFDQSxVQUFNME8sWUFBWSxHQUFHckIsT0FBTyxDQUFDRyxNQUFSLENBQWU1RixJQUFmLENBQW9CLFVBQUErRyxDQUFDO0FBQUEsZUFBSUEsQ0FBQyxDQUFDckwsSUFBRixLQUFXcEYsS0FBSyxDQUFDb0YsSUFBckI7QUFBQSxPQUFyQixDQUFyQjs7QUFDQSxVQUFJLENBQUN1SyxTQUFELElBQWMsQ0FBQ2EsWUFBbkIsRUFBaUM7QUFDL0I7QUFDQSxlQUFPalIsYUFBUDtBQUNEOztBQUVELGFBQU80UCxPQUFPLENBQUN1QixvQkFBUixDQUE2QkYsWUFBN0IsRUFBMkNiLFNBQTNDLEtBQXlEcFEsYUFBaEU7QUFDRDs7O1dBRUQsMEJBQWlCb1IsVUFBakIsRUFBNkI7QUFDM0IsYUFBTyxLQUFLQyxjQUFMLENBQW9CRCxVQUFwQixLQUFtQ0EsVUFBVSxDQUFDekssTUFBOUMsR0FBdUR5SyxVQUFVLENBQUN6SyxNQUFsRSxHQUEyRSxJQUFsRjtBQUNEOzs7V0FFRCx3QkFBZXlLLFVBQWYsRUFBMkI7QUFBQTs7QUFDekIsYUFBTyxDQUFBQSxVQUFVLFNBQVYsSUFBQUEsVUFBVSxXQUFWLFlBQUFBLFVBQVUsQ0FBRUUsTUFBWixLQUFzQixDQUFBRixVQUFVLFNBQVYsSUFBQUEsVUFBVSxXQUFWLGlDQUFBQSxVQUFVLENBQUVHLEtBQVosaUdBQW1CN1AsS0FBbkIsZ0ZBQTBCQyxFQUExQixNQUFpQyxLQUFLQSxFQUFuRTtBQUNEOzs7V0FFRCw4QkFBcUI2UCxRQUFyQixFQUErQkMsV0FBL0IsRUFBNEM7QUFDMUMsVUFBTUMsYUFBYSxHQUFHelEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3dFLGNBQW5CLEVBQW1DeUUsSUFBbkMsQ0FBd0MsVUFBQXdILEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUNyUCxRQUFILEtBQWdCLFFBQXBCO0FBQUEsT0FBMUMsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDb1AsYUFBTCxFQUFvQjtBQUNsQixlQUFPLENBQVA7QUFDRDs7QUFFRCxVQUFNalIsS0FBSyxHQUFHaVIsYUFBYSxDQUFDalIsS0FBNUI7QUFDQSxVQUFNbU0sS0FBSyxHQUFHNkUsV0FBVyxLQUFLRyxTQUFoQixHQUE0QixLQUFLN1AsTUFBTCxDQUFZbUQsU0FBWixDQUFzQnVNLFdBQWxELEdBQWdFQSxXQUE5RTtBQVIwQyxVQVNuQ0ksTUFUbUMsR0FTekIsS0FBSzlQLE1BQUwsQ0FBWW1ELFNBVGEsQ0FTbkMyTSxNQVRtQyxFQVcxQzs7QUFDQSxhQUFPakYsS0FBSyxHQUFHLENBQUgsR0FBTyxDQUFDLEtBQUs3SyxNQUFMLENBQVl0QixLQUFaLElBQXFCLENBQXJCLEdBQXlCb1IsTUFBMUIsSUFBb0MsS0FBS0MsYUFBTCxDQUFtQk4sUUFBbkIsQ0FBdkQ7QUFDRDs7O1dBRUQsd0JBQWVDLFdBQWYsRUFBNEI7QUFDMUIsVUFBTUMsYUFBYSxHQUFHelEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3dFLGNBQW5CLEVBQW1DeUUsSUFBbkMsQ0FBd0MsVUFBQXdILEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUNyUCxRQUFILEtBQWdCLFFBQXBCO0FBQUEsT0FBMUMsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDb1AsYUFBTCxFQUFvQjtBQUNsQixlQUFPLENBQVA7QUFDRDs7QUFFRCxVQUFNalIsS0FBSyxHQUFHaVIsYUFBYSxDQUFDalIsS0FBNUI7QUFDQSxVQUFNbU0sS0FBSyxHQUFHNkUsV0FBVyxLQUFLRyxTQUFoQixHQUE0QixLQUFLN1AsTUFBTCxDQUFZbUQsU0FBWixDQUFzQnVNLFdBQWxELEdBQWdFQSxXQUE5RTtBQVIwQixVQVNuQkksTUFUbUIsR0FTVCxLQUFLOVAsTUFBTCxDQUFZbUQsU0FUSCxDQVNuQjJNLE1BVG1CO0FBVzFCLGFBQU9qRixLQUFLLEdBQUcsQ0FBSCxHQUFRLEtBQUs3SyxNQUFMLENBQVl0QixLQUFaLElBQXFCLENBQXJCLEdBQXlCb1IsTUFBN0M7QUFDRDs7O1dBRUQsNEJBQW1CO0FBQUEsMEJBQzJCLEtBQUs5UCxNQURoQztBQUFBLFVBQ1ZrRCxXQURVLGlCQUNWQSxXQURVO0FBQUEsVUFDR0QsU0FESCxpQkFDR0EsU0FESDtBQUFBLFVBQ2NFLFNBRGQsaUJBQ2NBLFNBRGQ7QUFBQSxVQUVWNk0sV0FGVSxHQUVhN00sU0FGYixDQUVWNk0sV0FGVTtBQUFBLFVBRUdGLE1BRkgsR0FFYTNNLFNBRmIsQ0FFRzJNLE1BRkg7QUFHakIsVUFBTXBSLEtBQUssR0FBR3dFLFdBQVcsSUFBSUQsU0FBN0I7QUFDQSxhQUFPc0IsSUFBSSxDQUFDMEwsSUFBTCxDQUFXdlIsS0FBSyxJQUFJc1IsV0FBVCxHQUF1QkEsV0FBVyxDQUFDLENBQUQsQ0FBbEMsR0FBd0NGLE1BQW5ELENBQVA7QUFDRDs7O1dBRUQsdUJBQWNKLFdBQWQsRUFBMkI7QUFDekIsVUFBTUMsYUFBYSxHQUFHelEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS3dFLGNBQW5CLEVBQW1DeUUsSUFBbkMsQ0FBd0MsVUFBQXdILEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUNyUCxRQUFILEtBQWdCLFFBQXBCO0FBQUEsT0FBMUMsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDb1AsYUFBTCxFQUFvQjtBQUNsQixlQUFPLFFBQVA7QUFDRDs7QUFFRCxVQUFNOUUsS0FBSyxHQUFHNkUsV0FBVyxLQUFLRyxTQUFoQixHQUE0QixLQUFLN1AsTUFBTCxDQUFZbUQsU0FBWixDQUFzQnVNLFdBQWxELEdBQWdFQSxXQUE5RTtBQUVBLGFBQU83RSxLQUFLLEdBQUcsUUFBSCxHQUFjLFFBQTFCO0FBQ0Q7OztXQUVELGtDQUF5QmxMLEtBQXpCLEVBQWdDO0FBQUE7O0FBQzlCLGFBQU9BLEtBQUssQ0FBQ29JLElBQU4sQ0FBVyxVQUFBN0IsQ0FBQztBQUFBLGVBQUksQ0FBQyxNQUFJLENBQUNnSywyQkFBTCxDQUFpQ3JLLFFBQWpDLENBQTBDSyxDQUExQyxDQUFMO0FBQUEsT0FBWixDQUFQO0FBQ0Q7OztXQUVELG1DQUEwQmlLLGlCQUExQixFQUE2Q0MsY0FBN0MsRUFBNkQ7QUFBQSxVQUNwREMsS0FEb0QsR0FDM0NGLGlCQUQyQyxDQUNwREUsS0FEb0Q7QUFHM0QsYUFBTztBQUNMO0FBQ0FDLFFBQUFBLGFBQWEsRUFBRSxDQUFDRCxLQUFLLENBQUMzTSxPQUZqQjtBQUdMNk0sUUFBQUEsY0FBYyxFQUFFRixLQUFLLENBQUNyUSxNQUFOLENBQWFpQixJQUFiLEdBQW9CLElBSC9CO0FBSUxtUCxRQUFBQSxjQUFjLEVBQUVBLGNBQWMsSUFBSSxRQUo3QjtBQUtMSSxRQUFBQSxlQUFlLEVBQUVILEtBQUssQ0FBQzNNO0FBTGxCLE9BQVA7QUFPRDs7O1dBRUQsMENBQTJFO0FBQUE7O0FBQUEsVUFBakQrTSxHQUFpRCxVQUFqREEsR0FBaUQ7QUFBQSxVQUE1Q0MsU0FBNEMsVUFBNUNBLFNBQTRDO0FBQUEsVUFBakNqQixRQUFpQyxVQUFqQ0EsUUFBaUM7QUFBQSxVQUF2QmtCLE9BQXVCLFVBQXZCQSxPQUF1QjtBQUFBLFVBQWRDLFdBQWMsVUFBZEEsV0FBYztBQUN6RSxVQUFNQyxrQkFBa0IsR0FBRyx1Q0FBc0JELFdBQXRCLENBQTNCO0FBQ0EsNkNBQ0tDLGtCQURMO0FBRUVqUixRQUFBQSxFQUFFLEVBQUUsS0FBS0EsRUFGWDtBQUdFNlEsUUFBQUEsR0FBRyxFQUFIQSxHQUhGO0FBSUVLLFFBQUFBLGdCQUFnQixFQUFFQyx3QkFBa0JDLE1BSnRDO0FBS0VDLFFBQUFBLFFBQVEsMkJBQUUsS0FBS3ZQLHFCQUFQLDBEQUFFLHNCQUE0QmdDLE9BTHhDO0FBTUV3TixRQUFBQSxhQUFhLEVBQUUsSUFOakI7QUFPRUMsUUFBQUEsVUFBVSxFQUFFO0FBQUNDLFVBQUFBLFNBQVMsRUFBRXZKLE9BQU8sQ0FBQzRILFFBQVEsQ0FBQzRCLFVBQVQsSUFBdUIsS0FBS3JSLE1BQUwsQ0FBWW1ELFNBQVosQ0FBc0JtTyxRQUE5QztBQUFuQixTQVBkO0FBUUU5TyxRQUFBQSxNQUFNLEVBQUUsS0FBS3hDLE1BQUwsQ0FBWXdDLE1BUnRCO0FBU0VaLFFBQUFBLGdCQUFnQixFQUFFO0FBQ2hCQyxVQUFBQSxHQUFHLEVBQUUsS0FBSzdCLE1BQUwsQ0FBWTRCLGdCQUFaLENBQTZCQyxHQURsQjtBQUVoQkUsVUFBQUEsR0FBRyxFQUFFLEtBQUsvQixNQUFMLENBQVk0QixnQkFBWixDQUE2Qkc7QUFGbEIsU0FUcEI7QUFhRTtBQUNBd1AsUUFBQUEsT0FBTyxFQUFFLEtBQUt2UixNQUFMLENBQVltRCxTQUFaLENBQXNCb08sT0FkakM7QUFlRWpQLFFBQUFBLGNBQWMsRUFBRSxLQUFLdEMsTUFBTCxDQUFZc0MsY0FmOUI7QUFnQkU7QUFDQWtQLFFBQUFBLFVBQVUsR0FBR3RULG1CQUFILDZDQUEyQjJTLGtCQUFrQixDQUFDVyxVQUE5QyxFQWpCWjtBQWtCRUMsUUFBQUEsV0FBVyxFQUFFZixTQUFTLEdBQUdBLFNBQVMsQ0FBQ2UsV0FBYixHQUEyQjVCLFNBbEJuRDtBQW1CRTtBQUNBYyxRQUFBQSxPQUFPLEVBQUUsS0FBSzNRLE1BQUwsQ0FBWW9DLFNBQVosSUFBeUJ1TztBQXBCcEM7QUFzQkQ7OztXQUVELHFDQUE0QjtBQUMxQixhQUFPO0FBQ0wvUSxRQUFBQSxFQUFFLFlBQUssS0FBS0EsRUFBVixhQURHO0FBRUxxUixRQUFBQSxRQUFRLEVBQUUsS0FGTDtBQUdMQyxRQUFBQSxhQUFhLEVBQUUsSUFIVjtBQUlMSixRQUFBQSxnQkFBZ0IsRUFBRUMsd0JBQWtCQztBQUovQixPQUFQO0FBTUQ7OztXQUVELHNDQUFpRlUsVUFBakYsRUFBNkY7QUFBQTs7QUFBQSxVQUF2RTFGLFdBQXVFLFVBQXZFQSxXQUF1RTtBQUFBLFVBQTFEMkYsY0FBMEQsVUFBMURBLGNBQTBEO0FBQUEsVUFBMUMxQyxjQUEwQyxVQUExQ0EsY0FBMEM7QUFBQSxVQUExQjJDLFdBQTBCLFVBQTFCQSxXQUEwQjtBQUFBLFVBQ3BGckksSUFEb0YsR0FDbEVtSSxVQURrRSxDQUNwRm5JLElBRG9GO0FBQUEsVUFDOUVrRyxRQUQ4RSxHQUNsRWlDLFVBRGtFLENBQzlFakMsUUFEOEU7QUFBQSxVQUVwRnJNLFNBRm9GLEdBRXZFLEtBQUtwRCxNQUZrRSxDQUVwRm9ELFNBRm9GO0FBSTNGLGFBQU9tRyxJQUFJLENBQUNzSSxVQUFMLENBQWdCdEwsTUFBaEIsQ0FBdUIsVUFBQ0MsSUFBRCxFQUFPaEksQ0FBUCxFQUFVNkssQ0FBVixFQUFnQjtBQUM1QyxZQUFJN0ssQ0FBQyxDQUFDc1QsT0FBTixFQUFlO0FBQUE7O0FBQ2J0TCxVQUFBQSxJQUFJLENBQUNuQixJQUFMLENBQ0UsSUFBSTBNLGlCQUFKLGlDQUNLSCxXQURMO0FBRUVoUyxZQUFBQSxFQUFFLFlBQUssTUFBSSxDQUFDQSxFQUFWLDBDQUFzQndELFNBQVMsQ0FBQ2lHLENBQUQsQ0FBVCxDQUFhM0ssS0FBbkMsdURBQXNCLG1CQUFvQm9GLElBQTFDLENBRko7QUFHRXlGLFlBQUFBLElBQUksRUFBRUEsSUFBSSxDQUFDQSxJQUhiO0FBSUV1SSxZQUFBQSxPQUFPLEVBQUV0VCxDQUFDLENBQUNzVCxPQUpiO0FBS0U5RixZQUFBQSxXQUFXLEVBQVhBLFdBTEY7QUFNRWdHLFlBQUFBLFlBQVksRUFBRXhULENBQUMsQ0FBQ3dULFlBTmxCO0FBT0VMLFlBQUFBLGNBQWMsRUFBRUEsY0FBYyxDQUFDdk8sU0FBUyxDQUFDaUcsQ0FBRCxDQUFWLENBUGhDO0FBUUU0SSxZQUFBQSxPQUFPLEVBQUUsQ0FSWDtBQVNFbFAsWUFBQUEsU0FBUyxFQUFFSyxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYXBJLElBVDFCO0FBVUVpUixZQUFBQSxhQUFhLEVBQUU5TyxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYThJLE1BVjlCO0FBV0VDLFlBQUFBLG9CQUFvQixFQUFFaFAsU0FBUyxDQUFDaUcsQ0FBRCxDQUFULENBQWFnSixTQVhyQztBQVlFQyxZQUFBQSxRQUFRLEVBQUVsUCxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYS9JLEtBWnpCO0FBYUU2USxZQUFBQSxVQUFVLEVBQUU7QUFDVjtBQUNBQyxjQUFBQSxTQUFTLEVBQUU7QUFGRCxhQWJkO0FBa0JFbUIsWUFBQUEsY0FBYyxFQUFFaEosSUFBSSxDQUFDZ0osY0FsQnZCO0FBbUJFdEQsWUFBQUEsY0FBYyxrQ0FDVEEsY0FEUztBQUVaNkMsY0FBQUEsT0FBTyx5QkFBRTFPLFNBQVMsQ0FBQ2lHLENBQUQsQ0FBVCxDQUFhM0ssS0FBZix3REFBRSxvQkFBb0JvRixJQUZqQjtBQUdaNk4sY0FBQUEsY0FBYyxrQ0FDVDFDLGNBQWMsQ0FBQ3VELFNBRE47QUFFWi9DLGdCQUFBQSxRQUFRLEVBQVJBLFFBRlk7QUFHWjBDLGdCQUFBQSxNQUFNLEVBQUUvTyxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYThJLE1BSFQ7QUFJWkUsZ0JBQUFBLFNBQVMsRUFBRWpQLFNBQVMsQ0FBQ2lHLENBQUQsQ0FBVCxDQUFhZ0o7QUFKWixnQkFIRjtBQVNaSCxjQUFBQSxhQUFhLEVBQUU5TyxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYThJLE1BVGhCO0FBVVpDLGNBQUFBLG9CQUFvQixFQUFFaFAsU0FBUyxDQUFDaUcsQ0FBRCxDQUFULENBQWFnSixTQVZ2QjtBQVdaQyxjQUFBQSxRQUFRLEVBQUVsUCxTQUFTLENBQUNpRyxDQUFELENBQVQsQ0FBYS9JO0FBWFg7QUFuQmhCLGFBREY7QUFtQ0Q7O0FBQ0QsZUFBT2tHLElBQVA7QUFDRCxPQXZDTSxFQXVDSixFQXZDSSxDQUFQO0FBd0NEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxxQ0FBNEJpTSxtQkFBNUIsRUFBaURDLGVBQWpELEVBQWtFO0FBQ2hFLFVBQU1DLFdBQVcsR0FBRyxLQUFLQyxnQkFBTCxFQUFwQjtBQUVBLGFBQU8sVUFBQXBVLENBQUMsRUFBSTtBQUNWLFlBQU1xVSxTQUFTLEdBQ1osT0FBT0gsZUFBUCxLQUEyQixVQUE1QixHQUEwQ0EsZUFBZSxDQUFDbFUsQ0FBRCxDQUF6RCxHQUErRGtVLGVBRGpFO0FBRUEsWUFBTUksR0FBRyxHQUFHLENBQUFMLG1CQUFtQixTQUFuQixJQUFBQSxtQkFBbUIsV0FBbkIsWUFBQUEsbUJBQW1CLENBQUdJLFNBQUgsQ0FBbkIsTUFBcUMsSUFBckMsR0FBNENBLFNBQTVDLEdBQXdEOVUsYUFBcEU7QUFDQSxlQUFPO0FBQ0w2QixVQUFBQSxFQUFFLFlBQUtrVCxHQUFMLGVBQWFILFdBQWIsQ0FERztBQUVMRyxVQUFBQSxHQUFHLEVBQUhBLEdBRks7QUFHTEMsVUFBQUEsS0FBSyxFQUFFSixXQUhGO0FBSUxLLFVBQUFBLE1BQU0sRUFBRUwsV0FKSDtBQUtMTSxVQUFBQSxJQUFJLEVBQUU7QUFMRCxTQUFQO0FBT0QsT0FYRDtBQVlEOzs7V0FFRCxnQ0FBdUJDLFdBQXZCLEVBQW9DbEgsV0FBcEMsRUFBaUQ7QUFDL0M7QUFDQSxhQUFPLEVBQVA7QUFDRDs7O1dBRUQseUJBQWdCbkgsYUFBaEIsRUFBK0JtSCxXQUEvQixFQUE0QyxDQUMxQztBQUNEOzs7V0FFRCw2QkFBb0JuSCxhQUFwQixFQUFtQztBQUNqQztBQUNBLGFBQU87QUFBQSxlQUFNLElBQU47QUFBQSxPQUFQO0FBQ0Q7OztXQXpvQ0QsK0JBQTZCZ0osT0FBN0IsRUFBc0NzRixXQUF0QyxFQUFtRDtBQUNqRCxhQUFPO0FBQUN4VCxRQUFBQSxLQUFLLEVBQUUsRUFBUjtBQUFZd1QsUUFBQUEsV0FBVyxFQUFYQTtBQUFaLE9BQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxnQ0FBOEJDLGFBQTlCLEVBQTZDQyxTQUE3QyxFQUF3RDtBQUN0RDtBQUNBLFVBQU1DLGVBQWUsR0FBR3BVLE1BQU0sQ0FBQ3dHLElBQVAsQ0FBWTBOLGFBQVosRUFBMkI3TSxNQUEzQixDQUFrQyxVQUFDZ04sSUFBRCxFQUFPNVMsR0FBUCxFQUFlO0FBQ3ZFLFlBQU02UyxjQUFjLEdBQUdILFNBQVMsQ0FBQ25MLE1BQVYsQ0FDckIsVUFBQWlILENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDckwsSUFBRixLQUFXc1AsYUFBYSxDQUFDelMsR0FBRCxDQUF4QixJQUFpQ3lTLGFBQWEsQ0FBQ3pTLEdBQUQsQ0FBYixDQUFtQmtGLFFBQW5CLENBQTRCc0osQ0FBQyxDQUFDckwsSUFBOUIsQ0FBckM7QUFBQSxTQURvQixDQUF2QjtBQUlBeVAsUUFBQUEsSUFBSSxDQUFDNVMsR0FBRCxDQUFKLEdBQVk2UyxjQUFjLENBQUNoVSxNQUFmLEdBQ1JnVSxjQUFjLENBQUNuVSxHQUFmLENBQW1CLFVBQUE4UCxDQUFDO0FBQUEsaUJBQUs7QUFDdkJoTixZQUFBQSxLQUFLLEVBQUVnTixDQUFDLENBQUNyTCxJQURjO0FBRXZCRyxZQUFBQSxRQUFRLEVBQUVrTCxDQUFDLENBQUNsTDtBQUZXLFdBQUw7QUFBQSxTQUFwQixDQURRLEdBS1IsSUFMSjtBQU1BLGVBQU9zUCxJQUFQO0FBQ0QsT0FadUIsRUFZckIsRUFacUIsQ0FBeEI7O0FBY0EsVUFBSSxDQUFDclUsTUFBTSxDQUFDQyxNQUFQLENBQWNtVSxlQUFkLEVBQStCck4sS0FBL0IsQ0FBcUM0QixPQUFyQyxDQUFMLEVBQW9EO0FBQ2xEO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsYUFBTyxLQUFLNEwseUJBQUwsQ0FBK0JILGVBQS9CLENBQVA7QUFDRDs7O1dBRUQsbUNBQWlDQSxlQUFqQyxFQUFrRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxVQUFNSSxPQUFPLEdBQUd4VSxNQUFNLENBQUN3RyxJQUFQLENBQVk0TixlQUFaLENBQWhCO0FBQ0EsVUFBTUssUUFBUSxHQUFHRCxPQUFPLENBQUNyVSxHQUFSLENBQVksVUFBQ3lLLENBQUQsRUFBSVQsQ0FBSjtBQUFBLGVBQVlBLENBQUMsS0FBS3FLLE9BQU8sQ0FBQ2xVLE1BQVIsR0FBaUIsQ0FBdkIsR0FBMkIsQ0FBQyxDQUE1QixHQUFnQyxDQUE1QztBQUFBLE9BQVosQ0FBakI7QUFDQSxVQUFNb1UsV0FBVyxHQUFHRixPQUFPLENBQUNyVSxHQUFSLENBQVksVUFBQXlLLENBQUM7QUFBQSxlQUFJd0osZUFBZSxDQUFDeEosQ0FBRCxDQUFmLENBQW1CdEssTUFBdkI7QUFBQSxPQUFiLENBQXBCO0FBQ0EsVUFBTXFVLEtBQUssR0FBRyxFQUFkO0FBRUE7O0FBQ0EsYUFBT0MsaUJBQWlCLENBQUNILFFBQUQsRUFBV0MsV0FBWCxFQUF3QkQsUUFBUSxDQUFDblUsTUFBVCxHQUFrQixDQUExQyxDQUF4QixFQUFzRTtBQUNwRSxZQUFNdVUsT0FBTyxHQUFHSixRQUFRLENBQUNwTixNQUFULENBQWdCLFVBQUNnTixJQUFELEVBQU9TLElBQVAsRUFBYTNLLENBQWIsRUFBbUI7QUFDakRrSyxVQUFBQSxJQUFJLENBQUNHLE9BQU8sQ0FBQ3JLLENBQUQsQ0FBUixDQUFKLEdBQW1CaUssZUFBZSxDQUFDSSxPQUFPLENBQUNySyxDQUFELENBQVIsQ0FBZixDQUE0QjJLLElBQTVCLENBQW5CO0FBQ0EsaUJBQU9ULElBQVA7QUFDRCxTQUhlLEVBR2IsRUFIYSxDQUFoQjtBQUtBTSxRQUFBQSxLQUFLLENBQUN4TyxJQUFOLENBQVcwTyxPQUFYO0FBQ0Q7QUFDRDtBQUVBOzs7QUFDQSxlQUFTRCxpQkFBVCxDQUEyQkcsR0FBM0IsRUFBZ0NDLE1BQWhDLEVBQXdDM1UsS0FBeEMsRUFBK0M7QUFDN0MsWUFBSUEsS0FBSyxLQUFLLENBQVYsSUFBZTBVLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBV0MsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZLENBQTFDLEVBQTZDO0FBQzNDO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELFlBQUlELEdBQUcsQ0FBQzFVLEtBQUQsQ0FBSCxHQUFhLENBQWIsR0FBaUIyVSxNQUFNLENBQUMzVSxLQUFELENBQTNCLEVBQW9DO0FBQ2xDMFUsVUFBQUEsR0FBRyxDQUFDMVUsS0FBRCxDQUFILEdBQWEwVSxHQUFHLENBQUMxVSxLQUFELENBQUgsR0FBYSxDQUExQjtBQUNBLGlCQUFPLElBQVA7QUFDRDs7QUFFRDBVLFFBQUFBLEdBQUcsQ0FBQzFVLEtBQUQsQ0FBSCxHQUFhLENBQWI7QUFDQSxlQUFPdVUsaUJBQWlCLENBQUNHLEdBQUQsRUFBTUMsTUFBTixFQUFjM1UsS0FBSyxHQUFHLENBQXRCLENBQXhCO0FBQ0Q7O0FBRUQsYUFBT3NVLEtBQVA7QUFDRDs7O1dBRUQsa0JBQWdCNUssQ0FBaEIsRUFBbUI7QUFDakIsYUFBTywwQkFBU0EsQ0FBVCxDQUFQO0FBQ0Q7Ozs7O2VBK2pDWXZKLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQge0RhdGFGaWx0ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcblxuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVN9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtEYXRhVml6Q29sb3JzfSBmcm9tICdjb25zdGFudHMvY3VzdG9tLWNvbG9yLXJhbmdlcyc7XG5pbXBvcnQge1xuICBMQVlFUl9WSVNfQ09ORklHUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBERUZBVUxUX0NPTE9SX1VJLFxuICBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgREVGQVVMVF9MQVlFUl9MQUJFTFxufSBmcm9tICcuL2xheWVyLWZhY3RvcnknO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBpc1BsYWluT2JqZWN0fSBmcm9tICd1dGlscy91dGlscyc7XG5cbmltcG9ydCB7Z2V0TGF0TG5nQm91bmRzLCBub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRTYW1wbGVEYXRhfSBmcm9tICd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci11dGlscyc7XG5cbmltcG9ydCB7aGV4VG9SZ2IsIGdldENvbG9yR3JvdXBCeU5hbWUsIHJldmVyc2VDb2xvclJhbmdlfSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2dldE1hc2tFeHRlbnNpb25Qcm9wc30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtzY2FsZU9yZGluYWx9IGZyb20gJ2QzLXNjYWxlJztcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vaW5kZXgnKS5MYXllcn0gTGF5ZXJDbGFzc30gKi9cblxuLyoqXG4gKiBBcHByb3guIG51bWJlciBvZiBwb2ludHMgdG8gc2FtcGxlIGluIGEgbGFyZ2UgZGF0YSBzZXRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9JRF9MRU5HVEggPSA2O1xuXG4vLyBOb3RlLCB0aGlzIGlzIGlzIFNWRyBvZiBzb2xpZCBjaXJjbGUgZW5jb2RlZCBhcyBkYXRhLXVyaVxuY29uc3QgRkFMTEJBQ0tfSUNPTiA9XG4gICdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjJhV1YzUW05NFBTSXdJREFnTVRBd0lERXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajROQ2lBZ1BHTnBjbU5zWlNCamVEMGlOVEFpSUdONVBTSTFNQ0lnY2owaU5UQWlMejROQ2p3dmMzWm5QZz09JztcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW4gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe2ZpbHRlclNpemU6IE1BWF9HUFVfRklMVEVSU30pO1xuXG5jb25zdCBkZWZhdWx0RGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiBkO1xuY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5jb25zdCBzY2FsZUlkZW50aXR5ID0gdiA9PiB2O1xuXG5leHBvcnQgY29uc3QgT1ZFUkxBWV9UWVBFID0ga2V5bWlycm9yKHtcbiAgZGVja2dsOiBudWxsLFxuICBtYXBib3hnbDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsYXllckNvbG9ycyA9IE9iamVjdC52YWx1ZXMoRGF0YVZpekNvbG9ycykubWFwKGhleFRvUmdiKTtcbmZ1bmN0aW9uKiBnZW5lcmF0ZUNvbG9yKCkge1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBsYXllckNvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBsYXllckNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgeWllbGQgbGF5ZXJDb2xvcnNbaW5kZXgrK107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9yTWFrZXIgPSBnZW5lcmF0ZUNvbG9yKCk7XG5cbi8qKiBAdHlwZSB7TGF5ZXJDbGFzc30gKi9cbmNsYXNzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBwcm9wcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gdmlzQ29uZmlnU2V0dGluZ3NcbiAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzID0ge307XG5cbiAgICAvLyBpbnRlcmFjdGl2aXR5U2V0dGluZ3NcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKCksXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFLmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcygpIHtcbiAgICByZXR1cm4gWydsYWJlbCcsICdvcGFjaXR5JywgJ3RoaWNrbmVzcycsICdpc1Zpc2libGUnLCAnaGlkZGVuJ107XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBDb2x1bW4gcGFpcnMgbWFwcyBsYXllciBjb2x1bW4gdG8gYSBzcGVjaWZpYyBmaWVsZCBwYWlycyxcbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG51bGxcbiAgICovXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDoge3BhaXI6ICdsbmcnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6ICdsYXQnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiB7cGFpcjogJ2xuZzAnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzA6IHtwYWlyOiAnbGF0MCcsIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgUmVhY3QgY29tcG9uZW50IGZvciB0byByZW5kZXIgbGF5ZXIgaW5zdHJ1Y3Rpb25zIGluIGEgbW9kYWxcbiAgICogQHJldHVybnMge29iamVjdH0gLSBhbiBvYmplY3RcbiAgICogQGV4YW1wbGVcbiAgICogIHJldHVybiB7XG4gICAqICAgIGlkOiAnaWNvbkluZm8nLFxuICAgKiAgICB0ZW1wbGF0ZTogSWNvbkluZm9Nb2RhbCxcbiAgICogICAgbW9kYWxQcm9wczoge1xuICAgKiAgICAgIHRpdGxlOiAnSG93IHRvIGRyYXcgaWNvbnMnXG4gICAqICAgfTtcbiAgICogfVxuICAgKi9cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpdml0eVNldHRpbmdzO1xuICB9XG5cbiAgc2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncyhpbnRlcmFjdGl2aXR5U2V0dGluZ3MpIHtcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSBpbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICAvKlxuICAgKiBHaXZlbiBhIGRhdGFzZXQsIGF1dG9tYXRpY2FsbHkgZmluZCBwcm9wcyB0byBjcmVhdGUgbGF5ZXIgYmFzZWQgb24gaXRcbiAgICogYW5kIHJldHVybiB0aGUgcHJvcHMgYW5kIHByZXZpb3VzIGZvdW5kIGxheWVycy5cbiAgICogQnkgZGVmYXVsdCwgbm8gbGF5ZXJzIHdpbGwgYmUgZm91bmRcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgZm91bmRMYXllcnMpIHtcbiAgICByZXR1cm4ge3Byb3BzOiBbXSwgZm91bmRMYXllcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYXJyYXkgb2YgcHJlc2V0IHJlcXVpcmVkIGNvbHVtbiBuYW1lc1xuICAgKiBmb3VuZCBmaWVsZCB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIHRvIHNldCBhcyBsYXllciBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWVsZHNcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gYWxsRmllbGRzXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXSB8IG51bGx9IGFsbCBwb3NzaWJsZSByZXF1aXJlZCBsYXllciBjb2x1bW4gcGFpcnNcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRGaWVsZHMsIGFsbEZpZWxkcykge1xuICAgIC8vIGZpbmQgYWxsIG1hdGNoZWQgZmllbGRzIGZvciBlYWNoIHJlcXVpcmVkIGNvbFxuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZHMpLnJlZHVjZSgocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGFsbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgIGYgPT4gZi5uYW1lID09PSBkZWZhdWx0RmllbGRzW2tleV0gfHwgZGVmYXVsdEZpZWxkc1trZXldLmluY2x1ZGVzKGYubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIHByZXZba2V5XSA9IHJlcXVpcmVkRmllbGRzLmxlbmd0aFxuICAgICAgICA/IHJlcXVpcmVkRmllbGRzLm1hcChmID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogZi5uYW1lLFxuICAgICAgICAgICAgZmllbGRJZHg6IGYuZmllbGRJZHhcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKHJlcXVpcmVkQ29sdW1ucykuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgIC8vIGlmIGFueSBmaWVsZCBtaXNzaW5nLCByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKSB7XG4gICAgLy8gZm9yIG11bHRpcGxlIG1hdGNoZWQgZmllbGQgZm9yIG9uZSByZXF1aXJlZCBjb2x1bW4sIHJldHVybiBtdWx0aXBsZVxuICAgIC8vIGNvbWJpbmF0aW9ucywgZS4gZy4gaWYgY29sdW1uIGEgaGFzIDIgbWF0Y2hlZCwgY29sdW1uIGIgaGFzIDMgbWF0Y2hlZFxuICAgIC8vIDYgcG9zc2libGUgY29sdW1uIHBhaXJzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICBjb25zdCBhbGxLZXlzID0gT2JqZWN0LmtleXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgICBjb25zdCBwb2ludGVycyA9IGFsbEtleXMubWFwKChrLCBpKSA9PiAoKGkgPT09IGFsbEtleXMubGVuZ3RoIC0gMSA/IC0xIDogMCkpKTtcbiAgICBjb25zdCBjb3VudFBlcktleSA9IGFsbEtleXMubWFwKGsgPT4gcmVxdWlyZWRDb2x1bW5zW2tdLmxlbmd0aCk7XG4gICAgY29uc3QgcGFpcnMgPSBbXTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgIHdoaWxlIChpbmNyZW1lbnRQb2ludGVycyhwb2ludGVycywgY291bnRQZXJLZXksIHBvaW50ZXJzLmxlbmd0aCAtIDEpKSB7XG4gICAgICBjb25zdCBuZXdQYWlyID0gcG9pbnRlcnMucmVkdWNlKChwcmV2LCBjdXVyLCBpKSA9PiB7XG4gICAgICAgIHByZXZbYWxsS2V5c1tpXV0gPSByZXF1aXJlZENvbHVtbnNbYWxsS2V5c1tpXV1bY3V1cl07XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwge30pO1xuXG4gICAgICBwYWlycy5wdXNoKG5ld1BhaXIpO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG4gICAgLy8gcmVjdXJzaXZlbHkgaW5jcmVtZW50IHBvaW50ZXJzXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgcHRzWzBdID09PSBjb3VudHNbMF0gLSAxKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gaW5jcmVtZW50XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHB0c1tpbmRleF0gKyAxIDwgY291bnRzW2luZGV4XSkge1xuICAgICAgICBwdHNbaW5kZXhdID0gcHRzW2luZGV4XSArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwdHNbaW5kZXhdID0gMDtcbiAgICAgIHJldHVybiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICBzdGF0aWMgaGV4VG9SZ2IoYykge1xuICAgIHJldHVybiBoZXhUb1JnYihjKTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFJZDogcHJvcHMuZGF0YUlkIHx8IG51bGwsXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB7XG4gICAgICAgIG1pbjogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWluIHx8IFpPT01fTEVWRUxfTElNSVRTLm1pbixcbiAgICAgICAgbWF4OiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5tYXggfHwgWk9PTV9MRVZFTF9MSU1JVFMubWF4XG4gICAgICB9LFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsIHx8IERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gICAgICBjb2xvcjogcHJvcHMuY29sb3IgfHwgY29sb3JNYWtlci5uZXh0KCkudmFsdWUsXG4gICAgICBjb2x1bW5zOiBwcm9wcy5jb2x1bW5zIHx8IG51bGwsXG4gICAgICBpc1Zpc2libGU6IHByb3BzLmlzVmlzaWJsZSB8fCBmYWxzZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBwcm9wcy5pc0NvbmZpZ0FjdGl2ZSB8fCBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBwcm9wcy5oaWdobGlnaHRDb2xvciB8fCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgIGhpZGRlbjogcHJvcHMuaGlkZGVuIHx8IGZhbHNlLFxuXG4gICAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGludG8gc2VwYXJhdGUgdmlzdWFsIENoYW5uZWwgY29uZmlnXG4gICAgICAvLyBjb2xvciBieSBmaWVsZCwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgY29sb3JGaWVsZDogbnVsbCxcbiAgICAgIGNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBjb2xvclNjYWxlOiBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcblxuICAgICAgLy8gY29sb3IgYnkgc2l6ZSwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgc2l6ZURvbWFpbjogWzAsIDFdLFxuICAgICAgc2l6ZVNjYWxlOiBTQ0FMRV9UWVBFUy5saW5lYXIsXG4gICAgICBzaXplRmllbGQ6IG51bGwsXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcblxuICAgICAgdmlzQ29uZmlnOiB7fSxcblxuICAgICAgdGV4dExhYmVsOiBbREVGQVVMVF9URVhUX0xBQkVMXSxcblxuICAgICAgY29sb3JVSToge1xuICAgICAgICBjb2xvcjogREVGQVVMVF9DT0xPUl9VSSxcbiAgICAgICAgY29sb3JSYW5nZTogREVGQVVMVF9DT0xPUl9VSVxuICAgICAgfSxcbiAgICAgIGFuaW1hdGlvbjoge2VuYWJsZWQ6IGZhbHNlfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnMge3tsYWJlbDogc3RyaW5nLCBtZWFzdXJlOiAoc3RyaW5nfHN0cmluZyl9fVxuICAgKi9cbiAgZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKGtleSkge1xuICAgIC8vIGUuZy4gbGFiZWw6IENvbG9yLCBtZWFzdXJlOiBWZWhpY2xlIFR5cGVcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLnJhbmdlXS5sYWJlbCxcbiAgICAgIG1lYXN1cmU6IHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF1cbiAgICAgICAgPyAodGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgIHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0ubmFtZSlcbiAgICAgICAgOiB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZGVmYXVsdE1lYXN1cmVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHRvIGxheWVyIGNvbHVtbiwgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICogQHBhcmFtIGtleSAtIENvbHVtbiBLZXlcbiAgICogQHBhcmFtIGZpZWxkIC0gU2VsZWN0ZWQgZmllbGRcbiAgICogQHJldHVybnMge3t9fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtbihrZXksIGZpZWxkKSB7XG4gICAgLy8gZmllbGQgdmFsdWUgY291bGQgYmUgbnVsbCBmb3Igb3B0aW9uYWwgY29sdW1uc1xuICAgIGNvbnN0IHVwZGF0ZSA9IGZpZWxkXG4gICAgICA/IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogZmllbGQuZmllbGRJZHhcbiAgICAgICAgfVxuICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiB7XG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnNba2V5XSxcbiAgICAgICAgLi4udXBkYXRlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCBwYWlyIHRvIGNvbHVtbiBjb25maWcsIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBwYWlyIC0gZmllbGQgUGFpclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtblBhaXJzKGtleSwgcGFpcikge1xuICAgIGlmICghdGhpcy5jb2x1bW5QYWlycyB8fCAhdGhpcy5jb2x1bW5QYWlycz8uW2tleV0pIHtcbiAgICAgIC8vIHNob3VsZCBub3QgZW5kIGluIHRoaXMgc3RhdGVcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cblxuICAgIGNvbnN0IHtwYWlyOiBwYXJ0bmVyS2V5LCBmaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW2tleV07XG4gICAgY29uc3Qge2ZpZWxkUGFpcktleTogcGFydG5lckZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiBwYWlyW2ZpZWxkUGFpcktleV0sXG4gICAgICBbcGFydG5lcktleV06IHBhaXJbcGFydG5lckZpZWxkUGFpcktleV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIHJhZGl1cyB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5tYXgoMTQgLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIGVsZXZhdGlvbiB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRFbGV2YXRpb25ab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3JcbiAgICAgID8gTWF0aC5wb3coMiwgTWF0aC5tYXgoOCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSlcbiAgICAgIDogMTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgZmlsdGVyZWRJbmRleCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBlbnRyeSBvZiBsYXllckRhdGEgc2hvdWxkIGhhdmUgYW4gaW5kZXggb2YgYSByb3cgaW4gdGhlIG9yaWdpbmFsIGRhdGEgY29udGFpbmVyLlxuICAgIC8vIEVhY2ggbGF5ZXIgY2FuIGltcGxlbWVudCBpdHMgb3duIGdldEhvdmVyRGF0YSBtZXRob2RcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LmluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGNoYW5nZSBsYXllciB0eXBlLCB0cnkgdG8gY29weSBvdmVyIGxheWVyIGNvbmZpZ3MgYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgKiBAcGFyYW0gY29uZmlnVG9Db3B5IC0gY29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0gdmlzQ29uZmlnU2V0dGluZ3MgLSB2aXNDb25maWcgc2V0dGluZ3Mgb2YgY29uZmlnIHRvIGNvcHlcbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoY29uZmlnVG9Db3B5LCB2aXNDb25maWdTZXR0aW5ncykge1xuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgdmlzdWFsQ2hhbm5lbCBmaWVsZFxuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgY29sb3IgcmFuZ2UsIHJldmVyc2VkOiBpcyBub3QgYSBrZXkgYnkgZGVmYXVsdFxuICAgIGNvbnN0IHNoYWxsb3dDb3B5ID0gWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXS5jb25jYXQoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZmllbGQpXG4gICAgKTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciBkb21haW4gYW5kIGFuaW1hdGlvblxuICAgIGNvbnN0IG5vdFRvQ29weSA9IFsnYW5pbWF0aW9uJ10uY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5kb21haW4pKTtcbiAgICAvLyBpZiByYW5nZSBpcyBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZ3JvdXAgY29weSBpdCwgb3RoZXJ3aXNlLCBub3QgdG8gY29weVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnVG9Db3B5LnZpc0NvbmZpZ1t2LnJhbmdlXSAmJlxuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdICYmXG4gICAgICAgIHZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwICE9PSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwXG4gICAgICApIHtcbiAgICAgICAgbm90VG9Db3B5LnB1c2godi5yYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgdmlzdWFsQ2hhbm5lbCByYW5nZVxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjb3BpZWQgPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtcbiAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgbm90VG9Db3B5XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyhjb3BpZWQpO1xuICAgIC8vIHZhbGlkYXRlIHZpc3VhbENoYW5uZWwgZmllbGQgdHlwZSBhbmQgc2NhbGUgdHlwZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBjb3B5IGNvbmZpZyBvdmVyIHRvIGFuIGVtcHR5IGxheWVyXG4gICAqIHdoZW4gcmVjZWl2ZWQgc2F2ZWQgY29uZmlnLCBvciBjb3B5IGNvbmZpZyBvdmVyIGZyb20gYSBkaWZmZXJlbnQgbGF5ZXIgdHlwZVxuICAgKiBtYWtlIHN1cmUgdG8gb25seSBjb3B5IG92ZXIgdmFsdWUgdG8gZXhpc3Rpbmcga2V5c1xuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbmZpZyAtIGV4aXN0aW5nIGNvbmZpZyB0byBiZSBvdmVycmlkZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnVG9Db3B5IC0gbmV3IENvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2hhbGxvd0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIG5vdCB0byBiZSBkZWVwIGNvcGllZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBub3RUb0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIG5vdCB0byBjb3B5XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gY29waWVkIGNvbmZpZ1xuICAgKi9cbiAgY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSwge3NoYWxsb3dDb3B5ID0gW10sIG5vdFRvQ29weSA9IFtdfSA9IHt9KSB7XG4gICAgY29uc3QgY29waWVkID0ge307XG4gICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpc1BsYWluT2JqZWN0KGN1cnJlbnRDb25maWdba2V5XSkgJiZcbiAgICAgICAgaXNQbGFpbk9iamVjdChjb25maWdUb0NvcHlba2V5XSkgJiZcbiAgICAgICAgIXNoYWxsb3dDb3B5LmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgYXNzaWduIG9iamVjdCB2YWx1ZVxuICAgICAgICBjb3BpZWRba2V5XSA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWdba2V5XSwgY29uZmlnVG9Db3B5W2tleV0sIHtcbiAgICAgICAgICBzaGFsbG93Q29weSxcbiAgICAgICAgICBub3RUb0NvcHlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb25maWdUb0NvcHlba2V5XSkgJiYgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIGNvcHlcbiAgICAgICAgY29waWVkW2tleV0gPSBjb25maWdUb0NvcHlba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGtlZXAgZXhpc3RpbmdcbiAgICAgICAgY29waWVkW2tleV0gPSBjdXJyZW50Q29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29waWVkO1xuICB9XG5cbiAgcmVnaXN0ZXJWaXNDb25maWcobGF5ZXJWaXNDb25maWdzKSB7XG4gICAgT2JqZWN0LmtleXMobGF5ZXJWaXNDb25maWdzKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dKSB7XG4gICAgICAgIC8vIGlmIGFzc2lnbmVkIG9uZSBvZiBkZWZhdWx0IExBWUVSX0NPTkZJR1NcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dO1xuICAgICAgfSBlbHNlIGlmIChbJ3R5cGUnLCAnZGVmYXVsdFZhbHVlJ10uZXZlcnkocCA9PiBsYXllclZpc0NvbmZpZ3NbaXRlbV0uaGFzT3duUHJvcGVydHkocCkpKSB7XG4gICAgICAgIC8vIGlmIHByb3ZpZGVkIGN1c3RvbWl6ZWQgdmlzQ29uZmlnLCBhbmQgaGFzIHR5cGUgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgIC8vIFRPRE86IGZ1cnRoZXIgY2hlY2sgaWYgY3VzdG9taXplZCB2aXNDb25maWcgaXMgdmFsaWRcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldExheWVyQ29sdW1ucygpIHtcbiAgICBjb25zdCBjb2x1bW5WYWxpZGF0b3JzID0gdGhpcy5jb2x1bW5WYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZExheWVyQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgPyB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgdmFsaWRhdG9yOiBjb2x1bW5WYWxpZGF0b3JzW2tleV19XG4gICAgICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbENvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xLCBvcHRpb25hbDogdHJ1ZX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgcmV0dXJuIHsuLi5yZXF1aXJlZCwgLi4ub3B0aW9uYWx9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSB7Li4udGhpcy5jb25maWcsIC4uLm5ld0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZy52aXNDb25maWcgPSB7Li4udGhpcy5jb25maWcudmlzQ29uZmlnLCAuLi5uZXdWaXNDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZykge1xuICAgIGNvbnN0IHtjb2xvclVJOiBwcmV2aW91cywgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG5ld0NvbmZpZykgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvclVJUHJvcCA9IE9iamVjdC5lbnRyaWVzKG5ld0NvbmZpZykucmVkdWNlKChhY2N1LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBpc1BsYWluT2JqZWN0KGFjY3Vba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB7Li4uYWNjdVtrZXldLCAuLi52YWx1ZX0gOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LCBwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKTtcblxuICAgIGNvbnN0IGNvbG9yVUkgPSB7XG4gICAgICAuLi5wcmV2aW91cyxcbiAgICAgIFtwcm9wXTogY29sb3JVSVByb3BcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7Y29sb3JVSX0pO1xuICAgIC8vIGlmIGNvbG9yVUlbcHJvcF0gaXMgY29sb3JSYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXSAmJiB2aXNDb25maWdbcHJvcF0uY29sb3JzO1xuXG4gICAgaWYgKGlzQ29sb3JSYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICBpZiAoIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnIHx8ICFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5jdXN0b20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCF2aXNDb25maWdbcHJvcF0pIHJldHVybjtcbiAgICBjb25zdCB7Y29sb3JzfSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0ge1xuICAgICAgLi4uY29sb3JVSVtwcm9wXS5jdXN0b21QYWxldHRlLFxuICAgICAgbmFtZTogJ0N1c3RvbSBQYWxldHRlJyxcbiAgICAgIGNvbG9yczogWy4uLmNvbG9yc11cbiAgICB9O1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAqIEF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yUmFuZ2VDb25maWcncyBzdGVwLCByZXZlcnNlZCBhbmQgdHlwZVxuICAgKiBAcGFyYW0geyp9IG5ld0NvbmZpZ1xuICAgKiBAcGFyYW0geyp9IHByb3BcbiAgICovXG4gIHVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDb25maWcuc2hvd0Ryb3Bkb3duICE9PSAnbnVtYmVyJykgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgICAgICB0eXBlOiB2aXNDb25maWdbcHJvcF0udHlwZSxcbiAgICAgICAgICAgIHN0ZXBzOiB2aXNDb25maWdbcHJvcF0uY29sb3JzLmxlbmd0aCxcbiAgICAgICAgICAgIHJldmVyc2VkOiBCb29sZWFuKHZpc0NvbmZpZ1twcm9wXS5yZXZlcnNlZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGNvbG9yUmFuZ2UgaWYgY2hhbmdlcyBpbiBVSSBpcyBtYWRlIHRvICdyZXZlcnNlZCcsICdzdGVwcycgb3Igc3RlcHNcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgJiZcbiAgICAgIFsncmV2ZXJzZWQnLCAnc3RlcHMnXS5zb21lKFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWdba2V5XSAhPT1cbiAgICAgICAgICAgIChwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKS5jb2xvclJhbmdlQ29uZmlnW2tleV1cbiAgICAgICk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3N0ZXBzLCByZXZlcnNlZH0gPSBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWc7XG4gICAgY29uc3QgY29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHN0ZXAgb3IgcmV2ZXJzZWRcbiAgICBsZXQgdXBkYXRlO1xuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnc3RlcHMnKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRDb2xvckdyb3VwQnlOYW1lKGNvbG9yUmFuZ2UpO1xuXG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgY29uc3Qgc2FtZUdyb3VwID0gQ09MT1JfUkFOR0VTLmZpbHRlcihjciA9PiBnZXRDb2xvckdyb3VwQnlOYW1lKGNyKSA9PT0gZ3JvdXApO1xuXG4gICAgICAgIHVwZGF0ZSA9IHNhbWVHcm91cC5maW5kKGNyID0+IGNyLmNvbG9ycy5sZW5ndGggPT09IHN0ZXBzKTtcblxuICAgICAgICBpZiAodXBkYXRlICYmIGNvbG9yUmFuZ2UucmV2ZXJzZWQpIHtcbiAgICAgICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZSh0cnVlLCB1cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLmNvbG9yTWFwKSB7XG4gICAgICAgICAgdXBkYXRlID0gdGhpcy51cGRhdGVDb2xvck1hcChwcm9wLCBjb2xvclJhbmdlLmNvbG9yTWFwLCB1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KCdyZXZlcnNlZCcpKSB7XG4gICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZShyZXZlcnNlZCwgdXBkYXRlIHx8IGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1twcm9wXTogdXBkYXRlfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JNYXAsIGNvbG9yUmFuZ2UpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qge2ZpZWxkLCBkb21haW59ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSBwcm9wKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWdbZmllbGRdPy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHR5cGUgb3IgdHlwZSBpcyBub3Qgc3RyaW5nLCBib29sZWFuIG9yIGRhdGVcbiAgICByZXR1cm4gdGhpcy51cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICB9XG5cbiAgdXBkYXRlQ2F0ZWdvcnlDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgY29uc3QgY29sb3JzID0gY29sb3JSYW5nZS5jb2xvcnM7XG4gICAgY29uc3QgYXNzaWduZWRDYXRlZ29yaWVzID0gW107XG4gICAgY29uc3QgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKS5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBhc3NpZ25lZENhdGVnb3JpZXMucHVzaChjTWFwWzBdKTtcbiAgICAgIHJldHVybiBbY01hcFswXSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgZm9yIChjb25zdCBjb2xvciBvZiB1bmFzc2lnbmVkQ29sb3JzKSB7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IGRvbWFpbi5maW5kKGQgPT4gIWFzc2lnbmVkQ2F0ZWdvcmllcy5pbmNsdWRlcyhkKSk7XG4gICAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgbmV3Q29sb3JNYXAucHVzaChbY2F0ZWdvcnksIGNvbG9yXSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZU51bWVyaWNDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCB1cGRhdGUpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB1cGRhdGUuY29sb3JzO1xuICAgIGxldCBuZXdDb2xvck1hcCA9IGNvbG9yTWFwLnNsaWNlKDAsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgbmV3Q29sb3JNYXAgPSBuZXdDb2xvck1hcC5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGluZGV4ID09PSBuZXdDb2xvck1hcC5sZW5ndGggLSAxID8gbnVsbCA6IGNNYXBbMF07XG4gICAgICByZXR1cm4gW3ZhbHVlLCBjb2xvcnNbaW5kZXhdXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmFzc2lnbmVkQ29sb3JzID0gY29sb3JzLnNsaWNlKG5ld0NvbG9yTWFwLmxlbmd0aCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBpZiAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2xvck1hcFZhbHVlcyA9IGNvbG9yTWFwLm1hcChjID0+IGNbMF0pLmZpbHRlcihjID0+IHR5cGVvZiBjID09PSAnbnVtYmVyJyk7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLmNvbG9yTWFwVmFsdWVzLCBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDJdWzBdO1xuICAgICAgY29uc3Qgc3RlcCA9IChtYXhWYWx1ZSAtIHByZXZWYWx1ZSkgLyAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggKyAxKTtcbiAgICAgIG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDFdWzBdID0gcHJldlZhbHVlICsgc3RlcDtcblxuICAgICAgZm9yIChjb25zdCBbaSwgY29sb3JdIG9mIHVuYXNzaWduZWRDb2xvcnMuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaSA9PT0gdW5hc3NpZ25lZENvbG9ycy5sZW5ndGggLSAxID8gbnVsbCA6IHByZXZWYWx1ZSArIChzdGVwICogKGkgKyAyKSk7XG4gICAgICAgIG5ld0NvbG9yTWFwLnB1c2goW3ZhbHVlLCBjb2xvcl0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNBbGxDb2x1bW5zKCkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiAoXG4gICAgICAoY29sdW1ucyAmJlxuICAgICAgT2JqZWN0LnZhbHVlcyhjb2x1bW5zKS5ldmVyeSh2ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odi5vcHRpb25hbCB8fCAodi52YWx1ZSAmJiB2LmZpZWxkSWR4ID4gLTEpKTtcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBsYXllckRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzTGF5ZXJEYXRhKGxheWVyRGF0YSkge1xuICAgIGlmICghbGF5ZXJEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKGxheWVyRGF0YS5kYXRhICYmIGxheWVyRGF0YS5kYXRhLmxlbmd0aCk7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgJiYgdGhpcy5oYXNBbGxDb2x1bW5zKCk7XG4gIH1cblxuICBzaG91bGRSZW5kZXJMYXllcihkYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnR5cGUgJiZcbiAgICAgIHRoaXMuaGFzQWxsQ29sdW1ucygpICYmXG4gICAgICB0aGlzLmhhc0xheWVyRGF0YShkYXRhKSAmJlxuICAgICAgdHlwZW9mIHRoaXMucmVuZGVyTGF5ZXIgPT09ICdmdW5jdGlvbicpXG4gICAgKTtcbiAgfVxuXG4gIGdldENvbG9yU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UsIGZhbGxiYWNrSWNvbikge1xuICAgIGxldCB1bmtub3duVmFsdWUgPSBmYWxsYmFja0ljb24gfHwgRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAocmFuZ2Uub3RoZXJzTWFya2VyKSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlLm1hcmtlck1hcCkge1xuICAgICAgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gQm9vbGVhbihcbiAgICAgICAgKHNjYWxlIHx8IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5KSAmJiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHlcbiAgICAgICAgICAgID8gc2NhbGVJZGVudGl0eVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNVcmxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgIHNjYWxlRnVuY3Rpb24sXG4gICAgICAgICAgICBkYXRhQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoZCksXG4gICAgICAgICAgICBmaWVsZENvbmZpZyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uVmFsdWUsXG4gICAgICAgICAgICBudWxsVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShhY2Nlc3NvciBpbiBhdHRyaWJ1dGVBY2Nlc3NvcnMpKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgRmFpbGVkIHRvIHByb3ZpZGUgYWNjZXNzb3IgZnVuY3Rpb24gZm9yICR7YWNjZXNzb3IgfHwgY2hhbm5lbH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVBY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRWaXNDaGFubmVsU2NhbGUoc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGZpeGVkKSB7XG4gICAgaWYgKHNjYWxlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICAgIHJldHVybiBTQ0FMRV9GVU5DW3NjYWxlXSgpXG4gICAgICAgIC5kb21haW4oZG9tYWluLnNsaWNlKDAsIHJhbmdlLmxlbmd0aCkpXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24oVU5LTk9XTl9DT0xPUik7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBkMy1zY2FsZSB0eXBlXG4gICAgcmV0dXJuIFNDQUxFX0ZVTkNbZml4ZWQgPyAnbGluZWFyJyA6IHNjYWxlXSgpXG4gICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgIC5yYW5nZShmaXhlZCA/IGRvbWFpbiA6IHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBkYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gY2FsY3VsYXRlIGJvdW5kcyBmb3IuXG4gICAqIEBwYXJhbSB7KGQ6IHtpbmRleDogbnVtYmVyfSwgZGM6IGltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gbnVtYmVyW119IGdldFBvc2l0aW9uIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHJldHVybiB7bnVtYmVyW118bnVsbH0gYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gbm8gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGVudGlyZSBkYXRhc2V0XG4gICAgLy8gZ2V0IGEgc2FtcGxlIG9mIGRhdGEgdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGNvbnN0IHNhbXBsZURhdGEgPVxuICAgICAgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiBNQVhfU0FNUExFX1NJWkVcbiAgICAgICAgPyBnZXRTYW1wbGVEYXRhKGRhdGFDb250YWluZXIsIE1BWF9TQU1QTEVfU0laRSlcbiAgICAgICAgOiBkYXRhQ29udGFpbmVyO1xuXG4gICAgY29uc3QgcG9pbnRzID0gc2FtcGxlRGF0YS5tYXBJbmRleChnZXRQb3NpdGlvbik7XG5cbiAgICBjb25zdCBsYXRCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAxLCBbLTkwLCA5MF0pO1xuICAgIGNvbnN0IGxuZ0JvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDAsIFstMTgwLCAxODBdKTtcblxuICAgIGlmICghbGF0Qm91bmRzIHx8ICFsbmdCb3VuZHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBbbG5nQm91bmRzWzBdLCBsYXRCb3VuZHNbMF0sIGxuZ0JvdW5kc1sxXSwgbGF0Qm91bmRzWzFdXTtcbiAgfVxuXG4gIGdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpIHtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IGRpZmZVcGRhdGVUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMsIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2Vycyk7XG4gICAgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzID0gZGF0YVVwZGF0ZVRyaWdnZXJzO1xuXG4gICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VkO1xuICB9XG5cbiAgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICBzY2FsZSxcbiAgICBkYXRhLFxuICAgIGZpZWxkLFxuICAgIC8vIEluIGJ1aWxkZXIgd2Ugb3ZlcndyaXRlIHRoZSBnZXRWYWx1ZSBmdW5jdGlvbiBhbmQgd2UgdXNlIHRoZSBfYWdncmVnYXRpb24gcGFyYW1ldGVyIGluIHNwYXRpYWwgaW5kZXggbGF5ZXJzIGFzIHRoZSBRdWFka2V5TGF5ZXIuXG4gICAgX2FnZ3JlZ2F0aW9uLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgKSB7XG4gICAgY29uc3Qge3R5cGV9ID0gZmllbGQ7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShmaWVsZCwgZGF0YSk7XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjb252ZXJ0IGhlcmVcbiAgICAgIC8vIHNjYWxlIEZ1bmN0aW9uIHNob3VsZCB0YWtlIGNhcmUgb2YgaXRcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUobmV3IERhdGUodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gIH1cblxuICB1cGRhdGVNZXRhKG1ldGEpIHtcbiAgICB0aGlzLm1ldGEgPSB7Li4udGhpcy5tZXRhLCAuLi5tZXRhfTtcbiAgfVxuXG4gIGdldERhdGFVcGRhdGVUcmlnZ2Vycyh7ZmlsdGVyZWRJbmRleCwgaWQsIGFsbERhdGF9KSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0RGF0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnMsIGZpbHRlcmVkSW5kZXh9LFxuICAgICAgZ2V0TWV0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnN9LFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnRleHRMYWJlbCB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdSwgdGwsIGkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbYGdldExhYmVsQ2hhcmFjdGVyU2V0LSR7aX1gXTogdGwuZmllbGQgPyB0bC5maWVsZC5uYW1lIDogbnVsbFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJEYXRhc2V0ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBsYXllckRhdGFzZXQ7XG5cbiAgICB0aGlzLnVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMobGF5ZXJEYXRhc2V0KTtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIGNvbnN0IGRhdGFVcGRhdGVUcmlnZ2VycyA9IHRoaXMuZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKGxheWVyRGF0YXNldCk7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSB0aGlzLmdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpO1xuXG4gICAgaWYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IFtdO1xuXG4gICAgaWYgKCF0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhICYmIG9sZExheWVyRGF0YSAmJiBvbGRMYXllckRhdGEuZGF0YSkge1xuICAgICAgLy8gc2FtZSBkYXRhXG4gICAgICBkYXRhID0gb2xkTGF5ZXJEYXRhLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUobGF5ZXJEYXRhc2V0LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHN0eWxlZCBmaWVsZHMgdG8gbWF0Y2ggb25lcyBmcm9tIG5ldyBkYXRhc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICAgKi9cbiAgdXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KSB7XG4gICAgZm9yIChjb25zdCB7ZmllbGR9IG9mIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykpIHtcbiAgICAgIGNvbnN0IG9sZEZpZWxkID0gdGhpcy5jb25maWdbZmllbGRdO1xuICAgICAgaWYgKCFvbGRGaWVsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdEYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IG9sZEZpZWxkLm5hbWUpIHx8IG51bGw7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBuZXdEYXRhU2V0RmllbGR9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBvbmUgbGF5ZXIgZG9tYWluIHdoZW4gc3RhdGUuZGF0YSBjaGFuZ2VkXG4gICAqIGlmIHN0YXRlLmRhdGEgY2hhbmdlIGlzIGR1ZSBvdCB1cGRhdGUgZmlsdGVyLCBuZXdGaWxlciB3aWxsIGJlIHBhc3NlZFxuICAgKiBjYWxsZWQgYnkgdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0c1xuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3RmlsdGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IGxheWVyXG4gICAqL1xuICB1cGRhdGVMYXllckRvbWFpbihkYXRhc2V0cywgbmV3RmlsdGVyKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7c2NhbGV9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGlmICghc2NhbGUpIHtcbiAgICAgIC8vIHZpc3VhbENoYW5uZWwgZG9lc24ndCBoYXZlIHNjYWxlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHRoaXMuZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpO1xuICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgc2VsZWN0ZWQgc2NhbGUgaXNcbiAgICAvLyBzdXBwb3J0ZWQsIGlmIG5vdCwgY2hhbmdlIHRvIGRlZmF1bHRcbiAgICBpZiAoIXNjYWxlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tzY2FsZV0pKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbc2NhbGVdOiBzY2FsZU9wdGlvbnNbMF19KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjYWxlIG9wdGlvbnMgYmFzZWQgb24gY3VycmVudCBmaWVsZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBnZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgc2NhbGUsIGNoYW5uZWxTY2FsZVR5cGV9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgID8gRklFTERfT1BUU1t0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZV0uc2NhbGVbY2hhbm5lbFNjYWxlVHlwZV1cbiAgICAgIDogW3RoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKClbc2NhbGVdXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgLy8gY2FsY3VsYXRlIGxheWVyIGNoYW5uZWwgZG9tYWluXG4gICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3Zpc3VhbENoYW5uZWwuZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICB9XG5cbiAgZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzKCkge1xuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHZpc3VhbENoYW5uZWwgPT4ge1xuICAgICAgLy8gZmllbGQgcmFuZ2Ugc2NhbGUgZG9tYWluXG4gICAgICBjb25zdCB7YWNjZXNzb3IsIGZpZWxkLCBzY2FsZSwgZG9tYWluLCByYW5nZSwgZGVmYXVsdFZhbHVlLCBmaXhlZH0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgICB1cGRhdGVUcmlnZ2Vyc1thY2Nlc3Nvcl0gPSB7XG4gICAgICAgIFtmaWVsZF06IHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgW3NjYWxlXTogdGhpcy5jb25maWdbc2NhbGVdLFxuICAgICAgICBbZG9tYWluXTogdGhpcy5jb25maWdbZG9tYWluXSxcbiAgICAgICAgW3JhbmdlXTogdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKHRoaXMuY29uZmlnKSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgLi4uKGZpeGVkID8ge1tmaXhlZF06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF19IDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVUcmlnZ2VycztcbiAgfVxuXG4gIGNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpIHtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICAgIGlmICghZmllbGQgfHwgIXNjYWxlKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcbiAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5uYW1lKTtcbiAgICBpZiAoIXNjYWxlVHlwZSB8fCAhZGF0YVNldEZpZWxkKSB7XG4gICAgICAvLyBpZiBuZXcgZGF0YXNldCBkb2Vzbid0IGNvbnRhaW4gcHJldmlvdXNseSBzZXQgZmllbGRcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0LmdldENvbHVtbkxheWVyRG9tYWluKGRhdGFTZXRGaWVsZCwgc2NhbGVUeXBlKSB8fCBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUsIGZpeGVkUmFkaXVzKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3QgZml4ZWQgPSBmaXhlZFJhZGl1cyA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzIDogZml4ZWRSYWRpdXM7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZShmaXhlZFJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKTtcbiAgfVxuXG4gIGdldE1heE1hcmtlclNpemUoKSB7XG4gICAgY29uc3Qge3JhZGl1c0ZpZWxkLCBzaXplRmllbGQsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7cmFkaXVzUmFuZ2UsIHJhZGl1c30gPSB2aXNDb25maWc7XG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNGaWVsZCB8fCBzaXplRmllbGQ7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoZmllbGQgJiYgcmFkaXVzUmFuZ2UgPyByYWRpdXNSYW5nZVsxXSA6IHJhZGl1cykpO1xuICB9XG5cbiAgZ2V0UmFkaXVzVW5pdChmaXhlZFJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuICdwaXhlbHMnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gJ21ldGVycycgOiAncGl4ZWxzJztcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtpZHgsIGdwdUZpbHRlciwgbWFwU3RhdGUsIHZpc2libGUsIG1hc2tQb2x5Z29ufSkge1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhtYXNrUG9seWdvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5lbmFibGVkLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWluLFxuICAgICAgICBtYXg6IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWF4XG4gICAgICB9LFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbiwgLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKHtnZXRQb3NpdGlvbiwgZ2V0UGl4ZWxPZmZzZXQsIHVwZGF0ZVRyaWdnZXJzLCBzaGFyZWRQcm9wc30sIHJlbmRlck9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIGRhdGEudGV4dExhYmVscy5yZWR1Y2UoKGFjY3UsIGQsIGkpID0+IHtcbiAgICAgIGlmIChkLmdldFRleHQpIHtcbiAgICAgICAgYWNjdS5wdXNoKFxuICAgICAgICAgIG5ldyBUZXh0TGF5ZXIoe1xuICAgICAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tbGFiZWwtJHt0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWV9YCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICAgIGdldFRleHQ6IGQuZ2V0VGV4dCxcbiAgICAgICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICAgICAgY2hhcmFjdGVyU2V0OiBkLmNoYXJhY3RlclNldCxcbiAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiBnZXRQaXhlbE9mZnNldCh0ZXh0TGFiZWxbaV0pLFxuICAgICAgICAgICAgZ2V0U2l6ZTogMSxcbiAgICAgICAgICAgIHNpemVTY2FsZTogdGV4dExhYmVsW2ldLnNpemUsXG4gICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICAgICAgZ2V0VGV4dDogdGV4dExhYmVsW2ldLmZpZWxkPy5uYW1lLFxuICAgICAgICAgICAgICBnZXRQaXhlbE9mZnNldDoge1xuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50LFxuICAgICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gY3VzdG9tTWFya2Vyc1N0YXR1cyBSZWNvcmQ8dXJsLCBVcmxTdGF0dXM+IHByb3ZpZGVkIGJ5IGJ1aWxkZXIsIFVybFN0YXR1cyBgb2tgIG1lYW5zIFVSTCBpcyBvayBhbmQgcmVhZHkgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoY3VzdG9tTWFya2Vyc1N0YXR1cywgaWNvblVybEFjY2Vzc29yKSB7XG4gICAgY29uc3QgbWF4SWNvblNpemUgPSB0aGlzLmdldE1heE1hcmtlclNpemUoKTtcblxuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGNvbnN0IHdhbnRlZFVybCA9XG4gICAgICAgICh0eXBlb2YgaWNvblVybEFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSA/IGljb25VcmxBY2Nlc3NvcihkKSA6IGljb25VcmxBY2Nlc3NvcjtcbiAgICAgIGNvbnN0IHVybCA9IGN1c3RvbU1hcmtlcnNTdGF0dXM/Llt3YW50ZWRVcmxdID09PSAnb2snID8gd2FudGVkVXJsIDogRkFMTEJBQ0tfSUNPTjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHt1cmx9QEAke21heEljb25TaXplfWAsXG4gICAgICAgIHVybCxcbiAgICAgICAgd2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICBoZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICBtYXNrOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXX0=
1663
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJfaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsIkRlZmF1bHRMYXllckljb24iLCJ0eXBlIiwiY29sb3IiLCJwcm9wZXJ0eSIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJudWxsVmFsdWUiLCJOT19WQUxVRV9DT0xPUiIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJsYXQiLCJwYWlyIiwiZmllbGRQYWlyS2V5IiwibG5nIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsImludGVyYWN0aXZpdHlTZXR0aW5ncyIsIkJvb2xlYW4iLCJob3ZlciIsImZpZWxkcyIsImNsaWNrIiwiaGFzVG9vbHRpcCIsImVuYWJsZWQiLCJkYXRhSWQiLCJ2aXNpYmlsaXR5Qnlab29tIiwibWluIiwiWk9PTV9MRVZFTF9MSU1JVFMiLCJtYXgiLCJsYWJlbCIsIkRFRkFVTFRfTEFZRVJfTEFCRUwiLCJuZXh0IiwidmFsdWUiLCJpc1Zpc2libGUiLCJpc0NvbmZpZ0FjdGl2ZSIsImhpZ2hsaWdodENvbG9yIiwiREVGQVVMVF9ISUdITElHSFRfQ09MT1IiLCJoaWRkZW4iLCJjb2xvckZpZWxkIiwiY29sb3JEb21haW4iLCJjb2xvclNjYWxlIiwiU0NBTEVfVFlQRVMiLCJxdWFudGlsZSIsInNpemVEb21haW4iLCJzaXplU2NhbGUiLCJsaW5lYXIiLCJzaXplRmllbGQiLCJyYWRpdXNGaWVsZCIsInZpc0NvbmZpZyIsInRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImNvbG9yVUkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY29sb3JSYW5nZSIsImFuaW1hdGlvbiIsInZpc3VhbENoYW5uZWxzIiwibWVhc3VyZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsImRlZmF1bHRNZWFzdXJlIiwidXBkYXRlIiwiZmllbGRJZHgiLCJjb2x1bW5QYWlycyIsInBhcnRuZXJLZXkiLCJwYXJ0bmVyRmllbGRQYWlyS2V5Iiwiem9vbSIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsImRhdGFzZXRzIiwiZmlsdGVyZWRJbmRleCIsIm9iamVjdCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJjb25maWdUb0NvcHkiLCJzaGFsbG93Q29weSIsImNvbmNhdCIsIm5vdFRvQ29weSIsImZvckVhY2giLCJncm91cCIsInB1c2giLCJjdXJyZW50Q29uZmlnIiwiY29waWVkIiwiY29weUxheWVyQ29uZmlnIiwidXBkYXRlTGF5ZXJDb25maWciLCJrZXlzIiwiY2hhbm5lbCIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImluY2x1ZGVzIiwibGF5ZXJWaXNDb25maWdzIiwiaXRlbSIsIkxBWUVSX1ZJU19DT05GSUdTIiwiZXZlcnkiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJjb2x1bW5WYWxpZGF0b3JzIiwicmVxdWlyZWQiLCJyZXF1aXJlZExheWVyQ29sdW1ucyIsInJlZHVjZSIsImFjY3UiLCJ2YWxpZGF0b3IiLCJvcHRpb25hbCIsIm9wdGlvbmFsQ29sdW1ucyIsIm5ld0NvbmZpZyIsIm5ld1Zpc0NvbmZpZyIsInByb3AiLCJwcmV2aW91cyIsImNvbG9yVUlQcm9wIiwiZW50cmllcyIsImlzQ29sb3JSYW5nZSIsImNvbG9ycyIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJjdXN0b21QYWxldHRlIiwic2hvd0Ryb3Bkb3duIiwic3RlcHMiLCJyZXZlcnNlZCIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJzYW1lR3JvdXAiLCJDT0xPUl9SQU5HRVMiLCJmaWx0ZXIiLCJjciIsImZpbmQiLCJjb2xvck1hcCIsInVwZGF0ZUNvbG9yTWFwIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVDYXRlZ29yeUNvbG9yTWFwIiwidXBkYXRlTnVtZXJpY0NvbG9yTWFwIiwiYXNzaWduZWRDYXRlZ29yaWVzIiwibmV3Q29sb3JNYXAiLCJzbGljZSIsImNNYXAiLCJ1bmFzc2lnbmVkQ29sb3JzIiwiY2F0ZWdvcnkiLCJjb2xvck1hcFZhbHVlcyIsImMiLCJtYXhWYWx1ZSIsInByZXZWYWx1ZSIsInN0ZXAiLCJpIiwibGF5ZXJEYXRhIiwiZGF0YSIsImhhc0FsbENvbHVtbnMiLCJoYXNMYXllckRhdGEiLCJyZW5kZXJMYXllciIsIkFycmF5IiwiaXNBcnJheSIsIk1hcCIsImsiLCJzZXQiLCJTQ0FMRV9GVU5DIiwiZnJvbSIsInVua25vd24iLCJVTktOT1dOX0NPTE9SIiwiZ2V0VmlzQ2hhbm5lbFNjYWxlIiwiZmFsbGJhY2tJY29uIiwidW5rbm93blZhbHVlIiwibWFwcGluZyIsIm90aGVyc01hcmtlciIsIm1hcmtlck1hcCIsIm1hcmtlclVybCIsImRhdGFBY2Nlc3NvciIsImF0dHJpYnV0ZUFjY2Vzc29ycyIsImZpeGVkIiwiYWNjZXNzb3IiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwic2hvdWxkR2V0U2NhbGUiLCJpZGVudGl0eSIsImFyZ3MiLCJpc0ZpeGVkIiwiZmllbGRDb25maWciLCJhZ2dyZWdhdGlvblZhbHVlIiwic2NhbGVGdW5jdGlvbiIsImdldENvbG9yU2NhbGUiLCJjdXN0b21NYXJrZXIiLCJnZXRDdXN0b21NYXJrZXJzU2NhbGUiLCJjdXN0b21NYXJrZXJzVXJsIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsIkNvbnNvbGUiLCJ3YXJuIiwib3JkaW5hbCIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsIm51bVJvd3MiLCJwb2ludHMiLCJtYXBJbmRleCIsImxhdEJvdW5kcyIsImxuZ0JvdW5kcyIsImRhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsIl9hZ2dyZWdhdGlvbiIsImdldFZhbHVlIiwiYXR0cmlidXRlVmFsdWUiLCJBTExfRklFTERfVFlQRVMiLCJ0aW1lc3RhbXAiLCJEYXRlIiwiYWxsRGF0YSIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGFzZXQiLCJ1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsImdldENoYW5nZWRUcmlnZ2VycyIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwib2xkRmllbGQiLCJuZXdEYXRhU2V0RmllbGQiLCJmZCIsIm5ld0ZpbHRlciIsInRhYmxlIiwiZ2V0RGF0YXNldCIsInNjYWxlVHlwZSIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhU2V0RmllbGQiLCJmIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJwaWNrZWQiLCJsYXllciIsIm1hcFN0YXRlIiwiZml4ZWRSYWRpdXMiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJ1bmRlZmluZWQiLCJyYWRpdXMiLCJnZXRab29tRmFjdG9yIiwicmFkaXVzUmFuZ2UiLCJjZWlsIiwibm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzIiwiaW50ZXJhY3Rpb25Db25maWciLCJicnVzaGluZ1RhcmdldCIsImJydXNoIiwiYXV0b0hpZ2hsaWdodCIsImJydXNoaW5nUmFkaXVzIiwiYnJ1c2hpbmdFbmFibGVkIiwiaWR4IiwiZ3B1RmlsdGVyIiwidmlzaWJsZSIsIm1hc2tQb2x5Z29uIiwibWFza0V4dGVuc2lvblByb3BzIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwicGlja2FibGUiLCJoYXNJbnRlcmFjdGl2aXR5Iiwid3JhcExvbmdpdHVkZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJkcmFnUm90YXRlIiwiZW5hYmxlM2QiLCJvcGFjaXR5IiwiZXh0ZW5zaW9ucyIsImZpbHRlclJhbmdlIiwicmVuZGVyT3B0cyIsImdldFBpeGVsT2Zmc2V0Iiwic2hhcmVkUHJvcHMiLCJ0ZXh0TGFiZWxzIiwiZ2V0VGV4dCIsIlRleHRMYXllciIsImNoYXJhY3RlclNldCIsImdldFNpemUiLCJnZXRUZXh0QW5jaG9yIiwiYW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJhbGlnbm1lbnQiLCJnZXRDb2xvciIsImdldEZpbHRlclZhbHVlIiwiZ2V0UmFkaXVzIiwiY3VzdG9tTWFya2Vyc1N0YXR1cyIsImljb25VcmxBY2Nlc3NvciIsIm1heEljb25TaXplIiwiZ2V0TWF4TWFya2VyU2l6ZSIsIndhbnRlZFVybCIsInVybCIsIndpZHRoIiwiaGVpZ2h0IiwibWFzayIsImtlcGxlclRhYmxlIiwiZm91bmRMYXllcnMiLCJkZWZhdWx0RmllbGRzIiwiYWxsRmllbGRzIiwicmVxdWlyZWRDb2x1bW5zIiwicHJldiIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyIsImFsbEtleXMiLCJwb2ludGVycyIsImNvdW50UGVyS2V5IiwicGFpcnMiLCJpbmNyZW1lbnRQb2ludGVycyIsIm5ld1BhaXIiLCJjdXVyIiwicHRzIiwiY291bnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFZQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O3dEQTRCVUEsYTs7QUExQlY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxlQUFlLEdBQUcsQ0FBeEIsQyxDQUVQOzs7QUFDQSxJQUFNQyxhQUFhLEdBQ2pCLDBMQURGO0FBR0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBdEI7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxJQUFJQywrQkFBSixDQUF3QjtBQUFDQyxFQUFBQSxVQUFVLEVBQUVDO0FBQWIsQ0FBeEIsQ0FBNUI7O0FBRUEsSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFBQyxFQUFFO0FBQUEsU0FBSSxVQUFBQyxDQUFDO0FBQUEsV0FBSUEsQ0FBSjtB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LENBQTFDLEVBQTZDO0FBQzNDO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELFlBQUlELEdBQUcsQ0FBQzlVLEtBQUQsQ0FBSCxHQUFhLENBQWIsR0FBaUIrVSxNQUFNLENBQUMvVSxLQUFELENBQTNCLEVBQW9DO0FBQ2xDOFUsVUFBQUEsR0FBRyxDQUFDOVUsS0FBRCxDQUFILEdBQWE4VSxHQUFHLENBQUM5VSxLQUFELENBQUgsR0FBYSxDQUExQjtBQUNBLGlCQUFPLElBQVA7QUFDRDs7QUFFRDhVLFFBQUFBLEdBQUcsQ0FBQzlVLEtBQUQsQ0FBSCxHQUFhLENBQWI7QUFDQSxlQUFPMlUsaUJBQWlCLENBQUNHLEdBQUQsRUFBTUMsTUFBTixFQUFjL1UsS0FBSyxHQUFHLENBQXRCLENBQXhCO0FBQ0Q7O0FBRUQsYUFBTzBVLEtBQVA7QUFDRDs7O1dBRUQsa0JBQWdCNUssQ0FBaEIsRUFBbUI7QUFDakIsYUFBTywwQkFBU0EsQ0FBVCxDQUFQO0FBQ0Q7Ozs7O2VBK2pDWTNKLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQge0RhdGFGaWx0ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcblxuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVN9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtEYXRhVml6Q29sb3JzfSBmcm9tICdjb25zdGFudHMvY3VzdG9tLWNvbG9yLXJhbmdlcyc7XG5pbXBvcnQge1xuICBMQVlFUl9WSVNfQ09ORklHUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBERUZBVUxUX0NPTE9SX1VJLFxuICBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgREVGQVVMVF9MQVlFUl9MQUJFTFxufSBmcm9tICcuL2xheWVyLWZhY3RvcnknO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBpc1BsYWluT2JqZWN0fSBmcm9tICd1dGlscy91dGlscyc7XG5cbmltcG9ydCB7Z2V0TGF0TG5nQm91bmRzLCBub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRTYW1wbGVEYXRhfSBmcm9tICd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci11dGlscyc7XG5cbmltcG9ydCB7aGV4VG9SZ2IsIGdldENvbG9yR3JvdXBCeU5hbWUsIHJldmVyc2VDb2xvclJhbmdlfSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2dldE1hc2tFeHRlbnNpb25Qcm9wc30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtzY2FsZU9yZGluYWx9IGZyb20gJ2QzLXNjYWxlJztcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vaW5kZXgnKS5MYXllcn0gTGF5ZXJDbGFzc30gKi9cblxuLyoqXG4gKiBBcHByb3guIG51bWJlciBvZiBwb2ludHMgdG8gc2FtcGxlIGluIGEgbGFyZ2UgZGF0YSBzZXRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9JRF9MRU5HVEggPSA2O1xuXG4vLyBOb3RlLCB0aGlzIGlzIGlzIFNWRyBvZiBzb2xpZCBjaXJjbGUgZW5jb2RlZCBhcyBkYXRhLXVyaVxuY29uc3QgRkFMTEJBQ0tfSUNPTiA9XG4gICdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjJhV1YzUW05NFBTSXdJREFnTVRBd0lERXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajROQ2lBZ1BHTnBjbU5zWlNCamVEMGlOVEFpSUdONVBTSTFNQ0lnY2owaU5UQWlMejROQ2p3dmMzWm5QZz09JztcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW4gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe2ZpbHRlclNpemU6IE1BWF9HUFVfRklMVEVSU30pO1xuXG5jb25zdCBkZWZhdWx0RGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiBkO1xuY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5jb25zdCBzY2FsZUlkZW50aXR5ID0gdiA9PiB2O1xuXG5leHBvcnQgY29uc3QgT1ZFUkxBWV9UWVBFID0ga2V5bWlycm9yKHtcbiAgZGVja2dsOiBudWxsLFxuICBtYXBib3hnbDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsYXllckNvbG9ycyA9IE9iamVjdC52YWx1ZXMoRGF0YVZpekNvbG9ycykubWFwKGhleFRvUmdiKTtcbmZ1bmN0aW9uKiBnZW5lcmF0ZUNvbG9yKCkge1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBsYXllckNvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBsYXllckNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgeWllbGQgbGF5ZXJDb2xvcnNbaW5kZXgrK107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9yTWFrZXIgPSBnZW5lcmF0ZUNvbG9yKCk7XG5cbi8qKiBAdHlwZSB7TGF5ZXJDbGFzc30gKi9cbmNsYXNzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBwcm9wcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gdmlzQ29uZmlnU2V0dGluZ3NcbiAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzID0ge307XG5cbiAgICAvLyBpbnRlcmFjdGl2aXR5U2V0dGluZ3NcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKCksXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFLmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcygpIHtcbiAgICByZXR1cm4gWydsYWJlbCcsICdvcGFjaXR5JywgJ3RoaWNrbmVzcycsICdpc1Zpc2libGUnLCAnaGlkZGVuJ107XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBDb2x1bW4gcGFpcnMgbWFwcyBsYXllciBjb2x1bW4gdG8gYSBzcGVjaWZpYyBmaWVsZCBwYWlycyxcbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG51bGxcbiAgICovXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDoge3BhaXI6ICdsbmcnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6ICdsYXQnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiB7cGFpcjogJ2xuZzAnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzA6IHtwYWlyOiAnbGF0MCcsIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgUmVhY3QgY29tcG9uZW50IGZvciB0byByZW5kZXIgbGF5ZXIgaW5zdHJ1Y3Rpb25zIGluIGEgbW9kYWxcbiAgICogQHJldHVybnMge29iamVjdH0gLSBhbiBvYmplY3RcbiAgICogQGV4YW1wbGVcbiAgICogIHJldHVybiB7XG4gICAqICAgIGlkOiAnaWNvbkluZm8nLFxuICAgKiAgICB0ZW1wbGF0ZTogSWNvbkluZm9Nb2RhbCxcbiAgICogICAgbW9kYWxQcm9wczoge1xuICAgKiAgICAgIHRpdGxlOiAnSG93IHRvIGRyYXcgaWNvbnMnXG4gICAqICAgfTtcbiAgICogfVxuICAgKi9cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpdml0eVNldHRpbmdzO1xuICB9XG5cbiAgc2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncyhpbnRlcmFjdGl2aXR5U2V0dGluZ3MpIHtcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSBpbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBnZXQgaGFzVG9vbHRpcCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5ob3Zlcj8uZmllbGRzLmxlbmd0aCB8fFxuICAgICAgICB0aGlzLmludGVyYWN0aXZpdHlTZXR0aW5ncz8uY2xpY2s/LmZpZWxkcy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0ludGVyYWN0aXZpdHkoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5oYXNUb29sdGlwICYmIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5lbmFibGVkKTtcbiAgfVxuXG4gIC8qXG4gICAqIEdpdmVuIGEgZGF0YXNldCwgYXV0b21hdGljYWxseSBmaW5kIHByb3BzIHRvIGNyZWF0ZSBsYXllciBiYXNlZCBvbiBpdFxuICAgKiBhbmQgcmV0dXJuIHRoZSBwcm9wcyBhbmQgcHJldmlvdXMgZm91bmQgbGF5ZXJzLlxuICAgKiBCeSBkZWZhdWx0LCBubyBsYXllcnMgd2lsbCBiZSBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBmb3VuZExheWVycykge1xuICAgIHJldHVybiB7cHJvcHM6IFtdLCBmb3VuZExheWVyc307XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBhcnJheSBvZiBwcmVzZXQgcmVxdWlyZWQgY29sdW1uIG5hbWVzXG4gICAqIGZvdW5kIGZpZWxkIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgdG8gc2V0IGFzIGxheWVyIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEZpZWxkc1xuICAgKiBAcGFyYW0ge29iamVjdFtdfSBhbGxGaWVsZHNcbiAgICogQHJldHVybnMge29iamVjdFtdIHwgbnVsbH0gYWxsIHBvc3NpYmxlIHJlcXVpcmVkIGxheWVyIGNvbHVtbiBwYWlyc1xuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0Q29sdW1uRmllbGQoZGVmYXVsdEZpZWxkcywgYWxsRmllbGRzKSB7XG4gICAgLy8gZmluZCBhbGwgbWF0Y2hlZCBmaWVsZHMgZm9yIGVhY2ggcmVxdWlyZWQgY29sXG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZGVmYXVsdEZpZWxkcykucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihcbiAgICAgICAgZiA9PiBmLm5hbWUgPT09IGRlZmF1bHRGaWVsZHNba2V5XSB8fCBkZWZhdWx0RmllbGRzW2tleV0uaW5jbHVkZXMoZi5uYW1lKVxuICAgICAgKTtcblxuICAgICAgcHJldltrZXldID0gcmVxdWlyZWRGaWVsZHMubGVuZ3RoXG4gICAgICAgID8gcmVxdWlyZWRGaWVsZHMubWFwKGYgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlOiBmLm5hbWUsXG4gICAgICAgICAgICBmaWVsZElkeDogZi5maWVsZElkeFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMocmVxdWlyZWRDb2x1bW5zKS5ldmVyeShCb29sZWFuKSkge1xuICAgICAgLy8gaWYgYW55IGZpZWxkIG1pc3NpbmcsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpIHtcbiAgICAvLyBmb3IgbXVsdGlwbGUgbWF0Y2hlZCBmaWVsZCBmb3Igb25lIHJlcXVpcmVkIGNvbHVtbiwgcmV0dXJuIG11bHRpcGxlXG4gICAgLy8gY29tYmluYXRpb25zLCBlLiBnLiBpZiBjb2x1bW4gYSBoYXMgMiBtYXRjaGVkLCBjb2x1bW4gYiBoYXMgMyBtYXRjaGVkXG4gICAgLy8gNiBwb3NzaWJsZSBjb2x1bW4gcGFpcnMgd2lsbCBiZSByZXR1cm5lZFxuICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlZENvbHVtbnMpO1xuICAgIGNvbnN0IHBvaW50ZXJzID0gYWxsS2V5cy5tYXAoKGssIGkpID0+ICgoaSA9PT0gYWxsS2V5cy5sZW5ndGggLSAxID8gLTEgOiAwKSkpO1xuICAgIGNvbnN0IGNvdW50UGVyS2V5ID0gYWxsS2V5cy5tYXAoayA9PiByZXF1aXJlZENvbHVtbnNba10ubGVuZ3RoKTtcbiAgICBjb25zdCBwYWlycyA9IFtdO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgd2hpbGUgKGluY3JlbWVudFBvaW50ZXJzKHBvaW50ZXJzLCBjb3VudFBlcktleSwgcG9pbnRlcnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNvbnN0IG5ld1BhaXIgPSBwb2ludGVycy5yZWR1Y2UoKHByZXYsIGN1dXIsIGkpID0+IHtcbiAgICAgICAgcHJldlthbGxLZXlzW2ldXSA9IHJlcXVpcmVkQ29sdW1uc1thbGxLZXlzW2ldXVtjdXVyXTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHBhaXJzLnB1c2gobmV3UGFpcik7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cbiAgICAvLyByZWN1cnNpdmVseSBpbmNyZW1lbnQgcG9pbnRlcnNcbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwdHNbMF0gPT09IGNvdW50c1swXSAtIDEpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBpbmNyZW1lbnRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHRzW2luZGV4XSArIDEgPCBjb3VudHNbaW5kZXhdKSB7XG4gICAgICAgIHB0c1tpbmRleF0gPSBwdHNbaW5kZXhdICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHB0c1tpbmRleF0gPSAwO1xuICAgICAgcmV0dXJuIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIHN0YXRpYyBoZXhUb1JnYihjKSB7XG4gICAgcmV0dXJuIGhleFRvUmdiKGMpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YUlkOiBwcm9wcy5kYXRhSWQgfHwgbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHtcbiAgICAgICAgbWluOiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5taW4gfHwgWk9PTV9MRVZFTF9MSU1JVFMubWluLFxuICAgICAgICBtYXg6IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1heCB8fCBaT09NX0xFVkVMX0xJTUlUUy5tYXhcbiAgICAgIH0sXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgfHwgREVGQVVMVF9MQVlFUl9MQUJFTCxcbiAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciB8fCBjb2xvck1ha2VyLm5leHQoKS52YWx1ZSxcbiAgICAgIGNvbHVtbnM6IHByb3BzLmNvbHVtbnMgfHwgbnVsbCxcbiAgICAgIGlzVmlzaWJsZTogcHJvcHMuaXNWaXNpYmxlIHx8IGZhbHNlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHByb3BzLmlzQ29uZmlnQWN0aXZlIHx8IGZhbHNlLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHByb3BzLmhpZ2hsaWdodENvbG9yIHx8IERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICAgICAgaGlkZGVuOiBwcm9wcy5oaWRkZW4gfHwgZmFsc2UsXG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgaW50byBzZXBhcmF0ZSB2aXN1YWwgQ2hhbm5lbCBjb25maWdcbiAgICAgIC8vIGNvbG9yIGJ5IGZpZWxkLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBjb2xvckZpZWxkOiBudWxsLFxuICAgICAgY29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuXG4gICAgICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBzaXplRG9tYWluOiBbMCwgMV0sXG4gICAgICBzaXplU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhcixcbiAgICAgIHNpemVGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuXG4gICAgICB2aXNDb25maWc6IHt9LFxuXG4gICAgICB0ZXh0TGFiZWw6IFtERUZBVUxUX1RFWFRfTEFCRUxdLFxuXG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIGNvbG9yOiBERUZBVUxUX0NPTE9SX1VJLFxuICAgICAgICBjb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7ZW5hYmxlZDogZmFsc2V9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgdmlzdWFsQ2hhbm5lbCBjb25maWdcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJucyB7e2xhYmVsOiBzdHJpbmcsIG1lYXN1cmU6IChzdHJpbmd8c3RyaW5nKX19XG4gICAqL1xuICBnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24oa2V5KSB7XG4gICAgLy8gZS5nLiBsYWJlbDogQ29sb3IsIG1lYXN1cmU6IFZlaGljbGUgVHlwZVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdGhpcy52aXNDb25maWdTZXR0aW5nc1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0ucmFuZ2VdLmxhYmVsLFxuICAgICAgbWVhc3VyZTogdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXVxuICAgICAgICA/ICh0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXS5uYW1lKVxuICAgICAgICA6IHRoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5kZWZhdWx0TWVhc3VyZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgdG8gbGF5ZXIgY29sdW1uLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gZmllbGQgLSBTZWxlY3RlZCBmaWVsZFxuICAgKiBAcmV0dXJucyB7e319IC0gQ29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uKGtleSwgZmllbGQpIHtcbiAgICAvLyBmaWVsZCB2YWx1ZSBjb3VsZCBiZSBudWxsIGZvciBvcHRpb25hbCBjb2x1bW5zXG4gICAgY29uc3QgdXBkYXRlID0gZmllbGRcbiAgICAgID8ge1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBmaWVsZC5maWVsZElkeFxuICAgICAgICB9XG4gICAgICA6IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgW2tleV06IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcuY29sdW1uc1trZXldLFxuICAgICAgICAuLi51cGRhdGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHBhaXIgdG8gY29sdW1uIGNvbmZpZywgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICogQHBhcmFtIGtleSAtIENvbHVtbiBLZXlcbiAgICogQHBhcmFtIHBhaXIgLSBmaWVsZCBQYWlyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gQ29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uUGFpcnMoa2V5LCBwYWlyKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtblBhaXJzIHx8ICF0aGlzLmNvbHVtblBhaXJzPy5ba2V5XSkge1xuICAgICAgLy8gc2hvdWxkIG5vdCBlbmQgaW4gdGhpcyBzdGF0ZVxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnM7XG4gICAgfVxuXG4gICAgY29uc3Qge3BhaXI6IHBhcnRuZXJLZXksIGZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5ba2V5XTtcbiAgICBjb25zdCB7ZmllbGRQYWlyS2V5OiBwYXJ0bmVyRmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltwYXJ0bmVyS2V5XTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgW2tleV06IHBhaXJbZmllbGRQYWlyS2V5XSxcbiAgICAgIFtwYXJ0bmVyS2V5XTogcGFpcltwYXJ0bmVyRmllbGRQYWlyS2V5XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgcmFkaXVzIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiBNYXRoLnBvdygyLCBNYXRoLm1heCgxNCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgZWxldmF0aW9uIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEVsZXZhdGlvblpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvclxuICAgICAgPyBNYXRoLnBvdygyLCBNYXRoLm1heCg4IC0gem9vbSArIHpvb21PZmZzZXQsIDApKVxuICAgICAgOiAxO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBmaWx0ZXJlZEluZGV4KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKG9iamVjdCwgZGF0YUNvbnRhaW5lcikge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBlYWNoIGVudHJ5IG9mIGxheWVyRGF0YSBzaG91bGQgaGF2ZSBhbiBpbmRleCBvZiBhIHJvdyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBjb250YWluZXIuXG4gICAgLy8gRWFjaCBsYXllciBjYW4gaW1wbGVtZW50IGl0cyBvd24gZ2V0SG92ZXJEYXRhIG1ldGhvZFxuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhvYmplY3QuaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gY2hhbmdlIGxheWVyIHR5cGUsIHRyeSB0byBjb3B5IG92ZXIgbGF5ZXIgY29uZmlncyBhcyBtdWNoIGFzIHBvc3NpYmxlXG4gICAqIEBwYXJhbSBjb25maWdUb0NvcHkgLSBjb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB2aXNDb25maWdTZXR0aW5ncyAtIHZpc0NvbmZpZyBzZXR0aW5ncyBvZiBjb25maWcgdG8gY29weVxuICAgKi9cbiAgYXNzaWduQ29uZmlnVG9MYXllcihjb25maWdUb0NvcHksIHZpc0NvbmZpZ1NldHRpbmdzKSB7XG4gICAgLy8gZG9uJ3QgZGVlcCBtZXJnZSB2aXN1YWxDaGFubmVsIGZpZWxkXG4gICAgLy8gZG9uJ3QgZGVlcCBtZXJnZSBjb2xvciByYW5nZSwgcmV2ZXJzZWQ6IGlzIG5vdCBhIGtleSBieSBkZWZhdWx0XG4gICAgY29uc3Qgc2hhbGxvd0NvcHkgPSBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddLmNvbmNhdChcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5maWVsZClcbiAgICApO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIGRvbWFpbiBhbmQgYW5pbWF0aW9uXG4gICAgY29uc3Qgbm90VG9Db3B5ID0gWydhbmltYXRpb24nXS5jb25jYXQoT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmRvbWFpbikpO1xuICAgIC8vIGlmIHJhbmdlIGlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBncm91cCBjb3B5IGl0LCBvdGhlcndpc2UsIG5vdCB0byBjb3B5XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHYgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWdUb0NvcHkudmlzQ29uZmlnW3YucmFuZ2VdICYmXG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0gJiZcbiAgICAgICAgdmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0uZ3JvdXAgIT09IHRoaXMudmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0uZ3JvdXBcbiAgICAgICkge1xuICAgICAgICBub3RUb0NvcHkucHVzaCh2LnJhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciB2aXN1YWxDaGFubmVsIHJhbmdlXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGNvcGllZCA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSwge1xuICAgICAgc2hhbGxvd0NvcHksXG4gICAgICBub3RUb0NvcHlcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKGNvcGllZCk7XG4gICAgLy8gdmFsaWRhdGUgdmlzdWFsQ2hhbm5lbCBmaWVsZCB0eXBlIGFuZCBzY2FsZSB0eXBlc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFJlY3Vyc2l2ZWx5IGNvcHkgY29uZmlnIG92ZXIgdG8gYW4gZW1wdHkgbGF5ZXJcbiAgICogd2hlbiByZWNlaXZlZCBzYXZlZCBjb25maWcsIG9yIGNvcHkgY29uZmlnIG92ZXIgZnJvbSBhIGRpZmZlcmVudCBsYXllciB0eXBlXG4gICAqIG1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgb3ZlciB2YWx1ZSB0byBleGlzdGluZyBrZXlzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29uZmlnIC0gZXhpc3RpbmcgY29uZmlnIHRvIGJlIG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdUb0NvcHkgLSBuZXcgQ29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzaGFsbG93Q29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gbm90IHRvIGJlIGRlZXAgY29waWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5vdFRvQ29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgbm90IHRvIGNvcHlcbiAgICogQHJldHVybnMge29iamVjdH0gLSBjb3BpZWQgY29uZmlnXG4gICAqL1xuICBjb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7c2hhbGxvd0NvcHkgPSBbXSwgbm90VG9Db3B5ID0gW119ID0ge30pIHtcbiAgICBjb25zdCBjb3BpZWQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY3VycmVudENvbmZpZ1trZXldKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KGNvbmZpZ1RvQ29weVtrZXldKSAmJlxuICAgICAgICAhc2hhbGxvd0NvcHkuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSlcbiAgICAgICkge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBhc3NpZ24gb2JqZWN0IHZhbHVlXG4gICAgICAgIGNvcGllZFtrZXldID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZ1trZXldLCBjb25maWdUb0NvcHlba2V5XSwge1xuICAgICAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgICAgIG5vdFRvQ29weVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKGNvbmZpZ1RvQ29weVtrZXldKSAmJiAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gY29weVxuICAgICAgICBjb3BpZWRba2V5XSA9IGNvbmZpZ1RvQ29weVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZ1xuICAgICAgICBjb3BpZWRba2V5XSA9IGN1cnJlbnRDb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICByZWdpc3RlclZpc0NvbmZpZyhsYXllclZpc0NvbmZpZ3MpIHtcbiAgICBPYmplY3Qua2V5cyhsYXllclZpc0NvbmZpZ3MpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnICYmIExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0pIHtcbiAgICAgICAgLy8gaWYgYXNzaWduZWQgb25lIG9mIGRlZmF1bHQgTEFZRVJfQ09ORklHU1xuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV07XG4gICAgICB9IGVsc2UgaWYgKFsndHlwZScsICdkZWZhdWx0VmFsdWUnXS5ldmVyeShwID0+IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5oYXNPd25Qcm9wZXJ0eShwKSkpIHtcbiAgICAgICAgLy8gaWYgcHJvdmlkZWQgY3VzdG9taXplZCB2aXNDb25maWcsIGFuZCBoYXMgdHlwZSAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgLy8gVE9ETzogZnVydGhlciBjaGVjayBpZiBjdXN0b21pemVkIHZpc0NvbmZpZyBpcyB2YWxpZFxuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGF5ZXJDb2x1bW5zKCkge1xuICAgIGNvbnN0IGNvbHVtblZhbGlkYXRvcnMgPSB0aGlzLmNvbHVtblZhbGlkYXRvcnMgfHwge307XG4gICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkTGF5ZXJDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBjb2x1bW5WYWxpZGF0b3JzW2tleV1cbiAgICAgICAgICA/IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xLCB2YWxpZGF0b3I6IGNvbHVtblZhbGlkYXRvcnNba2V5XX1cbiAgICAgICAgICA6IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIG9wdGlvbmFsOiB0cnVlfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICByZXR1cm4gey4uLnJlcXVpcmVkLCAuLi5vcHRpb25hbH07XG4gIH1cblxuICB1cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsuLi50aGlzLmNvbmZpZywgLi4ubmV3Q29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZyA9IHsuLi50aGlzLmNvbmZpZy52aXNDb25maWcsIC4uLm5ld1Zpc0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKSB7XG4gICAgY29uc3Qge2NvbG9yVUk6IHByZXZpb3VzLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobmV3Q29uZmlnKSB8fCB0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yVUlQcm9wID0gT2JqZWN0LmVudHJpZXMobmV3Q29uZmlnKS5yZWR1Y2UoKGFjY3UsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGlzUGxhaW5PYmplY3QoYWNjdVtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHsuLi5hY2N1W2tleV0sIC4uLnZhbHVlfSA6IHZhbHVlXG4gICAgICB9O1xuICAgIH0sIHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpO1xuXG4gICAgY29uc3QgY29sb3JVSSA9IHtcbiAgICAgIC4uLnByZXZpb3VzLFxuICAgICAgW3Byb3BdOiBjb2xvclVJUHJvcFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtjb2xvclVJfSk7XG4gICAgLy8gaWYgY29sb3JVSVtwcm9wXSBpcyBjb2xvclJhbmdlXG4gICAgY29uc3QgaXNDb2xvclJhbmdlID0gdmlzQ29uZmlnW3Byb3BdICYmIHZpc0NvbmZpZ1twcm9wXS5jb2xvcnM7XG5cbiAgICBpZiAoaXNDb2xvclJhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIGlmICghbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgfHwgIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmN1c3RvbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIXZpc0NvbmZpZ1twcm9wXSkgcmV0dXJuO1xuICAgIGNvbnN0IHtjb2xvcnN9ID0gdmlzQ29uZmlnW3Byb3BdO1xuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSB7XG4gICAgICAuLi5jb2xvclVJW3Byb3BdLmN1c3RvbVBhbGV0dGUsXG4gICAgICBuYW1lOiAnQ3VzdG9tIFBhbGV0dGUnLFxuICAgICAgY29sb3JzOiBbLi4uY29sb3JzXVxuICAgIH07XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIGlmIG9wZW4gZHJvcGRvd24gYW5kIHByb3AgaXMgY29sb3IgcmFuZ2VcbiAgICogQXV0b21hdGljYWxseSBzZXQgY29sb3JSYW5nZUNvbmZpZydzIHN0ZXAsIHJldmVyc2VkIGFuZCB0eXBlXG4gICAqIEBwYXJhbSB7Kn0gbmV3Q29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gcHJvcFxuICAgKi9cbiAgdXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApIHtcbiAgICBpZiAodHlwZW9mIG5ld0NvbmZpZy5zaG93RHJvcGRvd24gIT09ICdudW1iZXInKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgICAgIHR5cGU6IHZpc0NvbmZpZ1twcm9wXS50eXBlLFxuICAgICAgICAgICAgc3RlcHM6IHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgdXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgLy8gb25seSB1cGRhdGUgY29sb3JSYW5nZSBpZiBjaGFuZ2VzIGluIFVJIGlzIG1hZGUgdG8gJ3JldmVyc2VkJywgJ3N0ZXBzJyBvciBzdGVwc1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9XG4gICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyAmJlxuICAgICAgWydyZXZlcnNlZCcsICdzdGVwcyddLnNvbWUoXG4gICAgICAgIGtleSA9PlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZ1trZXldICE9PVxuICAgICAgICAgICAgKHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpLmNvbG9yUmFuZ2VDb25maWdba2V5XVxuICAgICAgKTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7c3RlcHMsIHJldmVyc2VkfSA9IGNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZztcbiAgICBjb25zdCBjb2xvclJhbmdlID0gdmlzQ29uZmlnW3Byb3BdO1xuICAgIC8vIGZpbmQgYmFzZWQgb24gc3RlcCBvciByZXZlcnNlZFxuICAgIGxldCB1cGRhdGU7XG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KCdzdGVwcycpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGdldENvbG9yR3JvdXBCeU5hbWUoY29sb3JSYW5nZSk7XG5cbiAgICAgIGlmIChncm91cCkge1xuICAgICAgICBjb25zdCBzYW1lR3JvdXAgPSBDT0xPUl9SQU5HRVMuZmlsdGVyKGNyID0+IGdldENvbG9yR3JvdXBCeU5hbWUoY3IpID09PSBncm91cCk7XG5cbiAgICAgICAgdXBkYXRlID0gc2FtZUdyb3VwLmZpbmQoY3IgPT4gY3IuY29sb3JzLmxlbmd0aCA9PT0gc3RlcHMpO1xuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5yZXZlcnNlZCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHJldmVyc2VDb2xvclJhbmdlKHRydWUsIHVwZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlICYmIGNvbG9yUmFuZ2UuY29sb3JNYXApIHtcbiAgICAgICAgICB1cGRhdGUgPSB0aGlzLnVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yUmFuZ2UuY29sb3JNYXAsIHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3JldmVyc2VkJykpIHtcbiAgICAgIHVwZGF0ZSA9IHJldmVyc2VDb2xvclJhbmdlKHJldmVyc2VkLCB1cGRhdGUgfHwgY29sb3JSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7W3Byb3BdOiB1cGRhdGV9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb2xvck1hcChwcm9wLCBjb2xvck1hcCwgY29sb3JSYW5nZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7ZmllbGQsIGRvbWFpbn0gPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmFsdWUgPT4gdmFsdWUucmFuZ2UgPT09IHByb3ApO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZ1tmaWVsZF0/LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGUgPT09ICdkYXRlJykge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2F0ZWdvcnlDb2xvck1hcChjb2xvck1hcCwgdGhpcy5jb25maWdbZG9tYWluXSwgY29sb3JSYW5nZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gdHlwZSBvciB0eXBlIGlzIG5vdCBzdHJpbmcsIGJvb2xlYW4gb3IgZGF0ZVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZU51bWVyaWNDb2xvck1hcChjb2xvck1hcCwgdGhpcy5jb25maWdbZG9tYWluXSwgY29sb3JSYW5nZSk7XG4gIH1cblxuICB1cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCBkb21haW4sIGNvbG9yUmFuZ2UpIHtcbiAgICBjb25zdCBjb2xvcnMgPSBjb2xvclJhbmdlLmNvbG9ycztcbiAgICBjb25zdCBhc3NpZ25lZENhdGVnb3JpZXMgPSBbXTtcbiAgICBjb25zdCBuZXdDb2xvck1hcCA9IGNvbG9yTWFwLnNsaWNlKDAsIGNvbG9ycy5sZW5ndGgpLm1hcCgoY01hcCwgaW5kZXgpID0+IHtcbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNNYXBbMF0pO1xuICAgICAgcmV0dXJuIFtjTWFwWzBdLCBjb2xvcnNbaW5kZXhdXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmFzc2lnbmVkQ29sb3JzID0gY29sb3JzLnNsaWNlKG5ld0NvbG9yTWFwLmxlbmd0aCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIHVuYXNzaWduZWRDb2xvcnMpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZG9tYWluLmZpbmQoZCA9PiAhYXNzaWduZWRDYXRlZ29yaWVzLmluY2x1ZGVzKGQpKTtcbiAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBhc3NpZ25lZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XG4gICAgICBuZXdDb2xvck1hcC5wdXNoKFtjYXRlZ29yeSwgY29sb3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbG9yUmFuZ2UsXG4gICAgICBjb2xvck1hcDogbmV3Q29sb3JNYXBcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCBkb21haW4sIHVwZGF0ZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IHVwZGF0ZS5jb2xvcnM7XG4gICAgbGV0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBuZXdDb2xvck1hcCA9IG5ld0NvbG9yTWFwLm1hcCgoY01hcCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggPT09IG5ld0NvbG9yTWFwLmxlbmd0aCAtIDEgPyBudWxsIDogY01hcFswXTtcbiAgICAgIHJldHVybiBbdmFsdWUsIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGlmICh1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbG9yTWFwVmFsdWVzID0gY29sb3JNYXAubWFwKGMgPT4gY1swXSkuZmlsdGVyKGMgPT4gdHlwZW9mIGMgPT09ICdudW1iZXInKTtcbiAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uY29sb3JNYXBWYWx1ZXMsIGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0pO1xuICAgICAgY29uc3QgcHJldlZhbHVlID0gbmV3Q29sb3JNYXBbbmV3Q29sb3JNYXAubGVuZ3RoIC0gMl1bMF07XG4gICAgICBjb25zdCBzdGVwID0gKG1heFZhbHVlIC0gcHJldlZhbHVlKSAvICh1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCArIDEpO1xuICAgICAgbmV3Q29sb3JNYXBbbmV3Q29sb3JNYXAubGVuZ3RoIC0gMV1bMF0gPSBwcmV2VmFsdWUgKyBzdGVwO1xuXG4gICAgICBmb3IgKGNvbnN0IFtpLCBjb2xvcl0gb2YgdW5hc3NpZ25lZENvbG9ycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpID09PSB1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCAtIDEgPyBudWxsIDogcHJldlZhbHVlICsgKHN0ZXAgKiAoaSArIDIpKTtcbiAgICAgICAgbmV3Q29sb3JNYXAucHVzaChbdmFsdWUsIGNvbG9yXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGUsXG4gICAgICBjb2xvck1hcDogbmV3Q29sb3JNYXBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0FsbENvbHVtbnMoKSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIChcbiAgICAgIChjb2x1bW5zICYmXG4gICAgICBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmV2ZXJ5KHYgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih2Lm9wdGlvbmFsIHx8ICh2LnZhbHVlICYmIHYuZmllbGRJZHggPiAtMSkpO1xuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGxheWVyRGF0YVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNMYXllckRhdGEobGF5ZXJEYXRhKSB7XG4gICAgaWYgKCFsYXllckRhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4obGF5ZXJEYXRhLmRhdGEgJiYgbGF5ZXJEYXRhLmRhdGEubGVuZ3RoKTtcbiAgfVxuXG4gIGlzVmFsaWRUb1NhdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSAmJiB0aGlzLmhhc0FsbENvbHVtbnMoKTtcbiAgfVxuXG4gIHNob3VsZFJlbmRlckxheWVyKGRhdGEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMudHlwZSAmJlxuICAgICAgdGhpcy5oYXNBbGxDb2x1bW5zKCkgJiZcbiAgICAgIHRoaXMuaGFzTGF5ZXJEYXRhKGRhdGEpICYmXG4gICAgICB0eXBlb2YgdGhpcy5yZW5kZXJMYXllciA9PT0gJ2Z1bmN0aW9uJylcbiAgICApO1xuICB9XG5cbiAgZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yUmFuZ2UuY29sb3JNYXApKSB7XG4gICAgICBjb25zdCBjTWFwID0gbmV3IE1hcCgpO1xuICAgICAgY29sb3JSYW5nZS5jb2xvck1hcC5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgY01hcC5zZXQoaywgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gaGV4VG9SZ2IodikgOiB2KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgICBjb25zdCBzY2FsZSA9IFNDQUxFX0ZVTkNbY29sb3JTY2FsZV0oKVxuICAgICAgICAuZG9tYWluKEFycmF5LmZyb20oY01hcC5rZXlzKCkpKVxuICAgICAgICAucmFuZ2UoQXJyYXkuZnJvbShjTWFwLnZhbHVlcygpKSlcbiAgICAgICAgLnVua25vd24oVU5LTk9XTl9DT0xPUik7XG4gICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlLmNvbG9ycy5tYXAoaGV4VG9SZ2IpKTtcbiAgfVxuXG4gIGdldEN1c3RvbU1hcmtlcnNTY2FsZShyYW5nZSwgZmFsbGJhY2tJY29uKSB7XG4gICAgbGV0IHVua25vd25WYWx1ZSA9IGZhbGxiYWNrSWNvbiB8fCBGQUxMQkFDS19JQ09OO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybiAoKSA9PiB1bmtub3duVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXAoKTtcblxuICAgIGlmIChyYW5nZS5vdGhlcnNNYXJrZXIpIHtcbiAgICAgIHVua25vd25WYWx1ZSA9IHJhbmdlLm90aGVyc01hcmtlcjtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7dmFsdWUsIG1hcmtlclVybH0gb2YgcmFuZ2UubWFya2VyTWFwKSB7XG4gICAgICBpZiAobWFya2VyVXJsKSB7XG4gICAgICAgIG1hcHBpbmcuc2V0KHZhbHVlLCBtYXJrZXJVcmwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgZDMgc2NhbGVcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlT3JkaW5hbCgpXG4gICAgICAuZG9tYWluKEFycmF5LmZyb20obWFwcGluZy5rZXlzKCkpKVxuICAgICAgLnJhbmdlKEFycmF5LmZyb20obWFwcGluZy52YWx1ZXMoKSkpXG4gICAgICAudW5rbm93bih1bmtub3duVmFsdWUpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gdmlzdWFsIGNoYW5uZWxzIHRvIGRlY2suZ2wgYWNjZXNvcnNcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtIFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW0uZGF0YUFjY2Vzc29yIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IHBhcmFtLmRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byB1c2UgdXNlIHdpdGggZGF0YUFjY2Vzc29yXG4gICAqIEByZXR1cm4ge09iamVjdH0gYXR0cmlidXRlQWNjZXNzb3JzIC0gZGVjay5nbCBsYXllciBhdHRyaWJ1dGUgYWNjZXNzb3JzXG4gICAqL1xuICBnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFBY2Nlc3NvciA9IGRlZmF1bHREYXRhQWNjZXNzb3IsIGRhdGFDb250YWluZXJ9KSB7XG4gICAgY29uc3QgYXR0cmlidXRlQWNjZXNzb3JzID0ge307XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBmaXhlZCxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGFjY2Vzc29yLFxuICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICBudWxsVmFsdWUsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICB9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcblxuICAgICAgY29uc3Qgc2hvdWxkR2V0U2NhbGUgPSBCb29sZWFuKFxuICAgICAgICAoc2NhbGUgfHwgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHkpICYmIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgKTtcblxuICAgICAgaWYgKHNob3VsZEdldFNjYWxlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbdGhpcy5jb25maWdbc2NhbGVdLCB0aGlzLmNvbmZpZ1tkb21haW5dLCB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdXTtcbiAgICAgICAgY29uc3QgaXNGaXhlZCA9IGZpeGVkICYmIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF07XG4gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGRlY2xhcmUgYXMgY29uc3QgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHVzZSBpbiB0aGUgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSBjYWxsXG4gICAgICAgIC8vIG90aGVyd2lzZSwgdGhlIG9sZExheWVyRGF0YSBwYXJhbWV0ZXIgaW4gZm9ybWF0TGF5ZXJEYXRhIG1ldGhvZCB3aWxsIGJlIHdyb25nICh5b3UgY2FuIGNoZWNrIHRoZSBmb3JtYXRMYXllckRhdGEgVGlsZUxheWVyIG1ldGhvZCBpbiBCdWlsZGVyIGFzIGV4YW1wbGUpXG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jb25maWdbZmllbGRdO1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvblZhbHVlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXTtcblxuICAgICAgICBjb25zdCBzY2FsZUZ1bmN0aW9uID1cbiAgICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5pZGVudGl0eVxuICAgICAgICAgICAgPyBzY2FsZUlkZW50aXR5XG4gICAgICAgICAgICA6IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q29sb3JTY2FsZSguLi5hcmdzKVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jdXN0b21NYXJrZXJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDdXN0b21NYXJrZXJzU2NhbGUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2Vyc1VybFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKC4uLmFyZ3MsIGlzRml4ZWQpO1xuXG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPSBkID0+XG4gICAgICAgICAgdGhpcy5nZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgICAgICAgICAgc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgIGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgIGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgYWdncmVnYXRpb25WYWx1ZSxcbiAgICAgICAgICAgIG51bGxWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGFjY2Vzc29yIGluIGF0dHJpYnV0ZUFjY2Vzc29ycykpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICByZXR1cm4gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdKClcbiAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgLnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IGRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byBjYWxjdWxhdGUgYm91bmRzIGZvci5cbiAgICogQHBhcmFtIHsoZDoge2luZGV4OiBudW1iZXJ9LCBkYzogaW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXX0gZ2V0UG9zaXRpb24gQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcmV0dXJuIHtudW1iZXJbXXxudWxsfSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBnZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBubyBuZWVkIHRvIGxvb3AgdGhyb3VnaCB0aGUgZW50aXJlIGRhdGFzZXRcbiAgICAvLyBnZXQgYSBzYW1wbGUgb2YgZGF0YSB0byBjYWxjdWxhdGUgYm91bmRzXG4gICAgY29uc3Qgc2FtcGxlRGF0YSA9XG4gICAgICBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IE1BWF9TQU1QTEVfU0laRVxuICAgICAgICA/IGdldFNhbXBsZURhdGEoZGF0YUNvbnRhaW5lciwgTUFYX1NBTVBMRV9TSVpFKVxuICAgICAgICA6IGRhdGFDb250YWluZXI7XG5cbiAgICBjb25zdCBwb2ludHMgPSBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgIHNjYWxlLFxuICAgIGRhdGEsXG4gICAgZmllbGQsXG4gICAgLy8gSW4gYnVpbGRlciB3ZSBvdmVyd3JpdGUgdGhlIGdldFZhbHVlIGZ1bmN0aW9uIGFuZCB3ZSB1c2UgdGhlIF9hZ2dyZWdhdGlvbiBwYXJhbWV0ZXIgaW4gc3BhdGlhbCBpbmRleCBsYXllcnMgYXMgdGhlIFF1YWRrZXlMYXllci5cbiAgICBfYWdncmVnYXRpb24sXG4gICAgbnVsbFZhbHVlID0gTk9fVkFMVUVfQ09MT1IsXG4gICAgZ2V0VmFsdWUgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZVxuICApIHtcbiAgICBjb25zdCB7dHlwZX0gPSBmaWVsZDtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXR0cmlidXRlVmFsdWU7XG4gICAgaWYgKHR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNvbnZlcnQgaGVyZVxuICAgICAgLy8gc2NhbGUgRnVuY3Rpb24gc2hvdWxkIHRha2UgY2FyZSBvZiBpdFxuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZShuZXcgRGF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZU1ldGEobWV0YSkge1xuICAgIHRoaXMubWV0YSA9IHsuLi50aGlzLm1ldGEsIC4uLm1ldGF9O1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgYWxsRGF0YX0pIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBsYXllckRhdGFzZXQgPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGxheWVyRGF0YXNldDtcblxuICAgIHRoaXMudXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhsYXllckRhdGFzZXQpO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMobGF5ZXJEYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoIXRyaWdnZXJDaGFuZ2VkLmdldERhdGEgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShsYXllckRhdGFzZXQsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3R5bGVkIGZpZWxkcyB0byBtYXRjaCBvbmVzIGZyb20gbmV3IGRhdGFzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gICAqL1xuICB1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpIHtcbiAgICBmb3IgKGNvbnN0IHtmaWVsZH0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKSkge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0RhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gb2xkRmllbGQubmFtZSkgfHwgbnVsbDtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG5ld0RhdGFTZXRGaWVsZH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIG9uZSBsYXllciBkb21haW4gd2hlbiBzdGF0ZS5kYXRhIGNoYW5nZWRcbiAgICogaWYgc3RhdGUuZGF0YSBjaGFuZ2UgaXMgZHVlIG90IHVwZGF0ZSBmaWx0ZXIsIG5ld0ZpbGVyIHdpbGwgYmUgcGFzc2VkXG4gICAqIGNhbGxlZCBieSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdGaWx0ZXJcbiAgICogQHJldHVybnMge29iamVjdH0gbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzLCBuZXdGaWx0ZXIpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtzY2FsZX0gPSBjaGFubmVsO1xuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgICAgLy8gb3JkaW5hbCBkb21haW4gaXMgYmFzZWQgb24gZGF0YUNvbnRhaW5lciwgaWYgb25seSBmaWx0ZXIgY2hhbmdlZFxuICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW5cbiAgICAgIGlmICghbmV3RmlsdGVyIHx8IHNjYWxlVHlwZSAhPT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgICBjb25zdCB7ZG9tYWlufSA9IGNoYW5uZWw7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKHRhYmxlLCBjaGFubmVsKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2RvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0RGF0YXNldChkYXRhc2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhSWQgPyBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB2aXN1YWwgY2hhbm5lbCBmaWVsZCBhbmQgc2NhbGVzIGJhc2VkIG9uIHN1cHBvcnRlZCBmaWVsZCAmIHNjYWxlIHR5cGVcbiAgICogQHBhcmFtIGNoYW5uZWxcbiAgICovXG4gIHZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgdHlwZSBiYXNlZCBvbiBjaGFubmVsU2NhbGVUeXBlXG4gICAqL1xuICB2YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBjaGFubmVsU2NhbGVUeXBlLCBzdXBwb3J0ZWRGaWVsZFR5cGVzfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICBpZiAodGhpcy5jb25maWdbZmllbGRdKSB7XG4gICAgICAvLyBpZiBmaWVsZCBpcyBzZWxlY3RlZCwgY2hlY2sgaWYgZmllbGQgdHlwZSBpcyBzdXBwb3J0ZWRcbiAgICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG5cbiAgICAgIGlmICghY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModGhpcy5jb25maWdbZmllbGRdLnR5cGUpKSB7XG4gICAgICAgIC8vIGZpZWxkIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgc2V0IGl0IGJhY2sgdG8gbnVsbFxuICAgICAgICAvLyBzZXQgc2NhbGUgYmFjayB0byBkZWZhdWx0XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG51bGx9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2NhbGUgdHlwZSBiYXNlZCBvbiBhZ2dyZWdhdGlvblxuICAgKi9cbiAgdmFsaWRhdGVTY2FsZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgaWYgKCFzY2FsZSkge1xuICAgICAgLy8gdmlzdWFsQ2hhbm5lbCBkb2Vzbid0IGhhdmUgc2NhbGVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gdGhpcy5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCk7XG4gICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3RlZCBzY2FsZSBpc1xuICAgIC8vIHN1cHBvcnRlZCwgaWYgbm90LCBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmICghc2NhbGVPcHRpb25zLmluY2x1ZGVzKHRoaXMuY29uZmlnW3NjYWxlXSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tzY2FsZV06IHNjYWxlT3B0aW9uc1swXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBzY2FsZSwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVxuICAgICAgOiBbdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKVtzY2FsZV1dO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgY2hhbm5lbCBkb21haW5cbiAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbdmlzdWFsQ2hhbm5lbC5kb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gIH1cblxuICBnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godmlzdWFsQ2hhbm5lbCA9PiB7XG4gICAgICAvLyBmaWVsZCByYW5nZSBzY2FsZSBkb21haW5cbiAgICAgIGNvbnN0IHthY2Nlc3NvciwgZmllbGQsIHNjYWxlLCBkb21haW4sIHJhbmdlLCBkZWZhdWx0VmFsdWUsIGZpeGVkfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICAgIHVwZGF0ZVRyaWdnZXJzW2FjY2Vzc29yXSA9IHtcbiAgICAgICAgW2ZpZWxkXTogdGhpcy5jb25maWdbZmllbGRdLFxuICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgIFtkb21haW5dOiB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICBbcmFuZ2VdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZVRyaWdnZXJzO1xuICB9XG5cbiAgY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCkge1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgaWYgKCFmaWVsZCB8fCAhc2NhbGUpIHtcbiAgICAgIC8vIGlmIGNvbG9yRmllbGQgb3Igc2l6ZUZpZWxkIHdlcmUgc2V0IGJhY2sgdG8gbnVsbFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm5hbWUpO1xuICAgIGlmICghc2NhbGVUeXBlIHx8ICFkYXRhU2V0RmllbGQpIHtcbiAgICAgIC8vIGlmIG5ldyBkYXRhc2V0IGRvZXNuJ3QgY29udGFpbiBwcmV2aW91c2x5IHNldCBmaWVsZFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFzZXQuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBzY2FsZVR5cGUpIHx8IGRlZmF1bHREb21haW47XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gdGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSAmJiBvYmplY3RJbmZvLm9iamVjdCA/IG9iamVjdEluZm8ub2JqZWN0IDogbnVsbDtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gb2JqZWN0SW5mbz8ucGlja2VkICYmIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZSwgZml4ZWRSYWRpdXMpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCBmaXhlZCA9IGZpeGVkUmFkaXVzID09PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgOiBmaXhlZFJhZGl1cztcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZml4ZWQgPyAxIDogKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpICogdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlKGZpeGVkUmFkaXVzKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3QgZml4ZWQgPSBmaXhlZFJhZGl1cyA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzIDogZml4ZWRSYWRpdXM7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICByZXR1cm4gZml4ZWQgPyAxIDogKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpO1xuICB9XG5cbiAgZ2V0TWF4TWFya2VyU2l6ZSgpIHtcbiAgICBjb25zdCB7cmFkaXVzRmllbGQsIHNpemVGaWVsZCwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtyYWRpdXNSYW5nZSwgcmFkaXVzfSA9IHZpc0NvbmZpZztcbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0ZpZWxkIHx8IHNpemVGaWVsZDtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChmaWVsZCAmJiByYWRpdXNSYW5nZSA/IHJhZGl1c1JhbmdlWzFdIDogcmFkaXVzKSk7XG4gIH1cblxuICBnZXRSYWRpdXNVbml0KGZpeGVkUmFkaXVzKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gJ3BpeGVscyc7XG4gICAgfVxuXG4gICAgY29uc3QgZml4ZWQgPSBmaXhlZFJhZGl1cyA9PT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzIDogZml4ZWRSYWRpdXM7XG5cbiAgICByZXR1cm4gZml4ZWQgPyAnbWV0ZXJzJyA6ICdwaXhlbHMnO1xuICB9XG5cbiAgc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiAhdGhpcy5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgYnJ1c2hpbmdUYXJnZXQpIHtcbiAgICBjb25zdCB7YnJ1c2h9ID0gaW50ZXJhY3Rpb25Db25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gYnJ1c2hpbmdcbiAgICAgIGF1dG9IaWdobGlnaHQ6ICFicnVzaC5lbmFibGVkLFxuICAgICAgYnJ1c2hpbmdSYWRpdXM6IGJydXNoLmNvbmZpZy5zaXplICogMTAwMCxcbiAgICAgIGJydXNoaW5nVGFyZ2V0OiBicnVzaGluZ1RhcmdldCB8fCAnc291cmNlJyxcbiAgICAgIGJydXNoaW5nRW5hYmxlZDogYnJ1c2guZW5hYmxlZFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0RGVja0xheWVyUHJvcHMoe2lkeCwgZ3B1RmlsdGVyLCBtYXBTdGF0ZSwgdmlzaWJsZSwgbWFza1BvbHlnb259KSB7XG4gICAgY29uc3QgbWFza0V4dGVuc2lvblByb3BzID0gZ2V0TWFza0V4dGVuc2lvblByb3BzKG1hc2tQb2x5Z29uKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWFza0V4dGVuc2lvblByb3BzLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpZHgsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICBwaWNrYWJsZTogdGhpcy5oYXNJbnRlcmFjdGl2aXR5LFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWluLFxuICAgICAgICBtYXg6IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20ubWF4XG4gICAgICB9LFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbiwgLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKHtnZXRQb3NpdGlvbiwgZ2V0UGl4ZWxPZmZzZXQsIHVwZGF0ZVRyaWdnZXJzLCBzaGFyZWRQcm9wc30sIHJlbmRlck9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgbWFwU3RhdGV9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIGRhdGEudGV4dExhYmVscy5yZWR1Y2UoKGFjY3UsIGQsIGkpID0+IHtcbiAgICAgIGlmIChkLmdldFRleHQpIHtcbiAgICAgICAgYWNjdS5wdXNoKFxuICAgICAgICAgIG5ldyBUZXh0TGF5ZXIoe1xuICAgICAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tbGFiZWwtJHt0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWV9YCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICAgIGdldFRleHQ6IGQuZ2V0VGV4dCxcbiAgICAgICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICAgICAgY2hhcmFjdGVyU2V0OiBkLmNoYXJhY3RlclNldCxcbiAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiBnZXRQaXhlbE9mZnNldCh0ZXh0TGFiZWxbaV0pLFxuICAgICAgICAgICAgZ2V0U2l6ZTogMSxcbiAgICAgICAgICAgIHNpemVTY2FsZTogdGV4dExhYmVsW2ldLnNpemUsXG4gICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICAgICAgZ2V0VGV4dDogdGV4dExhYmVsW2ldLmZpZWxkPy5uYW1lLFxuICAgICAgICAgICAgICBnZXRQaXhlbE9mZnNldDoge1xuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiB0ZXh0TGFiZWxbaV0uYWxpZ25tZW50LFxuICAgICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gY3VzdG9tTWFya2Vyc1N0YXR1cyBSZWNvcmQ8dXJsLCBVcmxTdGF0dXM+IHByb3ZpZGVkIGJ5IGJ1aWxkZXIsIFVybFN0YXR1cyBgb2tgIG1lYW5zIFVSTCBpcyBvayBhbmQgcmVhZHkgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoY3VzdG9tTWFya2Vyc1N0YXR1cywgaWNvblVybEFjY2Vzc29yKSB7XG4gICAgY29uc3QgbWF4SWNvblNpemUgPSB0aGlzLmdldE1heE1hcmtlclNpemUoKTtcblxuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGNvbnN0IHdhbnRlZFVybCA9XG4gICAgICAgICh0eXBlb2YgaWNvblVybEFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSA/IGljb25VcmxBY2Nlc3NvcihkKSA6IGljb25VcmxBY2Nlc3NvcjtcbiAgICAgIGNvbnN0IHVybCA9IGN1c3RvbU1hcmtlcnNTdGF0dXM/Llt3YW50ZWRVcmxdID09PSAnb2snID8gd2FudGVkVXJsIDogRkFMTEJBQ0tfSUNPTjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHt1cmx9QEAke21heEljb25TaXplfWAsXG4gICAgICAgIHVybCxcbiAgICAgICAgd2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICBoZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICBtYXNrOiB0cnVlXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXX0=
@@ -350,8 +350,6 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
350
350
  }, {
351
351
  key: "renderLayer",
352
352
  value: function renderLayer(opts) {
353
- var _this$interactivitySe;
354
-
355
353
  var data = opts.data,
356
354
  gpuFilter = opts.gpuFilter,
357
355
  objectHovered = opts.objectHovered;
@@ -376,7 +374,7 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
376
374
  var opaOverwrite = {
377
375
  opacity: visConfig.strokeOpacity
378
376
  };
379
- var pickable = (_this$interactivitySe = this.interactivitySettings) === null || _this$interactivitySe === void 0 ? void 0 : _this$interactivitySe.enabled;
377
+ var pickable = this.hasInteractivity;
380
378
  var hoveredObject = this.hasHoveredObject(objectHovered);
381
379
  return [new _layers.GeoJsonLayer(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), layerProps), data), {}, {
382
380
  pickable: pickable,
@@ -453,4 +451,4 @@ var GeoJsonLayer = /*#__PURE__*/function (_Layer) {
453
451
  }(_baseLayer["default"]);
454
452
 
455
453
  exports["default"] = GeoJsonLayer;
456
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLmpzIl0sIm5hbWVzIjpbIlNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyIsIkRBVEFfVFlQRVMiLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJvcGFjaXR5Iiwic3Ryb2tlT3BhY2l0eSIsIkxBWUVSX1ZJU19DT05GSUdTIiwicHJvcGVydHkiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvciIsImNvbG9yUmFuZ2UiLCJzdHJva2VDb2xvclJhbmdlIiwicmFkaXVzIiwic2l6ZVJhbmdlIiwicmFkaXVzUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImVsZXZhdGlvblNjYWxlIiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImdlb0pzb25SZXF1aXJlZENvbHVtbnMiLCJmZWF0dXJlQWNjZXNzb3IiLCJnZW9qc29uIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJkZWZhdWx0RWxldmF0aW9uIiwiZGVmYXVsdExpbmVXaWR0aCIsImRlZmF1bHRSYWRpdXMiLCJHZW9Kc29uTGF5ZXIiLCJwcm9wcyIsImRhdGFUb0ZlYXR1cmUiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsIkdlb2pzb25MYXllckljb24iLCJ2aXN1YWxDaGFubmVscyIsImNvbG9yIiwiYWNjZXNzb3IiLCJjb25kaXRpb24iLCJ2aXNDb25maWciLCJudWxsVmFsdWUiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsInByb3BlcnRpZXMiLCJmaWxsQ29sb3IiLCJmaWVsZCIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJsaW5lQ29sb3IiLCJzaXplIiwibGluZVdpZHRoIiwiaGVpZ2h0IiwiZWxldmF0aW9uIiwiaGVpZ2h0RmllbGQiLCJoZWlnaHREb21haW4iLCJoZWlnaHRTY2FsZSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwicmFkaXVzU2NhbGUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JEb21haW4iLCJzdHJva2VDb2xvclNjYWxlIiwib2JqZWN0Iiwicm93IiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwibWFwIiwiaSIsImZpbHRlciIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwiZ3B1RmlsdGVyIiwidXBkYXRlRGF0YSIsImRhdGEiLCJjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmllbGRJbmRleCIsImluZGV4QWNjZXNzb3IiLCJmIiwiZGF0YUFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZ2V0RmVhdHVyZSIsImJvdW5kcyIsImZpeGVkUmFkaXVzIiwiQm9vbGVhbiIsImZpbmQiLCJmZWF0dXJlVHlwZXMiLCJ1cGRhdGVNZXRhIiwidXBkYXRlTGF5ZXJNZXRhIiwibWV0YSIsInBvbHlnb24iLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNvbG9yTWFrZXIiLCJuZXh0IiwidmFsdWUiLCJwb2ludCIsIm9wdHMiLCJvYmplY3RIb3ZlcmVkIiwiZ2V0UmFkaXVzU2NhbGUiLCJyYWRpdXNVbml0cyIsImdldFJhZGl1c1VuaXQiLCJsYXllclByb3BzIiwibGluZVdpZHRoU2NhbGUiLCJwb2ludFJhZGl1c1NjYWxlIiwibGluZU1pdGVyTGltaXQiLCJ1cGRhdGVUcmlnZ2VycyIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsImZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsIm9wYU92ZXJ3cml0ZSIsInBpY2thYmxlIiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiZW5hYmxlZCIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwiRGVja0dMR2VvSnNvbkxheWVyIiwiaGlnaGxpZ2h0Q29sb3IiLCJISUdITElHSF9DT0xPUl8zRCIsImF1dG9IaWdobGlnaHQiLCJleHRydWRlZCIsIndyYXBMb25naXR1ZGUiLCJyb3VuZGVkIiwibGluZVdpZHRoVW5pdHMiLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsImdldExpbmVXaWR0aCIsImdldFJhZGl1cyIsImdldEVsZXZhdGlvbiIsImdldExpbmVDb2xvciIsImdldEZpbGxDb2xvciIsImxhYmVsIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJ0eXBlIiwiYW5hbHl6ZXJUeXBlIiwibmFtZSIsImRlZmF1bHRDb2x1bW5zIiwiR0VPSlNPTl9GSUVMRFMiLCJmb3VuZENvbHVtbnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwibGVuZ3RoIiwicmVwbGFjZSIsImlzVmlzaWJsZSIsIkxheWVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLHdCQUF3Qix3RkFDM0JDLHlCQUFXQyxRQURnQixFQUNMLElBREssMkRBRTNCRCx5QkFBV0Usb0JBRmdCLEVBRU8sSUFGUCx5QkFBOUI7QUFLTyxJQUFNQyxpQkFBaUIsR0FBRztBQUMvQkMsRUFBQUEsT0FBTyxFQUFFLFNBRHNCO0FBRS9CQyxFQUFBQSxhQUFhLGtDQUNSQyxnQ0FBa0JGLE9BRFY7QUFFWEcsSUFBQUEsUUFBUSxFQUFFO0FBRkMsSUFGa0I7QUFNL0JDLEVBQUFBLFNBQVMsa0NBQ0pGLGdDQUFrQkUsU0FEZDtBQUVQQyxJQUFBQSxZQUFZLEVBQUU7QUFGUCxJQU5zQjtBQVUvQkMsRUFBQUEsV0FBVyxFQUFFLGFBVmtCO0FBVy9CQyxFQUFBQSxVQUFVLEVBQUUsWUFYbUI7QUFZL0JDLEVBQUFBLGdCQUFnQixFQUFFLGtCQVphO0FBYS9CQyxFQUFBQSxNQUFNLEVBQUUsUUFidUI7QUFlL0JDLEVBQUFBLFNBQVMsRUFBRSxrQkFmb0I7QUFnQi9CQyxFQUFBQSxXQUFXLEVBQUUsYUFoQmtCO0FBaUIvQkMsRUFBQUEsV0FBVyxFQUFFLGdCQWpCa0I7QUFrQi9CQyxFQUFBQSxjQUFjLEVBQUUsZ0JBbEJlO0FBbUIvQkMsRUFBQUEseUJBQXlCLEVBQUUsMkJBbkJJO0FBb0IvQkMsRUFBQUEsT0FBTyxFQUFFLFNBcEJzQjtBQXFCL0JDLEVBQUFBLE1BQU0sRUFBRSxRQXJCdUI7QUFzQi9CQyxFQUFBQSxRQUFRLEVBQUUsVUF0QnFCO0FBdUIvQkMsRUFBQUEsU0FBUyxFQUFFO0FBdkJvQixDQUExQjs7QUEwQkEsSUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxTQUFELENBQS9COzs7QUFDQSxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCO0FBQUEsTUFBRUMsT0FBRixRQUFFQSxPQUFGO0FBQUEsU0FBZSxVQUFBQyxFQUFFO0FBQUEsV0FBSSxVQUFBQyxDQUFDO0FBQUEsYUFBSUQsRUFBRSxDQUFDRSxPQUFILENBQVdELENBQUMsQ0FBQ0UsS0FBYixFQUFvQkosT0FBTyxDQUFDSyxRQUE1QixDQUFKO0FBQUEsS0FBTDtBQUFBLEdBQWpCO0FBQUEsQ0FBeEIsQyxDQUVQOzs7O0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7O0FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsQ0FBekI7O0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQXRCOzs7SUFFY0MsWTs7Ozs7QUFDbkIsd0JBQVlDLEtBQVosRUFBbUI7QUFBQTs7QUFBQTtBQUNqQiw4QkFBTUEsS0FBTjtBQUVBLFVBQUtDLGFBQUwsR0FBcUIsRUFBckI7O0FBQ0EsVUFBS0MsaUJBQUwsQ0FBdUJsQyxpQkFBdkI7O0FBQ0EsVUFBS21DLG1CQUFMLEdBQTJCLFVBQUFDLGFBQWE7QUFBQSxhQUFJZixlQUFlLENBQUMsTUFBS2dCLE1BQUwsQ0FBWUMsT0FBYixDQUFmLENBQXFDRixhQUFyQyxDQUFKO0FBQUEsS0FBeEM7O0FBTGlCO0FBTWxCOzs7O1NBRUQsZUFBVztBQUNULGFBQU8sU0FBUDtBQUNEOzs7U0FFRCxlQUFXO0FBQ1QsYUFBTyxTQUFQO0FBQ0Q7OztTQUVELGVBQWdCO0FBQ2QsYUFBT0csNEJBQVA7QUFDRDs7O1NBRUQsZUFBMkI7QUFDekIsYUFBT25CLHNCQUFQO0FBQ0Q7OztTQUVELGVBQXFCO0FBQ25CLFVBQU1vQixjQUFjLDBHQUFwQjtBQUNBLGFBQU87QUFDTEMsUUFBQUEsS0FBSyxrQ0FDQUQsY0FBYyxDQUFDQyxLQURmO0FBRUhDLFVBQUFBLFFBQVEsRUFBRSxjQUZQO0FBR0hDLFVBQUFBLFNBQVMsRUFBRSxtQkFBQU4sTUFBTTtBQUFBLG1CQUFJQSxNQUFNLENBQUNPLFNBQVAsQ0FBaUIzQixNQUFyQjtBQUFBLFdBSGQ7QUFJSDRCLFVBQUFBLFNBQVMsRUFBRUwsY0FBYyxDQUFDQyxLQUFmLENBQXFCSSxTQUo3QjtBQUtIQyxVQUFBQSxpQkFBaUIsRUFBRSwyQkFBQVQsTUFBTTtBQUFBLG1CQUFJLFVBQUFiLENBQUM7QUFBQSxxQkFBSUEsQ0FBQyxDQUFDdUIsVUFBRixDQUFhQyxTQUFiLElBQTBCWCxNQUFNLENBQUNJLEtBQXJDO0FBQUEsYUFBTDtBQUFBLFdBTHRCO0FBTUg7QUFDQW5DLFVBQUFBLFlBQVksRUFBRSxzQkFBQStCLE1BQU07QUFBQSxtQkFBSUEsTUFBTSxDQUFDSSxLQUFYO0FBQUE7QUFQakIsVUFEQTtBQVVMbEMsUUFBQUEsV0FBVyxFQUFFO0FBQ1hILFVBQUFBLFFBQVEsRUFBRSxhQURDO0FBRVg2QyxVQUFBQSxLQUFLLEVBQUUsa0JBRkk7QUFHWEMsVUFBQUEsS0FBSyxFQUFFLGtCQUhJO0FBSVhDLFVBQUFBLE1BQU0sRUFBRSxtQkFKRztBQUtYQyxVQUFBQSxLQUFLLEVBQUUsa0JBTEk7QUFNWEMsVUFBQUEsR0FBRyxFQUFFLGFBTk07QUFPWEMsVUFBQUEsZ0JBQWdCLEVBQUVDLGdDQUFlZCxLQVB0QjtBQVFYQyxVQUFBQSxRQUFRLEVBQUUsY0FSQztBQVNYQyxVQUFBQSxTQUFTLEVBQUUsbUJBQUFOLE1BQU07QUFBQSxtQkFBSUEsTUFBTSxDQUFDTyxTQUFQLENBQWlCNUIsT0FBckI7QUFBQSxXQVROO0FBVVg2QixVQUFBQSxTQUFTLEVBQUVMLGNBQWMsQ0FBQ0MsS0FBZixDQUFxQkksU0FWckI7QUFXWEMsVUFBQUEsaUJBQWlCLEVBQUUsMkJBQUFULE1BQU07QUFBQSxtQkFBSSxVQUFBYixDQUFDO0FBQUEscUJBQzVCQSxDQUFDLENBQUN1QixVQUFGLENBQWFTLFNBQWIsSUFBMEJuQixNQUFNLENBQUNPLFNBQVAsQ0FBaUJyQyxXQUEzQyxJQUEwRDhCLE1BQU0sQ0FBQ0ksS0FEckM7QUFBQSxhQUFMO0FBQUEsV0FYZDtBQWFYO0FBQ0FuQyxVQUFBQSxZQUFZLEVBQUUsc0JBQUErQixNQUFNO0FBQUEsbUJBQUlBLE1BQU0sQ0FBQ08sU0FBUCxDQUFpQnJDLFdBQWpCLElBQWdDOEIsTUFBTSxDQUFDSSxLQUEzQztBQUFBO0FBZFQsU0FWUjtBQTBCTGdCLFFBQUFBLElBQUksa0NBQ0NqQixjQUFjLENBQUNpQixJQURoQjtBQUVGckQsVUFBQUEsUUFBUSxFQUFFLFFBRlI7QUFHRnNDLFVBQUFBLFFBQVEsRUFBRSxjQUhSO0FBSUZDLFVBQUFBLFNBQVMsRUFBRSxtQkFBQU4sTUFBTTtBQUFBLG1CQUFJQSxNQUFNLENBQUNPLFNBQVAsQ0FBaUI1QixPQUFyQjtBQUFBLFdBSmY7QUFLRjZCLFVBQUFBLFNBQVMsRUFBRSxDQUxUO0FBTUZDLFVBQUFBLGlCQUFpQixFQUFFO0FBQUEsbUJBQU0sVUFBQXRCLENBQUM7QUFBQSxxQkFBSUEsQ0FBQyxDQUFDdUIsVUFBRixDQUFhVyxTQUFiLElBQTBCN0IsZ0JBQTlCO0FBQUEsYUFBUDtBQUFBO0FBTmpCLFVBMUJDO0FBa0NMOEIsUUFBQUEsTUFBTSxFQUFFO0FBQ052RCxVQUFBQSxRQUFRLEVBQUUsUUFESjtBQUVONkMsVUFBQUEsS0FBSyxFQUFFLGFBRkQ7QUFHTkMsVUFBQUEsS0FBSyxFQUFFLGFBSEQ7QUFJTkMsVUFBQUEsTUFBTSxFQUFFLGNBSkY7QUFLTkMsVUFBQUEsS0FBSyxFQUFFLGFBTEQ7QUFNTkMsVUFBQUEsR0FBRyxFQUFFLFFBTkM7QUFPTkMsVUFBQUEsZ0JBQWdCLEVBQUVDLGdDQUFlRSxJQVAzQjtBQVFOZixVQUFBQSxRQUFRLEVBQUUsY0FSSjtBQVNOQyxVQUFBQSxTQUFTLEVBQUUsbUJBQUFOLE1BQU07QUFBQSxtQkFBSUEsTUFBTSxDQUFDTyxTQUFQLENBQWlCMUIsUUFBckI7QUFBQSxXQVRYO0FBVU4yQixVQUFBQSxTQUFTLEVBQUUsQ0FWTDtBQVdOQyxVQUFBQSxpQkFBaUIsRUFBRTtBQUFBLG1CQUFNLFVBQUF0QixDQUFDO0FBQUEscUJBQUlBLENBQUMsQ0FBQ3VCLFVBQUYsQ0FBYWEsU0FBYixJQUEwQmhDLGdCQUE5QjtBQUFBLGFBQVA7QUFBQTtBQVhiLFNBbENIO0FBK0NMbEIsUUFBQUEsTUFBTSxFQUFFO0FBQ05OLFVBQUFBLFFBQVEsRUFBRSxRQURKO0FBRU42QyxVQUFBQSxLQUFLLEVBQUUsYUFGRDtBQUdOQyxVQUFBQSxLQUFLLEVBQUUsYUFIRDtBQUlOQyxVQUFBQSxNQUFNLEVBQUUsY0FKRjtBQUtOQyxVQUFBQSxLQUFLLEVBQUUsYUFMRDtBQU1OQyxVQUFBQSxHQUFHLEVBQUUsUUFOQztBQU9OQyxVQUFBQSxnQkFBZ0IsRUFBRUMsZ0NBQWU3QyxNQVAzQjtBQVFOZ0MsVUFBQUEsUUFBUSxFQUFFLFdBUko7QUFTTkcsVUFBQUEsU0FBUyxFQUFFLENBVEw7QUFVTkMsVUFBQUEsaUJBQWlCLEVBQUU7QUFBQSxtQkFBTSxVQUFBdEIsQ0FBQztBQUFBLHFCQUFJQSxDQUFDLENBQUN1QixVQUFGLENBQWFyQyxNQUFiLElBQXVCb0IsYUFBM0I7QUFBQSxhQUFQO0FBQUE7QUFWYjtBQS9DSCxPQUFQO0FBNEREOzs7V0F5QkQsaUNBQWtDO0FBQUEsVUFBWkUsS0FBWSx1RUFBSixFQUFJO0FBQ2hDLHVLQUNpQ0EsS0FEakM7QUFHRTtBQUNBNkIsUUFBQUEsV0FBVyxFQUFFLElBSmY7QUFLRUMsUUFBQUEsWUFBWSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FMaEI7QUFNRUMsUUFBQUEsV0FBVyxFQUFFLFFBTmY7QUFRRTtBQUNBQyxRQUFBQSxXQUFXLEVBQUUsSUFUZjtBQVVFQyxRQUFBQSxZQUFZLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQVZoQjtBQVdFQyxRQUFBQSxXQUFXLEVBQUUsUUFYZjtBQWFFO0FBQ0FDLFFBQUFBLGdCQUFnQixFQUFFLElBZHBCO0FBZUVDLFFBQUFBLGlCQUFpQixFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FmckI7QUFnQkVDLFFBQUFBLGdCQUFnQixFQUFFO0FBaEJwQjtBQWtCRDs7O1dBRUQsc0JBQWFDLE1BQWIsRUFBcUJsQyxhQUFyQixFQUFvQztBQUNsQztBQUNBLGFBQU9BLGFBQWEsQ0FBQ21DLEdBQWQsQ0FBa0JELE1BQU0sQ0FBQ3ZCLFVBQVAsQ0FBa0JyQixLQUFwQyxDQUFQO0FBQ0Q7OztXQUVELHVDQUF1RDhDLFdBQXZELEVBQW9FO0FBQUE7O0FBQUEsVUFBNUNwQyxhQUE0QyxTQUE1Q0EsYUFBNEM7QUFBQSxVQUE3QnFDLGFBQTZCLFNBQTdCQSxhQUE2QjtBQUNsRSxhQUFPQSxhQUFhLENBQUNDLEdBQWQsQ0FBa0IsVUFBQUMsQ0FBQztBQUFBLGVBQUksTUFBSSxDQUFDMUMsYUFBTCxDQUFtQjBDLENBQW5CLENBQUo7QUFBQSxPQUFuQixFQUE4Q0MsTUFBOUMsQ0FBcUQsVUFBQXBELENBQUM7QUFBQSxlQUFJQSxDQUFKO0FBQUEsT0FBdEQsQ0FBUDtBQUNEOzs7V0FFRCx5QkFBZ0JxRCxRQUFoQixFQUEwQkMsWUFBMUIsRUFBd0M7QUFBQSxrQ0FDSEQsUUFBUSxDQUFDLEtBQUt4QyxNQUFMLENBQVkwQyxNQUFiLENBREw7QUFBQSxVQUMvQkMsU0FEK0IseUJBQy9CQSxTQUQrQjtBQUFBLFVBQ3BCNUMsYUFEb0IseUJBQ3BCQSxhQURvQjs7QUFBQSw2QkFFdkIsS0FBSzZDLFVBQUwsQ0FBZ0JKLFFBQWhCLEVBQTBCQyxZQUExQixDQUZ1QjtBQUFBLFVBRS9CSSxJQUYrQixvQkFFL0JBLElBRitCOztBQUl0QyxVQUFNQyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLENBQUM1RCxFQUFELEVBQUtDLENBQUwsRUFBUTRELFVBQVIsRUFBdUI7QUFDdkQsZUFBTzdELEVBQUUsQ0FBQ0UsT0FBSCxDQUFXRCxDQUFDLENBQUN1QixVQUFGLENBQWFyQixLQUF4QixFQUErQjBELFVBQS9CLENBQVA7QUFDRCxPQUZEOztBQUdBLFVBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQUMsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQ3ZDLFVBQUYsQ0FBYXJCLEtBQWpCO0FBQUEsT0FBdkI7O0FBRUEsVUFBTTZELFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUFoRSxFQUFFO0FBQUEsZUFBSSxVQUFBQyxDQUFDO0FBQUEsaUJBQUs7QUFBQ0UsWUFBQUEsS0FBSyxFQUFFRixDQUFDLENBQUN1QixVQUFGLENBQWFyQjtBQUFyQixXQUFMO0FBQUEsU0FBTDtBQUFBLE9BQXZCOztBQUNBLFVBQU04RCxTQUFTLEdBQUcsS0FBS0MscUJBQUwsQ0FBMkI7QUFBQ0YsUUFBQUEsWUFBWSxFQUFaQSxZQUFEO0FBQWVuRCxRQUFBQSxhQUFhLEVBQWJBO0FBQWYsT0FBM0IsQ0FBbEI7QUFFQTtBQUNFOEMsUUFBQUEsSUFBSSxFQUFKQSxJQURGO0FBRUVRLFFBQUFBLGNBQWMsRUFBRVYsU0FBUyxDQUFDVyxtQkFBVixDQUE4QnZELGFBQTlCLEVBQ2RpRCxhQURjLEVBRWRGLHlCQUZjO0FBRmxCLFNBTUtLLFNBTkw7QUFRRDs7O1dBRUQseUJBQWdCcEQsYUFBaEIsRUFBK0I7QUFDN0IsVUFBTXdELFVBQVUsR0FBRyxLQUFLekQsbUJBQUwsQ0FBeUJDLGFBQXpCLENBQW5CO0FBQ0EsV0FBS0gsYUFBTCxHQUFxQixzQ0FBbUJHLGFBQW5CLEVBQWtDd0QsVUFBbEMsQ0FBckIsQ0FGNkIsQ0FJN0I7O0FBQ0EsVUFBTUMsTUFBTSxHQUFHLG9DQUFpQixLQUFLNUQsYUFBdEIsQ0FBZixDQUw2QixDQU03Qjs7QUFDQSxVQUFNNkQsV0FBVyxHQUFHQyxPQUFPLENBQ3pCLEtBQUs5RCxhQUFMLENBQW1CK0QsSUFBbkIsQ0FBd0IsVUFBQXhFLENBQUM7QUFBQSxlQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ3VCLFVBQVAsSUFBcUJ2QixDQUFDLENBQUN1QixVQUFGLENBQWFyQyxNQUF0QztBQUFBLE9BQXpCLENBRHlCLENBQTNCLENBUDZCLENBVzdCOztBQUNBLFVBQU11RixZQUFZLEdBQUcsMENBQXVCLEtBQUtoRSxhQUE1QixDQUFyQjtBQUVBLFdBQUtpRSxVQUFMLENBQWdCO0FBQUNMLFFBQUFBLE1BQU0sRUFBTkEsTUFBRDtBQUFTQyxRQUFBQSxXQUFXLEVBQVhBLFdBQVQ7QUFBc0JHLFFBQUFBLFlBQVksRUFBWkE7QUFBdEIsT0FBaEI7QUFDRDs7O1dBRUQsc0NBQXVDO0FBQUEsVUFBaEI3RCxhQUFnQixTQUFoQkEsYUFBZ0I7QUFDckMsV0FBSytELGVBQUwsQ0FBcUIvRCxhQUFyQjtBQURxQyxVQUc5QjZELFlBSDhCLEdBR2QsS0FBS0csSUFIUyxDQUc5QkgsWUFIOEIsRUFJckM7O0FBQ0EsVUFBSUEsWUFBWSxJQUFJQSxZQUFZLENBQUNJLE9BQWpDLEVBQTBDO0FBQ3hDO0FBQ0EsZUFBTyxLQUFLQyxvQkFBTCxDQUEwQjtBQUMvQnJGLFVBQUFBLE1BQU0sRUFBRSxJQUR1QjtBQUUvQkQsVUFBQUEsT0FBTyxFQUFFLElBRnNCO0FBRy9CVCxVQUFBQSxXQUFXLEVBQUVnRyxzQkFBV0MsSUFBWCxHQUFrQkM7QUFIQSxTQUExQixDQUFQO0FBS0QsT0FQRCxNQU9PLElBQUlSLFlBQVksSUFBSUEsWUFBWSxDQUFDUyxLQUFqQyxFQUF3QztBQUM3QztBQUNBLGVBQU8sS0FBS0osb0JBQUwsQ0FBMEI7QUFBQ3JGLFVBQUFBLE1BQU0sRUFBRSxJQUFUO0FBQWVELFVBQUFBLE9BQU8sRUFBRTtBQUF4QixTQUExQixDQUFQO0FBQ0Q7O0FBRUQsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELHFCQUFZMkYsSUFBWixFQUFrQjtBQUFBOztBQUFBLFVBQ1R6QixJQURTLEdBQ3lCeUIsSUFEekIsQ0FDVHpCLElBRFM7QUFBQSxVQUNIRixTQURHLEdBQ3lCMkIsSUFEekIsQ0FDSDNCLFNBREc7QUFBQSxVQUNRNEIsYUFEUixHQUN5QkQsSUFEekIsQ0FDUUMsYUFEUjtBQUFBLHVCQUdvQixLQUFLUixJQUh6QjtBQUFBLFVBR1ROLFdBSFMsY0FHVEEsV0FIUztBQUFBLFVBR0lHLFlBSEosY0FHSUEsWUFISjtBQUloQixVQUFNL0IsV0FBVyxHQUFHLEtBQUsyQyxjQUFMLENBQW9CZixXQUFwQixDQUFwQjtBQUNBLFVBQU1nQixXQUFXLEdBQUcsS0FBS0MsYUFBTCxDQUFtQmpCLFdBQW5CLENBQXBCO0FBTGdCLFVBT1RsRCxTQVBTLEdBT0ksS0FBS1AsTUFQVCxDQU9UTyxTQVBTO0FBU2hCLFVBQU1vRSxVQUFVLEdBQUc7QUFDakJDLFFBQUFBLGNBQWMsRUFBRXJFLFNBQVMsQ0FBQ3ZDLFNBRFQ7QUFFakJTLFFBQUFBLGNBQWMsRUFBRThCLFNBQVMsQ0FBQzlCLGNBRlQ7QUFHakJvRyxRQUFBQSxnQkFBZ0IsRUFBRWhELFdBSEQ7QUFJakJpRCxRQUFBQSxjQUFjLEVBQUU7QUFKQyxPQUFuQjs7QUFPQSxVQUFNQyxjQUFjLG1DQUNmLEtBQUtDLDhCQUFMLEVBRGU7QUFFbEIzQixRQUFBQSxjQUFjLEVBQUVWLFNBQVMsQ0FBQ3NDO0FBRlIsUUFBcEI7O0FBS0EsVUFBTUMsaUJBQWlCLEdBQUcsS0FBS0Msd0JBQUwsQ0FBOEJiLElBQTlCLENBQTFCO0FBQ0EsVUFBTWMsWUFBWSxHQUFHO0FBQ25CeEgsUUFBQUEsT0FBTyxFQUFFMkMsU0FBUyxDQUFDMUM7QUFEQSxPQUFyQjtBQUlBLFVBQU13SCxRQUFRLDRCQUFHLEtBQUtDLHFCQUFSLDBEQUFHLHNCQUE0QkMsT0FBN0M7QUFDQSxVQUFNQyxhQUFhLEdBQUcsS0FBS0MsZ0JBQUwsQ0FBc0JsQixhQUF0QixDQUF0QjtBQUVBLGNBQ0UsSUFBSW1CLG9CQUFKLDZEQUNLUixpQkFETCxHQUVLUCxVQUZMLEdBR0s5QixJQUhMO0FBSUV3QyxRQUFBQSxRQUFRLEVBQVJBLFFBSkY7QUFLRU0sUUFBQUEsY0FBYyxFQUFFQyxrQ0FMbEI7QUFNRUMsUUFBQUEsYUFBYSxFQUFFdEYsU0FBUyxDQUFDMUIsUUFBVixJQUFzQndHLFFBTnZDO0FBT0UxRyxRQUFBQSxPQUFPLEVBQUU0QixTQUFTLENBQUM1QixPQVByQjtBQVFFQyxRQUFBQSxNQUFNLEVBQUUyQixTQUFTLENBQUMzQixNQVJwQjtBQVNFa0gsUUFBQUEsUUFBUSxFQUFFdkYsU0FBUyxDQUFDMUIsUUFUdEI7QUFVRUMsUUFBQUEsU0FBUyxFQUFFeUIsU0FBUyxDQUFDekIsU0FWdkI7QUFXRWlILFFBQUFBLGFBQWEsRUFBRSxLQVhqQjtBQVlFakIsUUFBQUEsY0FBYyxFQUFFLENBWmxCO0FBYUVrQixRQUFBQSxPQUFPLEVBQUUsSUFiWDtBQWNFdkIsUUFBQUEsV0FBVyxFQUFYQSxXQWRGO0FBZUV3QixRQUFBQSxjQUFjLEVBQUUsUUFmbEI7QUFnQkVsQixRQUFBQSxjQUFjLEVBQWRBLGNBaEJGO0FBaUJFbUIsUUFBQUEsY0FBYyxnREFDUnRDLFlBQVksQ0FBQ0ksT0FBYixHQUF1QjtBQUFDLDZCQUFtQm9CO0FBQXBCLFNBQXZCLEdBQTJELEVBRG5ELEdBRVJ4QixZQUFZLENBQUN1QyxJQUFiLEdBQW9CO0FBQUNDLFVBQUFBLFdBQVcsRUFBRWhCO0FBQWQsU0FBcEIsR0FBa0QsRUFGMUMsR0FHUnhCLFlBQVksQ0FBQ1MsS0FBYixHQUNBO0FBQ0VnQyxVQUFBQSxNQUFNLEVBQUU7QUFDTkMsWUFBQUEsV0FBVyxFQUFFL0YsU0FBUyxDQUFDMUM7QUFEakI7QUFEVixTQURBLEdBTUEsRUFUUTtBQWpCaEIsU0FERiw2Q0E4Qk0ySCxhQUFhLElBQUksQ0FBQ2pGLFNBQVMsQ0FBQzFCLFFBQTVCLEdBQ0EsQ0FDRSxJQUFJNkcsb0JBQUosK0NBQ0ssS0FBS2EseUJBQUwsRUFETCxHQUVLNUIsVUFGTDtBQUdFb0IsUUFBQUEsYUFBYSxFQUFFLEtBSGpCO0FBSUVsRCxRQUFBQSxJQUFJLEVBQUUsQ0FBQzJDLGFBQUQsQ0FKUjtBQUtFZ0IsUUFBQUEsWUFBWSxFQUFFM0QsSUFBSSxDQUFDMkQsWUFMckI7QUFNRUMsUUFBQUEsU0FBUyxFQUFFNUQsSUFBSSxDQUFDNEQsU0FObEI7QUFPRUMsUUFBQUEsWUFBWSxFQUFFN0QsSUFBSSxDQUFDNkQsWUFQckI7QUFRRUMsUUFBQUEsWUFBWSxFQUFFLEtBQUszRyxNQUFMLENBQVkyRixjQVI1QjtBQVNFaUIsUUFBQUEsWUFBWSxFQUFFLEtBQUs1RyxNQUFMLENBQVkyRixjQVQ1QjtBQVVFO0FBQ0FoSCxRQUFBQSxPQUFPLEVBQUUsSUFYWDtBQVlFQyxRQUFBQSxNQUFNLEVBQUU7QUFaVixTQURGLENBREEsR0FpQkEsRUEvQ047QUFpREQ7OztXQTlMRCxzQ0FBbUQ7QUFBQTs7QUFBQSxVQUFyQmlJLEtBQXFCLFNBQXJCQSxLQUFxQjtBQUFBLCtCQUFkQyxNQUFjO0FBQUEsVUFBZEEsTUFBYyw2QkFBTCxFQUFLO0FBQ2pELFVBQU1DLGNBQWMsR0FBR0QsTUFBTSxDQUMxQnZFLE1BRG9CLENBQ2IsVUFBQVUsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQytELElBQUYsS0FBVyxTQUFYLElBQXdCekosd0JBQXdCLENBQUMwRixDQUFDLENBQUNnRSxZQUFILENBQXBEO0FBQUEsT0FEWSxFQUVwQjVFLEdBRm9CLENBRWhCLFVBQUFZLENBQUM7QUFBQSxlQUFJQSxDQUFDLENBQUNpRSxJQUFOO0FBQUEsT0FGZSxDQUF2QjtBQUlBLFVBQU1DLGNBQWMsR0FBRztBQUNyQmxJLFFBQUFBLE9BQU8sRUFBRSxzRUFBU21JLGdDQUFlbkksT0FBeEIsdUNBQW9DOEgsY0FBcEM7QUFEWSxPQUF2QjtBQUlBLFVBQU1NLFlBQVksR0FBRyxLQUFLQyxzQkFBTCxDQUE0QkgsY0FBNUIsRUFBNENMLE1BQTVDLENBQXJCOztBQUNBLFVBQUksQ0FBQ08sWUFBRCxJQUFpQixDQUFDQSxZQUFZLENBQUNFLE1BQW5DLEVBQTJDO0FBQ3pDLGVBQU87QUFBQzVILFVBQUFBLEtBQUssRUFBRTtBQUFSLFNBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQ0xBLFFBQUFBLEtBQUssRUFBRTBILFlBQVksQ0FBQ2hGLEdBQWIsQ0FBaUIsVUFBQXBDLE9BQU87QUFBQSxpQkFBSztBQUNsQzRHLFlBQUFBLEtBQUssRUFBRyxPQUFPQSxLQUFQLEtBQWlCLFFBQWpCLElBQTZCQSxLQUFLLENBQUNXLE9BQU4sQ0FBYyxXQUFkLEVBQTJCLEVBQTNCLENBQTlCLElBQWlFLE1BQUksQ0FBQ1IsSUFEM0M7QUFFbEMvRyxZQUFBQSxPQUFPLEVBQVBBLE9BRmtDO0FBR2xDd0gsWUFBQUEsU0FBUyxFQUFFO0FBSHVCLFdBQUw7QUFBQSxTQUF4QjtBQURGLE9BQVA7QUFPRDs7O0VBOUd1Q0MscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQge0RBVEFfVFlQRVN9IGZyb20gJ3R5cGUtYW5hbHl6ZXInO1xuXG5pbXBvcnQgTGF5ZXIsIHtjb2xvck1ha2VyfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7R2VvSnNvbkxheWVyIGFzIERlY2tHTEdlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7Z2V0R2VvanNvbkRhdGFNYXBzLCBnZXRHZW9qc29uQm91bmRzLCBnZXRHZW9qc29uRmVhdHVyZVR5cGVzfSBmcm9tICcuL2dlb2pzb24tdXRpbHMnO1xuaW1wb3J0IEdlb2pzb25MYXllckljb24gZnJvbSAnLi9nZW9qc29uLWxheWVyLWljb24nO1xuaW1wb3J0IHtHRU9KU09OX0ZJRUxEUywgSElHSExJR0hfQ09MT1JfM0QsIENIQU5ORUxfU0NBTEVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xBWUVSX1ZJU19DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5cbmNvbnN0IFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyA9IHtcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUlldOiB0cnVlLFxuICBbREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9qc29uVmlzQ29uZmlncyA9IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBzdHJva2VPcGFjaXR5OiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1Mub3BhY2l0eSxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZU9wYWNpdHknXG4gIH0sXG4gIHRoaWNrbmVzczoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBkZWZhdWx0VmFsdWU6IDFcbiAgfSxcbiAgc3Ryb2tlQ29sb3I6ICdzdHJva2VDb2xvcicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuXG4gIHNpemVSYW5nZTogJ3N0cm9rZVdpZHRoUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgaGVpZ2h0UmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIGVsZXZhdGlvblNjYWxlOiAnZWxldmF0aW9uU2NhbGUnLFxuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiAnZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSdcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zID0gWydnZW9qc29uJ107XG5leHBvcnQgY29uc3QgZmVhdHVyZUFjY2Vzc29yID0gKHtnZW9qc29ufSkgPT4gZGMgPT4gZCA9PiBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2pzb24uZmllbGRJZHgpO1xuXG4vLyBhY2Nlc3MgZmVhdHVyZSBwcm9wZXJ0aWVzIGZyb20gZ2VvanNvbiBzdWIgbGF5ZXJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uID0gNTAwO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lV2lkdGggPSAxO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSYWRpdXMgPSAxO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW9Kc29uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5kYXRhVG9GZWF0dXJlID0gW107XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhnZW9qc29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PiBmZWF0dXJlQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2dlb2pzb24nO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdQb2x5Z29uJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEdlb2pzb25MYXllckljb247XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGdlb0pzb25SZXF1aXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSBzdXBlci52aXN1YWxDaGFubmVscztcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgLi4udmlzdWFsQ2hhbm5lbHMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmZpbGxDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc3Ryb2tlQ29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGZpZWxkOiAnc3Ryb2tlQ29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc3Ryb2tlQ29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3N0cm9rZUNvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT5cbiAgICAgICAgICBkLnByb3BlcnRpZXMubGluZUNvbG9yIHx8IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yLFxuICAgICAgICAvLyB1c2VkIHRoaXMgdG8gZ2V0IHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZScsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZVdpZHRoJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5saW5lV2lkdGggfHwgZGVmYXVsdExpbmVXaWR0aFxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgICAgIGZpZWxkOiAnaGVpZ2h0RmllbGQnLFxuICAgICAgICBzY2FsZTogJ2hlaWdodFNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnaGVpZ2h0RG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdoZWlnaHRSYW5nZScsXG4gICAgICAgIGtleTogJ2hlaWdodCcsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RWxldmF0aW9uJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMuZWxldmF0aW9uIHx8IGRlZmF1bHRFbGV2YXRpb25cbiAgICAgIH0sXG4gICAgICByYWRpdXM6IHtcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICBmaWVsZDogJ3JhZGl1c0ZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdyYWRpdXNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3JhZGl1c0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBrZXk6ICdyYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5yYWRpdXMsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMucmFkaXVzIHx8IGRlZmF1bHRSYWRpdXNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7bGFiZWwsIGZpZWxkcyA9IFtdfSkge1xuICAgIGNvbnN0IGdlb2pzb25Db2x1bW5zID0gZmllbGRzXG4gICAgICAuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnZ2VvanNvbicgJiYgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTW2YuYW5hbHl6ZXJUeXBlXSlcbiAgICAgIC5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB7XG4gICAgICBnZW9qc29uOiB1bmlxKFsuLi5HRU9KU09OX0ZJRUxEUy5nZW9qc29uLCAuLi5nZW9qc29uQ29sdW1uc10pXG4gICAgfTtcblxuICAgIGNvbnN0IGZvdW5kQ29sdW1ucyA9IHRoaXMuZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0Q29sdW1ucywgZmllbGRzKTtcbiAgICBpZiAoIWZvdW5kQ29sdW1ucyB8fCAhZm91bmRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wczogZm91bmRDb2x1bW5zLm1hcChjb2x1bW5zID0+ICh7XG4gICAgICAgIGxhYmVsOiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpKSB8fCB0aGlzLnR5cGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyksXG5cbiAgICAgIC8vIGFkZCBoZWlnaHQgdmlzdWFsIGNoYW5uZWxcbiAgICAgIGhlaWdodEZpZWxkOiBudWxsLFxuICAgICAgaGVpZ2h0RG9tYWluOiBbMCwgMV0sXG4gICAgICBoZWlnaHRTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCByYWRpdXMgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRG9tYWluOiBbMCwgMV0sXG4gICAgICByYWRpdXNTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCBzdHJva2UgY29sb3IgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBzdHJva2VDb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogJ3F1YW50aWxlJ1xuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW5kZXggb2YgZGF0YUNvbnRhaW5lciBpcyBzYXZlZCB0byBmZWF0dXJlLnByb3BlcnRpZXNcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LnByb3BlcnRpZXMuaW5kZXgpO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkSW5kZXgubWFwKGkgPT4gdGhpcy5kYXRhVG9GZWF0dXJlW2ldKS5maWx0ZXIoZCA9PiBkKTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIGNvbnN0IGN1c3RvbUZpbHRlclZhbHVlQWNjZXNzb3IgPSAoZGMsIGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQucHJvcGVydGllcy5pbmRleCwgZmllbGRJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZiA9PiBmLnByb3BlcnRpZXMuaW5kZXg7XG5cbiAgICBjb25zdCBkYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+ICh7aW5kZXg6IGQucHJvcGVydGllcy5pbmRleH0pO1xuICAgIGNvbnN0IGFjY2Vzc29ycyA9IHRoaXMuZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IsIGRhdGFDb250YWluZXJ9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKFxuICAgICAgICBpbmRleEFjY2Vzc29yLFxuICAgICAgICBjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yXG4gICAgICApLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKSB7XG4gICAgY29uc3QgZ2V0RmVhdHVyZSA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBnZXRHZW9qc29uRGF0YU1hcHMoZGF0YUNvbnRhaW5lciwgZ2V0RmVhdHVyZSk7XG5cbiAgICAvLyBnZXQgYm91bmRzIGZyb20gZmVhdHVyZXNcbiAgICBjb25zdCBib3VuZHMgPSBnZXRHZW9qc29uQm91bmRzKHRoaXMuZGF0YVRvRmVhdHVyZSk7XG4gICAgLy8gaWYgYW55IG9mIHRoZSBmZWF0dXJlIGhhcyBwcm9wZXJ0aWVzLnJhZGl1cyBzZXQgdG8gYmUgdHJ1ZVxuICAgIGNvbnN0IGZpeGVkUmFkaXVzID0gQm9vbGVhbihcbiAgICAgIHRoaXMuZGF0YVRvRmVhdHVyZS5maW5kKGQgPT4gZCAmJiBkLnByb3BlcnRpZXMgJiYgZC5wcm9wZXJ0aWVzLnJhZGl1cylcbiAgICApO1xuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB3aGF0IHR5cGUgb2YgZ2VvbWV0cnkgdGhlIGNvbGxlY3Rpb24gaGFzXG4gICAgY29uc3QgZmVhdHVyZVR5cGVzID0gZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyh0aGlzLmRhdGFUb0ZlYXR1cmUpO1xuXG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxMYXllckNvbmZpZyh7ZGF0YUNvbnRhaW5lcn0pIHtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKTtcblxuICAgIGNvbnN0IHtmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgaXMgc3Ryb2tlOiB0cnVlLCBmaWxsZWQ6IGZhbHNlXG4gICAgaWYgKGZlYXR1cmVUeXBlcyAmJiBmZWF0dXJlVHlwZXMucG9seWdvbikge1xuICAgICAgLy8gc2V0IGJvdGggZmlsbCBhbmQgc3Ryb2tlIHRvIHRydWVcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtcbiAgICAgICAgZmlsbGVkOiB0cnVlLFxuICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICBzdHJva2VDb2xvcjogY29sb3JNYWtlci5uZXh0KCkudmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2ludCkge1xuICAgICAgLy8gc2V0IGZpbGwgdG8gdHJ1ZSBpZiBkZXRlY3QgcG9pbnRcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtmaWxsZWQ6IHRydWUsIHN0cm9rZWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZH0gPSBvcHRzO1xuXG4gICAgY29uc3Qge2ZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIGNvbnN0IHJhZGl1c1NjYWxlID0gdGhpcy5nZXRSYWRpdXNTY2FsZShmaXhlZFJhZGl1cyk7XG4gICAgY29uc3QgcmFkaXVzVW5pdHMgPSB0aGlzLmdldFJhZGl1c1VuaXQoZml4ZWRSYWRpdXMpO1xuXG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IGxheWVyUHJvcHMgPSB7XG4gICAgICBsaW5lV2lkdGhTY2FsZTogdmlzQ29uZmlnLnRoaWNrbmVzcyxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUsXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiByYWRpdXNTY2FsZSxcbiAgICAgIGxpbmVNaXRlckxpbWl0OiA0XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyc1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG9wYU92ZXJ3cml0ZSA9IHtcbiAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IHBpY2thYmxlID0gdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQ7XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgRGVja0dMR2VvSnNvbkxheWVyKHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHBpY2thYmxlLFxuICAgICAgICBoaWdobGlnaHRDb2xvcjogSElHSExJR0hfQ09MT1JfM0QsXG4gICAgICAgIGF1dG9IaWdobGlnaHQ6IHZpc0NvbmZpZy5lbmFibGUzZCAmJiBwaWNrYWJsZSxcbiAgICAgICAgc3Ryb2tlZDogdmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIGZpbGxlZDogdmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgZXh0cnVkZWQ6IHZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgd2lyZWZyYW1lOiB2aXNDb25maWcud2lyZWZyYW1lLFxuICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgbGluZU1pdGVyTGltaXQ6IDIsXG4gICAgICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgICAgIHJhZGl1c1VuaXRzLFxuICAgICAgICBsaW5lV2lkdGhVbml0czogJ3BpeGVscycsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICBfc3ViTGF5ZXJQcm9wczoge1xuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXMucG9seWdvbiA/IHsncG9seWdvbnMtc3Ryb2tlJzogb3BhT3ZlcndyaXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzLmxpbmUgPyB7bGluZXN0cmluZ3M6IG9wYU92ZXJ3cml0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcy5wb2ludFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiB7XG4gICAgICAgICAgICAgICAgICBsaW5lT3BhY2l0eTogdmlzQ29uZmlnLnN0cm9rZU9wYWNpdHlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgLi4uKGhvdmVyZWRPYmplY3QgJiYgIXZpc0NvbmZpZy5lbmFibGUzZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBEZWNrR0xHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSxcbiAgICAgICAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgZ2V0TGluZVdpZHRoOiBkYXRhLmdldExpbmVXaWR0aCxcbiAgICAgICAgICAgICAgZ2V0UmFkaXVzOiBkYXRhLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgZ2V0RWxldmF0aW9uOiBkYXRhLmdldEVsZXZhdGlvbixcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgLy8gYWx3YXlzIGRyYXcgb3V0bGluZVxuICAgICAgICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICAgICAgICBmaWxsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG59XG4iXX0=
454
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLmpzIl0sIm5hbWVzIjpbIlNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyIsIkRBVEFfVFlQRVMiLCJHRU9NRVRSWSIsIkdFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJvcGFjaXR5Iiwic3Ryb2tlT3BhY2l0eSIsIkxBWUVSX1ZJU19DT05GSUdTIiwicHJvcGVydHkiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvciIsImNvbG9yUmFuZ2UiLCJzdHJva2VDb2xvclJhbmdlIiwicmFkaXVzIiwic2l6ZVJhbmdlIiwicmFkaXVzUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImVsZXZhdGlvblNjYWxlIiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImdlb0pzb25SZXF1aXJlZENvbHVtbnMiLCJmZWF0dXJlQWNjZXNzb3IiLCJnZW9qc29uIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJkZWZhdWx0RWxldmF0aW9uIiwiZGVmYXVsdExpbmVXaWR0aCIsImRlZmF1bHRSYWRpdXMiLCJHZW9Kc29uTGF5ZXIiLCJwcm9wcyIsImRhdGFUb0ZlYXR1cmUiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsIkdlb2pzb25MYXllckljb24iLCJ2aXN1YWxDaGFubmVscyIsImNvbG9yIiwiYWNjZXNzb3IiLCJjb25kaXRpb24iLCJ2aXNDb25maWciLCJudWxsVmFsdWUiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsInByb3BlcnRpZXMiLCJmaWxsQ29sb3IiLCJmaWVsZCIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJrZXkiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJsaW5lQ29sb3IiLCJzaXplIiwibGluZVdpZHRoIiwiaGVpZ2h0IiwiZWxldmF0aW9uIiwiaGVpZ2h0RmllbGQiLCJoZWlnaHREb21haW4iLCJoZWlnaHRTY2FsZSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwicmFkaXVzU2NhbGUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JEb21haW4iLCJzdHJva2VDb2xvclNjYWxlIiwib2JqZWN0Iiwicm93IiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwibWFwIiwiaSIsImZpbHRlciIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwiZ3B1RmlsdGVyIiwidXBkYXRlRGF0YSIsImRhdGEiLCJjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmllbGRJbmRleCIsImluZGV4QWNjZXNzb3IiLCJmIiwiZGF0YUFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZ2V0RmVhdHVyZSIsImJvdW5kcyIsImZpeGVkUmFkaXVzIiwiQm9vbGVhbiIsImZpbmQiLCJmZWF0dXJlVHlwZXMiLCJ1cGRhdGVNZXRhIiwidXBkYXRlTGF5ZXJNZXRhIiwibWV0YSIsInBvbHlnb24iLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNvbG9yTWFrZXIiLCJuZXh0IiwidmFsdWUiLCJwb2ludCIsIm9wdHMiLCJvYmplY3RIb3ZlcmVkIiwiZ2V0UmFkaXVzU2NhbGUiLCJyYWRpdXNVbml0cyIsImdldFJhZGl1c1VuaXQiLCJsYXllclByb3BzIiwibGluZVdpZHRoU2NhbGUiLCJwb2ludFJhZGl1c1NjYWxlIiwibGluZU1pdGVyTGltaXQiLCJ1cGRhdGVUcmlnZ2VycyIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsImZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsIm9wYU92ZXJ3cml0ZSIsInBpY2thYmxlIiwiaGFzSW50ZXJhY3Rpdml0eSIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwiRGVja0dMR2VvSnNvbkxheWVyIiwiaGlnaGxpZ2h0Q29sb3IiLCJISUdITElHSF9DT0xPUl8zRCIsImF1dG9IaWdobGlnaHQiLCJleHRydWRlZCIsIndyYXBMb25naXR1ZGUiLCJyb3VuZGVkIiwibGluZVdpZHRoVW5pdHMiLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsImdldExpbmVXaWR0aCIsImdldFJhZGl1cyIsImdldEVsZXZhdGlvbiIsImdldExpbmVDb2xvciIsImdldEZpbGxDb2xvciIsImxhYmVsIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJ0eXBlIiwiYW5hbHl6ZXJUeXBlIiwibmFtZSIsImRlZmF1bHRDb2x1bW5zIiwiR0VPSlNPTl9GSUVMRFMiLCJmb3VuZENvbHVtbnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwibGVuZ3RoIiwicmVwbGFjZSIsImlzVmlzaWJsZSIsIkxheWVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLHdCQUF3Qix3RkFDM0JDLHlCQUFXQyxRQURnQixFQUNMLElBREssMkRBRTNCRCx5QkFBV0Usb0JBRmdCLEVBRU8sSUFGUCx5QkFBOUI7QUFLTyxJQUFNQyxpQkFBaUIsR0FBRztBQUMvQkMsRUFBQUEsT0FBTyxFQUFFLFNBRHNCO0FBRS9CQyxFQUFBQSxhQUFhLGtDQUNSQyxnQ0FBa0JGLE9BRFY7QUFFWEcsSUFBQUEsUUFBUSxFQUFFO0FBRkMsSUFGa0I7QUFNL0JDLEVBQUFB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QjtBQUlBLFVBQU1NLFlBQVksR0FBRyxLQUFLQyxzQkFBTCxDQUE0QkgsY0FBNUIsRUFBNENMLE1BQTVDLENBQXJCOztBQUNBLFVBQUksQ0FBQ08sWUFBRCxJQUFpQixDQUFDQSxZQUFZLENBQUNFLE1BQW5DLEVBQTJDO0FBQ3pDLGVBQU87QUFBQzNILFVBQUFBLEtBQUssRUFBRTtBQUFSLFNBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQ0xBLFFBQUFBLEtBQUssRUFBRXlILFlBQVksQ0FBQy9FLEdBQWIsQ0FBaUIsVUFBQXBDLE9BQU87QUFBQSxpQkFBSztBQUNsQzJHLFlBQUFBLEtBQUssRUFBRyxPQUFPQSxLQUFQLEtBQWlCLFFBQWpCLElBQTZCQSxLQUFLLENBQUNXLE9BQU4sQ0FBYyxXQUFkLEVBQTJCLEVBQTNCLENBQTlCLElBQWlFLE1BQUksQ0FBQ1IsSUFEM0M7QUFFbEM5RyxZQUFBQSxPQUFPLEVBQVBBLE9BRmtDO0FBR2xDdUgsWUFBQUEsU0FBUyxFQUFFO0FBSHVCLFdBQUw7QUFBQSxTQUF4QjtBQURGLE9BQVA7QUFPRDs7O0VBOUd1Q0MscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQge0RBVEFfVFlQRVN9IGZyb20gJ3R5cGUtYW5hbHl6ZXInO1xuXG5pbXBvcnQgTGF5ZXIsIHtjb2xvck1ha2VyfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7R2VvSnNvbkxheWVyIGFzIERlY2tHTEdlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7Z2V0R2VvanNvbkRhdGFNYXBzLCBnZXRHZW9qc29uQm91bmRzLCBnZXRHZW9qc29uRmVhdHVyZVR5cGVzfSBmcm9tICcuL2dlb2pzb24tdXRpbHMnO1xuaW1wb3J0IEdlb2pzb25MYXllckljb24gZnJvbSAnLi9nZW9qc29uLWxheWVyLWljb24nO1xuaW1wb3J0IHtHRU9KU09OX0ZJRUxEUywgSElHSExJR0hfQ09MT1JfM0QsIENIQU5ORUxfU0NBTEVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xBWUVSX1ZJU19DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5cbmNvbnN0IFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyA9IHtcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUlldOiB0cnVlLFxuICBbREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9qc29uVmlzQ29uZmlncyA9IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBzdHJva2VPcGFjaXR5OiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1Mub3BhY2l0eSxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZU9wYWNpdHknXG4gIH0sXG4gIHRoaWNrbmVzczoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBkZWZhdWx0VmFsdWU6IDFcbiAgfSxcbiAgc3Ryb2tlQ29sb3I6ICdzdHJva2VDb2xvcicsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuXG4gIHNpemVSYW5nZTogJ3N0cm9rZVdpZHRoUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgaGVpZ2h0UmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIGVsZXZhdGlvblNjYWxlOiAnZWxldmF0aW9uU2NhbGUnLFxuICBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yOiAnZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSdcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zID0gWydnZW9qc29uJ107XG5leHBvcnQgY29uc3QgZmVhdHVyZUFjY2Vzc29yID0gKHtnZW9qc29ufSkgPT4gZGMgPT4gZCA9PiBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2pzb24uZmllbGRJZHgpO1xuXG4vLyBhY2Nlc3MgZmVhdHVyZSBwcm9wZXJ0aWVzIGZyb20gZ2VvanNvbiBzdWIgbGF5ZXJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uID0gNTAwO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lV2lkdGggPSAxO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSYWRpdXMgPSAxO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW9Kc29uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5kYXRhVG9GZWF0dXJlID0gW107XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhnZW9qc29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PiBmZWF0dXJlQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2dlb2pzb24nO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdQb2x5Z29uJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEdlb2pzb25MYXllckljb247XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGdlb0pzb25SZXF1aXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSBzdXBlci52aXN1YWxDaGFubmVscztcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgLi4udmlzdWFsQ2hhbm5lbHMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmZpbGxDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc3Ryb2tlQ29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGZpZWxkOiAnc3Ryb2tlQ29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc3Ryb2tlQ29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3N0cm9rZUNvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT5cbiAgICAgICAgICBkLnByb3BlcnRpZXMubGluZUNvbG9yIHx8IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yLFxuICAgICAgICAvLyB1c2VkIHRoaXMgdG8gZ2V0IHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZScsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZVdpZHRoJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5saW5lV2lkdGggfHwgZGVmYXVsdExpbmVXaWR0aFxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgICAgIGZpZWxkOiAnaGVpZ2h0RmllbGQnLFxuICAgICAgICBzY2FsZTogJ2hlaWdodFNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnaGVpZ2h0RG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdoZWlnaHRSYW5nZScsXG4gICAgICAgIGtleTogJ2hlaWdodCcsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RWxldmF0aW9uJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMuZWxldmF0aW9uIHx8IGRlZmF1bHRFbGV2YXRpb25cbiAgICAgIH0sXG4gICAgICByYWRpdXM6IHtcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICBmaWVsZDogJ3JhZGl1c0ZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdyYWRpdXNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3JhZGl1c0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBrZXk6ICdyYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5yYWRpdXMsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMucmFkaXVzIHx8IGRlZmF1bHRSYWRpdXNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7bGFiZWwsIGZpZWxkcyA9IFtdfSkge1xuICAgIGNvbnN0IGdlb2pzb25Db2x1bW5zID0gZmllbGRzXG4gICAgICAuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnZ2VvanNvbicgJiYgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTW2YuYW5hbHl6ZXJUeXBlXSlcbiAgICAgIC5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB7XG4gICAgICBnZW9qc29uOiB1bmlxKFsuLi5HRU9KU09OX0ZJRUxEUy5nZW9qc29uLCAuLi5nZW9qc29uQ29sdW1uc10pXG4gICAgfTtcblxuICAgIGNvbnN0IGZvdW5kQ29sdW1ucyA9IHRoaXMuZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0Q29sdW1ucywgZmllbGRzKTtcbiAgICBpZiAoIWZvdW5kQ29sdW1ucyB8fCAhZm91bmRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wczogZm91bmRDb2x1bW5zLm1hcChjb2x1bW5zID0+ICh7XG4gICAgICAgIGxhYmVsOiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpKSB8fCB0aGlzLnR5cGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyksXG5cbiAgICAgIC8vIGFkZCBoZWlnaHQgdmlzdWFsIGNoYW5uZWxcbiAgICAgIGhlaWdodEZpZWxkOiBudWxsLFxuICAgICAgaGVpZ2h0RG9tYWluOiBbMCwgMV0sXG4gICAgICBoZWlnaHRTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCByYWRpdXMgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRG9tYWluOiBbMCwgMV0sXG4gICAgICByYWRpdXNTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCBzdHJva2UgY29sb3IgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBzdHJva2VDb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogJ3F1YW50aWxlJ1xuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW5kZXggb2YgZGF0YUNvbnRhaW5lciBpcyBzYXZlZCB0byBmZWF0dXJlLnByb3BlcnRpZXNcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LnByb3BlcnRpZXMuaW5kZXgpO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkSW5kZXgubWFwKGkgPT4gdGhpcy5kYXRhVG9GZWF0dXJlW2ldKS5maWx0ZXIoZCA9PiBkKTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIGNvbnN0IGN1c3RvbUZpbHRlclZhbHVlQWNjZXNzb3IgPSAoZGMsIGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBkYy52YWx1ZUF0KGQucHJvcGVydGllcy5pbmRleCwgZmllbGRJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZiA9PiBmLnByb3BlcnRpZXMuaW5kZXg7XG5cbiAgICBjb25zdCBkYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+ICh7aW5kZXg6IGQucHJvcGVydGllcy5pbmRleH0pO1xuICAgIGNvbnN0IGFjY2Vzc29ycyA9IHRoaXMuZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IsIGRhdGFDb250YWluZXJ9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKFxuICAgICAgICBpbmRleEFjY2Vzc29yLFxuICAgICAgICBjdXN0b21GaWx0ZXJWYWx1ZUFjY2Vzc29yXG4gICAgICApLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKSB7XG4gICAgY29uc3QgZ2V0RmVhdHVyZSA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBnZXRHZW9qc29uRGF0YU1hcHMoZGF0YUNvbnRhaW5lciwgZ2V0RmVhdHVyZSk7XG5cbiAgICAvLyBnZXQgYm91bmRzIGZyb20gZmVhdHVyZXNcbiAgICBjb25zdCBib3VuZHMgPSBnZXRHZW9qc29uQm91bmRzKHRoaXMuZGF0YVRvRmVhdHVyZSk7XG4gICAgLy8gaWYgYW55IG9mIHRoZSBmZWF0dXJlIGhhcyBwcm9wZXJ0aWVzLnJhZGl1cyBzZXQgdG8gYmUgdHJ1ZVxuICAgIGNvbnN0IGZpeGVkUmFkaXVzID0gQm9vbGVhbihcbiAgICAgIHRoaXMuZGF0YVRvRmVhdHVyZS5maW5kKGQgPT4gZCAmJiBkLnByb3BlcnRpZXMgJiYgZC5wcm9wZXJ0aWVzLnJhZGl1cylcbiAgICApO1xuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB3aGF0IHR5cGUgb2YgZ2VvbWV0cnkgdGhlIGNvbGxlY3Rpb24gaGFzXG4gICAgY29uc3QgZmVhdHVyZVR5cGVzID0gZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyh0aGlzLmRhdGFUb0ZlYXR1cmUpO1xuXG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxMYXllckNvbmZpZyh7ZGF0YUNvbnRhaW5lcn0pIHtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyKTtcblxuICAgIGNvbnN0IHtmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIC8vIGRlZmF1bHQgc2V0dGluZ3MgaXMgc3Ryb2tlOiB0cnVlLCBmaWxsZWQ6IGZhbHNlXG4gICAgaWYgKGZlYXR1cmVUeXBlcyAmJiBmZWF0dXJlVHlwZXMucG9seWdvbikge1xuICAgICAgLy8gc2V0IGJvdGggZmlsbCBhbmQgc3Ryb2tlIHRvIHRydWVcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtcbiAgICAgICAgZmlsbGVkOiB0cnVlLFxuICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICBzdHJva2VDb2xvcjogY29sb3JNYWtlci5uZXh0KCkudmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2ludCkge1xuICAgICAgLy8gc2V0IGZpbGwgdG8gdHJ1ZSBpZiBkZXRlY3QgcG9pbnRcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtmaWxsZWQ6IHRydWUsIHN0cm9rZWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZH0gPSBvcHRzO1xuXG4gICAgY29uc3Qge2ZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9ID0gdGhpcy5tZXRhO1xuICAgIGNvbnN0IHJhZGl1c1NjYWxlID0gdGhpcy5nZXRSYWRpdXNTY2FsZShmaXhlZFJhZGl1cyk7XG4gICAgY29uc3QgcmFkaXVzVW5pdHMgPSB0aGlzLmdldFJhZGl1c1VuaXQoZml4ZWRSYWRpdXMpO1xuXG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IGxheWVyUHJvcHMgPSB7XG4gICAgICBsaW5lV2lkdGhTY2FsZTogdmlzQ29uZmlnLnRoaWNrbmVzcyxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUsXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiByYWRpdXNTY2FsZSxcbiAgICAgIGxpbmVNaXRlckxpbWl0OiA0XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyc1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG9wYU92ZXJ3cml0ZSA9IHtcbiAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IHBpY2thYmxlID0gdGhpcy5oYXNJbnRlcmFjdGl2aXR5O1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBwaWNrYWJsZSxcbiAgICAgICAgaGlnaGxpZ2h0Q29sb3I6IEhJR0hMSUdIX0NPTE9SXzNELFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiB2aXNDb25maWcuZW5hYmxlM2QgJiYgcGlja2FibGUsXG4gICAgICAgIHN0cm9rZWQ6IHZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBmaWxsZWQ6IHZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIHdpcmVmcmFtZTogdmlzQ29uZmlnLndpcmVmcmFtZSxcbiAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgIGxpbmVNaXRlckxpbWl0OiAyLFxuICAgICAgICByb3VuZGVkOiB0cnVlLFxuICAgICAgICByYWRpdXNVbml0cyxcbiAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgX3N1YkxheWVyUHJvcHM6IHtcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyB7J3BvbHlnb25zLXN0cm9rZSc6IG9wYU92ZXJ3cml0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcy5saW5lID8ge2xpbmVzdHJpbmdzOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXMucG9pbnRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHBvaW50czoge1xuICAgICAgICAgICAgICAgICAgbGluZU9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0ICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgRGVja0dMR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBMb25naXR1ZGU6IGZhbHNlLFxuICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgIGdldExpbmVXaWR0aDogZGF0YS5nZXRMaW5lV2lkdGgsXG4gICAgICAgICAgICAgIGdldFJhZGl1czogZGF0YS5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgIGdldEVsZXZhdGlvbjogZGF0YS5nZXRFbGV2YXRpb24sXG4gICAgICAgICAgICAgIGdldExpbmVDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIC8vIGFsd2F5cyBkcmF3IG91dGxpbmVcbiAgICAgICAgICAgICAgc3Ryb2tlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsbGVkOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carto/kepler.gl",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "0.0.53-alpha.interactivity.2",
4
+ "version": "0.0.53-alpha.interactivity.4",
5
5
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -37,7 +37,8 @@ export type KeplerGlProps = {
37
37
  onExportToCloudSuccess?: OnSuccessCallBack;
38
38
  onExportToCloudError?: OnErrorCallBack;
39
39
  readOnly?: boolean;
40
- maskPolygon?: Array<Array<number>>
40
+ maskPolygon?: Array<Array<number>>;
41
+ popupSettings: any;
41
42
  };
42
43
 
43
44
  export type UnconnectedKeplerGlProps = KeplerGlProps & {
@@ -230,6 +230,17 @@ class Layer {
230
230
  this._interactivitySettings = interactivitySettings;
231
231
  }
232
232
 
233
+ get hasTooltip() {
234
+ return Boolean(
235
+ this.interactivitySettings?.hover?.fields.length ||
236
+ this.interactivitySettings?.click?.fields.length
237
+ );
238
+ }
239
+
240
+ get hasInteractivity() {
241
+ return Boolean(this.hasTooltip && this.interactivitySettings?.enabled);
242
+ }
243
+
233
244
  /*
234
245
  * Given a dataset, automatically find props to create layer based on it
235
246
  * and return the props and previous found layers.
@@ -1286,7 +1297,7 @@ class Layer {
1286
1297
  id: this.id,
1287
1298
  idx,
1288
1299
  coordinateSystem: COORDINATE_SYSTEM.LNGLAT,
1289
- pickable: this.interactivitySettings?.enabled,
1300
+ pickable: this.hasInteractivity,
1290
1301
  wrapLongitude: true,
1291
1302
  parameters: {depthTest: Boolean(mapState.dragRotate || this.config.visConfig.enable3d)},
1292
1303
  hidden: this.config.hidden,
@@ -294,7 +294,7 @@ export default class GeoJsonLayer extends Layer {
294
294
  opacity: visConfig.strokeOpacity
295
295
  };
296
296
 
297
- const pickable = this.interactivitySettings?.enabled;
297
+ const pickable = this.hasInteractivity;
298
298
  const hoveredObject = this.hasHoveredObject(objectHovered);
299
299
 
300
300
  return [
@@ -2,12 +2,25 @@ import {RGBColor, RGBAColor} from '../reducers/types';
2
2
  import {Field, Datasets, KeplerTable} from '../reducers/vis-state-updaters';
3
3
  import {LayerTextLabel, ColorRange, ColorUI, LayerVisConfig} from './layer-factory';
4
4
 
5
+ export enum PopupEvent {
6
+ Hover = 'hover',
7
+ Click = 'click'
8
+ }
9
+
5
10
  export type LayerColumns = {
6
11
  [key: string]: {value: string | null; fieldIdx: number; optional?: boolean};
7
12
  };
8
13
  export type VisualChannelDomain = number[] | string[];
9
14
  export type VisualChannelField = Field | null;
10
15
 
16
+ export interface PopupFormatSettings {
17
+ fields: PopupField[];
18
+ style: PopupStyle;
19
+ templateMode?: boolean;
20
+ template?: string;
21
+ templateEdited?: boolean;
22
+ }
23
+
11
24
  export type LayerConfig = {
12
25
  dataId: string | null;
13
26
  label: string;
@@ -74,6 +87,9 @@ export class Layer {
74
87
  visConfigSettings: any;
75
88
  visualChannels: {[key: string]: VisualChannel};
76
89
  _oldDataUpdateTriggers: any;
90
+ _interactivitySettings?: { enabled: boolean, [PopupEvent.Click]?: PopupFormatSettings, [PopupEvent.Hover]?: PopupFormatSettings };
91
+ hasTooltip: boolean;
92
+ hasInteractivity: boolean;
77
93
  hasAllColumns(): boolean;
78
94
  updateLayerConfig(p: Partial<LayerConfig>): Layer;
79
95
  updateLayerDomain(datasets: Datasets, filter?: Filter): Layer;