@rentman/rm-core 1.0.28 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rm-core.js CHANGED
@@ -4681,7 +4681,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
4681
4681
  if (idArray.length === 0)
4682
4682
  return [];
4683
4683
  return this.handleRemovedItems(function (itemEntry) {
4684
- return inArray(itemEntry.itemId, idArray);
4684
+ return !inArray(itemEntry.itemId, idArray);
4685
4685
  }, resultResource, updateInitial, enableCallback);
4686
4686
  };
4687
4687
  CollectionEntry.prototype.clear = function (resultResource, updateInitial, enableCallback) {
@@ -6660,7 +6660,7 @@ var LocalCacheFactory_LocalCacheFactory = /** @class */ (function () {
6660
6660
  var src_RmCore = /** @class */ (function () {
6661
6661
  /* tslint:disable:max-line-length*/
6662
6662
  function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
6663
- this.version = '1.0.28';
6663
+ this.version = '1.0.29';
6664
6664
  this.apiFormatter = new classes_ApiFormatter();
6665
6665
  this.keyService = new classes_KeyService();
6666
6666
  this.queryService = new classes_QueryService();
@@ -6710,4 +6710,4 @@ function identity(value) {
6710
6710
  /***/ })
6711
6711
  /******/ ]);
6712
6712
  });
6713
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvblJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUFkbWluaXN0cmF0b3IudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9CYXRjaFN0YXR1cy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzQ29tcGlsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5FeHBhbnNpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblNldC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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SztJQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2QsQ0FBQyIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBkZWZhdWx0cztcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlOnRyaXBsZS1lcXVhbHNcblx0XHRpZiAobmVlZGxlID09IGhheSlcblx0XHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXkgKHNvdXJjZSwgY2FsbGJhY2spIHtcblx0Y29uc3QgZmlsdGVyZWQgPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlNcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xuXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XG5cblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcblxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcblx0cmV0dXJuICEhKG5vZGUgJiZcblx0XHQoXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcblx0XHQpXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XG5cdGlmIChvMSA9PT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcblxuXHRsZXQgbGVuZ3RoO1xuXHRsZXQga2V5O1xuXHRsZXQga2V5U2V0O1xuXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcblxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcblxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcblxuXHRpZiAoZGVzdGluYXRpb24pIHtcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcblx0XHR9XG5cblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XG5cdFx0fVxuXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xuXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG5cdFx0fVxuXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcblxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpRm9ybWF0dGVyIHtcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcblx0U0VSVkVSX1RJTUVfRk9STUFUID0gJ0hIOm1tOnNzJztcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xuXG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkcywgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGZpZWxkc1tjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uLnBhdGhdKTtcblx0XHR9XG5cdH1cblxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudCwgZXhwYW5kZWQsIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aGFzQ2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldENoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IGluaXRpYWxbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weUZpZWxkcyAoc291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzaGFsbG93Q29weUZpZWxkcyAoc2hhbGxvd1NvdXJjZSwgZGVlcFNvdXJjZSwgZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbiwgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGUsIGZpcnN0LCBzZWNvbmQpIHtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVGbG9hdHMgKGEsIGIpIHtcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XG5cdFx0Y29uc3QgYWJzQiA9IE1hdGguYWJzKGIpO1xuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XG5cblx0XHRjb25zdCBFUFNJTE9OID0gMS4xOWUtMDc7XG5cblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXG5cdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XG5cdFx0XHQvLyBhIG9yIGIgaXMgemVybyBvciBib3RoIGFyZSBleHRyZW1lbHkgY2xvc2UgdG8gaXRcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XG5cdFx0fVxuXHR9XG5cblx0Y29tcGFyZU1vbWVudE9iamVjdHMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcblxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcblxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcblx0fVxuXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VEYXRlICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZSA6ICcjJyArIHZhbHVlO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGVUaW1lICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmFzU2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdENvbG9yICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRcdHJldHVybiAnMCc7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuICcjMDAwMDAwJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdC8vIFx0XHRcdFx0XHRlbWFpbFxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcblx0XHRcdC8vIFx0XHRcdFx0XHRqc29uXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxuXHRcdH1cblx0fVxuXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpKTtcblx0fVxuXG5cdGNsb25lIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xuXHRcdH1cblx0fVxuXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XG5cdH1cblxuXHRjbG9uZURhdGUgKGRhdGUpIHtcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xuXHR9XG5cblx0aWRlbnRpdHkgKGlucHV0KSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG4iLCJpbXBvcnQgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEFwaVJlc3BvbnNlUHJvY2Vzc29yIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCBwYXJhbXMpKTtcblx0fVxuXG5cdGNyZWF0ZSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogc3RyaW5nLCBwYXJlbnRJZD86IG51bWJlcik6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XG5cdH1cblxuXHRkZWxldGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpdGVtSWRzKSk7XG5cdH1cblxuXHR1cGRhdGVJdGVtcyAoaXRlbVR5cGU6IHN0cmluZywgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBpdGVtczogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xuXHR9XG5cblx0Y29sdW1ucyAoaXRlbVR5cGU6IHN0cmluZywgY29sdW1uczogb2JqZWN0LCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMpKTtcblx0fVxuXG5cdHF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGFsbExpbmtzPzogYm9vbGVhbiwgbGltaXQ/OiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGFsbExpbmtzLCBsaW1pdCkpO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXF1ZXN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XG5cdH1cbn1cbiIsImltcG9ydCBRdWVyeVBhcnNlckZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnlcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogW10sXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcblx0XHRcdFx0bGltaXQ6IG51bGwsXG5cdFx0XHRcdGVudHJ5S2V5OiAnJyxcblx0XHRcdFx0YWRkTG9jYWxJdGVtczogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlUXVlcnkgKG9wdGlvbnMpIHtcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGxldCBxdWVyeTtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBsaW5rZWRUb1F1ZXJ5ID0geyBsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogeyBpZDogJyZwYXJlbnRJZCcgfSB9O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4geyBvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdIH07XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yKTogbnVtYmVyW10ge1xuXHRcdGlmIChhY2N1bXVsYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0YWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0YWNjdW11bGF0b3IucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0l0ZW1FbnRyeVtdfSBpdGVtRW50cmllc1xuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxuXHQgKlxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cblx0ICogUmVwbGFjZSB0aGUgZ2l2ZW4gYXJyYXkgd2l0aCB0aGUgZW50cmllcyB0aGF0IGRpZG4ndCBmYWlsIHRoZSBjb25kaXRpb24uXG5cdCAqL1xuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllcyA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZWRFbnRyaWVzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdGZpbHRlcmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJlbW92ZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcblxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblx0fVxufVxuIiwiZXhwb3J0IGVudW0gRU5UUllfU1RBVFVTIHtcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcblx0RVhQQU5EID0gJ2V4cGFuZCcsXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxuXHRMT0NBTCA9ICdsb2NhbCdcbn1cblxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XG5leHBvcnQgY29uc3QgUkVOREVSX0FTX1NFUEVSQVRPUiA9ICc6JzsiLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5XCI7XG5pbXBvcnQgUXVlcnlQYXJzZXJGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5XCI7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gXCIuLi9pbmRleFwiO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1SZXNvdXJjZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVcIjtcbmltcG9ydCBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5VdGlsIGZyb20gXCIuL0NvbHVtblV0aWxcIjtcbmltcG9ydCBJdGVtQ2FjaGUgZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSBcIi4vSXRlbUhhbmRsZXJcIjtcbmltcG9ydCBJdGVtUmVxdWVzdFNlcnZpY2UgZnJvbSBcIi4vSXRlbVJlcXVlc3RTZXJ2aWNlXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgUXVlcnlTZXJ2aWNlIGZyb20gXCIuL1F1ZXJ5U2VydmljZVwiO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gXCIuL1V0aWxcIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwLFxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgRW50cnlTdGF0dXMsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZFtwYXJlbnRJZF0pO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkRXhwYW5kW3BhcmVudElkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlJFU09MVkVdKVxuXHRcdFx0cmVzdWx0LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXSlcblx0XHRcdHJlc3VsdC5wdXNoKHBhcmVudElkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGFkZEl0ZW1zVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkVG9Db2xsZWN0aW9ucyh0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLCBmYWxzZSk7XG5cdH1cblxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2Vcblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXMgPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChwYXJlbnRJZCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS5pdGVtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG5ld0NvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cmllc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcblx0XHRcdFx0XHRjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnkudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hFeHRlbmQgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXkgPSBbXTtcblx0XHRsZXQgaXRlbUlkQXJyYXkgPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxuXHRcdHBhcmVudElkQXJyYXk6IG51bWJlcltdLFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IHRoaXMuZ2V0UmVxdWVzdElkcyhyZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xuXHRcdFx0XHRcdFx0XHRudWxsIDpcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKClbMF0sXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKHJlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2VbRU5UUllfU1RBVFVTLkNBQ0hFRF07XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBjb252ZXJzaW9uTWFwID0ge30pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1zID0gW107XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcblxuXHRcdC8vIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3QgKGRlcGVuZGVuY2llcylcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpXG5cdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbS5pdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuY2xvbmVJdGVtKFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwRW50cnlbaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG9wdGlvbnMucGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRjbG9uZWRFbnRyeS5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdFx0Y2xvbmVkSXRlbXMucHVzaChjbG9uZWRFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlKGl0ZW1UeXBlLCBvcHRpb25zLCBjb2xsZWN0aW9uRW50cnkuY29sdW1ucywgY2xvbmVkSXRlbXMpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBjb2x1bW5zLCBpdGVtczogSXRlbUVudHJ5W10pOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMuYWRkKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnNcblx0XHRcdClcblx0XHQpLnJlc29sdmUoXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0XHRcdGl0ZW1zOiBpdGVtc1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPIGFkZCB0eXBlXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cGFyZW50SWRBcnJheTogbnVtYmVyW10sXG5cdFx0aXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qgc3RhdHVzSWQgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0cmVzdWx0W0VOVFJZX1NUQVRVU1tzdGF0dXNJZF1dID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gdXNlIHByb2Nlc3NFbnRyeU9wdGlvbnMgdG8gY2xvbmVcblxuXHRcdFx0bGV0IHN0YXR1c1Jlc291cmNlO1xuXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcblxuXHRcdFx0c3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZENvbGxlY3Rpb25NYXAgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGFjY3VtdWxhdG9yLFxuXHRcdGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlID0gdGhpcy5lbnRyaWVzXG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvZG86IHBhcmVudCB0eXBlXG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlGaXR0aW5nSXRlbShcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudC5pdGVtSWQsXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RmllbGRzKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcblxuXHRcdFx0XHRhY2N1bXVsYXRvcltjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChzdGF0dXMgPT09ICdmaXR0aW5nJyA/IGl0ZW1FbnRyeSA6IGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcblxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdC8vIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gZW50cnkgaXMgbm90IGZ1bGx5IGxvYWRlZCB5ZXQsIHdlJ2xsIGhhdmUgdG8gcmVseSBvbiB0aGUgb3B0aW9uc1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdGNvbnN0IGVudHJ5Q29sdW1ucyA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0bGV0IGlzQ29sdW1uU3Vic2V0ID0gZmFsc2U7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0ZW50cnlPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoZW50cnlDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NvbHVtbnM6IHRydWUgZm9yIGNvbGxlY3Rpb25zIGlzIGRlcHJlY2F0ZWQhJyk7XG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRydWU7XG5cdFx0fSBlbHNlXG5cdFx0XHRpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGVudHJ5Q29sdW1ucywgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRzdGF0dXM6IGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucywgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRjb25zdCBjYWNoZWRFbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXROZXdFbnRyeVN0YXR1cyhpdGVtVHlwZSwgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllcyk7XG5cblx0XHRpZiAoY2FjaGVkRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhjYWNoZWRFbnRyeSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGNhY2hlZEVudHJ5LFxuXHRcdFx0c3RhdHVzOiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjYWNoZWRFbnRyeS5jb2x1bW5zLnJlcXVlc3QsIGNhY2hlZEVudHJ5LmNvbHVtbnMudHJ1ZSkgP1xuXHRcdFx0XHRFTlRSWV9TVEFUVVMuQ0FDSEVEIDogRU5UUllfU1RBVFVTLkVYUEFORFxuXHRcdH07XG5cdH1cblxuXHRnZXROZXdFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnksIG9wdGlvbnMsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblx0XHRsZXQgZGVmZXJyZWRPcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQodGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucykpLFxuXHRcdFx0XHRcdHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkT3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXHRcdFx0ZGVmZXJyZWRPcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhkZWZlcnJlZE9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5tZXJnZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTsgLy8gd2lsbCBhbHNvIGFkZCB0aGUgZGVmZXJyZWQgZW50cnlcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0c3RhdHVzOiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoc3RhdHVzUmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlKTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5jYWNoZWQpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuY2FjaGVkW3BhcmVudElkXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZSkge1xuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdLnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmV4cGFuZCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5leHBhbmRbcGFyZW50SWRdO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkudXBkYXRlQ29sdW1ucyhpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UubG9jYWxbcGFyZW50SWRdO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KCAvLyBUT0RPOiB1c2UgdGFiIGNhY2hlP1xuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudC5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdHBhcmVudElkLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlSZXNvdXJjZS5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0cmVtb3ZlSXRlbXNGcm9tQW5kQWRkSXRlbXNUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcyksXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdC8vIFRPRE86IG1heWJlXG5cdHJlbW92ZUl0ZW1zRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMpLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cblx0XHRsZXQgY29sdW1uSW5mbztcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cmllcy5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMuYWRkTG9jYWxJdGVtcyA/XG5cdFx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSA6XG5cdFx0XHRcdFx0XHRcdFx0W11cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5JbmZvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9JdGVtUmVzb3VyY2VcIjtcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSB7XG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXRJdGVtczogZmFsc2UsXG5cdFx0XHRcdGVkaXRDb2xsZWN0aW9uOiBmYWxzZSxcblx0XHRcdFx0bW9kSW5zdGFudDogZmFsc2UsXG5cdFx0XHRcdGVuYWJsZVNhdmU6IHRydWUsXG5cdFx0XHRcdG9uSXRlbXNDcmVhdGVkOiBub29wLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCwgLy8gbmVlZGVkIGZvciBjb21wYXJpc29uXG5cdFx0XHRcdG9uQWRkOiBub29wLFxuXHRcdFx0XHRvblJlbW92ZTogbm9vcCxcblx0XHRcdFx0b25BZGRJbml0aWFsOiBub29wLFxuXHRcdFx0XHRvblJlbW92ZUluaXRpYWw6IG5vb3AsXG5cdFx0XHRcdG9uRGVhY3RpdmVhdGVJdGVtOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcblx0XHRcdFx0b25EZWFjdGl2YXRlQ29sbGVjdGlvbjogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXG5cdFx0XHRcdHJlc291cmNlS2V5OiBudWxsLCAvLyBUT0RPOiByZW1vdmVcblx0XHRcdFx0Y2xlYXJPblRhYkNoYW5nZTogdHJ1ZSxcblx0XHRcdFx0Y2xlYXJPblN1YlRhYkNoYW5nZTogdHJ1ZSxcblx0XHRcdFx0Y3VzdG9tOiBudWxsXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2x1bW5DYWNoZSB7XG5cdGNhY2hlID0ge307XG5cdGFsbENvbHVtbnMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk6IHsgbWlzc2luZzogYW55W10gfCB0cnVlLCBjYWNoZWQ6IG9iamVjdCB9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXBvbnNlQWNjdW11bGF0b3IgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXBvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xuXHR9XG5cblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0gY29sdW1ucztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdSZXF1ZXN0ID0ge307XG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKG1pc3NpbmdSZXF1ZXN0KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2x1bW5DYWNoZSBmcm9tICcuL0NvbHVtbkNhY2hlJztcbmltcG9ydCBDb2x1bW5VdGlsIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IGl0ZW1UeXBlTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcykge1xuXHRcdFx0Y29uc3QgbGVuZ3RoID0gcHJvbWlzZXMucHVzaCh0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pKTtcblxuXHRcdFx0aXRlbVR5cGVNYXBbaXRlbVR5cGVdID0gbGVuZ3RoIC0gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtVHlwZU1hcFtpXTtcblxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0IChpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcGFyYW1zKS50aGVuKFxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0aWYgKGNvbHVtblJlc291cmNlLm1pc3NpbmcgIT09IHRydWUgJiYgY29sdW1uUmVzb3VyY2UubWlzc2luZy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLCBwYXJhbXMpLnRoZW4ocmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgY29weSwgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2x1bW5VdGlsIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1ucywgcmVuZGVyQXMpIHtcblx0XHRsZXQgc2VwZXJhdG9yID0gJyc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0cmVzdWx0ICs9IHNlcGVyYXRvciArIGNvbHVtbi5pZDtcblx0XHRcdHNlcGVyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZSkge1xuXHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuXG5cdFx0Y29uc3QgZm9ybWF0cyA9IHtcblx0XHRcdCdKLU0tWSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVknKSxcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxuXHRcdFx0J2orRitZJzogbm93LmZvcm1hdCgnRCBNTU0gWVlZWScpLFxuXHRcdFx0J0QraitGK1knOiBub3cuZm9ybWF0KCdkZGRkIEQgTU1NIFlZWVknKSxcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXG5cdFx0XHQnZic6IG5vdy5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdCdEJzogbm93LmZvcm1hdCgnZGRkZCcpLFxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxuXHRcdH07XG5cblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcblx0XHRcdGV4dGVuZChmb3JtYXRzLCB7XG5cdFx0XHRcdCdKLU0tWStIOmknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZIEhIOm1tJyksXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcblx0XHRcdFx0J2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ0REIE1NTU0gWSBISDptbScpLFxuXHRcdFx0XHQnRCtqK0YrWStIOmknOiBub3cuZm9ybWF0KCdkZGRkIEREIE1NTSBZIEhIOm1tJyksXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpLFxuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gZm9ybWF0cztcblx0fVxuXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRcdC8vIGNhc2UgJ2h0bWwnOiAvLyBUT0RPOiBzb3J0IG9uIGZpbHRlcmVkIHZhbHVlXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0Zsb2F0Q29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNJbnRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xuXHR9XG5cblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbikge1xuXHRcdHJldHVybiBjb2x1bW4uZmllbGR0eXBlID09PSAnY3VzdG9tZmllbGQnO1xuXHR9XG5cblx0aXNJdGVtQ29sdW1uIChjb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzUmVuZGVyZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdibG9iJzpcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxuXHRcdFx0Y2FzZSAnZm9yY2V1cGRhdGUnOlxuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRjYXNlICdvcmRlcic6XG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XG5cdFx0XHRjYXNlICdwYXJlbnR0eXBlJzpcblx0XHRcdGNhc2UgJ3Bhc3N3b3JkJzpcblx0XHRcdGNhc2UgJ3Rva2VuJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aGFzTG9jYXRpb25Qcm9wZXJ0eSAoY29sdW1uLCBsb2NhdGlvbikge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2Vcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcblx0fVxuXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZhdWx0V2VpZ2h0IChjb2x1bW4pIHtcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkb3VibGUnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRcdHJldHVybiAwLjU7XG5cblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdFx0cmV0dXJuIDEuNTtcblxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRcdHJldHVybiAyO1xuXG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBbJz4nLCAnPCddO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFsnPScsICchPSddO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJldHVybnMgd2hldGhlciB0aGUgZmlyc3QgY29sdW1uIHNldCBpcyBhIHN1YnNldCBvZiB0aGUgc2Vjb25kXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcblx0XHRcdHJldHVybiBzZWNvbmRUcnVlO1xuXG5cdFx0Ly8gd2hlbiBzZWNvbmRUcnVlIGlzIHRoZSBjYXNlIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGRlcml2ZWQgY29sdW1uc1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGZpcnN0KSB7XG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGlmIChcblx0XHRcdFx0IXRoaXMuY29udGFpbnNDb2x1bW4oXG5cdFx0XHRcdFx0Y2hpbGRDb2x1bW4sXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XG5cdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZUNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1twYXJzZWRDb2x1bW4uaWRdO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaWZmZXJlbmNlOiBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgJ21lcmdlZCcgYW5kICdkaWZmZXJlbmNlJyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XG5cblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xuXG5cdFx0Y29uc3QgbWVyZ2VkID0gY29weShmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9IHtcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGFkZGVkQ29sdW1ucyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXG5cdFx0fTtcblx0fVxuXG5cdHBhcnNlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbikge1xuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcblx0XHRjb25zdCBjb2x1bW5JZCA9IGlzTGVhZiA/IHJlcXVlc3RDb2x1bW4gOiBnZXRGaXJzdFByb3BlcnR5KHJlcXVlc3RDb2x1bW4pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBjb2x1bW5JZCxcblx0XHRcdGNoaWxkcmVuOiBpc0xlYWYgPyBbXSA6IHJlcXVlc3RDb2x1bW5bY29sdW1uSWRdXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXJnZXMgdHdvIHNldHMgb2YgcmVzcG9uc2UgY29sdW1ucy5cblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcblx0ICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSAnbWVyZ2VkJyBhbmQgYSAnZGlmZmVyZW5jZScgcHJvcGVydHkuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxuXHRcdFx0KTtcblxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IGZpcnN0W2NvbHVtbklkXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XG5cdFx0XHRpZiAoaXNEZWZpbmVkKGZpcnN0W2NvbHVtbklkXSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcblx0XHRcdGRpZmZlcmVuY2VbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdGlzTG9jYWxDb2x1bW5JZCAoY29sdW1uSWQpIHtcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRpZiAodGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbih0aGlzLnBhcnNlQ29uZmlnQ29sdW1uKGNvbHVtbiksIHJlcXVlc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXF1ZXN0O1xuXHR9XG5cblx0cHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyAoY29uZmlnQ29sdW1ucywgbG9jYWxDb2x1bW5zLCByZW1vdGVDb2x1bW5DYWxsYmFjaywgbG9jYWxDb2x1bW5DYWxsYmFjaykge1xuXHRcdGNvbnN0IGxvY2FsQ29sdW1uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGxvY2FsQ29sdW1uIG9mIGxvY2FsQ29sdW1ucylcblx0XHRcdGxvY2FsQ29sdW1uTWFwW2xvY2FsQ29sdW1uLmlkXSA9IGxvY2FsQ29sdW1uO1xuXG5cdFx0Zm9yIChjb25zdCBjb25maWdJZCBvZiBjb25maWdDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRDb25maWdJZCA9IGNvbmZpZ0lkLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpO1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdJZFswXTtcblxuXHRcdFx0aWYgKCF0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW5JZCkpIHtcblx0XHRcdFx0cmVtb3RlQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGNvbHVtbklkLCBwYXJzZWRDb25maWdJZFsxXSk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbHVtbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGluIGxvY2FsQ29sdW1uc1xuXHRcdFx0aWYgKGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bG9jYWxDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdKTtcblx0XHRcdGRlbGV0ZSBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF07XG5cdFx0fVxuXHR9XG5cblx0Y29uc29saWRhdGVDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIGFkZFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0Y29uc3QgZmlsdGVyZWRMb2NhbENvbHVtbnMgPSBbXTtcblx0XHRsZXQgcmVxdWVzdENvbHVtbnMgPSBjb3B5KGFkZFJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcblx0XHRcdGNvbmZpZ0NvbHVtbnMsXG5cdFx0XHRsb2NhbENvbHVtbnMsXG5cdFx0XHQoY29uZmlnSWQsIGNvbHVtbklkKSA9PiB7XG5cdFx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihjb2x1bW5JZC5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdChjb25maWdJZCwgbG9jYWxDb2x1bW4pID0+IHtcblx0XHRcdFx0ZmlsdGVyZWRMb2NhbENvbHVtbnMucHVzaChsb2NhbENvbHVtbik7XG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW5zKFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdGxvY2FsQ29sdW1uLnZhbHVlT3B0aW9ucy5yZXF1ZXN0Q29sdW1uc1xuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHtyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucywgbG9jYWw6IGZpbHRlcmVkTG9jYWxDb2x1bW5zfTtcblx0fVxuXG5cdHBhcnNlQ29uZmlnQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW5BcnJheVswXTtcblx0XHRjb25zdCBpc0xlYWYgPSBjb2x1bW5BcnJheS5sZW5ndGggPT09IDE7XG5cblx0XHRpZiAoaXNMZWFmKSB7XG5cdFx0XHRpZiAoZGVzdGluYXRpb24uaW5kZXhPZihjb2x1bW5JZCkgPT09IC0xKVxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbk9iamVjdChjb2x1bW5JZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Y29sdW1uSW5kZXggPSBkZXN0aW5hdGlvbi5wdXNoKHtcblx0XHRcdFx0W2NvbHVtbklkXTogW11cblx0XHRcdH0pIC0gMTtcblx0XHR9XG5cblx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oXG5cdFx0XHRjb2x1bW5BcnJheS5zbGljZSgxKSxcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cblx0XHQpO1xuXHR9XG5cblx0ZmluZENvbHVtbk9iamVjdCAoY29sdW1uSWQsIGFycmF5KSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cblx0ZmluZENvbHVtbiAoY29sdW1uSWQsIGFycmF5KSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XG5cblx0XHRcdGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcblx0XHRcdFx0XHRyZXR1cm4gaTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5XCI7XG5pbXBvcnQgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnlcIjtcbmltcG9ydCBMb2NhbENhY2hlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgQXV0aEludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0F1dGhJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Mb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gJy4uL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tICcuLi9tb2RlbHMvSXRlbVJlc291cmNlJztcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGUgZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgZnJvbSBcIi4vQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1DYWNoZSBmcm9tICcuL0l0ZW1DYWNoZSc7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gJy4vSXRlbUhhbmRsZXInO1xuaW1wb3J0IEl0ZW1SZXF1ZXN0U2VydmljZSBmcm9tIFwiLi9JdGVtUmVxdWVzdFNlcnZpY2VcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5pbXBvcnQgTG9jYWxDYWNoZSBmcm9tIFwiLi9Mb2NhbENhY2hlXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tICcuLi9tb2RlbHMvSXRlbUVudHJ5JztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1BZG1pbmlzdHJhdG9yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gaWQgY2FuIGJlIGEga2V5d29yZCBvciBhIGxvY2FsIGlkIChpbiBjYXNlIG9mIGEgcmVmcmVzaClcblx0Z2V0SXRlbURlZmluaXRpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogYW55LCBvcHRpb25zOiBhbnkpIHtcblx0XHRjb25zdCBzdGF0ZUtleTogYW55ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoaXRlbUlkKTtcblx0XHRjb25zdCByZXN1bHQgPSB7aXRlbVR5cGU6IGl0ZW1UeXBlLCBvcHRpb25zOiBvcHRpb25zLCBpdGVtSWQ6IGl0ZW1JZH07XG5cblx0XHRpZiAoc3RhdGVLZXkgIT09IG51bGwpIHtcblx0XHRcdHN3aXRjaCAoc3RhdGVLZXkudHlwZSkge1xuXHRcdFx0XHRjYXNlICduZXcnOlxuXHRcdFx0XHRcdC8vIGlmIChzdGF0ZUtleS50ZW1wbGF0ZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdC8vIFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7dHlwZTogc3RhdGVLZXkudGVtcGxhdGV9O1xuXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2R1cGxpY2F0ZSc6XG5cdFx0XHRcdFx0b3B0aW9ucy5kdXBsaWNhdGUgPSBzdGF0ZUtleS5pdGVtSWQ7XG5cblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkgLy8gdG9kbzogcmVmYWN0b3IgdGhpc1xuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gc3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0cmVzdWx0Lml0ZW1JZCA9IGl0ZW1JZDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbUVudHJpZXM6IGFueVtdLCBhZGRUb1RhYjogYm9vbGVhbikge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwge30sIGZhbHNlKTtcblxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5leHBhbmRDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyeSwgcmVzdWx0LCBjb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBpdGVtSWRcblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlPn1cblx0ICpcblx0ICogSSBleHBlY3Qgbm90IGEgdGVtcGxhdGUgcmVxdWVzdCBmcm9tIGl0ZW1oYW5kbGVyLmZldGNoSXRlbSBiZWNhdXNlIGFkZFNpbmdsZUl0ZW0gZG9lcyBub3QgaGFuZGxlIHRoZVxuXHQgKiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwXG5cdCAqL1xuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRpZiAoKDxJdGVtRW50cnk+IGl0ZW1FbnRyeSkuaXRlbVR5cGUgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKCg8SXRlbUVudHJ5PiBpdGVtRW50cnkpLCBvcHRpb25zLCBmYWxzZSk7XG5cblx0XHRcdFx0Ly8gdG9kbzogbWFrZSBzYXZlIHdoZW4gaXRlbSBpcyBub3QgSXRlbUVudHJ5XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogbnVtYmVyW10sIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW1zKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1zQnlRdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHt9O1xuXG5cdFx0cmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdID0gZW50cnlPcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW1zKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgZHVwbGljYXRlSWQ6IG51bWJlciwgb3B0aW9uczogYW55KSB7XG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMgPSB7fTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRjb25zdCBkZWZpbml0aW9uID0gdGhpcy5nZXRJdGVtRGVmaW5pdGlvbihcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldER1cGxpY2F0ZVN0YXRlS2V5KGR1cGxpY2F0ZUlkKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5RGVmKGRlZmluaXRpb24sIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxuXHQgKiBUaGUgdHlwZSBoYXMgdG8gYmUgYXNzZXJ0ZWQgYXQgdXNlIHNpbmNlIHlvdSBvbmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3Ncblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3Rcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD59XG5cdCAqL1xuXHRnZXROZXdSZXNvdXJjZSAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55LCByZXR1cm5MaW5rczogYm9vbGVhbiwgaXNSb290OiBib29sZWFuKTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMgPSB7fTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRpZiAoaXNSb290ID09PSB1bmRlZmluZWQpXG5cdFx0XHRpc1Jvb3QgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWluID0gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdHJldHVybiByZXR1cm5MaW5rcyA/IHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gOiBtYWluO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBsaW5rRmllbGQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtUeXBlOiBsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oZW50cnksIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkOiBudW1iZXIsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZW50cnlPcHRpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihlbnRyeSwgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uRW50cmllcyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNGcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGRlZmluaXRpb24ubGlua1R5cGUsXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtJZEFycmF5LFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uRW50cmllcyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHQvLyBcdFx0XHR2YXIgcmVxdWVzdENvbHVtbnMgPSB7fTtcblx0XHQvLyBcdFx0XHRyZXF1ZXN0Q29sdW1uc1tsaW5rVHlwZV0gPSBbJ2lkJ107XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1CeURlZiAoZGVmaW5pdGlvbjogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoZGVmaW5pdGlvbi5vcHRpb25zKVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0bGV0IG1haW5FbnRyeTogSXRlbUVudHJ5O1xuXG5cdFx0XHRcdGlmICgoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5saW5rZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKCg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLmxpbmtlZCwgZGVmaW5pdGlvbi5vcHRpb25zLCBmYWxzZSk7XG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubWFpbjtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gPEl0ZW1FbnRyeT4gaXRlbUVudHJ5UmVzb3VyY2U7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShtYWluRW50cnksIGRlZmluaXRpb24ub3B0aW9ucywgaXNSb290KTsgLy8gaXNSb290XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAobmV3SXRlbUlkOiBudW1iZXIsIGl0ZW1SZXNvdXJjZTogYW55LCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmNsb25lSXRlbShuZXdJdGVtSWQsIGl0ZW1SZXNvdXJjZS5lbnRyeSksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGNsb25lQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBhbnksIG9wdGlvbnM6IGFueSwgY29udmVyc2lvbk1hcDogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5jbG9uZShcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHRcdCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoY2xvc2VUYWI6IGJvb2xlYW4sIHBhcmFtZXRlcnM6IGFueSwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjazogYW55LCBrZWVwVGFiSGVhZGluZyA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcblx0fVxuXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XG5cdH1cblxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xuXHR9XG5cblx0Z2V0Q3VycmVudENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdGlmIChsb2NhbENhY2hlLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0hJyk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LmNvbnN0cnVjdChsb2NhbENhY2hlLnJvb3RJdGVtLCBsb2NhbENhY2hlLml0ZW1zLCBsb2NhbENhY2hlLmNvbGxlY3Rpb25zKS5wcm9jZXNzKCk7XG5cdH1cblxuXHQvLyB1c2VkIGluIHRpbWVSZWdpc3RyYXRpb25Db250cm9sbGVyXG5cdGFkZFNpbmdsZUl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBhbnksIGlzUm9vdD86IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZVtdIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGxvY2FsQ2FjaGUuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gdXNlZCBpbiB3YXJlaG91c2VJdGVtQ2FjaGVGYWN0b3J5XG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogYW55LCByZXNvdXJjZU9wdGlvbnM6IGFueSwgcHJvY2Vzc09wdGlvbnM/OiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGlmIChwcm9jZXNzT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cHJvY2Vzc09wdGlvbnMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb25zIChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIHJlc291cmNlT3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBsb2NhbENhY2hlLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSxcblx0XHRcdFx0cmVzb3VyY2VPcHRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKGxpbmtlZEVudHJpZXM6IGFueVtdLCBvcHRpb25zOiBhbnksIGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25DYWNoZSA9IGxvY2FsQ2FjaGUuY29sbGVjdGlvbnM7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGVudHJ5Lml0ZW1UeXBlO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBlbnRyeS5pdGVtRW50cmllcztcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0ucHVzaChsb2NhbENhY2hlLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xuXG5cdFx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGNvbGxlY3Rpb25NYXAsIGNvbGxlY3Rpb25DYWNoZSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldENhY2hlTWFuYWdlcih0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xuXHR9XG5cblx0cmVzZXRMb2NhbENhY2hlICgpIHtcblx0XHRjb25zdCBvbGRMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRvbGRMb2NhbENhY2hlLmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldENhY2hlTWFuYWdlcih0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IGFueVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbUVudHJpZXMsIHRydWUpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2Vcblx0XHQpO1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogYW55W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcywgZmFsc2UpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2Vcblx0XHQpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXApIHtcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XG5cdFx0XHRjb25zdCBuZXdJZCA9IGNvbnZlcnNpb25NYXBbb2xkSWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IGFueSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zPzogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zLCBwcm9jZXNzT3B0aW9ucyk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogYW55LCBvcHRpb25zOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IGFueVtdLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvbkJlZm9yZVNhdmUnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVTdWNjZXNzJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVXaXRob3V0Q2xvc2luZyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywga2V5LCBjYWxsYmFjayk7XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSAnLi9LZXlTZXJ2aWNlJztcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gJy4uL21vZGVscy9JdGVtRW50cnknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtRW50cnlTZXJ2aWNlIHtcblx0Ly8gdG9kbzogdHJhbnNsYXRlXG5cdHVuZGVmaW5lZEl0ZW1FcnJvciA9ICdIZXQgb3BnZXZyYWFnZGUgaXRlbSBiZXN0YWF0IG5pZXQgLyBKZSBoZWJ0IG5pZXQgdm9sZG9lbmRlIHJlY2h0ZW4gb20gZGl0IGl0ZW0gdGUgYmVraWprZW4nO1xuXHRBTExfUEVSTUlTU0lPTlMgPSA3O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRyZXNldERlcml2ZWQgKGl0ZW1FbnRyeSwgY29sdW1uSWRzKTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucy5yb290O1xuXHRcdGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcblx0XHRcdFx0ZmlsdGVyZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShmaWx0ZXJlZENvbHVtbnMpO1xuXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRkZWZlciAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGRlZmVyUmVxdWVzdCk6IEl0ZW1FbnRyeSB7XG5cdFx0aXRlbUVudHJ5LmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3Rcblx0XHRkZWxldGUgaXRlbUVudHJ5LmRlZmVycmVkO1xuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZShpdGVtRW50cnkpO1xuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRyZWplY3QgKGl0ZW1FbnRyeSwgZXJyb3IgPSB0aGlzLnVuZGVmaW5lZEl0ZW1FcnJvcik6IEl0ZW1FbnRyeSB7XG5cdFx0aXRlbUVudHJ5LmRlZmVycmVkLnJlamVjdChlcnJvcik7XG5cblx0XHRkZWxldGUgaXRlbUVudHJ5LmRlZmVycmVkO1xuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpdGVtRW50cnkpOiB2b2lkIHtcblx0XHRpdGVtRW50cnkucmVzb3VyY2VzID0gW107XG5cdH1cblxuXHRkZWFjdGl2YXRlUmVzb3VyY2VzIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSBpdGVtRW50cnkucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XG5cdH1cblxuXHRnZXRGaWVsZHMgKGl0ZW1FbnRyeSkge1xuXHRcdGlmIChpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBpdGVtRW50cnkubW9kaWZpZWQ7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRleHBhbmQgKGVudHJ5LCBtYWluLCBkZXJpdmVkLCBleHBhbmRSZXNvdXJjZSkge1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlO1xuXHRcdGVudHJ5LmNvbHVtbnMgPSBleHBhbmRSZXNvdXJjZS5tZXJnZWQ7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcblx0XHRcdGVudHJ5LmluaXRpYWwsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkuZGVyaXZlZCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHRkaWZmZXJlbmNlLmRlcml2ZWRcblx0XHQpO1xuXG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcblx0XHRcdGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0bWFpbixcblx0XHRcdGRpZmZlcmVuY2UubWFpblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRcdHRlbXBsYXRlT3B0aW9uczoge30sXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29udmVyc2lvblZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHQvLyBrZXk6IGluaXRpYWwgLyBtb2RpZmllZFxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxuXHR1cGRhdGVGaWVsZHMgKGVudHJ5LCBzb3VyY2UsIG92ZXJ3cml0ZSA9IHRydWUpIHtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IGVudHJ5LmNvbHVtbnMubWFpbjtcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gZW50cnkuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcblx0XHRjb25zdCBpbml0aWFsID0gZW50cnkuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IGVudHJ5Lm1vZGlmaWVkO1xuXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRcdGlmIChvdmVyd3JpdGUgfHwgdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKG1vZGlmaWVkLCBmb3JtYXR0ZWRDb2x1bW5zKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zKTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1WYWx1ZSAoZW50cnksIGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gZmllbGRzW2NvbHVtbklkXTtcblxuXHRcdGxldCBuZXdWYWx1ZTtcblxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW50cnkucGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRuZXdWYWx1ZSA9IGVudHJ5LnBhcmVudC5pdGVtSWQ7XG5cdFx0fSBlbHNlXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgY3VycmVudFZhbHVlLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IG5ld1ZhbHVlO1xuXHR9XG5cblx0dXBkYXRlSXRlbUZpZWxkcyAoZW50cnksIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IGVudHJ5LmNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCBpbml0aWFsID0gZW50cnkuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IGVudHJ5Lm1vZGlmaWVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKGVudHJ5LCBpbml0aWFsLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKGVudHJ5LCBtb2RpZmllZCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRwcm9jZXNzIChlbnRyeSkge1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLmZvcm1hdHRlZDtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGVudHJ5LmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZW50cnkuZGVyaXZlZCwgZm9ybWF0dGVkQ29sdW1ucy5kZXJpdmVkKTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGVudHJ5KSB7XG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdChcblx0XHRcdHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoZW50cnkuaXRlbUlkKSA/IHt9IDogZW50cnkuaW5pdGlhbCxcblx0XHRcdGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0ZW50cnkuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHNldERpc3BsYXlOYW1lIChlbnRyeSkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5nZXREaXNwbGF5TmFtZShlbnRyeSk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0ZW50cnkubW9kaWZpZWQuZGlzcGxheW5hbWUgPSByZXN1bHQ7XG5cdH1cblxuXHRnZXREaXNwbGF5TmFtZSAoZW50cnkpIHtcblx0XHRjb25zdCBmaWVsZHMgPSB0eXBlb2YgZW50cnkubW9kaWZpZWQgPT09ICd1bmRlZmluZWQnID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblxuXHRcdHN3aXRjaCAoZW50cnkuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiB0aGlzLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzW3RoaXMuZ2V0VGl0bGVGaWVsZChlbnRyeS5pdGVtVHlwZSldO1xuXHRcdH1cblx0fVxuXG5cdGdldEZ1bGxOYW1lIChmaXJzdE5hbWUsIGluZml4LCBsYXN0TmFtZSkge1xuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xuXHR9XG5cblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XG5cdFx0XHRjYXNlICdGaWxlcyc6XG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XG5cdFx0XHRjYXNlICdJbmh1dXInOlxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XG5cdFx0XHRjYXNlICdOb3RpdGllJzpcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxuXHRcdFx0Y2FzZSAnVGFhayc6XG5cdFx0XHRjYXNlICdUYWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0Y2FzZSAnVGlqZCc6XG5cdFx0XHRjYXNlICdUaXRlbCc6XG5cdFx0XHRjYXNlICdUeXBlJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdFx0cmV0dXJuICduYWFtJztcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGVudHJ5XG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmV0dXJuQWxsIFJldHVybnMgYWxsIGluaXRpYWwgdmFsdWVzIGlmIHRydWVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGdldENoYW5nZXMgKGVudHJ5LCByZXR1cm5BbGwpIHtcblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXG5cdFx0XHRlbnRyeS5pbml0aWFsLFxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiBlbnRyeS5tb2RpZmllZCxcblx0XHRcdGVudHJ5LmNvbHVtbnMubWFpblxuXHRcdCk7XG5cdH1cblxuXHRpc0xvY2FsIChlbnRyeSkge1xuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGVudHJ5Lml0ZW1JZCk7XG5cdH1cblxuXHRpc0xvY2thYmxlIChlbnRyeSkge1xuXHRcdGlmICh0aGlzLmlzTG9jYWwoZW50cnkpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChlbnRyeS5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aGFzQ2hhbmdlcyAoZW50cnkpIHtcblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxuXHRcdFx0ZW50cnkuaW5pdGlhbCxcblx0XHRcdGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0ZW50cnkuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0TW9kaWZpZWQgKGVudHJ5KSB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMubWFpbjtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0ZW50cnkubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmNsb25lKFxuXHRcdFx0XHRjb2x1bW4uYXBpQ29sdW1uLnR5cGUsXG5cdFx0XHRcdGVudHJ5LmluaXRpYWxbY29sdW1uLmlkXVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRzZXRJbml0aWFsIChlbnRyeSwgdmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KSB7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHRlbnRyeS5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UoZW50cnksIHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoZW50cnkuaW5pdGlhbCwge30sIGVudHJ5LmNvbHVtbnMubWFpbikpO1xuXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cdFx0fVxuXG5cdFx0cHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGVudHJ5Lm1vZGlmaWVkLCB7fSwgZW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0ZW50cnkubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShlbnRyeSwgcHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0c2V0TW9kaWZpZWQgKGVudHJ5LCB2YWx1ZXM/KSB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IGVudHJ5LmNvbHVtbnM7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVtlbnRyeS5pdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gZW50cnkucmVzb3VyY2VzO1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IGVudHJ5LmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IGVudHJ5Lm1vZGlmaWVkID0ge307XG5cblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucy5tYWluKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGVudHJ5O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdC8vIHRvZG86IGRldiBtb2RlIGNvbnN0YW50XG5cdFx0XHQvLyBpZiAoREVWX01PREUpIHtcblx0XHRcdC8vIFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdC8vIFx0XHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXHRcdFx0Ly8gfVxuXG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHNldERlcml2ZWQgKGVudHJ5LCB2YWx1ZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpXG5cdFx0XHRlbnRyeS5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHByb2Nlc3NMb2NhbCAoZW50cnksIGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0ZW50cnkuaW5pdGlhbCA9IHtwZXJtaXNzaW9uczogdGhpcy5BTExfUEVSTUlTU0lPTlN9O1xuXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoZW50cnksIGluaXRpYWwpO1xuXHRcdHRoaXMudXBkYXRlSXRlbUZpZWxkcyhlbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHR0aGlzLnNldE1vZGlmaWVkKGVudHJ5LCBtb2RpZmllZCk7XG5cblx0XHRlbnRyeS5tb2RpZmllZC5jcmVhdGVkID0gbW9tZW50KCk7XG5cdFx0ZW50cnkuZGVyaXZlZCA9IGRlcml2ZWQ7XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHRzZXRQYXJlbnQgKGVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xuXHRcdGVudHJ5LnBhcmVudCA9IHtcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxuXHRcdH07XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHRjYWxsT25DaGFuZ2UgKGVudHJ5LCBwcmV2aW91cykge1xuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gZW50cnkucmVzb3VyY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gZW50cnkucmVzb3VyY2VzW2ldO1xuXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCBCYXRjaFN0YXR1c0ZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9CYXRjaFN0YXR1c0ZhY3RvcnlcIjtcbmltcG9ydCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbUNhY2hlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBJdGVtRW50cnlGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeVwiO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEF1dGhJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BdXRoSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSAnLi9Db2x1bW5VdGlsJztcbmltcG9ydCBJdGVtQ2FjaGUgZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcbmltcG9ydCBCYXRjaFN0YXR1cyBmcm9tICcuL0JhdGNoU3RhdHVzJztcbmltcG9ydCBBcGlSZXNwb25zZVByb2Nlc3NvciBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmltcG9ydCB7XG5cdEFwaVRlbXBsYXRlSXRlbVR5cGVNYXAsXG5cdEVudHJ5U3RhdHVzLFxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG4vLyB0b2RvIG1ha2UgY2xhc3NcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0fVxuXG5cdGdldEl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gaXRlbUVudHJ5Lml0ZW1JZDtcblx0fVxuXG5cdGdldFByb21pc2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJ5U3RhdHVzLmVudHJ5O1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5MT0NBTCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxuXHRcdFx0XHQudGhlbihcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnksIGVycm9yKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoaXRlbUVudHJ5LCBzdGF0dXMsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gaXRlbUlkc1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XG5cdCAqXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZSwgaXRlbUlkcywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRJdGVtSWQoaXRlbUVudHJ5KSxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5nZXRQcm9taXNlKGl0ZW1FbnRyeSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcylcblx0XHRcdGJhdGNoU3RhdHVzLmFkZCh0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMpKTtcblxuXHRcdHByb21pc2VzLmVudHJpZXMgPSBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW0oaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcblx0XHRcdHByb21pc2VzLnRlbXBsYXRlID0gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYmF0Y2hSZXNvbHZlKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cywgb3B0aW9ucy5jb2x1bW5zLCByZXNvbHZlZCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5FWFBBTkQpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXG5cdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSwgZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZWplY3QoaXRlbUVudHJ5LCBlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0Ly8gdG9kbyBGaW5kIG91dCB3aGF0IHRoaXMgcmV0dXJuIHR5cGUgaXNcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSk6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHRoaXMuY3JlYXRlQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldFBhcmVudChpdGVtRW50cnksIHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc0xvY2FsKFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0dGVtcGxhdGUuZmllbGRzLFxuXHRcdFx0e30sXG5cdFx0XHR7fSxcblx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHQpO1xuXG5cdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGNvbnZlcnNpb25NYXApXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc29sdmUoaXRlbUVudHJ5KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpIHsgLy8gcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0c1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnkpO1xuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpLFxuXHRcdFx0Y29sdW1uSW5mb1xuXHRcdCk7XG5cdH1cblxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XG5cdFx0Y29uc3QgY29sdW1uSXRlbVR5cGUgPSBnZXRGaXJzdFByb3BlcnR5KHRlbXBsYXRlQ29sdW1ucyk7IC8vIGl0J3MgcG9zc2libGUgdG8gYWRkIGNvbHVtbnMgdG8gbGlua2VkIGl0ZW1zXG5cblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgY2FjaGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcblx0XHRcdFx0XHR0aGlzLmNvbHVtblV0aWwucmVzcG9uc2VDb2x1bW5zQXZhaWxhYmxlKFxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0Y2FjaGVkVGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdHt9IDpcblx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdF0pLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2U6IGFueSA9IHJlc29sdmVkWzBdO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcblx0XHRcdFx0XHRyZXNvbHZlZFsxXVxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XG5cdFx0XHRcdFx0ZmllbGRzOiB0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoT2JqZWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSxcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnM6IHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBjYWNoZWRFbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChjYWNoZWRFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCBmYWxzZSksXG5cdFx0XHRcdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLmNvbHVtbnMsIG9wdGlvbnMuZGVmZXJSZXF1ZXN0KSxcblx0XHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7ZW50cnk6IGNhY2hlZEVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY2FjaGVkRW50cnksIG9wdGlvbnMpfTtcblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zO1xuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSB8fFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KG9wdGlvbnMuY29sdW1ucywgY29sdW1ucy5yZXF1ZXN0LCBjb2x1bW5zLnRydWUpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeS5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRjb2x1bW5zLnJlcXVlc3QgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5zLnJlcXVlc3QsIG9wdGlvbnMuY29sdW1ucykubWVyZ2VkO1xuXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGlzQ29sdW1uU3Vic2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGZhbHNlKTtcblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHR9XG5cblx0Y3JlYXRlRGVmZXJyZWRFbnRyeSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIHJlcXVlc3RDb2x1bW5zLCBkZWZlclJlcXVlc3QpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY3JlYXRlRW50cnlTdHViKGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucyxcblx0XHRcdHRydWU6IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVmZXIoaXRlbUVudHJ5LCBkZWZlclJlcXVlc3QpO1xuXHR9XG5cblx0Y3JlYXRlRW50cnlTdHViIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlcik6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0aXRlbUlkXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUVudHJ5IChpdGVtSWQ6IG51bWJlciwgaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1uSW5mbyk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzKFxuXHRcdFx0dGhpcy5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdGluaXRpYWwsXG5cdFx0XHRcdFx0ZGVyaXZlZFxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZWZlcnJlZEVudHJ5IChpdGVtRW50cnksIGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiBJdGVtRW50cnkge1xuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gY29sdW1ucztcblx0XHRpdGVtRW50cnkuaW5pdGlhbCA9IGluaXRpYWw7XG5cdFx0aXRlbUVudHJ5LmRlcml2ZWQgPSBkZXJpdmVkO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3MoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xuXHQgKiBAcGFyYW0gcmVxdWVzdENvbHVtbnNcblx0ICogQHBhcmFtIHJlc29sdmVkXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cblx0ICpcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcblx0ICovXG5cdGJhdGNoUmVzb2x2ZSAoaXRlbVR5cGUsIGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1cywgcmVxdWVzdENvbHVtbnMsIHJlc29sdmVkKTogSXRlbUVudHJ5W10gfCBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRleHBhbmRTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMocmVzb2x2ZVN0YXR1cykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcblx0XHRcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSwgaXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0dGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBudWxsLCByZXNvbHZlZC50ZW1wbGF0ZSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChuZXdJdGVtSWQsIGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcD8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB7XG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGVdOiB7XG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtSWRdOiBuZXdJdGVtSWRcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlRW50cnkoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSwge30sIGNvbHVtbnMubWFpbiksXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUl0ZW1GaWVsZHMocmVzdWx0LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHJlc3VsdC5tb2RpZmllZCA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMocmVzdWx0LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKCFwYXJlbnQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXRQYXJlbnQocmVzdWx0LCBwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0Y3JlYXRlQ29udmVyc2lvbk1hcCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIGV4dGVuZDogYm9vbGVhbiwgcmVzcG9uc2UpIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0W2l0ZW1UeXBlXToge1xuXHRcdFx0XHRbYXBpSXRlbUlkXTogaXRlbUlkXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChleHRlbmQpXG5cdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdHJlc3VsdCxcblx0XHRcdFx0cmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdW2FwaUl0ZW1JZF0ubGlua3MsXG5cdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAocGFyZW50VHlwZTogc3RyaW5nLCBsb2NhbFBhcmVudElkOiBudW1iZXIsIHRlbXBsYXRlLCBjb252ZXJzaW9uTWFwKTogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSB7fTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGFwaVJlc3BvbnNlLml0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09IHBhcmVudFR5cGUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUyLCBpdGVtSWQ6IGxvY2FsUGFyZW50SWQyfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBzZWxmLmNyZWF0ZUVudHJ5U3R1YihpdGVtVHlwZSwgbG9jYWxJdGVtSWQpO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSBjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXTtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NMb2NhbChcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZXRDcmVhdG9yKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cnkgKGl0ZW1JZDogbnVtYmVyLCB0ZW1wbGF0ZSwgbW9kaWZpZWQsIGRlcml2ZWQsIHBhcmVudCA9IG51bGwpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jcmVhdGVFbnRyeVN0dWIoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzTG9jYWwoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHR0ZW1wbGF0ZS5maWVsZHMsXG5cdFx0XHRtb2RpZmllZCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHR0aGlzLmNyZWF0ZUNvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgZmFsc2UsIHRlbXBsYXRlLnJlc3BvbnNlKVxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENyZWF0b3IoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRleHRlbmRDb252ZXJzaW9uTWFwIChjb252ZXJzaW9uTWFwLCBsaW5rcywgYXBpUmVzcG9uc2UpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4dGVuZENvbnZlcnNpb25NYXAoXG5cdFx0XHRcdFx0Y29udmVyc2lvbk1hcCxcblx0XHRcdFx0XHRhcGlSZXNwb25zZS5pdGVtc1tpdGVtVHlwZV1bYXBpSXRlbUlkXS5saW5rcyxcblx0XHRcdFx0XHRhcGlSZXNwb25zZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBkZWZlclJlcXVlc3QgPSB0cnVlKSB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtcblx0XHRcdFx0Y29sdW1uczogW3RpdGxlRmllbGRdLFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdFxuXHRcdFx0fSlcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IEl0ZW1FbnRyeSB8IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBmZXRjaEl0ZW0gY2FuIGFsc28gcmV0dXJuIGxpbmtlZCBpdGVtc1xuXHRcdFx0XHRpZiAoZW50cnkubWFpbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmluaXRpYWxbdGl0bGVGaWVsZF07XG5cblx0XHRcdFx0aWYgKGVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1vZGlmaWVkW3RpdGxlRmllbGRdO1xuXG5cdFx0XHRcdHJldHVybiBlbnRyeS5pbml0aWFsW3RpdGxlRmllbGRdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBudW1iZXJbXSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkfSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkIChpdGVtRW50cnksIGl0ZW1JZCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3Qgb2xkSXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRpdGVtRW50cnkuaXRlbUlkID0gaXRlbUlkO1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDcmVhdG9yIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGl0ZW1FbnRyeS5tb2RpZmllZC5jcmVhdG9yID0gdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpO1xuXHRcdGl0ZW1FbnRyeS5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XG5cdH1cbn1cbiIsImltcG9ydCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5XCI7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgQ29sdW1uRXhwYW5zaW9uIGZyb20gXCIuL0NvbHVtbkV4cGFuc2lvblwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgUXVlcnlTZXJ2aWNlIGZyb20gXCIuL1F1ZXJ5U2VydmljZVwiO1xuaW1wb3J0IEFwaVJlc3BvbnNlUHJvY2Vzc29yIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdGNvbHVtbnM6IHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxuXHRcdFx0aXRlbVR5cGU6ICcnLFxuXHRcdFx0YWxsTGlua0lkczogZmFsc2UsXG5cdFx0XHRsaW1pdDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAob3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsKVxuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGVsc2Uge1xuXHRcdFx0cGFyYW1zLml0ZW1UeXBlID0gb3B0aW9ucy5xdWVyeUl0ZW1UeXBlO1xuXHRcdFx0cGFyYW1zLmFsbExpbmtJZHMgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UsIGlkQXJyYXksIHBhcmVudCwgY29sdW1uSW5mbywgY29sdW1uRXhwYW5zaW9uPyk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnRydWUgPyB0cnVlIDogY29sdW1uSW5mby5yZXF1ZXN0LFxuXHRcdFx0XHRjb2x1bW5JbmZvLnJlc3BvbnNlXG5cdFx0XHQpO1xuXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gY29sdW1uSW5mby5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcblx0XHRcdGxldCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5jcmVhdGVFbnRyeShcblx0XHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5JbmZvXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJyZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnJlc29sdmVEZWZlcnJlZEVudHJ5KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChyZXNwb25zZSwgcGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMpIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzL0VkaXRSZXNvdXJjZSc7XG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1SZXNvdXJjZVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXQ6IGZhbHNlLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2U6IEVkaXRSZXNvdXJjZSkge1xuXHRcdHJldHVybiByZXNvdXJjZS5pc0xvY2FsKCkgJiZcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xuXHR9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBLZXlTZXJ2aWNlIHtcblx0TkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcblx0RFVQTElDQVRFX1BSRUZJWDogc3RyaW5nID0gJy0yJztcblxuXHRORVdfS0VZV09SRDogc3RyaW5nID0gJ25ldy0nO1xuXHREVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xuXG5cdHNlcGVyYXRvcjogc3RyaW5nID0gJzonO1xuXG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbVR5cGUuY29uY2F0KHRoaXMuc2VwZXJhdG9yLCBTdHJpbmcoaXRlbUlkKSk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uQ2FjaGVLZXkgKHBhcmVudFR5cGU6IHN0cmluZywgcGFyZW50SWQ6IG51bWJlciwgY2hpbGRUeXBlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gcGFyZW50VHlwZS5jb25jYXQodGhpcy5zZXBlcmF0b3IsIFN0cmluZyhwYXJlbnRJZCksIHRoaXMuc2VwZXJhdG9yLCBjaGlsZFR5cGUpO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICgpIHtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XG5cdH1cblxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKSB7XG5cdFx0c3RhdGVLZXkgPSBzdGF0ZUtleS50b1N0cmluZygpO1xuXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YodGhpcy5ORVdfS0VZV09SRCkgPT09IDApXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnbmV3Jyxcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyh0aGlzLk5FV19LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRpZiAoc3RhdGVLZXkuaW5kZXhPZih0aGlzLkRVUExJQ0FURV9LRVlXT1JEKSA9PT0gMClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdkdXBsaWNhdGUnLFxuXHRcdFx0XHRpdGVtSWQ6IHN0YXRlS2V5LnN1YnN0cmluZyh0aGlzLkRVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLkRVUExJQ0FURV9LRVlXT1JELmNvbmNhdChTdHJpbmcoaXRlbUlkKSk7XG5cdH1cblxuXHRnZXROZXdTdGF0ZUtleSAodGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5ORVdfS0VZV09SRC5jb25jYXQodGVtcGxhdGVUeXBlKTtcblx0fVxuXG5cdGdldExvY2FsSWQgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMuTkVXX1BSRUZJWC5jb25jYXQodGhpcy5nZXRSYW5kb21TdHJpbmcoKSksIDEwKTtcblx0fVxuXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHBhcnNlSW50KHRoaXMuRFVQTElDQVRFX1BSRUZJWC5jb25jYXQodGhpcy5nZXRSYW5kb21TdHJpbmcoKSksIDEwKTtcblx0fVxuXG5cdGdldFJhbmRvbVN0cmluZyAoKSB7XG5cdFx0cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcblx0fVxuXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcblx0fVxuXG5cdGlzTmV3SWQgKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZC50b1N0cmluZygpLmluZGV4T2YodGhpcy5ORVdfUFJFRklYKSA9PT0gMCB8fCBpdGVtSWQgPT09IHRoaXMuTkVXX0tFWVdPUkQ7XG5cdH1cblxuXHRpc0R1cGxpY2F0ZUlkIChpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQudG9TdHJpbmcoKS5pbmRleE9mKHRoaXMuRFVQTElDQVRFX1BSRUZJWCkgPT09IDAgfHwgaXRlbUlkID09PSB0aGlzLkRVUExJQ0FURV9LRVlXT1JEO1xuXHR9XG59XG4iLCJpbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NrU2VydmljZSB7XG5cdGxvY2tJdGVtcyA9IHt9O1xuXHRwcm9taXNlcyA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxuXHRcdFx0bWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHZhbHVlXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRMb2NrcyAoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxuXHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmltcG9ydCBDb2x1bW5TZXRGYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5JztcbmltcG9ydCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tICcuLi9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSAnLi9Db2xsZWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gJy4vSXRlbUhhbmRsZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb2NrZXRNZXNzYWdlSGFuZGxlciB7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IGFueSk6IGFueSB7XG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XG5cdFx0XHRjYXNlICd1cGRhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdkZWxldGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdsaW5rVG8nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZShtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXMsIGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xuXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxuXHRcdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRcdHBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblx0fVxuXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmRlZmVyKGl0ZW1FbnRyeSwgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NNZXNzYWdlIChib2R5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllcyA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoaXRlbUVudHJ5KSk7XG5cdFx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuY3JlYXRlRGVmZXJyZWRFbnRyeShpdGVtVHlwZSwgcGFyc2VJbnQoaXRlbUlkLCAxMCksIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApKTsgLy8gY29sbGVjdGlvbk1hcCBtaWdodCBjb250YWluICdtYXliZScgbWF0Y2hlc1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUgKGJvZHkpIHtcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgZnVuY3Rpb25JZCk7XG5cblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcblx0XHRcdHJlcXVlc3RJZHMucHVzaChmdW5jdGlvbklkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZHMgPSByZXNwb25zZS5saW5rcy5GdW5jdGllO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlc3BvbnNlSWRzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGl0ZW1JZCk7XG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldEluaXRpYWwoaXRlbUVudHJ5LCB7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jYWxsT25DaGFuZ2UoaXRlbUVudHJ5LCBwcmV2aW91cyk7XG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc29sdmUoaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XG5cblx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5yZXNvbHZlRGVmZXJyZWRFbnRyeShpdGVtRW50cnksIGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RmllbGRzKGl0ZW1FbnRyeSksXG5cdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChpdGVtRW50cnksIGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcblxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0RGVyaXZlZChpdGVtRW50cnksIGRlcml2ZWQpO1xuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlRmllbGRzKGl0ZW1FbnRyeSwgZmllbGRzLCBmYWxzZSk7XG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jYWxsT25DaGFuZ2UoaXRlbUVudHJ5LCBwcmV2aW91cyk7XG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdH1cblxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0Ly8gVE9ETyFcblx0aGFuZGxlTGlua01vdmUgKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdFx0LypcdFx0XHRwcm9jZXNzTWVzc2FnZShcblx0XHQgbWVzc2FnZSxcblx0XHQgZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0IHJldHVybjtcblxuXHRcdCAvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xuXHRcdCBjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XG5cdFx0IH0sXG5cdFx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xuXHRcdCAvLyBtYXliZSBmaXRzXG5cdFx0IHJldHVybjsgIC8vIHRvZG86IGFsc28gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgb2xkIGNvbGxlY3Rpb25cblx0XHQgY29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcblx0XHQgfSxcblx0XHQgZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xuXHRcdCAvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XG5cdFx0IGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0XHQgfVxuXHRcdCApO1xuXHRcdCAqL1xuXHR9XG5cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IHsgSXRlbVR5cGVNYXAgfSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpZEFycmF5Lmxlbmd0aDsgaSsrKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWRBcnJheVtpXSwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Y29uc3Qga2V5cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xuXHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xuXHRcdH1cblxuXHRcdGlmIChyZXR1cm5LZXlzKVxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXS5sZW5ndGg7IGkrKylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdH1cblxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcblx0fVxuXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgQXBpRm9ybWF0dGVyIGZyb20gJy4uL2NsYXNzZXMvQXBpRm9ybWF0dGVyJztcbmltcG9ydCBBcGlSZXNwb25zZVByb2Nlc3NvciBmcm9tICcuLi9jbGFzc2VzL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChyZXNwb25zZTogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IHsgRW50cnlTdGF0dXMgfSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbmltcG9ydCB7IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwIH0gZnJvbSAnLi4vdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5cbi8qZXhwb3J0IHR5cGUgSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7XG5cdFtFTlRSWV9TVEFUVVMuQ0FDSEVEXT86IEl0ZW1FbnRyeVtdO1xuXHRbRU5UUllfU1RBVFVTLkVYUEFORF0/OiBJdGVtRW50cnlbXTtcblx0W0VOVFJZX1NUQVRVUy5MT0NBTF0/OiBJdGVtRW50cnlbXTtcblx0W0VOVFJZX1NUQVRVUy5QUk9NSVNFRF0/OiBQcm9taXNlPEl0ZW1FbnRyeVtdPjtcblx0W0VOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdPzogUHJvbWlzZTxJdGVtRW50cnlbXT47XG5cdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV0/OiBJdGVtRW50cnlbXTtcbn07Ki9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmF0Y2hTdGF0dXMge1xuXHRlbnRyaWVzOiBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gbnVtYmVyLFxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5PiAvLyB0b2RvOiBwcm9taXNlIHJldHVybiB0eXBlXG5cdCkge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIEVOVFJZX1NUQVRVUylcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcblx0fVxuXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4pOiB2b2lkIHtcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZW50cmllc1tzdGF0dXNdID0gW107XG5cblx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXS5wdXNoKGVudHJ5U3RhdHVzLmVudHJ5KTtcblx0fVxuXG5cdGhhc0VudHJpZXMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XG5cdFx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10ubGVuZ3RoID4gMClcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aGFzUmVxdWVzdHMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSk7XG5cdH1cblxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5QUk9NSVNFRCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5nZXRQcm9taXNlKGVudHJ5KSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcyk7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzICgpOiBudW1iZXJbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHR0aGlzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRSwgRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZ2V0SXRlbUlkKGVudHJ5KSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcblx0XHRcdFx0cmVzdWx0LnB1c2goc3RhdHVzRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCBCYXRjaFN0YXR1cyBmcm9tIFwiLi4vY2xhc3Nlcy9CYXRjaFN0YXR1c1wiO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gbnVtYmVyLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8YW55Pik6IEJhdGNoU3RhdHVzIHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFuZ2VzQ29tcGlsZXIge1xuXHRjb21waWxhdGlvbiA9IHtcblx0XHRjcmVhdGU6IHt9LFxuXHRcdGRlbGV0ZToge30sXG5cdFx0dXBkYXRlOiB7fSxcblx0XHRtb3ZlOiB7fVxuXHR9O1xuXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRwdWJsaWMgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk9wdGlvbnNcblx0KSB7XG5cdFx0dGhpcy5wcm9jZXNzU2luZ2xlSXRlbXMoKTtcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucygpO1xuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcblx0fVxuXG5cdGdldFBhcmVudCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkucGFyZW50IDpcblx0XHRcdHtpdGVtVHlwZTogJ1ZvaWQnLCBpdGVtSWQ6IDB9O1xuXHR9XG5cblx0YWRkTW92ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5LCBwYXJlbnRJZCwgcGFyZW50VHlwZSkge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmRlbGV0ZU1hcCxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRVcGRhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KGl0ZW1FbnRyeSk7XG5cblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0cG9zdFByb2Nlc3MgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMubW92ZUFycmF5KSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZCB8fCBkZWxldGVFbnRyeVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHRoaXMuY29tcGlsYXRpb24ubW92ZSxcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgW11dXG5cdFx0XHQpO1xuXG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGRlbGV0ZUVudHJ5W2l0ZW1JZF0pO1xuXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xuXG5cdFx0XHRcdGlmIChkZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1NpbmdsZUl0ZW1zICgpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRpZiAodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSlcblx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmhhc0NoYW5nZXMoaXRlbUVudHJ5KSlcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaXNFZGl0YWJsZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeSkge1xuXHRcdGlmICh0aGlzLmNvbGxlY3Rpb25PcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25PcHRpb25zW2NvbGxlY3Rpb25FbnRyeS5pZF0uZWRpdDtcblx0fVxuXG5cdHByaXZhdGUgaGFzRWRpdGFibGVJdGVtcyAoY29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbk9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXS5lZGl0SXRlbXM7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5jb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQgIT09IG51bGwgPyBwYXJlbnQuaXRlbUlkIDogMDtcblxuXHRcdFx0aWYgKHRoaXMuaXNFZGl0YWJsZUNvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KSkge1xuXHRcdFx0XHRsZXQgYWRkZWRJdGVtcztcblx0XHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSkge1xuXHRcdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XG5cdFx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XG5cdFx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykge1xuXHRcdFx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChhZGRlZEl0ZW0pKVxuXHRcdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcblx0XHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnRJZCwgcGFyZW50Lml0ZW1UeXBlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuaGFzRWRpdGFibGVJdGVtcyhjb2xsZWN0aW9uRW50cnkpKSB7XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBDaGFuZ2VzQ29tcGlsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ2hhbmdlc0NvbXBpbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sIGNvbGxlY3Rpb25PcHRpb25zKTogQ2hhbmdlc0NvbXBpbGVyIHtcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxlcihcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHNpbmdsZUl0ZW1zLFxuXHRcdFx0Y29sbGVjdGlvbnMsXG5cdFx0XHRjb2xsZWN0aW9uT3B0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgQ3JlYXRlUmVxdWVzdEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSBcIi4vQXBpRm9ybWF0dGVyXCI7XG5pbXBvcnQgQ2hhbmdlc0NvbXBpbGVyIGZyb20gXCIuL0NoYW5nZXNDb21waWxlclwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgZnJvbSBcIi4vQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSBcIi4vSXRlbUhhbmRsZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsZXJGYWN0b3J5OiBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhpcyBvbmNlIHRoZSBkb2N1bWVudCBjcmVhdGlvbiBoYXMgYmVlbiB1cGRhdGVkXG5cdGdldEl0ZW1UeXBlVXBkYXRlUHJpb3JpdHkgKGl0ZW1UeXBlKSB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsYmVkcmFnJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWwnOlxuXHRcdFx0Y2FzZSAnTWluZmFjdHV1cic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0fVxuXHR9XG5cblx0YnVpbGRNb3ZlUmVxdWVzdCAoY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0ZXhlY3V0ZSAoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zLCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgcGFyYW1ldGVycz8sIGNvbGxlY3Rpb25PcHRpb25zPywgb25BZnRlckNyZWF0ZUNhbGxiYWNrPykge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0cyhcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeS5jb25zdHJ1Y3Qoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zLCBjb2xsZWN0aW9uT3B0aW9ucyksXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgcGFyYW1ldGVycywgY29udmVyc2lvbk1hcCwgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spIHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQpLnJ1bigpO1xuXHRcdGNvbnN0IHJlc3BvbnNlcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0KSB7XG5cdFx0XHRpZiAoaXNGdW5jdGlvbihvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spKVxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAocmVxdWVzdFJlc291cmNlLCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbUlkID0gdGhpcy5nZXRNYXBWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCByZXNwb25zZU1hcCk7XG5cblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0NyZWF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgbmV3SXRlbUlkKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCk7XG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlRmllbGRzKGl0ZW1FbnRyeSwgZmllbGRzKTtcblxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMocmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLCB0cnVlKTtcblxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xuXHRcdFx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHJlc3BvbnNlTWFwW2l0ZW1UeXBlXSlcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBwcmlvcml0aXplZEl0ZW1UeXBlcyA9IFtbXSwgW10sIFtdXTtcblx0XHRsZXQgcmVxdWVzdENoYWluID0gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKVxuXHRcdFx0cHJpb3JpdGl6ZWRJdGVtVHlwZXNbdGhpcy5nZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5KGl0ZW1UeXBlKV0ucHVzaChpdGVtVHlwZSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlcyBvZiBwcmlvcml0aXplZEl0ZW1UeXBlcykge1xuXHRcdFx0aWYgKGl0ZW1UeXBlcy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXF1ZXN0Q2hhaW4gPSByZXF1ZXN0Q2hhaW4udGhlbihcblx0XHRcdFx0dGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycyksXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdENoYWluO1xuXHR9XG5cblx0Ly8gY29uc3RydWN0IGEgY2FsbGJhY2sgZnVuY3Rpb25cblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVxdWVzdHMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpIHtcblx0XHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBwYXJhbWV0ZXJNYXApIHtcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5leHBhbmRDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyeSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmIChlbnRyeS5maXR0aW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChlbnRyeS5jb2xsZWN0aW9uLmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdVcGRhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXREZXJpdmVkKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS51cGRhdGVGaWVsZHMoaXRlbUVudHJ5LCBmaWVsZHMpO1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jYWxsT25DaGFuZ2UoaXRlbUVudHJ5LCBwcmV2aW91cyk7XG5cblx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0cyAoY29tcGlsYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0Y29uc3QgaWRBcnJheSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGlkQXJyYXlcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRpZiAoIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgcmVzcG9uc2VJZEFycmF5KSlcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignRGVsZXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5leHBhbmRDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyeSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlTW92ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IHJlcXVlc3RzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHR0aGlzLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKHJlc3BvbnNlLCBjb21waWxhdGlvbkVudHJpZXMpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2VsZi5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzTW92ZVJlc3BvbnNlIChyZXNwb25zZSwgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0Ly8gVE9ETzogcHJvY2VzcyByZXNwb25zZVxuXG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBbXTtcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudElkLFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWRcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRhZGRDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50Lml0ZW1JZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XG5cdH1cblxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcblx0XHRcdFt7fSwge30sIFtdXVxuXHRcdCk7XG5cblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKVttZXRob2RdKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pIHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IHVwZGF0ZWRDb2x1bW5zOiBhbnkgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV0pO1xuXG5cdFx0XHQvLyB0aGVyZSBtaWdodCBiZSBpdGVtIGNvbHVtbnMgKGxpa2Ugc3VicHJvamVjdCkgd2hpY2ggc2hvdWxkIGJlIHVwZGF0ZWRcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5mb3JFYWNoKFxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS51cGRhdGVJdGVtRmllbGRzKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS51cGRhdGVJdGVtRmllbGRzKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHByb3BlciBvcmRlcjogY3JlYXRlIC0gbW92ZSAtIGRlbGV0ZSAtIHVwZGF0ZVxuXHRwcml2YXRlIGV4ZWN1dGVSZXF1ZXN0cyAoY2hhbmdlczogQ2hhbmdlc0NvbXBpbGVyLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlcy5jb21waWxhdGlvbjtcblx0XHRjb25zdCBzaW5nbGVJdGVtcyA9IGNoYW5nZXMuc2luZ2xlSXRlbXM7XG5cdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjaGFuZ2VzLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi5jcmVhdGUsIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sIC8vIGl0ZW0gaWQgY29udmVyc2lvbiBtYXBcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi4vY2xhc3Nlcy9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3IgZnJvbSBcIi4uL2NsYXNzZXMvQ2hhbmdlc1Byb2Nlc3NvclwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSBmcm9tIFwiLi9DaGFuZ2VzQ29tcGlsZXJGYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgQ3JlYXRlUmVxdWVzdEZhY3RvcnkgZnJvbSBcIi4vQ3JlYXRlUmVxdWVzdEZhY3RvcnlcIjtcbmltcG9ydCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxlckZhY3Rvcnk6IENoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHQpO1xuXHR9XG5cbn1cbiIsImltcG9ydCBRdWVyeU1hdGNoZXJGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZSBmcm9tICcuLi9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeUl0ZW1UeXBlTWFwIH0gZnJvbSAnLi4vdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0TUFZQkUgPSAnbWF5YmUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG5cdGVudHJpZXM6IENvbGxlY3Rpb25FbnRyeUl0ZW1UeXBlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBlbnRyeSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyeSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2Vcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0fVxuXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV0uaW5kZXhPZihjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0aWYgKGluZGV4ID09PSAtMSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IHN0cmluZyk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0uc2xpY2UoKTtcblx0fVxuXG5cdC8vIFRPRE86IHRoaW5rIG9mIGJldHRlciBuYW1lXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm1hdGNoUGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldFJlc291cmNlQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5nZXRDdXJyZW50UmVzb3VyY2UoKTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5tYXRjaFBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIE9ubHkgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcblx0ICogQHJldHVybnMge09iamVjdH0gQXJyYXkgb2YgY29sbGVjdGlvbnMuXG5cdCAqL1xuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50VHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50SWRcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRCeUZpdHRpbmdJdGVtIChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUsIGZpZWxkcykge1xuXHRcdGNvbnN0IGZpdHRpbmdSZXN1bHQgPSBbXTtcblx0XHRjb25zdCBtYXliZVJlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmdSZXN1bHQgPSBbXTtcblx0XHRjb25zdCByZXN1bHQgPSB7IGZpdHRpbmc6IGZpdHRpbmdSZXN1bHQsIG5vdGZpdHRpbmc6IG5vdEZpdHRpbmdSZXN1bHQsIG1heWJlOiBtYXliZVJlc3VsdCB9O1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QocGFyZW50VHlwZSwgcGFyZW50SWQsIGZpZWxkcywgaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcblxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcblx0XHRcdFx0Zml0dGluZ1Jlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRtYXliZVJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG5vdEZpdHRpbmdSZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5IChpdGVtVHlwZSwgZW50cnlLZXkpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZW50cnkucmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uQ2FjaGVcIjtcbmltcG9ydCBRdWVyeU1hdGNoZXJGYWN0b3J5IGZyb20gXCIuL1F1ZXJ5TWF0Y2hlckZhY3RvcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkNhY2hlKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IEl0ZW1SZXF1ZXN0U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2VcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0tleVNlcnZpY2VcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvUXVlcnlTZXJ2aWNlXCI7XG5cbmltcG9ydCB7IGluQXJyYXkgfSBmcm9tIFwiLi4vY2xhc3Nlcy9VdGlsXCI7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSAnLi9JdGVtUmVzb3VyY2UnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRxdWVyeTogYW55O1xuXHRjb2x1bW5zOiBhbnk7XG5cblx0cGFyZW50OiBudWxsIHwgeyBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZyB9ID0gbnVsbDtcblxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IGFueTtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxuXHQpIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblxuXHRcdHRoaXMuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXHRcdHRoaXMucXVlcnkgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5UmVzb3VyY2UpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pbml0aWFsID0gaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXM7XG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zLnNsaWNlKCk7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGUsIGl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kLml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRyZXR1cm4gbW9kO1xuXHRcdH1cblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yID0gW10pOiBudW1iZXJbXSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdGFkZEl0ZW1zIChpdGVtRW50cmllcywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwgPSBmYWxzZSwgZW5hYmxlQ2FsbGJhY2sgPSB0cnVlKTogSXRlbVJlc291cmNlW10ge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvSW5pdGlhbCA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgcmVzdWx0O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IGFkZGVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMoZW50cmllc0FkZGVkVG9Nb2RpZmllZCk7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFjaylcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9IGVsc2Vcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xuXHRcdFx0fSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGVuYWJsZUNhbGxiYWNrXG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChyZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChmaWx0ZXJGdW5jdGlvbiwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkRnJvbU1vZGlmaWVkID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRjb25zdCByZW1vdmVkRnJvbUluaXRpYWwgPSB1cGRhdGVJbml0aWFsID8gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pIDogW107XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xuXHRcdH1cblxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRGcm9tTW9kIG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVhY3RpdmF0ZVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kIChuZXdDb2x1bW5zKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKG5ld0NvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZSwgdGhpcy5pdGVtcyk7XG5cblx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMuY2FsbChcblx0XHRcdFx0XHR0aGlzLCBpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcblx0fVxuXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2s/LCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XG5cdFx0XHRcdGZ1bGxRdWVyeVxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjayk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCkge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcblx0fVxuXG5cdHVwZGF0ZUNvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSBjb2x1bW5FeHBhbnNpb24ucnVuKHRoaXMuY29sdW1ucywgZmFsc2UpO1xuXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSBjb2x1bW5JbmZvLnJlcXVlc3Q7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uSW5mbztcblx0fVxuXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwoaXRlbUVudHJ5KSAmJiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKG1vZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEN1cnJlbnRSZXNvdXJjZSAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YnRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IG5ld1Jlc291cmNlcyA9IFtdO1xuXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGN1cnJlbnRSZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9uc1tpc1N1YnRhYkNoYW5nZSA/ICdjbGVhck9uU3ViVGFiQ2hhbmdlJyA6ICdjbGVhck9uVGFiQ2hhbmdlJ10pXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRuZXdSZXNvdXJjZXMucHVzaChjb2xsZWN0aW9uUmVzb3VyY2UpO1xuXG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5lbnRyeS5yZXNvdXJjZXMucHVzaChpdGVtUmVzb3VyY2UpOyAvLyByZXNvdXJjZXMgc2hvdWxkIGJlIGVtcHR5IGJ5IG5vdyA6LSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLnJlc291cmNlcyA9IG5ld1Jlc291cmNlcztcblx0fVxuXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHRyZXZlcnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXModHJ1ZSk7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhyZW1vdmVkSXRlbXMpO1xuXHRcdFx0cmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhhZGRlZEl0ZW1zKTtcblx0XHR9XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1SZXF1ZXN0U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2VcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvS2V5U2VydmljZSc7XG5pbXBvcnQgUXVlcnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvUXVlcnlTZXJ2aWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnkoXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tIFwiLi4vY2xhc3Nlcy9VdGlsXCI7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4vSXRlbVJlc291cmNlXCI7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgfSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlIHtcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHt9O1xuXHRjb2x1bW5zO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnNcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcblx0XHR0aGlzLml0ZW1JZE1hcCA9IHt9O1xuXHRcdHRoaXMuaXRlbXMgPSBbXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUlkTWFwW2l0ZW1JZF07XG5cdH1cblxuXHRyZWJ1aWxkTWFwICgpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblx0XHR9XG5cblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcblx0fVxuXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3Rcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHRoaXMuaXRlbUlkTWFwO1xuXHRcdGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yKFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcblx0XHRcdFx0b25DaGFuZ2U6IG9wdGlvbnMub25DaGFuZ2UsXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XG5cblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxuXHQgKlxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XG5cdCAqL1xuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0ZmlsdGVyQXJyYXkoXG5cdFx0XHR0aGlzLml0ZW1zLFxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5pdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XG5cblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmaXJzdCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudCkge1xuXHRcdGNvbnN0IGl0ZW1zUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGl0ZW1SZXNvdXJjZS5maWVsZHNbYXJndW1lbnRdO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hcCAoYXJndW1lbnQpIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBsZW5ndGggPSBpdGVtUmVzb3VyY2VzLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBpdGVtUmVzb3VyY2VzW2ldLmZpZWxkc1thcmd1bWVudF07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbmFibGVDYWxsYmFja3MgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdC50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdH0pO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZUNvbGxlY3Rpb24odGhpcyk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlICgpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaW5kZXggPSBjb2xsZWN0aW9uUmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGl0ZW1SZXNvdXJjZS5jbGVhclJlc291cmNlKCk7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvS2V5U2VydmljZVwiO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4vQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tICcuL0l0ZW1FbnRyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdG9wdGlvbnNcblx0KSB7XG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdHNhdmUgKCkge1xuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xuXHR9XG5cblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdG1vdmVJdGVtcyAoaWRBcnJheSwgZGVzdGluYXRpb24sIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcblxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcblxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZCwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheSwgZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZSkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5lbnRyeS5pdGVtVHlwZSkudGhlbih0ZW1wbGF0ZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gW107XG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jcmVhdGVMb2NhbEVudHJ5KFxuXHRcdFx0XHRcdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWUuZmllbGRzLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5kZXJpdmVkXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcykge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9LZXlTZXJ2aWNlJztcbmltcG9ydCBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSBmcm9tICcuLi9mYWN0b3JpZXMvQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZUZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5XCI7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZSBmcm9tIFwiLi9Db2xsZWN0aW9uUmVzb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uc1xuXHQpIHtcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0tleVNlcnZpY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRWRpdFJlc291cmNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2VcIjtcbmltcG9ydCBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmltcG9ydCBJdGVtUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gbmV3IChvcHRpb25zLmVkaXRDb2xsZWN0aW9uID8gQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSA6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UpKFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgQ29sdW1uVXRpbCBmcm9tIFwiLi9Db2x1bW5VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XG5cdGV4cGFuc2lvbk1hcDogYW55ID0ge307XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zOiBhbnkgfCBib29sZWFuLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IGFueVxuXHQpIHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3Rcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xuXHRcdH0gZWxzZVxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0fVxuXG5cdHJ1biAoY29sdW1uSW5mbzogYW55LCByZXR1cm5FeHBhbnNpb25SZXN1bHQ6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBjb2x1bW5JbmZvSWQgPSBjb2x1bW5JbmZvLmlkO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXS5tZXJnZWQ7XG5cblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRjb2x1bW5JbmZvLnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5JbmZvLnRydWVcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IG51bGwgOiBjb2x1bW5JbmZvO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5JbmZvKTtcblxuXHRcdHJldHVybiByZXR1cm5FeHBhbnNpb25SZXN1bHQgPyB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdIDpcblx0XHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0ubWVyZ2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5JbmZvOiBhbnkpIHtcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5JbmZvLnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVzcG9uc2VDb2x1bW5zKGNvbHVtbkluZm8ucmVzcG9uc2UsIHRoaXMucmVzcG9uc2VDb2x1bW5zKVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdGZhbHNlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXG5cdFx0bWVyZ2VkLnRydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCBjb2x1bW5JbmZvLnRydWU7XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtbkV4cGFuc2lvbiBmcm9tIFwiLi4vY2xhc3Nlcy9Db2x1bW5FeHBhbnNpb25cIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5VdGlsIGZyb20gJy4uL2NsYXNzZXMvQ29sdW1uVXRpbCc7XG5pbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi9Db2x1bW5TZXRGYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sIHJlc3BvbnNlQ29sdW1uczogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24oXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSAnLi9Db2x1bW5VdGlsJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtblNldCB7XG5cdGlkID0gKytjdXJyZW50SWQ7XG5cdHRydWU6IGJvb2xlYW47XG5cdGxpbmsgPSBudWxsO1xuXHRtYWluID0gW107XG5cdGRlcml2ZWQgPSBbXTtcblx0cm9vdCA9IFtdO1xuXHRsZWFmID0gW107XG5cdGZvcm1hdHRlZCA9IHtcblx0XHRtYWluOiBbXSxcblx0XHRkZXJpdmVkOiBbXVxuXHR9O1xuXHRmaWx0ZXJlZCA9IFtdO1xuXHRjdXN0b20gPSBbXTtcblx0c2VhcmNoYWJsZSA9IFtdO1xuXHRpdGVtID0gW107XG5cdG5vdEl0ZW0gPSBbXTtcblxuXHRyZXF1ZXN0ID0gW107XG5cdHJlc3BvbnNlID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHVibGljIGl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1ucyxcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zLFxuXHRcdHB1YmxpYyBlbmFibGVDYWNoaW5nID0gdHJ1ZSxcblx0XHRwdWJsaWMgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZVxuXHQpIHtcblx0XHR0aGlzLnRydWUgPSByZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucygpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKCk7XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2VDb2x1bW5zICgpIHtcblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHRoaXMucmVzcG9uc2VDb2x1bW5zKSA6XG5cdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1ucztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdGhpcy5yZXNwb25zZUNvbHVtbnNbdGhpcy5pdGVtVHlwZV0pIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKFxuXHRcdFx0XHR0aGlzLmdldENvbHVtbkluZm8oXG5cdFx0XHRcdFx0dGhpcy5yZXNwb25zZUNvbHVtbnNbdGhpcy5pdGVtVHlwZV1bY29sdW1uSWRdLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdG51bGxcblx0XHRcdFx0KVxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5yZXF1ZXN0LnB1c2goY29sdW1uSWQpO1xuXHRcdH1cblx0fVxuXG5cdHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAoKSB7XG5cdFx0dGhpcy5yZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0Q29sdW1ucztcblx0XHR0aGlzLnJlc3BvbnNlID0ge307XG5cblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgdGhpcy5yZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgdGhpcy5pdGVtVHlwZSwgbnVsbCk7XG5cblx0XHRcdGlmIChjb2x1bW5JbmZvID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIHRoaXMuaXRlbVR5cGUsIG51bGwpKTtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBjb2x1bW5UeXBlLCBwYXJlbnQpIHtcblx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xuXG5cdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKHRoaXMucmVzcG9uc2VDb2x1bW5zW2NvbHVtblR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMucmVzcG9uc2VDb2x1bW5zW2NvbHVtblR5cGVdW2NvbHVtbklkXTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBjb2x1bW5UeXBlKTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlQ2FjaGluZylcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihjb2x1bW5UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbY29sdW1uVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2NvbHVtblR5cGVdID0ge307XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbY29sdW1uVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiB0aGlzLmdldENvbHVtbkluZm8ocmVzcG9uc2VDb2x1bW4sIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50KTtcblx0fVxuXG5cdGdldENvbHVtbkluZm8gKHJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbiwgcGFyZW50KSB7XG5cdFx0Y29uc3QgaXNEZXJpdmVkID0gcGFyZW50ICE9PSBudWxsO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0ge1xuXHRcdFx0aWQ6IGNvbHVtbklkLFxuXHRcdFx0cGF0aDogaXNEZXJpdmVkID9cblx0XHRcdFx0cGFyZW50LnBhdGguY29uY2F0KENPTFVNTl9TRVBFUkFUT1IsIGNvbHVtbklkKSA6IGNvbHVtbklkLFxuXHRcdFx0YXBpQ29sdW1uOiByZXNwb25zZUNvbHVtbixcblx0XHRcdGxldmVsOiBpc0Rlcml2ZWQgPyBwYXJlbnQubGV2ZWwgKyAxIDogMCxcblx0XHRcdGlzTGVhZjogY2hpbGRyZW4ubGVuZ3RoID09PSAwLFxuXHRcdFx0aXRlbVR5cGU6ICcnLFxuXHRcdFx0Y2hpbGRyZW46IFtdLFxuXHRcdFx0cGFyZW50OiBudWxsLFxuXHRcdFx0dGFpbFBhdGg6IG51bGxcblx0XHR9O1xuXG5cdFx0aWYgKGlzRGVyaXZlZCkge1xuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGNvbHVtbkluZm8ucGFyZW50ID0gcGFyZW50O1xuXHRcdFx0Y29sdW1uSW5mby50YWlsUGF0aCA9IHBhcmVudC5sZXZlbCA+IDAgP1xuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGguY29uY2F0KENPTFVNTl9TRVBFUkFUT1IsIGNvbHVtbklkKSA6IGNvbHVtbklkO1xuXHRcdH0gZWxzZSAvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xuXHRcdFx0dGhpc1t0aGlzLmNvbHVtblV0aWwuaXNJdGVtQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSA/ICdpdGVtJyA6ICdub3RJdGVtJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmICh0aGlzLmNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc0ZpbHRlcmVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmICh0aGlzLmNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcblx0XHRcdHRoaXMubGluayA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUgPT09ICd1bmRlZmluZWQnKVxuXHRcdFx0Y29uc29sZS53YXJuKCdpdGVtVHlwZSB1bmRlZmluZWQgaW4gY29sdW1uJywgcmVzcG9uc2VDb2x1bW4pO1xuXG5cdFx0Y29sdW1uSW5mby5pdGVtVHlwZSA9IHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlO1xuXHRcdGNvbHVtbkluZm8uY2hpbGRyZW4gPSBbXTtcblxuXHRcdC8vIGNvbHVtbnMgaXMgKm5vdCogdHJ1ZVxuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGNoaWxkSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oY2hpbGQsIGNvbHVtbkluZm8uaXRlbVR5cGUsIGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoY2hpbGRJbmZvID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sdW1uSW5mby5jaGlsZHJlbi5wdXNoKGNoaWxkSW5mbyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdH1cbn1cbiIsImltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5TZXQgZnJvbSBcIi4uL2NsYXNzZXMvQ29sdW1uU2V0XCI7XG5pbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuLi9jbGFzc2VzL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtblNldChcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRlbmFibGVDYWNoaW5nLFxuXHRcdFx0aW5jbHVkZUlkQ29sdW1uXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9Db2xsZWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbixcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gcmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cblx0XHRcdGlmIChlbnRyeS5maXR0aW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZW50cnkuY29sbGVjdGlvbi5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXG5cdFx0cmV0dXJuIHJlcXVlc3RSZXNvdXJjZTtcblx0fVxuXG5cdHNldFJlcXVlc3RQYXJlbnQgKHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXHRcdFx0XHRjb25zdCBoYXNQYXJlbnQgPSB0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKTtcblxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcblx0XHRcdFx0XHRcdHBhcmVudE1hcFtwYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IGFueSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxuXHRcdFx0XHRpdGVtczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHt9XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gZGVzdGluYXRpb24ucmVxdWVzdDtcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XG5cdFx0XHRcdHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXHRcdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdC5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0XHRsZXQgbGlua3M7XG5cblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcblx0XHRcdFx0XHRyZXF1ZXN0LnBhcmVudElkW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5mb3JtYXRSZXF1ZXN0KGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ3JlYXRlUmVxdWVzdCBmcm9tIFwiLi4vY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0XCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9LZXlTZXJ2aWNlJztcbmltcG9ydCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJNYXAsIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRjb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBRdWVyeU1hdGNoZXJGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtQ2FjaGUge1xuXHRlbnRyaWVzID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0aWYgKCF0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cdH1cblxuXHR0b0FycmF5ICgpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGdldCAoaXRlbVR5cGUsIGl0ZW1JZCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocGFyZW50VHlwZSA9PT0gcGFyZW50Lml0ZW1UeXBlICYmIHBhcmVudElkID09IHBhcmVudC5pdGVtSWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGNvbnRhaW5zIChpdGVtVHlwZSwgaXRlbUlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeSkge1xuXHRcdGNvbnN0IHBhcmVudDogYW55ID0gaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbCA/IGl0ZW1FbnRyeS5wYXJlbnQgOiB7fTtcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0cGFyZW50Lml0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkocXVlcnkub2JqZWN0KSA9PT0gdHJ1ZTsgLy8gVE9ETzogbWF5YmU/XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtQ2FjaGUgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUNhY2hlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgZnJvbSBcIi4vUXVlcnlNYXRjaGVyRmFjdG9yeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgSXRlbVJlc291cmNlIGZyb20gXCIuL0l0ZW1SZXNvdXJjZVwiO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUVudHJ5IHtcblx0aWQ6IG51bWJlciA9ICsrY3VycmVudElkO1xuXG5cdG1vZGlmaWVkO1xuXHRwYXJlbnQ6IG51bGwgfCB7IGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nIH0gPSBudWxsO1xuXG5cdGRlZmVyUmVxdWVzdCA9IGZhbHNlO1xuXHRkZWZlcnJlZDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0cHVibGljIGl0ZW1JZDogbnVtYmVyLFxuXHRcdHB1YmxpYyBjb2x1bW5zPyxcblx0XHRwdWJsaWMgaW5pdGlhbD8sXG5cdFx0cHVibGljIGRlcml2ZWQgPSB7fSxcblx0XHRwdWJsaWMgcmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSA9IFtdXG5cdCkge1xuXHR9XG59XG4iLCJpbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvSXRlbVJlc291cmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBjb2x1bW5zPywgaW5pdGlhbD86IG9iamVjdCwgZGVyaXZlZD86IG9iamVjdCwgcmVzb3VyY2VzPzogSXRlbVJlc291cmNlW10pOiBJdGVtRW50cnkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0aW5pdGlhbCxcblx0XHRcdGRlcml2ZWQsXG5cdFx0XHRyZXNvdXJjZXNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi9JdGVtRW50cnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0ZGVyaXZlZDtcblx0Y29sdW1ucztcblx0ZmllbGRzO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcm90ZWN0ZWQgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLmRlcml2ZWQgPSBlbnRyeS5kZXJpdmVkO1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblx0fVxuXG5cdGlzTmV3UmVzb3VyY2UgKHJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKHJlc291cmNlLmVudHJ5KSAmJlxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpc0xvY2FsICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwodGhpcy5lbnRyeSk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xuXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKSB7XG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzKTtcblx0fVxufVxuIiwiaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuLi9jbGFzc2VzL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvciBmcm9tICcuLi9jbGFzc2VzL0NoYW5nZXNQcm9jZXNzb3InO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gJy4uL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IExvY2tTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvTG9ja1NlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4uL2NsYXNzZXMvVXRpbCc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBhbnlbXSA9IFtdO1xuXHR0cmFuc2FjdGlvbnM6IG51bWJlcjtcblx0aGFzQ2hhbmdlczogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnMsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1FbnRyeVNlcnZpY2UsIGVudHJ5LCBvcHRpb25zKTtcblxuXHRcdGl0ZW1FbnRyeVNlcnZpY2Uuc2V0TW9kaWZpZWQoZW50cnkpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZDtcblx0fVxuXG5cdHN0YXJ0ICgpIHtcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xuXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcblx0fVxuXG5cdHJvbGxiYWNrICgpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHRoaXMuaXNOZXdSZXNvdXJjZSh0aGlzKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXHR9XG5cblx0Y29tbWl0IChpbml0aWFsKSB7XG5cdFx0aWYgKCFpbml0aWFsKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcy5wb3AoKTtcblxuXHRcdC8vIGNvbXBsZXRlZCB0cmFuc2FjdGlvbnNcblx0XHRpZiAodGhpcy50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuXHRcdHRoaXMudHJhbnNhY3Rpb25zKys7XG5cdH1cblxuXHRnZXRMb2NhbENvcHkgKCkge1xuXHRcdGNvbnN0IGxvY2FsQ29waWVzID0gdGhpcy5sb2NhbENvcGllcztcblxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjb3B5RmllbGRzIChkZXN0aW5hdGlvbj8pIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0aWYgKGRlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRkZXN0aW5hdGlvbiA9IHt9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRzZXRGaWVsZHMgKHZhbHVlcywgY2FsbE9uQ2hhbmdlKSB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcblx0XHRjb25zdCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2FsbE9uQ2hhbmdlID0gdHJ1ZTtcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xuXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzKSB7XG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNhbGxPbkNoYW5nZSh0aGlzLmVudHJ5LCBwcmV2aW91cyk7XG5cdH1cblxuXHRzYXZlIChwYXJhbWV0ZXJzPykge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XG5cblx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NrYWJsZShpdGVtRW50cnkpID9cblx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpXG5cdFx0KS50aGVuKFxuXHRcdFx0bG9ja1Rva2VuID0+IHtcblx0XHRcdFx0Ly8gYWRkVG9Db2xsZWN0aW9ucyBpcyBjYWxsZWQgaW4gY2hhbmdlc1Byb2Nlc3NvclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBmYWxzZSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRzYXZlTG9jYWwgKCkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0RGlzcGxheU5hbWUoaXRlbUVudHJ5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZEl0ZW1zVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4vSXRlbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSwgZW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucykge1xuXHRcdHN1cGVyKGl0ZW1FbnRyeVNlcnZpY2UsIGVudHJ5LCBvcHRpb25zKTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi4vY2xhc3Nlcy9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3IgZnJvbSAnLi4vY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yJztcbmltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tICcuLi9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyJztcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbVJlc291cmNlU2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlXCI7XG5pbXBvcnQgTG9ja1NlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9Mb2NrU2VydmljZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UgfSBmcm9tIFwiLi4vbW9kZWxzL0VkaXRSZXNvdXJjZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1SZXNvdXJjZVwiO1xuaW1wb3J0IHsgVmlld1Jlc291cmNlIH0gZnJvbSBcIi4uL21vZGVscy9WaWV3UmVzb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQpIHtcblx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGUgZnJvbSBcIi4vQ29sbGVjdGlvbkNhY2hlXCI7XG5pbXBvcnQgSXRlbUNhY2hlIGZyb20gXCIuL0l0ZW1DYWNoZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSBcIi4vSXRlbUVudHJ5U2VydmljZVwiO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gXCIuL1V0aWxcIjtcblxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyIHtcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcblx0ZGVzdGluYXRpb246IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCkge1xuXHR9XG5cblx0cHJvY2VzcyAoKSB7XG5cdFx0dGhpcy5wYXJlbnRNYXAgPSB0aGlzLmNyZWF0ZVBhcmVudE1hcCh0aGlzLnNpbmdsZUl0ZW1DYWNoZSk7XG5cdFx0dGhpcy5wcm9jZXNzSXRlbXModGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLCBbdGhpcy5yb290SXRlbUVudHJ5XSwge30pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXG5cdFx0XHRpdGVtczogdGhpcy5kZXN0aW5hdGlvblxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVBhcmVudE1hcCAoaXRlbUNhY2hlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRpdGVtQ2FjaGUuZm9yRWFjaChcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIC8vIHdlIGRvbid0IGNhcmUgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCBsaW5rZWQgdG8gdGhlIHJvb3QgaXRlbVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Lml0ZW1UeXBlO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXSA9IHt9O1xuXG5cdFx0XHRcdGxldCBtYXBFbnRyeSA9IHJlc3VsdFtwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0bWFwRW50cnlbcGFyZW50SWRdID0ge307XG5cblx0XHRcdFx0bWFwRW50cnkgPSBtYXBFbnRyeVtwYXJlbnRJZF07XG5cblx0XHRcdFx0aWYgKG1hcEVudHJ5W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yKSB7XG5cdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0aWYgKGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHQvLyBlYWNoIGl0ZW0gb25seSBoYXMgYSBzaW5nbGUgcGFyZW50LCBzbyB3ZSBjYW4gc2FmZWx5IGRvIHRoaXNcblx0XHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdLnB1c2goaXRlbUlkKTtcblxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSA9IHRoaXMucHJvY2Vzc0l0ZW0oaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NJdGVtIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmZvcm1hdFJlcXVlc3QoaXRlbUVudHJ5KTtcblx0XHRjb25zdCBsaW5rcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRJdGVtcylcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNoaWxkVHlwZSwgY2hpbGRJdGVtc1tjaGlsZFR5cGVdLCBsaW5rcyk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjaGlsZENvbGxlY3Rpb25zKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMucXVlcnkgIT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5pdGVtcywgbGlua3MpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhhc1ZhbHVlcyA9IGhhc1Byb3BlcnRpZXModmFsdWVzKTtcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xuXG5cdFx0aWYgKGhhc1ZhbHVlcyAmJiBoYXNMaW5rcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XG5cblx0XHRpZiAoaGFzVmFsdWVzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XG5cblx0XHRpZiAoaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XG5cblx0XHRyZXR1cm4gRU1QVFlfRU5UUlk7XG5cdH1cblxuXHRwcml2YXRlIGdldEl0ZW1zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcblxuXHRcdGlmIChtYXBFbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0cmV0dXJuIG1hcEVudHJ5W3BhcmVudElkXTtcblx0fVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uQ2FjaGVcIjtcbmltcG9ydCBJdGVtQ2FjaGUgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUNhY2hlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IE1vZHVsZUNoYW5nZXNDb21waWxlciBmcm9tIFwiLi4vY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJvb3RJdGVtOiBJdGVtRW50cnksIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSkge1xuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0cm9vdEl0ZW0sXG5cdFx0XHRzaW5nbGVJdGVtQ2FjaGUsXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRwdWJsaWMgcGFyZW50SWQ6IG51bWJlcixcblx0XHRwdWJsaWMgZmllbGRzOiBvYmplY3QsXG5cdFx0cHVibGljIGl0ZW1UeXBlPzogc3RyaW5nXG5cdCkge1xuXG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVWYWx1ZXMgKHZhbHVlLCBxdWVyeVZhbHVlKSB7XG5cdFx0aWYgKG1vbWVudC5pc01vbWVudChxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XG5cblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24ocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0bGV0IG1hdGNoO1xuXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB0aGlzLnBhcmVudFR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMucGFyZW50SWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogbWF0Y2g7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoQ29tcGxleFF1ZXJ5IChxdWVyeSkge1xuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xuXG5cdFx0bGV0IHJlc3VsdDtcblx0XHRsZXQgdGVybWluYWw7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5Lm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlICdBTkQnOlxuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ09SJzpcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hRdWVyeShjb25kaXRpb24pO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxuXHRcdFx0XHRyZXR1cm4gdGVybWluYWw7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRcdHJlc3VsdCA9IE1BWUJFO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIG1hdGNoU2ltcGxlUXVlcnkgKHZhbHVlLCBxdWVyeSkge1xuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xuXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcblxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnIT0nOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJzw9Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz49Jzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICdJTic6XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJ05PVCBJTic6XG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgQXBpRm9ybWF0dGVyIGZyb20gJy4uL2NsYXNzZXMvQXBpRm9ybWF0dGVyJztcbmltcG9ydCBRdWVyeU1hdGNoZXIgZnJvbSBcIi4uL2NsYXNzZXMvUXVlcnlNYXRjaGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlclxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGZpZWxkczogb2JqZWN0LCBpdGVtVHlwZT86IHN0cmluZyk6IFF1ZXJ5TWF0Y2hlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZCxcblx0XHRcdGZpZWxkcyxcblx0XHRcdGl0ZW1UeXBlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE9CSiA9IDAsXG5cdFNUUiA9IDEsXG5cdFNFUCA9ICc6J1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeVBhcnNlciB7XG5cdHF1ZXJ5OiBhbnk7XG5cdHBhcmFtZXRlcnM6IGFueTtcblxuXHRjb25zdHJ1Y3RvciAocXVlcnksIHBhcmFtZXRlcnM/KSB7XG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWUpIHtcblx0XHQvLyBhbGdvcml0aG0gaXMgbm90IGltcG9ydGFudCwgYXMgbG9uZyBhcyBhbGwgYXJyYXlzIGFyZSBzb3J0ZWQgdGhlIHNhbWUgd2F5XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xuXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbih2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGEsIGIpIHtcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcblx0XHRcdHJldHVybiAwO1xuXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xuXHR9XG5cblx0cGFyc2UgKHF1ZXJ5ID0gdGhpcy5xdWVyeSkge1xuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcblx0XHRcdFx0cXVlcnkucXVlcnksXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxuXHRcdFx0KTtcblxuXHRcdGlmIChxdWVyeS5ub3QgIT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFwiTm90XCIgbm90IHN1cHBvcnRlZCcpO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDdXN0b21RdWVyeShcblx0XHRcdFx0cXVlcnkuY3VzdG9tLFxuXHRcdFx0XHRxdWVyeS5wYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTZWFyY2hRdWVyeShxdWVyeS5zZWFyY2gpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ29tcGxleFF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5jb25kaXRpb25zLFxuXHRcdFx0XHRxdWVyeS5vcGVyYXRvclxuXHRcdFx0KTtcblxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmtleSxcblx0XHRcdFx0cXVlcnkudmFsdWUsXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3Jcblx0XHRcdCk7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRjb25zdCBrZXkgPSBnZXRGaXJzdFByb3BlcnR5KHF1ZXJ5KTtcblxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCBxdWVyeVtrZXldKTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTZWFyY2hRdWVyeSAodmFsdWUpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tLCBwYXJhbWV0ZXJzKSB7XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xuXHRcdFx0XTtcblxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xuXG5cdFx0Y29uc3QgcXVlcnkgPSB7fTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcblxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xuXG5cdFx0XHRpZiAoaSA+IDApXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xuXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5LCB2YWx1ZSwgY29tcGFyYXRvcj8pIHtcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvLCBxdWVyeSwgcmV2ZXJzZSwgbm90KSB7XG5cdFx0aWYgKHF1ZXJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRxdWVyeSA9IHt9O1xuXG5cdFx0aWYgKHJldmVyc2UgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldmVyc2UgPSBmYWxzZTtcblxuXHRcdGlmIChub3QgPT09IHVuZGVmaW5lZClcblx0XHRcdG5vdCA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9ucywgb3BlcmF0b3IpIHtcblx0XHRpZiAob3BlcmF0b3IgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wZXJhdG9yID0gJ0FORCc7XG5cdFx0ZWxzZVxuXHRcdFx0b3BlcmF0b3IgPSBvcGVyYXRvci50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Y29uc3QgcGFyc2VkQ29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGNvbmRpdGlvbnMpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtjb25kaXRpb25zOiBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5PQkpdLCBvcGVyYXRvcjogb3BlcmF0b3J9LFxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDb25kaXRpb25zIChjb25kaXRpb25zKSB7XG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnMgPSBbXTtcblx0XHRjb25zdCBxdWVyeSA9IFtdO1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpXG5cdFx0XHRwYXJzZWRDb25kaXRpb25zLnB1c2godGhpcy5wYXJzZShjb25kaXRpb24pKTtcblxuXHRcdHBhcnNlZENvbmRpdGlvbnMgPSBwYXJzZWRDb25kaXRpb25zLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVBhcnNlZFF1ZXJpZXMoYSwgYikpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJzZWRDb25kaXRpb24gb2YgcGFyc2VkQ29uZGl0aW9ucykge1xuXHRcdFx0cXVlcnkucHVzaChwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLk9CSl0pO1xuXHRcdFx0c3RyaW5nICs9IHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXRWYWx1ZSAodmFsdWUpIHtcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XG5cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xuXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xuXHRcdH1cblxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XG5cdH1cbn1cbiIsImltcG9ydCBRdWVyeVBhcnNlciBmcm9tIFwiLi4vY2xhc3Nlcy9RdWVyeVBhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtblV0aWwgZnJvbSBcIi4vQ29sdW1uVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zID0ge307XG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZCAoY29sdW1uSW5mbykge1xuXHRcdGlmICh0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSlcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uSW5mby5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5JbmZvLnJlcXVlc3QpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuLi9jbGFzc2VzL0NvbHVtblV0aWwnO1xuaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gZnJvbSBcIi4uL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1DYWNoZUZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2VcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9JdGVtUmVzb3VyY2VcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGUgZnJvbSBcIi4vQ29sbGVjdGlvbkNhY2hlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4vQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBJdGVtQ2FjaGUgZnJvbSAnLi9JdGVtQ2FjaGUnO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcbmltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZVNlcnZpY2UgZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCBMb2NrU2VydmljZSBmcm9tIFwiLi9Mb2NrU2VydmljZVwiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxDYWNoZSB7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0aXRlbXM6IEl0ZW1DYWNoZTtcblx0Y29sbGVjdGlvbk9wdGlvbnMgPSB7fTtcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xuXG5cdGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0aWYgKGlzUm9vdClcblx0XHRcdHRoaXMucm9vdEl0ZW0gPSBpdGVtRW50cnk7XG5cblx0XHRpZiAoIXRoaXMuaXRlbXMuY29udGFpbnMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSlcblx0XHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiB0aGlzLmNsZWFySXRlbShpdGVtUmVzb3VyY2UpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zKTtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGlmICghdGhpcy5jb2xsZWN0aW9ucy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xuXG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25PcHRpb25zW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHtcblx0XHRcdFx0ZWRpdDogcmVzb3VyY2VPcHRpb25zLmVkaXRDb2xsZWN0aW9uLFxuXHRcdFx0XHRlZGl0SXRlbXM6IHJlc291cmNlT3B0aW9ucy5lZGl0SXRlbXNcblx0XHRcdH07XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uT3B0aW9uc0VudHJ5ID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnlJZF07XG5cblx0XHRcdGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdCA9IGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdCB8fCByZXNvdXJjZU9wdGlvbnMuZWRpdENvbGxlY3Rpb247XG5cdFx0XHRjb2xsZWN0aW9uT3B0aW9uc0VudHJ5LmVkaXRJdGVtcyA9IGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdEl0ZW1zIHx8IHJlc291cmNlT3B0aW9ucy5lZGl0SXRlbXM7XG5cdFx0fVxuXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW0gPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1SZXNvdXJjZSk7XG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUNvbGxlY3Rpb24gPSAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJDb2xsZWN0aW9uKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk7XG5cdH1cblxuXHRjbGVhckNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XG5cblx0XHR0aGlzLml0ZW1zLmNsZWFyKGl0ZW1FbnRyeSk7XG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNsZWFyUmVzb3VyY2VzKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jbGVhclJlc291cmNlcyhpdGVtRW50cnkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKGlzU3ViVGFiQ2hhbmdlKTtcblx0XHR9KTtcblxuXHRcdC8vIFRPRE86IHJlbW92ZSB0aGlzIGNvbmRpdGlvbiBvbmNlIGNyZXcgYW5kIHRyYW5zcG9ydCBhcmUgbm8gbG9uZ2VyIGxvYWRlZCBpbiBzZXBlcmF0ZSBncmlkIGluc3RhbmNlcyBpbiB0aGUgcHJvamVjdCBwbGFubmVyIGdyaWRcblx0XHRpZiAoIWlzU3ViVGFiQ2hhbmdlKVxuXHRcdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcigpO1xuXHR9XG5cblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGZvciAoY29uc3Qgb2xkSXRlbUlkIGluIGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHR0aGlzLml0ZW1zLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG9sZEl0ZW1JZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNldE1vZGlmaWVkKGl0ZW1FbnRyeSkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaCgoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSkpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0pIDpcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmV2ZXJ0Q2hhbmdlcygpO1xuXG5cdFx0aWYgKCFvcHRpb25zLmVkaXRJdGVtcylcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIHRoZXNlIGFyZSBlZGl0IHJlc291cmNlcyAoZWRpdEl0ZW1zKVxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkl0ZW0gb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc2V0TW9kaWZpZWQoY29sbGVjdGlvbkl0ZW0pO1xuXHR9XG5cblx0X2hhc0NoYW5nZXMgKCkge1xuXHRcdGlmICghdGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzO1xuXHR9XG5cblx0ZGV0ZWN0Q2hhbmdlcyAoKSB7XG5cdFx0aWYgKHRoaXMuaXRlbXMuc29tZSgoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpO1xuXHRcdH0pKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9ucy5zb21lKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH0pO1xuXHR9XG5cblx0Y29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXQgJiYgKGNvbGxlY3Rpb25FbnRyeS5oYXNBZGRlZEl0ZW1zKCkgfHwgY29sbGVjdGlvbkVudHJ5Lmhhc1JlbW92ZWRJdGVtcygpKSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIG9wdGlvbnMuZWRpdEl0ZW1zICYmIGNvbGxlY3Rpb25FbnRyeS5oYXNVcGRhdGVkSXRlbXMoKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKCkge1xuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9ja2FibGUodGhpcy5yb290SXRlbSk7XG5cdH1cblxuXHRzYXZlIChjbG9zZVRhYiA9IGZhbHNlLCBwYXJhbWV0ZXJzLCBicmVha1VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtKSA6IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpKS50aGVuKFxuXHRcdFx0bG9ja1Rva2VuID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25CZWZvcmVTYXZlJywgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25PcHRpb25zLFxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihjb252ZXJzaW9uTWFwID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKHRoaXMucm9vdEl0ZW0pO1xuXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVTdWNjZXNzJywgY29udmVyc2lvbk1hcCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywgY29udmVyc2lvbk1hcCwgdHJ1ZSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGV4ZWN1dGVDYWxsYmFja3MgKGV2ZW50LCAuLi5hcmdzKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FsbGJhY2tzW2V2ZW50XSlcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2sodGhpcy5yb290SXRlbSk7XG5cdFx0XHR9LFxuXHRcdFx0MzAwMFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGVuYWJsZVdhdGNoZXIgKCkge1xuXHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkXG5cdCAqL1xuXHRkaXNhYmxlV2F0Y2hlciAoKSB7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0fVxuXG5cdHJlZ2lzdGVyQ2FsbGJhY2sgKGV2ZW50OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0ZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldO1xuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlJztcbmltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCBMb2NrU2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9Mb2NrU2VydmljZVwiO1xuaW1wb3J0IExvY2FsQ2FjaGUgZnJvbSBcIi4uL2NsYXNzZXMvTG9jYWxDYWNoZVwiO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IGZyb20gXCIuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbUNhY2hlRmFjdG9yeSBmcm9tIFwiLi9JdGVtQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VGYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoKSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbENhY2hlKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgQXBpRm9ybWF0dGVyIGZyb20gJy4vY2xhc3Nlcy9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi9jbGFzc2VzL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSBmcm9tICcuL2NsYXNzZXMvQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XG5pbXBvcnQgQ29sdW1uQ2FjaGUgZnJvbSBcIi4vY2xhc3Nlcy9Db2x1bW5DYWNoZVwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSAnLi9jbGFzc2VzL0NvbHVtbkhhbmRsZXInO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSAnLi9jbGFzc2VzL0NvbHVtblV0aWwnO1xuaW1wb3J0IEl0ZW1BZG1pbmlzdHJhdG9yIGZyb20gJy4vY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvcic7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSAnLi9jbGFzc2VzL0l0ZW1IYW5kbGVyJztcbmltcG9ydCBJdGVtUmVxdWVzdFNlcnZpY2UgZnJvbSBcIi4vY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2VcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2VTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9LZXlTZXJ2aWNlJztcbmltcG9ydCBMb2NrU2VydmljZSBmcm9tIFwiLi9jbGFzc2VzL0xvY2tTZXJ2aWNlXCI7XG5pbXBvcnQgUXVlcnlTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9RdWVyeVNlcnZpY2UnO1xuaW1wb3J0IFNvY2tldE1lc3NhZ2VIYW5kbGVyIGZyb20gJy4vY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlcic7XG5pbXBvcnQgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IGZyb20gJy4vZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XG5pbXBvcnQgQmF0Y2hTdGF0dXNGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9CYXRjaFN0YXR1c0ZhY3RvcnlcIjtcbmltcG9ydCBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsZXJGYWN0b3J5XCI7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBDcmVhdGVSZXF1ZXN0RmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ3JlYXRlUmVxdWVzdEZhY3RvcnlcIjtcbmltcG9ydCBJdGVtQ2FjaGVGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbUVudHJ5RmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZUZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5XCI7XG5pbXBvcnQgUXVlcnlNYXRjaGVyRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeVwiO1xuaW1wb3J0IFF1ZXJ5UGFyc2VyRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5XCI7XG5pbXBvcnQgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgTG9jYWxDYWNoZUZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5XCI7XG5cbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEF1dGhJbnRlcmZhY2UgZnJvbSAnLi9pbnRlcmZhY2VzL0F1dGhJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSBmcm9tICcuL2ludGVyZmFjZXMvTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSbUNvcmUge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cblx0aXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0Y29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZTtcblx0Y29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZTtcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcblxuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNoYW5nZXNDb21waWxlckZhY3Rvcnk6IENoYW5nZXNDb21waWxlckZhY3Rvcnk7XG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcblx0Y29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxlckZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblxuXHQvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGgqL1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4wLjI4JztcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyID0gbmV3IEFwaUZvcm1hdHRlcigpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UsIHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSA9IG5ldyBJdGVtRW50cnlTZXJ2aWNlKHRoaXMuYXBpRm9ybWF0dGVyLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XG5cblx0XHR0aGlzLmxvY2tTZXJ2aWNlID0gbmV3IExvY2tTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5rZXlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UpO1xuXHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5ID0gbmV3IEJhdGNoU3RhdHVzRmFjdG9yeShwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMuY29sdW1uQ2FjaGUsIHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoKTtcblx0XHR0aGlzLml0ZW1IYW5kbGVyID0gbmV3IEl0ZW1IYW5kbGVyKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGF1dGhJbnRlcmZhY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtRW50cnlGYWN0b3J5LCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuaXRlbUNhY2hlRmFjdG9yeSwgdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksIHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMuYXBpRm9ybWF0dGVyLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLnF1ZXJ5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSA9IG5ldyBRdWVyeVBhcnNlckZhY3RvcnkoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkoZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMua2V5U2VydmljZSwgdGhpcy5xdWVyeVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlciA9IG5ldyBDb2xsZWN0aW9uSGFuZGxlcihlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5rZXlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlLCB0aGlzLnF1ZXJ5U2VydmljZSwgdGhpcy5jb2x1bW5VdGlsKTtcblxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5ID0gbmV3IENyZWF0ZVJlcXVlc3RGYWN0b3J5KHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxlckZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSh0aGlzLml0ZW1FbnRyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSwgdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5hcGlGb3JtYXR0ZXIsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLCB0aGlzLmFwaUZvcm1hdHRlciwgdGhpcy5sb2NrU2VydmljZSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgdGhpcy5rZXlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlLCB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5sb2NrU2VydmljZSwgdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIHRoaXMuaXRlbUNhY2hlRmFjdG9yeSwgdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMuaXRlbVJlc291cmNlU2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkodGhpcy5pdGVtRW50cnlTZXJ2aWNlKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgbG9jYWxDYWNoZU1hbmFnZXIsIGF1dGhJbnRlcmZhY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSwgdGhpcy5sb2NhbENhY2hlRmFjdG9yeSwgdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UsIHRoaXMucXVlcnlTZXJ2aWNlKTtcblxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIocHJvbWlzZUludGVyZmFjZSwgdGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5hcGlGb3JtYXR0ZXIsIGVycm9ySGFuZGxlckludGVyZmFjZSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
6713
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sbGVjdGlvblJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblV0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUFkbWluaXN0cmF0b3IudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9CYXRjaFN0YXR1cy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzQ29tcGlsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5FeHBhbnNpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtblNldC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ3JlYXRlUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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QixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxuXHRcdHJldHVybiB0cnVlO1xuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0UHJvcGVydHkgKG9iamVjdCkge1xuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxuXHRcdHJldHVybiBrZXk7XG5cblx0cmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XG5cdGZvciAoY29uc3QgaGF5IG9mIGhheXN0YWNrKSB7XG5cdFx0Ly8gdHNsaW50OmRpc2FibGU6dHJpcGxlLWVxdWFsc1xuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheSAoc291cmNlLCBjYWxsYmFjaykge1xuXHRjb25zdCBmaWx0ZXJlZCA9IFtdO1xuXG5cdGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZSkge1xuXHRcdGlmIChjYWxsYmFjayhzcmMpKVxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xuXHR9XG5cblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0ZW1wdHlBcnJheShzb3VyY2UpO1xuXG5cdGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcmVkKVxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFycmF5IChhcnJheSkge1xuXHRhcnJheS5zcGxpY2UoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcblx0aWYgKHR5cGVvZiBzb3VyY2UgPT09ICd1bmRlZmluZWQnKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdGlmICh0eXBlb2Ygc291cmNlW3BdID09PSAndW5kZWZpbmVkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHNvdXJjZSA9IHNvdXJjZVtwXTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0aCAob2JqZWN0LCBwYXRoLCBkZWZhdWx0cykge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHBhdGhbaV07XG5cblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b2JqZWN0W3ZhbHVlXSA9IGRlZmF1bHRzW2ldO1xuXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcblx0fVxuXG5cdHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3QsIHBhdGgsIGNyZWF0ZSA9IGZhbHNlKSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXG5cblx0XHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgJiYgIWNyZWF0ZSlcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKU1xuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcblxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xuXHRyZXR1cm4gISEobm9kZSAmJlxuXHRcdChcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxuXHRcdClcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcblx0aWYgKG8xID09PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG5cblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuXG5cdGxldCBsZW5ndGg7XG5cdGxldCBrZXk7XG5cdGxldCBrZXlTZXQ7XG5cblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcblx0XHRcdGlmICghaXNBcnJheShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xuXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xuXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xuXG5cdGlmIChkZXN0aW5hdGlvbikge1xuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xuXHRcdH1cblxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3Rcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcblx0XHR9XG5cblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xuXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcblx0fVxuXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcblxuXHRmdW5jdGlvbiBjb3B5UmVjdXJzZSAoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpIHtcblx0XHRfbWF4RGVwdGgtLTtcblxuXHRcdGlmIChfbWF4RGVwdGggPCAwKVxuXHRcdFx0cmV0dXJuICcuLi4nO1xuXG5cdFx0aWYgKGlzQXJyYXkoX3NvdXJjZSkpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKF9zb3VyY2UgJiYgdHlwZW9mIF9zb3VyY2UuaGFzT3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdGlmIChfc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcblx0XHRpZiAoIWlzT2JqZWN0KF9zb3VyY2UpKVxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XG5cblx0XHQvLyBBbHJlYWR5IGNvcGllZCB2YWx1ZXNcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XG5cblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xuXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xuXHRcdH1cblxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBuZWVkc1JlY3Vyc2Vcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XG5cdFx0c3dpdGNoICh0b1N0cmluZy5jYWxsKF9zb3VyY2UpKSB7XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDMyQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQzMkFycmF5XSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6XG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XG5cdFx0XHRcdFx0Ly8gSWYgd2UncmUgaW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIEFycmF5QnVmZmVyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcblx0XHRcdFx0XHRuZXcgVWludDhBcnJheShjb3BpZWQpLnNldChuZXcgVWludDhBcnJheShfc291cmNlKSk7XG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IERhdGVdJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XG5cblx0XHRcdFx0cmUubGFzdEluZGV4ID0gX3NvdXJjZS5sYXN0SW5kZXg7XG5cblx0XHRcdFx0cmV0dXJuIHJlO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xuXHRcdH1cblxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xuXHRcdFx0cmV0dXJuIF9zb3VyY2UuY2xvbmVOb2RlKHRydWUpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xuXHRNT01FTlRfSU5WQUxJRCA9ICdJbnZhbGlkIGRhdGUnO1xuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xuXHRTRVJWRVJfREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG5cblx0Y29uc3RydWN0b3IgKCkge1xuXG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZSAoZmllbGRzLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xuXHRcdH1cblx0fVxuXG5cdGV4cGFuZFJlc3BvbnNlIChjdXJyZW50LCBleHBhbmRlZCwgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0IChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xuXHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogbW9kaWZpZWRbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb3B5RmllbGRzIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNoYWxsb3dDb3B5RmllbGRzIChzaGFsbG93U291cmNlLCBkZWVwU291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSBzaGFsbG93U291cmNlW2NvbHVtblBhdGhdICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Y29tcGFyZUZpZWxkcyAoY29sdW1uVHlwZSwgZmlyc3QsIHNlY29uZCkge1xuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHNlY29uZCA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlTW9tZW50T2JqZWN0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2lkJzogLy8gaWQgdHlwZXNcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09IHNlY29uZDsgLy8gdXNlIG5vbi1zdHJpY3QgY29tcGFyaXNvblxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6IC8vIHN0cmluZyB0eXBlc1xuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT09IHNlY29uZDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0fVxuXHR9XG5cblx0Y29tcGFyZUZsb2F0cyAoYSwgYikge1xuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XG5cdFx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKGEgLSBiKTtcblxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcblxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcblx0XHRpZiAoYSA9PT0gYikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxuXHRcdFx0Ly8gcmVsYXRpdmUgZXJyb3IgaXMgbGVzcyBtZWFuaW5nZnVsIGhlcmVcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlIHJlbGF0aXZlIGVycm9yXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3QsIHNlY29uZCkge1xuXHRcdGlmICghZmlyc3QuaXNWYWxpZCgpKVxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xuXG5cdFx0aWYgKCFzZWNvbmQuaXNWYWxpZCgpKVxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxuXG5cdFx0cmV0dXJuIGZpcnN0LmlzU2FtZShzZWNvbmQpO1xuXHR9XG5cblx0Y29tcGFyZUR1cmF0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvIDEwMDAwMDA7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZVRpbWUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdER1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gbW9tZW50LmludmFsaWQoKSA6IG1vbWVudCh2YWx1ZSk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZUR1cmF0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFVElNRV9GT1JNQVQpIDogbnVsbDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7XG5cdH1cblxuXHRnZXREZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdkb3VibGUnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuICcwJztcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKCk7XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXG5cdFx0XHQvLyBcdFx0XHRcdFx0dXJsXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cblx0XHRcdC8vIFx0XHRcdFx0XHRkYXRhXG5cdFx0fVxuXHR9XG5cblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWRlbnRpdHk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb24pIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcblx0fVxuXG5cdGNsb25lRGF0ZSAoZGF0ZSkge1xuXHRcdHJldHVybiBkYXRlLmNsb25lKCk7XG5cdH1cblxuXHRpZGVudGl0eSAoaW5wdXQpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgZnJvbSAnLi4vZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgQXBpUmVzcG9uc2VQcm9jZXNzb3IgZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgdmFsdWVzOiBhbnksIHBhcmVudFR5cGU/OiBzdHJpbmcsIHBhcmVudElkPzogbnVtYmVyKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcblx0fVxuXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogbnVtYmVyW10pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtczogb2JqZWN0LCBjb2x1bW5zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcblx0fVxuXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2U8YW55Pik6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xuXHR9XG5cblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBzdHJpbmcsIHBhcmVudElkOiBudW1iZXIsIGl0ZW1zOiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogc3RyaW5nLCBjb2x1bW5zOiBvYmplY3QsIHBhcmFtcz86IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xuXHR9XG5cblx0cXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBvYmplY3QsIGNvbHVtbnM6IG9iamVjdCwgYWxsTGlua3M/OiBib29sZWFuLCBsaW1pdD86IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgYWxsTGlua3MsIGxpbWl0KSk7XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHJlcXVlc3QudGhlbihyZXNwb25zZSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcblx0fVxufVxuIiwiaW1wb3J0IFF1ZXJ5UGFyc2VyRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IFF1ZXJ5U2VydmljZSBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb25FbnRyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRjb2x1bW5zOiBbXSxcblx0XHRcdFx0cXVlcnk6IG51bGwsXG5cdFx0XHRcdHF1ZXJ5SXRlbVR5cGU6IG51bGwsXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7fSxcblx0XHRcdFx0cGFyZW50OiBudWxsLFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxuXHRcdFx0XHRsaW1pdDogbnVsbCxcblx0XHRcdFx0ZW50cnlLZXk6ICcnLFxuXHRcdFx0XHRhZGRMb2NhbEl0ZW1zOiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0bGV0IHF1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7IGxpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiB7IGlkOiAnJnBhcmVudElkJyB9IH07XG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihvcHRpb25zLnF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChxdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcblxuXHRcdHJldHVybiB7IG9iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV0gfTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBudW1iZXJbXSB7XG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XG5cdCAqXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbUVudHJ5KSlcblx0XHRcdFx0ZmlsdGVyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmVtb3ZlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xuXHRDQUNIRUQgPSAnY2FjaGVkJyxcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdExPQ0FMID0gJ2xvY2FsJ1xufVxuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonOyIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBRdWVyeVBhcnNlckZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnlcIjtcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSBcIi4uL2luZGV4XCI7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvSXRlbVJlc291cmNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkNhY2hlIGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UgZnJvbSBcIi4vQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSBcIi4vQ29sdW1uVXRpbFwiO1xuaW1wb3J0IEl0ZW1DYWNoZSBmcm9tIFwiLi9JdGVtQ2FjaGVcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1SZXF1ZXN0U2VydmljZSBmcm9tIFwiLi9JdGVtUmVxdWVzdFNlcnZpY2VcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCBFbnRyeVN0YXR1cyxcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwXG59IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKHN0YXR1c1Jlc291cmNlOiBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEXTtcblx0XHRjb25zdCBwcm9taXNlZEV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkRXhwYW5kKVxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzIChzdGF0dXNSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV0pXG5cdFx0XHRyZXN1bHQucHVzaChwYXJlbnRJZCk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5FWFBBTkRdKVxuXHRcdFx0cmVzdWx0LnB1c2gocGFyZW50SWQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPywgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgaWRBcnJheSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0YWRkSXRlbXNUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRUb0NvbGxlY3Rpb25zKHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcyksIGZhbHNlKTtcblx0fVxuXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxuXHRhZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCByZXN1bHRSZXNvdXJjZTogSXRlbVJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQgKHBhcmVudFR5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLCBuZXdDb2x1bW5zKTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VbXT4ge1xuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheSA9IFtdO1xuXHRcdGxldCBpdGVtRW50cmllcyA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKHBhcmVudElkKTtcblxuXHRcdFx0aXRlbUVudHJpZXMgPSBpdGVtRW50cmllcy5jb25jYXQoY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5Lml0ZW1zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0bmV3Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS51cGRhdGVDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRiYXRjaEV4dGVuZCAoXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9ucyxcblx0XHRxdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcblx0XHRyZXR1cm5BbGxJdGVtcyA9IGZhbHNlXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlSXRlbUlkTWFwPiB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oe30pO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheSA9IFtdO1xuXHRcdGxldCBpdGVtSWRBcnJheSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaChwYXJlbnRJZCk7XG5cblx0XHRcdGl0ZW1JZEFycmF5ID0gaXRlbUlkQXJyYXkuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5nZXRJZEFycmF5KCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4oaXRlbUlkQXJyYXkpXG5cdFx0XHQpLFxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRiYXRjaEZldGNoIChcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXG5cdFx0cGFyZW50SWRBcnJheTogbnVtYmVyW10sXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcblx0XHRvcHRpb25zLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IHJlc291cmNlID0gdGhpcy5jcmVhdGVTdGF0dXNSZXNvdXJjZShwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucywgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHRoaXMuZ2V0UHJvbWlzZXMocmVzb3VyY2UpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gdGhpcy5nZXRSZXF1ZXN0SWRzKHJlc291cmNlKTtcblxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdFx0XHRcdG51bGwgOlxuXHRcdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKVswXSxcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UocmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGhhc1Byb3BlcnRpZXMocmVzb3VyY2VbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpLnRoZW4oXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXNvdXJjZVtFTlRSWV9TVEFUVVMuQ0FDSEVEXTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbG9uZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGNvbnZlcnNpb25NYXAgPSB7fSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XG5cdFx0Y29uc3QgY2xvbmVkSXRlbXMgPSBbXTtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXBFbnRyeSA9IGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdO1xuXG5cdFx0Ly8gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdCAoZGVwZW5kZW5jaWVzKVxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcylcblx0XHRcdGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtLml0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbXMpIHtcblx0XHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5jbG9uZUl0ZW0oXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRjb252ZXJzaW9uTWFwXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAob3B0aW9ucy5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdGNsb25lZEVudHJ5LnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0XHRjbG9uZWRJdGVtcy5wdXNoKGNsb25lZEVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jcmVhdGUoaXRlbVR5cGUsIG9wdGlvbnMsIGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zLCBjbG9uZWRJdGVtcyk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMsIGNvbHVtbnMsIGl0ZW1zOiBJdGVtRW50cnlbXSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcy5hZGQoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0KVxuXHRcdCkucmVzb2x2ZShcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRcdFx0aXRlbXM6IGl0ZW1zXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8vIFRPRE8gYWRkIHR5cGVcblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIHJlc3VsdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlU3RhdHVzUmVzb3VyY2UgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRwYXJlbnRJZEFycmF5OiBudW1iZXJbXSxcblx0XHRpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyB1c2UgcHJvY2Vzc0VudHJ5T3B0aW9ucyB0byBjbG9uZVxuXG5cdFx0XHRsZXQgc3RhdHVzUmVzb3VyY2U7XG5cblx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9O1xuXG5cdFx0XHRzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucywgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXG5cdFx0XHRyZXN1bHRbc3RhdHVzUmVzb3VyY2Uuc3RhdHVzXVtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kQ29sbGVjdGlvbk1hcCAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0YWNjdW11bGF0b3IsXG5cdFx0Y29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUgPSB0aGlzLmVudHJpZXNcblx0KTogdm9pZCB7XG5cdFx0Ly8gdG9kbzogcGFyZW50IHR5cGVcblx0XHRjb25zdCBwYXJlbnQ6IGFueSA9IGl0ZW1FbnRyeS5wYXJlbnQgIT09IG51bGwgPyBpdGVtRW50cnkucGFyZW50IDoge307XG5cblx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUZpdHRpbmdJdGVtKFxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0cGFyZW50Lml0ZW1JZCxcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zW3N0YXR1c10pIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3JbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgZml0dGluZzogW10sIG5vdGZpdHRpbmc6IFtdLCBtYXliZTogW119O1xuXG5cdFx0XHRcdGFjY3VtdWxhdG9yW2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gaXRlbUVudHJ5IDogaXRlbUVudHJ5Lml0ZW1JZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMsIGl0ZW1DYWNoZTogSXRlbUNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xuXG5cdFx0c3dpdGNoIChzdGF0dXNSZXNvdXJjZS5zdGF0dXMpIHtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihlbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Ly8gYmVjYXVzZSB0aGUgY29sbGVjdGlvbiBlbnRyeSBpcyBub3QgZnVsbHkgbG9hZGVkIHlldCwgd2UnbGwgaGF2ZSB0byByZWx5IG9uIHRoZSBvcHRpb25zXG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cdFx0Y29uc3QgZW50cnlDb2x1bW5zID0gZW50cnlPcHRpb25zLmNvbHVtbnM7XG5cblx0XHRsZXQgaXNDb2x1bW5TdWJzZXQgPSBmYWxzZTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cdFx0XHRlbnRyeU9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucywgZW50cnlDb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRcdHN0YXR1czogY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5MT0NBTCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChlbnRyeUNvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGNvbnNvbGUud2FybignQ29sdW1uczogdHJ1ZSBmb3IgY29sbGVjdGlvbnMgaXMgZGVwcmVjYXRlZCEnKTtcblx0XHRcdGlzQ29sdW1uU3Vic2V0ID0gdHJ1ZTtcblx0XHR9IGVsc2Vcblx0XHRcdGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KG9wdGlvbnMuY29sdW1ucywgZW50cnlDb2x1bW5zLCBmYWxzZSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHN0YXR1czogaXNDb2x1bW5TdWJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXG5cdFx0fTtcblx0fVxuXG5cdGdldEVudHJ5U3RhdHVzIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhY2hlZEVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdGlmIChjYWNoZWRFbnRyeSA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLmdldE5ld0VudHJ5U3RhdHVzKGl0ZW1UeXBlLCBxdWVyeSwgb3B0aW9ucywgZGVmZXJyZWRFbnRyaWVzKTtcblxuXHRcdGlmIChjYWNoZWRFbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGNhY2hlZEVudHJ5LCBvcHRpb25zKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogY2FjaGVkRW50cnksXG5cdFx0XHRzdGF0dXM6IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChvcHRpb25zLmNvbHVtbnMsIGNhY2hlZEVudHJ5LmNvbHVtbnMucmVxdWVzdCwgY2FjaGVkRW50cnkuY29sdW1ucy50cnVlKSA/XG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5DQUNIRUQgOiBFTlRSWV9TVEFUVVMuRVhQQU5EXG5cdFx0fTtcblx0fVxuXG5cdGdldE5ld0VudHJ5U3RhdHVzIChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeSwgb3B0aW9ucywgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXHRcdGxldCBkZWZlcnJlZE9wdGlvbnM7XG5cblx0XHRpZiAob3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZCh0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKSksXG5cdFx0XHRcdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWRPcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cdFx0XHRkZWZlcnJlZE9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGRlZmVycmVkT3B0aW9ucy5jb2x1bW5zLCBvcHRpb25zLmNvbHVtbnMpLm1lcmdlZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpOyAvLyB3aWxsIGFsc28gYWRkIHRoZSBkZWZlcnJlZCBlbnRyeVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRzdGF0dXM6IGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdH07XG5cdH1cblxuXHRoYW5kbGVCYXRjaFJlc3BvbnNlIChzdGF0dXNSZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmNhY2hlZClcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5jYWNoZWRbcGFyZW50SWRdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlKSB7XG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZVtwYXJlbnRJZF0ucmVzb2x2ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5UmVzb3VyY2UuY29sdW1uc1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmV4cGFuZFtwYXJlbnRJZF07XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS51cGRhdGVDb2x1bW5zKGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5sb2NhbCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5sb2NhbFtwYXJlbnRJZF07XG5cblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGl0ZW1zOiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQoIC8vIFRPRE86IHVzZSB0YWIgY2FjaGU/XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50Lml0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cGFyZW50SWQsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeVJlc291cmNlLmNvbHVtbnNcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkXG5cdCAqL1xuXHRyZW1vdmVJdGVtc0Zyb21BbmRBZGRJdGVtc1RvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKFxuXHRcdFx0dGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyaWVzKSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0Ly8gVE9ETzogbWF5YmVcblx0cmVtb3ZlSXRlbXNGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUZyb21Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcyksXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHRyZXNvbHZlTG9jYWwgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcblxuXHRcdGxldCBjb2x1bW5JbmZvO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxuXHRcdFx0XHRcdGNvbHVtbkluZm9cblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyaWVzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0b3B0aW9ucy5hZGRMb2NhbEl0ZW1zID9cblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpIDpcblx0XHRcdFx0XHRcdFx0XHRbXVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtbkluZm9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gXCIuLi9pbmRleFwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1SZXNvdXJjZVwiO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0ZWRpdEl0ZW1zOiBmYWxzZSxcblx0XHRcdFx0ZWRpdENvbGxlY3Rpb246IGZhbHNlLFxuXHRcdFx0XHRtb2RJbnN0YW50OiBmYWxzZSxcblx0XHRcdFx0ZW5hYmxlU2F2ZTogdHJ1ZSxcblx0XHRcdFx0b25JdGVtc0NyZWF0ZWQ6IG5vb3AsXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLCAvLyBuZWVkZWQgZm9yIGNvbXBhcmlzb25cblx0XHRcdFx0b25BZGQ6IG5vb3AsXG5cdFx0XHRcdG9uUmVtb3ZlOiBub29wLFxuXHRcdFx0XHRvbkFkZEluaXRpYWw6IG5vb3AsXG5cdFx0XHRcdG9uUmVtb3ZlSW5pdGlhbDogbm9vcCxcblx0XHRcdFx0b25EZWFjdGl2ZWF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxuXHRcdFx0XHRvbkRlYWN0aXZhdGVDb2xsZWN0aW9uOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcblx0XHRcdFx0cmVzb3VyY2VLZXk6IG51bGwsIC8vIFRPRE86IHJlbW92ZVxuXHRcdFx0XHRjbGVhck9uVGFiQ2hhbmdlOiB0cnVlLFxuXHRcdFx0XHRjbGVhck9uU3ViVGFiQ2hhbmdlOiB0cnVlLFxuXHRcdFx0XHRjdXN0b206IG51bGxcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCBDb2x1bW5VdGlsIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtbkNhY2hlIHtcblx0Y2FjaGUgPSB7fTtcblx0YWxsQ29sdW1ucyA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xuXHRcdGlmICh0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5jYWNoZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGlmIChlbnRyeVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIGVudHJ5W2NvbHVtbklkXTtcblx0fVxuXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTogeyBtaXNzaW5nOiBhbnlbXSB8IHRydWUsIGNhY2hlZDogb2JqZWN0IH0ge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0XHRyZXR1cm4ge2NhY2hlZDogdGhpcy5nZXRDb2x1bW5zKGl0ZW1UeXBlKSwgbWlzc2luZzogW119O1xuXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge21pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvciwgY2FjaGVkOiByZXBvbnNlQWNjdW11bGF0b3J9O1xuXHR9XG5cblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XG5cdH1cblxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBjb2x1bW5zO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcikge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ1JlcXVlc3QgPSB7fTtcblx0XHRtaXNzaW5nUmVxdWVzdFtjb2x1bW4uaWRdID0gbWlzc2luZ0Rlcml2ZWQ7XG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gobWlzc2luZ1JlcXVlc3QpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xuXHRcdGlmICh0aGlzLmNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGVbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0fVxufVxuIiwiaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbHVtbkNhY2hlIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSAnLi9Db2x1bW5VdGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXMpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cdFx0Y29uc3QgaXRlbVR5cGVNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKSB7XG5cdFx0XHRjb25zdCBsZW5ndGggPSBwcm9taXNlcy5wdXNoKHRoaXMuZmV0Y2goaXRlbVR5cGUsIFsnaWQnXSkpO1xuXG5cdFx0XHRpdGVtVHlwZU1hcFtpdGVtVHlwZV0gPSBsZW5ndGggLSAxO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1UeXBlTWFwW2ldO1xuXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IsIFJFTkRFUl9BU19TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBjb3B5LCBleHRlbmQsIGdldEZpcnN0UHJvcGVydHksIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtblV0aWwge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zLCByZW5kZXJBcykge1xuXHRcdGxldCBzZXBlcmF0b3IgPSAnJztcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRyZXN1bHQgKz0gc2VwZXJhdG9yICsgY29sdW1uLmlkO1xuXHRcdFx0c2VwZXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcblx0XHR9XG5cblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXG5cdFx0XHRyZXN1bHQgKz0gUkVOREVSX0FTX1NFUEVSQVRPUiArIHJlbmRlckFzO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlKSB7XG5cdFx0Y29uc3Qgbm93ID0gbW9tZW50KCk7XG5cblx0XHRjb25zdCBmb3JtYXRzID0ge1xuXHRcdFx0J0otTS1ZJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWScpLFxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXG5cdFx0XHQnRCtqK0YrWSc6IG5vdy5mb3JtYXQoJ2RkZGQgRCBNTU0gWVlZWScpLFxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0J0QnOiBub3cuZm9ybWF0KCdkZGRkJyksXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXG5cdFx0fTtcblxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcblx0XHRcdFx0J0otTS1ZK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVkgSEg6bW0nKSxcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXG5cdFx0XHRcdCdEK2orRitZK0g6aSc6IG5vdy5mb3JtYXQoJ2RkZGQgREQgTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJyksXG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiBmb3JtYXRzO1xuXHR9XG5cblx0aXNTdHJpbmdDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0Ly8gY2FzZSAnaHRtbCc6IC8vIFRPRE86IHNvcnQgb24gZmlsdGVyZWQgdmFsdWVcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ludENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNOdW1iZXJDb2x1bW4gKGNvbHVtbikge1xuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XG5cdH1cblxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XG5cdH1cblxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNEYXRlQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdC8vIHVnbHkgaGFjayA6LShcblx0XHRpZiAoY29sdW1uLmlkID09PSAnc3RhZmZlbCcpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGlmIChjb2x1bW4uZ2VuZXJhdG9yICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jsb2InOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdmb3JjZXVwZGF0ZSc6XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxuXHRcdFx0Y2FzZSAndG9rZW4nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XG5cdFx0Ly8gdHNsaW50OmRpc2FibGU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbikge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdFx0cmV0dXJuIDAuNTtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gMS41O1xuXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmV0dXJucyB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmRcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHNlY29uZFRydWU7XG5cblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgZmlyc3QpIHtcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcblx0XHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcblx0ICovXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcblxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XG5cblx0XHRjb25zdCBtZXJnZWQgPSBjb3B5KGZpcnN0KTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBzZWNvbmQpIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xuXHRcdFx0XHRbY29sdW1uLmlkXTogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcblx0XHR9O1xuXHR9XG5cblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKSB7XG5cdFx0Y29uc3QgaXNMZWFmID0gdHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGNvbHVtbklkLFxuXHRcdFx0Y2hpbGRyZW46IGlzTGVhZiA/IFtdIDogcmVxdWVzdENvbHVtbltjb2x1bW5JZF1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKHNlY29uZFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gZmlyc3RbaXRlbVR5cGVdO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBtZXJnZVJlc3VsdCA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbk1hcChcblx0XHRcdFx0Zmlyc3RbaXRlbVR5cGVdLFxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXG5cdFx0XHQpO1xuXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xuXHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5kaWZmZXJlbmNlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gc2Vjb25kKSB7XG5cdFx0XHRpZiAoZmlyc3RbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge2FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge29iamVjdH0gZGlmZmVyZW5jZTogdGhlIGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbk1hcCAoZmlyc3QsIHNlY29uZCkge1xuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gZmlyc3QpXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdFx0ZGlmZmVyZW5jZVtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0aXNMb2NhbENvbHVtbklkIChjb2x1bW5JZCkge1xuXHRcdHJldHVybiBjb2x1bW5JZC5zdWJzdHJpbmcoMCwgMikgPT09ICdfXyc7XG5cdH1cblxuXHRwcm9jZXNzQ29uZmlnQ29sdW1ucyAoY29sdW1ucykge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XG5cdH1cblxuXHRwcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIHJlbW90ZUNvbHVtbkNhbGxiYWNrLCBsb2NhbENvbHVtbkNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgbG9jYWxDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgbG9jYWxDb2x1bW4gb2YgbG9jYWxDb2x1bW5zKVxuXHRcdFx0bG9jYWxDb2x1bW5NYXBbbG9jYWxDb2x1bW4uaWRdID0gbG9jYWxDb2x1bW47XG5cblx0XHRmb3IgKGNvbnN0IGNvbmZpZ0lkIG9mIGNvbmZpZ0NvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHBhcnNlZENvbmZpZ0lkID0gY29uZmlnSWQuc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUik7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0lkWzBdO1xuXG5cdFx0XHRpZiAoIXRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbklkKSkge1xuXHRcdFx0XHRyZW1vdGVDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgY29sdW1uSWQsIHBhcnNlZENvbmZpZ0lkWzFdKTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gY29sdW1uIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gbG9jYWxDb2x1bW5zXG5cdFx0XHRpZiAobG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsb2NhbENvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0pO1xuXHRcdFx0ZGVsZXRlIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXTtcblx0XHR9XG5cdH1cblxuXHRjb25zb2xpZGF0ZUNvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgYWRkUmVxdWVzdENvbHVtbnMpIHtcblx0XHRjb25zdCBmaWx0ZXJlZExvY2FsQ29sdW1ucyA9IFtdO1xuXHRcdGxldCByZXF1ZXN0Q29sdW1ucyA9IGNvcHkoYWRkUmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0dGhpcy5wcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zKFxuXHRcdFx0Y29uZmlnQ29sdW1ucyxcblx0XHRcdGxvY2FsQ29sdW1ucyxcblx0XHRcdChjb25maWdJZCwgY29sdW1uSWQpID0+IHtcblx0XHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKGNvbHVtbklkLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0KGNvbmZpZ0lkLCBsb2NhbENvbHVtbikgPT4ge1xuXHRcdFx0XHRmaWx0ZXJlZExvY2FsQ29sdW1ucy5wdXNoKGxvY2FsQ29sdW1uKTtcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0bG9jYWxDb2x1bW4udmFsdWVPcHRpb25zLnJlcXVlc3RDb2x1bW5zXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4ge3JlcXVlc3Q6IHJlcXVlc3RDb2x1bW5zLCBsb2NhbDogZmlsdGVyZWRMb2NhbENvbHVtbnN9O1xuXHR9XG5cblx0cGFyc2VDb25maWdDb2x1bW4gKGNvbHVtbikge1xuXHRcdHJldHVybiBjb2x1bW4uc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUilbMF0uc3BsaXQoQ09MVU1OX1NFUEVSQVRPUik7XG5cdH1cblxuXHRwcm9jZXNzQ29uZmlnQ29sdW1uIChjb2x1bW5BcnJheSwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xuXHRcdGNvbnN0IGlzTGVhZiA9IGNvbHVtbkFycmF5Lmxlbmd0aCA9PT0gMTtcblxuXHRcdGlmIChpc0xlYWYpIHtcblx0XHRcdGlmIChkZXN0aW5hdGlvbi5pbmRleE9mKGNvbHVtbklkKSA9PT0gLTEpXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uT2JqZWN0KGNvbHVtbklkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XG5cdFx0XHRjb2x1bW5JbmRleCA9IGRlc3RpbmF0aW9uLnB1c2goe1xuXHRcdFx0XHRbY29sdW1uSWRdOiBbXVxuXHRcdFx0fSkgLSAxO1xuXHRcdH1cblxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcblx0XHRcdGNvbHVtbkFycmF5LnNsaWNlKDEpLFxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbklkXVxuXHRcdCk7XG5cdH1cblxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShhcnJheVtpXSkgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBhcnJheVtpXTtcblxuXHRcdFx0aWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmIChjb2x1bW4gPT09IGNvbHVtbklkKVxuXHRcdFx0XHRcdHJldHVybiBpO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShjb2x1bW4pID09PSBjb2x1bW5JZClcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIC0xO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeVwiO1xuaW1wb3J0IExvY2FsQ2FjaGVGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBBdXRoSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXV0aEludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0xvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2UgZnJvbSAnLi4vbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZSc7XG5pbXBvcnQgSXRlbVJlc291cmNlIGZyb20gJy4uL21vZGVscy9JdGVtUmVzb3VyY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4vQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XG5pbXBvcnQgSXRlbUNhY2hlIGZyb20gJy4vSXRlbUNhY2hlJztcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5pbXBvcnQgSXRlbVJlcXVlc3RTZXJ2aWNlIGZyb20gXCIuL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSBcIi4vS2V5U2VydmljZVwiO1xuaW1wb3J0IFF1ZXJ5U2VydmljZSBmcm9tIFwiLi9RdWVyeVNlcnZpY2VcIjtcbmltcG9ydCBMb2NhbENhY2hlIGZyb20gXCIuL0xvY2FsQ2FjaGVcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gJy4uL21vZGVscy9JdGVtRW50cnknO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHQvLyBpZCBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxuXHRnZXRJdGVtRGVmaW5pdGlvbiAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBhbnksIG9wdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IHN0YXRlS2V5OiBhbnkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleShpdGVtSWQpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtpdGVtVHlwZTogaXRlbVR5cGUsIG9wdGlvbnM6IG9wdGlvbnMsIGl0ZW1JZDogaXRlbUlkfTtcblxuXHRcdGlmIChzdGF0ZUtleSAhPT0gbnVsbCkge1xuXHRcdFx0c3dpdGNoIChzdGF0ZUtleS50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ25ldyc6XG5cdFx0XHRcdFx0Ly8gaWYgKHN0YXRlS2V5LnRlbXBsYXRlLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0Ly8gXHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt0eXBlOiBzdGF0ZUtleS50ZW1wbGF0ZX07XG5cblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZHVwbGljYXRlJzpcblx0XHRcdFx0XHRvcHRpb25zLmR1cGxpY2F0ZSA9IHN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSAvLyB0b2RvOiByZWZhY3RvciB0aGlzXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPSBzdGF0ZUtleS5pdGVtSWQ7XG5cblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRyZXN1bHQuaXRlbUlkID0gaXRlbUlkO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtRW50cmllczogYW55W10sIGFkZFRvVGFiOiBib29sZWFuKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25DYWNoZSA9IGxvY2FsQ2FjaGUuY29sbGVjdGlvbnM7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGFkZFRvVGFiKVxuXHRcdFx0XHRsb2NhbENhY2hlLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCB7fSwgZmFsc2UpO1xuXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCByZXN1bHQsIGNvbGxlY3Rpb25DYWNoZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IGl0ZW1JZFxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtUmVzb3VyY2U+fVxuXHQgKlxuXHQgKiBJIGV4cGVjdCBub3QgYSB0ZW1wbGF0ZSByZXF1ZXN0IGZyb20gaXRlbWhhbmRsZXIuZmV0Y2hJdGVtIGJlY2F1c2UgYWRkU2luZ2xlSXRlbSBkb2VzIG5vdCBoYW5kbGUgdGhlXG5cdCAqIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXBcblx0ICovXG5cdGdldEl0ZW1CeUlkIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdGlmICgoPEl0ZW1FbnRyeT4gaXRlbUVudHJ5KS5pdGVtVHlwZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oKDxJdGVtRW50cnk+IGl0ZW1FbnRyeSksIG9wdGlvbnMsIGZhbHNlKTtcblxuXHRcdFx0XHQvLyB0b2RvOiBtYWtlIHNhdmUgd2hlbiBpdGVtIGlzIG5vdCBJdGVtRW50cnlcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW1zKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XG5cblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBkdXBsaWNhdGVJZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpIHtcblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmdldEl0ZW1EZWZpbml0aW9uKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0RHVwbGljYXRlU3RhdGVLZXkoZHVwbGljYXRlSWQpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlEZWYoZGVmaW5pdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZGVwZW5kZWQgb24gdGhlIHJldHVybiBsaW5rcyBib29sZWFuLiB0cnVlIHJldHVybnMgdGhlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAuXG5cdCAqIFRoZSB0eXBlIGhhcyB0byBiZSBhc3NlcnRlZCBhdCB1c2Ugc2luY2UgeW91IG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICogQHBhcmFtIHtib29sZWFufSByZXR1cm5MaW5rc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm9vdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPn1cblx0ICovXG5cdGdldE5ld1Jlc291cmNlIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnksIHJldHVybkxpbmtzOiBib29sZWFuLCBpc1Jvb3Q6IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdGlmIChpc1Jvb3QgPT09IHVuZGVmaW5lZClcblx0XHRcdGlzUm9vdCA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1haW4gPSB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290KTtcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0cmV0dXJuIHJldHVybkxpbmtzID8ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfSA6IG1haW47XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGxpbmtGaWVsZDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXk6IGxpbmtJZEFycmF5LFxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihlbnRyeSwgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IG51bWJlciwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogbGlua1R5cGUsIGl0ZW1JZDogbGlua0lkfTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRlbnRyeU9wdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKGVudHJ5LCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0dGhpcy5nZXRMb2NhbENhY2hlKCkuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0dGhpcy5nZXRMb2NhbENhY2hlKCkuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdC8vIFx0XHRcdHZhciByZXF1ZXN0Q29sdW1ucyA9IHt9O1xuXHRcdC8vIFx0XHRcdHJlcXVlc3RDb2x1bW5zW2xpbmtUeXBlXSA9IFsnaWQnXTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbbGlua1R5cGVdLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5RGVmIChkZWZpbml0aW9uOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhkZWZpbml0aW9uLm9wdGlvbnMpXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRsZXQgbWFpbkVudHJ5OiBJdGVtRW50cnk7XG5cblx0XHRcdFx0aWYgKCg8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4gaXRlbUVudHJ5UmVzb3VyY2UpLmxpbmtlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoKDxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPiBpdGVtRW50cnlSZXNvdXJjZSkubGlua2VkLCBkZWZpbml0aW9uLm9wdGlvbnMsIGZhbHNlKTtcblx0XHRcdFx0XHRtYWluRW50cnkgPSAoPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IGl0ZW1FbnRyeVJlc291cmNlKS5tYWluO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRtYWluRW50cnkgPSA8SXRlbUVudHJ5PiBpdGVtRW50cnlSZXNvdXJjZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKG1haW5FbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLCBpc1Jvb3QpOyAvLyBpc1Jvb3Rcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChuZXdJdGVtSWQ6IG51bWJlciwgaXRlbVJlc291cmNlOiBhbnksIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuY2xvbmVJdGVtKG5ld0l0ZW1JZCwgaXRlbVJlc291cmNlLmVudHJ5KSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IGFueSwgb3B0aW9uczogYW55LCBjb252ZXJzaW9uTWFwOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmNsb25lKFxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnksXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChjbG9zZVRhYjogYm9vbGVhbiwgcGFyYW1ldGVyczogYW55LCBicmVha3VwQnlQYXJlbnQgPSBmYWxzZSwgb25BZnRlckNyZWF0ZUNhbGxiYWNrOiBhbnksIGtlZXBUYWJIZWFkaW5nID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRDdXJyZW50Q2hhbmdlcyAoKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcignaXRlbUFkbWluaXN0cmF0b3I6IE5vIHJvb3QgaXRlbSEnKTtcblxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkuY29uc3RydWN0KGxvY2FsQ2FjaGUucm9vdEl0ZW0sIGxvY2FsQ2FjaGUuaXRlbXMsIGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMpLnByb2Nlc3MoKTtcblx0fVxuXG5cdC8vIHVzZWQgaW4gdGltZVJlZ2lzdHJhdGlvbkNvbnRyb2xsZXJcblx0YWRkU2luZ2xlSXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IGFueSwgaXNSb290PzogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlW10ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2gobG9jYWxDYWNoZS5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvLyB1c2VkIGluIHdhcmVob3VzZUl0ZW1DYWNoZUZhY3Rvcnlcblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBhbnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucz86IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0aWYgKHByb2Nlc3NPcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuYWRkQ29sbGVjdGlvbihcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHByb2Nlc3NPcHRpb25zID8gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHJlc291cmNlT3B0aW9ucykgOiByZXNvdXJjZU9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0YWRkQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGxvY2FsQ2FjaGUuYWRkQ29sbGVjdGlvbihcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLFxuXHRcdFx0XHRyZXNvdXJjZU9wdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAobGlua2VkRW50cmllczogYW55W10sIG9wdGlvbnM6IGFueSwgYWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XG5cdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IGVudHJ5Lml0ZW1FbnRyaWVzO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXS5wdXNoKGxvY2FsQ2FjaGUuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XG5cblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5leHBhbmRDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyeSwgY29sbGVjdGlvbk1hcCwgY29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcblx0XHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q2FjaGVNYW5hZ2VyKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5sb2NhbENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q2FjaGVNYW5hZ2VyKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogYW55W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhcblx0XHRcdHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtRW50cmllcywgdHJ1ZSksXG5cdFx0XHRmYWxzZSxcblx0XHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdCk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBhbnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKFxuXHRcdFx0dGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1FbnRyaWVzLCBmYWxzZSksXG5cdFx0XHRmYWxzZSxcblx0XHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdCk7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWRNYXAgKGNvbGxlY3Rpb25NYXA6IGFueSwgY29udmVyc2lvbk1hcCkge1xuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogYW55LCByZXNvdXJjZU9wdGlvbnM6IGFueSwgcHJvY2Vzc09wdGlvbnM/OiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIHByb2Nlc3NPcHRpb25zKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBhbnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogYW55W10sIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW1zKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uQmVmb3JlU2F2ZScsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVN1Y2Nlc3MnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVdpdGhvdXRDbG9zaW5nIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tICcuL0tleVNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcbmltcG9ydCBJdGVtRW50cnkgZnJvbSAnLi4vbW9kZWxzL0l0ZW1FbnRyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1FbnRyeVNlcnZpY2Uge1xuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XG5cdEFMTF9QRVJNSVNTSU9OUyA9IDc7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdHJlc2V0RGVyaXZlZCAoaXRlbUVudHJ5LCBjb2x1bW5JZHMpOiB2b2lkIHtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1ucykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcblxuXHRcdFx0XHRkZWxldGUgaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRlZmVyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgZGVmZXJSZXF1ZXN0KTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0aXRlbUVudHJ5LmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiBpdGVtRW50cnk7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0fVxuXG5cdHJlamVjdCAoaXRlbUVudHJ5LCBlcnJvciA9IHRoaXMudW5kZWZpbmVkSXRlbUVycm9yKTogSXRlbUVudHJ5IHtcblx0XHRpdGVtRW50cnkuZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcblxuXHRcdGRlbGV0ZSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIGl0ZW1FbnRyeS5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKGl0ZW1FbnRyeSk6IHZvaWQge1xuXHRcdGl0ZW1FbnRyeS5yZXNvdXJjZXMgPSBbXTtcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IGl0ZW1FbnRyeS5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcblx0fVxuXG5cdGdldEZpZWxkcyAoaXRlbUVudHJ5KSB7XG5cdFx0aWYgKGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5tb2RpZmllZDtcblxuXHRcdHJldHVybiBpdGVtRW50cnkuaW5pdGlhbDtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0XG5cdGV4cGFuZCAoZW50cnksIG1haW4sIGRlcml2ZWQsIGV4cGFuZFJlc291cmNlKSB7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2U7XG5cdFx0ZW50cnkuY29sdW1ucyA9IGV4cGFuZFJlc291cmNlLm1lcmdlZDtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkuaW5pdGlhbCxcblx0XHRcdG1haW4sXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cblx0XHQpO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXG5cdFx0XHRlbnRyeS5kZXJpdmVkLFxuXHRcdFx0ZGVyaXZlZCxcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxuXHRcdCk7XG5cblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBlbnRyeTtcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0dGVtcGxhdGVPcHRpb25zOiB7fSxcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdC8vIGtleTogaW5pdGlhbCAvIG1vZGlmaWVkXG5cdC8vIGZpZWxkcyAqaGF2ZW4ndCogYmVlbiBmb3JtYXR0ZWQgeWV0XG5cdHVwZGF0ZUZpZWxkcyAoZW50cnksIHNvdXJjZSwgb3ZlcndyaXRlID0gdHJ1ZSkge1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLmZvcm1hdHRlZC5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UobW9kaWZpZWQsIGZvcm1hdHRlZENvbHVtbnMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0dXBkYXRlSXRlbVZhbHVlIChlbnRyeSwgZmllbGRzLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZHNbY29sdW1uSWRdO1xuXG5cdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdG5ld1ZhbHVlID0gZW50cnkucGFyZW50Lml0ZW1JZDtcblx0XHR9IGVsc2Vcblx0XHRcdG5ld1ZhbHVlID0gdGhpcy5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdH1cblxuXHR1cGRhdGVJdGVtRmllbGRzIChlbnRyeSwgY29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gZW50cnkuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IGluaXRpYWwgPSBlbnRyeS5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoZW50cnksIG1vZGlmaWVkLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblx0fVxuXG5cdHByb2Nlc3MgKGVudHJ5KSB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IGVudHJ5LmNvbHVtbnMuZm9ybWF0dGVkO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZW50cnkuaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShlbnRyeS5kZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoZW50cnkpIHtcblx0XHRpZiAoZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChlbnRyeS5pdGVtSWQpID8ge30gOiBlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0c2V0RGlzcGxheU5hbWUgKGVudHJ5KSB7XG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKGVudHJ5KTtcblxuXHRcdGlmIChyZXN1bHQpXG5cdFx0XHRlbnRyeS5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblx0fVxuXG5cdGdldERpc3BsYXlOYW1lIChlbnRyeSkge1xuXHRcdGNvbnN0IGZpZWxkcyA9IHR5cGVvZiBlbnRyeS5tb2RpZmllZCA9PT0gJ3VuZGVmaW5lZCcgP1xuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xuXG5cdFx0c3dpdGNoIChlbnRyeS5pdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXG5cdFx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RnVsbE5hbWUoXG5cdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbdGhpcy5nZXRUaXRsZUZpZWxkKGVudHJ5Lml0ZW1UeXBlKV07XG5cdFx0fVxuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XG5cdFx0cmV0dXJuIGZpcnN0TmFtZS50cmltKClcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XG5cdH1cblxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcblx0XHRcdFx0cmV0dXJuICdmcmllbmRseW5hbWUnO1xuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcblx0XHRcdFx0cmV0dXJuICduYWFtaW50ZXJuJztcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcblx0XHRcdGNhc2UgJ0JhcmNvZGUnOlxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcblx0XHRcdGNhc2UgJ0JldGFsaW5nc2NvbmRpdGllJzpcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcblx0XHRcdGNhc2UgJ1RheFNjaGVtYSc6XG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XG5cdFx0XHRjYXNlICdGdW5jdGllZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcblx0XHRcdGNhc2UgJ0luaHV1cic6XG5cdFx0XHRjYXNlICdJbmh1dXJncm9lcCc6XG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbENhdCc6XG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxuXHRcdFx0Y2FzZSAnUGxhbm5pbmdtYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnU3VicHJvamVjdCc6XG5cdFx0XHRjYXNlICdUYWFrJzpcblx0XHRcdGNhc2UgJ1RhZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRjYXNlICdUaWpkJzpcblx0XHRcdGNhc2UgJ1RpdGVsJzpcblx0XHRcdGNhc2UgJ1R5cGUnOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xuXHRcdFx0Ly8gY2FzZSAnQ29udGFjdCc6XG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXG5cdFx0XHRcdHJldHVybiAnZGlzcGxheW5hbWUnO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZW50cnlcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAoZW50cnksIHJldHVybkFsbCkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcblx0XHRcdGVudHJ5LmluaXRpYWwsXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IGVudHJ5Lm1vZGlmaWVkLFxuXHRcdFx0ZW50cnkuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdGlzTG9jYWwgKGVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoZW50cnkuaXRlbUlkKTtcblx0fVxuXG5cdGlzTG9ja2FibGUgKGVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuaXNMb2NhbChlbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGVudHJ5Lml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRoYXNDaGFuZ2VzIChlbnRyeSkge1xuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXG5cdFx0XHRlbnRyeS5pbml0aWFsLFxuXHRcdFx0ZW50cnkubW9kaWZpZWQsXG5cdFx0XHRlbnRyeS5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0cmVzZXRNb2RpZmllZCAoZW50cnkpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0ZW50cnkuaW5pdGlhbFtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHNldEluaXRpYWwgKGVudHJ5LCB2YWx1ZXMsIGVuYWJsZUNhbGxiYWNrcz8pIHtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShlbnRyeSwgdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhlbnRyeS5pbml0aWFsLCB7fSwgZW50cnkuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoZW50cnkubW9kaWZpZWQsIHt9LCBlbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHRlbnRyeS5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGVudHJ5LCBwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gZW50cnk7XG5cdH1cblxuXHQvKipcblx0ICogRG9lcyBhIHNoYWxsb3cgY29weSBvZiB2YWx1ZXMhXG5cdCAqL1xuXHRzZXRNb2RpZmllZCAoZW50cnksIHZhbHVlcz8pIHtcblx0XHRjb25zdCBjb2x1bW5zID0gZW50cnkuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW2VudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBlbnRyeS5yZXNvdXJjZXM7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gZW50cnkuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gZW50cnkubW9kaWZpZWQgPSB7fTtcblxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XG5cblx0XHRcdHJldHVybiBlbnRyeTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZW50cnk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdC8vIGlmIChERVZfTU9ERSkge1xuXHRcdFx0Ly8gXHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Ly8gXHRcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHQvLyB9XG5cblx0XHRcdGVudHJ5Lm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0c2V0RGVyaXZlZCAoZW50cnksIHZhbHVlcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcblx0XHRcdGVudHJ5LmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xuXG5cdFx0cmV0dXJuIGVudHJ5O1xuXHR9XG5cblx0cHJvY2Vzc0xvY2FsIChlbnRyeSwgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXApIHtcblx0XHRlbnRyeS5pbml0aWFsID0ge3Blcm1pc3Npb25zOiB0aGlzLkFMTF9QRVJNSVNTSU9OU307XG5cblx0XHR0aGlzLnVwZGF0ZUZpZWxkcyhlbnRyeSwgaW5pdGlhbCk7XG5cdFx0dGhpcy51cGRhdGVJdGVtRmllbGRzKGVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdHRoaXMuc2V0TW9kaWZpZWQoZW50cnksIG1vZGlmaWVkKTtcblxuXHRcdGVudHJ5Lm1vZGlmaWVkLmNyZWF0ZWQgPSBtb21lbnQoKTtcblx0XHRlbnRyeS5kZXJpdmVkID0gZGVyaXZlZDtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdHNldFBhcmVudCAoZW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSB7XG5cdFx0ZW50cnkucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiBlbnRyeTtcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAoZW50cnksIHByZXZpb3VzKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBlbnRyeS5yZXNvdXJjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtUmVzb3VyY2UgPSBlbnRyeS5yZXNvdXJjZXNbaV07XG5cblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IEJhdGNoU3RhdHVzRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeVwiO1xuaW1wb3J0IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBJdGVtQ2FjaGVGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeUZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5XCI7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgQXV0aEludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0F1dGhJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tIFwiLi9BcGlGb3JtYXR0ZXJcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XG5pbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuL0NvbHVtblV0aWwnO1xuaW1wb3J0IEl0ZW1DYWNoZSBmcm9tIFwiLi9JdGVtQ2FjaGVcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuaW1wb3J0IEJhdGNoU3RhdHVzIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuaW1wb3J0IEFwaVJlc3BvbnNlUHJvY2Vzc29yIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuaW1wb3J0IHtcblx0QXBpVGVtcGxhdGVJdGVtVHlwZU1hcCxcblx0RW50cnlTdGF0dXMsXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXG5cdFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMvSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtSGFuZGxlciB7XG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcblx0dGVtcGxhdGVzOiBBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Z2V0SXRlbUlkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHJldHVybiBpdGVtRW50cnkuaXRlbUlkO1xuXHR9XG5cblx0Z2V0UHJvbWlzZSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XG5cdH1cblxuXHRmZXRjaEl0ZW0gKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cnlTdGF0dXMuZW50cnk7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xuXG5cdFx0aWYgKHN0YXR1cyA9PT0gRU5UUllfU1RBVFVTLkxPQ0FMKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdHRlbXBsYXRlID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSwgZXJyb3IpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChpdGVtRW50cnksIHN0YXR1cywgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSBpdGVtSWRzXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1FbnRyeVtdPn1cblx0ICpcblx0ICogRm9yIGV2ZXJ5IGl0ZW1pZCBmaW5kIHRoZSBzdGF0dXMgb2YgdGhlIEl0ZW1FbnRyeSBhbmQgcmVzb2x2ZSB0aGUgcHJvbWlzZXMgc28gdGhlIHJlc3VsdCBpc1xuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcblx0ICovXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlLCBpdGVtSWRzLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLmdldEl0ZW1JZChpdGVtRW50cnkpLFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLmdldFByb21pc2UoaXRlbUVudHJ5KVxuXHRcdCk7XG5cblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKVxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucykpO1xuXG5cdFx0cHJvbWlzZXMuZW50cmllcyA9IGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCk7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSlcblx0XHRcdHByb21pc2VzLnJlcXVlc3RzID0gdGhpcy5yZXF1ZXN0SXRlbShpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5MT0NBTF0pKVxuXHRcdFx0cHJvbWlzZXMudGVtcGxhdGUgPSB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4ocmVzb2x2ZWQgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5iYXRjaFJlc29sdmUoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLCBvcHRpb25zLmNvbHVtbnMsIHJlc29sdmVkKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdDtcblxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHN0YXR1cyA9PT0gRU5UUllfU1RBVFVTLkVYUEFORCkge1xuXHRcdFx0Y29uc3QgY29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zLCBvcHRpb25zLmNvbHVtbnMpLmRpZmZlcmVuY2U7XG5cblx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGNvbHVtbkRpZmZlcmVuY2UsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZWplY3QoaXRlbUVudHJ5LCBlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlamVjdChpdGVtRW50cnksIGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XG5cdH1cblxuXHQvLyB0b2RvIEZpbmQgb3V0IHdoYXQgdGhpcyByZXR1cm4gdHlwZSBpc1xuXHRyZXNvbHZlTG9jYWwgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBwYXJlbnQsIHRlbXBsYXRlKTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwID0gdGhpcy5jcmVhdGVDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0UGFyZW50KGl0ZW1FbnRyeSwgcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzTG9jYWwoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHR0ZW1wbGF0ZS5maWVsZHMsXG5cdFx0XHR7fSxcblx0XHRcdHt9LFxuXHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdCk7XG5cblx0XHR0aGlzLnNldENyZWF0b3IoaXRlbUVudHJ5KTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgY29udmVyc2lvbk1hcClcblx0XHR9O1xuXHR9XG5cblx0cmVzb2x2ZUV4cGFuc2lvbiAoaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMsIHRydWUpO1xuXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmV4cGFuZChcblx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5LCBjb2x1bW5JbmZvLCByZXNwb25zZSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVqZWN0KGl0ZW1FbnRyeSk7XG5cdFx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlZmVycmVkRW50cnkoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRpbml0aWFsLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCksXG5cdFx0XHRjb2x1bW5JbmZvXG5cdFx0KTtcblx0fVxuXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcblxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdChcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXG5cdFx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNhY2hlZFRlbXBsYXRlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoW1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcblx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cblx0XHRcdFx0e30gOlxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXG5cdFx0XSkudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpLFxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHtcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpLFxuXHRcdFx0XHRcdHJlc3BvbnNlOiB0ZW1wbGF0ZVJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XG5cblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSk6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGNhY2hlZEVudHJ5OiBJdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGNhY2hlZEVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRlbnRyeTogdGhpcy5jcmVhdGVEZWZlcnJlZEVudHJ5KGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKSxcblx0XHRcdFx0XHRzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jcmVhdGVEZWZlcnJlZEVudHJ5KGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpLFxuXHRcdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtlbnRyeTogY2FjaGVkRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjYWNoZWRFbnRyeSwgb3B0aW9ucyl9O1xuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcblx0XHRjb25zdCBjb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpIHx8XG5cdFx0XHR0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQob3B0aW9ucy5jb2x1bW5zLCBjb2x1bW5zLnJlcXVlc3QsIGNvbHVtbnMudHJ1ZSk7XG5cblx0XHRpZiAoaXRlbUVudHJ5LmRlZmVycmVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdGNvbHVtbnMucmVxdWVzdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbnMucmVxdWVzdCwgb3B0aW9ucy5jb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaXNDb2x1bW5TdWJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChpc0NvbHVtblN1YnNldClcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmRlZmVyKGl0ZW1FbnRyeSwgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdH1cblxuXHRjcmVhdGVEZWZlcnJlZEVudHJ5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgcmVxdWVzdENvbHVtbnMsIGRlZmVyUmVxdWVzdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jcmVhdGVFbnRyeVN0dWIoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3Q6IHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0dHJ1ZTogcmVxdWVzdENvbHVtbnMgPT09IHRydWVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWZlcihpdGVtRW50cnksIGRlZmVyUmVxdWVzdCk7XG5cdH1cblxuXHRjcmVhdGVFbnRyeVN0dWIgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyKTogSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzLmFkZChcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRpdGVtSWRcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlRW50cnkgKGl0ZW1JZDogbnVtYmVyLCBpbml0aWFsLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTogSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3MoXG5cdFx0XHR0aGlzLmVudHJpZXMuYWRkKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUlkLFxuXHRcdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdFx0aW5pdGlhbCxcblx0XHRcdFx0XHRkZXJpdmVkXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZURlZmVycmVkRW50cnkgKGl0ZW1FbnRyeSwgaW5pdGlhbCwgZGVyaXZlZCwgY29sdW1ucyk6IEl0ZW1FbnRyeSB7XG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSBjb2x1bW5zO1xuXHRcdGl0ZW1FbnRyeS5pbml0aWFsID0gaW5pdGlhbDtcblx0XHRpdGVtRW50cnkuZGVyaXZlZCA9IGRlcml2ZWQ7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2VzcyhpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZXNvbHZlKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxuXHQgKlxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxuXHQgKi9cblx0YmF0Y2hSZXNvbHZlIChpdGVtVHlwZSwgYmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLCByZXF1ZXN0Q29sdW1ucywgcmVzb2x2ZWQpOiBJdGVtRW50cnlbXSB8IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSByZXNvbHZlZC5yZXF1ZXN0cztcblx0XHRjb25zdCBleHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XG5cdFx0Y29uc3QgcmVzb2x2ZVN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XG5cblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhleHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xuXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRcdGV4cGFuZFN0YXR1cywgaXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cywgaXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLCBpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG51bGwsIHJlc29sdmVkLnRlbXBsYXRlKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KHttZXNzYWdlOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UudW5kZWZpbmVkSXRlbUVycm9yfSk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKG5ld0l0ZW1JZCwgaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwPykge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSBpdGVtRW50cnkuY29sdW1ucztcblx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHtcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZV06IHtcblx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1JZF06IG5ld0l0ZW1JZFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVFbnRyeShcblx0XHRcdG5ld0l0ZW1JZCxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpLCB7fSwgY29sdW1ucy5tYWluKSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxuXHRcdFx0Y29sdW1uc1xuXHRcdCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UudXBkYXRlSXRlbUZpZWxkcyhyZXN1bHQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmVzdWx0Lm1vZGlmaWVkID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhyZXN1bHQuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAoIXBhcmVudClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldFBhcmVudChyZXN1bHQsIHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRjcmVhdGVDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciwgZXh0ZW5kOiBib29sZWFuLCByZXNwb25zZSkge1xuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcblx0XHRjb25zdCByZXN1bHQgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiB7XG5cdFx0XHRcdFthcGlJdGVtSWRdOiBpdGVtSWRcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGV4dGVuZClcblx0XHRcdHRoaXMuZXh0ZW5kQ29udmVyc2lvbk1hcChcblx0XHRcdFx0cmVzdWx0LFxuXHRcdFx0XHRyZXNwb25zZS5pdGVtc1tpdGVtVHlwZV1bYXBpSXRlbUlkXS5saW5rcyxcblx0XHRcdFx0cmVzcG9uc2Vcblx0XHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChwYXJlbnRUeXBlOiBzdHJpbmcsIGxvY2FsUGFyZW50SWQ6IG51bWJlciwgdGVtcGxhdGUsIGNvbnZlcnNpb25NYXApOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10ge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XG5cdFx0Y29uc3QgY29sdW1uSW5mb01hcCA9IHt9O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IHt9O1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZGlzYWJsZSBjYWNoaW5nP1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gYXBpUmVzcG9uc2UuaXRlbXMpIHtcblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gcGFyZW50VHlwZSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKHBhcmVudFR5cGUyLCBsb2NhbFBhcmVudElkMiwgYXBpUGFyZW50SWQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDJ9O1xuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlMl1bYXBpUGFyZW50SWRdLmxpbmtzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHtpdGVtVHlwZTogaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW119KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHNlbGYuY3JlYXRlRW50cnlTdHViKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucyA9IGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc0xvY2FsKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnNldENyZWF0b3IoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdFx0Y3JlYXRlRW50cmllcyhpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGFwaUl0ZW1JZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxFbnRyeSAoaXRlbUlkOiBudW1iZXIsIHRlbXBsYXRlLCBtb2RpZmllZCwgZGVyaXZlZCwgcGFyZW50ID0gbnVsbCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGVtcGxhdGUuY29sdW1ucy5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNyZWF0ZUVudHJ5U3R1YihpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NMb2NhbChcblx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdHRlbXBsYXRlLmZpZWxkcyxcblx0XHRcdG1vZGlmaWVkLFxuXHRcdFx0ZGVyaXZlZCxcblx0XHRcdHRoaXMuY3JlYXRlQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCBmYWxzZSwgdGVtcGxhdGUucmVzcG9uc2UpXG5cdFx0KTtcblxuXHRcdHRoaXMuc2V0Q3JlYXRvcihpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0fVxuXG5cdGV4dGVuZENvbnZlcnNpb25NYXAgKGNvbnZlcnNpb25NYXAsIGxpbmtzLCBhcGlSZXNwb25zZSkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0XHRcdHRoaXMuZXh0ZW5kQ29udmVyc2lvbk1hcChcblx0XHRcdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0XHRcdGFwaVJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXVthcGlJdGVtSWRdLmxpbmtzLFxuXHRcdFx0XHRcdGFwaVJlc3BvbnNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIGRlZmVyUmVxdWVzdCA9IHRydWUpIHtcblx0XHRjb25zdCB0aXRsZUZpZWxkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQoaXRlbVR5cGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe1xuXHRcdFx0XHRjb2x1bW5zOiBbdGl0bGVGaWVsZF0sXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0XG5cdFx0XHR9KVxuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogSXRlbUVudHJ5IHwgYW55KSA9PiB7XG5cdFx0XHRcdC8vIGZldGNoSXRlbSBjYW4gYWxzbyByZXR1cm4gbGlua2VkIGl0ZW1zXG5cdFx0XHRcdGlmIChlbnRyeS5tYWluICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1haW4uaW5pdGlhbFt0aXRsZUZpZWxkXTtcblxuXHRcdFx0XHRpZiAoZW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubW9kaWZpZWRbdGl0bGVGaWVsZF07XG5cblx0XHRcdFx0cmV0dXJuIGVudHJ5LmluaXRpYWxbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IG51bWJlcltdLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWR9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeSwgaXRlbUlkKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBvbGRJdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBpdGVtSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzLnVwZGF0ZUl0ZW1JZChpdGVtRW50cnksIG9sZEl0ZW1JZCk7XG5cdH1cblxuXHRwcml2YXRlIHNldENyZWF0b3IgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0aXRlbUVudHJ5Lm1vZGlmaWVkLmNyZWF0b3IgPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlcklkKCk7XG5cdFx0aXRlbUVudHJ5LmRlcml2ZWRbJ2NyZWF0b3I+ZGlzcGxheW5hbWUnXSA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VyRGlzcGxheW5hbWUoKTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBDb2x1bW5FeHBhbnNpb24gZnJvbSBcIi4vQ29sdW1uRXhwYW5zaW9uXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tIFwiLi9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSBcIi4vSXRlbUhhbmRsZXJcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSBcIi4vUXVlcnlTZXJ2aWNlXCI7XG5pbXBvcnQgQXBpUmVzcG9uc2VQcm9jZXNzb3IgZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHtpZDogaXRlbUlkfSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0cXVlcnkgPSBjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0LFxuXHRcdGNvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXG5cdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XG5cblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxuXHRcdFx0Y29sdW1uczogcmVxdWVzdENvbHVtbnMsXG5cdFx0XHRxdWVyeTogcXVlcnksXG5cdFx0XHRpdGVtVHlwZTogJycsXG5cdFx0XHRhbGxMaW5rSWRzOiBmYWxzZSxcblx0XHRcdGxpbWl0OiBudWxsXG5cdFx0fTtcblxuXHRcdGlmIChvcHRpb25zLnF1ZXJ5SXRlbVR5cGUgPT09IG51bGwpXG5cdFx0XHRwYXJhbXMuaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cdFx0ZWxzZSB7XG5cdFx0XHRwYXJhbXMuaXRlbVR5cGUgPSBvcHRpb25zLnF1ZXJ5SXRlbVR5cGU7XG5cdFx0XHRwYXJhbXMuYWxsTGlua0lkcyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbnMubGltaXQgIT09IG51bGwpXG5cdFx0XHRwYXJhbXMubGltaXQgPSBvcHRpb25zLmxpbWl0O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcyk7XG5cdH1cblxuXHRyZXF1ZXN0TGlua0l0ZW1zIChwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHR7aWQ6IHBhcmVudElkQXJyYXl9LFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdFx0KSA6XG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zIC8vIHNob3VsZCBjb250YWluIGEgZGVyaXZlZCBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhlIHBhcmVudFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NFeHBhbnNpb24gKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSwgaWRBcnJheSwgcGFyZW50LCBjb2x1bW5JbmZvLCBjb2x1bW5FeHBhbnNpb24/KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGlmIChjb2x1bW5FeHBhbnNpb24gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHJ1ZSA/IHRydWUgOiBjb2x1bW5JbmZvLnJlcXVlc3QsXG5cdFx0XHRcdGNvbHVtbkluZm8ucmVzcG9uc2Vcblx0XHRcdCk7XG5cblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5JbmZvLnJvb3Q7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXMgPSBbXTtcblxuXHRcdC8vIHNob3VsZCBiZSBmYXN0Li4uXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmNyZWF0ZUVudHJ5KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdGNvbHVtbkluZm9cblx0XHRcdFx0KTtcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlcnJlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIucmVzb2x2ZURlZmVycmVkRW50cnkoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mb1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcylcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZEVudHJ5LFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cblx0XHRcdGl0ZW1FbnRyeSA6XG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kKFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZCksXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKHJlc3BvbnNlLCBwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucykge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IHBhcmVudEl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV07XG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRwcm9taXNlc1twYXJlbnRJZF0gPSBwYXRoRXhpc3RzKHBhcmVudEl0ZW1zLCBbcGFyZW50SWQsICdsaW5rcycsIGl0ZW1UeXBlXSkgP1xuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRwYXJlbnRJdGVtc1twYXJlbnRJZF0ubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXG5cdFx0XHRcdFx0Y29sdW1uSW5mbyxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0KSA6XG5cdFx0XHRcdFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMvRWRpdFJlc291cmNlJztcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogZmFsc2UsXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3Bcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y29tcGFyZU9wdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZTogRWRpdFJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHJlc291cmNlLmlzTG9jYWwoKSAmJlxuXHRcdFx0cmVzb3VyY2UudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRORVdfUFJFRklYOiBzdHJpbmcgPSAnLTEnO1xuXHREVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xuXG5cdE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XG5cdERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XG5cblx0c2VwZXJhdG9yOiBzdHJpbmcgPSAnOic7XG5cblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Z2V0U2luZ2xlS2V5IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtVHlwZS5jb25jYXQodGhpcy5zZXBlcmF0b3IsIFN0cmluZyhpdGVtSWQpKTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25DYWNoZUtleSAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBjaGlsZFR5cGU6IHN0cmluZykge1xuXHRcdHJldHVybiBwYXJlbnRUeXBlLmNvbmNhdCh0aGlzLnNlcGVyYXRvciwgU3RyaW5nKHBhcmVudElkKSwgdGhpcy5zZXBlcmF0b3IsIGNoaWxkVHlwZSk7XG5cdH1cblxuXHRnZXRDc3NLZXkgKCkge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcblx0fVxuXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpIHtcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRpZiAoc3RhdGVLZXkuaW5kZXhPZih0aGlzLk5FV19LRVlXT1JEKSA9PT0gMClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICduZXcnLFxuXHRcdFx0XHR0ZW1wbGF0ZTogc3RhdGVLZXkuc3Vic3RyaW5nKHRoaXMuTkVXX0tFWVdPUkQubGVuZ3RoKVxuXHRcdFx0fTtcblxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKHRoaXMuRFVQTElDQVRFX0tFWVdPUkQpID09PSAwKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogJ2R1cGxpY2F0ZScsXG5cdFx0XHRcdGl0ZW1JZDogc3RhdGVLZXkuc3Vic3RyaW5nKHRoaXMuRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlU3RhdGVLZXkgKGl0ZW1JZDogc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuRFVQTElDQVRFX0tFWVdPUkQuY29uY2F0KFN0cmluZyhpdGVtSWQpKTtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLk5FV19LRVlXT1JELmNvbmNhdCh0ZW1wbGF0ZVR5cGUpO1xuXHR9XG5cblx0Z2V0TG9jYWxJZCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcy5ORVdfUFJFRklYLmNvbmNhdCh0aGlzLmdldFJhbmRvbVN0cmluZygpKSwgMTApO1xuXHR9XG5cblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gcGFyc2VJbnQodGhpcy5EVVBMSUNBVEVfUFJFRklYLmNvbmNhdCh0aGlzLmdldFJhbmRvbVN0cmluZygpKSwgMTApO1xuXHR9XG5cblx0Z2V0UmFuZG9tU3RyaW5nICgpIHtcblx0XHRyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xuXHR9XG5cblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXG5cdC8vIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCAoaXRlbUhhbmRsZXIuY3JlYXRlUmVxdWVzdClcblx0aXNMb2NhbElkIChpdGVtSWQ6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xuXHR9XG5cblx0aXNOZXdJZCAoaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkLnRvU3RyaW5nKCkuaW5kZXhPZih0aGlzLk5FV19QUkVGSVgpID09PSAwIHx8IGl0ZW1JZCA9PT0gdGhpcy5ORVdfS0VZV09SRDtcblx0fVxuXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZC50b1N0cmluZygpLmluZGV4T2YodGhpcy5EVVBMSUNBVEVfUFJFRklYKSA9PT0gMCB8fCBpdGVtSWQgPT09IHRoaXMuRFVQTElDQVRFX0tFWVdPUkQ7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gXCIuL0tleVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zID0ge307XG5cdHByb21pc2VzID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XG5cdH1cblxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlOnRyaXBsZS1lcXVhbHNcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbjtcblx0fVxuXG5cdGdldE1lc3NhZ2UgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5tZXNzYWdlO1xuXHR9XG5cblx0Ly8gZG9lcyBub3QgcmVqZWN0IHdoZW4gYSBmb3JlaWduIGxvY2sgaXMgZW5jb3VudGVyZWRcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcblx0ZmV0Y2hDYWNoZWRMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XG5cblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xuXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4obG9ja0l0ZW0gPT4ge1xuXHRcdFx0XHRpZiAobG9ja0l0ZW0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdExvY2soaXRlbUVudHJ5KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4obG9ja0l0ZW0gPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxuXHRcdFx0J0xvY2t0b2tlbicsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KFxuXHRcdFx0XHRcdFx0J0xvY2t0b2tlbicsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LCBlcnJvciA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAzMDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aXNGb3JlaWduOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLnNldFZhbHVlKGl0ZW1FbnRyeSwgcHJvbWlzZSwgdGhpcy5wcm9taXNlcyk7XG5cdH1cblxuXHRkZWxldGVMb2NrIChpdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGNhY2hlZExvY2sgPT4ge1xuXHRcdFx0XHQvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XG5cblx0XHRcdFx0aWYgKGNhY2hlZExvY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIGNhY2hlZExvY2suaWQpXG5cdFx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXJMb2NrIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXHR9XG5cblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xuXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xuXHR9XG5cblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeSwgcGFyZW50KSB7XG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXG5cdFx0bGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogcGFyZW50Lml0ZW1JZH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgPyBsaW5rZWRUb1F1ZXJ5IDogdGhpcy5hZGRBbmRDb25kaXRpb24ocXVlcnksIGxpbmtlZFRvUXVlcnkpO1xuXHR9XG5cblx0Y3JlYXRlTm90SW4gKGlkQXJyYXkpIHtcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSAnLi4vZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuaW1wb3J0IENvbHVtblNldEZhY3RvcnkgZnJvbSAnLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnknO1xuaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQXBpRm9ybWF0dGVyIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcbmltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldE1lc3NhZ2VIYW5kbGVyIHtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogYW55KTogYW55IHtcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlcywgY29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XG5cblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXG5cdFx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdFx0cGFyZW50Lml0ZW1JZCxcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucylcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zW3N0YXR1c10pIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcblx0XHRcdFx0XHRcdFx0Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG5vdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5zIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xuXHR9XG5cblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSBpdGVtRW50cnkuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZGVmZXIoaXRlbUVudHJ5LCBmYWxzZSk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkcyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5jcmVhdGVEZWZlcnJlZEVudHJ5KGl0ZW1UeXBlLCBwYXJzZUludChpdGVtSWQsIDEwKSwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllcyA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcblxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKTtcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0RmllbGRzKGl0ZW1FbnRyeSksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2Uuc2V0SW5pdGlhbChpdGVtRW50cnksIHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSk7XG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNhbGxPbkNoYW5nZShpdGVtRW50cnksIHByZXZpb3VzKTtcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzb2x2ZShpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlcXVlc3RJZHMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0XHRjb25zdCBpc05ldyA9IGl0ZW1FbnRyeS5pbml0aWFsID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5yZWplY3QoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcblxuXHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLnJlc29sdmVEZWZlcnJlZEVudHJ5KGl0ZW1FbnRyeSwgZmllbGRzLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zLCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGaWVsZHMoaXRlbUVudHJ5KSxcblx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcblx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kKGl0ZW1FbnRyeSwgZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xuXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXREZXJpdmVkKGl0ZW1FbnRyeSwgZGVyaXZlZCk7XG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS51cGRhdGVGaWVsZHMoaXRlbUVudHJ5LCBmaWVsZHMsIGZhbHNlKTtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNhbGxPbkNoYW5nZShpdGVtRW50cnksIHByZXZpb3VzKTtcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc29sdmUoaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0fVxuXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZSkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cblx0XHRpZiAoYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVEZWxldGUgKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oYm9keS5pdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XG5cblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvLyBUT0RPIVxuXHRoYW5kbGVMaW5rTW92ZSAobWVzc2FnZSkge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0XHQvKlx0XHRcdHByb2Nlc3NNZXNzYWdlKFxuXHRcdCBtZXNzYWdlLFxuXHRcdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHQgcmV0dXJuO1xuXG5cdFx0IC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdFx0IGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcblx0XHQgfSxcblx0XHQgZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0IC8vIG1heWJlIGZpdHNcblx0XHQgcmV0dXJuOyAgLy8gdG9kbzogYWxzbyByZW1vdmUgdGhlbSBmcm9tIHRoZSBvbGQgY29sbGVjdGlvblxuXHRcdCBjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xuXHRcdCB9LFxuXHRcdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaWRzKSB7XG5cdFx0IC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cblx0XHQgY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhpZHMsIG51bGwsIG1lc3NhZ2UpO1xuXHRcdCB9XG5cdFx0ICk7XG5cdFx0ICovXG5cdH1cblxufVxuIiwiaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgeyBJdGVtVHlwZU1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvciB7XG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xuXHRpdGVtczogSXRlbVR5cGVNYXA7XG5cdGxpbmtzOiBJdGVtVHlwZU1hcDtcblx0Y2FjaGVhYmxlOiBib29sZWFuO1xuXHRtYXA6IGFueTtcblxuXHRjb2x1bW5JbmRleE1hcDogYW55ID0ge307XG5cdGNvbHVtbk1hcDogYW55ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgcmVzcG9uc2U6IGFueVxuXHQpIHtcblx0XHR0aGlzLmNvbHVtbnMgPSByZXNwb25zZS5jb2x1bW5zO1xuXHRcdHRoaXMuaXRlbXMgPSByZXNwb25zZS5pdGVtcztcblx0XHR0aGlzLmxpbmtzID0gcmVzcG9uc2UubGlua3M7XG5cdFx0dGhpcy5jYWNoZWFibGUgPSByZXNwb25zZS5jYWNoZWFibGU7XG5cdFx0dGhpcy5tYXAgPSByZXNwb25zZS5tYXA7XG5cblx0XHR0aGlzLmNyZWF0ZUNvbHVtbk1hcHMoKTtcblx0fVxuXG5cdGNyZWF0ZUNvbHVtbk1hcHMgKCkge1xuXHRcdGZvciAoY29uc3QgY29sdW1uVHlwZSBpbiB0aGlzLmNvbHVtbnMpIHtcblx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV0gPSB7fTtcblx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdID0ge307XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXVtpXTtcblx0XHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gaTtcblx0XHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmZXRjaFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JZCkge1xuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xuXHR9XG5cblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxuXHRcdFx0XHR0aGlzLmZldGNoVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uLmlkKSxcblx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRyZXN1bHRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRGVyaXZlZFZhbHVlcyAodmFsdWUsIGNvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xuXHRcdH1cblxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcblx0XHRcdGNvbnN0IGxpbmtzID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5saW5rcztcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgbGlua1R5cGUgaW4gbGlua3MpXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlLCBpbmNsdWRlTGlua3MsIGlkQXJyYXkpIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IFtdO1xuXG5cdFx0aWYgKGlkQXJyYXkgPT09IG51bGwpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdGlmIChpZEFycmF5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRpZEFycmF5ID0gdGhpcy5saW5rc1tpdGVtVHlwZV07XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlkQXJyYXkubGVuZ3RoOyBpKyspXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZEFycmF5W2ldLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkLCBpbmNsdWRlTGlua3MsIHJldHVybktleXMpIHtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblx0XHRjb25zdCBrZXlzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQsIGluY2x1ZGVMaW5rcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJldHVybktleXMpXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLmxlbmd0aDsgaSsrKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0fVxuXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xuXHR9XG5cblx0Y3JlYXRlUmVzb3VyY2UgKGl0ZW1UeXBlLCBpZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3Ncblx0XHR9O1xuXHR9XG5cblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi4vY2xhc3Nlcy9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IEFwaVJlc3BvbnNlUHJvY2Vzc29yIGZyb20gJy4uL2NsYXNzZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgeyBFbnRyeVN0YXR1cyB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgfSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuLypleHBvcnQgdHlwZSBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHtcblx0W0VOVFJZX1NUQVRVUy5DQUNIRURdPzogSXRlbUVudHJ5W107XG5cdFtFTlRSWV9TVEFUVVMuRVhQQU5EXT86IEl0ZW1FbnRyeVtdO1xuXHRbRU5UUllfU1RBVFVTLkxPQ0FMXT86IEl0ZW1FbnRyeVtdO1xuXHRbRU5UUllfU1RBVFVTLlBST01JU0VEXT86IFByb21pc2U8SXRlbUVudHJ5W10+O1xuXHRbRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0/OiBQcm9taXNlPEl0ZW1FbnRyeVtdPjtcblx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFXT86IEl0ZW1FbnRyeVtdO1xufTsqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXRjaFN0YXR1cyB7XG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBudW1iZXIsXG5cdFx0cHVibGljIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+IC8vIHRvZG86IHByb21pc2UgcmV0dXJuIHR5cGVcblx0KSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxuXHRcdFx0dGhpcy5lbnRyaWVzW0VOVFJZX1NUQVRVU1tzdGF0dXNdXSA9IFtdO1xuXHR9XG5cblx0YWRkIChlbnRyeVN0YXR1czogRW50cnlTdGF0dXM8SXRlbUVudHJ5Pik6IHZvaWQge1xuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcblxuXHRcdHRoaXMuZW50cmllc1tzdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcblx0fVxuXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCk6IG51bWJlcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEFycmF5ICgpOiBJdGVtRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRyZXN1bHQucHVzaChzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IEJhdGNoU3RhdHVzIGZyb20gXCIuLi9jbGFzc2VzL0JhdGNoU3RhdHVzXCI7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBudW1iZXIsIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxhbnk+KTogQmF0Y2hTdGF0dXMge1xuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0Z2V0SXRlbUlkLFxuXHRcdFx0Z2V0UHJvbWlzZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5nZXNDb21waWxlciB7XG5cdGNvbXBpbGF0aW9uID0ge1xuXHRcdGNyZWF0ZToge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0XHR1cGRhdGU6IHt9LFxuXHRcdG1vdmU6IHt9XG5cdH07XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uT3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKCk7XG5cdFx0dGhpcy5wb3N0UHJvY2VzcygpO1xuXHR9XG5cblx0Z2V0UGFyZW50IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID9cblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgOlxuXHRcdFx0e2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnksIHBhcmVudElkLCBwYXJlbnRUeXBlKSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoaXRlbUVudHJ5KTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRwb3N0UHJvY2VzcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUVudHJ5W2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcblx0XHRcdFx0dGhpcy5jb21waWxhdGlvbi5tb3ZlLFxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBbXV1cblx0XHRcdCk7XG5cblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcblx0XHRcdGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmICh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaGFzQ2hhbmdlcyhpdGVtRW50cnkpKVxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc0VkaXRhYmxlQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKHRoaXMuY29sbGVjdGlvbk9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5LmlkXS5lZGl0O1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNFZGl0YWJsZUl0ZW1zIChjb2xsZWN0aW9uRW50cnkpIHtcblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdLmVkaXRJdGVtcztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmNvbGxlY3Rpb25zKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudCAhPT0gbnVsbCA/IHBhcmVudC5pdGVtSWQgOiAwO1xuXG5cdFx0XHRpZiAodGhpcy5pc0VkaXRhYmxlQ29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpKSB7XG5cdFx0XHRcdGxldCBhZGRlZEl0ZW1zO1xuXHRcdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGFkZGVkSXRlbSkpXG5cdFx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudElkLCBwYXJlbnQuaXRlbVR5cGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oYXNFZGl0YWJsZUl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IENoYW5nZXNDb21waWxlciBmcm9tIFwiLi4vY2xhc3Nlcy9DaGFuZ2VzQ29tcGlsZXJcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5nZXNDb21waWxlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSwgY29sbGVjdGlvbk9wdGlvbnMpOiBDaGFuZ2VzQ29tcGlsZXIge1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGVyKFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0c2luZ2xlSXRlbXMsXG5cdFx0XHRjb2xsZWN0aW9ucyxcblx0XHRcdGNvbGxlY3Rpb25PcHRpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IENoYW5nZXNDb21waWxlckZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9DaGFuZ2VzQ29tcGlsZXJGYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcbmltcG9ydCBDcmVhdGVSZXF1ZXN0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5XCI7XG5pbXBvcnQgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tIFwiLi9BcGlGb3JtYXR0ZXJcIjtcbmltcG9ydCBDaGFuZ2VzQ29tcGlsZXIgZnJvbSBcIi4vQ2hhbmdlc0NvbXBpbGVyXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4vQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gXCIuL0l0ZW1FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBJdGVtSGFuZGxlciBmcm9tIFwiLi9JdGVtSGFuZGxlclwiO1xuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSwgaXNGdW5jdGlvbiB9IGZyb20gXCIuL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxlckZhY3Rvcnk6IENoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbCc6XG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0XHRpZiAocmVzdWx0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TWFwVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHRleGVjdXRlIChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMsIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlLCBwYXJhbWV0ZXJzPywgY29sbGVjdGlvbk9wdGlvbnM/LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/KSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3RzKFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMsIGNvbGxlY3Rpb25PcHRpb25zKSxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXG5cdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzLCBjb252ZXJzaW9uTWFwLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykge1xuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCkucnVuKCk7XG5cdFx0Y29uc3QgcmVzcG9uc2VzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQpIHtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaykpXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UsIGNvbnZlcnNpb25NYXApIHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlTWFwID0gcmVzcG9uc2UubWFwO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuaXRlbXM7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBuZXdJdGVtSWQpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS51cGRhdGVGaWVsZHMoaXRlbUVudHJ5LCBmaWVsZHMpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMsIHRydWUpO1xuXG5cdFx0XHRcdC8vIGV4dGVuZCBjb252ZXJzaW9uIG1hcFxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IHJlc3BvbnNlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgcHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHByaW9yaXRpemVkSXRlbVR5cGVzID0gW1tdLCBbXSwgW11dO1xuXHRcdGxldCByZXF1ZXN0Q2hhaW4gPSB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXG5cdFx0XHRwcmlvcml0aXplZEl0ZW1UeXBlc1t0aGlzLmdldEl0ZW1UeXBlVXBkYXRlUHJpb3JpdHkoaXRlbVR5cGUpXS5wdXNoKGl0ZW1UeXBlKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGVzIG9mIHByaW9yaXRpemVkSXRlbVR5cGVzKSB7XG5cdFx0XHRpZiAoaXRlbVR5cGVzLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHJlcXVlc3RDaGFpbiA9IHJlcXVlc3RDaGFpbi50aGVuKFxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXF1ZXN0Q2hhaW47XG5cdH1cblxuXHQvLyBjb25zdHJ1Y3QgYSBjYWxsYmFjayBmdW5jdGlvblxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRjb25zdCByZXF1ZXN0cyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcykge1xuXHRcdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXMsIHBhcmFtZXRlck1hcCkge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmZvcm1hdFJlcXVlc3QoaXRlbUVudHJ5KTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBjb2xsZWN0aW9uTWFwKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblxuXHRcdFx0aWYgKGVudHJ5LmZpdHRpbmcubGVuZ3RoID4gMClcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGVudHJ5LmNvbGxlY3Rpb24uY29sdW1ucyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIHJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zLmdldCgpKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkuaW5pdGlhbCwge30sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnNldERlcml2ZWQoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdClcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUZpZWxkcyhpdGVtRW50cnksIGZpZWxkcyk7XG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNhbGxPbkNoYW5nZShpdGVtRW50cnksIHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucywgdHJ1ZSk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmQoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3RzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKSAvLyBjbGVhcmluZyBub3QgbmVjZXNzYXJ5XG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcblx0XHRjb25zdCBpZEFycmF5ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aWRBcnJheVxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmV4cGFuZENvbGxlY3Rpb25NYXAoaXRlbUVudHJ5LCBjb2xsZWN0aW9uTWFwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0Y29uc3QgcmVxdWVzdHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb21waWxhdGlvbltwYXJlbnRUeXBlXSlcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsIHBhcmVudElkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZU1vdmVSZXF1ZXN0IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XG5cdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50VHlwZSwgcGFyZW50SWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxuXHRcdFx0XHRzZWxmLmFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxuXHRcdFx0XHRcdHRoaXMuYnVpbGRNb3ZlUmVxdWVzdChjb21waWxhdGlvbkVudHJpZXMpXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxmLnByb2Nlc3NNb3ZlUmVzcG9uc2UocmVzcG9uc2UsIGNvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKHJlc3BvbnNlLCBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXG5cblx0XHRjb25zdCBpdGVtRW50cmllcyA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50SWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQuaXRlbUlkLFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0KTtcblxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihhZGRDb2xsZWN0aW9uTWFwLCAnYWRkSXRlbXMnKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkQ29sbGVjdGlvbk1hcEVudHJ5IChjb2xsZWN0aW9uTWFwLCBwYXJlbnRJZCwgaXRlbUVudHJ5LCB2YWx1ZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXBFbnRyeSA9IGNyZWF0ZVBhdGgoXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5wYXJlbnQuaXRlbVR5cGUsIHBhcmVudElkLCBpdGVtRW50cnkuaXRlbVR5cGVdLFxuXHRcdFx0W3t9LCB7fSwgW11dXG5cdFx0KTtcblxuXHRcdGNvbGxlY3Rpb25NYXBFbnRyeS5wdXNoKHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgZm9yRWFjaENvbGxlY3Rpb24gKGNvbGxlY3Rpb25NYXAsIG1ldGhvZCkge1xuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpW21ldGhvZF0oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSkge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb252ZXJzaW9uTWFwKSlcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXHRcdFx0Y29uc3QgdXBkYXRlZENvbHVtbnM6IGFueSA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XG5cblx0XHRcdC8vIHRoZXJlIG1pZ2h0IGJlIGl0ZW0gY29sdW1ucyAobGlrZSBzdWJwcm9qZWN0KSB3aGljaCBzaG91bGQgYmUgdXBkYXRlZFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmZvckVhY2goXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUl0ZW1GaWVsZHMoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVwZGF0ZUl0ZW1GaWVsZHMoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXG5cdHByaXZhdGUgZXhlY3V0ZVJlcXVlc3RzIChjaGFuZ2VzOiBDaGFuZ2VzQ29tcGlsZXIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IHNpbmdsZUl0ZW1zID0gY2hhbmdlcy5zaW5nbGVJdGVtcztcblx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNoYW5nZXMuY29sbGVjdGlvbnM7XG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmNyZWF0ZSwgcGFyYW1ldGVycywgY29udmVyc2lvbk1hcCwgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0fSwgLy8gaXRlbSBpZCBjb252ZXJzaW9uIG1hcFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuLi9jbGFzc2VzL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvciBmcm9tIFwiLi4vY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUhhbmRsZXJcIjtcbmltcG9ydCBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0FwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IGZyb20gXCIuL0NoYW5nZXNDb21waWxlckZhY3RvcnlcIjtcbmltcG9ydCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcbmltcG9ydCBDcmVhdGVSZXF1ZXN0RmFjdG9yeSBmcm9tIFwiLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZVxuXHRcdCk7XG5cdH1cblxufVxuIiwiaW1wb3J0IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5IGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gJy4uL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgfSBmcm9tICcuLi90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRNQVlCRSA9ICdtYXliZSdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IGVudHJ5KVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJ5KSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5pbmRleE9mKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRpZiAoaW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zcGxpY2UoaW5kZXgsIDEpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5zbGljZSgpO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkubWF0Y2hQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm1hdGNoUGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogT25seSByZXNvdXJjZXNcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cblx0ICovXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQpOiBDb2xsZWN0aW9uRW50cnlbXSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRUeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRJZFxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSwgZmllbGRzKSB7XG5cdFx0Y29uc3QgZml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IG1heWJlUmVzdWx0ID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZ1Jlc3VsdCA9IFtdO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHsgZml0dGluZzogZml0dGluZ1Jlc3VsdCwgbm90Zml0dGluZzogbm90Rml0dGluZ1Jlc3VsdCwgbWF5YmU6IG1heWJlUmVzdWx0IH07XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgZmllbGRzLCBpdGVtVHlwZSk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xuXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xuXHRcdFx0XHRmaXR0aW5nUmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKG1hdGNoUmVzdWx0ID09PSBDT05TVEFOVFMuTUFZQkUpXG5cdFx0XHRcdG1heWJlUmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bm90Rml0dGluZ1Jlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0QnlLZXkgKGl0ZW1UeXBlLCBlbnRyeUtleSk6IENvbGxlY3Rpb25FbnRyeVtdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRpZiAoZW50cnkub3B0aW9ucy5lbnRyeUtleSA9PT0gZW50cnlLZXkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiBlbnRyeS5yZXNvdXJjZXMpIHtcblx0XHRcdFx0aWYgKHJlc291cmNlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkNhY2hlIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgZnJvbSBcIi4vUXVlcnlNYXRjaGVyRmFjdG9yeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkVudHJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgSXRlbVJlcXVlc3RTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSBcIi4uL2NsYXNzZXMvS2V5U2VydmljZVwiO1xuaW1wb3J0IFF1ZXJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9RdWVyeVNlcnZpY2VcIjtcblxuaW1wb3J0IHsgaW5BcnJheSB9IGZyb20gXCIuLi9jbGFzc2VzL1V0aWxcIjtcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2UgZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRW50cnkge1xuXHRpZDogbnVtYmVyID0gY3VycmVudElkKys7XG5cdHF1ZXJ5OiBhbnk7XG5cdGNvbHVtbnM6IGFueTtcblxuXHRwYXJlbnQ6IG51bGwgfCB7IGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nIH0gPSBudWxsO1xuXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcblx0ZGVmZXJyZWQ6IGFueTtcblx0cHJvbWlzZTogYW55O1xuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XG5cdCkge1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cdFx0dGhpcy5xdWVyeSA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdH1cblxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXNvbHZlIChpdGVtRW50cnlSZXNvdXJjZSk6IENvbGxlY3Rpb25FbnRyeSB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5UmVzb3VyY2UuY29sdW1ucztcblx0XHR0aGlzLmluaXRpYWwgPSBpdGVtRW50cnlSZXNvdXJjZS5pdGVtcztcblx0XHR0aGlzLml0ZW1zID0gaXRlbUVudHJ5UmVzb3VyY2UuaXRlbXMuc2xpY2UoKTtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZSwgaXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChtb2QuaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdHJldHVybiBtb2Q7XG5cdFx0fVxuXHR9XG5cblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3IgPSBbXSk6IG51bWJlcltdIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xuXHR9XG5cblx0YWRkSXRlbXMgKGl0ZW1FbnRyaWVzLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCA9IGZhbHNlLCBlbmFibGVDYWxsYmFjayA9IHRydWUpOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRcdGluaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGVudHJpZXNBZGRlZFRvSW5pdGlhbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCByZXN1bHQ7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IGFkZGVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXHR9XG5cblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSk7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXIgKHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRlbmFibGVDYWxsYmFja1xuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKGZpbHRlckZ1bmN0aW9uLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tSW5pdGlhbCA9IHVwZGF0ZUluaXRpYWwgPyB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbikgOiBbXTtcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEZyb21Nb2Qgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5kZWFjdGl2YXRlUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2spXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnMpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24obmV3Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlLCB0aGlzLml0ZW1zKTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxuXHRcdFx0XHRcdHRoaXMsIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtc1tpdGVtRW50cnkuaXRlbUlkXSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHRoaXMudXBkYXRlQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBlbmFibGVDYWxsYmFjaz8sIHVwZGF0ZUluaXRpYWw/KSB7XG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdGV4dGVuZGVkUXVlcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcblx0XHQpO1xuXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgP1xuXHRcdFx0XHRleHRlbmRlZFF1ZXJ5IDpcblx0XHRcdFx0ZnVsbFF1ZXJ5XG5cdFx0KS50aGVuKHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdFx0XHR0aGlzLmNvbHVtbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGVuYWJsZUNhbGxiYWNrKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKSB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0dXBkYXRlQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IGNvbHVtbkluZm8ucmVxdWVzdDtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5JbmZvO1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKCF0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbChpdGVtRW50cnkpICYmIHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0FkZGVkSXRlbXMgKCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XG5cdH1cblxuXHRoYXNSZW1vdmVkSXRlbXMgKCkge1xuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XG5cdH1cblxuXHRoYXNVcGRhdGVkSXRlbXMgKCkge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmhhc0NoYW5nZXMobW9kKSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0Q3VycmVudFJlc291cmNlICgpIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdHJldHVybiByZXNvdXJjZXNbcmVzb3VyY2VzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3VidGFiQ2hhbmdlID0gZmFsc2UpIHtcblx0XHRjb25zdCBpdGVtRW50cmllcyA9IHRoaXMuaXRlbXM7IC8vIFRPRE86IGluaXRpYWxcblx0XHRjb25zdCBjdXJyZW50UmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgbmV3UmVzb3VyY2VzID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5jbGVhclJlc291cmNlcyhpdGVtRW50cnkpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXM7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0Y29uc3QgYWRkZWRJdGVtcyA9IHRoaXMuZ2V0QWRkZWRJdGVtcyh0cnVlKTtcblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRyZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKHJlbW92ZWRJdGVtcyk7XG5cdFx0XHRyZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKGFkZGVkSXRlbXMpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2VcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbVJlcXVlc3RTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9LZXlTZXJ2aWNlJztcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9RdWVyeVNlcnZpY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJBcnJheSB9IGZyb20gXCIuLi9jbGFzc2VzL1V0aWxcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCB9IGZyb20gJy4uL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRpdGVtczogSXRlbVJlc291cmNlW107XG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XG5cdGNvbHVtbnM7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMgZW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlO1xuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XG5cdFx0dGhpcy5pdGVtcyA9IFtdO1xuXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XG5cblx0XHR0aGlzLmFkZEl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbXMpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogbnVtYmVyKTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcblx0fVxuXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHRoaXMuaXRlbUlkTWFwID0gaXRlbUlkTWFwO1xuXHR9XG5cblx0YWRkSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10geyAvLyBzaG91bGQgYmUgZmFzdFxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuZ2V0Q29uc3RydWN0b3IoXG5cdFx0XHR7XG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxuXHRcdFx0XHRvbkNoYW5nZTogb3B0aW9ucy5vbkNoYW5nZSxcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBvcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW1cblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcblxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcblxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xuXHQgKiBAcmV0dXJucyB7SXRlbVJlc291cmNlW119XG5cdCAqXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXG5cdCAqIEZpbHRlcnMgb24gSXRlbVJlc291cmNlLmVudHJ5ID09PSBJdGVtRW50cnlcblx0ICovXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmaWx0ZXJBcnJheShcblx0XHRcdHRoaXMuaXRlbXMsXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmIChpdGVtUmVzb3VyY2UuZW50cnkgPT09IGl0ZW1FbnRyeSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2FsbE9uQWRkIChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcblx0fVxuXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiB2b2lkKSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0Y2FsbGJhY2soaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdGZpbHRlciAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbikge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcblx0fVxuXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XG5cdFx0Y29uc3QgaXRlbXNSZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XG5cblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhcmd1bWVudChpdGVtUmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwIChhcmd1bWVudCkge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVkdWNlPFQ+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCB2YWx1ZTogVCkgPT4gVCwgdmFsdWU6IFQpOiBUIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCByZXR1cm5BbGxJdGVtcywgZW5hYmxlQ2FsbGJhY2tzKTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0LnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgZnJvbSAnLi4vZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmltcG9ydCBJdGVtUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2UgZnJvbSBcIi4vQ29sbGVjdGlvblJlc291cmNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gJy4vSXRlbUVudHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9uc1xuXHQpIHtcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0c2F2ZSAoKSB7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsICYmIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XG5cdH1cblxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cblx0bW92ZUl0ZW1zIChpZEFycmF5LCBkZXN0aW5hdGlvbiwgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZW5hYmxlU2F2ZSB8fCBvcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSAhPT0gZGVzdGluYXRpb24uZW50cnkuaXRlbVR5cGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xuXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCBlbmFibGVDYWxsYmFja3MpIHtcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbmFibGVDYWxsYmFja3MgPSB0cnVlO1xuXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1SZXNvdXJjZXMpO1xuXHR9XG5cblx0cmVtb3ZlSXRlbSAoaXRlbUlkLCBlbmFibGVDYWxsYmFja3MpIHtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVJdGVtcyhbaXRlbUlkXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5LCBlbmFibGVDYWxsYmFja3MgPSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLmVudHJ5Lml0ZW1UeXBlKS50aGVuKHRlbXBsYXRlID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBbXTtcblx0XHRcdFx0bGV0IGl0ZW1SZXNvdXJjZXM7XG5cblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXNBcnJheSkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmNyZWF0ZUxvY2FsRW50cnkoXG5cdFx0XHRcdFx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5maWVsZHMsXG5cdFx0XHRcdFx0XHRcdHZhbHVlLmRlcml2ZWRcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIHRoaXMsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oY29udmVyc2lvbk1hcCA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0tleVNlcnZpY2UnO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IGZyb20gJy4uL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4vQ29sbGVjdGlvbkVudHJ5XCI7XG5pbXBvcnQgQ29sbGVjdGlvblJlc291cmNlIGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XG5cdH1cbn1cbiIsImltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XG5pbXBvcnQgSXRlbUhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvSXRlbUhhbmRsZXJcIjtcbmltcG9ydCBLZXlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvS2V5U2VydmljZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2VcIjtcbmltcG9ydCBDb2xsZWN0aW9uRW50cnkgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uRW50cnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2VcIjtcbmltcG9ydCBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZVwiO1xuaW1wb3J0IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZUZhY3RvcnkgZnJvbSBcIi4vSXRlbVJlc291cmNlRmFjdG9yeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBuZXcgKG9wdGlvbnMuZWRpdENvbGxlY3Rpb24gPyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIDogQ29sbGVjdGlvblZpZXdSZXNvdXJjZSkoXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnlcIjtcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gXCIuL0NvbHVtbkhhbmRsZXJcIjtcbmltcG9ydCBDb2x1bW5VdGlsIGZyb20gXCIuL0NvbHVtblV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcblx0ZXhwYW5zaW9uTWFwOiBhbnkgPSB7fTtcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogYW55XG5cdCkge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xuXHR9XG5cblx0cnVuIChjb2x1bW5JbmZvOiBhbnksIHJldHVybkV4cGFuc2lvblJlc3VsdDogYm9vbGVhbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZm9JZCA9IGNvbHVtbkluZm8uaWQ7XG5cblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gOlxuXHRcdFx0XHR0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdLm1lcmdlZDtcblxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGNvbHVtbkluZm8ucmVxdWVzdCxcblx0XHRcdGNvbHVtbkluZm8udHJ1ZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gcmV0dXJuRXhwYW5zaW9uUmVzdWx0ID8gbnVsbCA6IGNvbHVtbkluZm87XG5cblx0XHR0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5JbmZvSWRdID0gdGhpcy5leHBhbmRDb2x1bW5JbmZvKGNvbHVtbkluZm8pO1xuXG5cdFx0cmV0dXJuIHJldHVybkV4cGFuc2lvblJlc3VsdCA/IHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtbkluZm9JZF0gOlxuXHRcdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uSW5mb0lkXS5tZXJnZWQ7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZENvbHVtbkluZm8gKGNvbHVtbkluZm86IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3RNZXJnZVJlc3VsdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbkluZm8ucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1ucyk7XG5cdFx0Y29uc3QgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uSW5mby5yZXNwb25zZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xuXHRcdFx0ZmFsc2UsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cblx0XHRtZXJnZWQudHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IGNvbHVtbkluZm8udHJ1ZTtcblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uRXhwYW5zaW9uIGZyb20gXCIuLi9jbGFzc2VzL0NvbHVtbkV4cGFuc2lvblwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IENvbHVtblV0aWwgZnJvbSAnLi4vY2xhc3Nlcy9Db2x1bW5VdGlsJztcbmltcG9ydCBDb2x1bW5TZXRGYWN0b3J5IGZyb20gXCIuL0NvbHVtblNldEZhY3RvcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBDb2x1bW5IYW5kbGVyIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XG5pbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sdW1uU2V0IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblx0dHJ1ZTogYm9vbGVhbjtcblx0bGluayA9IG51bGw7XG5cdG1haW4gPSBbXTtcblx0ZGVyaXZlZCA9IFtdO1xuXHRyb290ID0gW107XG5cdGxlYWYgPSBbXTtcblx0Zm9ybWF0dGVkID0ge1xuXHRcdG1haW46IFtdLFxuXHRcdGRlcml2ZWQ6IFtdXG5cdH07XG5cdGZpbHRlcmVkID0gW107XG5cdGN1c3RvbSA9IFtdO1xuXHRzZWFyY2hhYmxlID0gW107XG5cdGl0ZW0gPSBbXTtcblx0bm90SXRlbSA9IFtdO1xuXG5cdHJlcXVlc3QgPSBbXTtcblx0cmVzcG9uc2UgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwdWJsaWMgaXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnMsXG5cdFx0cHVibGljIGVuYWJsZUNhY2hpbmcgPSB0cnVlLFxuXHRcdHB1YmxpYyBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlXG5cdCkge1xuXHRcdHRoaXMudHJ1ZSA9IHJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKCk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMoKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKCkge1xuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpIDpcblx0XHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXSkge1xuXHRcdFx0dGhpcy5tYWluLnB1c2goXG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uSW5mbyhcblx0XHRcdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1uc1t0aGlzLml0ZW1UeXBlXVtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0bnVsbFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvY2Vzc1JlcXVlc3RDb2x1bW5zICgpIHtcblx0XHR0aGlzLnJlcXVlc3QgPSB0aGlzLnJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiB0aGlzLnJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCB0aGlzLml0ZW1UeXBlLCBudWxsKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgdGhpcy5pdGVtVHlwZSwgbnVsbCkpO1xuXHR9XG5cblx0Z2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGNvbHVtblR5cGUsIHBhcmVudCkge1xuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XG5cblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAodGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5yZXNwb25zZUNvbHVtbnNbY29sdW1uVHlwZV1bY29sdW1uSWRdO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGNvbHVtblR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGNvbHVtblR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzdWx0UmVzcG9uc2VbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtjb2x1bW5UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2NvbHVtblR5cGVdW2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhyZXNwb25zZUNvbHVtbiwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQpO1xuXHR9XG5cblx0Z2V0Q29sdW1uSW5mbyAocmVzcG9uc2VDb2x1bW4sIGNoaWxkcmVuLCBwYXJlbnQpIHtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRwYXRoOiBpc0Rlcml2ZWQgP1xuXHRcdFx0XHRwYXJlbnQucGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQsXG5cdFx0XHRhcGlDb2x1bW46IHJlc3BvbnNlQ29sdW1uLFxuXHRcdFx0bGV2ZWw6IGlzRGVyaXZlZCA/IHBhcmVudC5sZXZlbCArIDEgOiAwLFxuXHRcdFx0aXNMZWFmOiBjaGlsZHJlbi5sZW5ndGggPT09IDAsXG5cdFx0XHRpdGVtVHlwZTogJycsXG5cdFx0XHRjaGlsZHJlbjogW10sXG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHR0YWlsUGF0aDogbnVsbFxuXHRcdH07XG5cblx0XHRpZiAoaXNEZXJpdmVkKSB7XG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0Y29sdW1uSW5mby5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0XHRjb2x1bW5JbmZvLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID4gMCA/XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aC5jb25jYXQoQ09MVU1OX1NFUEVSQVRPUiwgY29sdW1uSWQpIDogY29sdW1uSWQ7XG5cdFx0fSBlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW3RoaXMuY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0dGhpcy5saW5rID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZXNwb25zZUNvbHVtbi5pdGVtVHlwZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRjb25zb2xlLndhcm4oJ2l0ZW1UeXBlIHVuZGVmaW5lZCBpbiBjb2x1bW4nLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlID0gcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGU7XG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xuXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhjaGlsZCwgY29sdW1uSW5mby5pdGVtVHlwZSwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uSW5mbztcblx0fVxufVxuIiwiaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IENvbHVtblNldCBmcm9tIFwiLi4vY2xhc3Nlcy9Db2x1bW5TZXRcIjtcbmltcG9ydCBDb2x1bW5VdGlsIGZyb20gJy4uL2NsYXNzZXMvQ29sdW1uVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSkge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdGVuYWJsZUNhY2hpbmcsXG5cdFx0XHRpbmNsdWRlSWRDb2x1bW5cblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tIFwiLi9LZXlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcmVhdGVSZXF1ZXN0IHtcblx0cmVxdWVzdHMgPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwLFxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2Vcblx0KSB7XG5cdH1cblxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnM7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblxuXHRcdFx0aWYgKGVudHJ5LmZpdHRpbmcubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChlbnRyeS5jb2xsZWN0aW9uLmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xuXHR9XG5cblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0O1xuXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG5cdFx0cmVxdWVzdC5wYXJlbnRJZCA9IHt9O1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRydW4gKCkge1xuXHRcdGlmICh0aGlzLmJyZWFrdXBCeVBhcmVudCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/IHBhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdHM7XG5cdH1cblxuXHRpbml0aWFsaXplUmVxdWVzdCAoKTogYW55IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRpdGVtczoge30sXG5cdFx0XHRjb2xsZWN0aW9uczoge31cblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGRlc3RpbmF0aW9uLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKHJlcXVlc3QuaXRlbVR5cGUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGxldCBsaW5rcztcblxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxuXHRcdFx0XHRcdHJlcXVlc3QucGFyZW50SWRbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZXhwYW5kQ29sbGVjdGlvbk1hcChpdGVtRW50cnksIGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmZvcm1hdFJlcXVlc3QoaXRlbUVudHJ5KTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEVudHJpZXMpIHtcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGNoaWxkSWQgaW4gY2hpbGRFbnRyaWVzW2NoaWxkVHlwZV0pXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSBcIi4uL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDcmVhdGVSZXF1ZXN0IGZyb20gXCIuLi9jbGFzc2VzL0NyZWF0ZVJlcXVlc3RcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgS2V5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0tleVNlcnZpY2UnO1xuaW1wb3J0IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVJlcXVlc3RGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoY29tcGlsYXRpb24sIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdGVudHJpZXMgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIXRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2FsKGl0ZW1FbnRyeSkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Z2V0IChpdGVtVHlwZSwgaXRlbUlkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlLCBpdGVtSWQpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KSB7XG5cdFx0Y29uc3QgcGFyZW50OiBhbnkgPSBpdGVtRW50cnkucGFyZW50ICE9PSBudWxsID8gaXRlbUVudHJ5LnBhcmVudCA6IHt9O1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRwYXJlbnQuaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZpZWxkcyhpdGVtRW50cnkpXG5cdFx0KTtcblxuXHRcdHJldHVybiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0IEl0ZW1DYWNoZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtQ2FjaGVcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgUXVlcnlNYXRjaGVyRmFjdG9yeSBmcm9tIFwiLi9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW1DYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZShcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4vSXRlbVJlc291cmNlXCI7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtRW50cnkge1xuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0bW9kaWZpZWQ7XG5cdHBhcmVudDogbnVsbCB8IHsgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcgfSA9IG51bGw7XG5cblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XG5cdGRlZmVycmVkO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcblx0XHRwdWJsaWMgaXRlbUlkOiBudW1iZXIsXG5cdFx0cHVibGljIGNvbHVtbnM/LFxuXHRcdHB1YmxpYyBpbml0aWFsPyxcblx0XHRwdWJsaWMgZGVyaXZlZCA9IHt9LFxuXHRcdHB1YmxpYyByZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdID0gW11cblx0KSB7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4uL21vZGVscy9JdGVtRW50cnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2UgZnJvbSBcIi4uL21vZGVscy9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXRlbUVudHJ5RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIsIGNvbHVtbnM/LCBpbml0aWFsPzogb2JqZWN0LCBkZXJpdmVkPzogb2JqZWN0LCByZXNvdXJjZXM/OiBJdGVtUmVzb3VyY2VbXSk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRpbml0aWFsLFxuXHRcdFx0ZGVyaXZlZCxcblx0XHRcdHJlc291cmNlc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtUmVzb3VyY2Uge1xuXHRkZXJpdmVkO1xuXHRjb2x1bW5zO1xuXHRmaWVsZHM7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByb3RlY3RlZCBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBlbnRyeTogSXRlbUVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXHR9XG5cblx0aXNOZXdSZXNvdXJjZSAocmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmlzTG9jYWwocmVzb3VyY2UuZW50cnkpICYmXG5cdFx0XHRyZXNvdXJjZS50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlzTG9jYWwgKCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NhbCh0aGlzLmVudHJ5KTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgQXBpRm9ybWF0dGVyIGZyb20gJy4uL2NsYXNzZXMvQXBpRm9ybWF0dGVyJztcbmltcG9ydCBDaGFuZ2VzUHJvY2Vzc29yIGZyb20gJy4uL2NsYXNzZXMvQ2hhbmdlc1Byb2Nlc3Nvcic7XG5pbXBvcnQgQ29sbGVjdGlvbkhhbmRsZXIgZnJvbSAnLi4vY2xhc3Nlcy9Db2xsZWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgTG9ja1NlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9Mb2NrU2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCBJdGVtRW50cnkgZnJvbSBcIi4vSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlIGZyb20gXCIuL0l0ZW1SZXNvdXJjZVwiO1xuXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcblx0bG9jYWxDb3BpZXM6IGFueVtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyO1xuXHRoYXNDaGFuZ2VzOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9ucyxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdFx0c3VwZXIoaXRlbUVudHJ5U2VydmljZSwgZW50cnksIG9wdGlvbnMpO1xuXG5cdFx0aXRlbUVudHJ5U2VydmljZS5zZXRNb2RpZmllZChlbnRyeSk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0c3RhcnQgKCkge1xuXHRcdGlmICh0aGlzLmxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XG5cblx0XHR0aGlzLmxvY2FsQ29waWVzLnB1c2godGhpcy5jb3B5RmllbGRzKCkpO1xuXHR9XG5cblx0cm9sbGJhY2sgKCkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubG9jYWxDb3BpZXMucG9wKCksIGl0ZW1FbnRyeS5tb2RpZmllZCwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAodGhpcy5pc05ld1Jlc291cmNlKHRoaXMpICYmIHRoaXMubG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XG5cdH1cblxuXHRjb21taXQgKGluaXRpYWwpIHtcblx0XHRpZiAoIWluaXRpYWwpXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzLnBvcCgpO1xuXG5cdFx0Ly8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xuXHRcdGlmICh0aGlzLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKztcblx0fVxuXG5cdGdldExvY2FsQ29weSAoKSB7XG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uPykge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHRpZiAoZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZClcblx0XHRcdGRlc3RpbmF0aW9uID0ge307XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblx0fVxuXG5cdHNldEZpZWxkcyAodmFsdWVzLCBjYWxsT25DaGFuZ2UpIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGNvbnN0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblx0XHRsZXQgcHJldmlvdXM7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWxsT25DaGFuZ2UgPSB0cnVlO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdLCB2YWx1ZXNbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXMpIHtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2FsbE9uQ2hhbmdlKHRoaXMuZW50cnksIHByZXZpb3VzKTtcblx0fVxuXG5cdHNhdmUgKHBhcmFtZXRlcnM/KSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5pc0xvY2thYmxlKGl0ZW1FbnRyeSkgP1xuXHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHRsb2NrVG9rZW4gPT4ge1xuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3IuZXhlY3V0ZShbaXRlbUVudHJ5XSwgW10sIGZhbHNlLCBwYXJhbWV0ZXJNYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5zZXREaXNwbGF5TmFtZShpdGVtRW50cnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkSXRlbXNUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XG5cdH1cbn1cbiIsImltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi9JdGVtUmVzb3VyY2VcIjtcblxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLCBlbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIoaXRlbUVudHJ5U2VydmljZSwgZW50cnksIG9wdGlvbnMpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuLi9jbGFzc2VzL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvciBmcm9tICcuLi9jbGFzc2VzL0NoYW5nZXNQcm9jZXNzb3InO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gJy4uL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXInO1xuaW1wb3J0IEl0ZW1FbnRyeVNlcnZpY2UgZnJvbSAnLi4vY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlJztcbmltcG9ydCBJdGVtUmVzb3VyY2VTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1SZXNvdXJjZVNlcnZpY2VcIjtcbmltcG9ydCBMb2NrU2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0xvY2tTZXJ2aWNlJztcbmltcG9ydCBFcnJvckhhbmRsZXJJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFByb21pc2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9Qcm9taXNlSW50ZXJmYWNlJztcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSB9IGZyb20gXCIuLi9tb2RlbHMvRWRpdFJlc291cmNlXCI7XG5pbXBvcnQgSXRlbUVudHJ5IGZyb20gXCIuLi9tb2RlbHMvSXRlbUVudHJ5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlIGZyb20gXCIuLi9tb2RlbHMvSXRlbVJlc291cmNlXCI7XG5pbXBvcnQgeyBWaWV3UmVzb3VyY2UgfSBmcm9tIFwiLi4vbW9kZWxzL1ZpZXdSZXNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnMpIHtcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRWRpdFJlc291cmNlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogSXRlbVJlc291cmNlIHtcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xuXHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRvcHRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVcIjtcbmltcG9ydCBJdGVtQ2FjaGUgZnJvbSBcIi4vSXRlbUNhY2hlXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tIFwiLi9JdGVtRW50cnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVXRpbFwiO1xuXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXIge1xuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xuXHRkZXN0aW5hdGlvbjogYW55ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KSB7XG5cdH1cblxuXHRwcm9jZXNzICgpIHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XG5cblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcblxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xuXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCB2YWx1ZXMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZm9ybWF0UmVxdWVzdChpdGVtRW50cnkpO1xuXHRcdGNvbnN0IGxpbmtzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XG5cblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcblxuXHRcdGlmIChoYXNWYWx1ZXMpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcblxuXHRcdGlmIChoYXNMaW5rcylcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcblxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xuXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkNhY2hlIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZVwiO1xuaW1wb3J0IEl0ZW1DYWNoZSBmcm9tIFwiLi4vY2xhc3Nlcy9JdGVtQ2FjaGVcIjtcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4uL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZSc7XG5pbXBvcnQgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyIGZyb20gXCIuLi9jbGFzc2VzL01vZHVsZUNoYW5nZXNDb21waWxlclwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsZXIoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHRyb290SXRlbSxcblx0XHRcdHNpbmdsZUl0ZW1DYWNoZSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IEFwaUZvcm1hdHRlciBmcm9tICcuL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcblxuY29uc3QgTUFZQkUgPSAnbWF5YmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeU1hdGNoZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgcGFyZW50VHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBwYXJlbnRJZDogbnVtYmVyLFxuXHRcdHB1YmxpYyBmaWVsZHM6IG9iamVjdCxcblx0XHRwdWJsaWMgaXRlbVR5cGU/OiBzdHJpbmdcblx0KSB7XG5cblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWUsIHF1ZXJ5VmFsdWUpIHtcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCBzdHJpbmcge1xuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5KSB7XG5cdFx0aWYgKHF1ZXJ5LnJldmVyc2UpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRsZXQgbWF0Y2g7XG5cblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHRoaXMucGFyZW50VHlwZSlcblx0XHRcdG1hdGNoID0gZmFsc2U7XG5cdFx0ZWxzZVxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5wYXJlbnRJZCwgcXVlcnkucXVlcnkpO1xuXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3Rcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XG5cdFx0XHRjYXNlICc9Jzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICchPSc6XG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJzwnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPD0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz4nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPj0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJ0lOJzpcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnTk9UIElOJzpcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi4vY2xhc3Nlcy9BcGlGb3JtYXR0ZXInO1xuaW1wb3J0IFF1ZXJ5TWF0Y2hlciBmcm9tIFwiLi4vY2xhc3Nlcy9RdWVyeU1hdGNoZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHBhcmVudFR5cGU6IHN0cmluZywgcGFyZW50SWQ6IG51bWJlciwgZmllbGRzOiBvYmplY3QsIGl0ZW1UeXBlPzogc3RyaW5nKTogUXVlcnlNYXRjaGVyIHtcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5TWF0Y2hlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkLFxuXHRcdFx0ZmllbGRzLFxuXHRcdFx0aXRlbVR5cGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHksIGhhc1Byb3BlcnRpZXMgfSBmcm9tIFwiLi9VdGlsXCI7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0T0JKID0gMCxcblx0U1RSID0gMSxcblx0U0VQID0gJzonXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcblx0cXVlcnk6IGFueTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxuXHRcdFx0cmV0dXJuIDA7XG5cblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XG5cdH1cblxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxuXHRcdFx0KTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXG5cdFx0XHRyZXR1cm4gW3t9LCAne30nXTtcblxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXG5cdFx0XHRdO1xuXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IHt9O1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xuXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XG5cblx0XHRcdGlmIChpID4gMClcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XG5cblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHF1ZXJ5ID0ge307XG5cblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xuXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bm90ID0gZmFsc2U7XG5cblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcblx0XHRlbHNlXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9ucyA9IFtdO1xuXHRcdGNvbnN0IHF1ZXJ5ID0gW107XG5cdFx0bGV0IHN0cmluZyA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xuXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XG5cdH1cblxuXHRwcml2YXRlIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG5cblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XG5cblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcblx0fVxufVxuIiwiaW1wb3J0IFF1ZXJ5UGFyc2VyIGZyb20gXCIuLi9jbGFzc2VzL1F1ZXJ5UGFyc2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ29sdW1uVXRpbCBmcm9tIFwiLi9Db2x1bW5VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xuXHRwcml2YXRlIGNvbHVtbnMgPSB7fTtcblx0cHJpdmF0ZSBjb2x1bW5JbmZvSWRNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0ZXhwYW5kIChjb2x1bW5JbmZvKSB7XG5cdFx0aWYgKHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xuXG5cdFx0aWYgKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtbkluZm8ucmVxdWVzdClcblx0XHRcdC5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSA9IHRydWU7XG5cdH1cblxuXHRnZXQgKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XG5cdH1cbn1cbiIsImltcG9ydCBDb2x1bW5VdGlsIGZyb20gJy4uL2NsYXNzZXMvQ29sdW1uVXRpbCc7XG5pbXBvcnQgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiBmcm9tIFwiLi4vY2xhc3Nlcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgZnJvbSBcIi4uL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbUNhY2hlRmFjdG9yeSBmcm9tIFwiLi4vZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuLi9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UnO1xuaW1wb3J0IEVycm9ySGFuZGxlckludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL0Vycm9ySGFuZGxlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuLi9pbnRlcmZhY2VzL1Byb21pc2VJbnRlcmZhY2UnO1xuaW1wb3J0IENvbGxlY3Rpb25FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25FbnRyeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZVwiO1xuaW1wb3J0IEl0ZW1FbnRyeSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1FbnRyeVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1SZXNvdXJjZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25DYWNoZSBmcm9tIFwiLi9Db2xsZWN0aW9uQ2FjaGVcIjtcbmltcG9ydCBDb2xsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9Db2xsZWN0aW9uSGFuZGxlclwiO1xuaW1wb3J0IENvbHVtbkhhbmRsZXIgZnJvbSBcIi4vQ29sdW1uSGFuZGxlclwiO1xuaW1wb3J0IEl0ZW1DYWNoZSBmcm9tICcuL0l0ZW1DYWNoZSc7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbVJlc291cmNlU2VydmljZSBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IExvY2tTZXJ2aWNlIGZyb20gXCIuL0xvY2tTZXJ2aWNlXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbENhY2hlIHtcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRpdGVtczogSXRlbUNhY2hlO1xuXHRjb2xsZWN0aW9uT3B0aW9ucyA9IHt9O1xuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXHRjYWxsYmFja3MgPSB7b25CZWZvcmVTYXZlOiB7fSwgb25TYXZlU3VjY2Vzczoge30sIG9uU2F2ZVdpdGhvdXRDbG9zaW5nOiB7fX07XG5cblx0Y2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblx0aGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRyb290SXRlbTogSXRlbUVudHJ5O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTogSXRlbVJlc291cmNlIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdGlmICghdGhpcy5pdGVtcy5jb250YWlucyhpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpKVxuXHRcdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJJdGVtKGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMpO1xuXHR9XG5cblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0aWYgKCF0aGlzLmNvbGxlY3Rpb25zLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XG5cblx0XHRpZiAodGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnNbY29sbGVjdGlvbkVudHJ5SWRdID0ge1xuXHRcdFx0XHRlZGl0OiByZXNvdXJjZU9wdGlvbnMuZWRpdENvbGxlY3Rpb24sXG5cdFx0XHRcdGVkaXRJdGVtczogcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtc1xuXHRcdFx0fTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25PcHRpb25zRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25PcHRpb25zW2NvbGxlY3Rpb25FbnRyeUlkXTtcblxuXHRcdFx0Y29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0ID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0IHx8IHJlc291cmNlT3B0aW9ucy5lZGl0Q29sbGVjdGlvbjtcblx0XHRcdGNvbGxlY3Rpb25PcHRpb25zRW50cnkuZWRpdEl0ZW1zID0gY29sbGVjdGlvbk9wdGlvbnNFbnRyeS5lZGl0SXRlbXMgfHwgcmVzb3VyY2VPcHRpb25zLmVkaXRJdGVtcztcblx0XHR9XG5cblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlSXRlbSA9IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckl0ZW0oaXRlbVJlc291cmNlKTtcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9IChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oY29sbGVjdGlvblJlc291cmNlKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcblx0fVxuXG5cdGNsZWFyQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY2xlYXJSZXNvdXJjZXMoaXRlbUVudHJ5KTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNsZWFyUmVzb3VyY2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIHRoaXMgY29uZGl0aW9uIG9uY2UgY3JldyBhbmQgdHJhbnNwb3J0IGFyZSBubyBsb25nZXIgbG9hZGVkIGluIHNlcGVyYXRlIGdyaWQgaW5zdGFuY2VzIGluIHRoZSBwcm9qZWN0IHBsYW5uZXIgZ3JpZFxuXHRcdGlmICghaXNTdWJUYWJDaGFuZ2UpXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnJlc2V0TW9kaWZpZWQoaXRlbUVudHJ5KSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KSk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0fVxuXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdClcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XG5cblx0XHRpZiAoIW9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gdGhlc2UgYXJlIGVkaXQgcmVzb3VyY2VzIChlZGl0SXRlbXMpXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSXRlbSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucmVzZXRNb2RpZmllZChjb2xsZWN0aW9uSXRlbSk7XG5cdH1cblxuXHRfaGFzQ2hhbmdlcyAoKSB7XG5cdFx0aWYgKCF0aGlzLmhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXM7XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpIHtcblx0XHRpZiAodGhpcy5pdGVtcy5zb21lKChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5oYXNDaGFuZ2VzKGl0ZW1FbnRyeSk7XG5cdFx0fSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fSk7XG5cdH1cblxuXHRjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uT3B0aW9uc1tjb2xsZWN0aW9uRW50cnkuaWRdO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0SXRlbXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKSB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuaXNMb2NrYWJsZSh0aGlzLnJvb3RJdGVtKTtcblx0fVxuXG5cdHNhdmUgKGNsb3NlVGFiID0gZmFsc2UsIHBhcmFtZXRlcnMsIGJyZWFrVXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHRsb2NrVG9rZW4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvbkJlZm9yZVNhdmUnLCBjbG9zZVRhYik7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XG5cblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbk9wdGlvbnMsXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBjb252ZXJzaW9uTWFwLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXhlY3V0ZUNhbGxiYWNrcyAoZXZlbnQsIC4uLmFyZ3MpIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jYWxsYmFja3NbZXZlbnRdKVxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XG5cdH1cblxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKSB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZFxuXHQgKi9cblx0ZW5hYmxlV2F0Y2hlciAoKSB7XG5cdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWRcblx0ICovXG5cdGRpc2FibGVXYXRjaGVyICgpIHtcblx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHR9XG5cblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tIFwiLi4vY2xhc3Nlcy9Db2x1bW5IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbUVudHJ5U2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1FbnRyeVNlcnZpY2UnO1xuaW1wb3J0IEl0ZW1IYW5kbGVyIGZyb20gXCIuLi9jbGFzc2VzL0l0ZW1IYW5kbGVyXCI7XG5pbXBvcnQgSXRlbVJlc291cmNlU2VydmljZSBmcm9tICcuLi9jbGFzc2VzL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IExvY2tTZXJ2aWNlIGZyb20gXCIuLi9jbGFzc2VzL0xvY2tTZXJ2aWNlXCI7XG5pbXBvcnQgTG9jYWxDYWNoZSBmcm9tIFwiLi4vY2xhc3Nlcy9Mb2NhbENhY2hlXCI7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgZnJvbSAnLi4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvRXJyb3JIYW5kbGVySW50ZXJmYWNlJztcbmltcG9ydCBQcm9taXNlSW50ZXJmYWNlIGZyb20gJy4uL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5pbXBvcnQgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgZnJvbSBcIi4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IGZyb20gXCIuL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBJdGVtQ2FjaGVGYWN0b3J5IGZyb20gXCIuL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBJdGVtUmVzb3VyY2VGYWN0b3J5IGZyb20gXCIuL0l0ZW1SZXNvdXJjZUZhY3RvcnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0ICgpIHtcblx0XHRyZXR1cm4gbmV3IExvY2FsQ2FjaGUoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCBBcGlGb3JtYXR0ZXIgZnJvbSAnLi9jbGFzc2VzL0FwaUZvcm1hdHRlcic7XG5pbXBvcnQgQXBpUmVxdWVzdFNlcnZpY2UgZnJvbSAnLi9jbGFzc2VzL0FwaVJlcXVlc3RTZXJ2aWNlJztcbmltcG9ydCBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIGZyb20gXCIuL2NsYXNzZXMvQ29sbGVjdGlvbkVudHJ5U2VydmljZVwiO1xuaW1wb3J0IENvbGxlY3Rpb25IYW5kbGVyIGZyb20gXCIuL2NsYXNzZXMvQ29sbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmltcG9ydCBDb2x1bW5DYWNoZSBmcm9tIFwiLi9jbGFzc2VzL0NvbHVtbkNhY2hlXCI7XG5pbXBvcnQgQ29sdW1uSGFuZGxlciBmcm9tICcuL2NsYXNzZXMvQ29sdW1uSGFuZGxlcic7XG5pbXBvcnQgQ29sdW1uVXRpbCBmcm9tICcuL2NsYXNzZXMvQ29sdW1uVXRpbCc7XG5pbXBvcnQgSXRlbUFkbWluaXN0cmF0b3IgZnJvbSAnLi9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yJztcbmltcG9ydCBJdGVtRW50cnlTZXJ2aWNlIGZyb20gJy4vY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlJztcbmltcG9ydCBJdGVtSGFuZGxlciBmcm9tICcuL2NsYXNzZXMvSXRlbUhhbmRsZXInO1xuaW1wb3J0IEl0ZW1SZXF1ZXN0U2VydmljZSBmcm9tIFwiLi9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZVwiO1xuaW1wb3J0IEl0ZW1SZXNvdXJjZVNlcnZpY2UgZnJvbSAnLi9jbGFzc2VzL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IEtleVNlcnZpY2UgZnJvbSAnLi9jbGFzc2VzL0tleVNlcnZpY2UnO1xuaW1wb3J0IExvY2tTZXJ2aWNlIGZyb20gXCIuL2NsYXNzZXMvTG9ja1NlcnZpY2VcIjtcbmltcG9ydCBRdWVyeVNlcnZpY2UgZnJvbSAnLi9jbGFzc2VzL1F1ZXJ5U2VydmljZSc7XG5pbXBvcnQgU29ja2V0TWVzc2FnZUhhbmRsZXIgZnJvbSAnLi9jbGFzc2VzL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcbmltcG9ydCBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgZnJvbSAnLi9mYWN0b3JpZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcbmltcG9ydCBCYXRjaFN0YXR1c0ZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeVwiO1xuaW1wb3J0IENoYW5nZXNDb21waWxlckZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0NoYW5nZXNDb21waWxlckZhY3RvcnlcIjtcbmltcG9ydCBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnlcIjtcbmltcG9ydCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeVwiO1xuaW1wb3J0IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnlcIjtcbmltcG9ydCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5XCI7XG5pbXBvcnQgQ29sdW1uU2V0RmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeVwiO1xuaW1wb3J0IENyZWF0ZVJlcXVlc3RGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeVwiO1xuaW1wb3J0IEl0ZW1DYWNoZUZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnlcIjtcbmltcG9ydCBJdGVtRW50cnlGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5XCI7XG5pbXBvcnQgSXRlbVJlc291cmNlRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeVwiO1xuaW1wb3J0IE1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgZnJvbSBcIi4vZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnlcIjtcbmltcG9ydCBRdWVyeU1hdGNoZXJGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5XCI7XG5pbXBvcnQgUXVlcnlQYXJzZXJGYWN0b3J5IGZyb20gXCIuL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnlcIjtcbmltcG9ydCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcIjtcbmltcG9ydCBMb2NhbENhY2hlRmFjdG9yeSBmcm9tIFwiLi9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnlcIjtcblxuaW1wb3J0IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSc7XG5pbXBvcnQgQXV0aEludGVyZmFjZSBmcm9tICcuL2ludGVyZmFjZXMvQXV0aEludGVyZmFjZSc7XG5pbXBvcnQgRXJyb3JIYW5kbGVySW50ZXJmYWNlIGZyb20gJy4vaW50ZXJmYWNlcy9FcnJvckhhbmRsZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlIGZyb20gJy4vaW50ZXJmYWNlcy9Mb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSc7XG5pbXBvcnQgUHJvbWlzZUludGVyZmFjZSBmcm9tICcuL2ludGVyZmFjZXMvUHJvbWlzZUludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZTtcblxuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcblx0Y29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeTtcblxuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xuXG5cdC8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCovXG5cdGNvbnN0cnVjdG9yIChcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjAuMjknO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlID0gbmV3IEl0ZW1SZXNvdXJjZVNlcnZpY2UoKTtcblxuXHRcdHRoaXMubG9ja1NlcnZpY2UgPSBuZXcgTG9ja1NlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSA9IG5ldyBRdWVyeU1hdGNoZXJGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xuXG5cdFx0dGhpcy5jb2x1bW5DYWNoZSA9IG5ldyBDb2x1bW5DYWNoZSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5DYWNoZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeSgpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1FbnRyeUZhY3RvcnksIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5hcGlGb3JtYXR0ZXIsIHRoaXMua2V5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5rZXlTZXJ2aWNlLCB0aGlzLnF1ZXJ5U2VydmljZSwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksIHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMucXVlcnlTZXJ2aWNlLCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkodGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGVyRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsZXJGYWN0b3J5KHRoaXMuaXRlbUVudHJ5U2VydmljZSk7XG5cdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHRoaXMuaXRlbUhhbmRsZXIsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jaGFuZ2VzQ29tcGlsZXJGYWN0b3J5LCB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LCB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLmFwaUZvcm1hdHRlciwgcHJvbWlzZUludGVyZmFjZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkodGhpcy5pdGVtRW50cnlTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsIHRoaXMuYXBpRm9ybWF0dGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCBlcnJvckhhbmRsZXJJbnRlcmZhY2UsIHByb21pc2VJbnRlcmZhY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCB0aGlzLmtleVNlcnZpY2UsIHByb21pc2VJbnRlcmZhY2UsIHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsIGVycm9ySGFuZGxlckludGVyZmFjZSwgdGhpcy5pdGVtSGFuZGxlciwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlciwgdGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmxvY2tTZXJ2aWNlLCB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LCB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksIHRoaXMuaXRlbUVudHJ5U2VydmljZSwgdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLCBwcm9taXNlSW50ZXJmYWNlKTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGVyRmFjdG9yeSh0aGlzLml0ZW1FbnRyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCBsb2NhbENhY2hlTWFuYWdlciwgYXV0aEludGVyZmFjZSwgZXJyb3JIYW5kbGVySW50ZXJmYWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLCB0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LCB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxlckZhY3RvcnksIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSwgdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMua2V5U2VydmljZSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXG5cdFx0dGhpcy5zb2NrZXRNZXNzYWdlSGFuZGxlciA9IG5ldyBTb2NrZXRNZXNzYWdlSGFuZGxlcihwcm9taXNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLml0ZW1IYW5kbGVyLCB0aGlzLml0ZW1FbnRyeVNlcnZpY2UsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsIHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCB0aGlzLmFwaUZvcm1hdHRlciwgZXJyb3JIYW5kbGVySW50ZXJmYWNlKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==