tc-checking-tool-rcl 0.9.98 → 0.9.100

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.
@@ -332,7 +332,7 @@ var Checker = function Checker(_ref) {
332
332
  modified: false,
333
333
  isCommentChanged: false
334
334
  };
335
-
335
+ console.log('debug', targetBible, flattenedGroupData);
336
336
  // validate all checks
337
337
  _wordAlignerLib.selectionsHelpers.validateSelectionsForAllChecks(targetBible, flattenedGroupData, function (check, invalidated) {
338
338
  if (check) {
@@ -1368,4 +1368,4 @@ Checker.propTypes = {
1368
1368
  translate: _propTypes["default"].func.isRequired
1369
1369
  };
1370
1370
  var _default = exports["default"] = Checker;
1371
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNmbUhlbHBlcnMiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2Rhc2giLCJfR3JvdXBNZW51Q29tcG9uZW50IiwiX3dvcmRBbGlnbmVyTGliIiwiX2RlZXBFcXVhbCIsIl90d0FydGljbGVIZWxwZXJzIiwiX0NoZWNrSW5mb0NhcmQiLCJfdG5BcnRpY2xlSGVscGVycyIsIl9TY3JpcHR1cmVQYW5lIiwiX1BvcG92ZXJDb250YWluZXIiLCJfQm9va3NPZlRoZUJpYmxlIiwiX2NvbXBsZXhTY3JpcHRGb250cyIsIl9UcmFuc2xhdGlvbkhlbHBzIiwidEhlbHBzSGVscGVycyIsIl9WZXJzZUNoZWNrIiwiX2NoZWNrSW5mb0NhcmRIZWxwZXJzIiwiZSIsIl9fZXNNb2R1bGUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsIlR5cGVFcnJvciIsImEiLCJ1IiwibmV4dCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJmcm9tIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJsIiwibG9jYWxTdHlsZXMiLCJjb250YWluZXJEaXYiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY2VudGVyRGl2Iiwib3ZlcmZsb3dYIiwibWFyZ2luTGVmdCIsInNjcmlwdHVyZVBhbmVEaXYiLCJmbGV4U2hyaW5rIiwicGFkZGluZ0JvdHRvbSIsInRyYW5zbGF0aW9uV29yZHMiLCJleHBvcnRzIiwidHJhbnNsYXRpb25Ob3RlcyIsIm1heGltdW1TZWxlY3Rpb25zIiwiY29uc29sZSIsImxvZyIsIkNoZWNrZXIiLCJfcmVmIiwiX3RhcmdldExhbmd1YWdlRGV0YWlsIiwiX3RhcmdldExhbmd1YWdlRGV0YWlsMiIsIl90YXJnZXRfbGFuZ3VhZ2UkYm9vayIsImFsaWduZWRHbEJpYmxlIiwiYmlibGVzXyIsImJpYmxlcyIsImNoYW5nZWRDdXJyZW50Q2hlY2siLCJjaGFuZ2VUYXJnZXRWZXJzZSIsImNoZWNraW5nRGF0YSIsImNoZWNrVHlwZSIsImNvbnRleHRJZCIsImdldExleGljb25EYXRhIiwiZ2xXb3Jkc0RhdGEiLCJpbml0aWFsU2V0dGluZ3MiLCJzYXZlQ2hlY2tpbmdEYXRhIiwic2F2ZVNldHRpbmdzIiwic2hvd0RvY3VtZW50Iiwic3R5bGVzIiwidGFyZ2V0QmlibGVfIiwidGFyZ2V0QmlibGUiLCJ0YXJnZXRMYW5ndWFnZURldGFpbHMiLCJ0cmFuc2xhdGUiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsInBhbmVTZXR0aW5ncyIsInBhbmVLZXlTZXR0aW5ncyIsInRvb2xzU2V0dGluZ3MiLCJtYW5pZmVzdCIsIl91c2VTdGF0ZTIiLCJzZXR0aW5ncyIsIl9zZXRTZXR0aW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0QmlibGVzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzZXRUYXJnZXRCaWJsZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwidGVtcENoZWNraW5nRGF0YSIsInNldFRlbXBDaGVja2luZ0RhdGEiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImxvY2FsQ2hlY2tpbmdEYXRhIiwic2V0TG9jYWxDaGVja2luZ0RhdGEiLCJfdXNlU3RhdGUxIiwiYWxpZ25lZEdMVGV4dCIsImFydGljbGUiLCJjdXJyZW50Q2hlY2siLCJjdXJyZW50Q2hlY2tpbmdEYXRhIiwiZ3JvdXBUaXRsZSIsImdyb3VwUGhyYXNlIiwiZ3JvdXBzRGF0YSIsImdyb3Vwc0luZGV4IiwiaXNDb21tZW50Q2hhbmdlZCIsImlzVmVyc2VDaGFuZ2VkIiwibW9kZSIsIm5ld1ZlcnNlVGV4dCIsInBvcG92ZXJQcm9wcyIsInBvcG92ZXJWaXNpYmlsaXR5Iiwic2hvd0hlbHBzTW9kYWwiLCJzaG93SGVscHMiLCJuZXdUYWdzIiwidmVyc2VUZXh0IiwiX3VzZVN0YXRlMTAiLCJzdGF0ZSIsIl9zZXRTdGF0ZSIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJnZXRDdXJyZW50VmFsdWVGb3IiLCJrZXkiLCJnZXRUZW1wVmFsdWVGb3IiLCJjdXJyZW50U2VsZWN0aW9ucyIsInRlbXBTZWxlY3Rpb25zIiwidGVtcE5vdGhpbmdUb1NlbGVjdCIsImN1cnJlbnROb3RoaW5nVG9TZWxlY3QiLCJncm91cHNEYXRhTG9hZGVkIiwidXBkYXRlTW9kZUZvclNlbGVjdGlvbnMiLCJuZXdTZWxlY3Rpb25zIiwibm90aGluZ1RvU2VsZWN0Iiwibm9TZWxlY3Rpb25zIiwibmV3TW9kZSIsInVzZUVmZmVjdCIsImhhdmVEYXRhIiwiZ3JvdXBzRGF0YUluaXRpYWxpemVkIiwiZmxhdHRlbmVkR3JvdXBEYXRhIiwiZ3JvdXBEYXRhSGVscGVycyIsImZsYXR0ZW5Hcm91cERhdGEiLCJwYXJzZVRuVG9JbmRleCIsInBhcnNlVHdUb0luZGV4IiwiY2hlY2siLCJmaW5kQ2hlY2siLCJtb2RpZmllZCIsInNlbGVjdGlvbnNIZWxwZXJzIiwidmFsaWRhdGVTZWxlY3Rpb25zRm9yQWxsQ2hlY2tzIiwiaW52YWxpZGF0ZWQiLCJjb25jYXQiLCJfc2F2ZUNoZWNraW5nRGF0YSIsInVwZGF0ZUNvbnRleHQiLCJzZWxlY3Rpb25zIiwibmV3Q2hlY2siLCJncm91cHNJbmRleF8iLCJ1bmRlZmluZWQiLCJyZWZlcmVuY2UiLCJ2ZXJzZUhlbHBlcnMiLCJnZXRWZXJzZVRleHRGcm9tQmlibGUiLCJnZXRBbGlnbmVkR0xUZXh0IiwiZ2V0VGl0bGVGcm9tSW5kZXgiLCJncm91cElkIiwib2NjdXJyZW5jZU5vdGUiLCJnZXRQaHJhc2VGcm9tVHciLCJncm91cERhdGEiLCJhcnRpY2xlcyIsIl9hcnRpY2xlIiwiYXJ0aWNsZUlkIiwiZ3JvdXBzSWRzIiwiX2kiLCJfZ3JvdXBzSWRzIiwiX2dyb3VwSWQiLCJncm91cCIsImN1cnJlbnRBcnRpY2xlTWFya2Rvd24iLCJjb252ZXJ0TWFya2Rvd25MaW5rcyIsImdhdGV3YXlMYW5ndWFnZUlkIiwiY29tbWVudFRleHQiLCJib29rSWQiLCJib29rIiwiaWQiLCJib29rTmFtZSIsImJvb2tEZXRhaWxzIiwidGFyZ2V0TGFuZ3VhZ2VGb250IiwicHJvamVjdEZvbnQiLCJjdXJyZW50Q29udGV4dElkIiwic2V0VG9vbFNldHRpbmdzIiwiTkFNRVNQQUNFIiwiZmllbGROYW1lIiwiZmllbGRWYWx1ZSIsIl90b29sc1NldHRpbmdzIiwiY29tcG9uZW50U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsIl9zYXZlU2V0dGluZ3MiLCJfc2V0dGluZ3MiLCJuZXdTZXR0aW5ncyIsIl9wYW5lU2V0dGluZ3MiLCJfcGFuZVNldHRpbmciLCJfcGFuZUtleVNldHRpbmdzIiwiX2kyIiwiX2tleXMiLCJkb1NhdmUiLCJzZXRUb29sU2V0dGluZ3NTY3JpcHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxhbmd1YWdlSWQiLCJiaWJsZUlkIiwib3duZXIiLCJlcnIiLCJhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QiLCJfbWFuaWZlc3QiLCJhcHBTZXR0aW5ncyIsIl9hcHBTZXR0aW5ncyIsIm9wZW5BbGVydERpYWxvZyIsImNoZWNrSWZWZXJzZUNoYW5nZWQiLCJfbmV3VmVyc2VUZXh0IiwidGFyZ2V0IiwiX2lzVmVyc2VDaGFuZ2VkIiwiaGFuZGxlRWRpdFZlcnNlIiwiY2FuY2VsRWRpdFZlcnNlIiwic2F2ZUVkaXRWZXJzZSIsIl9jdXJyZW50Q29udGV4dElkJHJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlUmVmIiwidmVyc2VTcGFuIiwiYmVmb3JlIiwiZWRpdFRhcmdldFZlcnNlIiwiaGFuZGxlR29Ub05leHQiLCJuZXh0Q2hlY2siLCJmaW5kTmV4dENoZWNrIiwiY2hhbmdlQ3VycmVudENoZWNrXyIsImhhbmRsZUdvVG9QcmV2aW91cyIsInByZXZpb3VzQ2hlY2siLCJmaW5kUHJldmlvdXNDaGVjayIsImhhbmRsZVRhZ3NDaGVja2JveCIsInRhZyIsImN1cnJlbnRUYWdzIiwidGFnSW5kZXgiLCJpbmRleE9mIiwiX25ld1RhZ3MiLCJjb3B5Iiwic3BsaWNlIiwidmFsaWRhdGVTZWxlY3Rpb25zIiwidmVyc2VUZXh0XyIsInNlbGVjdGlvbnNfIiwidmFsaWRhdGVWZXJzZVNlbGVjdGlvbnMiLCJ1bmZpbHRlcmVkVmVyc2VUZXh0IiwidXNlTWVtbyIsInVuZmlsdGVyZWRWZXJzZVRleHRfIiwiX3RhcmdldEJpYmxlJGNoYXB0ZXIiLCJ2ZXJzZURhdGEiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwiZ2V0VXNmbUZvclZlcnNlQ29udGVudCIsInNldFRlbXBDaGVja2luZ0l0ZW0iLCJuZXdDaGVja2luZ0RhdGEiLCJjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlIiwidG9nZ2xlTm90aGluZ1RvU2VsZWN0Iiwic2VsZWN0IiwibmV3Q29udGV4dCIsIm5vQ2hlY2siLCJuZXdDb250ZXh0SWQiLCJzZWxlY3Rpb25zVW5jaGFuZ2VkIiwiaXNFcXVhbCIsImRpcmVjdGlvbiIsImJvb2ttYXJrRW5hYmxlZCIsImlzVmVyc2VFZGl0ZWQiLCJpc1ZlcnNlSW52YWxpZGF0ZWQiLCJfc2F2ZVNlbGVjdGlvbiIsIl9jbG9uZURhdGFGb3JTYXZpbmciLCJjbG9uZURhdGFGb3JTYXZpbmciLCJjaGVja0luR3JvdXBzRGF0YSIsIl9jdXJyZW50Q2hlY2siLCJfbmV3Q2hlY2tpbmdEYXRhIiwiZGVsZXRlVGVtcENoZWNraW5nRGF0YSIsInVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhIiwiX2dyb3Vwc0RhdGEiLCJfIiwiY2xvbmVEZWVwIiwiY2F0ZWdvcnkiLCJuZXdDaGVja0RhdGEiLCJfaTMiLCJfT2JqZWN0JGtleXMiLCJuZXdDaGVja2luZ1ZhbHVlIiwiX3NhdmVEYXRhIiwibmV3RGF0YSIsIl9jbG9uZURhdGFGb3JTYXZpbmcyIiwiX2k0IiwiX09iamVjdCRrZXlzMiIsImNoYW5nZWREYXRhIiwiX2k1IiwiX09iamVjdCRrZXlzMyIsIl90ZW1wQ2hlY2tpbmdEYXRhIiwiY2FuY2VsU2VsZWN0aW9uIiwiY2xlYXJTZWxlY3Rpb24iLCJ0b2dnbGVCb29rbWFyayIsInJlbWluZGVycyIsImNoYW5nZU1vZGUiLCJjaGVja0lmQ29tbWVudENoYW5nZWQiLCJuZXdjb21tZW50Iiwib2xkY29tbWVudCIsImNhbmNlbENvbW1lbnQiLCJzYXZlQ29tbWVudCIsIm5ld0NvbW1lbnQiLCJjb21tZW50cyIsImhhbmRsZUNvbW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlYWR5VG9EaXNwbGF5Q2hlY2tlciIsImdldExleGljb25EYXRhXyIsImxleGljb25JZCIsImVudHJ5SWQiLCJsZXhpY29uRGF0YSIsIm9uQ2xvc2VQb3BvdmVyIiwic2hvd1BvcG92ZXIiLCJ0aXRsZSIsImJvZHlUZXh0IiwicG9zaXRpb25Db29yZCIsInRvZ2dsZUhlbHBzTW9kYWwiLCJfc2hvd0hlbHBzTW9kYWwiLCJ0b2dnbGVIZWxwcyIsIl9zaG93SGVscHMiLCJzYXZlQmlibGVUb0tleSIsImtleUdyb3VwIiwib2xkVmVyc2VUZXh0IiwiX2JpYmxlcyIsIl90YXJnZXRCaWJsZSIsInRhcmdldEJvb2siLCJ0YXJnZXRDaGFwdGVyIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsImN1cnJlbnRDaGFwdGVyRGF0YSIsImN1cnJlbnRWZXJzZURhdGEiLCJfQWxpZ25tZW50SGVscGVycyR1cGQiLCJBbGlnbm1lbnRIZWxwZXJzIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHMiLCJ1cGRhdGVTZXR0aW5ncyIsInJlbW92ZVVzZm1NYXJrZXJzIiwidmVyc2VFZGl0cyIsInZhbGlkYXRlQWxsU2VsZWN0aW9uc0ZvclZlcnNlIiwiX2N1cnJlbnRDaGVjayRjb250ZXh0IiwiX2NoZWNrJGNvbnRleHRJZCIsImN1cnJlbnRDaGVja0lkIiwiY2hlY2tJZCIsIm5ld0JpYmxlcyIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdCIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdDIiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiYmlibGUiLCJOVF9PUklHX0xBTkciLCJPVF9PUklHX0xBTkciLCJpbml0aWFsUGFuZVNldHRpbmdzIiwibGFuZ0tleSIsInBhbmUiLCJsYW5ndWFnZV9uYW1lIiwiZHVibGluX2NvcmUiLCJsYW5ndWFnZSIsIl9nZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIiwibGFuZyIsImdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UiLCJ0YXJnZXRfbGFuZ3VhZ2UiLCJwcm9qZWN0IiwiZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUiLCJzdHlsZVByb3BzIiwiX2NoZWNrZXJTdHlsZXMiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJjaGFuZ2VDdXJyZW50Q29udGV4dElkIiwiY29tcGxleFNjcmlwdEZvbnRzIiwiY3VycmVudFBhbmVTZXR0aW5ncyIsImVkaXRWZXJzZVJlZiIsImdldEF2YWlsYWJsZVNjcmlwdHVyZVBhbmVTZWxlY3Rpb25zIiwibWFrZVN1cmVCaWJsZXNMb2FkZWRGb3JUb29sIiwicHJvamVjdERldGFpbHNSZWR1Y2VyIiwib25FeHBhbmRlZFNjcmlwdHVyZVBhbmVTaG93Iiwib25MaW5rQ2xpY2siLCJvblNlZU1vcmVDbGljayIsInBocmFzZSIsInNlZU1vcmVMYWJlbCIsInNob3dTZWVNb3JlQnV0dG9uIiwiZGlhbG9nTW9kYWxWaXNpYmlsaXR5IiwiaGFuZGxlT3BlbkRpYWxvZyIsImhhbmRsZUNsb3NlRGlhbG9nIiwiaGFuZGxlU2tpcCIsImxvY2FsTm90aGluZ1RvU2VsZWN0Iiwic2F2ZVNlbGVjdGlvbiIsInRhZ3MiLCJtb2RhbEFydGljbGUiLCJleHBhbmRlZEhlbHBzQnV0dG9uSG92ZXJUZXh0IiwibW9kYWxUaXRsZSIsImlzU2hvd0hlbHBzRXhwYW5kZWQiLCJvcGVuRXhwYW5kZWRIZWxwc01vZGFsIiwic2lkZWJhclRvZ2dsZSIsImlzU2hvd0hlbHBzU2lkZWJhciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImFycmF5IiwiZnVuYyIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGVja2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAZmlsZSBDaGVja2VyLmpzXG4gKlxuICogQHN5bm9wc2lzXG4gKiBUaGlzIGlzIHRoZSBtYWluIGNoZWNraW5nIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGFuIGludGVncmF0ZWQgaW50ZXJmYWNlIGZvciBCaWJsZSB0cmFuc2xhdGlvbiBjaGVja2luZy5cbiAqIEl0IHN1cHBvcnRzIGJvdGggVHJhbnNsYXRpb24gTm90ZXMgKFROKSBhbmQgVHJhbnNsYXRpb24gV29yZHMgKFRXKSBjaGVja2luZyB3b3JrZmxvd3MuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgYSBjb21wcmVoZW5zaXZlIHRvb2wgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXM6XG4gKiAtIExvYWRpbmcgYW5kIGRpc3BsYXlpbmcgY2hlY2tpbmcgZGF0YSAodHJhbnNsYXRpb24gbm90ZXMgb3IgdHJhbnNsYXRpb24gd29yZHMpXG4gKiAtIE1hbmFnaW5nIHVzZXIgc2VsZWN0aW9ucyBhbmQgYW5ub3RhdGlvbnMgaW4gdmVyc2VzXG4gKiAtIFByb3ZpZGluZyBtdWx0aS1wYW5lIFNjcmlwdHVyZSB2aWV3aW5nIHdpdGggdmFyaW91cyBCaWJsZSByZXNvdXJjZXNcbiAqIC0gSGFuZGxpbmcgdmVyc2UgZWRpdGluZyBhbmQgdmFsaWRhdGlvblxuICogLSBNYW5hZ2luZyBjb21tZW50cywgYm9va21hcmtzLCBhbmQgdGFncyBmb3IgY2hlY2tzXG4gKiAtIE5hdmlnYXRpbmcgYmV0d2VlbiBjaGVja3MgKG5leHQvcHJldmlvdXMpXG4gKiAtIERpc3BsYXlpbmcgdHJhbnNsYXRpb24gaGVscHMgaW4gYW4gaW50ZWdyYXRlZCBzaWRlYmFyXG4gKiAtIFBlcnNpc3RpbmcgdXNlciBzZXR0aW5ncyBhbmQgY2hlY2tpbmcgcHJvZ3Jlc3NcbiAqXG4gKiBUaGUgY29tcG9uZW50IG1haW50YWlucyBjb21wbGV4IHN0YXRlIGluY2x1ZGluZzpcbiAqIC0gQ3VycmVudCBjaGVjayBkYXRhIGFuZCBjb250ZXh0XG4gKiAtIFVzZXIgc2VsZWN0aW9ucyBhbmQgdGVtcG9yYXJ5IGNoYW5nZXNcbiAqIC0gUGFuZSBzZXR0aW5ncyBmb3IgU2NyaXB0dXJlIGRpc3BsYXlcbiAqIC0gVG9vbC1zcGVjaWZpYyBzZXR0aW5nc1xuICogLSBVSSBzdGF0ZSAobW9kZXMsIG1vZGFscywgcG9wb3ZlcnMpXG4gKlxuICogQHJlcXVpcmVtZW50c1xuICogLSBSZWFjdCAxOC4zLjErXG4gKiAtIHdvcmQtYWxpZ25lci1saWIgZm9yIHZlcnNlIGFuZCBhbGlnbm1lbnQgaGVscGVyc1xuICogLSBkZWVwLWVxdWFsIGZvciBvYmplY3QgY29tcGFyaXNvblxuICogLSBsb2Rhc2ggZm9yIGRlZXAgY2xvbmluZ1xuICogLSBNYXRlcmlhbC1VSSBjb21wb25lbnRzIGZvciBVSSBlbGVtZW50c1xuICpcbiAqIEBkZXBlbmRlbmNpZXNcbiAqIC0gR3JvdXBNZW51Q29tcG9uZW50OiBOYXZpZ2F0aW9uIG1lbnUgZm9yIGNoZWNrc1xuICogLSBDaGVja0luZm9DYXJkOiBEaXNwbGF5cyBjaGVjayB0aXRsZSBhbmQgcGhyYXNlXG4gKiAtIFNjcmlwdHVyZVBhbmU6IE11bHRpLXBhbmUgU2NyaXB0dXJlIHZpZXdlclxuICogLSBUcmFuc2xhdGlvbkhlbHBzOiBTaWRlYmFyIGZvciB0cmFuc2xhdGlvbiBoZWxwIGFydGljbGVzXG4gKiAtIFZlcnNlQ2hlY2s6IE1haW4gY2hlY2tpbmcgaW50ZXJmYWNlIGZvciB2ZXJzZXNcbiAqIC0gUG9wb3ZlckNvbnRhaW5lcjogRGlzcGxheXMgY29udGV4dHVhbCBpbmZvcm1hdGlvblxuICovXG5pbXBvcnQgeyByZW1vdmVVc2ZtTWFya2VycyB9IGZyb20gJy4uL3V0aWxzL3VzZm1IZWxwZXJzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCBHcm91cE1lbnVDb21wb25lbnQgZnJvbSAnLi9Hcm91cE1lbnVDb21wb25lbnQnXG5pbXBvcnQge1xuICBncm91cERhdGFIZWxwZXJzLFxuICBzZWxlY3Rpb25zSGVscGVycyxcbiAgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyxcbiAgdmVyc2VIZWxwZXJzLFxuICBBbGlnbm1lbnRIZWxwZXJzLFxuICBcbn0gZnJvbSAnd29yZC1hbGlnbmVyLWxpYidcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQge1xuICBmaW5kQ2hlY2ssXG4gIGZpbmROZXh0Q2hlY2ssXG4gIGZpbmRQcmV2aW91c0NoZWNrLFxuICBnZXRBbGlnbmVkR0xUZXh0LFxuICBnZXRQaHJhc2VGcm9tVHcsXG4gIGdldFRpdGxlRnJvbUluZGV4LFxuICBcbiAgcGFyc2VUd1RvSW5kZXhcbn0gZnJvbSAnLi4vaGVscGVycy90cmFuc2xhdGlvbkhlbHBzL3R3QXJ0aWNsZUhlbHBlcnMnXG5pbXBvcnQgQ2hlY2tJbmZvQ2FyZCBmcm9tICcuLi90Y191aV90b29sa2l0L0NoZWNrSW5mb0NhcmQnXG5pbXBvcnQgeyBwYXJzZVRuVG9JbmRleCB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNsYXRpb25IZWxwcy90bkFydGljbGVIZWxwZXJzJ1xuaW1wb3J0IFNjcmlwdHVyZVBhbmUgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9TY3JpcHR1cmVQYW5lJ1xuaW1wb3J0IFBvcG92ZXJDb250YWluZXIgZnJvbSAnLi4vY29udGFpbmVycy9Qb3BvdmVyQ29udGFpbmVyJ1xuaW1wb3J0IHsgTlRfT1JJR19MQU5HLCBPVF9PUklHX0xBTkcgfSBmcm9tICcuLi9jb21tb24vQm9va3NPZlRoZUJpYmxlJ1xuaW1wb3J0IGNvbXBsZXhTY3JpcHRGb250cyBmcm9tICcuLi9jb21tb24vY29tcGxleFNjcmlwdEZvbnRzJ1xuaW1wb3J0IFRyYW5zbGF0aW9uSGVscHMgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9UcmFuc2xhdGlvbkhlbHBzJ1xuaW1wb3J0ICogYXMgdEhlbHBzSGVscGVycyBmcm9tICcuLi9oZWxwZXJzL3RIZWxwc0hlbHBlcnMnXG5pbXBvcnQgVmVyc2VDaGVjayBmcm9tICcuLi90Y191aV90b29sa2l0L1ZlcnNlQ2hlY2snXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIH0gZnJvbSAnLi4vaGVscGVycy9jaGVja0luZm9DYXJkSGVscGVycydcblxuY29uc3QgbG9jYWxTdHlsZXMgPSB7XG4gIGNvbnRhaW5lckRpdjp7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHdpZHRoOiAnOTd2dycsXG4gICAgaGVpZ2h0OiAnNjV2dycsXG4gIH0sXG4gIGNlbnRlckRpdjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICB3aWR0aDogJzg1JScsXG4gICAgb3ZlcmZsb3dYOiAnYXV0bycsXG4gICAgbWFyZ2luTGVmdDogJzEwcHgnLFxuICB9LFxuICBzY3JpcHR1cmVQYW5lRGl2OiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhTaHJpbms6ICcwJyxcbiAgICBoZWlnaHQ6ICcyNTBweCcsXG4gICAgcGFkZGluZ0JvdHRvbTogJzIwcHgnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0aW9uV29yZHMgPSAndHJhbnNsYXRpb25Xb3JkcydcbmV4cG9ydCBjb25zdCB0cmFuc2xhdGlvbk5vdGVzID0gJ3RyYW5zbGF0aW9uTm90ZXMnXG5jb25zdCBtYXhpbXVtU2VsZWN0aW9ucyA9IDEwXG5cbmNvbnNvbGUubG9nKCdDaGVja2VyLmpzIC0gc3RhcnR1cCcpXG5jb25zdCBuYW1lID0gJ0NoZWNrZXInXG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGVja2VyXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXMgc3RhdGUgdXBkYXRlcywgc2V0dGluZ3MgbWFuYWdlbWVudCwgYW5kIGVuc3VyZXMgdGhlIG5lY2Vzc2FyeSBkYXRhIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IHdpdGggaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIENoZWNrZXIgY29tcG9uZW50LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYWxpZ25lZEdsQmlibGUgLSBUaGUgYWxpZ25lZCBHYXRld2F5IExhbmd1YWdlIEJpYmxlIGRhdGEgdXNlZCBmb3IgdHJhbnNsYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYmlibGVzIC0gQmlibGUgZGF0YSBmb3IgdmFyaW91cyBsYW5ndWFnZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmNoYW5nZWRDdXJyZW50Q2hlY2sgLSBjYWxsYmFjayB0byBub3RpZnkgb2YgY2hhbmdlcyBpbiBjb250ZXh0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5jaGFuZ2VUYXJnZXRWZXJzZSAtIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjdXJyZW50IHZlcnNlIGJlaW5nIGNoZWNrZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jaGVja2luZ0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gY2hlY2tzIChlLmcuLCB0cmFuc2xhdGlvbiBub3RlcyBvciB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1ldGVycy5jaGVja1R5cGUgLSBUaGUgdHlwZSBvZiBjaGVjayBiZWluZyBwZXJmb3JtZWQgKGUuZy4sIHRyYW5zbGF0aW9uIG5vdGVzLCB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jb250ZXh0SWQgLSBPYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSBhYm91dCB0aGUgY3VycmVudCBncm91cC92ZXJzZSBiZWluZyB3b3JrZWQgb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmdldExleGljb25EYXRhIC0gRnVuY3Rpb24gdG8gcmV0cmlldmUgbGV4aWNvbiBkYXRhLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuZ2xXb3Jkc0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gR2F0ZXdheSBMYW5ndWFnZSB3b3JkcyBhbmQgYWxpZ25tZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuaW5pdGlhbFNldHRpbmdzIC0gVGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZSBDaGVja2VyIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2F2ZUNoZWNraW5nRGF0YSAtIEZ1bmN0aW9uIHRvIHNhdmUgdGhlIG1vZGlmaWVkIGNoZWNraW5nIGRhdGEuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLnNhdmVTZXR0aW5ncyAtIEZ1bmN0aW9uIHRvIHBlcnNpc3QgdXNlcidzIGNvbXBvbmVudCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2hvd0RvY3VtZW50IC0gRnVuY3Rpb24gdG8gZGlzcGxheSBhIGRvY3VtZW50IGluIHRoZSBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5zdHlsZXMgLSBTdHlsaW5nIGluZm9ybWF0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50J3MgYXBwZWFyYW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldEJpYmxlIC0gVGhlIHRhcmdldCBCaWJsZSBkYXRhIGZvciB0aGUgd29ya2luZyBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldExhbmd1YWdlRGV0YWlscyAtIE1ldGFkYXRhIGFib3V0IHRoZSB0YXJnZXQgbGFuZ3VhZ2UsIGluY2x1ZGluZyBib29rIGFuZCBsYW5ndWFnZS1zcGVjaWZpYyBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy50cmFuc2xhdGUgLSBBIGZ1bmN0aW9uIHVzZWQgZm9yIHN0cmluZyB0cmFuc2xhdGlvbnMgaW4gdGhlIFVJLlxuICovXG5jb25zdCBDaGVja2VyID0gKHtcbiAgYWxpZ25lZEdsQmlibGUsXG4gIGJpYmxlczogYmlibGVzXyxcbiAgY2hhbmdlZEN1cnJlbnRDaGVjayxcbiAgY2hhbmdlVGFyZ2V0VmVyc2UsXG4gIGNoZWNraW5nRGF0YSxcbiAgY2hlY2tUeXBlLFxuICBjb250ZXh0SWQsXG4gIGdldExleGljb25EYXRhLFxuICBnbFdvcmRzRGF0YSxcbiAgaW5pdGlhbFNldHRpbmdzLFxuICBzYXZlQ2hlY2tpbmdEYXRhLFxuICBzYXZlU2V0dGluZ3MsXG4gIHNob3dEb2N1bWVudCxcbiAgc3R5bGVzLFxuICB0YXJnZXRCaWJsZTogdGFyZ2V0QmlibGVfLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHMsXG4gIHRyYW5zbGF0ZSxcbn0pID0+IHtcbiAgLy8gTWFpbiBzZXR0aW5ncyBzdGF0ZSAtIGluY2x1ZGVzIHBhbmUgY29uZmlndXJhdGlvbiwgdG9vbCBzZXR0aW5ncywgYW5kIG1hbmlmZXN0IGRhdGFcbiAgY29uc3QgW3NldHRpbmdzLCBfc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoe1xuICAgIHBhbmVTZXR0aW5nczogW10sXG4gICAgcGFuZUtleVNldHRpbmdzOiB7fSxcbiAgICB0b29sc1NldHRpbmdzOiB7fSxcbiAgICBtYW5pZmVzdDoge31cbiAgfSlcbiAgY29uc3Qge1xuICAgIHBhbmVTZXR0aW5ncyxcbiAgICBwYW5lS2V5U2V0dGluZ3MsXG4gICAgdG9vbHNTZXR0aW5ncyxcbiAgICBtYW5pZmVzdFxuICB9ID0gc2V0dGluZ3NcblxuICAvLyBCaWJsZSBkYXRhIG9yZ2FuaXplZCBieSBsYW5ndWFnZSBhbmQgSURcbiAgY29uc3QgW2JpYmxlcywgc2V0QmlibGVzXSA9IHVzZVN0YXRlKHsgfSlcblxuICAvLyBDdXJyZW50IHRhcmdldCBCaWJsZSBiZWluZyBjaGVja2VkXG4gIGNvbnN0IFt0YXJnZXRCaWJsZSwgc2V0VGFyZ2V0QmlibGVdID0gdXNlU3RhdGUodGFyZ2V0QmlibGVfKVxuXG4gIC8vIFRlbXBvcmFyeSBjaGVja2luZyBkYXRhIGZvciB1bnNhdmVkIGNoYW5nZXNcbiAgY29uc3QgW3RlbXBDaGVja2luZ0RhdGEsIHNldFRlbXBDaGVja2luZ0RhdGFdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBMb2NhbCBjaGVja2luZyBkYXRhIGZvciBjdXJyZW50IHNlc3Npb25cbiAgY29uc3QgW2xvY2FsQ2hlY2tpbmdEYXRhLCBzZXRMb2NhbENoZWNraW5nRGF0YV0gPSB1c2VTdGF0ZShudWxsKVxuXG4gIC8vIE1haW4gY29tcG9uZW50IHN0YXRlXG4gIGNvbnN0IFtzdGF0ZSwgX3NldFN0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBhbGlnbmVkR0xUZXh0OiAnJywgLy8gR2F0ZXdheSBMYW5ndWFnZSB0ZXh0IGFsaWduZWQgdG8gb3JpZ2luYWxcbiAgICBhcnRpY2xlOiBudWxsLCAvLyBDdXJyZW50IHRyYW5zbGF0aW9uIGhlbHAgYXJ0aWNsZVxuICAgIGN1cnJlbnRDaGVjazogbnVsbCwgLy8gQ3VycmVudCBjaGVjayBiZWluZyB3b3JrZWQgb25cbiAgICBjdXJyZW50Q2hlY2tpbmdEYXRhOiBudWxsLCAvLyBBbGwgY2hlY2tpbmcgZGF0YSBmb3IgY3VycmVudCBib29rXG4gICAgZ3JvdXBUaXRsZTogJycsIC8vIFRpdGxlIG9mIGN1cnJlbnQgY2hlY2sgZ3JvdXBcbiAgICBncm91cFBocmFzZTogJycsIC8vIFBocmFzZSBvciBvY2N1cnJlbmNlIG5vdGUgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICBncm91cHNEYXRhOiBudWxsLCAvLyBGbGF0dGVuZWQgZ3JvdXAgZGF0YSBmb3IgYWxsIGNoZWNrc1xuICAgIGdyb3Vwc0luZGV4OiBudWxsLCAvLyBJbmRleCBvZiBhbGwgY2hlY2sgZ3JvdXBzXG4gICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgY29tbWVudCBoYXMgdW5zYXZlZCBjaGFuZ2VzXG4gICAgaXNWZXJzZUNoYW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIHZlcnNlIGhhcyB1bnNhdmVkIGNoYW5nZXNcbiAgICBtb2RlOiAnZGVmYXVsdCcsIC8vIEN1cnJlbnQgVUkgbW9kZSAoZGVmYXVsdCwgc2VsZWN0LCBlZGl0LCBjb21tZW50KVxuICAgIG5ld1ZlcnNlVGV4dDogbnVsbCwgLy8gTmV3IHZlcnNlIHRleHQgZHVyaW5nIGVkaXRpbmdcbiAgICBwb3BvdmVyUHJvcHM6IHtcbiAgICAgIHBvcG92ZXJWaXNpYmlsaXR5OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd0hlbHBzTW9kYWw6IGZhbHNlLCAvLyBXaGV0aGVyIGhlbHBzIG1vZGFsIGlzIHNob3duXG4gICAgc2hvd0hlbHBzOiB0cnVlLCAvLyBXaGV0aGVyIGhlbHBzIHNpZGViYXIgaXMgc2hvd25cbiAgICBuZXdUYWdzOiBudWxsLCAvLyBOZXcgdGFncyBiZWluZyBhZGRlZFxuICAgIHZlcnNlVGV4dDogJycsIC8vIEN1cnJlbnQgdmVyc2UgdGV4dFxuICB9KVxuXG4gIGNvbnN0IHtcbiAgICBhbGlnbmVkR0xUZXh0LFxuICAgIGFydGljbGUsXG4gICAgY3VycmVudENoZWNrLFxuICAgIGN1cnJlbnRDaGVja2luZ0RhdGEsXG4gICAgZ3JvdXBUaXRsZSxcbiAgICBncm91cFBocmFzZSxcbiAgICBncm91cHNEYXRhLFxuICAgIGdyb3Vwc0luZGV4LFxuICAgIGlzQ29tbWVudENoYW5nZWQsXG4gICAgaXNWZXJzZUNoYW5nZWQsXG4gICAgbW9kZSxcbiAgICBuZXdWZXJzZVRleHQsXG4gICAgcG9wb3ZlclByb3BzLFxuICAgIHNob3dIZWxwc01vZGFsLFxuICAgIHNob3dIZWxwcyxcbiAgICBuZXdUYWdzLFxuICAgIHZlcnNlVGV4dCxcbiAgfSA9IHN0YXRlXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9iamVjdCB3aXRoIG5ldyB2YWx1ZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gT2JqZWN0IGNvbnRhaW5pbmcgc3RhdGUgcHJvcGVydGllcyB0byB1cGRhdGVcbiAgICovXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgX3NldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2F2ZWQgdmFsdWUgZm9yIGEgY2hlY2sgcHJvcGVydHlcbiAgICogRmFsbHMgYmFjayB0byBsb2NhbCBjaGVja2luZyBkYXRhIGlmIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJucyB7Kn0gQ3VycmVudCB2YWx1ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q3VycmVudFZhbHVlRm9yKGtleSkge1xuICAgIGlmIChsb2NhbENoZWNraW5nRGF0YT8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGxvY2FsQ2hlY2tpbmdEYXRhW2tleV1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDaGVjaz8uW2tleV1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZW1wb3JhcnkgKHVuc2F2ZWQpIHZhbHVlIGZvciBhIGNoZWNrIHByb3BlcnR5XG4gICAqIEZhbGxzIGJhY2sgdGhyb3VnaCBsb2NhbCBjaGVja2luZyBkYXRhIHRvIGN1cnJlbnQgY2hlY2tcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybnMgeyp9IFRlbXBvcmFyeSB2YWx1ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VGVtcFZhbHVlRm9yKGtleSkge1xuICAgIGlmICh0ZW1wQ2hlY2tpbmdEYXRhPy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gdGVtcENoZWNraW5nRGF0YVtrZXldXG4gICAgfVxuICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWVGb3Ioa2V5KVxuICB9XG5cbiAgY29uc3QgY3VycmVudFNlbGVjdGlvbnMgPSBnZXRDdXJyZW50VmFsdWVGb3IoJ3NlbGVjdGlvbnMnKSB8fCBbXVxuICBjb25zdCB0ZW1wU2VsZWN0aW9ucyA9IGdldFRlbXBWYWx1ZUZvcignc2VsZWN0aW9ucycpIHx8IFtdXG4gIGNvbnN0IHRlbXBOb3RoaW5nVG9TZWxlY3QgPSBnZXRUZW1wVmFsdWVGb3IoJ25vdGhpbmdUb1NlbGVjdCcpXG4gIGNvbnN0IGN1cnJlbnROb3RoaW5nVG9TZWxlY3QgPSBnZXRDdXJyZW50VmFsdWVGb3IoJ25vdGhpbmdUb1NlbGVjdCcpXG4gIGNvbnN0IGdyb3Vwc0RhdGFMb2FkZWQgPSAhIWdyb3Vwc0RhdGFcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgVUkgbW9kZSBiYXNlZCBvbiBzZWxlY3Rpb25zIHN0YXRlXG4gICAqIFN3aXRjaGVzIHRvICdzZWxlY3QnIG1vZGUgaWYgbm8gc2VsZWN0aW9ucyBhbmQgbm90aGluZyBpcyBtYXJrZWQgYXMgdW5zZWxlY3RhYmxlXG4gICAqIEBwYXJhbSB7QXJyYXl9IG5ld1NlbGVjdGlvbnMgLSBDdXJyZW50IHNlbGVjdGlvbnMgYXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBub3RoaW5nVG9TZWxlY3QgLSBXaGV0aGVyIHZlcnNlIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm90aGluZyB0byBzZWxlY3RcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zKG5ld1NlbGVjdGlvbnMsIG5vdGhpbmdUb1NlbGVjdCkge1xuICAgIGNvbnN0IG5vU2VsZWN0aW9ucyA9ICghbmV3U2VsZWN0aW9ucz8ubGVuZ3RoKVxuICAgIGNvbnN0IG5ld01vZGUgPSBub1NlbGVjdGlvbnMgJiYgIW5vdGhpbmdUb1NlbGVjdCA/ICdzZWxlY3QnIDogJ2RlZmF1bHQnXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogbmV3TW9kZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRWZmZWN0IGhvb2sgdG8gaW5pdGlhbGl6ZSBjaGVja2luZyBkYXRhIHdoZW4gY2hlY2tpbmdEYXRhIG9yIGdsV29yZHNEYXRhIGNoYW5nZXNcbiAgICogRmxhdHRlbnMgZ3JvdXAgZGF0YSwgY3JlYXRlcyBpbmRleCwgZmluZHMgaW5pdGlhbCBjaGVjaywgYW5kIHZhbGlkYXRlcyBhbGwgY2hlY2tzXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhdmVEYXRhID0gY2hlY2tpbmdEYXRhICYmIE9iamVjdC5rZXlzKGNoZWNraW5nRGF0YSkubGVuZ3RoICYmIGdsV29yZHNEYXRhICYmIE9iamVjdC5rZXlzKGdsV29yZHNEYXRhKS5sZW5ndGhcbiAgICBjb25zdCBncm91cHNEYXRhSW5pdGlhbGl6ZWQgPSBncm91cHNEYXRhICYmIE9iamVjdC5rZXlzKGdyb3Vwc0RhdGEpLmxlbmd0aFxuICAgIGlmIChoYXZlRGF0YSAmJiAhZ3JvdXBzRGF0YUluaXRpYWxpemVkKSB7XG4gICAgICBsZXQgZmxhdHRlbmVkR3JvdXBEYXRhID0gbnVsbFxuICAgICAgbGV0IGdyb3Vwc0luZGV4ID0gbnVsbFxuICAgICAgaWYgKGNoZWNraW5nRGF0YSkge1xuICAgICAgICBmbGF0dGVuZWRHcm91cERhdGEgPSBncm91cERhdGFIZWxwZXJzLmZsYXR0ZW5Hcm91cERhdGEoY2hlY2tpbmdEYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgICAgaWYgKGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlcykge1xuICAgICAgICAgIGdyb3Vwc0luZGV4ID0gcGFyc2VUblRvSW5kZXgoZ2xXb3Jkc0RhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBzSW5kZXggPSBwYXJzZVR3VG9JbmRleChnbFdvcmRzRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGVjayA9IGZpbmRDaGVjayhmbGF0dGVuZWRHcm91cERhdGEsIGNvbnRleHRJZCwgdHJ1ZSlcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBncm91cHNEYXRhOiBmbGF0dGVuZWRHcm91cERhdGEsXG4gICAgICAgIGdyb3Vwc0luZGV4LFxuICAgICAgICBjdXJyZW50Q2hlY2tpbmdEYXRhOiBjaGVja2luZ0RhdGEsXG4gICAgICAgIGN1cnJlbnRDaGVjazogY2hlY2ssXG4gICAgICAgIG1vZGlmaWVkOiBmYWxzZSxcbiAgICAgICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkYXRlIGFsbCBjaGVja3NcbiAgICAgIHNlbGVjdGlvbnNIZWxwZXJzLnZhbGlkYXRlU2VsZWN0aW9uc0ZvckFsbENoZWNrcyh0YXJnZXRCaWJsZSwgZmxhdHRlbmVkR3JvdXBEYXRhLCAoY2hlY2ssIGludmFsaWRhdGVkKSA9PiB7XG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVFZGl0VmVyc2UgLSBjaGVjayB2YWxpZGF0aW9uIGNoYW5nZWRgLCBjaGVjaylcbiAgICAgICAgICBfc2F2ZUNoZWNraW5nRGF0YShjaGVjaywgeyBpbnZhbGlkYXRlZCB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcblxuICAgICAgaWYgKGZsYXR0ZW5lZEdyb3VwRGF0YSAmJiBjaGVjaz8uY29udGV4dElkKSB7XG4gICAgICAgIHVwZGF0ZUNvbnRleHQoY2hlY2ssIGdyb3Vwc0luZGV4KVxuICAgICAgICB1cGRhdGVNb2RlRm9yU2VsZWN0aW9ucyhjaGVjaz8uc2VsZWN0aW9ucywgY2hlY2s/Lm5vdGhpbmdUb1NlbGVjdClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjb250ZXh0SWQsIGNoZWNraW5nRGF0YSwgZ2xXb3Jkc0RhdGFdKTtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29udGV4dCBhbmQgcmVsYXRlZCBkYXRhIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjaGVjayBhbmQgZ3JvdXAgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdDaGVjayAtIFRoZSBuZXcgY2hlY2sgb2JqZWN0IGNvbnRhaW5pbmcgY29udGV4dCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtncm91cHNJbmRleF89Z3JvdXBzSW5kZXhdIC0gQW4gb3B0aW9uYWwgZ3JvdXAgaW5kZXggb2JqZWN0LCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBncm91cHNJbmRleGAuXG4gICAqIEByZXR1cm4ge3ZvaWR9IERvZXMgbm90IHJldHVybiBhIHZhbHVlLiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24gd2l0aCBuZXcgY29udGV4dCBkYXRhLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlQ29udGV4dChuZXdDaGVjaywgZ3JvdXBzSW5kZXhfID0gZ3JvdXBzSW5kZXgpIHtcbiAgICBjb25zdCBjb250ZXh0SWQgPSBuZXdDaGVjaz8uY29udGV4dElkXG4gICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dElkPy5yZWZlcmVuY2VcbiAgICBjb25zdCB2ZXJzZVRleHQgPSB2ZXJzZUhlbHBlcnMuZ2V0VmVyc2VUZXh0RnJvbUJpYmxlKHRhcmdldEJpYmxlLCByZWZlcmVuY2UpXG4gICAgY29uc3QgYWxpZ25lZEdMVGV4dCA9IGdldEFsaWduZWRHTFRleHQoYWxpZ25lZEdsQmlibGUsIGNvbnRleHRJZCk7XG4gICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlRnJvbUluZGV4KGdyb3Vwc0luZGV4XywgY29udGV4dElkPy5ncm91cElkKVxuICAgIGNvbnN0IGdyb3VwUGhyYXNlID1cbiAgICAgIGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlc1xuICAgICAgICA/IGNvbnRleHRJZD8ub2NjdXJyZW5jZU5vdGVcbiAgICAgICAgOiBnZXRQaHJhc2VGcm9tVHcoZ2xXb3Jkc0RhdGEsIGNvbnRleHRJZD8uZ3JvdXBJZClcblxuICAgIGxldCBncm91cERhdGFcbiAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgIGlmIChjaGVja1R5cGUgPT09IHRyYW5zbGF0aW9uTm90ZXMpIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgYXJ0aWNsZXM6IGdsV29yZHNEYXRhPy50cmFuc2xhdGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtcbiAgICAgICAgICAuLi5nbFdvcmRzRGF0YSxcbiAgICAgICAgICBtYW5pZmVzdDoge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBfYXJ0aWNsZVxuICAgIGNvbnN0IGFydGljbGVJZCA9IGNvbnRleHRJZD8uZ3JvdXBJZFxuICAgIGNvbnN0IGdyb3Vwc0lkcyA9IE9iamVjdC5rZXlzKGdyb3VwRGF0YSlcbiAgICBmb3IgKGNvbnN0IF9ncm91cElkIG9mIGdyb3Vwc0lkcykge1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cERhdGFbX2dyb3VwSWRdXG4gICAgICBjb25zdCBhcnRpY2xlcyA9IGdyb3VwPy5hcnRpY2xlcyB8fCB7fVxuICAgICAgX2FydGljbGUgPSBhcnRpY2xlcz8uW2FydGljbGVJZF0gfHwgbnVsbFxuICAgICAgaWYgKF9hcnRpY2xlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnRpY2xlTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKF9hcnRpY2xlLCBnYXRld2F5TGFuZ3VhZ2VJZCk7XG4gICAgICAgIF9hcnRpY2xlID0gY3VycmVudEFydGljbGVNYXJrZG93blxuICAgICAgICAvLyBjb25zdCB0SGVscHNNb2RhbE1hcmtkb3duID0gdEhlbHBzSGVscGVycy5jb252ZXJ0TWFya2Rvd25MaW5rcyhtb2RhbEFydGljbGUsIGdhdGV3YXlMYW5ndWFnZUNvZGUsIGFydGljbGVDYXRlZ29yeSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgYWxpZ25lZEdMVGV4dCxcbiAgICAgIGN1cnJlbnRDaGVjazogbmV3Q2hlY2ssXG4gICAgICB2ZXJzZVRleHQsXG4gICAgICBncm91cFRpdGxlLFxuICAgICAgZ3JvdXBQaHJhc2UsXG4gICAgICBhcnRpY2xlOiBfYXJ0aWNsZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjb21tZW50VGV4dCA9IGdldEN1cnJlbnRWYWx1ZUZvcignY29tbWVudHMnKSB8fCAnJ1xuICBjb25zdCBib29rSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmJvb2s/LmlkXG4gIGNvbnN0IGJvb2tOYW1lID0gdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPy5ib29rPy5uYW1lXG4gIGNvbnN0IGJvb2tEZXRhaWxzID0ge1xuICAgIGlkOiBib29rSWQsXG4gICAgbmFtZTogYm9va05hbWVcbiAgfTtcbiAgY29uc3QgZ2F0ZXdheUxhbmd1YWdlSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmdhdGV3YXlMYW5ndWFnZUlkXG4gIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udCA9IG1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICBjb25zdCBjdXJyZW50Q29udGV4dElkID0gY3VycmVudENoZWNrPy5jb250ZXh0SWRcblxuICAvKipcbiAgICogVXBkYXRlcyB0b29sLXNwZWNpZmljIHNldHRpbmdzIGFuZCBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZSAoZS5nLiwgJ1NjcmlwdHVyZVBhbmUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFNldHRpbmcgdmFsdWVcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5ncyA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5ncyAke2ZpZWxkTmFtZX09JHtmaWVsZFZhbHVlfWApXG4gICAgaWYgKHRvb2xzU2V0dGluZ3MpIHtcbiAgICAgIC8vIERlZXAgY2xvbmluZyBvYmplY3QgdG8gYXZvaWQgbW9kaWZ5aW5nIG9yaWdpbmFsIG9iamVjdFxuICAgICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSB7IC4uLnRvb2xzU2V0dGluZ3MgfTtcbiAgICAgIGxldCBjb21wb25lbnRTZXR0aW5ncyA9IF90b29sc1NldHRpbmdzPy5bTkFNRVNQQUNFXVxuICAgICAgaWYgKCFjb21wb25lbnRTZXR0aW5ncykge1xuICAgICAgICBjb21wb25lbnRTZXR0aW5ncyA9IHsgfVxuICAgICAgICBfdG9vbHNTZXR0aW5nc1tOQU1FU1BBQ0VdID0gY29tcG9uZW50U2V0dGluZ3NcbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudFNldHRpbmdzW2ZpZWxkTmFtZV0gPSBmaWVsZFZhbHVlXG4gICAgICBzZXRTZXR0aW5ncyh7IHRvb2xzU2V0dGluZ3M6IF90b29sc1NldHRpbmdzIH0sIHRydWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIHNldHRpbmdzIHRvIHN0b3JhZ2UgYWZ0ZXIgcmVtb3ZpbmcgQmlibGUgZGF0YSB0byByZWR1Y2Ugc2l6ZVxuICAgKiBDcmVhdGVzIHNoYWxsb3cgY29waWVzIHRvIGF2b2lkIG1vZGlmeWluZyBvcmlnaW5hbCBvYmplY3RzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfc2V0dGluZ3MgLSBTZXR0aW5ncyBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gX3NhdmVTZXR0aW5ncyhfc2V0dGluZ3MpIHtcbiAgICBpZiAoc2F2ZVNldHRpbmdzICYmIF9zZXR0aW5ncykge1xuICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7IC4uLl9zZXR0aW5ncyB9XG4gICAgICBkZWxldGUgbmV3U2V0dGluZ3MubWFuaWZlc3RcbiAgICAgIGNvbnN0IF9wYW5lU2V0dGluZ3MgPSBbIC4uLm5ld1NldHRpbmdzLnBhbmVTZXR0aW5ncyBdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9wYW5lU2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgX3BhbmVTZXR0aW5nID0gey4uLl9wYW5lU2V0dGluZ3NbaV19IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVTZXR0aW5nc1tpXSA9IF9wYW5lU2V0dGluZ1xuICAgICAgfVxuICAgICAgbmV3U2V0dGluZ3MucGFuZVNldHRpbmdzID0gX3BhbmVTZXR0aW5nc1xuXG4gICAgICBjb25zdCBfcGFuZUtleVNldHRpbmdzID0geyAuLi5uZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgfVxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKF9wYW5lS2V5U2V0dGluZ3MpXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGNvbnN0IF9wYW5lU2V0dGluZyA9IHsuLi5fcGFuZUtleVNldHRpbmdzW2tleV19IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVLZXlTZXR0aW5nc1trZXldID0gX3BhbmVTZXR0aW5nXG4gICAgICB9XG4gICAgICBuZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgPSBfcGFuZUtleVNldHRpbmdzXG5cbiAgICAgIHNhdmVTZXR0aW5ncyhuZXdTZXR0aW5ncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyBzdGF0ZSBhbmQgb3B0aW9uYWxseSBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyAtIE5ldyBzZXR0aW5ncyB0byBtZXJnZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvU2F2ZSAtIFdoZXRoZXIgdG8gcGVyc2lzdCBzZXR0aW5nc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0U2V0dGluZ3MobmV3U2V0dGluZ3MsIGRvU2F2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgX3NldHRpbmdzID0ge1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAuLi5uZXdTZXR0aW5nc1xuICAgIH1cblxuICAgIF9zZXRTZXR0aW5ncyhfc2V0dGluZ3MpXG4gICAgZG9TYXZlICYmIF9zYXZlU2V0dGluZ3MoX3NldHRpbmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgU2NyaXB0dXJlIHBhbmUgc2V0dGluZ3Mgd2l0aCBuZXcgcGFuZSBjb25maWd1cmF0aW9uc1xuICAgKiBNYWludGFpbnMgYSBrZXktYmFzZWQgbG9va3VwIGZvciBwYW5lIHNldHRpbmdzIGJ5IGxhbmd1YWdlL2JpYmxlL293bmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IF9wYW5lU2V0dGluZ3MgLSBBcnJheSBvZiBwYW5lIHNldHRpbmcgb2JqZWN0c1xuICAgKi9cbiAgY29uc3Qgc2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlID0gKE5BTUVTUEFDRSwgZmllbGROYW1lLCBfcGFuZVNldHRpbmdzKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tc2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlICR7ZmllbGROYW1lfWAsIF9wYW5lU2V0dGluZ3MpXG4gICAgY29uc3QgX3BhbmVLZXlTZXR0aW5ncyA9IHsuLi5wYW5lS2V5U2V0dGluZ3N9XG5cbiAgICBmb3IgKGNvbnN0IHBhbmVTZXR0aW5ncyBvZiBfcGFuZVNldHRpbmdzKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gcGFuZVNldHRpbmdzPy5sYW5ndWFnZUlkXG4gICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke3BhbmVTZXR0aW5ncz8uYmlibGVJZH0vJHtwYW5lU2V0dGluZ3M/Lm93bmVyfWBcbiAgICAgIF9wYW5lS2V5U2V0dGluZ3Nba2V5XSA9IHBhbmVTZXR0aW5nc1xuICAgIH1cblxuICAgIGNvbnN0IF9zZXR0aW5ncyA9IHtcbiAgICAgIHBhbmVTZXR0aW5nczogX3BhbmVTZXR0aW5ncyxcbiAgICAgIHBhbmVLZXlTZXR0aW5nczogX3BhbmVLZXlTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBzZXRTZXR0aW5ncyhfc2V0dGluZ3MsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBtYW5pZmVzdCBhbmQgYXBwIHNldHRpbmdzXG4gICAqIFVzZWQgZm9yIHBlcnNpc3RpbmcgdXNlciBwcmVmZXJlbmNlcyBsaWtlIGZvbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBjb25zdCBhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgPSAoZmllbGROYW1lLCBmaWVsZFZhbHVlKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tYWRkT2JqZWN0UHJvcGVydHlUb01hbmlmZXN0ICR7ZmllbGROYW1lfT0ke2ZpZWxkVmFsdWV9YClcbiAgICBpZiAobWFuaWZlc3QpIHtcbiAgICAgIGNvbnN0IF9tYW5pZmVzdCA9IHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIFtmaWVsZE5hbWVdOiBmaWVsZFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gc2F2ZSB0aGlzIGluIGFwcFNldHRpbmdzXG4gICAgICBjb25zdCBhcHBTZXR0aW5ncyA9IHNldHRpbmdzLmFwcFNldHRpbmdzIHx8IHt9XG4gICAgICBjb25zdCBfYXBwU2V0dGluZ3MgPSB7XG4gICAgICAgIC4uLmFwcFNldHRpbmdzLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRWYWx1ZVxuICAgICAgfVxuXG4gICAgICBzZXRTZXR0aW5ncyh7XG4gICAgICAgIG1hbmlmZXN0OiBfbWFuaWZlc3QsXG4gICAgICAgIGFwcFNldHRpbmdzOiBfYXBwU2V0dGluZ3NcbiAgICAgIH0sIHRydWUpXG4gICAgfVxuICB9XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnMgZm9yIHZhcmlvdXMgdXNlciBhY3Rpb25zXG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuIGFsZXJ0IGRpYWxvZyAocGxhY2Vob2xkZXIgaW1wbGVtZW50YXRpb24pXG4gICAqL1xuICBjb25zdCBvcGVuQWxlcnREaWFsb2cgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tb3BlbkFsZXJ0RGlhbG9nYCkgLy8gVE9ETyAtIGZsZXNoIG91dFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB2ZXJzZSBjb250ZW50IGhhcyBjaGFuZ2VkIGZyb20gb3JpZ2luYWxcbiAgICogQHBhcmFtIHtFdmVudH0gZSAtIElucHV0IGV2ZW50XG4gICAqL1xuICBjb25zdCBjaGVja0lmVmVyc2VDaGFuZ2VkID0gKGUpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGVja0lmVmVyc2VDaGFuZ2VkYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBjb25zdCBfaXNWZXJzZUNoYW5nZWQgPSBfbmV3VmVyc2VUZXh0ICE9PSB2ZXJzZVRleHRcbiAgICBzZXRTdGF0ZSh7IGlzVmVyc2VDaGFuZ2VkOiBfaXNWZXJzZUNoYW5nZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB2ZXJzZSB0ZXh0IGVkaXRpbmdcbiAgICogQHBhcmFtIHtFdmVudH0gZSAtIElucHV0IGV2ZW50IHdpdGggbmV3IHZlcnNlIHRleHRcbiAgICovXG4gIGNvbnN0IGhhbmRsZUVkaXRWZXJzZSA9IChlKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlRWRpdFZlcnNlYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogX25ld1ZlcnNlVGV4dCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHZlcnNlIGVkaXRpbmcgYW5kIHJlc2V0cyBzdGF0ZVxuICAgKi9cbiAgY29uc3QgY2FuY2VsRWRpdFZlcnNlID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNhbmNlbEVkaXRWZXJzZWApXG4gICAgc2V0U3RhdGUoeyBuZXdWZXJzZVRleHQ6IG51bGwsIG5ld1RhZ3M6IFtdLCBtb2RlOiBcImRlZmF1bHRcIiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBlZGl0ZWQgdmVyc2UgdGV4dCBhbmQgdXBkYXRlcyBhbGlnbm1lbnRzXG4gICAqIE1hcmtzIGNoZWNrIGFzIGhhdmluZyB2ZXJzZSBlZGl0c1xuICAgKi9cbiAgY29uc3Qgc2F2ZUVkaXRWZXJzZSA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1zYXZlRWRpdFZlcnNlYClcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBjdXJyZW50Q29udGV4dElkLnJlZmVyZW5jZTtcbiAgICBjb25zdCB2ZXJzZVJlZiA9IGN1cnJlbnRDb250ZXh0SWQudmVyc2VTcGFuIHx8IHZlcnNlOyAvLyBpZiBpbiB2ZXJzZSBzcGFuLCB1c2UgaXRcbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRCaWJsZVtjaGFwdGVyXVt2ZXJzZVJlZl07XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgICBuZXdUYWdzOiBbXSxcbiAgICAgIG1vZGU6IFwiZGVmYXVsdFwiLFxuICAgICAgaXNWZXJzZUNoYW5nZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZVJlZiwgYmVmb3JlLCBuZXdWZXJzZVRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBjaGVjayBpbiB0aGUgc2VxdWVuY2VcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUdvVG9OZXh0KCkge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWhhbmRsZUdvVG9OZXh0YClcbiAgICBjb25zdCBuZXh0Q2hlY2sgPSBmaW5kTmV4dENoZWNrKGdyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgIGNoYW5nZUN1cnJlbnRDaGVja18obmV4dENoZWNrLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgY2hlY2sgaW4gdGhlIHNlcXVlbmNlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVHb1RvUHJldmlvdXMoKSB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlR29Ub1ByZXZpb3VzYClcbiAgICBjb25zdCBwcmV2aW91c0NoZWNrID0gZmluZFByZXZpb3VzQ2hlY2soZ3JvdXBzRGF0YSwgY3VycmVudENvbnRleHRJZCwgZmFsc2UpXG4gICAgY2hhbmdlQ3VycmVudENoZWNrXyhwcmV2aW91c0NoZWNrLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hlY2tib3ggY2hhbmdlcyBmb3IgdGFnc1xuICAgKiBBZGRzIG9yIHJlbW92ZXMgdGFncyBmcm9tIHRoZSBjdXJyZW50IGxpc3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIFRhZyBpZGVudGlmaWVyXG4gICAqL1xuICBjb25zdCBoYW5kbGVUYWdzQ2hlY2tib3ggPSAodGFnKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlVGFnc0NoZWNrYm94YCwgdGFnKVxuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gbmV3VGFncyB8fCBbXVxuICAgIGNvbnN0IHRhZ0luZGV4ID0gY3VycmVudFRhZ3MuaW5kZXhPZih0YWcpO1xuICAgIGxldCBfbmV3VGFncztcblxuICAgIGlmICh0YWdJbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBjb3B5ID0gY3VycmVudFRhZ3Muc2xpY2UoMCk7XG4gICAgICBjb3B5LnNwbGljZSh0YWdJbmRleCwgMSk7XG4gICAgICBfbmV3VGFncyA9IGNvcHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9uZXdUYWdzID0gWy4uLmN1cnJlbnRUYWdzLCB0YWddO1xuICAgIH1cblxuICAgIHNldFN0YXRlKHsgbmV3VGFnczogX25ld1RhZ3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHNlbGVjdGlvbnMgYWdhaW5zdCB2ZXJzZSB0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZVRleHRfIC0gVmVyc2UgdGV4dCB0byB2YWxpZGF0ZSBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGlvbnNfIC0gU2VsZWN0aW9ucyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBzZWxlY3Rpb25zIGFyZSB2YWxpZFxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTZWxlY3Rpb25zID0gKHZlcnNlVGV4dF8sIHNlbGVjdGlvbnNfKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tdmFsaWRhdGVTZWxlY3Rpb25zYCwgc2VsZWN0aW9uc18pXG4gICAgcmV0dXJuIHNlbGVjdGlvbnNIZWxwZXJzLnZhbGlkYXRlVmVyc2VTZWxlY3Rpb25zKHZlcnNlVGV4dF8sIHNlbGVjdGlvbnNfKVxuICB9XG5cbiAgLyoqXG4gICAqIE1lbW9pemVkIGNvbXB1dGF0aW9uIG9mIHVuZmlsdGVyZWQgdmVyc2UgdGV4dCBpbmNsdWRpbmcgVVNGTSBtYXJrZXJzXG4gICAqIFVzZWQgZm9yIGRpc3BsYXlpbmcgYW5kIGVkaXRpbmcgY29tcGxldGUgdmVyc2UgZGF0YVxuICAgKi9cbiAgY29uc3QgdW5maWx0ZXJlZFZlcnNlVGV4dCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCB1bmZpbHRlcmVkVmVyc2VUZXh0XyA9ICcnXG4gICAgY29uc3QgcmVmZXJlbmNlID0gY3VycmVudENvbnRleHRJZD8ucmVmZXJlbmNlXG4gICAgY29uc3QgY2hhcHRlciA9IHJlZmVyZW5jZT8uY2hhcHRlclxuICAgIGNvbnN0IHZlcnNlID0gcmVmZXJlbmNlPy52ZXJzZVxuICAgIGlmIChjaGFwdGVyICYmIHZlcnNlKSB7XG4gICAgICBjb25zdCB2ZXJzZURhdGEgPSB0YXJnZXRCaWJsZT8uW2NoYXB0ZXJdPy5bdmVyc2VdXG4gICAgICBpZiAodmVyc2VEYXRhKSB7XG4gICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID0gdmVyc2VEYXRhXG4gICAgICAgIGlmICh0eXBlb2YgdmVyc2VEYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5nZXRVc2ZtRm9yVmVyc2VDb250ZW50KHZlcnNlRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmZpbHRlcmVkVmVyc2VUZXh0X1xuICB9LCBbdGFyZ2V0QmlibGUsIGN1cnJlbnRDb250ZXh0SWRdKVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGVtcG9yYXJ5IHZhbHVlIGZvciBhIGNoZWNraW5nIGRhdGEgcHJvcGVydHlcbiAgICogVXNlZCBmb3IgdHJhY2tpbmcgdW5zYXZlZCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBQcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgY29uc3Qgc2V0VGVtcENoZWNraW5nSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3Q2hlY2tpbmdEYXRhID0gdGVtcENoZWNraW5nRGF0YSA/IHsuLi50ZW1wQ2hlY2tpbmdEYXRhfSA6IHt9XG4gICAgbmV3Q2hlY2tpbmdEYXRhW2tleV0gPSB2YWx1ZVxuICAgIHNldFRlbXBDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgc2VsZWN0aW9ucyBpbiB0ZW1wb3Jhcnkgc3RhdGUgd2l0aG91dCBzYXZpbmdcbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0aW9ucyAtIE5ldyBzZWxlY3Rpb25zIGFycmF5XG4gICAqL1xuICBjb25zdCBjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlID0gKHNlbGVjdGlvbnMpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlYCwgc2VsZWN0aW9ucylcbiAgICBzZXRUZW1wQ2hlY2tpbmdJdGVtKCdzZWxlY3Rpb25zJywgc2VsZWN0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBcIm5vdGhpbmcgdG8gc2VsZWN0XCIgZmxhZyBmb3IgY3VycmVudCBjaGVja1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdCAtIE5ldyBzdGF0ZSB2YWx1ZVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlTm90aGluZ1RvU2VsZWN0ID0gKHNlbGVjdCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXRvZ2dsZU5vdGhpbmdUb1NlbGVjdGAsIHNlbGVjdClcbiAgICBzZXRUZW1wQ2hlY2tpbmdJdGVtKCdub3RoaW5nVG9TZWxlY3QnLCBzZWxlY3QpXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY3VycmVudCBjaGVjayBiZWluZyB3b3JrZWQgb25cbiAgICogVmFsaWRhdGVzIGZvciB1bnNhdmVkIGNoYW5nZXMgYmVmb3JlIHN3aXRjaGluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3Q29udGV4dCAtIE5ldyBjaGVjayBjb250ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9DaGVjayAtIFNraXAgdmFsaWRhdGlvbiBpZiB0cnVlXG4gICAqL1xuICBjb25zdCBjaGFuZ2VDdXJyZW50Q2hlY2tfID0gKG5ld0NvbnRleHQsIG5vQ2hlY2sgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IG5ld0NvbnRleHRJZCA9IG5ld0NvbnRleHQ/LmNvbnRleHRJZFxuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNoYW5nZUN1cnJlbnRDb250ZXh0SWRgLCBuZXdDb250ZXh0SWQpXG5cbiAgICBjb25zdCBzZWxlY3Rpb25zVW5jaGFuZ2VkID0gaXNFcXVhbChjdXJyZW50U2VsZWN0aW9ucywgdGVtcFNlbGVjdGlvbnMpXG4gICAgaWYgKG5vQ2hlY2sgfHwgc2VsZWN0aW9uc1VuY2hhbmdlZCkge1xuICAgICAgaWYgKG5ld0NvbnRleHRJZCkge1xuICAgICAgICBsZXQgY2hlY2sgPSBmaW5kQ2hlY2soZ3JvdXBzRGF0YSwgbmV3Q29udGV4dElkLCBmYWxzZSlcbiAgICAgICAgdXBkYXRlQ29udGV4dChuZXdDb250ZXh0KVxuICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICBzZXRMb2NhbENoZWNraW5nRGF0YShudWxsKVxuICAgICAgICAgIHNldFRlbXBDaGVja2luZ0RhdGEobnVsbClcbiAgICAgICAgICB1cGRhdGVNb2RlRm9yU2VsZWN0aW9ucyhjaGVjay5zZWxlY3Rpb25zLCBjaGVjay5ub3RoaW5nVG9TZWxlY3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ0NoZWNrZXIuY2hhbmdlQ3VycmVudENvbnRleHRJZCAtIHVuc2F2ZWQgY2hhbmdlcycpXG4gICAgfVxuICAgIGNoYW5nZWRDdXJyZW50Q2hlY2sgJiYgY2hhbmdlZEN1cnJlbnRDaGVjayhuZXdDb250ZXh0KVxuICB9XG5cbiAgY29uc3QgZGlyZWN0aW9uID0gJ2x0cidcbiAgY29uc3QgYm9va21hcmtFbmFibGVkID0gZ2V0Q3VycmVudFZhbHVlRm9yKCdyZW1pbmRlcnMnKVxuICBjb25zdCBpc1ZlcnNlRWRpdGVkID0gISFnZXRDdXJyZW50VmFsdWVGb3IoJ3ZlcnNlRWRpdHMnKVxuICBjb25zdCBpc1ZlcnNlSW52YWxpZGF0ZWQgPSAhIWdldEN1cnJlbnRWYWx1ZUZvcignaW52YWxpZGF0ZWQnKVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGNoZWNrIGJlaW5nIHdvcmtlZCBvblxuICAgKiBWYWxpZGF0ZXMgZm9yIHVuc2F2ZWQgY2hhbmdlcyBiZWZvcmUgc3dpdGNoaW5nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdDb250ZXh0IC0gTmV3IGNoZWNrIGNvbnRleHRcbiAgICogQHBhcmFtIHtib29sZWFufSBub0NoZWNrIC0gU2tpcCB2YWxpZGF0aW9uIGlmIHRydWVcbiAgICovXG4gIGNvbnN0IF9zYXZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LV9zYXZlU2VsZWN0aW9uIHBlcnNpc3QgdG8gZmlsZWApXG4gICAgY29uc3QgeyBjaGVja0luR3JvdXBzRGF0YSwgX2N1cnJlbnRDaGVjaywgbmV3U3RhdGUsIF9uZXdDaGVja2luZ0RhdGEgfSA9IGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgaWYgKHRlbXBOb3RoaW5nVG9TZWxlY3QpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSB0ZW1wTm90aGluZ1RvU2VsZWN0XG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuc2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuaW52YWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSBmYWxzZVxuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLnNlbGVjdGlvbnMgPSB0ZW1wU2VsZWN0aW9uc1xuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLmludmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ25vdGhpbmdUb1NlbGVjdCcpXG4gICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ2ludmFsaWRhdGVkJylcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoX2N1cnJlbnRDaGVjaywgY2hlY2tJbkdyb3Vwc0RhdGEsIF9uZXdDaGVja2luZ0RhdGEpXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmVzIGN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBzYXZpbmcgbW9kaWZpY2F0aW9uc1xuICAgKiBDcmVhdGVzIGRlZXAgY29waWVzIHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIHN0YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIGNsb25lZCBkYXRhIHN0cnVjdHVyZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lRGF0YUZvclNhdmluZygpIHtcbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgY29uc3QgY2hlY2tJbkdyb3Vwc0RhdGEgPSBmaW5kQ2hlY2soX2dyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQpXG4gICAgbGV0IF9jdXJyZW50Q2hlY2tcbiAgICBsZXQgbmV3U3RhdGVcbiAgICBsZXQgX25ld0NoZWNraW5nRGF0YVxuICAgIGlmIChjaGVja0luR3JvdXBzRGF0YSkge1xuICAgICAgLy8gc2F2ZSB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2hlY2tJbkdyb3Vwc0RhdGEuY2F0ZWdvcnlcbiAgICAgIGNvbnN0IG5ld0NoZWNrRGF0YSA9IF8uY2xvbmVEZWVwKGN1cnJlbnRDaGVja2luZ0RhdGEpXG4gICAgICBfY3VycmVudENoZWNrID0gZmluZENoZWNrKG5ld0NoZWNrRGF0YVtjYXRlZ29yeV0sIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIGN1cnJlbnRDaGVja2luZ0RhdGE6IG5ld0NoZWNrRGF0YSxcbiAgICAgICAgY3VycmVudENoZWNrOiBfY3VycmVudENoZWNrLFxuICAgICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YSxcbiAgICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgICBtb2RpZmllZDogdHJ1ZVxuICAgICAgfVxuICAgICAgX25ld0NoZWNraW5nRGF0YSA9IGxvY2FsQ2hlY2tpbmdEYXRhID8gey4uLmxvY2FsQ2hlY2tpbmdEYXRhfSA6IHt9XG4gICAgfVxuICAgIHJldHVybiB7IGNoZWNrSW5Hcm91cHNEYXRhLCBfY3VycmVudENoZWNrLCBuZXdTdGF0ZSwgX25ld0NoZWNraW5nRGF0YSB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIGNoZWNrIGRhdGEgb2JqZWN0c1xuICAgKiBNb2RpZmllcyBib3RoIHRoZSBjdXJyZW50IGNoZWNrIGFuZCBncm91cHMgZGF0YVxuICAgKiBAcGFyYW0ge29iamVjdH0gX2N1cnJlbnRDaGVjayAtIEN1cnJlbnQgY2hlY2sgb2JqZWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVja0luR3JvdXBzRGF0YSAtIENoZWNrIGluIGdyb3VwcyBkYXRhIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0NoZWNraW5nRGF0YSAtIE5ldyBkYXRhIHRvIGFwcGx5XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWYWx1ZXNJbkNoZWNrRGF0YShfY3VycmVudENoZWNrLCBjaGVja0luR3JvdXBzRGF0YSwgX25ld0NoZWNraW5nRGF0YSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKF9uZXdDaGVja2luZ0RhdGEpKSB7XG4gICAgICBjb25zdCBuZXdDaGVja2luZ1ZhbHVlID0gX25ld0NoZWNraW5nRGF0YVtrZXldXG4gICAgICBfY3VycmVudENoZWNrW2tleV0gPSBuZXdDaGVja2luZ1ZhbHVlXG4gICAgICBjaGVja0luR3JvdXBzRGF0YVtrZXldID0gbmV3Q2hlY2tpbmdWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBtdWx0aXBsZSBjaGVjayBwcm9wZXJ0eSBjaGFuZ2VzIHRvIGZpbGVcbiAgICogQ2xvbmVzIGRhdGEsIGFwcGxpZXMgY2hhbmdlcywgdXBkYXRlcyBzdGF0ZSwgYW5kIHNhdmVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdEYXRhIC0gT2JqZWN0IHdpdGggcHJvcGVydHkgbmFtZXMgYW5kIHZhbHVlcyB0byB1cGRhdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0IF9zYXZlRGF0YSA9IChuZXdEYXRhKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tX3NhdmVEYXRhIHBlcnNpc3QgdG8gZmlsZWApXG4gICAgY29uc3QgeyBjaGVja0luR3JvdXBzRGF0YSwgX2N1cnJlbnRDaGVjaywgbmV3U3RhdGUsIF9uZXdDaGVja2luZ0RhdGEgfSA9IGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobmV3RGF0YSkpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YVtrZXldID0gbmV3RGF0YVtrZXldXG4gICAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KVxuICAgICAgfVxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoX2N1cnJlbnRDaGVjaywgY2hlY2tJbkdyb3Vwc0RhdGEsIF9uZXdDaGVja2luZ0RhdGEpXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgY2hhbmdlcyB0byBhIHNwZWNpZmljIGNoZWNrIChtYXkgbm90IGJlIGN1cnJlbnQgY2hlY2spXG4gICAqIE9ubHkgc2F2ZXMgaWYgZGF0YSBhY3R1YWxseSBjaGFuZ2VkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVjayAtIENoZWNrIG9iamVjdCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0RhdGEgLSBOZXcgZGF0YSB0byBhcHBseVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBkYXRhIHdhcyBjaGFuZ2VkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdCBfc2F2ZUNoZWNraW5nRGF0YSA9IChjaGVjaywgbmV3RGF0YSkgPT4ge1xuICAgIGxldCBjaGFuZ2VkRGF0YSA9IGZhbHNlXG4gICAgaWYgKGNoZWNrKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZXdEYXRhKSkge1xuICAgICAgICBpZiAoY2hlY2tba2V5XSAhPT0gbmV3RGF0YVtrZXldKSB7XG4gICAgICAgICAgY2hlY2tba2V5XSA9IG5ld0RhdGFba2V5XVxuICAgICAgICAgIGNoYW5nZWREYXRhID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VkRGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1fc2F2ZUNoZWNraW5nRGF0YSBwZXJzaXN0IGNoYW5nZXMgdG8gZmlsZWAsIGNoZWNrKVxuICAgICAgICBjb25zdCBuZXdDaGVja2luZ0RhdGEgPSB7XG4gICAgICAgICAgY3VycmVudENoZWNrOiBjaGVjayxcbiAgICAgICAgfVxuICAgICAgICBzYXZlQ2hlY2tpbmdEYXRhICYmIHNhdmVDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZERhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcHJvcGVydHkgZnJvbSB0ZW1wb3JhcnkgY2hlY2tpbmcgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZSB0byByZW1vdmVcbiAgICovXG4gIGZ1bmN0aW9uIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KSB7XG4gICAgaWYgKHRlbXBDaGVja2luZ0RhdGE/Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IF90ZW1wQ2hlY2tpbmdEYXRhID0gey4uLnRlbXBDaGVja2luZ0RhdGF9XG4gICAgICBkZWxldGUgX3RlbXBDaGVja2luZ0RhdGFba2V5XVxuICAgICAgc2V0VGVtcENoZWNraW5nRGF0YShfdGVtcENoZWNraW5nRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBzZWxlY3Rpb24gbW9kZSB3aXRob3V0IHNhdmluZyBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCBjYW5jZWxTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsU2VsZWN0aW9uYClcbiAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb2RlOiAnZGVmYXVsdCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGN1cnJlbnQgc2VsZWN0aW9uc1xuICAgKi9cbiAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2xlYXJTZWxlY3Rpb25gKVxuICAgIHNldFRlbXBDaGVja2luZ0l0ZW0oJ3NlbGVjdGlvbnMnLCBbXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGJvb2ttYXJrL3JlbWluZGVyIGZsYWcgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICovXG4gIGNvbnN0IHRvZ2dsZUJvb2ttYXJrID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXRvZ2dsZUJvb2ttYXJrYClcbiAgICBfc2F2ZURhdGEoe1xuICAgICAgcmVtaW5kZXJzOiAhZ2V0VGVtcFZhbHVlRm9yKCdyZW1pbmRlcnMnKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgVUkgbW9kZSAoZGVmYXVsdCwgc2VsZWN0LCBlZGl0LCBjb21tZW50KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIE5ldyBtb2RlIGlkZW50aWZpZXJcbiAgICovXG4gIGNvbnN0IGNoYW5nZU1vZGUgPSAobW9kZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNoYW5nZU1vZGVgLCBtb2RlKVxuICAgIHNldFN0YXRlKHsgbW9kZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBjb21tZW50IHRleHQgaGFzIGNoYW5nZWQgZnJvbSBzYXZlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnRcbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrSWZDb21tZW50Q2hhbmdlZChlKSB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2hlY2tJZkNvbW1lbnRDaGFuZ2VkYClcbiAgICBjb25zdCBuZXdjb21tZW50ID0gZS50YXJnZXQudmFsdWUgfHwgJyc7XG4gICAgY29uc3Qgb2xkY29tbWVudCA9IGNvbW1lbnRUZXh0IHx8ICcnO1xuICAgIGNvbnN0IGlzQ29tbWVudENoYW5nZWQgPSBuZXdjb21tZW50ICE9PSBvbGRjb21tZW50XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBjb21tZW50IGVkaXRpbmcgd2l0aG91dCBzYXZpbmdcbiAgICovXG4gIGNvbnN0IGNhbmNlbENvbW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsQ29tbWVudGApXG4gICAgZGVsZXRlVGVtcENoZWNraW5nRGF0YSgnY29tbWVudHMnKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGNvbW1lbnQgY2hhbmdlcyB0byBwZXJzaXN0ZW50IHN0b3JhZ2VcbiAgICovXG4gIGNvbnN0IHNhdmVDb21tZW50ID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVDb21tZW50YClcbiAgICBjb25zdCBuZXdDb21tZW50ID0gZ2V0VGVtcFZhbHVlRm9yKCdjb21tZW50cycpXG4gICAgX3NhdmVEYXRhKHsgY29tbWVudHM6IG5ld0NvbW1lbnQgfSlcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1lbnQgdGV4dCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgLSBJbnB1dCBldmVudCB3aXRoIG5ldyBjb21tZW50XG4gICAqL1xuICBjb25zdCBoYW5kbGVDb21tZW50ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlQ29tbWVudGApXG4gICAgY29uc3QgbmV3Q29tbWVudCA9IGUudGFyZ2V0LnZhbHVlXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnY29tbWVudHMnLCBuZXdDb21tZW50KVxuICAgIHNldFN0YXRlKHtcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZWFkeVRvRGlzcGxheUNoZWNrZXIgPSBncm91cHNEYXRhICYmIGdyb3Vwc0luZGV4ICYmIGN1cnJlbnRDb250ZXh0SWQgJiYgdmVyc2VUZXh0XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZm9yIGdldExleGljb25EYXRhIGNhbGxiYWNrIHdpdGggbG9nZ2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV4aWNvbklkIC0gTGV4aWNvbiBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRyeUlkIC0gRW50cnkgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBMZXhpY29uIGRhdGFcbiAgICovXG4gIGNvbnN0IGdldExleGljb25EYXRhXyA9IChsZXhpY29uSWQsIGVudHJ5SWQpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1nZXRMZXhpY29uRGF0YV9gLCB7bGV4aWNvbklkLCBlbnRyeUlkfSlcbiAgICBjb25zdCBsZXhpY29uRGF0YSA9IGdldExleGljb25EYXRhICYmIGdldExleGljb25EYXRhKGxleGljb25JZCwgZW50cnlJZClcbiAgICByZXR1cm4gbGV4aWNvbkRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHBvcG92ZXIgZGlzcGxheVxuICAgKi9cbiAgY29uc3Qgb25DbG9zZVBvcG92ZXIgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tb25DbG9zZVBvcG92ZXJgKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHBvcG92ZXJQcm9wczoge1xuICAgICAgICBwb3BvdmVyVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIHBvcG92ZXIgd2l0aCB0aXRsZSBhbmQgY29udGVudCBhdCBzcGVjaWZpZWQgcG9zaXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gUG9wb3ZlciB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYm9keVRleHQgLSBQb3BvdmVyIGNvbnRlbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IHBvc2l0aW9uQ29vcmQgLSBQb3NpdGlvbiBjb29yZGluYXRlc1xuICAgKi9cbiAgY29uc3Qgc2hvd1BvcG92ZXIgPSAodGl0bGUsIGJvZHlUZXh0LCBwb3NpdGlvbkNvb3JkKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tc2hvd1BvcG92ZXJgLCB0aXRsZSlcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBwb3BvdmVyUHJvcHM6IHtcbiAgICAgICAgcG9wb3ZlclZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBib2R5VGV4dCxcbiAgICAgICAgcG9zaXRpb25Db29yZCxcbiAgICAgICAgb25DbG9zZVBvcG92ZXI6ICgpID0+IG9uQ2xvc2VQb3BvdmVyKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGV4cGFuZGVkIHRyYW5zbGF0aW9uIGhlbHBzIG1vZGFsXG4gICAqL1xuICBjb25zdCB0b2dnbGVIZWxwc01vZGFsID0gKCkgPT4ge1xuICAgIGNvbnN0IF9zaG93SGVscHNNb2RhbCA9ICFzaG93SGVscHNNb2RhbFxuICAgIHNldFN0YXRlKHtcbiAgICAgIHNob3dIZWxwc01vZGFsOiBfc2hvd0hlbHBzTW9kYWxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHRyYW5zbGF0aW9uIGhlbHBzIHNpZGViYXIgdmlzaWJpbGl0eVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlSGVscHMgPSAoKSA9PiB7XG4gICAgY29uc3QgX3Nob3dIZWxwcyA9ICFzaG93SGVscHNcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBzaG93SGVscHM6IF9zaG93SGVscHNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBCaWJsZSBib29rIHRvIHRoZSBiaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQ3JlYXRlcyBsYW5ndWFnZSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBiaWJsZXMgLSBCaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIExhbmd1YWdlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmlibGVJZCAtIEJpYmxlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvb2sgLSBCb29rIGRhdGFcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVCaWJsZVRvS2V5KGJpYmxlcywga2V5LCBiaWJsZUlkLCBib29rKSB7XG4gICAgbGV0IGtleUdyb3VwID0gYmlibGVzW2tleV1cbiAgICBpZiAoIWtleUdyb3VwKSB7IC8vIGlmIGdyb3VwIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgbmV3XG4gICAgICBrZXlHcm91cCA9IHt9XG4gICAgICBiaWJsZXNba2V5XSA9IGtleUdyb3VwXG4gICAgfVxuICAgIGtleUdyb3VwW2JpYmxlSWRdID0gYm9va1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdmVyc2UgY29udGVudCBpbiB0YXJnZXQgQmlibGVcbiAgICogSGFuZGxlcyBVU0ZNIGNvbnZlcnNpb24sIGFsaWdubWVudCB1cGRhdGVzLCBhbmQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlciAtIENoYXB0ZXIgbnVtYmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZSAtIFZlcnNlIG51bWJlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkVmVyc2VUZXh0IC0gT3JpZ2luYWwgdmVyc2UgdGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gTmV3IHZlcnNlIHRleHRcbiAgICovXG4gIGZ1bmN0aW9uIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZSwgb2xkVmVyc2VUZXh0LCBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zb2xlLmxvZyhgZWRpdFRhcmdldFZlcnNlICR7Y2hhcHRlcn06JHt2ZXJzZX0gLSBjaGFuZ2VkIHRvICR7bmV3VmVyc2VUZXh0fWApXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gZmlyc3QgdXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuXG4gICAgY29uc3QgX2JpYmxlcyA9IFsgLi4uYmlibGVzX11cbiAgICBjb25zdCBfdGFyZ2V0QmlibGUgPSB7Li4uX2JpYmxlc1swXX1cbiAgICBfYmlibGVzWzBdID0gX3RhcmdldEJpYmxlXG4gICAgY29uc3QgdGFyZ2V0Qm9vayA9IHsuLi5fdGFyZ2V0QmlibGU/LmJvb2t9XG4gICAgX3RhcmdldEJpYmxlLmJvb2sgPSB0YXJnZXRCb29rXG4gICAgY29uc3QgdGFyZ2V0Q2hhcHRlciA9IHsuLi50YXJnZXRCb29rW2NoYXB0ZXJdfVxuICAgIHRhcmdldEJvb2tbY2hhcHRlcl0gPSB0YXJnZXRDaGFwdGVyXG4gICAgdGFyZ2V0Q2hhcHRlclt2ZXJzZV0gPSBuZXdWZXJzZVRleHRcblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIG5vdyBhcHBseSBuZXcgdmVyc2UgdGV4dCB0byBzZWxlY3RlZCBhbGlnbmVkIHZlcnNlIGFuZCBjYWxsIGJhY2sgdG8gZXh0ZW5zaW9uIHRvIHNhdmVcblxuICAgIGxldCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0XG4gICAgaWYgKHR5cGVvZiBfbmV3VmVyc2VUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgX25ld1ZlcnNlVGV4dCA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShfbmV3VmVyc2VUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyRGF0YSA9IHRhcmdldEJpYmxlPy5bY2hhcHRlcl1cbiAgICBjb25zdCBjdXJyZW50VmVyc2VEYXRhID0gY3VycmVudENoYXB0ZXJEYXRhPy5bdmVyc2VdXG4gICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlRGF0YSwgX25ld1ZlcnNlVGV4dClcbiAgICB0YXJnZXRDaGFwdGVyW3ZlcnNlXSA9IHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHMgfTsgLy8gc2F2ZVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoX2JpYmxlcywgdGFyZ2V0Qm9vaylcblxuICAgIGNvbnN0IHZlcnNlVGV4dCA9IHJlbW92ZVVzZm1NYXJrZXJzKF9uZXdWZXJzZVRleHQpXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0XG4gICAgfSlcblxuICAgIGNoYW5nZVRhcmdldFZlcnNlICYmIGNoYW5nZVRhcmdldFZlcnNlKGNoYXB0ZXIsIHZlcnNlLCBuZXdWZXJzZVRleHQsIHRhcmdldFZlcnNlT2JqZWN0cylcbiAgICBfc2F2ZURhdGEoeyB2ZXJzZUVkaXRzOiB0cnVlIH0pXG5cbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgbGV0IGNoYW5nZWREYXRhID0gZmFsc2VcbiAgICBzZWxlY3Rpb25zSGVscGVycy52YWxpZGF0ZUFsbFNlbGVjdGlvbnNGb3JWZXJzZShuZXdWZXJzZVRleHQsIGJvb2tJZCwgY2hhcHRlciwgdmVyc2UsIF9ncm91cHNEYXRhLCAoY2hlY2ssIGludmFsaWRhdGVkKSA9PiB7XG4gICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrSWQgPSBjdXJyZW50Q2hlY2s/LmNvbnRleHRJZD8uY2hlY2tJZFxuICAgICAgICBjb25zdCBjaGVja0lkID0gY2hlY2s/LmNvbnRleHRJZD8uY2hlY2tJZFxuXG4gICAgICAgIGlmIChjaGVja0lkID09PSBjdXJyZW50Q2hlY2tJZCkge1xuICAgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIGN1cnJlbnQgY2hlY2tcbiAgICAgICAgICBfc2F2ZURhdGEoe1xuICAgICAgICAgICAgaW52YWxpZGF0ZWQsXG4gICAgICAgICAgICB2ZXJzZUVkaXRzOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1lZGl0VGFyZ2V0VmVyc2UgLSBjaGVjayB2YWxpZGF0ZWQsIHN0YXRlIGNoYW5nZWQ6IGludmFsaWQ6ICR7aW52YWxpZGF0ZWR9YCwgY2hlY2spXG4gICAgICAgIGNoYW5nZWREYXRhID0gY2hhbmdlZERhdGEgfHwgX3NhdmVDaGVja2luZ0RhdGEoY2hlY2ssIHsgaW52YWxpZGF0ZWQsIHZlcnNlRWRpdHM6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKGNoYW5nZWREYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1lZGl0VGFyZ2V0VmVyc2UgLSBjaGFuZ2VzIGRldGVjdGVkIHVwZGF0aW5nIGdyb3Vwc0RhdGFgKVxuICAgICAgc2V0U3RhdGUoe1xuICAgICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyB3aXRoIG5ldyBCaWJsZSBkYXRhIGFuZCBwYW5lIGNvbmZpZ3VyYXRpb25zXG4gICAqIE9yZ2FuaXplcyBCaWJsZXMgYnkgbGFuZ3VhZ2UgYW5kIGluaXRpYWxpemVzIHBhbmUgc2V0dGluZ3NcbiAgICogQHBhcmFtIHtBcnJheX0gbmV3QmlibGVzIC0gQXJyYXkgb2YgQmlibGUgb2JqZWN0c1xuICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0QmlibGUgLSBUYXJnZXQgQmlibGUgZGF0YVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MobmV3QmlibGVzLCB0YXJnZXRCaWJsZSkge1xuICAgIGNvbnN0IF9iaWJsZXMgPSB7fVxuICAgIGxldCBfcGFuZVNldHRpbmdzID0gW11cbiAgICBjb25zdCBfcGFuZUtleVNldHRpbmdzID0gaW5pdGlhbFNldHRpbmdzPy5wYW5lS2V5U2V0dGluZ3MgfHwge31cbiAgICBpZiAobmV3QmlibGVzPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYmlibGUgb2YgbmV3QmlibGVzKSB7XG4gICAgICAgIGxldCBsYW5ndWFnZUlkID0gYmlibGU/Lmxhbmd1YWdlSWRcbiAgICAgICAgY29uc3Qgb3duZXIgPSBiaWJsZT8ub3duZXJcbiAgICAgICAgY29uc3QgYm9vayA9IGJpYmxlPy5ib29rXG4gICAgICAgIGNvbnN0IGJpYmxlSWQgPSBiaWJsZT8uYmlibGVJZFxuICAgICAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gTlRfT1JJR19MQU5HIHx8IGxhbmd1YWdlSWQgPT09IE9UX09SSUdfTEFORykge1xuICAgICAgICAgIGxhbmd1YWdlSWQgPSAnb3JpZ2luYWxMYW5ndWFnZSdcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke2JpYmxlSWR9LyR7b3duZXJ9YFxuICAgICAgICBjb25zdCBpbml0aWFsUGFuZVNldHRpbmdzID0gX3BhbmVLZXlTZXR0aW5ncz8uW2tleV1cbiAgICAgICAgY29uc3QgbGFuZ0tleSA9IGAke2xhbmd1YWdlSWR9XyR7b3duZXJ9YFxuICAgICAgICBzYXZlQmlibGVUb0tleShfYmlibGVzLCBsYW5nS2V5LCBiaWJsZUlkLCBib29rKVxuICAgICAgICBzYXZlQmlibGVUb0tleShfYmlibGVzLCBsYW5ndWFnZUlkLCBiaWJsZUlkLCBib29rKSAvLyBhbHNvIHNhdmUgYXMgZGVmYXVsdCBmb3IgbGFuZ3VhZ2Ugd2l0aG91dCBvd25lclxuICAgICAgICBjb25zdCBwYW5lID0gaW5pdGlhbFBhbmVTZXR0aW5ncyB8fCB7XG4gICAgICAgICAgLi4uYmlibGUsXG4gICAgICAgICAgbGFuZ3VhZ2VJZFxuICAgICAgICB9XG4gICAgICAgIF9wYW5lU2V0dGluZ3MucHVzaChwYW5lKVxuICAgICAgICBpZiAoIWluaXRpYWxQYW5lU2V0dGluZ3MpIHtcbiAgICAgICAgICBfcGFuZUtleVNldHRpbmdzW2tleV0gPSBwYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3BhbmVTZXR0aW5ncyA9IFtdXG4gICAgfVxuXG4gICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSBpbml0aWFsU2V0dGluZ3M/LnRvb2xzU2V0dGluZ3MgfHxcbiAgICB7XG4gICAgICAnQ2hlY2tBcmVhJzoge1xuICAgICAgICAnZm9udFNpemUnOiAxMDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgX21hbmlmZXN0ID0gaW5pdGlhbFNldHRpbmdzPy5tYW5pZmVzdCB8fFxuICAgIHtcbiAgICAgIGxhbmd1YWdlX25hbWU6IHRhcmdldEJpYmxlPy5tYW5pZmVzdD8uZHVibGluX2NvcmU/Lmxhbmd1YWdlPy50aXRsZSB8fCAnQ3VycmVudCcsXG4gICAgICBwcm9qZWN0Rm9udDogdGFyZ2V0QmlibGU/Lm1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGFwcFNldHRpbmdzID0gaW5pdGlhbFNldHRpbmdzPy5hcHBTZXR0aW5ncyB8fCB7fVxuICAgIF9tYW5pZmVzdCA9IHtcbiAgICAgIC4uLl9tYW5pZmVzdCxcbiAgICAgIC4uLmFwcFNldHRpbmdzIC8vIG9sZGVyIGNvZGUgaXMgbG9va2luZyBmb3IgYXBwU2V0dGluZ3MgaW4gbWFuaWZlc3RcbiAgICB9XG5cbiAgICBzZXRCaWJsZXMoX2JpYmxlcylcbiAgICBzZXRUYXJnZXRCaWJsZSh0YXJnZXRCaWJsZSlcbiAgICBzZXRTZXR0aW5ncyh7XG4gICAgICBwYW5lU2V0dGluZ3M6IF9wYW5lU2V0dGluZ3MsXG4gICAgICBwYW5lS2V5U2V0dGluZ3M6IF9wYW5lS2V5U2V0dGluZ3MsXG4gICAgICB0b29sc1NldHRpbmdzOiBfdG9vbHNTZXR0aW5ncyxcbiAgICAgIG1hbmlmZXN0OiBfbWFuaWZlc3QsXG4gICAgICBuZXdDb21tZW50OiAnJyxcbiAgICAgIGFwcFNldHRpbmdzLFxuICAgIH0sIGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZm9yIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2Ugd2l0aCBjdXJyZW50IEJpYmxlcyBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIC0gTGFuZ3VhZ2UgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gQmlibGUgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJvb2sgLSBCb29rIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFwdGVyIC0gQ2hhcHRlciBudW1iZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlIC0gVmVyc2UgbnVtYmVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNjcmlwdHVyZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShsYW5nLCBpZCwgYm9vaywgY2hhcHRlciwgdmVyc2UpIHtcbiAgICByZXR1cm4gZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShiaWJsZXMsIGxhbmcsIGlkLCBib29rLCBjaGFwdGVyLCB2ZXJzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgaG9vayB0byB1cGRhdGUgc2V0dGluZ3Mgd2hlbiBCaWJsZXMgb3IgdGFyZ2V0IEJpYmxlIGNoYW5nZXNcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdXBkYXRlU2V0dGluZ3MoYmlibGVzXywgdGFyZ2V0QmlibGVfKVxuICB9LCBbYmlibGVzXywgdGFyZ2V0QmlibGVfXSlcblxuICAvLyBidWlsZCB0aGUgdGl0bGVcbiAgY29uc3QgeyB0YXJnZXRfbGFuZ3VhZ2UsIHByb2plY3QgfSA9IG1hbmlmZXN0O1xuICBsZXQgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUgPSBwcm9qZWN0Py50aXRsZSB8fCAnJztcblxuICBpZiAodGFyZ2V0X2xhbmd1YWdlPy5ib29rPy5uYW1lKSB7XG4gICAgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUgPSB0YXJnZXRfbGFuZ3VhZ2UuYm9vay5uYW1lO1xuICB9XG5cblxuICBjb25zdCBzdHlsZVByb3BzID0gc3R5bGVzIHx8IHt9XG4gIGNvbnN0IF9jaGVja2VyU3R5bGVzID0ge1xuICAgIC4uLmxvY2FsU3R5bGVzLmNvbnRhaW5lckRpdixcbiAgICAuLi5zdHlsZVByb3BzLFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICByZWFkeVRvRGlzcGxheUNoZWNrZXIgP1xuICAgICAgPGRpdiBpZD0nY2hlY2tlcicgc3R5bGU9e19jaGVja2VyU3R5bGVzfT5cbiAgICAgICAgPEdyb3VwTWVudUNvbXBvbmVudFxuICAgICAgICAgIGJvb2tOYW1lPXtib29rTmFtZX1cbiAgICAgICAgICBjaGFuZ2VDdXJyZW50Q29udGV4dElkPXtjaGFuZ2VDdXJyZW50Q2hlY2tffVxuICAgICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgICBncm91cHNEYXRhPXtncm91cHNEYXRhfVxuICAgICAgICAgIGdyb3Vwc0luZGV4PXtncm91cHNJbmRleH1cbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnQ9e3RhcmdldExhbmd1YWdlRm9udH1cbiAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuY2VudGVyRGl2fT5cbiAgICAgICAgICB7IGJpYmxlcyAmJiBPYmplY3Qua2V5cyhiaWJsZXMpLmxlbmd0aCAmJlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuc2NyaXB0dXJlUGFuZURpdn0+XG4gICAgICAgICAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgICAgICAgICAgYWRkT2JqZWN0UHJvcGVydHlUb01hbmlmZXN0PXthZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3R9XG4gICAgICAgICAgICAgICAgYmlibGVzPXtiaWJsZXN9XG4gICAgICAgICAgICAgICAgY29tcGxleFNjcmlwdEZvbnRzPXtjb21wbGV4U2NyaXB0Rm9udHN9XG4gICAgICAgICAgICAgICAgY29udGV4dElkPXtjdXJyZW50Q29udGV4dElkfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYW5lU2V0dGluZ3M9e3BhbmVTZXR0aW5nc31cbiAgICAgICAgICAgICAgICBlZGl0VmVyc2VSZWY9e251bGx9XG4gICAgICAgICAgICAgICAgZWRpdFRhcmdldFZlcnNlPXtlZGl0VGFyZ2V0VmVyc2V9XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGU9e2V4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlfVxuICAgICAgICAgICAgICAgIGdldEF2YWlsYWJsZVNjcmlwdHVyZVBhbmVTZWxlY3Rpb25zPXtudWxsfVxuICAgICAgICAgICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YV99XG4gICAgICAgICAgICAgICAgbWFrZVN1cmVCaWJsZXNMb2FkZWRGb3JUb29sPXtudWxsfVxuICAgICAgICAgICAgICAgIHByb2plY3REZXRhaWxzUmVkdWNlcj17eyBtYW5pZmVzdCB9fVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbnM9e2N1cnJlbnRTZWxlY3Rpb25zfVxuICAgICAgICAgICAgICAgIHNldFRvb2xTZXR0aW5ncz17c2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlfVxuICAgICAgICAgICAgICAgIHNob3dQb3BvdmVyPXtzaG93UG9wb3Zlcn1cbiAgICAgICAgICAgICAgICBvbkV4cGFuZGVkU2NyaXB0dXJlUGFuZVNob3c9e251bGx9XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxDaGVja0luZm9DYXJkXG4gICAgICAgICAgICAgIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2U9e19nZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlfVxuICAgICAgICAgICAgICBvbkxpbmtDbGljaz17KCkgPT4gZmFsc2V9XG4gICAgICAgICAgICAgIG9uU2VlTW9yZUNsaWNrPXsoKSA9PiBmYWxzZX1cbiAgICAgICAgICAgICAgcGhyYXNlPXtncm91cFBocmFzZX1cbiAgICAgICAgICAgICAgc2VlTW9yZUxhYmVsPXt0cmFuc2xhdGUoJ3NlZV9tb3JlJyl9XG4gICAgICAgICAgICAgIHNob3dTZWVNb3JlQnV0dG9uPXtmYWxzZX1cbiAgICAgICAgICAgICAgdGl0bGU9e2dyb3VwVGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZlcnNlQ2hlY2tcbiAgICAgICAgICAgICAgYWxpZ25lZEdMVGV4dD17YWxpZ25lZEdMVGV4dH1cbiAgICAgICAgICAgICAgYm9va0RldGFpbHM9e2Jvb2tEZXRhaWxzfVxuICAgICAgICAgICAgICBib29rbWFya0VuYWJsZWQ9e2Jvb2ttYXJrRW5hYmxlZH1cbiAgICAgICAgICAgICAgY2FuY2VsRWRpdFZlcnNlPXtjYW5jZWxFZGl0VmVyc2V9XG4gICAgICAgICAgICAgIGNhbmNlbENvbW1lbnQ9e2NhbmNlbENvbW1lbnR9XG4gICAgICAgICAgICAgIGNhbmNlbFNlbGVjdGlvbj17Y2FuY2VsU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBjaGFuZ2VNb2RlPXtjaGFuZ2VNb2RlfVxuICAgICAgICAgICAgICBjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlPXtjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlfVxuICAgICAgICAgICAgICBjaGVja0lmQ29tbWVudENoYW5nZWQ9e2NoZWNrSWZDb21tZW50Q2hhbmdlZH1cbiAgICAgICAgICAgICAgY2hlY2tJZlZlcnNlQ2hhbmdlZD17Y2hlY2tJZlZlcnNlQ2hhbmdlZH1cbiAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb249e2NsZWFyU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBjb21tZW50VGV4dD17Y29tbWVudFRleHR9XG4gICAgICAgICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICAgICAgZGlhbG9nTW9kYWxWaXNpYmlsaXR5ID0ge2ZhbHNlfVxuICAgICAgICAgICAgICBpc0NvbW1lbnRDaGFuZ2VkPXtpc0NvbW1lbnRDaGFuZ2VkfVxuICAgICAgICAgICAgICBpc1ZlcnNlQ2hhbmdlZD17aXNWZXJzZUNoYW5nZWR9XG4gICAgICAgICAgICAgIGlzVmVyc2VFZGl0ZWQ9e2lzVmVyc2VFZGl0ZWR9XG4gICAgICAgICAgICAgIGhhbmRsZUVkaXRWZXJzZT17aGFuZGxlRWRpdFZlcnNlfVxuICAgICAgICAgICAgICBoYW5kbGVHb1RvTmV4dD17aGFuZGxlR29Ub05leHR9XG4gICAgICAgICAgICAgIGhhbmRsZUdvVG9QcmV2aW91cz17aGFuZGxlR29Ub1ByZXZpb3VzfVxuICAgICAgICAgICAgICBoYW5kbGVPcGVuRGlhbG9nPXtudWxsfVxuICAgICAgICAgICAgICBpc1ZlcnNlSW52YWxpZGF0ZWQ9e2lzVmVyc2VJbnZhbGlkYXRlZH1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2VEaWFsb2c9e251bGx9XG4gICAgICAgICAgICAgIGhhbmRsZUNvbW1lbnQ9e2hhbmRsZUNvbW1lbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNraXA9e251bGx9XG4gICAgICAgICAgICAgIGhhbmRsZVRhZ3NDaGVja2JveD17aGFuZGxlVGFnc0NoZWNrYm94fVxuICAgICAgICAgICAgICBsb2NhbE5vdGhpbmdUb1NlbGVjdD17dGVtcE5vdGhpbmdUb1NlbGVjdH1cbiAgICAgICAgICAgICAgbWFuaWZlc3Q9e21hbmlmZXN0fVxuICAgICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9ucz17bWF4aW11bVNlbGVjdGlvbnN9XG4gICAgICAgICAgICAgIG1vZGU9e21vZGV9XG4gICAgICAgICAgICAgIG5ld1NlbGVjdGlvbnM9e3RlbXBTZWxlY3Rpb25zfVxuICAgICAgICAgICAgICBub3RoaW5nVG9TZWxlY3Q9e2N1cnJlbnROb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgICAgIG9wZW5BbGVydERpYWxvZz17b3BlbkFsZXJ0RGlhbG9nfVxuICAgICAgICAgICAgICBzYXZlQ29tbWVudD17c2F2ZUNvbW1lbnR9XG4gICAgICAgICAgICAgIHNhdmVFZGl0VmVyc2U9e3NhdmVFZGl0VmVyc2V9XG4gICAgICAgICAgICAgIHNhdmVTZWxlY3Rpb249e19zYXZlU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBzZWxlY3Rpb25zPXtjdXJyZW50U2VsZWN0aW9uc31cbiAgICAgICAgICAgICAgc2V0VG9vbFNldHRpbmdzPXtzZXRUb29sU2V0dGluZ3N9XG4gICAgICAgICAgICAgIHRhZ3M9e25ld1RhZ3MgfHwgW119XG4gICAgICAgICAgICAgIHRhcmdldEJpYmxlPXt0YXJnZXRCaWJsZX1cbiAgICAgICAgICAgICAgdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPXt0YXJnZXRMYW5ndWFnZURldGFpbHN9XG4gICAgICAgICAgICAgIHRvZ2dsZUJvb2ttYXJrPXt0b2dnbGVCb29rbWFya31cbiAgICAgICAgICAgICAgdG9nZ2xlTm90aGluZ1RvU2VsZWN0PXt0b2dnbGVOb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgICAgIHRvb2xzU2V0dGluZ3M9e3Rvb2xzU2V0dGluZ3N9XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgICAgICB1bmZpbHRlcmVkVmVyc2VUZXh0PXt1bmZpbHRlcmVkVmVyc2VUZXh0fVxuICAgICAgICAgICAgICB2YWxpZGF0ZVNlbGVjdGlvbnM9e3ZhbGlkYXRlU2VsZWN0aW9uc31cbiAgICAgICAgICAgICAgdmVyc2VUZXh0PXt2ZXJzZVRleHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dEb2N1bWVudCAmJiA8VHJhbnNsYXRpb25IZWxwc1xuICAgICAgICAgIG1vZGFsQXJ0aWNsZT17YXJ0aWNsZX1cbiAgICAgICAgICBhcnRpY2xlPXthcnRpY2xlfVxuICAgICAgICAgIGV4cGFuZGVkSGVscHNCdXR0b25Ib3ZlclRleHQ9eydDbGljayB0byBzaG93IGV4cGFuZGVkIGhlbHAgcGFuZSd9XG4gICAgICAgICAgbW9kYWxUaXRsZT17J3RyYW5zbGF0aW9uSGVscHMnfVxuICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgIGlzU2hvd0hlbHBzRXhwYW5kZWQ9e3Nob3dIZWxwc01vZGFsfVxuICAgICAgICAgIG9wZW5FeHBhbmRlZEhlbHBzTW9kYWw9e3RvZ2dsZUhlbHBzTW9kYWx9XG4gICAgICAgICAgc2lkZWJhclRvZ2dsZT17dG9nZ2xlSGVscHN9XG4gICAgICAgICAgaXNTaG93SGVscHNTaWRlYmFyPXtzaG93SGVscHN9XG4gICAgICAgIC8+fVxuICAgICAgICB7cG9wb3ZlclByb3BzPy5wb3BvdmVyVmlzaWJpbGl0eSAmJlxuICAgICAgICAgIDxQb3BvdmVyQ29udGFpbmVyIHsuLi5wb3BvdmVyUHJvcHN9IC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgOlxuICAgICAgJ1dhaXRpbmcgZm9yIERhdGEnXG4gICk7XG59O1xuXG5DaGVja2VyLnByb3BUeXBlcyA9IHtcbiAgc3R5bGVzOlByb3BUeXBlcy5vYmplY3QsXG4gIGFsaWduZWRHbEJpYmxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBiaWJsZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgY2hhbmdlVGFyZ2V0VmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICBjaGVja2luZ0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2hlY2tUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0SWQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2xXb3Jkc0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBpbml0aWFsU2V0dGluZ3M6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNhdmVDaGVja2luZ0RhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBzYXZlU2V0dGluZ3M6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93RG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXRCaWJsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcbmV4cG9ydCBkZWZhdWx0IENoZWNrZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUEwQ0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU0sbUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FB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
1371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNmbUhlbHBlcnMiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2Rhc2giLCJfR3JvdXBNZW51Q29tcG9uZW50IiwiX3dvcmRBbGlnbmVyTGliIiwiX2RlZXBFcXVhbCIsIl90d0FydGljbGVIZWxwZXJzIiwiX0NoZWNrSW5mb0NhcmQiLCJfdG5BcnRpY2xlSGVscGVycyIsIl9TY3JpcHR1cmVQYW5lIiwiX1BvcG92ZXJDb250YWluZXIiLCJfQm9va3NPZlRoZUJpYmxlIiwiX2NvbXBsZXhTY3JpcHRGb250cyIsIl9UcmFuc2xhdGlvbkhlbHBzIiwidEhlbHBzSGVscGVycyIsIl9WZXJzZUNoZWNrIiwiX2NoZWNrSW5mb0NhcmRIZWxwZXJzIiwiZSIsIl9fZXNNb2R1bGUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsIlR5cGVFcnJvciIsImEiLCJ1IiwibmV4dCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJmcm9tIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJsIiwibG9jYWxTdHlsZXMiLCJjb250YWluZXJEaXYiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY2VudGVyRGl2Iiwib3ZlcmZsb3dYIiwibWFyZ2luTGVmdCIsInNjcmlwdHVyZVBhbmVEaXYiLCJmbGV4U2hyaW5rIiwicGFkZGluZ0JvdHRvbSIsInRyYW5zbGF0aW9uV29yZHMiLCJleHBvcnRzIiwidHJhbnNsYXRpb25Ob3RlcyIsIm1heGltdW1TZWxlY3Rpb25zIiwiY29uc29sZSIsImxvZyIsIkNoZWNrZXIiLCJfcmVmIiwiX3RhcmdldExhbmd1YWdlRGV0YWlsIiwiX3RhcmdldExhbmd1YWdlRGV0YWlsMiIsIl90YXJnZXRfbGFuZ3VhZ2UkYm9vayIsImFsaWduZWRHbEJpYmxlIiwiYmlibGVzXyIsImJpYmxlcyIsImNoYW5nZWRDdXJyZW50Q2hlY2siLCJjaGFuZ2VUYXJnZXRWZXJzZSIsImNoZWNraW5nRGF0YSIsImNoZWNrVHlwZSIsImNvbnRleHRJZCIsImdldExleGljb25EYXRhIiwiZ2xXb3Jkc0RhdGEiLCJpbml0aWFsU2V0dGluZ3MiLCJzYXZlQ2hlY2tpbmdEYXRhIiwic2F2ZVNldHRpbmdzIiwic2hvd0RvY3VtZW50Iiwic3R5bGVzIiwidGFyZ2V0QmlibGVfIiwidGFyZ2V0QmlibGUiLCJ0YXJnZXRMYW5ndWFnZURldGFpbHMiLCJ0cmFuc2xhdGUiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsInBhbmVTZXR0aW5ncyIsInBhbmVLZXlTZXR0aW5ncyIsInRvb2xzU2V0dGluZ3MiLCJtYW5pZmVzdCIsIl91c2VTdGF0ZTIiLCJzZXR0aW5ncyIsIl9zZXRTZXR0aW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0QmlibGVzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzZXRUYXJnZXRCaWJsZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwidGVtcENoZWNraW5nRGF0YSIsInNldFRlbXBDaGVja2luZ0RhdGEiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImxvY2FsQ2hlY2tpbmdEYXRhIiwic2V0TG9jYWxDaGVja2luZ0RhdGEiLCJfdXNlU3RhdGUxIiwiYWxpZ25lZEdMVGV4dCIsImFydGljbGUiLCJjdXJyZW50Q2hlY2siLCJjdXJyZW50Q2hlY2tpbmdEYXRhIiwiZ3JvdXBUaXRsZSIsImdyb3VwUGhyYXNlIiwiZ3JvdXBzRGF0YSIsImdyb3Vwc0luZGV4IiwiaXNDb21tZW50Q2hhbmdlZCIsImlzVmVyc2VDaGFuZ2VkIiwibW9kZSIsIm5ld1ZlcnNlVGV4dCIsInBvcG92ZXJQcm9wcyIsInBvcG92ZXJWaXNpYmlsaXR5Iiwic2hvd0hlbHBzTW9kYWwiLCJzaG93SGVscHMiLCJuZXdUYWdzIiwidmVyc2VUZXh0IiwiX3VzZVN0YXRlMTAiLCJzdGF0ZSIsIl9zZXRTdGF0ZSIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJnZXRDdXJyZW50VmFsdWVGb3IiLCJrZXkiLCJnZXRUZW1wVmFsdWVGb3IiLCJjdXJyZW50U2VsZWN0aW9ucyIsInRlbXBTZWxlY3Rpb25zIiwidGVtcE5vdGhpbmdUb1NlbGVjdCIsImN1cnJlbnROb3RoaW5nVG9TZWxlY3QiLCJncm91cHNEYXRhTG9hZGVkIiwidXBkYXRlTW9kZUZvclNlbGVjdGlvbnMiLCJuZXdTZWxlY3Rpb25zIiwibm90aGluZ1RvU2VsZWN0Iiwibm9TZWxlY3Rpb25zIiwibmV3TW9kZSIsInVzZUVmZmVjdCIsImhhdmVEYXRhIiwiZ3JvdXBzRGF0YUluaXRpYWxpemVkIiwiZmxhdHRlbmVkR3JvdXBEYXRhIiwiZ3JvdXBEYXRhSGVscGVycyIsImZsYXR0ZW5Hcm91cERhdGEiLCJwYXJzZVRuVG9JbmRleCIsInBhcnNlVHdUb0luZGV4IiwiY2hlY2siLCJmaW5kQ2hlY2siLCJtb2RpZmllZCIsInNlbGVjdGlvbnNIZWxwZXJzIiwidmFsaWRhdGVTZWxlY3Rpb25zRm9yQWxsQ2hlY2tzIiwiaW52YWxpZGF0ZWQiLCJjb25jYXQiLCJfc2F2ZUNoZWNraW5nRGF0YSIsInVwZGF0ZUNvbnRleHQiLCJzZWxlY3Rpb25zIiwibmV3Q2hlY2siLCJncm91cHNJbmRleF8iLCJ1bmRlZmluZWQiLCJyZWZlcmVuY2UiLCJ2ZXJzZUhlbHBlcnMiLCJnZXRWZXJzZVRleHRGcm9tQmlibGUiLCJnZXRBbGlnbmVkR0xUZXh0IiwiZ2V0VGl0bGVGcm9tSW5kZXgiLCJncm91cElkIiwib2NjdXJyZW5jZU5vdGUiLCJnZXRQaHJhc2VGcm9tVHciLCJncm91cERhdGEiLCJhcnRpY2xlcyIsIl9hcnRpY2xlIiwiYXJ0aWNsZUlkIiwiZ3JvdXBzSWRzIiwiX2kiLCJfZ3JvdXBzSWRzIiwiX2dyb3VwSWQiLCJncm91cCIsImN1cnJlbnRBcnRpY2xlTWFya2Rvd24iLCJjb252ZXJ0TWFya2Rvd25MaW5rcyIsImdhdGV3YXlMYW5ndWFnZUlkIiwiY29tbWVudFRleHQiLCJib29rSWQiLCJib29rIiwiaWQiLCJib29rTmFtZSIsImJvb2tEZXRhaWxzIiwidGFyZ2V0TGFuZ3VhZ2VGb250IiwicHJvamVjdEZvbnQiLCJjdXJyZW50Q29udGV4dElkIiwic2V0VG9vbFNldHRpbmdzIiwiTkFNRVNQQUNFIiwiZmllbGROYW1lIiwiZmllbGRWYWx1ZSIsIl90b29sc1NldHRpbmdzIiwiY29tcG9uZW50U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsIl9zYXZlU2V0dGluZ3MiLCJfc2V0dGluZ3MiLCJuZXdTZXR0aW5ncyIsIl9wYW5lU2V0dGluZ3MiLCJfcGFuZVNldHRpbmciLCJfcGFuZUtleVNldHRpbmdzIiwiX2kyIiwiX2tleXMiLCJkb1NhdmUiLCJzZXRUb29sU2V0dGluZ3NTY3JpcHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxhbmd1YWdlSWQiLCJiaWJsZUlkIiwib3duZXIiLCJlcnIiLCJhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QiLCJfbWFuaWZlc3QiLCJhcHBTZXR0aW5ncyIsIl9hcHBTZXR0aW5ncyIsIm9wZW5BbGVydERpYWxvZyIsImNoZWNrSWZWZXJzZUNoYW5nZWQiLCJfbmV3VmVyc2VUZXh0IiwidGFyZ2V0IiwiX2lzVmVyc2VDaGFuZ2VkIiwiaGFuZGxlRWRpdFZlcnNlIiwiY2FuY2VsRWRpdFZlcnNlIiwic2F2ZUVkaXRWZXJzZSIsIl9jdXJyZW50Q29udGV4dElkJHJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlUmVmIiwidmVyc2VTcGFuIiwiYmVmb3JlIiwiZWRpdFRhcmdldFZlcnNlIiwiaGFuZGxlR29Ub05leHQiLCJuZXh0Q2hlY2siLCJmaW5kTmV4dENoZWNrIiwiY2hhbmdlQ3VycmVudENoZWNrXyIsImhhbmRsZUdvVG9QcmV2aW91cyIsInByZXZpb3VzQ2hlY2siLCJmaW5kUHJldmlvdXNDaGVjayIsImhhbmRsZVRhZ3NDaGVja2JveCIsInRhZyIsImN1cnJlbnRUYWdzIiwidGFnSW5kZXgiLCJpbmRleE9mIiwiX25ld1RhZ3MiLCJjb3B5Iiwic3BsaWNlIiwidmFsaWRhdGVTZWxlY3Rpb25zIiwidmVyc2VUZXh0XyIsInNlbGVjdGlvbnNfIiwidmFsaWRhdGVWZXJzZVNlbGVjdGlvbnMiLCJ1bmZpbHRlcmVkVmVyc2VUZXh0IiwidXNlTWVtbyIsInVuZmlsdGVyZWRWZXJzZVRleHRfIiwiX3RhcmdldEJpYmxlJGNoYXB0ZXIiLCJ2ZXJzZURhdGEiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwiZ2V0VXNmbUZvclZlcnNlQ29udGVudCIsInNldFRlbXBDaGVja2luZ0l0ZW0iLCJuZXdDaGVja2luZ0RhdGEiLCJjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlIiwidG9nZ2xlTm90aGluZ1RvU2VsZWN0Iiwic2VsZWN0IiwibmV3Q29udGV4dCIsIm5vQ2hlY2siLCJuZXdDb250ZXh0SWQiLCJzZWxlY3Rpb25zVW5jaGFuZ2VkIiwiaXNFcXVhbCIsImRpcmVjdGlvbiIsImJvb2ttYXJrRW5hYmxlZCIsImlzVmVyc2VFZGl0ZWQiLCJpc1ZlcnNlSW52YWxpZGF0ZWQiLCJfc2F2ZVNlbGVjdGlvbiIsIl9jbG9uZURhdGFGb3JTYXZpbmciLCJjbG9uZURhdGFGb3JTYXZpbmciLCJjaGVja0luR3JvdXBzRGF0YSIsIl9jdXJyZW50Q2hlY2siLCJfbmV3Q2hlY2tpbmdEYXRhIiwiZGVsZXRlVGVtcENoZWNraW5nRGF0YSIsInVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhIiwiX2dyb3Vwc0RhdGEiLCJfIiwiY2xvbmVEZWVwIiwiY2F0ZWdvcnkiLCJuZXdDaGVja0RhdGEiLCJfaTMiLCJfT2JqZWN0JGtleXMiLCJuZXdDaGVja2luZ1ZhbHVlIiwiX3NhdmVEYXRhIiwibmV3RGF0YSIsIl9jbG9uZURhdGFGb3JTYXZpbmcyIiwiX2k0IiwiX09iamVjdCRrZXlzMiIsImNoYW5nZWREYXRhIiwiX2k1IiwiX09iamVjdCRrZXlzMyIsIl90ZW1wQ2hlY2tpbmdEYXRhIiwiY2FuY2VsU2VsZWN0aW9uIiwiY2xlYXJTZWxlY3Rpb24iLCJ0b2dnbGVCb29rbWFyayIsInJlbWluZGVycyIsImNoYW5nZU1vZGUiLCJjaGVja0lmQ29tbWVudENoYW5nZWQiLCJuZXdjb21tZW50Iiwib2xkY29tbWVudCIsImNhbmNlbENvbW1lbnQiLCJzYXZlQ29tbWVudCIsIm5ld0NvbW1lbnQiLCJjb21tZW50cyIsImhhbmRsZUNvbW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlYWR5VG9EaXNwbGF5Q2hlY2tlciIsImdldExleGljb25EYXRhXyIsImxleGljb25JZCIsImVudHJ5SWQiLCJsZXhpY29uRGF0YSIsIm9uQ2xvc2VQb3BvdmVyIiwic2hvd1BvcG92ZXIiLCJ0aXRsZSIsImJvZHlUZXh0IiwicG9zaXRpb25Db29yZCIsInRvZ2dsZUhlbHBzTW9kYWwiLCJfc2hvd0hlbHBzTW9kYWwiLCJ0b2dnbGVIZWxwcyIsIl9zaG93SGVscHMiLCJzYXZlQmlibGVUb0tleSIsImtleUdyb3VwIiwib2xkVmVyc2VUZXh0IiwiX2JpYmxlcyIsIl90YXJnZXRCaWJsZSIsInRhcmdldEJvb2siLCJ0YXJnZXRDaGFwdGVyIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsImN1cnJlbnRDaGFwdGVyRGF0YSIsImN1cnJlbnRWZXJzZURhdGEiLCJfQWxpZ25tZW50SGVscGVycyR1cGQiLCJBbGlnbm1lbnRIZWxwZXJzIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHMiLCJ1cGRhdGVTZXR0aW5ncyIsInJlbW92ZVVzZm1NYXJrZXJzIiwidmVyc2VFZGl0cyIsInZhbGlkYXRlQWxsU2VsZWN0aW9uc0ZvclZlcnNlIiwiX2N1cnJlbnRDaGVjayRjb250ZXh0IiwiX2NoZWNrJGNvbnRleHRJZCIsImN1cnJlbnRDaGVja0lkIiwiY2hlY2tJZCIsIm5ld0JpYmxlcyIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdCIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdDIiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiYmlibGUiLCJOVF9PUklHX0xBTkciLCJPVF9PUklHX0xBTkciLCJpbml0aWFsUGFuZVNldHRpbmdzIiwibGFuZ0tleSIsInBhbmUiLCJsYW5ndWFnZV9uYW1lIiwiZHVibGluX2NvcmUiLCJsYW5ndWFnZSIsIl9nZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIiwibGFuZyIsImdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UiLCJ0YXJnZXRfbGFuZ3VhZ2UiLCJwcm9qZWN0IiwiZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUiLCJzdHlsZVByb3BzIiwiX2NoZWNrZXJTdHlsZXMiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJjaGFuZ2VDdXJyZW50Q29udGV4dElkIiwiY29tcGxleFNjcmlwdEZvbnRzIiwiY3VycmVudFBhbmVTZXR0aW5ncyIsImVkaXRWZXJzZVJlZiIsImdldEF2YWlsYWJsZVNjcmlwdHVyZVBhbmVTZWxlY3Rpb25zIiwibWFrZVN1cmVCaWJsZXNMb2FkZWRGb3JUb29sIiwicHJvamVjdERldGFpbHNSZWR1Y2VyIiwib25FeHBhbmRlZFNjcmlwdHVyZVBhbmVTaG93Iiwib25MaW5rQ2xpY2siLCJvblNlZU1vcmVDbGljayIsInBocmFzZSIsInNlZU1vcmVMYWJlbCIsInNob3dTZWVNb3JlQnV0dG9uIiwiZGlhbG9nTW9kYWxWaXNpYmlsaXR5IiwiaGFuZGxlT3BlbkRpYWxvZyIsImhhbmRsZUNsb3NlRGlhbG9nIiwiaGFuZGxlU2tpcCIsImxvY2FsTm90aGluZ1RvU2VsZWN0Iiwic2F2ZVNlbGVjdGlvbiIsInRhZ3MiLCJtb2RhbEFydGljbGUiLCJleHBhbmRlZEhlbHBzQnV0dG9uSG92ZXJUZXh0IiwibW9kYWxUaXRsZSIsImlzU2hvd0hlbHBzRXhwYW5kZWQiLCJvcGVuRXhwYW5kZWRIZWxwc01vZGFsIiwic2lkZWJhclRvZ2dsZSIsImlzU2hvd0hlbHBzU2lkZWJhciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImFycmF5IiwiZnVuYyIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGVja2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAZmlsZSBDaGVja2VyLmpzXG4gKlxuICogQHN5bm9wc2lzXG4gKiBUaGlzIGlzIHRoZSBtYWluIGNoZWNraW5nIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGFuIGludGVncmF0ZWQgaW50ZXJmYWNlIGZvciBCaWJsZSB0cmFuc2xhdGlvbiBjaGVja2luZy5cbiAqIEl0IHN1cHBvcnRzIGJvdGggVHJhbnNsYXRpb24gTm90ZXMgKFROKSBhbmQgVHJhbnNsYXRpb24gV29yZHMgKFRXKSBjaGVja2luZyB3b3JrZmxvd3MuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgYSBjb21wcmVoZW5zaXZlIHRvb2wgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXM6XG4gKiAtIExvYWRpbmcgYW5kIGRpc3BsYXlpbmcgY2hlY2tpbmcgZGF0YSAodHJhbnNsYXRpb24gbm90ZXMgb3IgdHJhbnNsYXRpb24gd29yZHMpXG4gKiAtIE1hbmFnaW5nIHVzZXIgc2VsZWN0aW9ucyBhbmQgYW5ub3RhdGlvbnMgaW4gdmVyc2VzXG4gKiAtIFByb3ZpZGluZyBtdWx0aS1wYW5lIFNjcmlwdHVyZSB2aWV3aW5nIHdpdGggdmFyaW91cyBCaWJsZSByZXNvdXJjZXNcbiAqIC0gSGFuZGxpbmcgdmVyc2UgZWRpdGluZyBhbmQgdmFsaWRhdGlvblxuICogLSBNYW5hZ2luZyBjb21tZW50cywgYm9va21hcmtzLCBhbmQgdGFncyBmb3IgY2hlY2tzXG4gKiAtIE5hdmlnYXRpbmcgYmV0d2VlbiBjaGVja3MgKG5leHQvcHJldmlvdXMpXG4gKiAtIERpc3BsYXlpbmcgdHJhbnNsYXRpb24gaGVscHMgaW4gYW4gaW50ZWdyYXRlZCBzaWRlYmFyXG4gKiAtIFBlcnNpc3RpbmcgdXNlciBzZXR0aW5ncyBhbmQgY2hlY2tpbmcgcHJvZ3Jlc3NcbiAqXG4gKiBUaGUgY29tcG9uZW50IG1haW50YWlucyBjb21wbGV4IHN0YXRlIGluY2x1ZGluZzpcbiAqIC0gQ3VycmVudCBjaGVjayBkYXRhIGFuZCBjb250ZXh0XG4gKiAtIFVzZXIgc2VsZWN0aW9ucyBhbmQgdGVtcG9yYXJ5IGNoYW5nZXNcbiAqIC0gUGFuZSBzZXR0aW5ncyBmb3IgU2NyaXB0dXJlIGRpc3BsYXlcbiAqIC0gVG9vbC1zcGVjaWZpYyBzZXR0aW5nc1xuICogLSBVSSBzdGF0ZSAobW9kZXMsIG1vZGFscywgcG9wb3ZlcnMpXG4gKlxuICogQHJlcXVpcmVtZW50c1xuICogLSBSZWFjdCAxOC4zLjErXG4gKiAtIHdvcmQtYWxpZ25lci1saWIgZm9yIHZlcnNlIGFuZCBhbGlnbm1lbnQgaGVscGVyc1xuICogLSBkZWVwLWVxdWFsIGZvciBvYmplY3QgY29tcGFyaXNvblxuICogLSBsb2Rhc2ggZm9yIGRlZXAgY2xvbmluZ1xuICogLSBNYXRlcmlhbC1VSSBjb21wb25lbnRzIGZvciBVSSBlbGVtZW50c1xuICpcbiAqIEBkZXBlbmRlbmNpZXNcbiAqIC0gR3JvdXBNZW51Q29tcG9uZW50OiBOYXZpZ2F0aW9uIG1lbnUgZm9yIGNoZWNrc1xuICogLSBDaGVja0luZm9DYXJkOiBEaXNwbGF5cyBjaGVjayB0aXRsZSBhbmQgcGhyYXNlXG4gKiAtIFNjcmlwdHVyZVBhbmU6IE11bHRpLXBhbmUgU2NyaXB0dXJlIHZpZXdlclxuICogLSBUcmFuc2xhdGlvbkhlbHBzOiBTaWRlYmFyIGZvciB0cmFuc2xhdGlvbiBoZWxwIGFydGljbGVzXG4gKiAtIFZlcnNlQ2hlY2s6IE1haW4gY2hlY2tpbmcgaW50ZXJmYWNlIGZvciB2ZXJzZXNcbiAqIC0gUG9wb3ZlckNvbnRhaW5lcjogRGlzcGxheXMgY29udGV4dHVhbCBpbmZvcm1hdGlvblxuICovXG5pbXBvcnQgeyByZW1vdmVVc2ZtTWFya2VycyB9IGZyb20gJy4uL3V0aWxzL3VzZm1IZWxwZXJzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCBHcm91cE1lbnVDb21wb25lbnQgZnJvbSAnLi9Hcm91cE1lbnVDb21wb25lbnQnXG5pbXBvcnQge1xuICBncm91cERhdGFIZWxwZXJzLFxuICBzZWxlY3Rpb25zSGVscGVycyxcbiAgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyxcbiAgdmVyc2VIZWxwZXJzLFxuICBBbGlnbm1lbnRIZWxwZXJzLFxuICBcbn0gZnJvbSAnd29yZC1hbGlnbmVyLWxpYidcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQge1xuICBmaW5kQ2hlY2ssXG4gIGZpbmROZXh0Q2hlY2ssXG4gIGZpbmRQcmV2aW91c0NoZWNrLFxuICBnZXRBbGlnbmVkR0xUZXh0LFxuICBnZXRQaHJhc2VGcm9tVHcsXG4gIGdldFRpdGxlRnJvbUluZGV4LFxuICBcbiAgcGFyc2VUd1RvSW5kZXhcbn0gZnJvbSAnLi4vaGVscGVycy90cmFuc2xhdGlvbkhlbHBzL3R3QXJ0aWNsZUhlbHBlcnMnXG5pbXBvcnQgQ2hlY2tJbmZvQ2FyZCBmcm9tICcuLi90Y191aV90b29sa2l0L0NoZWNrSW5mb0NhcmQnXG5pbXBvcnQgeyBwYXJzZVRuVG9JbmRleCB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNsYXRpb25IZWxwcy90bkFydGljbGVIZWxwZXJzJ1xuaW1wb3J0IFNjcmlwdHVyZVBhbmUgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9TY3JpcHR1cmVQYW5lJ1xuaW1wb3J0IFBvcG92ZXJDb250YWluZXIgZnJvbSAnLi4vY29udGFpbmVycy9Qb3BvdmVyQ29udGFpbmVyJ1xuaW1wb3J0IHsgTlRfT1JJR19MQU5HLCBPVF9PUklHX0xBTkcgfSBmcm9tICcuLi9jb21tb24vQm9va3NPZlRoZUJpYmxlJ1xuaW1wb3J0IGNvbXBsZXhTY3JpcHRGb250cyBmcm9tICcuLi9jb21tb24vY29tcGxleFNjcmlwdEZvbnRzJ1xuaW1wb3J0IFRyYW5zbGF0aW9uSGVscHMgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9UcmFuc2xhdGlvbkhlbHBzJ1xuaW1wb3J0ICogYXMgdEhlbHBzSGVscGVycyBmcm9tICcuLi9oZWxwZXJzL3RIZWxwc0hlbHBlcnMnXG5pbXBvcnQgVmVyc2VDaGVjayBmcm9tICcuLi90Y191aV90b29sa2l0L1ZlcnNlQ2hlY2snXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIH0gZnJvbSAnLi4vaGVscGVycy9jaGVja0luZm9DYXJkSGVscGVycydcblxuY29uc3QgbG9jYWxTdHlsZXMgPSB7XG4gIGNvbnRhaW5lckRpdjp7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIHdpZHRoOiAnOTd2dycsXG4gICAgaGVpZ2h0OiAnNjV2dycsXG4gIH0sXG4gIGNlbnRlckRpdjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICB3aWR0aDogJzg1JScsXG4gICAgb3ZlcmZsb3dYOiAnYXV0bycsXG4gICAgbWFyZ2luTGVmdDogJzEwcHgnLFxuICB9LFxuICBzY3JpcHR1cmVQYW5lRGl2OiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhTaHJpbms6ICcwJyxcbiAgICBoZWlnaHQ6ICcyNTBweCcsXG4gICAgcGFkZGluZ0JvdHRvbTogJzIwcHgnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0aW9uV29yZHMgPSAndHJhbnNsYXRpb25Xb3JkcydcbmV4cG9ydCBjb25zdCB0cmFuc2xhdGlvbk5vdGVzID0gJ3RyYW5zbGF0aW9uTm90ZXMnXG5jb25zdCBtYXhpbXVtU2VsZWN0aW9ucyA9IDEwXG5cbmNvbnNvbGUubG9nKCdDaGVja2VyLmpzIC0gc3RhcnR1cCcpXG5jb25zdCBuYW1lID0gJ0NoZWNrZXInXG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGVja2VyXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXMgc3RhdGUgdXBkYXRlcywgc2V0dGluZ3MgbWFuYWdlbWVudCwgYW5kIGVuc3VyZXMgdGhlIG5lY2Vzc2FyeSBkYXRhIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IHdpdGggaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIENoZWNrZXIgY29tcG9uZW50LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYWxpZ25lZEdsQmlibGUgLSBUaGUgYWxpZ25lZCBHYXRld2F5IExhbmd1YWdlIEJpYmxlIGRhdGEgdXNlZCBmb3IgdHJhbnNsYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYmlibGVzIC0gQmlibGUgZGF0YSBmb3IgdmFyaW91cyBsYW5ndWFnZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmNoYW5nZWRDdXJyZW50Q2hlY2sgLSBjYWxsYmFjayB0byBub3RpZnkgb2YgY2hhbmdlcyBpbiBjb250ZXh0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5jaGFuZ2VUYXJnZXRWZXJzZSAtIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjdXJyZW50IHZlcnNlIGJlaW5nIGNoZWNrZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jaGVja2luZ0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gY2hlY2tzIChlLmcuLCB0cmFuc2xhdGlvbiBub3RlcyBvciB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1ldGVycy5jaGVja1R5cGUgLSBUaGUgdHlwZSBvZiBjaGVjayBiZWluZyBwZXJmb3JtZWQgKGUuZy4sIHRyYW5zbGF0aW9uIG5vdGVzLCB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jb250ZXh0SWQgLSBPYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSBhYm91dCB0aGUgY3VycmVudCBncm91cC92ZXJzZSBiZWluZyB3b3JrZWQgb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmdldExleGljb25EYXRhIC0gRnVuY3Rpb24gdG8gcmV0cmlldmUgbGV4aWNvbiBkYXRhLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuZ2xXb3Jkc0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gR2F0ZXdheSBMYW5ndWFnZSB3b3JkcyBhbmQgYWxpZ25tZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuaW5pdGlhbFNldHRpbmdzIC0gVGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZSBDaGVja2VyIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2F2ZUNoZWNraW5nRGF0YSAtIEZ1bmN0aW9uIHRvIHNhdmUgdGhlIG1vZGlmaWVkIGNoZWNraW5nIGRhdGEuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLnNhdmVTZXR0aW5ncyAtIEZ1bmN0aW9uIHRvIHBlcnNpc3QgdXNlcidzIGNvbXBvbmVudCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2hvd0RvY3VtZW50IC0gRnVuY3Rpb24gdG8gZGlzcGxheSBhIGRvY3VtZW50IGluIHRoZSBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5zdHlsZXMgLSBTdHlsaW5nIGluZm9ybWF0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50J3MgYXBwZWFyYW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldEJpYmxlIC0gVGhlIHRhcmdldCBCaWJsZSBkYXRhIGZvciB0aGUgd29ya2luZyBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldExhbmd1YWdlRGV0YWlscyAtIE1ldGFkYXRhIGFib3V0IHRoZSB0YXJnZXQgbGFuZ3VhZ2UsIGluY2x1ZGluZyBib29rIGFuZCBsYW5ndWFnZS1zcGVjaWZpYyBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy50cmFuc2xhdGUgLSBBIGZ1bmN0aW9uIHVzZWQgZm9yIHN0cmluZyB0cmFuc2xhdGlvbnMgaW4gdGhlIFVJLlxuICovXG5jb25zdCBDaGVja2VyID0gKHtcbiAgYWxpZ25lZEdsQmlibGUsXG4gIGJpYmxlczogYmlibGVzXyxcbiAgY2hhbmdlZEN1cnJlbnRDaGVjayxcbiAgY2hhbmdlVGFyZ2V0VmVyc2UsXG4gIGNoZWNraW5nRGF0YSxcbiAgY2hlY2tUeXBlLFxuICBjb250ZXh0SWQsXG4gIGdldExleGljb25EYXRhLFxuICBnbFdvcmRzRGF0YSxcbiAgaW5pdGlhbFNldHRpbmdzLFxuICBzYXZlQ2hlY2tpbmdEYXRhLFxuICBzYXZlU2V0dGluZ3MsXG4gIHNob3dEb2N1bWVudCxcbiAgc3R5bGVzLFxuICB0YXJnZXRCaWJsZTogdGFyZ2V0QmlibGVfLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHMsXG4gIHRyYW5zbGF0ZSxcbn0pID0+IHtcbiAgLy8gTWFpbiBzZXR0aW5ncyBzdGF0ZSAtIGluY2x1ZGVzIHBhbmUgY29uZmlndXJhdGlvbiwgdG9vbCBzZXR0aW5ncywgYW5kIG1hbmlmZXN0IGRhdGFcbiAgY29uc3QgW3NldHRpbmdzLCBfc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoe1xuICAgIHBhbmVTZXR0aW5nczogW10sXG4gICAgcGFuZUtleVNldHRpbmdzOiB7fSxcbiAgICB0b29sc1NldHRpbmdzOiB7fSxcbiAgICBtYW5pZmVzdDoge31cbiAgfSlcbiAgY29uc3Qge1xuICAgIHBhbmVTZXR0aW5ncyxcbiAgICBwYW5lS2V5U2V0dGluZ3MsXG4gICAgdG9vbHNTZXR0aW5ncyxcbiAgICBtYW5pZmVzdFxuICB9ID0gc2V0dGluZ3NcblxuICAvLyBCaWJsZSBkYXRhIG9yZ2FuaXplZCBieSBsYW5ndWFnZSBhbmQgSURcbiAgY29uc3QgW2JpYmxlcywgc2V0QmlibGVzXSA9IHVzZVN0YXRlKHsgfSlcblxuICAvLyBDdXJyZW50IHRhcmdldCBCaWJsZSBiZWluZyBjaGVja2VkXG4gIGNvbnN0IFt0YXJnZXRCaWJsZSwgc2V0VGFyZ2V0QmlibGVdID0gdXNlU3RhdGUodGFyZ2V0QmlibGVfKVxuXG4gIC8vIFRlbXBvcmFyeSBjaGVja2luZyBkYXRhIGZvciB1bnNhdmVkIGNoYW5nZXNcbiAgY29uc3QgW3RlbXBDaGVja2luZ0RhdGEsIHNldFRlbXBDaGVja2luZ0RhdGFdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBMb2NhbCBjaGVja2luZyBkYXRhIGZvciBjdXJyZW50IHNlc3Npb25cbiAgY29uc3QgW2xvY2FsQ2hlY2tpbmdEYXRhLCBzZXRMb2NhbENoZWNraW5nRGF0YV0gPSB1c2VTdGF0ZShudWxsKVxuXG4gIC8vIE1haW4gY29tcG9uZW50IHN0YXRlXG4gIGNvbnN0IFtzdGF0ZSwgX3NldFN0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICBhbGlnbmVkR0xUZXh0OiAnJywgLy8gR2F0ZXdheSBMYW5ndWFnZSB0ZXh0IGFsaWduZWQgdG8gb3JpZ2luYWxcbiAgICBhcnRpY2xlOiBudWxsLCAvLyBDdXJyZW50IHRyYW5zbGF0aW9uIGhlbHAgYXJ0aWNsZVxuICAgIGN1cnJlbnRDaGVjazogbnVsbCwgLy8gQ3VycmVudCBjaGVjayBiZWluZyB3b3JrZWQgb25cbiAgICBjdXJyZW50Q2hlY2tpbmdEYXRhOiBudWxsLCAvLyBBbGwgY2hlY2tpbmcgZGF0YSBmb3IgY3VycmVudCBib29rXG4gICAgZ3JvdXBUaXRsZTogJycsIC8vIFRpdGxlIG9mIGN1cnJlbnQgY2hlY2sgZ3JvdXBcbiAgICBncm91cFBocmFzZTogJycsIC8vIFBocmFzZSBvciBvY2N1cnJlbmNlIG5vdGUgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICBncm91cHNEYXRhOiBudWxsLCAvLyBGbGF0dGVuZWQgZ3JvdXAgZGF0YSBmb3IgYWxsIGNoZWNrc1xuICAgIGdyb3Vwc0luZGV4OiBudWxsLCAvLyBJbmRleCBvZiBhbGwgY2hlY2sgZ3JvdXBzXG4gICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgY29tbWVudCBoYXMgdW5zYXZlZCBjaGFuZ2VzXG4gICAgaXNWZXJzZUNoYW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIHZlcnNlIGhhcyB1bnNhdmVkIGNoYW5nZXNcbiAgICBtb2RlOiAnZGVmYXVsdCcsIC8vIEN1cnJlbnQgVUkgbW9kZSAoZGVmYXVsdCwgc2VsZWN0LCBlZGl0LCBjb21tZW50KVxuICAgIG5ld1ZlcnNlVGV4dDogbnVsbCwgLy8gTmV3IHZlcnNlIHRleHQgZHVyaW5nIGVkaXRpbmdcbiAgICBwb3BvdmVyUHJvcHM6IHtcbiAgICAgIHBvcG92ZXJWaXNpYmlsaXR5OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd0hlbHBzTW9kYWw6IGZhbHNlLCAvLyBXaGV0aGVyIGhlbHBzIG1vZGFsIGlzIHNob3duXG4gICAgc2hvd0hlbHBzOiB0cnVlLCAvLyBXaGV0aGVyIGhlbHBzIHNpZGViYXIgaXMgc2hvd25cbiAgICBuZXdUYWdzOiBudWxsLCAvLyBOZXcgdGFncyBiZWluZyBhZGRlZFxuICAgIHZlcnNlVGV4dDogJycsIC8vIEN1cnJlbnQgdmVyc2UgdGV4dFxuICB9KVxuXG4gIGNvbnN0IHtcbiAgICBhbGlnbmVkR0xUZXh0LFxuICAgIGFydGljbGUsXG4gICAgY3VycmVudENoZWNrLFxuICAgIGN1cnJlbnRDaGVja2luZ0RhdGEsXG4gICAgZ3JvdXBUaXRsZSxcbiAgICBncm91cFBocmFzZSxcbiAgICBncm91cHNEYXRhLFxuICAgIGdyb3Vwc0luZGV4LFxuICAgIGlzQ29tbWVudENoYW5nZWQsXG4gICAgaXNWZXJzZUNoYW5nZWQsXG4gICAgbW9kZSxcbiAgICBuZXdWZXJzZVRleHQsXG4gICAgcG9wb3ZlclByb3BzLFxuICAgIHNob3dIZWxwc01vZGFsLFxuICAgIHNob3dIZWxwcyxcbiAgICBuZXdUYWdzLFxuICAgIHZlcnNlVGV4dCxcbiAgfSA9IHN0YXRlXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9iamVjdCB3aXRoIG5ldyB2YWx1ZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gT2JqZWN0IGNvbnRhaW5pbmcgc3RhdGUgcHJvcGVydGllcyB0byB1cGRhdGVcbiAgICovXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgX3NldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2F2ZWQgdmFsdWUgZm9yIGEgY2hlY2sgcHJvcGVydHlcbiAgICogRmFsbHMgYmFjayB0byBsb2NhbCBjaGVja2luZyBkYXRhIGlmIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJucyB7Kn0gQ3VycmVudCB2YWx1ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q3VycmVudFZhbHVlRm9yKGtleSkge1xuICAgIGlmIChsb2NhbENoZWNraW5nRGF0YT8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGxvY2FsQ2hlY2tpbmdEYXRhW2tleV1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDaGVjaz8uW2tleV1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZW1wb3JhcnkgKHVuc2F2ZWQpIHZhbHVlIGZvciBhIGNoZWNrIHByb3BlcnR5XG4gICAqIEZhbGxzIGJhY2sgdGhyb3VnaCBsb2NhbCBjaGVja2luZyBkYXRhIHRvIGN1cnJlbnQgY2hlY2tcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybnMgeyp9IFRlbXBvcmFyeSB2YWx1ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VGVtcFZhbHVlRm9yKGtleSkge1xuICAgIGlmICh0ZW1wQ2hlY2tpbmdEYXRhPy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gdGVtcENoZWNraW5nRGF0YVtrZXldXG4gICAgfVxuICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWVGb3Ioa2V5KVxuICB9XG5cbiAgY29uc3QgY3VycmVudFNlbGVjdGlvbnMgPSBnZXRDdXJyZW50VmFsdWVGb3IoJ3NlbGVjdGlvbnMnKSB8fCBbXVxuICBjb25zdCB0ZW1wU2VsZWN0aW9ucyA9IGdldFRlbXBWYWx1ZUZvcignc2VsZWN0aW9ucycpIHx8IFtdXG4gIGNvbnN0IHRlbXBOb3RoaW5nVG9TZWxlY3QgPSBnZXRUZW1wVmFsdWVGb3IoJ25vdGhpbmdUb1NlbGVjdCcpXG4gIGNvbnN0IGN1cnJlbnROb3RoaW5nVG9TZWxlY3QgPSBnZXRDdXJyZW50VmFsdWVGb3IoJ25vdGhpbmdUb1NlbGVjdCcpXG4gIGNvbnN0IGdyb3Vwc0RhdGFMb2FkZWQgPSAhIWdyb3Vwc0RhdGFcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgVUkgbW9kZSBiYXNlZCBvbiBzZWxlY3Rpb25zIHN0YXRlXG4gICAqIFN3aXRjaGVzIHRvICdzZWxlY3QnIG1vZGUgaWYgbm8gc2VsZWN0aW9ucyBhbmQgbm90aGluZyBpcyBtYXJrZWQgYXMgdW5zZWxlY3RhYmxlXG4gICAqIEBwYXJhbSB7QXJyYXl9IG5ld1NlbGVjdGlvbnMgLSBDdXJyZW50IHNlbGVjdGlvbnMgYXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBub3RoaW5nVG9TZWxlY3QgLSBXaGV0aGVyIHZlcnNlIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm90aGluZyB0byBzZWxlY3RcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zKG5ld1NlbGVjdGlvbnMsIG5vdGhpbmdUb1NlbGVjdCkge1xuICAgIGNvbnN0IG5vU2VsZWN0aW9ucyA9ICghbmV3U2VsZWN0aW9ucz8ubGVuZ3RoKVxuICAgIGNvbnN0IG5ld01vZGUgPSBub1NlbGVjdGlvbnMgJiYgIW5vdGhpbmdUb1NlbGVjdCA/ICdzZWxlY3QnIDogJ2RlZmF1bHQnXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogbmV3TW9kZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRWZmZWN0IGhvb2sgdG8gaW5pdGlhbGl6ZSBjaGVja2luZyBkYXRhIHdoZW4gY2hlY2tpbmdEYXRhIG9yIGdsV29yZHNEYXRhIGNoYW5nZXNcbiAgICogRmxhdHRlbnMgZ3JvdXAgZGF0YSwgY3JlYXRlcyBpbmRleCwgZmluZHMgaW5pdGlhbCBjaGVjaywgYW5kIHZhbGlkYXRlcyBhbGwgY2hlY2tzXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhdmVEYXRhID0gY2hlY2tpbmdEYXRhICYmIE9iamVjdC5rZXlzKGNoZWNraW5nRGF0YSkubGVuZ3RoICYmIGdsV29yZHNEYXRhICYmIE9iamVjdC5rZXlzKGdsV29yZHNEYXRhKS5sZW5ndGhcbiAgICBjb25zdCBncm91cHNEYXRhSW5pdGlhbGl6ZWQgPSBncm91cHNEYXRhICYmIE9iamVjdC5rZXlzKGdyb3Vwc0RhdGEpLmxlbmd0aFxuICAgIGlmIChoYXZlRGF0YSAmJiAhZ3JvdXBzRGF0YUluaXRpYWxpemVkKSB7XG4gICAgICBsZXQgZmxhdHRlbmVkR3JvdXBEYXRhID0gbnVsbFxuICAgICAgbGV0IGdyb3Vwc0luZGV4ID0gbnVsbFxuICAgICAgaWYgKGNoZWNraW5nRGF0YSkge1xuICAgICAgICBmbGF0dGVuZWRHcm91cERhdGEgPSBncm91cERhdGFIZWxwZXJzLmZsYXR0ZW5Hcm91cERhdGEoY2hlY2tpbmdEYXRhKVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgICAgaWYgKGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlcykge1xuICAgICAgICAgIGdyb3Vwc0luZGV4ID0gcGFyc2VUblRvSW5kZXgoZ2xXb3Jkc0RhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBzSW5kZXggPSBwYXJzZVR3VG9JbmRleChnbFdvcmRzRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGVjayA9IGZpbmRDaGVjayhmbGF0dGVuZWRHcm91cERhdGEsIGNvbnRleHRJZCwgdHJ1ZSlcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBncm91cHNEYXRhOiBmbGF0dGVuZWRHcm91cERhdGEsXG4gICAgICAgIGdyb3Vwc0luZGV4LFxuICAgICAgICBjdXJyZW50Q2hlY2tpbmdEYXRhOiBjaGVja2luZ0RhdGEsXG4gICAgICAgIGN1cnJlbnRDaGVjazogY2hlY2ssXG4gICAgICAgIG1vZGlmaWVkOiBmYWxzZSxcbiAgICAgICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsXG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnZGVidWcnLHRhcmdldEJpYmxlLGZsYXR0ZW5lZEdyb3VwRGF0YSlcbiAgICAgIC8vIHZhbGlkYXRlIGFsbCBjaGVja3NcbiAgICAgIHNlbGVjdGlvbnNIZWxwZXJzLnZhbGlkYXRlU2VsZWN0aW9uc0ZvckFsbENoZWNrcyh0YXJnZXRCaWJsZSwgZmxhdHRlbmVkR3JvdXBEYXRhLCAoY2hlY2ssIGludmFsaWRhdGVkKSA9PiB7XG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVFZGl0VmVyc2UgLSBjaGVjayB2YWxpZGF0aW9uIGNoYW5nZWRgLCBjaGVjaylcbiAgICAgICAgICBfc2F2ZUNoZWNraW5nRGF0YShjaGVjaywgeyBpbnZhbGlkYXRlZCB9KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcblxuICAgICAgaWYgKGZsYXR0ZW5lZEdyb3VwRGF0YSAmJiBjaGVjaz8uY29udGV4dElkKSB7XG4gICAgICAgIHVwZGF0ZUNvbnRleHQoY2hlY2ssIGdyb3Vwc0luZGV4KVxuICAgICAgICB1cGRhdGVNb2RlRm9yU2VsZWN0aW9ucyhjaGVjaz8uc2VsZWN0aW9ucywgY2hlY2s/Lm5vdGhpbmdUb1NlbGVjdClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjb250ZXh0SWQsIGNoZWNraW5nRGF0YSwgZ2xXb3Jkc0RhdGFdKTtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29udGV4dCBhbmQgcmVsYXRlZCBkYXRhIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjaGVjayBhbmQgZ3JvdXAgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdDaGVjayAtIFRoZSBuZXcgY2hlY2sgb2JqZWN0IGNvbnRhaW5pbmcgY29udGV4dCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtncm91cHNJbmRleF89Z3JvdXBzSW5kZXhdIC0gQW4gb3B0aW9uYWwgZ3JvdXAgaW5kZXggb2JqZWN0LCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBncm91cHNJbmRleGAuXG4gICAqIEByZXR1cm4ge3ZvaWR9IERvZXMgbm90IHJldHVybiBhIHZhbHVlLiBVcGRhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24gd2l0aCBuZXcgY29udGV4dCBkYXRhLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlQ29udGV4dChuZXdDaGVjaywgZ3JvdXBzSW5kZXhfID0gZ3JvdXBzSW5kZXgpIHtcbiAgICBjb25zdCBjb250ZXh0SWQgPSBuZXdDaGVjaz8uY29udGV4dElkXG4gICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dElkPy5yZWZlcmVuY2VcbiAgICBjb25zdCB2ZXJzZVRleHQgPSB2ZXJzZUhlbHBlcnMuZ2V0VmVyc2VUZXh0RnJvbUJpYmxlKHRhcmdldEJpYmxlLCByZWZlcmVuY2UpXG4gICAgY29uc3QgYWxpZ25lZEdMVGV4dCA9IGdldEFsaWduZWRHTFRleHQoYWxpZ25lZEdsQmlibGUsIGNvbnRleHRJZCk7XG4gICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlRnJvbUluZGV4KGdyb3Vwc0luZGV4XywgY29udGV4dElkPy5ncm91cElkKVxuICAgIGNvbnN0IGdyb3VwUGhyYXNlID1cbiAgICAgIGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlc1xuICAgICAgICA/IGNvbnRleHRJZD8ub2NjdXJyZW5jZU5vdGVcbiAgICAgICAgOiBnZXRQaHJhc2VGcm9tVHcoZ2xXb3Jkc0RhdGEsIGNvbnRleHRJZD8uZ3JvdXBJZClcblxuICAgIGxldCBncm91cERhdGFcbiAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgIGlmIChjaGVja1R5cGUgPT09IHRyYW5zbGF0aW9uTm90ZXMpIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgYXJ0aWNsZXM6IGdsV29yZHNEYXRhPy50cmFuc2xhdGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtcbiAgICAgICAgICAuLi5nbFdvcmRzRGF0YSxcbiAgICAgICAgICBtYW5pZmVzdDoge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBfYXJ0aWNsZVxuICAgIGNvbnN0IGFydGljbGVJZCA9IGNvbnRleHRJZD8uZ3JvdXBJZFxuICAgIGNvbnN0IGdyb3Vwc0lkcyA9IE9iamVjdC5rZXlzKGdyb3VwRGF0YSlcbiAgICBmb3IgKGNvbnN0IF9ncm91cElkIG9mIGdyb3Vwc0lkcykge1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cERhdGFbX2dyb3VwSWRdXG4gICAgICBjb25zdCBhcnRpY2xlcyA9IGdyb3VwPy5hcnRpY2xlcyB8fCB7fVxuICAgICAgX2FydGljbGUgPSBhcnRpY2xlcz8uW2FydGljbGVJZF0gfHwgbnVsbFxuICAgICAgaWYgKF9hcnRpY2xlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnRpY2xlTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKF9hcnRpY2xlLCBnYXRld2F5TGFuZ3VhZ2VJZCk7XG4gICAgICAgIF9hcnRpY2xlID0gY3VycmVudEFydGljbGVNYXJrZG93blxuICAgICAgICAvLyBjb25zdCB0SGVscHNNb2RhbE1hcmtkb3duID0gdEhlbHBzSGVscGVycy5jb252ZXJ0TWFya2Rvd25MaW5rcyhtb2RhbEFydGljbGUsIGdhdGV3YXlMYW5ndWFnZUNvZGUsIGFydGljbGVDYXRlZ29yeSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgYWxpZ25lZEdMVGV4dCxcbiAgICAgIGN1cnJlbnRDaGVjazogbmV3Q2hlY2ssXG4gICAgICB2ZXJzZVRleHQsXG4gICAgICBncm91cFRpdGxlLFxuICAgICAgZ3JvdXBQaHJhc2UsXG4gICAgICBhcnRpY2xlOiBfYXJ0aWNsZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjb21tZW50VGV4dCA9IGdldEN1cnJlbnRWYWx1ZUZvcignY29tbWVudHMnKSB8fCAnJ1xuICBjb25zdCBib29rSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmJvb2s/LmlkXG4gIGNvbnN0IGJvb2tOYW1lID0gdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPy5ib29rPy5uYW1lXG4gIGNvbnN0IGJvb2tEZXRhaWxzID0ge1xuICAgIGlkOiBib29rSWQsXG4gICAgbmFtZTogYm9va05hbWVcbiAgfTtcbiAgY29uc3QgZ2F0ZXdheUxhbmd1YWdlSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmdhdGV3YXlMYW5ndWFnZUlkXG4gIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udCA9IG1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICBjb25zdCBjdXJyZW50Q29udGV4dElkID0gY3VycmVudENoZWNrPy5jb250ZXh0SWRcblxuICAvKipcbiAgICogVXBkYXRlcyB0b29sLXNwZWNpZmljIHNldHRpbmdzIGFuZCBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZSAoZS5nLiwgJ1NjcmlwdHVyZVBhbmUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFNldHRpbmcgdmFsdWVcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5ncyA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5ncyAke2ZpZWxkTmFtZX09JHtmaWVsZFZhbHVlfWApXG4gICAgaWYgKHRvb2xzU2V0dGluZ3MpIHtcbiAgICAgIC8vIERlZXAgY2xvbmluZyBvYmplY3QgdG8gYXZvaWQgbW9kaWZ5aW5nIG9yaWdpbmFsIG9iamVjdFxuICAgICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSB7IC4uLnRvb2xzU2V0dGluZ3MgfTtcbiAgICAgIGxldCBjb21wb25lbnRTZXR0aW5ncyA9IF90b29sc1NldHRpbmdzPy5bTkFNRVNQQUNFXVxuICAgICAgaWYgKCFjb21wb25lbnRTZXR0aW5ncykge1xuICAgICAgICBjb21wb25lbnRTZXR0aW5ncyA9IHsgfVxuICAgICAgICBfdG9vbHNTZXR0aW5nc1tOQU1FU1BBQ0VdID0gY29tcG9uZW50U2V0dGluZ3NcbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudFNldHRpbmdzW2ZpZWxkTmFtZV0gPSBmaWVsZFZhbHVlXG4gICAgICBzZXRTZXR0aW5ncyh7IHRvb2xzU2V0dGluZ3M6IF90b29sc1NldHRpbmdzIH0sIHRydWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIHNldHRpbmdzIHRvIHN0b3JhZ2UgYWZ0ZXIgcmVtb3ZpbmcgQmlibGUgZGF0YSB0byByZWR1Y2Ugc2l6ZVxuICAgKiBDcmVhdGVzIHNoYWxsb3cgY29waWVzIHRvIGF2b2lkIG1vZGlmeWluZyBvcmlnaW5hbCBvYmplY3RzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfc2V0dGluZ3MgLSBTZXR0aW5ncyBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gX3NhdmVTZXR0aW5ncyhfc2V0dGluZ3MpIHtcbiAgICBpZiAoc2F2ZVNldHRpbmdzICYmIF9zZXR0aW5ncykge1xuICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7IC4uLl9zZXR0aW5ncyB9XG4gICAgICBkZWxldGUgbmV3U2V0dGluZ3MubWFuaWZlc3RcbiAgICAgIGNvbnN0IF9wYW5lU2V0dGluZ3MgPSBbIC4uLm5ld1NldHRpbmdzLnBhbmVTZXR0aW5ncyBdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9wYW5lU2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgX3BhbmVTZXR0aW5nID0gey4uLl9wYW5lU2V0dGluZ3NbaV19IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVTZXR0aW5nc1tpXSA9IF9wYW5lU2V0dGluZ1xuICAgICAgfVxuICAgICAgbmV3U2V0dGluZ3MucGFuZVNldHRpbmdzID0gX3BhbmVTZXR0aW5nc1xuXG4gICAgICBjb25zdCBfcGFuZUtleVNldHRpbmdzID0geyAuLi5uZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgfVxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKF9wYW5lS2V5U2V0dGluZ3MpXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGNvbnN0IF9wYW5lU2V0dGluZyA9IHsuLi5fcGFuZUtleVNldHRpbmdzW2tleV19IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVLZXlTZXR0aW5nc1trZXldID0gX3BhbmVTZXR0aW5nXG4gICAgICB9XG4gICAgICBuZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgPSBfcGFuZUtleVNldHRpbmdzXG5cbiAgICAgIHNhdmVTZXR0aW5ncyhuZXdTZXR0aW5ncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyBzdGF0ZSBhbmQgb3B0aW9uYWxseSBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyAtIE5ldyBzZXR0aW5ncyB0byBtZXJnZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvU2F2ZSAtIFdoZXRoZXIgdG8gcGVyc2lzdCBzZXR0aW5nc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0U2V0dGluZ3MobmV3U2V0dGluZ3MsIGRvU2F2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgX3NldHRpbmdzID0ge1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAuLi5uZXdTZXR0aW5nc1xuICAgIH1cblxuICAgIF9zZXRTZXR0aW5ncyhfc2V0dGluZ3MpXG4gICAgZG9TYXZlICYmIF9zYXZlU2V0dGluZ3MoX3NldHRpbmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgU2NyaXB0dXJlIHBhbmUgc2V0dGluZ3Mgd2l0aCBuZXcgcGFuZSBjb25maWd1cmF0aW9uc1xuICAgKiBNYWludGFpbnMgYSBrZXktYmFzZWQgbG9va3VwIGZvciBwYW5lIHNldHRpbmdzIGJ5IGxhbmd1YWdlL2JpYmxlL293bmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXl9IF9wYW5lU2V0dGluZ3MgLSBBcnJheSBvZiBwYW5lIHNldHRpbmcgb2JqZWN0c1xuICAgKi9cbiAgY29uc3Qgc2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlID0gKE5BTUVTUEFDRSwgZmllbGROYW1lLCBfcGFuZVNldHRpbmdzKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tc2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlICR7ZmllbGROYW1lfWAsIF9wYW5lU2V0dGluZ3MpXG4gICAgY29uc3QgX3BhbmVLZXlTZXR0aW5ncyA9IHsuLi5wYW5lS2V5U2V0dGluZ3N9XG5cbiAgICBmb3IgKGNvbnN0IHBhbmVTZXR0aW5ncyBvZiBfcGFuZVNldHRpbmdzKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gcGFuZVNldHRpbmdzPy5sYW5ndWFnZUlkXG4gICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke3BhbmVTZXR0aW5ncz8uYmlibGVJZH0vJHtwYW5lU2V0dGluZ3M/Lm93bmVyfWBcbiAgICAgIF9wYW5lS2V5U2V0dGluZ3Nba2V5XSA9IHBhbmVTZXR0aW5nc1xuICAgIH1cblxuICAgIGNvbnN0IF9zZXR0aW5ncyA9IHtcbiAgICAgIHBhbmVTZXR0aW5nczogX3BhbmVTZXR0aW5ncyxcbiAgICAgIHBhbmVLZXlTZXR0aW5nczogX3BhbmVLZXlTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBzZXRTZXR0aW5ncyhfc2V0dGluZ3MsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBtYW5pZmVzdCBhbmQgYXBwIHNldHRpbmdzXG4gICAqIFVzZWQgZm9yIHBlcnNpc3RpbmcgdXNlciBwcmVmZXJlbmNlcyBsaWtlIGZvbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBjb25zdCBhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgPSAoZmllbGROYW1lLCBmaWVsZFZhbHVlKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tYWRkT2JqZWN0UHJvcGVydHlUb01hbmlmZXN0ICR7ZmllbGROYW1lfT0ke2ZpZWxkVmFsdWV9YClcbiAgICBpZiAobWFuaWZlc3QpIHtcbiAgICAgIGNvbnN0IF9tYW5pZmVzdCA9IHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIFtmaWVsZE5hbWVdOiBmaWVsZFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gc2F2ZSB0aGlzIGluIGFwcFNldHRpbmdzXG4gICAgICBjb25zdCBhcHBTZXR0aW5ncyA9IHNldHRpbmdzLmFwcFNldHRpbmdzIHx8IHt9XG4gICAgICBjb25zdCBfYXBwU2V0dGluZ3MgPSB7XG4gICAgICAgIC4uLmFwcFNldHRpbmdzLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRWYWx1ZVxuICAgICAgfVxuXG4gICAgICBzZXRTZXR0aW5ncyh7XG4gICAgICAgIG1hbmlmZXN0OiBfbWFuaWZlc3QsXG4gICAgICAgIGFwcFNldHRpbmdzOiBfYXBwU2V0dGluZ3NcbiAgICAgIH0sIHRydWUpXG4gICAgfVxuICB9XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnMgZm9yIHZhcmlvdXMgdXNlciBhY3Rpb25zXG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuIGFsZXJ0IGRpYWxvZyAocGxhY2Vob2xkZXIgaW1wbGVtZW50YXRpb24pXG4gICAqL1xuICBjb25zdCBvcGVuQWxlcnREaWFsb2cgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tb3BlbkFsZXJ0RGlhbG9nYCkgLy8gVE9ETyAtIGZsZXNoIG91dFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB2ZXJzZSBjb250ZW50IGhhcyBjaGFuZ2VkIGZyb20gb3JpZ2luYWxcbiAgICogQHBhcmFtIHtFdmVudH0gZSAtIElucHV0IGV2ZW50XG4gICAqL1xuICBjb25zdCBjaGVja0lmVmVyc2VDaGFuZ2VkID0gKGUpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGVja0lmVmVyc2VDaGFuZ2VkYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBjb25zdCBfaXNWZXJzZUNoYW5nZWQgPSBfbmV3VmVyc2VUZXh0ICE9PSB2ZXJzZVRleHRcbiAgICBzZXRTdGF0ZSh7IGlzVmVyc2VDaGFuZ2VkOiBfaXNWZXJzZUNoYW5nZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB2ZXJzZSB0ZXh0IGVkaXRpbmdcbiAgICogQHBhcmFtIHtFdmVudH0gZSAtIElucHV0IGV2ZW50IHdpdGggbmV3IHZlcnNlIHRleHRcbiAgICovXG4gIGNvbnN0IGhhbmRsZUVkaXRWZXJzZSA9IChlKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlRWRpdFZlcnNlYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogX25ld1ZlcnNlVGV4dCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHZlcnNlIGVkaXRpbmcgYW5kIHJlc2V0cyBzdGF0ZVxuICAgKi9cbiAgY29uc3QgY2FuY2VsRWRpdFZlcnNlID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNhbmNlbEVkaXRWZXJzZWApXG4gICAgc2V0U3RhdGUoeyBuZXdWZXJzZVRleHQ6IG51bGwsIG5ld1RhZ3M6IFtdLCBtb2RlOiBcImRlZmF1bHRcIiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBlZGl0ZWQgdmVyc2UgdGV4dCBhbmQgdXBkYXRlcyBhbGlnbm1lbnRzXG4gICAqIE1hcmtzIGNoZWNrIGFzIGhhdmluZyB2ZXJzZSBlZGl0c1xuICAgKi9cbiAgY29uc3Qgc2F2ZUVkaXRWZXJzZSA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1zYXZlRWRpdFZlcnNlYClcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBjdXJyZW50Q29udGV4dElkLnJlZmVyZW5jZTtcbiAgICBjb25zdCB2ZXJzZVJlZiA9IGN1cnJlbnRDb250ZXh0SWQudmVyc2VTcGFuIHx8IHZlcnNlOyAvLyBpZiBpbiB2ZXJzZSBzcGFuLCB1c2UgaXRcbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRCaWJsZVtjaGFwdGVyXVt2ZXJzZVJlZl07XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgICBuZXdUYWdzOiBbXSxcbiAgICAgIG1vZGU6IFwiZGVmYXVsdFwiLFxuICAgICAgaXNWZXJzZUNoYW5nZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZVJlZiwgYmVmb3JlLCBuZXdWZXJzZVRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBjaGVjayBpbiB0aGUgc2VxdWVuY2VcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUdvVG9OZXh0KCkge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWhhbmRsZUdvVG9OZXh0YClcbiAgICBjb25zdCBuZXh0Q2hlY2sgPSBmaW5kTmV4dENoZWNrKGdyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgIGNoYW5nZUN1cnJlbnRDaGVja18obmV4dENoZWNrLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgY2hlY2sgaW4gdGhlIHNlcXVlbmNlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVHb1RvUHJldmlvdXMoKSB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlR29Ub1ByZXZpb3VzYClcbiAgICBjb25zdCBwcmV2aW91c0NoZWNrID0gZmluZFByZXZpb3VzQ2hlY2soZ3JvdXBzRGF0YSwgY3VycmVudENvbnRleHRJZCwgZmFsc2UpXG4gICAgY2hhbmdlQ3VycmVudENoZWNrXyhwcmV2aW91c0NoZWNrLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hlY2tib3ggY2hhbmdlcyBmb3IgdGFnc1xuICAgKiBBZGRzIG9yIHJlbW92ZXMgdGFncyBmcm9tIHRoZSBjdXJyZW50IGxpc3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyAtIFRhZyBpZGVudGlmaWVyXG4gICAqL1xuICBjb25zdCBoYW5kbGVUYWdzQ2hlY2tib3ggPSAodGFnKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlVGFnc0NoZWNrYm94YCwgdGFnKVxuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gbmV3VGFncyB8fCBbXVxuICAgIGNvbnN0IHRhZ0luZGV4ID0gY3VycmVudFRhZ3MuaW5kZXhPZih0YWcpO1xuICAgIGxldCBfbmV3VGFncztcblxuICAgIGlmICh0YWdJbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBjb3B5ID0gY3VycmVudFRhZ3Muc2xpY2UoMCk7XG4gICAgICBjb3B5LnNwbGljZSh0YWdJbmRleCwgMSk7XG4gICAgICBfbmV3VGFncyA9IGNvcHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9uZXdUYWdzID0gWy4uLmN1cnJlbnRUYWdzLCB0YWddO1xuICAgIH1cblxuICAgIHNldFN0YXRlKHsgbmV3VGFnczogX25ld1RhZ3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHNlbGVjdGlvbnMgYWdhaW5zdCB2ZXJzZSB0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZVRleHRfIC0gVmVyc2UgdGV4dCB0byB2YWxpZGF0ZSBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGlvbnNfIC0gU2VsZWN0aW9ucyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBzZWxlY3Rpb25zIGFyZSB2YWxpZFxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTZWxlY3Rpb25zID0gKHZlcnNlVGV4dF8sIHNlbGVjdGlvbnNfKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tdmFsaWRhdGVTZWxlY3Rpb25zYCwgc2VsZWN0aW9uc18pXG4gICAgcmV0dXJuIHNlbGVjdGlvbnNIZWxwZXJzLnZhbGlkYXRlVmVyc2VTZWxlY3Rpb25zKHZlcnNlVGV4dF8sIHNlbGVjdGlvbnNfKVxuICB9XG5cbiAgLyoqXG4gICAqIE1lbW9pemVkIGNvbXB1dGF0aW9uIG9mIHVuZmlsdGVyZWQgdmVyc2UgdGV4dCBpbmNsdWRpbmcgVVNGTSBtYXJrZXJzXG4gICAqIFVzZWQgZm9yIGRpc3BsYXlpbmcgYW5kIGVkaXRpbmcgY29tcGxldGUgdmVyc2UgZGF0YVxuICAgKi9cbiAgY29uc3QgdW5maWx0ZXJlZFZlcnNlVGV4dCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCB1bmZpbHRlcmVkVmVyc2VUZXh0XyA9ICcnXG4gICAgY29uc3QgcmVmZXJlbmNlID0gY3VycmVudENvbnRleHRJZD8ucmVmZXJlbmNlXG4gICAgY29uc3QgY2hhcHRlciA9IHJlZmVyZW5jZT8uY2hhcHRlclxuICAgIGNvbnN0IHZlcnNlID0gcmVmZXJlbmNlPy52ZXJzZVxuICAgIGlmIChjaGFwdGVyICYmIHZlcnNlKSB7XG4gICAgICBjb25zdCB2ZXJzZURhdGEgPSB0YXJnZXRCaWJsZT8uW2NoYXB0ZXJdPy5bdmVyc2VdXG4gICAgICBpZiAodmVyc2VEYXRhKSB7XG4gICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID0gdmVyc2VEYXRhXG4gICAgICAgIGlmICh0eXBlb2YgdmVyc2VEYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5nZXRVc2ZtRm9yVmVyc2VDb250ZW50KHZlcnNlRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmZpbHRlcmVkVmVyc2VUZXh0X1xuICB9LCBbdGFyZ2V0QmlibGUsIGN1cnJlbnRDb250ZXh0SWRdKVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGVtcG9yYXJ5IHZhbHVlIGZvciBhIGNoZWNraW5nIGRhdGEgcHJvcGVydHlcbiAgICogVXNlZCBmb3IgdHJhY2tpbmcgdW5zYXZlZCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBQcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgY29uc3Qgc2V0VGVtcENoZWNraW5nSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3Q2hlY2tpbmdEYXRhID0gdGVtcENoZWNraW5nRGF0YSA/IHsuLi50ZW1wQ2hlY2tpbmdEYXRhfSA6IHt9XG4gICAgbmV3Q2hlY2tpbmdEYXRhW2tleV0gPSB2YWx1ZVxuICAgIHNldFRlbXBDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgc2VsZWN0aW9ucyBpbiB0ZW1wb3Jhcnkgc3RhdGUgd2l0aG91dCBzYXZpbmdcbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0aW9ucyAtIE5ldyBzZWxlY3Rpb25zIGFycmF5XG4gICAqL1xuICBjb25zdCBjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlID0gKHNlbGVjdGlvbnMpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlYCwgc2VsZWN0aW9ucylcbiAgICBzZXRUZW1wQ2hlY2tpbmdJdGVtKCdzZWxlY3Rpb25zJywgc2VsZWN0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBcIm5vdGhpbmcgdG8gc2VsZWN0XCIgZmxhZyBmb3IgY3VycmVudCBjaGVja1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdCAtIE5ldyBzdGF0ZSB2YWx1ZVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlTm90aGluZ1RvU2VsZWN0ID0gKHNlbGVjdCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXRvZ2dsZU5vdGhpbmdUb1NlbGVjdGAsIHNlbGVjdClcbiAgICBzZXRUZW1wQ2hlY2tpbmdJdGVtKCdub3RoaW5nVG9TZWxlY3QnLCBzZWxlY3QpXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY3VycmVudCBjaGVjayBiZWluZyB3b3JrZWQgb25cbiAgICogVmFsaWRhdGVzIGZvciB1bnNhdmVkIGNoYW5nZXMgYmVmb3JlIHN3aXRjaGluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3Q29udGV4dCAtIE5ldyBjaGVjayBjb250ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9DaGVjayAtIFNraXAgdmFsaWRhdGlvbiBpZiB0cnVlXG4gICAqL1xuICBjb25zdCBjaGFuZ2VDdXJyZW50Q2hlY2tfID0gKG5ld0NvbnRleHQsIG5vQ2hlY2sgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IG5ld0NvbnRleHRJZCA9IG5ld0NvbnRleHQ/LmNvbnRleHRJZFxuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNoYW5nZUN1cnJlbnRDb250ZXh0SWRgLCBuZXdDb250ZXh0SWQpXG5cbiAgICBjb25zdCBzZWxlY3Rpb25zVW5jaGFuZ2VkID0gaXNFcXVhbChjdXJyZW50U2VsZWN0aW9ucywgdGVtcFNlbGVjdGlvbnMpXG4gICAgaWYgKG5vQ2hlY2sgfHwgc2VsZWN0aW9uc1VuY2hhbmdlZCkge1xuICAgICAgaWYgKG5ld0NvbnRleHRJZCkge1xuICAgICAgICBsZXQgY2hlY2sgPSBmaW5kQ2hlY2soZ3JvdXBzRGF0YSwgbmV3Q29udGV4dElkLCBmYWxzZSlcbiAgICAgICAgdXBkYXRlQ29udGV4dChuZXdDb250ZXh0KVxuICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICBzZXRMb2NhbENoZWNraW5nRGF0YShudWxsKVxuICAgICAgICAgIHNldFRlbXBDaGVja2luZ0RhdGEobnVsbClcbiAgICAgICAgICB1cGRhdGVNb2RlRm9yU2VsZWN0aW9ucyhjaGVjay5zZWxlY3Rpb25zLCBjaGVjay5ub3RoaW5nVG9TZWxlY3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ0NoZWNrZXIuY2hhbmdlQ3VycmVudENvbnRleHRJZCAtIHVuc2F2ZWQgY2hhbmdlcycpXG4gICAgfVxuICAgIGNoYW5nZWRDdXJyZW50Q2hlY2sgJiYgY2hhbmdlZEN1cnJlbnRDaGVjayhuZXdDb250ZXh0KVxuICB9XG5cbiAgY29uc3QgZGlyZWN0aW9uID0gJ2x0cidcbiAgY29uc3QgYm9va21hcmtFbmFibGVkID0gZ2V0Q3VycmVudFZhbHVlRm9yKCdyZW1pbmRlcnMnKVxuICBjb25zdCBpc1ZlcnNlRWRpdGVkID0gISFnZXRDdXJyZW50VmFsdWVGb3IoJ3ZlcnNlRWRpdHMnKVxuICBjb25zdCBpc1ZlcnNlSW52YWxpZGF0ZWQgPSAhIWdldEN1cnJlbnRWYWx1ZUZvcignaW52YWxpZGF0ZWQnKVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGNoZWNrIGJlaW5nIHdvcmtlZCBvblxuICAgKiBWYWxpZGF0ZXMgZm9yIHVuc2F2ZWQgY2hhbmdlcyBiZWZvcmUgc3dpdGNoaW5nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdDb250ZXh0IC0gTmV3IGNoZWNrIGNvbnRleHRcbiAgICogQHBhcmFtIHtib29sZWFufSBub0NoZWNrIC0gU2tpcCB2YWxpZGF0aW9uIGlmIHRydWVcbiAgICovXG4gIGNvbnN0IF9zYXZlU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LV9zYXZlU2VsZWN0aW9uIHBlcnNpc3QgdG8gZmlsZWApXG4gICAgY29uc3QgeyBjaGVja0luR3JvdXBzRGF0YSwgX2N1cnJlbnRDaGVjaywgbmV3U3RhdGUsIF9uZXdDaGVja2luZ0RhdGEgfSA9IGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgaWYgKHRlbXBOb3RoaW5nVG9TZWxlY3QpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSB0ZW1wTm90aGluZ1RvU2VsZWN0XG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuc2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuaW52YWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSBmYWxzZVxuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLnNlbGVjdGlvbnMgPSB0ZW1wU2VsZWN0aW9uc1xuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLmludmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ25vdGhpbmdUb1NlbGVjdCcpXG4gICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ2ludmFsaWRhdGVkJylcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoX2N1cnJlbnRDaGVjaywgY2hlY2tJbkdyb3Vwc0RhdGEsIF9uZXdDaGVja2luZ0RhdGEpXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmVzIGN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBzYXZpbmcgbW9kaWZpY2F0aW9uc1xuICAgKiBDcmVhdGVzIGRlZXAgY29waWVzIHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIHN0YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIGNsb25lZCBkYXRhIHN0cnVjdHVyZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lRGF0YUZvclNhdmluZygpIHtcbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgY29uc3QgY2hlY2tJbkdyb3Vwc0RhdGEgPSBmaW5kQ2hlY2soX2dyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQpXG4gICAgbGV0IF9jdXJyZW50Q2hlY2tcbiAgICBsZXQgbmV3U3RhdGVcbiAgICBsZXQgX25ld0NoZWNraW5nRGF0YVxuICAgIGlmIChjaGVja0luR3JvdXBzRGF0YSkge1xuICAgICAgLy8gc2F2ZSB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2hlY2tJbkdyb3Vwc0RhdGEuY2F0ZWdvcnlcbiAgICAgIGNvbnN0IG5ld0NoZWNrRGF0YSA9IF8uY2xvbmVEZWVwKGN1cnJlbnRDaGVja2luZ0RhdGEpXG4gICAgICBfY3VycmVudENoZWNrID0gZmluZENoZWNrKG5ld0NoZWNrRGF0YVtjYXRlZ29yeV0sIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIGN1cnJlbnRDaGVja2luZ0RhdGE6IG5ld0NoZWNrRGF0YSxcbiAgICAgICAgY3VycmVudENoZWNrOiBfY3VycmVudENoZWNrLFxuICAgICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YSxcbiAgICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgICBtb2RpZmllZDogdHJ1ZVxuICAgICAgfVxuICAgICAgX25ld0NoZWNraW5nRGF0YSA9IGxvY2FsQ2hlY2tpbmdEYXRhID8gey4uLmxvY2FsQ2hlY2tpbmdEYXRhfSA6IHt9XG4gICAgfVxuICAgIHJldHVybiB7IGNoZWNrSW5Hcm91cHNEYXRhLCBfY3VycmVudENoZWNrLCBuZXdTdGF0ZSwgX25ld0NoZWNraW5nRGF0YSB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIGNoZWNrIGRhdGEgb2JqZWN0c1xuICAgKiBNb2RpZmllcyBib3RoIHRoZSBjdXJyZW50IGNoZWNrIGFuZCBncm91cHMgZGF0YVxuICAgKiBAcGFyYW0ge29iamVjdH0gX2N1cnJlbnRDaGVjayAtIEN1cnJlbnQgY2hlY2sgb2JqZWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVja0luR3JvdXBzRGF0YSAtIENoZWNrIGluIGdyb3VwcyBkYXRhIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0NoZWNraW5nRGF0YSAtIE5ldyBkYXRhIHRvIGFwcGx5XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWYWx1ZXNJbkNoZWNrRGF0YShfY3VycmVudENoZWNrLCBjaGVja0luR3JvdXBzRGF0YSwgX25ld0NoZWNraW5nRGF0YSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKF9uZXdDaGVja2luZ0RhdGEpKSB7XG4gICAgICBjb25zdCBuZXdDaGVja2luZ1ZhbHVlID0gX25ld0NoZWNraW5nRGF0YVtrZXldXG4gICAgICBfY3VycmVudENoZWNrW2tleV0gPSBuZXdDaGVja2luZ1ZhbHVlXG4gICAgICBjaGVja0luR3JvdXBzRGF0YVtrZXldID0gbmV3Q2hlY2tpbmdWYWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBtdWx0aXBsZSBjaGVjayBwcm9wZXJ0eSBjaGFuZ2VzIHRvIGZpbGVcbiAgICogQ2xvbmVzIGRhdGEsIGFwcGxpZXMgY2hhbmdlcywgdXBkYXRlcyBzdGF0ZSwgYW5kIHNhdmVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdEYXRhIC0gT2JqZWN0IHdpdGggcHJvcGVydHkgbmFtZXMgYW5kIHZhbHVlcyB0byB1cGRhdGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0IF9zYXZlRGF0YSA9IChuZXdEYXRhKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tX3NhdmVEYXRhIHBlcnNpc3QgdG8gZmlsZWApXG4gICAgY29uc3QgeyBjaGVja0luR3JvdXBzRGF0YSwgX2N1cnJlbnRDaGVjaywgbmV3U3RhdGUsIF9uZXdDaGVja2luZ0RhdGEgfSA9IGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobmV3RGF0YSkpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YVtrZXldID0gbmV3RGF0YVtrZXldXG4gICAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KVxuICAgICAgfVxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoX2N1cnJlbnRDaGVjaywgY2hlY2tJbkdyb3Vwc0RhdGEsIF9uZXdDaGVja2luZ0RhdGEpXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgY2hhbmdlcyB0byBhIHNwZWNpZmljIGNoZWNrIChtYXkgbm90IGJlIGN1cnJlbnQgY2hlY2spXG4gICAqIE9ubHkgc2F2ZXMgaWYgZGF0YSBhY3R1YWxseSBjaGFuZ2VkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVjayAtIENoZWNrIG9iamVjdCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0RhdGEgLSBOZXcgZGF0YSB0byBhcHBseVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBkYXRhIHdhcyBjaGFuZ2VkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdCBfc2F2ZUNoZWNraW5nRGF0YSA9IChjaGVjaywgbmV3RGF0YSkgPT4ge1xuICAgIGxldCBjaGFuZ2VkRGF0YSA9IGZhbHNlXG4gICAgaWYgKGNoZWNrKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZXdEYXRhKSkge1xuICAgICAgICBpZiAoY2hlY2tba2V5XSAhPT0gbmV3RGF0YVtrZXldKSB7XG4gICAgICAgICAgY2hlY2tba2V5XSA9IG5ld0RhdGFba2V5XVxuICAgICAgICAgIGNoYW5nZWREYXRhID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VkRGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1fc2F2ZUNoZWNraW5nRGF0YSBwZXJzaXN0IGNoYW5nZXMgdG8gZmlsZWAsIGNoZWNrKVxuICAgICAgICBjb25zdCBuZXdDaGVja2luZ0RhdGEgPSB7XG4gICAgICAgICAgY3VycmVudENoZWNrOiBjaGVjayxcbiAgICAgICAgfVxuICAgICAgICBzYXZlQ2hlY2tpbmdEYXRhICYmIHNhdmVDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZERhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcHJvcGVydHkgZnJvbSB0ZW1wb3JhcnkgY2hlY2tpbmcgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZSB0byByZW1vdmVcbiAgICovXG4gIGZ1bmN0aW9uIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KSB7XG4gICAgaWYgKHRlbXBDaGVja2luZ0RhdGE/Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IF90ZW1wQ2hlY2tpbmdEYXRhID0gey4uLnRlbXBDaGVja2luZ0RhdGF9XG4gICAgICBkZWxldGUgX3RlbXBDaGVja2luZ0RhdGFba2V5XVxuICAgICAgc2V0VGVtcENoZWNraW5nRGF0YShfdGVtcENoZWNraW5nRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBzZWxlY3Rpb24gbW9kZSB3aXRob3V0IHNhdmluZyBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCBjYW5jZWxTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsU2VsZWN0aW9uYClcbiAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb2RlOiAnZGVmYXVsdCdcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGN1cnJlbnQgc2VsZWN0aW9uc1xuICAgKi9cbiAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2xlYXJTZWxlY3Rpb25gKVxuICAgIHNldFRlbXBDaGVja2luZ0l0ZW0oJ3NlbGVjdGlvbnMnLCBbXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGJvb2ttYXJrL3JlbWluZGVyIGZsYWcgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICovXG4gIGNvbnN0IHRvZ2dsZUJvb2ttYXJrID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXRvZ2dsZUJvb2ttYXJrYClcbiAgICBfc2F2ZURhdGEoe1xuICAgICAgcmVtaW5kZXJzOiAhZ2V0VGVtcFZhbHVlRm9yKCdyZW1pbmRlcnMnKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgVUkgbW9kZSAoZGVmYXVsdCwgc2VsZWN0LCBlZGl0LCBjb21tZW50KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIE5ldyBtb2RlIGlkZW50aWZpZXJcbiAgICovXG4gIGNvbnN0IGNoYW5nZU1vZGUgPSAobW9kZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNoYW5nZU1vZGVgLCBtb2RlKVxuICAgIHNldFN0YXRlKHsgbW9kZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBjb21tZW50IHRleHQgaGFzIGNoYW5nZWQgZnJvbSBzYXZlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnRcbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrSWZDb21tZW50Q2hhbmdlZChlKSB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2hlY2tJZkNvbW1lbnRDaGFuZ2VkYClcbiAgICBjb25zdCBuZXdjb21tZW50ID0gZS50YXJnZXQudmFsdWUgfHwgJyc7XG4gICAgY29uc3Qgb2xkY29tbWVudCA9IGNvbW1lbnRUZXh0IHx8ICcnO1xuICAgIGNvbnN0IGlzQ29tbWVudENoYW5nZWQgPSBuZXdjb21tZW50ICE9PSBvbGRjb21tZW50XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBjb21tZW50IGVkaXRpbmcgd2l0aG91dCBzYXZpbmdcbiAgICovXG4gIGNvbnN0IGNhbmNlbENvbW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsQ29tbWVudGApXG4gICAgZGVsZXRlVGVtcENoZWNraW5nRGF0YSgnY29tbWVudHMnKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGNvbW1lbnQgY2hhbmdlcyB0byBwZXJzaXN0ZW50IHN0b3JhZ2VcbiAgICovXG4gIGNvbnN0IHNhdmVDb21tZW50ID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVDb21tZW50YClcbiAgICBjb25zdCBuZXdDb21tZW50ID0gZ2V0VGVtcFZhbHVlRm9yKCdjb21tZW50cycpXG4gICAgX3NhdmVEYXRhKHsgY29tbWVudHM6IG5ld0NvbW1lbnQgfSlcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1lbnQgdGV4dCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgLSBJbnB1dCBldmVudCB3aXRoIG5ldyBjb21tZW50XG4gICAqL1xuICBjb25zdCBoYW5kbGVDb21tZW50ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlQ29tbWVudGApXG4gICAgY29uc3QgbmV3Q29tbWVudCA9IGUudGFyZ2V0LnZhbHVlXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnY29tbWVudHMnLCBuZXdDb21tZW50KVxuICAgIHNldFN0YXRlKHtcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZWFkeVRvRGlzcGxheUNoZWNrZXIgPSBncm91cHNEYXRhICYmIGdyb3Vwc0luZGV4ICYmIGN1cnJlbnRDb250ZXh0SWQgJiYgdmVyc2VUZXh0XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZm9yIGdldExleGljb25EYXRhIGNhbGxiYWNrIHdpdGggbG9nZ2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV4aWNvbklkIC0gTGV4aWNvbiBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRyeUlkIC0gRW50cnkgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBMZXhpY29uIGRhdGFcbiAgICovXG4gIGNvbnN0IGdldExleGljb25EYXRhXyA9IChsZXhpY29uSWQsIGVudHJ5SWQpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1nZXRMZXhpY29uRGF0YV9gLCB7bGV4aWNvbklkLCBlbnRyeUlkfSlcbiAgICBjb25zdCBsZXhpY29uRGF0YSA9IGdldExleGljb25EYXRhICYmIGdldExleGljb25EYXRhKGxleGljb25JZCwgZW50cnlJZClcbiAgICByZXR1cm4gbGV4aWNvbkRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHBvcG92ZXIgZGlzcGxheVxuICAgKi9cbiAgY29uc3Qgb25DbG9zZVBvcG92ZXIgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tb25DbG9zZVBvcG92ZXJgKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHBvcG92ZXJQcm9wczoge1xuICAgICAgICBwb3BvdmVyVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIHBvcG92ZXIgd2l0aCB0aXRsZSBhbmQgY29udGVudCBhdCBzcGVjaWZpZWQgcG9zaXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gUG9wb3ZlciB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYm9keVRleHQgLSBQb3BvdmVyIGNvbnRlbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IHBvc2l0aW9uQ29vcmQgLSBQb3NpdGlvbiBjb29yZGluYXRlc1xuICAgKi9cbiAgY29uc3Qgc2hvd1BvcG92ZXIgPSAodGl0bGUsIGJvZHlUZXh0LCBwb3NpdGlvbkNvb3JkKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tc2hvd1BvcG92ZXJgLCB0aXRsZSlcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBwb3BvdmVyUHJvcHM6IHtcbiAgICAgICAgcG9wb3ZlclZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBib2R5VGV4dCxcbiAgICAgICAgcG9zaXRpb25Db29yZCxcbiAgICAgICAgb25DbG9zZVBvcG92ZXI6ICgpID0+IG9uQ2xvc2VQb3BvdmVyKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGV4cGFuZGVkIHRyYW5zbGF0aW9uIGhlbHBzIG1vZGFsXG4gICAqL1xuICBjb25zdCB0b2dnbGVIZWxwc01vZGFsID0gKCkgPT4ge1xuICAgIGNvbnN0IF9zaG93SGVscHNNb2RhbCA9ICFzaG93SGVscHNNb2RhbFxuICAgIHNldFN0YXRlKHtcbiAgICAgIHNob3dIZWxwc01vZGFsOiBfc2hvd0hlbHBzTW9kYWxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHRyYW5zbGF0aW9uIGhlbHBzIHNpZGViYXIgdmlzaWJpbGl0eVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlSGVscHMgPSAoKSA9PiB7XG4gICAgY29uc3QgX3Nob3dIZWxwcyA9ICFzaG93SGVscHNcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBzaG93SGVscHM6IF9zaG93SGVscHNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBCaWJsZSBib29rIHRvIHRoZSBiaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQ3JlYXRlcyBsYW5ndWFnZSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBiaWJsZXMgLSBCaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIExhbmd1YWdlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmlibGVJZCAtIEJpYmxlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvb2sgLSBCb29rIGRhdGFcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVCaWJsZVRvS2V5KGJpYmxlcywga2V5LCBiaWJsZUlkLCBib29rKSB7XG4gICAgbGV0IGtleUdyb3VwID0gYmlibGVzW2tleV1cbiAgICBpZiAoIWtleUdyb3VwKSB7IC8vIGlmIGdyb3VwIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgbmV3XG4gICAgICBrZXlHcm91cCA9IHt9XG4gICAgICBiaWJsZXNba2V5XSA9IGtleUdyb3VwXG4gICAgfVxuICAgIGtleUdyb3VwW2JpYmxlSWRdID0gYm9va1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdmVyc2UgY29udGVudCBpbiB0YXJnZXQgQmlibGVcbiAgICogSGFuZGxlcyBVU0ZNIGNvbnZlcnNpb24sIGFsaWdubWVudCB1cGRhdGVzLCBhbmQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlciAtIENoYXB0ZXIgbnVtYmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZSAtIFZlcnNlIG51bWJlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkVmVyc2VUZXh0IC0gT3JpZ2luYWwgdmVyc2UgdGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gTmV3IHZlcnNlIHRleHRcbiAgICovXG4gIGZ1bmN0aW9uIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZSwgb2xkVmVyc2VUZXh0LCBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zb2xlLmxvZyhgZWRpdFRhcmdldFZlcnNlICR7Y2hhcHRlcn06JHt2ZXJzZX0gLSBjaGFuZ2VkIHRvICR7bmV3VmVyc2VUZXh0fWApXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gZmlyc3QgdXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuXG4gICAgY29uc3QgX2JpYmxlcyA9IFsgLi4uYmlibGVzX11cbiAgICBjb25zdCBfdGFyZ2V0QmlibGUgPSB7Li4uX2JpYmxlc1swXX1cbiAgICBfYmlibGVzWzBdID0gX3RhcmdldEJpYmxlXG4gICAgY29uc3QgdGFyZ2V0Qm9vayA9IHsuLi5fdGFyZ2V0QmlibGU/LmJvb2t9XG4gICAgX3RhcmdldEJpYmxlLmJvb2sgPSB0YXJnZXRCb29rXG4gICAgY29uc3QgdGFyZ2V0Q2hhcHRlciA9IHsuLi50YXJnZXRCb29rW2NoYXB0ZXJdfVxuICAgIHRhcmdldEJvb2tbY2hhcHRlcl0gPSB0YXJnZXRDaGFwdGVyXG4gICAgdGFyZ2V0Q2hhcHRlclt2ZXJzZV0gPSBuZXdWZXJzZVRleHRcblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIG5vdyBhcHBseSBuZXcgdmVyc2UgdGV4dCB0byBzZWxlY3RlZCBhbGlnbmVkIHZlcnNlIGFuZCBjYWxsIGJhY2sgdG8gZXh0ZW5zaW9uIHRvIHNhdmVcblxuICAgIGxldCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0XG4gICAgaWYgKHR5cGVvZiBfbmV3VmVyc2VUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgX25ld1ZlcnNlVGV4dCA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShfbmV3VmVyc2VUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyRGF0YSA9IHRhcmdldEJpYmxlPy5bY2hhcHRlcl1cbiAgICBjb25zdCBjdXJyZW50VmVyc2VEYXRhID0gY3VycmVudENoYXB0ZXJEYXRhPy5bdmVyc2VdXG4gICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlRGF0YSwgX25ld1ZlcnNlVGV4dClcbiAgICB0YXJnZXRDaGFwdGVyW3ZlcnNlXSA9IHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHMgfTsgLy8gc2F2ZVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoX2JpYmxlcywgdGFyZ2V0Qm9vaylcblxuICAgIGNvbnN0IHZlcnNlVGV4dCA9IHJlbW92ZVVzZm1NYXJrZXJzKF9uZXdWZXJzZVRleHQpXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0XG4gICAgfSlcblxuICAgIGNoYW5nZVRhcmdldFZlcnNlICYmIGNoYW5nZVRhcmdldFZlcnNlKGNoYXB0ZXIsIHZlcnNlLCBuZXdWZXJzZVRleHQsIHRhcmdldFZlcnNlT2JqZWN0cylcbiAgICBfc2F2ZURhdGEoeyB2ZXJzZUVkaXRzOiB0cnVlIH0pXG5cbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgbGV0IGNoYW5nZWREYXRhID0gZmFsc2VcbiAgICBzZWxlY3Rpb25zSGVscGVycy52YWxpZGF0ZUFsbFNlbGVjdGlvbnNGb3JWZXJzZShuZXdWZXJzZVRleHQsIGJvb2tJZCwgY2hhcHRlciwgdmVyc2UsIF9ncm91cHNEYXRhLCAoY2hlY2ssIGludmFsaWRhdGVkKSA9PiB7XG4gICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgY29uc3QgY3VycmVudENoZWNrSWQgPSBjdXJyZW50Q2hlY2s/LmNvbnRleHRJZD8uY2hlY2tJZFxuICAgICAgICBjb25zdCBjaGVja0lkID0gY2hlY2s/LmNvbnRleHRJZD8uY2hlY2tJZFxuXG4gICAgICAgIGlmIChjaGVja0lkID09PSBjdXJyZW50Q2hlY2tJZCkge1xuICAgICAgICAgIC8vIG5lZWQgdG8gdXBkYXRlIGN1cnJlbnQgY2hlY2tcbiAgICAgICAgICBfc2F2ZURhdGEoe1xuICAgICAgICAgICAgaW52YWxpZGF0ZWQsXG4gICAgICAgICAgICB2ZXJzZUVkaXRzOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1lZGl0VGFyZ2V0VmVyc2UgLSBjaGVjayB2YWxpZGF0ZWQsIHN0YXRlIGNoYW5nZWQ6IGludmFsaWQ6ICR7aW52YWxpZGF0ZWR9YCwgY2hlY2spXG4gICAgICAgIGNoYW5nZWREYXRhID0gY2hhbmdlZERhdGEgfHwgX3NhdmVDaGVja2luZ0RhdGEoY2hlY2ssIHsgaW52YWxpZGF0ZWQsIHZlcnNlRWRpdHM6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKGNoYW5nZWREYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1lZGl0VGFyZ2V0VmVyc2UgLSBjaGFuZ2VzIGRldGVjdGVkIHVwZGF0aW5nIGdyb3Vwc0RhdGFgKVxuICAgICAgc2V0U3RhdGUoe1xuICAgICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyB3aXRoIG5ldyBCaWJsZSBkYXRhIGFuZCBwYW5lIGNvbmZpZ3VyYXRpb25zXG4gICAqIE9yZ2FuaXplcyBCaWJsZXMgYnkgbGFuZ3VhZ2UgYW5kIGluaXRpYWxpemVzIHBhbmUgc2V0dGluZ3NcbiAgICogQHBhcmFtIHtBcnJheX0gbmV3QmlibGVzIC0gQXJyYXkgb2YgQmlibGUgb2JqZWN0c1xuICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0QmlibGUgLSBUYXJnZXQgQmlibGUgZGF0YVxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MobmV3QmlibGVzLCB0YXJnZXRCaWJsZSkge1xuICAgIGNvbnN0IF9iaWJsZXMgPSB7fVxuICAgIGxldCBfcGFuZVNldHRpbmdzID0gW11cbiAgICBjb25zdCBfcGFuZUtleVNldHRpbmdzID0gaW5pdGlhbFNldHRpbmdzPy5wYW5lS2V5U2V0dGluZ3MgfHwge31cbiAgICBpZiAobmV3QmlibGVzPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYmlibGUgb2YgbmV3QmlibGVzKSB7XG4gICAgICAgIGxldCBsYW5ndWFnZUlkID0gYmlibGU/Lmxhbmd1YWdlSWRcbiAgICAgICAgY29uc3Qgb3duZXIgPSBiaWJsZT8ub3duZXJcbiAgICAgICAgY29uc3QgYm9vayA9IGJpYmxlPy5ib29rXG4gICAgICAgIGNvbnN0IGJpYmxlSWQgPSBiaWJsZT8uYmlibGVJZFxuICAgICAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gTlRfT1JJR19MQU5HIHx8IGxhbmd1YWdlSWQgPT09IE9UX09SSUdfTEFORykge1xuICAgICAgICAgIGxhbmd1YWdlSWQgPSAnb3JpZ2luYWxMYW5ndWFnZSdcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke2JpYmxlSWR9LyR7b3duZXJ9YFxuICAgICAgICBjb25zdCBpbml0aWFsUGFuZVNldHRpbmdzID0gX3BhbmVLZXlTZXR0aW5ncz8uW2tleV1cbiAgICAgICAgY29uc3QgbGFuZ0tleSA9IGAke2xhbmd1YWdlSWR9XyR7b3duZXJ9YFxuICAgICAgICBzYXZlQmlibGVUb0tleShfYmlibGVzLCBsYW5nS2V5LCBiaWJsZUlkLCBib29rKVxuICAgICAgICBzYXZlQmlibGVUb0tleShfYmlibGVzLCBsYW5ndWFnZUlkLCBiaWJsZUlkLCBib29rKSAvLyBhbHNvIHNhdmUgYXMgZGVmYXVsdCBmb3IgbGFuZ3VhZ2Ugd2l0aG91dCBvd25lclxuICAgICAgICBjb25zdCBwYW5lID0gaW5pdGlhbFBhbmVTZXR0aW5ncyB8fCB7XG4gICAgICAgICAgLi4uYmlibGUsXG4gICAgICAgICAgbGFuZ3VhZ2VJZFxuICAgICAgICB9XG4gICAgICAgIF9wYW5lU2V0dGluZ3MucHVzaChwYW5lKVxuICAgICAgICBpZiAoIWluaXRpYWxQYW5lU2V0dGluZ3MpIHtcbiAgICAgICAgICBfcGFuZUtleVNldHRpbmdzW2tleV0gPSBwYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3BhbmVTZXR0aW5ncyA9IFtdXG4gICAgfVxuXG4gICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSBpbml0aWFsU2V0dGluZ3M/LnRvb2xzU2V0dGluZ3MgfHxcbiAgICB7XG4gICAgICAnQ2hlY2tBcmVhJzoge1xuICAgICAgICAnZm9udFNpemUnOiAxMDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgX21hbmlmZXN0ID0gaW5pdGlhbFNldHRpbmdzPy5tYW5pZmVzdCB8fFxuICAgIHtcbiAgICAgIGxhbmd1YWdlX25hbWU6IHRhcmdldEJpYmxlPy5tYW5pZmVzdD8uZHVibGluX2NvcmU/Lmxhbmd1YWdlPy50aXRsZSB8fCAnQ3VycmVudCcsXG4gICAgICBwcm9qZWN0Rm9udDogdGFyZ2V0QmlibGU/Lm1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGFwcFNldHRpbmdzID0gaW5pdGlhbFNldHRpbmdzPy5hcHBTZXR0aW5ncyB8fCB7fVxuICAgIF9tYW5pZmVzdCA9IHtcbiAgICAgIC4uLl9tYW5pZmVzdCxcbiAgICAgIC4uLmFwcFNldHRpbmdzIC8vIG9sZGVyIGNvZGUgaXMgbG9va2luZyBmb3IgYXBwU2V0dGluZ3MgaW4gbWFuaWZlc3RcbiAgICB9XG5cbiAgICBzZXRCaWJsZXMoX2JpYmxlcylcbiAgICBzZXRUYXJnZXRCaWJsZSh0YXJnZXRCaWJsZSlcbiAgICBzZXRTZXR0aW5ncyh7XG4gICAgICBwYW5lU2V0dGluZ3M6IF9wYW5lU2V0dGluZ3MsXG4gICAgICBwYW5lS2V5U2V0dGluZ3M6IF9wYW5lS2V5U2V0dGluZ3MsXG4gICAgICB0b29sc1NldHRpbmdzOiBfdG9vbHNTZXR0aW5ncyxcbiAgICAgIG1hbmlmZXN0OiBfbWFuaWZlc3QsXG4gICAgICBuZXdDb21tZW50OiAnJyxcbiAgICAgIGFwcFNldHRpbmdzLFxuICAgIH0sIGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZm9yIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2Ugd2l0aCBjdXJyZW50IEJpYmxlcyBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIC0gTGFuZ3VhZ2UgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gQmlibGUgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJvb2sgLSBCb29rIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFwdGVyIC0gQ2hhcHRlciBudW1iZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlIC0gVmVyc2UgbnVtYmVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNjcmlwdHVyZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShsYW5nLCBpZCwgYm9vaywgY2hhcHRlciwgdmVyc2UpIHtcbiAgICByZXR1cm4gZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShiaWJsZXMsIGxhbmcsIGlkLCBib29rLCBjaGFwdGVyLCB2ZXJzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgaG9vayB0byB1cGRhdGUgc2V0dGluZ3Mgd2hlbiBCaWJsZXMgb3IgdGFyZ2V0IEJpYmxlIGNoYW5nZXNcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdXBkYXRlU2V0dGluZ3MoYmlibGVzXywgdGFyZ2V0QmlibGVfKVxuICB9LCBbYmlibGVzXywgdGFyZ2V0QmlibGVfXSlcblxuICAvLyBidWlsZCB0aGUgdGl0bGVcbiAgY29uc3QgeyB0YXJnZXRfbGFuZ3VhZ2UsIHByb2plY3QgfSA9IG1hbmlmZXN0O1xuICBsZXQgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUgPSBwcm9qZWN0Py50aXRsZSB8fCAnJztcblxuICBpZiAodGFyZ2V0X2xhbmd1YWdlPy5ib29rPy5uYW1lKSB7XG4gICAgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUgPSB0YXJnZXRfbGFuZ3VhZ2UuYm9vay5uYW1lO1xuICB9XG5cblxuICBjb25zdCBzdHlsZVByb3BzID0gc3R5bGVzIHx8IHt9XG4gIGNvbnN0IF9jaGVja2VyU3R5bGVzID0ge1xuICAgIC4uLmxvY2FsU3R5bGVzLmNvbnRhaW5lckRpdixcbiAgICAuLi5zdHlsZVByb3BzLFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICByZWFkeVRvRGlzcGxheUNoZWNrZXIgP1xuICAgICAgPGRpdiBpZD0nY2hlY2tlcicgc3R5bGU9e19jaGVja2VyU3R5bGVzfT5cbiAgICAgICAgPEdyb3VwTWVudUNvbXBvbmVudFxuICAgICAgICAgIGJvb2tOYW1lPXtib29rTmFtZX1cbiAgICAgICAgICBjaGFuZ2VDdXJyZW50Q29udGV4dElkPXtjaGFuZ2VDdXJyZW50Q2hlY2tffVxuICAgICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgICBncm91cHNEYXRhPXtncm91cHNEYXRhfVxuICAgICAgICAgIGdyb3Vwc0luZGV4PXtncm91cHNJbmRleH1cbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnQ9e3RhcmdldExhbmd1YWdlRm9udH1cbiAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuY2VudGVyRGl2fT5cbiAgICAgICAgICB7IGJpYmxlcyAmJiBPYmplY3Qua2V5cyhiaWJsZXMpLmxlbmd0aCAmJlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuc2NyaXB0dXJlUGFuZURpdn0+XG4gICAgICAgICAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgICAgICAgICAgYWRkT2JqZWN0UHJvcGVydHlUb01hbmlmZXN0PXthZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3R9XG4gICAgICAgICAgICAgICAgYmlibGVzPXtiaWJsZXN9XG4gICAgICAgICAgICAgICAgY29tcGxleFNjcmlwdEZvbnRzPXtjb21wbGV4U2NyaXB0Rm9udHN9XG4gICAgICAgICAgICAgICAgY29udGV4dElkPXtjdXJyZW50Q29udGV4dElkfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYW5lU2V0dGluZ3M9e3BhbmVTZXR0aW5nc31cbiAgICAgICAgICAgICAgICBlZGl0VmVyc2VSZWY9e251bGx9XG4gICAgICAgICAgICAgICAgZWRpdFRhcmdldFZlcnNlPXtlZGl0VGFyZ2V0VmVyc2V9XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGU9e2V4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlfVxuICAgICAgICAgICAgICAgIGdldEF2YWlsYWJsZVNjcmlwdHVyZVBhbmVTZWxlY3Rpb25zPXtudWxsfVxuICAgICAgICAgICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YV99XG4gICAgICAgICAgICAgICAgbWFrZVN1cmVCaWJsZXNMb2FkZWRGb3JUb29sPXtudWxsfVxuICAgICAgICAgICAgICAgIHByb2plY3REZXRhaWxzUmVkdWNlcj17eyBtYW5pZmVzdCB9fVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbnM9e2N1cnJlbnRTZWxlY3Rpb25zfVxuICAgICAgICAgICAgICAgIHNldFRvb2xTZXR0aW5ncz17c2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlfVxuICAgICAgICAgICAgICAgIHNob3dQb3BvdmVyPXtzaG93UG9wb3Zlcn1cbiAgICAgICAgICAgICAgICBvbkV4cGFuZGVkU2NyaXB0dXJlUGFuZVNob3c9e251bGx9XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxDaGVja0luZm9DYXJkXG4gICAgICAgICAgICAgIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2U9e19nZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlfVxuICAgICAgICAgICAgICBvbkxpbmtDbGljaz17KCkgPT4gZmFsc2V9XG4gICAgICAgICAgICAgIG9uU2VlTW9yZUNsaWNrPXsoKSA9PiBmYWxzZX1cbiAgICAgICAgICAgICAgcGhyYXNlPXtncm91cFBocmFzZX1cbiAgICAgICAgICAgICAgc2VlTW9yZUxhYmVsPXt0cmFuc2xhdGUoJ3NlZV9tb3JlJyl9XG4gICAgICAgICAgICAgIHNob3dTZWVNb3JlQnV0dG9uPXtmYWxzZX1cbiAgICAgICAgICAgICAgdGl0bGU9e2dyb3VwVGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZlcnNlQ2hlY2tcbiAgICAgICAgICAgICAgYWxpZ25lZEdMVGV4dD17YWxpZ25lZEdMVGV4dH1cbiAgICAgICAgICAgICAgYm9va0RldGFpbHM9e2Jvb2tEZXRhaWxzfVxuICAgICAgICAgICAgICBib29rbWFya0VuYWJsZWQ9e2Jvb2ttYXJrRW5hYmxlZH1cbiAgICAgICAgICAgICAgY2FuY2VsRWRpdFZlcnNlPXtjYW5jZWxFZGl0VmVyc2V9XG4gICAgICAgICAgICAgIGNhbmNlbENvbW1lbnQ9e2NhbmNlbENvbW1lbnR9XG4gICAgICAgICAgICAgIGNhbmNlbFNlbGVjdGlvbj17Y2FuY2VsU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBjaGFuZ2VNb2RlPXtjaGFuZ2VNb2RlfVxuICAgICAgICAgICAgICBjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlPXtjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlfVxuICAgICAgICAgICAgICBjaGVja0lmQ29tbWVudENoYW5nZWQ9e2NoZWNrSWZDb21tZW50Q2hhbmdlZH1cbiAgICAgICAgICAgICAgY2hlY2tJZlZlcnNlQ2hhbmdlZD17Y2hlY2tJZlZlcnNlQ2hhbmdlZH1cbiAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb249e2NsZWFyU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBjb21tZW50VGV4dD17Y29tbWVudFRleHR9XG4gICAgICAgICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICAgICAgZGlhbG9nTW9kYWxWaXNpYmlsaXR5ID0ge2ZhbHNlfVxuICAgICAgICAgICAgICBpc0NvbW1lbnRDaGFuZ2VkPXtpc0NvbW1lbnRDaGFuZ2VkfVxuICAgICAgICAgICAgICBpc1ZlcnNlQ2hhbmdlZD17aXNWZXJzZUNoYW5nZWR9XG4gICAgICAgICAgICAgIGlzVmVyc2VFZGl0ZWQ9e2lzVmVyc2VFZGl0ZWR9XG4gICAgICAgICAgICAgIGhhbmRsZUVkaXRWZXJzZT17aGFuZGxlRWRpdFZlcnNlfVxuICAgICAgICAgICAgICBoYW5kbGVHb1RvTmV4dD17aGFuZGxlR29Ub05leHR9XG4gICAgICAgICAgICAgIGhhbmRsZUdvVG9QcmV2aW91cz17aGFuZGxlR29Ub1ByZXZpb3VzfVxuICAgICAgICAgICAgICBoYW5kbGVPcGVuRGlhbG9nPXtudWxsfVxuICAgICAgICAgICAgICBpc1ZlcnNlSW52YWxpZGF0ZWQ9e2lzVmVyc2VJbnZhbGlkYXRlZH1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2VEaWFsb2c9e251bGx9XG4gICAgICAgICAgICAgIGhhbmRsZUNvbW1lbnQ9e2hhbmRsZUNvbW1lbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNraXA9e251bGx9XG4gICAgICAgICAgICAgIGhhbmRsZVRhZ3NDaGVja2JveD17aGFuZGxlVGFnc0NoZWNrYm94fVxuICAgICAgICAgICAgICBsb2NhbE5vdGhpbmdUb1NlbGVjdD17dGVtcE5vdGhpbmdUb1NlbGVjdH1cbiAgICAgICAgICAgICAgbWFuaWZlc3Q9e21hbmlmZXN0fVxuICAgICAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9ucz17bWF4aW11bVNlbGVjdGlvbnN9XG4gICAgICAgICAgICAgIG1vZGU9e21vZGV9XG4gICAgICAgICAgICAgIG5ld1NlbGVjdGlvbnM9e3RlbXBTZWxlY3Rpb25zfVxuICAgICAgICAgICAgICBub3RoaW5nVG9TZWxlY3Q9e2N1cnJlbnROb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgICAgIG9wZW5BbGVydERpYWxvZz17b3BlbkFsZXJ0RGlhbG9nfVxuICAgICAgICAgICAgICBzYXZlQ29tbWVudD17c2F2ZUNvbW1lbnR9XG4gICAgICAgICAgICAgIHNhdmVFZGl0VmVyc2U9e3NhdmVFZGl0VmVyc2V9XG4gICAgICAgICAgICAgIHNhdmVTZWxlY3Rpb249e19zYXZlU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBzZWxlY3Rpb25zPXtjdXJyZW50U2VsZWN0aW9uc31cbiAgICAgICAgICAgICAgc2V0VG9vbFNldHRpbmdzPXtzZXRUb29sU2V0dGluZ3N9XG4gICAgICAgICAgICAgIHRhZ3M9e25ld1RhZ3MgfHwgW119XG4gICAgICAgICAgICAgIHRhcmdldEJpYmxlPXt0YXJnZXRCaWJsZX1cbiAgICAgICAgICAgICAgdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPXt0YXJnZXRMYW5ndWFnZURldGFpbHN9XG4gICAgICAgICAgICAgIHRvZ2dsZUJvb2ttYXJrPXt0b2dnbGVCb29rbWFya31cbiAgICAgICAgICAgICAgdG9nZ2xlTm90aGluZ1RvU2VsZWN0PXt0b2dnbGVOb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgICAgIHRvb2xzU2V0dGluZ3M9e3Rvb2xzU2V0dGluZ3N9XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgICAgICB1bmZpbHRlcmVkVmVyc2VUZXh0PXt1bmZpbHRlcmVkVmVyc2VUZXh0fVxuICAgICAgICAgICAgICB2YWxpZGF0ZVNlbGVjdGlvbnM9e3ZhbGlkYXRlU2VsZWN0aW9uc31cbiAgICAgICAgICAgICAgdmVyc2VUZXh0PXt2ZXJzZVRleHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dEb2N1bWVudCAmJiA8VHJhbnNsYXRpb25IZWxwc1xuICAgICAgICAgIG1vZGFsQXJ0aWNsZT17YXJ0aWNsZX1cbiAgICAgICAgICBhcnRpY2xlPXthcnRpY2xlfVxuICAgICAgICAgIGV4cGFuZGVkSGVscHNCdXR0b25Ib3ZlclRleHQ9eydDbGljayB0byBzaG93IGV4cGFuZGVkIGhlbHAgcGFuZSd9XG4gICAgICAgICAgbW9kYWxUaXRsZT17J3RyYW5zbGF0aW9uSGVscHMnfVxuICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgIGlzU2hvd0hlbHBzRXhwYW5kZWQ9e3Nob3dIZWxwc01vZGFsfVxuICAgICAgICAgIG9wZW5FeHBhbmRlZEhlbHBzTW9kYWw9e3RvZ2dsZUhlbHBzTW9kYWx9XG4gICAgICAgICAgc2lkZWJhclRvZ2dsZT17dG9nZ2xlSGVscHN9XG4gICAgICAgICAgaXNTaG93SGVscHNTaWRlYmFyPXtzaG93SGVscHN9XG4gICAgICAgIC8+fVxuICAgICAgICB7cG9wb3ZlclByb3BzPy5wb3BvdmVyVmlzaWJpbGl0eSAmJlxuICAgICAgICAgIDxQb3BvdmVyQ29udGFpbmVyIHsuLi5wb3BvdmVyUHJvcHN9IC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgOlxuICAgICAgJ1dhaXRpbmcgZm9yIERhdGEnXG4gICk7XG59O1xuXG5DaGVja2VyLnByb3BUeXBlcyA9IHtcbiAgc3R5bGVzOlByb3BUeXBlcy5vYmplY3QsXG4gIGFsaWduZWRHbEJpYmxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBiaWJsZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgY2hhbmdlVGFyZ2V0VmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICBjaGVja2luZ0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2hlY2tUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0SWQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2xXb3Jkc0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBpbml0aWFsU2V0dGluZ3M6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNhdmVDaGVja2luZ0RhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBzYXZlU2V0dGluZ3M6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93RG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXRCaWJsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcbmV4cG9ydCBkZWZhdWx0IENoZWNrZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUEwQ0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FB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
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getVerseText = getVerseText;
7
+ exports.normalizeString = void 0;
8
+ exports.validateSelectionsForAllChecks = validateSelectionsForAllChecks;
9
+ var _usfmJs = require("usfm-js");
10
+ var _bibleReferenceRange = require("bible-reference-range");
11
+ var _wordAlignerLib = require("word-aligner-lib");
12
+ /**
13
+ * verify all selections
14
+ * @param {Object} targetBible - target bible
15
+ * @param {Object} groupsData - all the checks keyed by catagory
16
+ * @param {Function} invalidateCheckCallback
17
+ * @return {Promise<boolean>}
18
+ */
19
+ function validateSelectionsForAllChecks(targetBible) {
20
+ var groupsData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
21
+ var invalidateCheckCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
22
+ var _selectionsChanged = false;
23
+ var filteredVerses = {}; // for caching verse content parsed to text
24
+
25
+ var groupIds = Object.keys(groupsData);
26
+ for (var _i = 0, _groupIds = groupIds; _i < _groupIds.length; _i++) {
27
+ var groupId = _groupIds[_i];
28
+ var checks = groupsData[groupId];
29
+ for (var j = 0, lenGI = checks.length; j < lenGI; j++) {
30
+ var _check$contextId;
31
+ var check = checks[j];
32
+ var selections = check.selections;
33
+ var reference = (_check$contextId = check.contextId) === null || _check$contextId === void 0 ? void 0 : _check$contextId.reference;
34
+ var chapter = reference.chapter;
35
+ var verse = reference.verse;
36
+ var ref = "".concat(chapter, ":").concat(verse);
37
+ var targetVerse = filteredVerses[ref];
38
+ if (!targetVerse) {
39
+ targetVerse = getVerseText(targetBible, check.contextId, false);
40
+ targetVerse = (0, _usfmJs.removeMarker)(targetVerse); // remove USFM markers
41
+ filteredVerses[ref] = targetVerse;
42
+ }
43
+ if (targetVerse) {
44
+ if (selections && selections.length) {
45
+ var _validateVerseSelecti = _validateVerseSelections(targetVerse, selections),
46
+ currentSelectionsInvalid = _validateVerseSelecti.selectionsChanged;
47
+ _selectionsChanged = checkIfInvalidationChanged(check, currentSelectionsInvalid, _selectionsChanged, invalidateCheckCallback);
48
+ } else {
49
+ // no selections, so not invalid
50
+ var _currentSelectionsInvalid = false;
51
+ _selectionsChanged = checkIfInvalidationChanged(check, _currentSelectionsInvalid, _selectionsChanged, invalidateCheckCallback);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return _selectionsChanged;
57
+ }
58
+ function checkIfInvalidationChanged(check, currentSelectionsInvalid, _selectionsChanged, invalidateCheckCallback) {
59
+ if (!!check.invalidated !== currentSelectionsInvalid) {
60
+ _selectionsChanged = true;
61
+ // callback
62
+ invalidateCheckCallback && invalidateCheckCallback(check, currentSelectionsInvalid);
63
+ }
64
+ return _selectionsChanged;
65
+ }
66
+
67
+ /**
68
+ * Normalizes a string including whitespace
69
+ * @param {String} string - the string to normalize
70
+ * @returns {String} - The returned normalized string
71
+ */
72
+ var normalizeString = exports.normalizeString = function normalizeString() {
73
+ var string = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
74
+ string = string.replace(/\s+/g, ' ');
75
+ return string;
76
+ };
77
+ function getVerseText(bookData, contextId) {
78
+ var addVerseRef = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
79
+ var unfilteredVerseText = '';
80
+ var verseText = '';
81
+ if (contextId && contextId.reference) {
82
+ var _contextId$reference = contextId.reference,
83
+ chapter = _contextId$reference.chapter,
84
+ verse = _contextId$reference.verse;
85
+ var refs = (0, _bibleReferenceRange.getVerses)(bookData, "".concat(chapter, ":").concat(verse));
86
+ var initialChapter;
87
+ if (refs && refs.length) {
88
+ initialChapter = refs[0].chapter;
89
+ }
90
+ for (var verseCnt = 0; verseCnt < refs.length; verseCnt++) {
91
+ var ref = refs[verseCnt];
92
+ var _chapter = ref.chapter;
93
+ var data = ref.verseData;
94
+ var label = ref.verse;
95
+ if (_chapter !== initialChapter) {
96
+ label = "".concat(_chapter, ":").concat(label);
97
+ }
98
+ if (verseCnt > 0) {
99
+ unfilteredVerseText += '\n';
100
+ if (addVerseRef) {
101
+ unfilteredVerseText += label + ' ';
102
+ }
103
+ }
104
+ unfilteredVerseText += data;
105
+ }
106
+ verseText = (0, _usfmJs.removeMarker)(unfilteredVerseText);
107
+ // normalize whitespace in case selection has contiguous whitespace _this isn't captured
108
+ verseText = normalizeString(verseText);
109
+ }
110
+ return {
111
+ unfilteredVerseText: unfilteredVerseText,
112
+ verseText: verseText
113
+ };
114
+ }
115
+ function _validateVerseSelections(filteredTargetVerse, selections) {
116
+ var validSelections = _wordAlignerLib.selectionsHelpers.checkSelectionOccurrences(filteredTargetVerse, selections);
117
+ var selectionsChanged = selections.length !== validSelections.length;
118
+ return {
119
+ selectionsChanged: selectionsChanged,
120
+ validSelections: validSelections
121
+ };
122
+ }
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNmbUpzIiwicmVxdWlyZSIsIl9iaWJsZVJlZmVyZW5jZVJhbmdlIiwiX3dvcmRBbGlnbmVyTGliIiwidmFsaWRhdGVTZWxlY3Rpb25zRm9yQWxsQ2hlY2tzIiwidGFyZ2V0QmlibGUiLCJncm91cHNEYXRhIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiaW52YWxpZGF0ZUNoZWNrQ2FsbGJhY2siLCJfc2VsZWN0aW9uc0NoYW5nZWQiLCJmaWx0ZXJlZFZlcnNlcyIsImdyb3VwSWRzIiwiT2JqZWN0Iiwia2V5cyIsIl9pIiwiX2dyb3VwSWRzIiwiZ3JvdXBJZCIsImNoZWNrcyIsImoiLCJsZW5HSSIsIl9jaGVjayRjb250ZXh0SWQiLCJjaGVjayIsInNlbGVjdGlvbnMiLCJyZWZlcmVuY2UiLCJjb250ZXh0SWQiLCJjaGFwdGVyIiwidmVyc2UiLCJyZWYiLCJjb25jYXQiLCJ0YXJnZXRWZXJzZSIsImdldFZlcnNlVGV4dCIsInJlbW92ZU1hcmtlciIsIl92YWxpZGF0ZVZlcnNlU2VsZWN0aSIsIl92YWxpZGF0ZVZlcnNlU2VsZWN0aW9ucyIsImN1cnJlbnRTZWxlY3Rpb25zSW52YWxpZCIsInNlbGVjdGlvbnNDaGFuZ2VkIiwiY2hlY2tJZkludmFsaWRhdGlvbkNoYW5nZWQiLCJpbnZhbGlkYXRlZCIsIm5vcm1hbGl6ZVN0cmluZyIsImV4cG9ydHMiLCJzdHJpbmciLCJyZXBsYWNlIiwiYm9va0RhdGEiLCJhZGRWZXJzZVJlZiIsInVuZmlsdGVyZWRWZXJzZVRleHQiLCJ2ZXJzZVRleHQiLCJfY29udGV4dElkJHJlZmVyZW5jZSIsInJlZnMiLCJnZXRWZXJzZXMiLCJpbml0aWFsQ2hhcHRlciIsInZlcnNlQ250IiwiZGF0YSIsInZlcnNlRGF0YSIsImxhYmVsIiwiZmlsdGVyZWRUYXJnZXRWZXJzZSIsInZhbGlkU2VsZWN0aW9ucyIsInNlbGVjdGlvbnNIZWxwZXJzIiwiY2hlY2tTZWxlY3Rpb25PY2N1cnJlbmNlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZWxlY3Rpb25IZWxwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IHJlbW92ZU1hcmtlciB9IGZyb20gXCJ1c2ZtLWpzXCI7XG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnO1xuaW1wb3J0IHsgc2VsZWN0aW9uc0hlbHBlcnMgfSBmcm9tIFwid29yZC1hbGlnbmVyLWxpYlwiO1xuLyoqXG4gKiB2ZXJpZnkgYWxsIHNlbGVjdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRCaWJsZSAtIHRhcmdldCBiaWJsZVxuICogQHBhcmFtIHtPYmplY3R9IGdyb3Vwc0RhdGEgLSBhbGwgdGhlIGNoZWNrcyBrZXllZCBieSBjYXRhZ29yeVxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW52YWxpZGF0ZUNoZWNrQ2FsbGJhY2tcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlbGVjdGlvbnNGb3JBbGxDaGVja3ModGFyZ2V0QmlibGUsIGdyb3Vwc0RhdGEgPSBudWxsLCBpbnZhbGlkYXRlQ2hlY2tDYWxsYmFjayA9IG51bGwpICB7XG4gIGxldCBfc2VsZWN0aW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3QgZmlsdGVyZWRWZXJzZXMgPSB7fSAvLyBmb3IgY2FjaGluZyB2ZXJzZSBjb250ZW50IHBhcnNlZCB0byB0ZXh0XG5cbiAgY29uc3QgZ3JvdXBJZHMgPSBPYmplY3Qua2V5cyhncm91cHNEYXRhKVxuICBmb3IgKGNvbnN0IGdyb3VwSWQgb2YgZ3JvdXBJZHMpIHtcbiAgICBjb25zdCBjaGVja3MgPSBncm91cHNEYXRhW2dyb3VwSWRdXG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuR0kgPSBjaGVja3MubGVuZ3RoOyBqIDwgbGVuR0k7IGorKykge1xuICAgICAgY29uc3QgY2hlY2sgPSBjaGVja3Nbal07XG4gICAgICBjb25zdCBzZWxlY3Rpb25zID0gY2hlY2suc2VsZWN0aW9ucztcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGNoZWNrLmNvbnRleHRJZD8ucmVmZXJlbmNlXG4gICAgICBjb25zdCBjaGFwdGVyID0gcmVmZXJlbmNlLmNoYXB0ZXJcbiAgICAgIGNvbnN0IHZlcnNlID0gcmVmZXJlbmNlLnZlcnNlXG4gICAgICBjb25zdCByZWYgPSBgJHtjaGFwdGVyfToke3ZlcnNlfWBcblxuICAgICAgbGV0IHRhcmdldFZlcnNlID0gZmlsdGVyZWRWZXJzZXNbcmVmXVxuICAgICAgaWYgKCF0YXJnZXRWZXJzZSkge1xuICAgICAgICB0YXJnZXRWZXJzZSA9IGdldFZlcnNlVGV4dCh0YXJnZXRCaWJsZSwgY2hlY2suY29udGV4dElkLCBmYWxzZSlcbiAgICAgICAgdGFyZ2V0VmVyc2UgPSByZW1vdmVNYXJrZXIodGFyZ2V0VmVyc2UpIC8vIHJlbW92ZSBVU0ZNIG1hcmtlcnNcbiAgICAgICAgZmlsdGVyZWRWZXJzZXNbcmVmXSA9IHRhcmdldFZlcnNlXG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXRWZXJzZSkge1xuICAgICAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uc0NoYW5nZWQ6IGN1cnJlbnRTZWxlY3Rpb25zSW52YWxpZCB9ID0gX3ZhbGlkYXRlVmVyc2VTZWxlY3Rpb25zKHRhcmdldFZlcnNlLCBzZWxlY3Rpb25zKVxuICAgICAgICAgIF9zZWxlY3Rpb25zQ2hhbmdlZCA9IGNoZWNrSWZJbnZhbGlkYXRpb25DaGFuZ2VkKGNoZWNrLCBjdXJyZW50U2VsZWN0aW9uc0ludmFsaWQsIF9zZWxlY3Rpb25zQ2hhbmdlZCwgaW52YWxpZGF0ZUNoZWNrQ2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7IC8vIG5vIHNlbGVjdGlvbnMsIHNvIG5vdCBpbnZhbGlkXG4gICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbnNJbnZhbGlkID0gZmFsc2VcbiAgICAgICAgICBfc2VsZWN0aW9uc0NoYW5nZWQgPSBjaGVja0lmSW52YWxpZGF0aW9uQ2hhbmdlZChjaGVjaywgY3VycmVudFNlbGVjdGlvbnNJbnZhbGlkLCBfc2VsZWN0aW9uc0NoYW5nZWQsIGludmFsaWRhdGVDaGVja0NhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9zZWxlY3Rpb25zQ2hhbmdlZFxufVxuXG5mdW5jdGlvbiBjaGVja0lmSW52YWxpZGF0aW9uQ2hhbmdlZChjaGVjaywgY3VycmVudFNlbGVjdGlvbnNJbnZhbGlkLCBfc2VsZWN0aW9uc0NoYW5nZWQsIGludmFsaWRhdGVDaGVja0NhbGxiYWNrKSB7XG4gIGlmICghIWNoZWNrLmludmFsaWRhdGVkICE9PSBjdXJyZW50U2VsZWN0aW9uc0ludmFsaWQpIHtcbiAgICBfc2VsZWN0aW9uc0NoYW5nZWQgPSB0cnVlXG4gICAgLy8gY2FsbGJhY2tcbiAgICBpbnZhbGlkYXRlQ2hlY2tDYWxsYmFjayAmJiBpbnZhbGlkYXRlQ2hlY2tDYWxsYmFjayhjaGVjaywgY3VycmVudFNlbGVjdGlvbnNJbnZhbGlkKVxuICB9XG4gIHJldHVybiBfc2VsZWN0aW9uc0NoYW5nZWRcbn1cblxuXG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN0cmluZyBpbmNsdWRpbmcgd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyAtIHRoZSBzdHJpbmcgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAtIFRoZSByZXR1cm5lZCBub3JtYWxpemVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cmluZyA9ICcnKSA9PiB7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2VUZXh0KGJvb2tEYXRhLCBjb250ZXh0SWQsIGFkZFZlcnNlUmVmPWZhbHNlKSB7XG4gIGxldCB1bmZpbHRlcmVkVmVyc2VUZXh0ID0gJyc7XG4gIGxldCB2ZXJzZVRleHQgPSAnJztcblxuICBpZiAoY29udGV4dElkICYmIGNvbnRleHRJZC5yZWZlcmVuY2UpIHtcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBjb250ZXh0SWQucmVmZXJlbmNlO1xuICAgIGNvbnN0IHJlZnMgPSBnZXRWZXJzZXMoYm9va0RhdGEsIGAke2NoYXB0ZXJ9OiR7dmVyc2V9YCk7XG4gICAgbGV0IGluaXRpYWxDaGFwdGVyO1xuICAgIGlmIChyZWZzICYmIHJlZnMubGVuZ3RoKSB7XG4gICAgICBpbml0aWFsQ2hhcHRlciA9IHJlZnNbMF0uY2hhcHRlcjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB2ZXJzZUNudCA9IDA7IHZlcnNlQ250IDwgcmVmcy5sZW5ndGg7IHZlcnNlQ250KyspIHtcblxuICAgICAgY29uc3QgcmVmID0gcmVmc1t2ZXJzZUNudF07XG4gICAgICBjb25zdCBjaGFwdGVyID0gcmVmLmNoYXB0ZXI7XG4gICAgICBjb25zdCBkYXRhID0gcmVmLnZlcnNlRGF0YTtcbiAgICAgIGxldCBsYWJlbCA9IHJlZi52ZXJzZTtcblxuICAgICAgaWYgKGNoYXB0ZXIgIT09IGluaXRpYWxDaGFwdGVyKSB7XG4gICAgICAgIGxhYmVsID0gYCR7Y2hhcHRlcn06JHtsYWJlbH1gO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyc2VDbnQgPiAwKSB7XG4gICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHQgKz0gJ1xcbic7XG5cbiAgICAgICAgaWYgKGFkZFZlcnNlUmVmKSB7XG4gICAgICAgICAgdW5maWx0ZXJlZFZlcnNlVGV4dCArPSBsYWJlbCArICcgJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1bmZpbHRlcmVkVmVyc2VUZXh0ICs9IGRhdGE7XG4gICAgfVxuICAgIHZlcnNlVGV4dCA9IHJlbW92ZU1hcmtlcih1bmZpbHRlcmVkVmVyc2VUZXh0KTtcbiAgICAvLyBub3JtYWxpemUgd2hpdGVzcGFjZSBpbiBjYXNlIHNlbGVjdGlvbiBoYXMgY29udGlndW91cyB3aGl0ZXNwYWNlIF90aGlzIGlzbid0IGNhcHR1cmVkXG4gICAgdmVyc2VUZXh0ID0gbm9ybWFsaXplU3RyaW5nKHZlcnNlVGV4dCk7XG4gIH1cblxuICByZXR1cm4geyB1bmZpbHRlcmVkVmVyc2VUZXh0LCB2ZXJzZVRleHQgfTtcbn1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlVmVyc2VTZWxlY3Rpb25zKGZpbHRlcmVkVGFyZ2V0VmVyc2UsIHNlbGVjdGlvbnMpIHtcbiAgY29uc3QgdmFsaWRTZWxlY3Rpb25zID0gc2VsZWN0aW9uc0hlbHBlcnMuY2hlY2tTZWxlY3Rpb25PY2N1cnJlbmNlcyhmaWx0ZXJlZFRhcmdldFZlcnNlLCBzZWxlY3Rpb25zKTtcbiAgY29uc3Qgc2VsZWN0aW9uc0NoYW5nZWQgPSAoc2VsZWN0aW9ucy5sZW5ndGggIT09IHZhbGlkU2VsZWN0aW9ucy5sZW5ndGgpO1xuICByZXR1cm4geyBzZWxlY3Rpb25zQ2hhbmdlZCwgdmFsaWRTZWxlY3Rpb25zIH1cbn0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0csOEJBQThCQSxDQUFDQyxXQUFXLEVBQXNEO0VBQUEsSUFBcERDLFVBQVUsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsSUFBSTtFQUFBLElBQUVHLHVCQUF1QixHQUFBSCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxJQUFJO0VBQzNHLElBQUlJLGtCQUFrQixHQUFHLEtBQUs7RUFDOUIsSUFBTUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFDOztF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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tc-checking-tool-rcl",
3
- "version": "0.9.98",
3
+ "version": "0.9.100",
4
4
  "main": "dist",
5
5
  "source": "dist/index.js",
6
6
  "repository": "https://github.com/unfoldingWord-box/checking-tool-rcl.git",