@secrecy/lib 1.0.0-dev.15 → 1.0.0-dev.19

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.
@@ -6,9 +6,9 @@ import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFiel
6
6
  import _classPrivateFieldLooseKey from "@babel/runtime/helpers/classPrivateFieldLooseKey";
7
7
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
8
8
 
9
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
10
 
11
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
12
 
13
13
  function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
14
 
@@ -332,7 +332,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
332
332
  var _addFileToHistory = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(_ref5) {
333
333
  var _this2 = this;
334
334
 
335
- var fileId, vFileId, _yield$this$client$mu, addFileToHistory, vFile, file, users, input;
335
+ var fileId, vFileId, _yield$this$client, addFileToHistory, vFile, file, users, input;
336
336
 
337
337
  return _regeneratorRuntime.wrap(function _callee5$(_context5) {
338
338
  while (1) {
@@ -340,7 +340,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
340
340
  case 0:
341
341
  fileId = _ref5.fileId, vFileId = _ref5.vFileId;
342
342
  _context5.next = 3;
343
- return this.client.mutation({
343
+ return this.client("mutation")({
344
344
  addFileToHistory: [{
345
345
  fileId: fileId,
346
346
  vFileId: vFileId
@@ -348,8 +348,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
348
348
  });
349
349
 
350
350
  case 3:
351
- _yield$this$client$mu = _context5.sent;
352
- addFileToHistory = _yield$this$client$mu.addFileToHistory;
351
+ _yield$this$client = _context5.sent;
352
+ addFileToHistory = _yield$this$client.addFileToHistory;
353
353
  _context5.next = 7;
354
354
  return gqlVFileToInternal(addFileToHistory, _classPrivateFieldLooseBase(this, _keys)[_keys]);
355
355
 
@@ -379,7 +379,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
379
379
  })
380
380
  };
381
381
  _context5.next = 14;
382
- return this.client.mutation({
382
+ return this.client("mutation")({
383
383
  shareFileInHistory: [{
384
384
  input: input,
385
385
  vFileId: vFileId
@@ -408,7 +408,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
408
408
  var _uploadFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(_ref8) {
409
409
  var _this3 = this;
410
410
 
411
- var file, encryptProgress, uploadProgress, signal, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client$mu2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
411
+ var file, encryptProgress, uploadProgress, signal, fileKey, fileBuffer, compressed, _yield$encrypt, encryptedFile, md5File, md5Encrypted, encryptedFileKey, _yield$this$client2, uploadFile, uploadPartEnded, uploadEnded, chunkParts, _iterator2, _step2, _step2$value, index, chunk, progressParts, onProgress, byPart;
412
412
 
413
413
  return _regeneratorRuntime.wrap(function _callee9$(_context9) {
414
414
  while (1) {
@@ -448,7 +448,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
448
448
  md5Encrypted = _yield$encrypt.md5Encrypted;
449
449
  encryptedFileKey = encryptCryptoBox(fileKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
450
450
  _context9.next = 22;
451
- return this.client.mutation({
451
+ return this.client("mutation")({
452
452
  uploadFile: [{
453
453
  fileSize: encryptedFile.byteLength,
454
454
  fileSizeBefore: fileBuffer.byteLength,
@@ -467,8 +467,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
467
467
  });
468
468
 
469
469
  case 22:
470
- _yield$this$client$mu2 = _context9.sent;
471
- uploadFile = _yield$this$client$mu2.uploadFile;
470
+ _yield$this$client2 = _context9.sent;
471
+ uploadFile = _yield$this$client2.uploadFile;
472
472
 
473
473
  if (uploadFile) {
474
474
  _context9.next = 26;
@@ -499,14 +499,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
499
499
  case 30:
500
500
  uploadPartEnded = /*#__PURE__*/function () {
501
501
  var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(md5, order) {
502
- var _yield$_this3$client$, uploadFilePartEnd;
502
+ var _yield$_this3$client, uploadFilePartEnd;
503
503
 
504
504
  return _regeneratorRuntime.wrap(function _callee6$(_context6) {
505
505
  while (1) {
506
506
  switch (_context6.prev = _context6.next) {
507
507
  case 0:
508
508
  _context6.next = 2;
509
- return _this3.client.mutation({
509
+ return _this3.client("mutation")({
510
510
  uploadFilePartEnd: [{
511
511
  fileId: uploadFile.fileId,
512
512
  md5: md5,
@@ -515,8 +515,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
515
515
  });
516
516
 
517
517
  case 2:
518
- _yield$_this3$client$ = _context6.sent;
519
- uploadFilePartEnd = _yield$_this3$client$.uploadFilePartEnd;
518
+ _yield$_this3$client = _context6.sent;
519
+ uploadFilePartEnd = _yield$_this3$client.uploadFilePartEnd;
520
520
  return _context6.abrupt("return", uploadFilePartEnd);
521
521
 
522
522
  case 5:
@@ -534,22 +534,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
534
534
 
535
535
  uploadEnded = /*#__PURE__*/function () {
536
536
  var _ref10 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
537
- var _yield$_this3$client$2, uploadFileEnd;
537
+ var _yield$_this3$client2, uploadFileEnd;
538
538
 
539
539
  return _regeneratorRuntime.wrap(function _callee7$(_context7) {
540
540
  while (1) {
541
541
  switch (_context7.prev = _context7.next) {
542
542
  case 0:
543
543
  _context7.next = 2;
544
- return _this3.client.mutation({
544
+ return _this3.client("mutation")({
545
545
  uploadFileEnd: [{
546
546
  fileId: uploadFile.fileId
547
547
  }, true]
548
548
  });
549
549
 
550
550
  case 2:
551
- _yield$_this3$client$2 = _context7.sent;
552
- uploadFileEnd = _yield$_this3$client$2.uploadFileEnd;
551
+ _yield$_this3$client2 = _context7.sent;
552
+ uploadFileEnd = _yield$_this3$client2.uploadFileEnd;
553
553
  return _context7.abrupt("return", uploadFileEnd != null ? uploadFileEnd : null);
554
554
 
555
555
  case 5:
@@ -637,8 +637,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
637
637
  }
638
638
 
639
639
  formData.append("file", new Blob([chunk.data]), uploadFile.fileId + "-" + chunk.order);
640
- _context8.prev = 6;
641
- _context8.next = 9;
640
+ _context8.next = 8;
642
641
  return axios.post(part.url, formData, {
643
642
  onUploadProgress: function onUploadProgress(progressEvent) {
644
643
  return onProgress(part.order, progressEvent);
@@ -646,35 +645,16 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
646
645
  signal: signal
647
646
  });
648
647
 
649
- case 9:
650
- _context8.next = 11;
648
+ case 8:
649
+ _context8.next = 10;
651
650
  return uploadPartEnded(chunk.md5, chunk.order);
652
651
 
653
- case 11:
654
- _context8.next = 19;
655
- break;
656
-
657
- case 13:
658
- _context8.prev = 13;
659
- _context8.t0 = _context8["catch"](6);
660
-
661
- if (!(_context8.t0.response.status === 0)) {
662
- _context8.next = 18;
663
- break;
664
- }
665
-
666
- _context8.next = 19;
667
- break;
668
-
669
- case 18:
670
- throw _context8.t0;
671
-
672
- case 19:
652
+ case 10:
673
653
  case "end":
674
654
  return _context8.stop();
675
655
  }
676
656
  }
677
- }, _callee8, null, [[6, 13]]);
657
+ }, _callee8);
678
658
  }));
679
659
 
680
660
  return function byPart(_x15) {
@@ -789,7 +769,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
789
769
  _folder$parentFolder$2,
790
770
  _this4 = this;
791
771
 
792
- var name, parentFolderId, key, encryptedName, encryptedKey, _yield$this$client$mu3, createFolder, folder, users;
772
+ var name, parentFolderId, key, encryptedName, encryptedKey, _yield$this$client3, createFolder, folder, users;
793
773
 
794
774
  return _regeneratorRuntime.wrap(function _callee12$(_context12) {
795
775
  while (1) {
@@ -804,7 +784,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
804
784
  encryptedName = _context12.sent;
805
785
  encryptedKey = encryptCryptoBox(key, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
806
786
  _context12.next = 8;
807
- return this.client.mutation({
787
+ return this.client("mutation")({
808
788
  createFolder: [{
809
789
  name: encryptedName,
810
790
  parentFolderId: parentFolderId,
@@ -813,8 +793,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
813
793
  });
814
794
 
815
795
  case 8:
816
- _yield$this$client$mu3 = _context12.sent;
817
- createFolder = _yield$this$client$mu3.createFolder;
796
+ _yield$this$client3 = _context12.sent;
797
+ createFolder = _yield$this$client3.createFolder;
818
798
 
819
799
  if (createFolder) {
820
800
  _context12.next = 12;
@@ -870,7 +850,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
870
850
 
871
851
  _proto.folder = /*#__PURE__*/function () {
872
852
  var _folder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_temp) {
873
- var _ref16, id, deleted, _yield$this$client$qu, folder;
853
+ var _ref16, id, deleted, _yield$this$client4, folder;
874
854
 
875
855
  return _regeneratorRuntime.wrap(function _callee13$(_context13) {
876
856
  while (1) {
@@ -878,7 +858,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
878
858
  case 0:
879
859
  _ref16 = _temp === void 0 ? {} : _temp, id = _ref16.id, deleted = _ref16.deleted;
880
860
  _context13.next = 3;
881
- return this.client.query({
861
+ return this.client("query")({
882
862
  folder: [{
883
863
  deleted: deleted,
884
864
  id: id
@@ -886,8 +866,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
886
866
  });
887
867
 
888
868
  case 3:
889
- _yield$this$client$qu = _context13.sent;
890
- folder = _yield$this$client$qu.folder;
869
+ _yield$this$client4 = _context13.sent;
870
+ folder = _yield$this$client4.folder;
891
871
 
892
872
  if (folder) {
893
873
  _context13.next = 7;
@@ -916,7 +896,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
916
896
 
917
897
  _proto.file = /*#__PURE__*/function () {
918
898
  var _file = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(_ref17) {
919
- var id, _yield$this$client$qu2, file;
899
+ var id, _yield$this$client5, file;
920
900
 
921
901
  return _regeneratorRuntime.wrap(function _callee14$(_context14) {
922
902
  while (1) {
@@ -924,15 +904,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
924
904
  case 0:
925
905
  id = _ref17.id;
926
906
  _context14.next = 3;
927
- return this.client.query({
907
+ return this.client("query")({
928
908
  file: [{
929
909
  id: id
930
910
  }, gqlFileQuery]
931
911
  });
932
912
 
933
913
  case 3:
934
- _yield$this$client$qu2 = _context14.sent;
935
- file = _yield$this$client$qu2.file;
914
+ _yield$this$client5 = _context14.sent;
915
+ file = _yield$this$client5.file;
936
916
 
937
917
  if (file) {
938
918
  _context14.next = 7;
@@ -961,7 +941,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
961
941
 
962
942
  _proto.vFile = /*#__PURE__*/function () {
963
943
  var _vFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref18) {
964
- var id, _yield$this$client$qu3, vFile;
944
+ var id, _yield$this$client6, vFile;
965
945
 
966
946
  return _regeneratorRuntime.wrap(function _callee15$(_context15) {
967
947
  while (1) {
@@ -969,15 +949,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
969
949
  case 0:
970
950
  id = _ref18.id;
971
951
  _context15.next = 3;
972
- return this.client.query({
952
+ return this.client("query")({
973
953
  vFile: [{
974
954
  id: id
975
955
  }, gqlVFileWithFolderQuery]
976
956
  });
977
957
 
978
958
  case 3:
979
- _yield$this$client$qu3 = _context15.sent;
980
- vFile = _yield$this$client$qu3.vFile;
959
+ _yield$this$client6 = _context15.sent;
960
+ vFile = _yield$this$client6.vFile;
981
961
 
982
962
  if (vFile) {
983
963
  _context15.next = 7;
@@ -1006,7 +986,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1006
986
 
1007
987
  _proto.mail = /*#__PURE__*/function () {
1008
988
  var _mail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(_ref19) {
1009
- var id, _yield$this$client$qu4, mail;
989
+ var id, _yield$this$client7, mail;
1010
990
 
1011
991
  return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1012
992
  while (1) {
@@ -1014,15 +994,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1014
994
  case 0:
1015
995
  id = _ref19.id;
1016
996
  _context16.next = 3;
1017
- return this.client.query({
997
+ return this.client("query")({
1018
998
  mail: [{
1019
999
  id: id
1020
1000
  }, gqlMailQuery]
1021
1001
  });
1022
1002
 
1023
1003
  case 3:
1024
- _yield$this$client$qu4 = _context16.sent;
1025
- mail = _yield$this$client$qu4.mail;
1004
+ _yield$this$client7 = _context16.sent;
1005
+ mail = _yield$this$client7.mail;
1026
1006
 
1027
1007
  if (mail) {
1028
1008
  _context16.next = 7;
@@ -1051,7 +1031,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1051
1031
 
1052
1032
  _proto.shareVFile = /*#__PURE__*/function () {
1053
1033
  var _shareVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(_ref20) {
1054
- var vFileId, userId, rights, vFile, user, nameKey, history, _iterator3, _step3, h, _yield$this$client$mu4, shareVFile;
1034
+ var vFileId, userId, rights, vFile, user, nameKey, history, _iterator3, _step3, h, _yield$this$client8, shareVFile;
1055
1035
 
1056
1036
  return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1057
1037
  while (1) {
@@ -1129,7 +1109,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1129
1109
 
1130
1110
  case 23:
1131
1111
  _context17.next = 25;
1132
- return this.client.mutation({
1112
+ return this.client("mutation")({
1133
1113
  shareVFile: [{
1134
1114
  vFileId: vFileId,
1135
1115
  userId: userId,
@@ -1140,8 +1120,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1140
1120
  });
1141
1121
 
1142
1122
  case 25:
1143
- _yield$this$client$mu4 = _context17.sent;
1144
- shareVFile = _yield$this$client$mu4.shareVFile;
1123
+ _yield$this$client8 = _context17.sent;
1124
+ shareVFile = _yield$this$client8.shareVFile;
1145
1125
  return _context17.abrupt("return", shareVFile != null ? shareVFile : false);
1146
1126
 
1147
1127
  case 28:
@@ -1161,20 +1141,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1161
1141
 
1162
1142
  _proto.sharedVFiles = /*#__PURE__*/function () {
1163
1143
  var _sharedVFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18() {
1164
- var _yield$this$client$qu5, sharedVFiles, vFiles, _iterator4, _step4, vFile;
1144
+ var _yield$this$client9, sharedVFiles, vFiles, _iterator4, _step4, vFile;
1165
1145
 
1166
1146
  return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1167
1147
  while (1) {
1168
1148
  switch (_context18.prev = _context18.next) {
1169
1149
  case 0:
1170
1150
  _context18.next = 2;
1171
- return this.client.query({
1151
+ return this.client("query")({
1172
1152
  sharedVFiles: gqlVFileWithFolderQuery
1173
1153
  });
1174
1154
 
1175
1155
  case 2:
1176
- _yield$this$client$qu5 = _context18.sent;
1177
- sharedVFiles = _yield$this$client$qu5.sharedVFiles;
1156
+ _yield$this$client9 = _context18.sent;
1157
+ sharedVFiles = _yield$this$client9.sharedVFiles;
1178
1158
  vFiles = new Array();
1179
1159
  _iterator4 = _createForOfIteratorHelperLoose(sharedVFiles);
1180
1160
 
@@ -1218,20 +1198,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1218
1198
 
1219
1199
  _proto.vFilesSharedWithMe = /*#__PURE__*/function () {
1220
1200
  var _vFilesSharedWithMe = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19() {
1221
- var _yield$this$client$qu6, vFilesSharedWithMe, vFiles, _iterator5, _step5, vFile;
1201
+ var _yield$this$client10, vFilesSharedWithMe, vFiles, _iterator5, _step5, vFile;
1222
1202
 
1223
1203
  return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1224
1204
  while (1) {
1225
1205
  switch (_context19.prev = _context19.next) {
1226
1206
  case 0:
1227
1207
  _context19.next = 2;
1228
- return this.client.query({
1208
+ return this.client("query")({
1229
1209
  vFilesSharedWithMe: gqlVFileWithFolderQuery
1230
1210
  });
1231
1211
 
1232
1212
  case 2:
1233
- _yield$this$client$qu6 = _context19.sent;
1234
- vFilesSharedWithMe = _yield$this$client$qu6.vFilesSharedWithMe;
1213
+ _yield$this$client10 = _context19.sent;
1214
+ vFilesSharedWithMe = _yield$this$client10.vFilesSharedWithMe;
1235
1215
  vFiles = new Array();
1236
1216
  _iterator5 = _createForOfIteratorHelperLoose(vFilesSharedWithMe);
1237
1217
 
@@ -1275,20 +1255,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1275
1255
 
1276
1256
  _proto.deletedVFiles = /*#__PURE__*/function () {
1277
1257
  var _deletedVFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20() {
1278
- var _yield$this$client$qu7, deletedVFiles, vFiles, _iterator6, _step6, vFile;
1258
+ var _yield$this$client11, deletedVFiles, vFiles, _iterator6, _step6, vFile;
1279
1259
 
1280
1260
  return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1281
1261
  while (1) {
1282
1262
  switch (_context20.prev = _context20.next) {
1283
1263
  case 0:
1284
1264
  _context20.next = 2;
1285
- return this.client.query({
1265
+ return this.client("query")({
1286
1266
  deletedVFiles: gqlVFileQuery
1287
1267
  });
1288
1268
 
1289
1269
  case 2:
1290
- _yield$this$client$qu7 = _context20.sent;
1291
- deletedVFiles = _yield$this$client$qu7.deletedVFiles;
1270
+ _yield$this$client11 = _context20.sent;
1271
+ deletedVFiles = _yield$this$client11.deletedVFiles;
1292
1272
  vFiles = new Array();
1293
1273
  _iterator6 = _createForOfIteratorHelperLoose(deletedVFiles);
1294
1274
 
@@ -1332,20 +1312,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1332
1312
 
1333
1313
  _proto.sharedFolders = /*#__PURE__*/function () {
1334
1314
  var _sharedFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21() {
1335
- var _yield$this$client$qu8, sharedFolders, folders, _iterator7, _step7, folder;
1315
+ var _yield$this$client12, sharedFolders, folders, _iterator7, _step7, folder;
1336
1316
 
1337
1317
  return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1338
1318
  while (1) {
1339
1319
  switch (_context21.prev = _context21.next) {
1340
1320
  case 0:
1341
1321
  _context21.next = 2;
1342
- return this.client.query({
1322
+ return this.client("query")({
1343
1323
  sharedFolders: gqlFolderQuery
1344
1324
  });
1345
1325
 
1346
1326
  case 2:
1347
- _yield$this$client$qu8 = _context21.sent;
1348
- sharedFolders = _yield$this$client$qu8.sharedFolders;
1327
+ _yield$this$client12 = _context21.sent;
1328
+ sharedFolders = _yield$this$client12.sharedFolders;
1349
1329
  folders = new Array();
1350
1330
  _iterator7 = _createForOfIteratorHelperLoose(sharedFolders);
1351
1331
 
@@ -1389,20 +1369,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1389
1369
 
1390
1370
  _proto.foldersSharedWithMe = /*#__PURE__*/function () {
1391
1371
  var _foldersSharedWithMe = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22() {
1392
- var _yield$this$client$qu9, foldersSharedWithMe, folders, _iterator8, _step8, folder;
1372
+ var _yield$this$client13, foldersSharedWithMe, folders, _iterator8, _step8, folder;
1393
1373
 
1394
1374
  return _regeneratorRuntime.wrap(function _callee22$(_context22) {
1395
1375
  while (1) {
1396
1376
  switch (_context22.prev = _context22.next) {
1397
1377
  case 0:
1398
1378
  _context22.next = 2;
1399
- return this.client.query({
1379
+ return this.client("query")({
1400
1380
  foldersSharedWithMe: gqlFolderQuery
1401
1381
  });
1402
1382
 
1403
1383
  case 2:
1404
- _yield$this$client$qu9 = _context22.sent;
1405
- foldersSharedWithMe = _yield$this$client$qu9.foldersSharedWithMe;
1384
+ _yield$this$client13 = _context22.sent;
1385
+ foldersSharedWithMe = _yield$this$client13.foldersSharedWithMe;
1406
1386
  folders = new Array();
1407
1387
  _iterator8 = _createForOfIteratorHelperLoose(foldersSharedWithMe);
1408
1388
 
@@ -1446,20 +1426,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1446
1426
 
1447
1427
  _proto.deletedFolders = /*#__PURE__*/function () {
1448
1428
  var _deletedFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23() {
1449
- var _yield$this$client$qu10, deletedFolders, folders, _iterator9, _step9, folder;
1429
+ var _yield$this$client14, deletedFolders, folders, _iterator9, _step9, folder;
1450
1430
 
1451
1431
  return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1452
1432
  while (1) {
1453
1433
  switch (_context23.prev = _context23.next) {
1454
1434
  case 0:
1455
1435
  _context23.next = 2;
1456
- return this.client.query({
1436
+ return this.client("query")({
1457
1437
  deletedFolders: gqlFolderQuery
1458
1438
  });
1459
1439
 
1460
1440
  case 2:
1461
- _yield$this$client$qu10 = _context23.sent;
1462
- deletedFolders = _yield$this$client$qu10.deletedFolders;
1441
+ _yield$this$client14 = _context23.sent;
1442
+ deletedFolders = _yield$this$client14.deletedFolders;
1463
1443
  folders = new Array();
1464
1444
  _iterator9 = _createForOfIteratorHelperLoose(deletedFolders);
1465
1445
 
@@ -1503,7 +1483,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1503
1483
 
1504
1484
  _proto.deletedMails = /*#__PURE__*/function () {
1505
1485
  var _deletedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref21) {
1506
- var mailType, _yield$this$client$qu11, deletedMails, mails, _iterator10, _step10, m, mail;
1486
+ var mailType, _yield$this$client15, deletedMails, mails, _iterator10, _step10, m, mail;
1507
1487
 
1508
1488
  return _regeneratorRuntime.wrap(function _callee24$(_context24) {
1509
1489
  while (1) {
@@ -1511,15 +1491,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1511
1491
  case 0:
1512
1492
  mailType = _ref21.mailType;
1513
1493
  _context24.next = 3;
1514
- return this.client.query({
1494
+ return this.client("query")({
1515
1495
  deletedMails: [{
1516
1496
  mailType: mailType
1517
1497
  }, gqlMailQuery]
1518
1498
  });
1519
1499
 
1520
1500
  case 3:
1521
- _yield$this$client$qu11 = _context24.sent;
1522
- deletedMails = _yield$this$client$qu11.deletedMails;
1501
+ _yield$this$client15 = _context24.sent;
1502
+ deletedMails = _yield$this$client15.deletedMails;
1523
1503
  mails = new Array();
1524
1504
 
1525
1505
  for (_iterator10 = _createForOfIteratorHelperLoose(deletedMails); !(_step10 = _iterator10()).done;) {
@@ -1550,7 +1530,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1550
1530
 
1551
1531
  _proto.shareFolder = /*#__PURE__*/function () {
1552
1532
  var _shareFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref22) {
1553
- var folderId, userId, rights, user, _yield$this$client$mu5, shareFolder, shareFolders, _iterator11, _step11, id, nameKey, _iterator12, _step12, _id, vFileInput, _yield$this$client$mu6, shareFolderFinish;
1533
+ var folderId, userId, rights, user, _yield$this$client16, shareFolder, shareFolders, _iterator11, _step11, id, nameKey, _iterator12, _step12, _id, vFileInput, _yield$this$client17, shareFolderFinish;
1554
1534
 
1555
1535
  return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1556
1536
  while (1) {
@@ -1575,7 +1555,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1575
1555
 
1576
1556
  case 6:
1577
1557
  _context25.next = 8;
1578
- return this.client.mutation({
1558
+ return this.client("mutation")({
1579
1559
  shareFolder: [{
1580
1560
  folderId: folderId,
1581
1561
  userId: userId
@@ -1586,8 +1566,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1586
1566
  });
1587
1567
 
1588
1568
  case 8:
1589
- _yield$this$client$mu5 = _context25.sent;
1590
- shareFolder = _yield$this$client$mu5.shareFolder;
1569
+ _yield$this$client16 = _context25.sent;
1570
+ shareFolder = _yield$this$client16.shareFolder;
1591
1571
  shareFolders = {
1592
1572
  vFiles: [],
1593
1573
  folders: []
@@ -1641,7 +1621,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1641
1621
 
1642
1622
  case 29:
1643
1623
  _context25.next = 31;
1644
- return this.client.mutation({
1624
+ return this.client("mutation")({
1645
1625
  shareFolderFinish: [{
1646
1626
  rights: rights,
1647
1627
  userId: userId,
@@ -1650,8 +1630,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1650
1630
  });
1651
1631
 
1652
1632
  case 31:
1653
- _yield$this$client$mu6 = _context25.sent;
1654
- shareFolderFinish = _yield$this$client$mu6.shareFolderFinish;
1633
+ _yield$this$client17 = _context25.sent;
1634
+ shareFolderFinish = _yield$this$client17.shareFolderFinish;
1655
1635
  return _context25.abrupt("return", shareFolderFinish != null ? shareFolderFinish : false);
1656
1636
 
1657
1637
  case 34:
@@ -1673,7 +1653,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1673
1653
  var _updateFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref23) {
1674
1654
  var _folder$userApp2;
1675
1655
 
1676
- var folderId, name, isFavorite, deletedAt, folder, _yield$this$client$mu7, updateFolder;
1656
+ var folderId, name, isFavorite, deletedAt, folder, _yield$this$client18, updateFolder;
1677
1657
 
1678
1658
  return _regeneratorRuntime.wrap(function _callee26$(_context26) {
1679
1659
  while (1) {
@@ -1735,7 +1715,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1735
1715
  case 20:
1736
1716
  name = _context26.t0;
1737
1717
  _context26.next = 23;
1738
- return this.client.mutation({
1718
+ return this.client("mutation")({
1739
1719
  updateFolder: [{
1740
1720
  folderId: folderId,
1741
1721
  name: name,
@@ -1745,8 +1725,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1745
1725
  });
1746
1726
 
1747
1727
  case 23:
1748
- _yield$this$client$mu7 = _context26.sent;
1749
- updateFolder = _yield$this$client$mu7.updateFolder;
1728
+ _yield$this$client18 = _context26.sent;
1729
+ updateFolder = _yield$this$client18.updateFolder;
1750
1730
 
1751
1731
  if (updateFolder) {
1752
1732
  _context26.next = 27;
@@ -1775,14 +1755,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1775
1755
 
1776
1756
  _proto.updateAppNotifications = /*#__PURE__*/function () {
1777
1757
  var _updateAppNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(notifications) {
1778
- var _yield$this$client$mu8, updateAppNotifications;
1758
+ var _yield$this$client19, updateAppNotifications;
1779
1759
 
1780
1760
  return _regeneratorRuntime.wrap(function _callee27$(_context27) {
1781
1761
  while (1) {
1782
1762
  switch (_context27.prev = _context27.next) {
1783
1763
  case 0:
1784
1764
  _context27.next = 2;
1785
- return this.client.mutation({
1765
+ return this.client("mutation")({
1786
1766
  updateAppNotifications: [notifications, {
1787
1767
  enableAll: true,
1788
1768
  mail: true,
@@ -1792,8 +1772,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1792
1772
  });
1793
1773
 
1794
1774
  case 2:
1795
- _yield$this$client$mu8 = _context27.sent;
1796
- updateAppNotifications = _yield$this$client$mu8.updateAppNotifications;
1775
+ _yield$this$client19 = _context27.sent;
1776
+ updateAppNotifications = _yield$this$client19.updateAppNotifications;
1797
1777
 
1798
1778
  if (updateAppNotifications) {
1799
1779
  _context27.next = 6;
@@ -1824,14 +1804,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1824
1804
 
1825
1805
  _proto.appNotifications = /*#__PURE__*/function () {
1826
1806
  var _appNotifications = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28() {
1827
- var _yield$this$client$qu12, appNotifications;
1807
+ var _yield$this$client20, appNotifications;
1828
1808
 
1829
1809
  return _regeneratorRuntime.wrap(function _callee28$(_context28) {
1830
1810
  while (1) {
1831
1811
  switch (_context28.prev = _context28.next) {
1832
1812
  case 0:
1833
1813
  _context28.next = 2;
1834
- return this.client.query({
1814
+ return this.client("query")({
1835
1815
  appNotifications: {
1836
1816
  enableAll: true,
1837
1817
  mail: true,
@@ -1841,8 +1821,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1841
1821
  });
1842
1822
 
1843
1823
  case 2:
1844
- _yield$this$client$qu12 = _context28.sent;
1845
- appNotifications = _yield$this$client$qu12.appNotifications;
1824
+ _yield$this$client20 = _context28.sent;
1825
+ appNotifications = _yield$this$client20.appNotifications;
1846
1826
 
1847
1827
  if (appNotifications) {
1848
1828
  _context28.next = 6;
@@ -1911,14 +1891,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1911
1891
 
1912
1892
  _proto.waitingReceivedMails = /*#__PURE__*/function () {
1913
1893
  var _waitingReceivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee30() {
1914
- var _yield$this$client$qu13, user;
1894
+ var _yield$this$client21, user;
1915
1895
 
1916
1896
  return _regeneratorRuntime.wrap(function _callee30$(_context30) {
1917
1897
  while (1) {
1918
1898
  switch (_context30.prev = _context30.next) {
1919
1899
  case 0:
1920
1900
  _context30.next = 2;
1921
- return this.client.query({
1901
+ return this.client("query")({
1922
1902
  user: [{}, {
1923
1903
  waitingReceivedMails: {
1924
1904
  date: true,
@@ -1945,8 +1925,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1945
1925
  });
1946
1926
 
1947
1927
  case 2:
1948
- _yield$this$client$qu13 = _context30.sent;
1949
- user = _yield$this$client$qu13.user;
1928
+ _yield$this$client21 = _context30.sent;
1929
+ user = _yield$this$client21.user;
1950
1930
 
1951
1931
  if (user) {
1952
1932
  _context30.next = 6;
@@ -1981,7 +1961,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
1981
1961
 
1982
1962
  _proto.updateDraftMail = /*#__PURE__*/function () {
1983
1963
  var _updateDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee31(draftId, _ref24) {
1984
- var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client$mu9, updateDraftMail;
1964
+ var body, subject, files, recipientsIds, replyTo, drafts, draft, hashKey, hash, senderFiles, _iterator13, _step13, f, file, _yield$this$client22, updateDraftMail;
1985
1965
 
1986
1966
  return _regeneratorRuntime.wrap(function _callee31$(_context31) {
1987
1967
  while (1) {
@@ -2075,7 +2055,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2075
2055
 
2076
2056
  case 27:
2077
2057
  _context31.next = 29;
2078
- return this.client.mutation({
2058
+ return this.client("mutation")({
2079
2059
  updateDraftMail: [{
2080
2060
  draftId: draftId,
2081
2061
  recipients: recipientsIds,
@@ -2089,8 +2069,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2089
2069
  });
2090
2070
 
2091
2071
  case 29:
2092
- _yield$this$client$mu9 = _context31.sent;
2093
- updateDraftMail = _yield$this$client$mu9.updateDraftMail;
2072
+ _yield$this$client22 = _context31.sent;
2073
+ updateDraftMail = _yield$this$client22.updateDraftMail;
2094
2074
 
2095
2075
  if (updateDraftMail) {
2096
2076
  _context31.next = 33;
@@ -2119,22 +2099,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2119
2099
 
2120
2100
  _proto.deleteDraftMail = /*#__PURE__*/function () {
2121
2101
  var _deleteDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee32(draftId) {
2122
- var _yield$this$client$mu10, deleteDraftMail;
2102
+ var _yield$this$client23, deleteDraftMail;
2123
2103
 
2124
2104
  return _regeneratorRuntime.wrap(function _callee32$(_context32) {
2125
2105
  while (1) {
2126
2106
  switch (_context32.prev = _context32.next) {
2127
2107
  case 0:
2128
2108
  _context32.next = 2;
2129
- return this.client.mutation({
2109
+ return this.client("mutation")({
2130
2110
  deleteDraftMail: [{
2131
2111
  draftId: draftId
2132
2112
  }, true]
2133
2113
  });
2134
2114
 
2135
2115
  case 2:
2136
- _yield$this$client$mu10 = _context32.sent;
2137
- deleteDraftMail = _yield$this$client$mu10.deleteDraftMail;
2116
+ _yield$this$client23 = _context32.sent;
2117
+ deleteDraftMail = _yield$this$client23.deleteDraftMail;
2138
2118
  return _context32.abrupt("return", deleteDraftMail != null ? deleteDraftMail : false);
2139
2119
 
2140
2120
  case 5:
@@ -2154,7 +2134,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2154
2134
 
2155
2135
  _proto.deleteVFileSharing = /*#__PURE__*/function () {
2156
2136
  var _deleteVFileSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee33(_ref25) {
2157
- var vFileId, userId, _yield$this$client$mu11, deleteVFileSharing;
2137
+ var vFileId, userId, _yield$this$client24, deleteVFileSharing;
2158
2138
 
2159
2139
  return _regeneratorRuntime.wrap(function _callee33$(_context33) {
2160
2140
  while (1) {
@@ -2162,7 +2142,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2162
2142
  case 0:
2163
2143
  vFileId = _ref25.vFileId, userId = _ref25.userId;
2164
2144
  _context33.next = 3;
2165
- return this.client.mutation({
2145
+ return this.client("mutation")({
2166
2146
  deleteVFileSharing: [{
2167
2147
  vFileId: vFileId,
2168
2148
  userId: userId
@@ -2170,8 +2150,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2170
2150
  });
2171
2151
 
2172
2152
  case 3:
2173
- _yield$this$client$mu11 = _context33.sent;
2174
- deleteVFileSharing = _yield$this$client$mu11.deleteVFileSharing;
2153
+ _yield$this$client24 = _context33.sent;
2154
+ deleteVFileSharing = _yield$this$client24.deleteVFileSharing;
2175
2155
  return _context33.abrupt("return", deleteVFileSharing);
2176
2156
 
2177
2157
  case 6:
@@ -2191,7 +2171,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2191
2171
 
2192
2172
  _proto.deleteFolderSharing = /*#__PURE__*/function () {
2193
2173
  var _deleteFolderSharing = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee34(_ref26) {
2194
- var folderId, userId, _yield$this$client$mu12, deleteFolderSharing;
2174
+ var folderId, userId, _yield$this$client25, deleteFolderSharing;
2195
2175
 
2196
2176
  return _regeneratorRuntime.wrap(function _callee34$(_context34) {
2197
2177
  while (1) {
@@ -2199,7 +2179,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2199
2179
  case 0:
2200
2180
  folderId = _ref26.folderId, userId = _ref26.userId;
2201
2181
  _context34.next = 3;
2202
- return this.client.mutation({
2182
+ return this.client("mutation")({
2203
2183
  deleteFolderSharing: [{
2204
2184
  folderId: folderId,
2205
2185
  userId: userId
@@ -2207,8 +2187,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2207
2187
  });
2208
2188
 
2209
2189
  case 3:
2210
- _yield$this$client$mu12 = _context34.sent;
2211
- deleteFolderSharing = _yield$this$client$mu12.deleteFolderSharing;
2190
+ _yield$this$client25 = _context34.sent;
2191
+ deleteFolderSharing = _yield$this$client25.deleteFolderSharing;
2212
2192
  return _context34.abrupt("return", deleteFolderSharing);
2213
2193
 
2214
2194
  case 6:
@@ -2228,7 +2208,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2228
2208
 
2229
2209
  _proto.duplicateVFile = /*#__PURE__*/function () {
2230
2210
  var _duplicateVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee35(_ref27) {
2231
- var vFileId, folderId, customName, file, _yield$this$client$mu13, duplicateVFile;
2211
+ var vFileId, folderId, customName, file, _yield$this$client26, duplicateVFile;
2232
2212
 
2233
2213
  return _regeneratorRuntime.wrap(function _callee35$(_context35) {
2234
2214
  while (1) {
@@ -2277,7 +2257,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2277
2257
  case 15:
2278
2258
  customName = _context35.t0;
2279
2259
  _context35.next = 18;
2280
- return this.client.mutation({
2260
+ return this.client("mutation")({
2281
2261
  duplicateVFile: [{
2282
2262
  vFileId: vFileId,
2283
2263
  folderId: folderId,
@@ -2286,8 +2266,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2286
2266
  });
2287
2267
 
2288
2268
  case 18:
2289
- _yield$this$client$mu13 = _context35.sent;
2290
- duplicateVFile = _yield$this$client$mu13.duplicateVFile;
2269
+ _yield$this$client26 = _context35.sent;
2270
+ duplicateVFile = _yield$this$client26.duplicateVFile;
2291
2271
  return _context35.abrupt("return", duplicateVFile);
2292
2272
 
2293
2273
  case 21:
@@ -2307,7 +2287,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2307
2287
 
2308
2288
  _proto.deleteFolderCloudTrash = /*#__PURE__*/function () {
2309
2289
  var _deleteFolderCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee36(_ref28) {
2310
- var ids, _yield$this$client$mu14, deleteFolderCloudTrash;
2290
+ var ids, _yield$this$client27, deleteFolderCloudTrash;
2311
2291
 
2312
2292
  return _regeneratorRuntime.wrap(function _callee36$(_context36) {
2313
2293
  while (1) {
@@ -2315,15 +2295,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2315
2295
  case 0:
2316
2296
  ids = _ref28.ids;
2317
2297
  _context36.next = 3;
2318
- return this.client.mutation({
2298
+ return this.client("mutation")({
2319
2299
  deleteFolderCloudTrash: [{
2320
2300
  ids: ids
2321
2301
  }, true]
2322
2302
  });
2323
2303
 
2324
2304
  case 3:
2325
- _yield$this$client$mu14 = _context36.sent;
2326
- deleteFolderCloudTrash = _yield$this$client$mu14.deleteFolderCloudTrash;
2305
+ _yield$this$client27 = _context36.sent;
2306
+ deleteFolderCloudTrash = _yield$this$client27.deleteFolderCloudTrash;
2327
2307
  return _context36.abrupt("return", deleteFolderCloudTrash != null ? deleteFolderCloudTrash : false);
2328
2308
 
2329
2309
  case 6:
@@ -2343,7 +2323,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2343
2323
 
2344
2324
  _proto.deleteVFileCloudTrash = /*#__PURE__*/function () {
2345
2325
  var _deleteVFileCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee37(_ref29) {
2346
- var ids, _yield$this$client$mu15, deleteVFileCloudTrash;
2326
+ var ids, _yield$this$client28, deleteVFileCloudTrash;
2347
2327
 
2348
2328
  return _regeneratorRuntime.wrap(function _callee37$(_context37) {
2349
2329
  while (1) {
@@ -2351,15 +2331,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2351
2331
  case 0:
2352
2332
  ids = _ref29.ids;
2353
2333
  _context37.next = 3;
2354
- return this.client.mutation({
2334
+ return this.client("mutation")({
2355
2335
  deleteVFileCloudTrash: [{
2356
2336
  ids: ids
2357
2337
  }, true]
2358
2338
  });
2359
2339
 
2360
2340
  case 3:
2361
- _yield$this$client$mu15 = _context37.sent;
2362
- deleteVFileCloudTrash = _yield$this$client$mu15.deleteVFileCloudTrash;
2341
+ _yield$this$client28 = _context37.sent;
2342
+ deleteVFileCloudTrash = _yield$this$client28.deleteVFileCloudTrash;
2363
2343
  return _context37.abrupt("return", deleteVFileCloudTrash != null ? deleteVFileCloudTrash : false);
2364
2344
 
2365
2345
  case 6:
@@ -2379,7 +2359,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2379
2359
 
2380
2360
  _proto.deleteMailTrash = /*#__PURE__*/function () {
2381
2361
  var _deleteMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee38(_ref30) {
2382
- var ids, _yield$this$client$mu16, deleteMailTrash;
2362
+ var ids, _yield$this$client29, deleteMailTrash;
2383
2363
 
2384
2364
  return _regeneratorRuntime.wrap(function _callee38$(_context38) {
2385
2365
  while (1) {
@@ -2387,15 +2367,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2387
2367
  case 0:
2388
2368
  ids = _ref30.ids;
2389
2369
  _context38.next = 3;
2390
- return this.client.mutation({
2370
+ return this.client("mutation")({
2391
2371
  deleteMailTrash: [{
2392
2372
  ids: ids
2393
2373
  }, true]
2394
2374
  });
2395
2375
 
2396
2376
  case 3:
2397
- _yield$this$client$mu16 = _context38.sent;
2398
- deleteMailTrash = _yield$this$client$mu16.deleteMailTrash;
2377
+ _yield$this$client29 = _context38.sent;
2378
+ deleteMailTrash = _yield$this$client29.deleteMailTrash;
2399
2379
  return _context38.abrupt("return", deleteMailTrash);
2400
2380
 
2401
2381
  case 6:
@@ -2415,20 +2395,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2415
2395
 
2416
2396
  _proto.emptyMailTrash = /*#__PURE__*/function () {
2417
2397
  var _emptyMailTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee39() {
2418
- var _yield$this$client$mu17, emptyMailTrash;
2398
+ var _yield$this$client30, emptyMailTrash;
2419
2399
 
2420
2400
  return _regeneratorRuntime.wrap(function _callee39$(_context39) {
2421
2401
  while (1) {
2422
2402
  switch (_context39.prev = _context39.next) {
2423
2403
  case 0:
2424
2404
  _context39.next = 2;
2425
- return this.client.mutation({
2405
+ return this.client("mutation")({
2426
2406
  emptyMailTrash: true
2427
2407
  });
2428
2408
 
2429
2409
  case 2:
2430
- _yield$this$client$mu17 = _context39.sent;
2431
- emptyMailTrash = _yield$this$client$mu17.emptyMailTrash;
2410
+ _yield$this$client30 = _context39.sent;
2411
+ emptyMailTrash = _yield$this$client30.emptyMailTrash;
2432
2412
  return _context39.abrupt("return", emptyMailTrash != null ? emptyMailTrash : false);
2433
2413
 
2434
2414
  case 5:
@@ -2448,20 +2428,20 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2448
2428
 
2449
2429
  _proto.emptyCloudTrash = /*#__PURE__*/function () {
2450
2430
  var _emptyCloudTrash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee40() {
2451
- var _yield$this$client$mu18, emptyCloudTrash;
2431
+ var _yield$this$client31, emptyCloudTrash;
2452
2432
 
2453
2433
  return _regeneratorRuntime.wrap(function _callee40$(_context40) {
2454
2434
  while (1) {
2455
2435
  switch (_context40.prev = _context40.next) {
2456
2436
  case 0:
2457
2437
  _context40.next = 2;
2458
- return this.client.mutation({
2438
+ return this.client("mutation")({
2459
2439
  emptyCloudTrash: true
2460
2440
  });
2461
2441
 
2462
2442
  case 2:
2463
- _yield$this$client$mu18 = _context40.sent;
2464
- emptyCloudTrash = _yield$this$client$mu18.emptyCloudTrash;
2443
+ _yield$this$client31 = _context40.sent;
2444
+ emptyCloudTrash = _yield$this$client31.emptyCloudTrash;
2465
2445
  return _context40.abrupt("return", emptyCloudTrash != null ? emptyCloudTrash : false);
2466
2446
 
2467
2447
  case 5:
@@ -2481,7 +2461,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2481
2461
 
2482
2462
  _proto.recoverVFile = /*#__PURE__*/function () {
2483
2463
  var _recoverVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee41(_ref31) {
2484
- var vFileId, _yield$this$client$mu19, recoverVFile;
2464
+ var vFileId, _yield$this$client32, recoverVFile;
2485
2465
 
2486
2466
  return _regeneratorRuntime.wrap(function _callee41$(_context41) {
2487
2467
  while (1) {
@@ -2489,15 +2469,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2489
2469
  case 0:
2490
2470
  vFileId = _ref31.vFileId;
2491
2471
  _context41.next = 3;
2492
- return this.client.mutation({
2472
+ return this.client("mutation")({
2493
2473
  recoverVFile: [{
2494
2474
  vFileId: vFileId
2495
2475
  }, true]
2496
2476
  });
2497
2477
 
2498
2478
  case 3:
2499
- _yield$this$client$mu19 = _context41.sent;
2500
- recoverVFile = _yield$this$client$mu19.recoverVFile;
2479
+ _yield$this$client32 = _context41.sent;
2480
+ recoverVFile = _yield$this$client32.recoverVFile;
2501
2481
  return _context41.abrupt("return", recoverVFile);
2502
2482
 
2503
2483
  case 6:
@@ -2517,7 +2497,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2517
2497
 
2518
2498
  _proto.recoverFolder = /*#__PURE__*/function () {
2519
2499
  var _recoverFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee42(_ref32) {
2520
- var id, _yield$this$client$mu20, recoverFolder;
2500
+ var id, _yield$this$client33, recoverFolder;
2521
2501
 
2522
2502
  return _regeneratorRuntime.wrap(function _callee42$(_context42) {
2523
2503
  while (1) {
@@ -2525,15 +2505,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2525
2505
  case 0:
2526
2506
  id = _ref32.id;
2527
2507
  _context42.next = 3;
2528
- return this.client.mutation({
2508
+ return this.client("mutation")({
2529
2509
  recoverFolder: [{
2530
2510
  id: id
2531
2511
  }, true]
2532
2512
  });
2533
2513
 
2534
2514
  case 3:
2535
- _yield$this$client$mu20 = _context42.sent;
2536
- recoverFolder = _yield$this$client$mu20.recoverFolder;
2515
+ _yield$this$client33 = _context42.sent;
2516
+ recoverFolder = _yield$this$client33.recoverFolder;
2537
2517
  return _context42.abrupt("return", recoverFolder != null ? recoverFolder : false);
2538
2518
 
2539
2519
  case 6:
@@ -2553,7 +2533,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2553
2533
 
2554
2534
  _proto.recoverMail = /*#__PURE__*/function () {
2555
2535
  var _recoverMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee43(_ref33) {
2556
- var mailId, _yield$this$client$mu21, recoverMail;
2536
+ var mailId, _yield$this$client34, recoverMail;
2557
2537
 
2558
2538
  return _regeneratorRuntime.wrap(function _callee43$(_context43) {
2559
2539
  while (1) {
@@ -2561,15 +2541,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2561
2541
  case 0:
2562
2542
  mailId = _ref33.mailId;
2563
2543
  _context43.next = 3;
2564
- return this.client.mutation({
2544
+ return this.client("mutation")({
2565
2545
  recoverMail: [{
2566
2546
  mailId: mailId
2567
2547
  }, true]
2568
2548
  });
2569
2549
 
2570
2550
  case 3:
2571
- _yield$this$client$mu21 = _context43.sent;
2572
- recoverMail = _yield$this$client$mu21.recoverMail;
2551
+ _yield$this$client34 = _context43.sent;
2552
+ recoverMail = _yield$this$client34.recoverMail;
2573
2553
  return _context43.abrupt("return", recoverMail);
2574
2554
 
2575
2555
  case 6:
@@ -2589,7 +2569,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2589
2569
 
2590
2570
  _proto.deleteFile = /*#__PURE__*/function () {
2591
2571
  var _deleteFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee44(_ref34) {
2592
- var fileId, vFileId, _yield$this$client$mu22, deleteFile;
2572
+ var fileId, vFileId, _yield$this$client35, deleteFile;
2593
2573
 
2594
2574
  return _regeneratorRuntime.wrap(function _callee44$(_context44) {
2595
2575
  while (1) {
@@ -2597,7 +2577,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2597
2577
  case 0:
2598
2578
  fileId = _ref34.fileId, vFileId = _ref34.vFileId;
2599
2579
  _context44.next = 3;
2600
- return this.client.mutation({
2580
+ return this.client("mutation")({
2601
2581
  deleteFile: [{
2602
2582
  fileId: fileId,
2603
2583
  vFileId: vFileId
@@ -2605,8 +2585,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2605
2585
  });
2606
2586
 
2607
2587
  case 3:
2608
- _yield$this$client$mu22 = _context44.sent;
2609
- deleteFile = _yield$this$client$mu22.deleteFile;
2588
+ _yield$this$client35 = _context44.sent;
2589
+ deleteFile = _yield$this$client35.deleteFile;
2610
2590
  return _context44.abrupt("return", deleteFile);
2611
2591
 
2612
2592
  case 6:
@@ -2626,7 +2606,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2626
2606
 
2627
2607
  _proto.deleteVFile = /*#__PURE__*/function () {
2628
2608
  var _deleteVFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee45(_ref35) {
2629
- var fileId, _yield$this$client$mu23, deleteVFile;
2609
+ var fileId, _yield$this$client36, deleteVFile;
2630
2610
 
2631
2611
  return _regeneratorRuntime.wrap(function _callee45$(_context45) {
2632
2612
  while (1) {
@@ -2634,15 +2614,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2634
2614
  case 0:
2635
2615
  fileId = _ref35.fileId;
2636
2616
  _context45.next = 3;
2637
- return this.client.mutation({
2617
+ return this.client("mutation")({
2638
2618
  deleteVFile: [{
2639
2619
  fileId: fileId
2640
2620
  }, true]
2641
2621
  });
2642
2622
 
2643
2623
  case 3:
2644
- _yield$this$client$mu23 = _context45.sent;
2645
- deleteVFile = _yield$this$client$mu23.deleteVFile;
2624
+ _yield$this$client36 = _context45.sent;
2625
+ deleteVFile = _yield$this$client36.deleteVFile;
2646
2626
  return _context45.abrupt("return", deleteVFile);
2647
2627
 
2648
2628
  case 6:
@@ -2662,7 +2642,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2662
2642
 
2663
2643
  _proto.deleteMail = /*#__PURE__*/function () {
2664
2644
  var _deleteMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee46(_ref36) {
2665
- var mailId, _yield$this$client$mu24, deleteMail;
2645
+ var mailId, _yield$this$client37, deleteMail;
2666
2646
 
2667
2647
  return _regeneratorRuntime.wrap(function _callee46$(_context46) {
2668
2648
  while (1) {
@@ -2670,15 +2650,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2670
2650
  case 0:
2671
2651
  mailId = _ref36.mailId;
2672
2652
  _context46.next = 3;
2673
- return this.client.mutation({
2653
+ return this.client("mutation")({
2674
2654
  deleteMail: [{
2675
2655
  mailId: mailId
2676
2656
  }, true]
2677
2657
  });
2678
2658
 
2679
2659
  case 3:
2680
- _yield$this$client$mu24 = _context46.sent;
2681
- deleteMail = _yield$this$client$mu24.deleteMail;
2660
+ _yield$this$client37 = _context46.sent;
2661
+ deleteMail = _yield$this$client37.deleteMail;
2682
2662
  return _context46.abrupt("return", deleteMail);
2683
2663
 
2684
2664
  case 6:
@@ -2700,7 +2680,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2700
2680
  var _saveInCloud = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee47(_ref37) {
2701
2681
  var _this5 = this;
2702
2682
 
2703
- var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client$mu25, saveInCloud, vFile, me, others;
2683
+ var fileId, name, folderId, key, file, _filesCache$get, _file2, receivedMails, mail, fileMail, fileKey, nameKey, encryptedName, encryptedNameKey, _yield$this$client38, saveInCloud, vFile, me, others;
2704
2684
 
2705
2685
  return _regeneratorRuntime.wrap(function _callee47$(_context47) {
2706
2686
  while (1) {
@@ -2828,7 +2808,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2828
2808
  encryptedName = _context47.sent;
2829
2809
  encryptedNameKey = sodium.to_hex(encryptCryptoBox(nameKey, _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey));
2830
2810
  _context47.next = 44;
2831
- return this.client.mutation({
2811
+ return this.client("mutation")({
2832
2812
  saveInCloud: [{
2833
2813
  fileId: fileId,
2834
2814
  key: key,
@@ -2839,8 +2819,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2839
2819
  });
2840
2820
 
2841
2821
  case 44:
2842
- _yield$this$client$mu25 = _context47.sent;
2843
- saveInCloud = _yield$this$client$mu25.saveInCloud;
2822
+ _yield$this$client38 = _context47.sent;
2823
+ saveInCloud = _yield$this$client38.saveInCloud;
2844
2824
  _context47.next = 48;
2845
2825
  return gqlVFileToExternal(saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
2846
2826
 
@@ -2891,7 +2871,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2891
2871
 
2892
2872
  _proto.sendDraftMail = /*#__PURE__*/function () {
2893
2873
  var _sendDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee48(draftId, customMessage) {
2894
- var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client$mu26, sendDraftMail;
2874
+ var drafts, draft, recipients, temporaryRecipients, _iterator14, _step14, email, input, _iterator15, _step15, id, _input, _yield$this$client39, sendDraftMail;
2895
2875
 
2896
2876
  return _regeneratorRuntime.wrap(function _callee48$(_context48) {
2897
2877
  while (1) {
@@ -2978,7 +2958,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2978
2958
 
2979
2959
  case 28:
2980
2960
  _context48.next = 30;
2981
- return this.client.mutation({
2961
+ return this.client("mutation")({
2982
2962
  sendDraftMail: [{
2983
2963
  temporaryRecipients: temporaryRecipients,
2984
2964
  recipients: recipients,
@@ -2988,8 +2968,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
2988
2968
  });
2989
2969
 
2990
2970
  case 30:
2991
- _yield$this$client$mu26 = _context48.sent;
2992
- sendDraftMail = _yield$this$client$mu26.sendDraftMail;
2971
+ _yield$this$client39 = _context48.sent;
2972
+ sendDraftMail = _yield$this$client39.sendDraftMail;
2993
2973
  return _context48.abrupt("return", sendDraftMail != null ? sendDraftMail : false);
2994
2974
 
2995
2975
  case 33:
@@ -3062,7 +3042,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3062
3042
  }
3063
3043
 
3064
3044
  _context49.next = 18;
3065
- return this.client.mutation({
3045
+ return this.client("mutation")({
3066
3046
  sendOneMail: [{
3067
3047
  mailIntegrityId: mail.mailIntegrityId,
3068
3048
  recipient: input
@@ -3097,7 +3077,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3097
3077
 
3098
3078
  _proto.createDraftMail = /*#__PURE__*/function () {
3099
3079
  var _createDraftMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee50(_ref41) {
3100
- var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client$mu27, createDraftMail;
3080
+ var body, subject, files, recipientsIds, replyTo, hashKey, hash, senderFiles, _iterator18, _step18, f, file, _yield$this$client40, createDraftMail;
3101
3081
 
3102
3082
  return _regeneratorRuntime.wrap(function _callee50$(_context50) {
3103
3083
  while (1) {
@@ -3162,7 +3142,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3162
3142
 
3163
3143
  case 19:
3164
3144
  _context50.next = 21;
3165
- return this.client.mutation({
3145
+ return this.client("mutation")({
3166
3146
  createDraftMail: [{
3167
3147
  recipients: recipientsIds,
3168
3148
  replyTo: replyTo,
@@ -3175,8 +3155,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3175
3155
  });
3176
3156
 
3177
3157
  case 21:
3178
- _yield$this$client$mu27 = _context50.sent;
3179
- createDraftMail = _yield$this$client$mu27.createDraftMail;
3158
+ _yield$this$client40 = _context50.sent;
3159
+ createDraftMail = _yield$this$client40.createDraftMail;
3180
3160
 
3181
3161
  if (createDraftMail) {
3182
3162
  _context50.next = 25;
@@ -3205,7 +3185,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3205
3185
 
3206
3186
  _proto.fileContent = /*#__PURE__*/function () {
3207
3187
  var _fileContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee52(_ref42) {
3208
- var fileId, onDownloadProgress, progressDecrypt, signal, _yield$this$client$qu14, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3188
+ var fileId, onDownloadProgress, progressDecrypt, signal, _yield$this$client41, fileContent, progressParts, onProgress, parts, byPart, encryptedContent, md5Encrypted, key, src, md5Content;
3209
3189
 
3210
3190
  return _regeneratorRuntime.wrap(function _callee52$(_context52) {
3211
3191
  while (1) {
@@ -3213,7 +3193,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3213
3193
  case 0:
3214
3194
  fileId = _ref42.fileId, onDownloadProgress = _ref42.onDownloadProgress, progressDecrypt = _ref42.progressDecrypt, signal = _ref42.signal;
3215
3195
  _context52.next = 3;
3216
- return this.client.query({
3196
+ return this.client("query")({
3217
3197
  fileContent: [{
3218
3198
  fileId: fileId
3219
3199
  }, {
@@ -3257,8 +3237,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3257
3237
  });
3258
3238
 
3259
3239
  case 3:
3260
- _yield$this$client$qu14 = _context52.sent;
3261
- fileContent = _yield$this$client$qu14.fileContent;
3240
+ _yield$this$client41 = _context52.sent;
3241
+ fileContent = _yield$this$client41.fileContent;
3262
3242
 
3263
3243
  if (fileContent) {
3264
3244
  _context52.next = 7;
@@ -3403,7 +3383,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3403
3383
 
3404
3384
  _proto.updateFile = /*#__PURE__*/function () {
3405
3385
  var _updateFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee53(_ref44) {
3406
- var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client$mu28, updateFile;
3386
+ var fileId, filename, isFavorite, deletedAt, file, encryptedName, _yield$this$client42, updateFile;
3407
3387
 
3408
3388
  return _regeneratorRuntime.wrap(function _callee53$(_context53) {
3409
3389
  while (1) {
@@ -3439,7 +3419,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3439
3419
  case 11:
3440
3420
  encryptedName = _context53.t0;
3441
3421
  _context53.next = 14;
3442
- return this.client.mutation({
3422
+ return this.client("mutation")({
3443
3423
  updateFile: [{
3444
3424
  fileId: fileId,
3445
3425
  filename: encryptedName,
@@ -3449,8 +3429,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3449
3429
  });
3450
3430
 
3451
3431
  case 14:
3452
- _yield$this$client$mu28 = _context53.sent;
3453
- updateFile = _yield$this$client$mu28.updateFile;
3432
+ _yield$this$client42 = _context53.sent;
3433
+ updateFile = _yield$this$client42.updateFile;
3454
3434
 
3455
3435
  if (updateFile) {
3456
3436
  _context53.next = 18;
@@ -3479,7 +3459,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3479
3459
 
3480
3460
  _proto.readMail = /*#__PURE__*/function () {
3481
3461
  var _readMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee54(_ref45) {
3482
- var mailId, _yield$this$client$mu29, readMail;
3462
+ var mailId, _yield$this$client43, readMail;
3483
3463
 
3484
3464
  return _regeneratorRuntime.wrap(function _callee54$(_context54) {
3485
3465
  while (1) {
@@ -3487,15 +3467,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3487
3467
  case 0:
3488
3468
  mailId = _ref45.mailId;
3489
3469
  _context54.next = 3;
3490
- return this.client.mutation({
3470
+ return this.client("mutation")({
3491
3471
  readMail: [{
3492
3472
  mailId: mailId
3493
3473
  }, true]
3494
3474
  });
3495
3475
 
3496
3476
  case 3:
3497
- _yield$this$client$mu29 = _context54.sent;
3498
- readMail = _yield$this$client$mu29.readMail;
3477
+ _yield$this$client43 = _context54.sent;
3478
+ readMail = _yield$this$client43.readMail;
3499
3479
  return _context54.abrupt("return", readMail != null ? readMail : false);
3500
3480
 
3501
3481
  case 6:
@@ -3515,7 +3495,7 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3515
3495
 
3516
3496
  _proto.unreadMail = /*#__PURE__*/function () {
3517
3497
  var _unreadMail = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee55(_ref46) {
3518
- var mailId, _yield$this$client$mu30, unreadMail;
3498
+ var mailId, _yield$this$client44, unreadMail;
3519
3499
 
3520
3500
  return _regeneratorRuntime.wrap(function _callee55$(_context55) {
3521
3501
  while (1) {
@@ -3523,15 +3503,15 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3523
3503
  case 0:
3524
3504
  mailId = _ref46.mailId;
3525
3505
  _context55.next = 3;
3526
- return this.client.mutation({
3506
+ return this.client("mutation")({
3527
3507
  unreadMail: [{
3528
3508
  mailId: mailId
3529
3509
  }, true]
3530
3510
  });
3531
3511
 
3532
3512
  case 3:
3533
- _yield$this$client$mu30 = _context55.sent;
3534
- unreadMail = _yield$this$client$mu30.unreadMail;
3513
+ _yield$this$client44 = _context55.sent;
3514
+ unreadMail = _yield$this$client44.unreadMail;
3535
3515
  return _context55.abrupt("return", unreadMail != null ? unreadMail : false);
3536
3516
 
3537
3517
  case 6:
@@ -3553,14 +3533,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3553
3533
  var _appSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee56() {
3554
3534
  var _user$appSettings;
3555
3535
 
3556
- var _yield$this$client$qu15, user;
3536
+ var _yield$this$client45, user;
3557
3537
 
3558
3538
  return _regeneratorRuntime.wrap(function _callee56$(_context56) {
3559
3539
  while (1) {
3560
3540
  switch (_context56.prev = _context56.next) {
3561
3541
  case 0:
3562
3542
  _context56.next = 2;
3563
- return this.client.query({
3543
+ return this.client("query")({
3564
3544
  user: [{}, {
3565
3545
  appSettings: {
3566
3546
  autoDisconnectDelay: true,
@@ -3573,8 +3553,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3573
3553
  });
3574
3554
 
3575
3555
  case 2:
3576
- _yield$this$client$qu15 = _context56.sent;
3577
- user = _yield$this$client$qu15.user;
3556
+ _yield$this$client45 = _context56.sent;
3557
+ user = _yield$this$client45.user;
3578
3558
 
3579
3559
  if (user) {
3580
3560
  _context56.next = 6;
@@ -3603,14 +3583,14 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3603
3583
 
3604
3584
  _proto.updateAppSettings = /*#__PURE__*/function () {
3605
3585
  var _updateAppSettings = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee57(settings) {
3606
- var _yield$this$client$mu31, updateAppSettings;
3586
+ var _yield$this$client46, updateAppSettings;
3607
3587
 
3608
3588
  return _regeneratorRuntime.wrap(function _callee57$(_context57) {
3609
3589
  while (1) {
3610
3590
  switch (_context57.prev = _context57.next) {
3611
3591
  case 0:
3612
3592
  _context57.next = 2;
3613
- return this.client.mutation({
3593
+ return this.client("mutation")({
3614
3594
  updateAppSettings: [settings, {
3615
3595
  autoDisconnectDelay: true,
3616
3596
  cloudFileDaysForDelete: true,
@@ -3621,8 +3601,8 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3621
3601
  });
3622
3602
 
3623
3603
  case 2:
3624
- _yield$this$client$mu31 = _context57.sent;
3625
- updateAppSettings = _yield$this$client$mu31.updateAppSettings;
3604
+ _yield$this$client46 = _context57.sent;
3605
+ updateAppSettings = _yield$this$client46.updateAppSettings;
3626
3606
  return _context57.abrupt("return", updateAppSettings);
3627
3607
 
3628
3608
  case 5:
@@ -3644,22 +3624,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3644
3624
  var _receivedMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee58() {
3645
3625
  var _user$receivedMails;
3646
3626
 
3647
- var _yield$this$client$qu16, user, mails, receivedMails, _iterator19, _step19, m, mail;
3627
+ var _yield$this$client47, user, mails, receivedMails, _iterator19, _step19, m, mail;
3648
3628
 
3649
3629
  return _regeneratorRuntime.wrap(function _callee58$(_context58) {
3650
3630
  while (1) {
3651
3631
  switch (_context58.prev = _context58.next) {
3652
3632
  case 0:
3653
3633
  _context58.next = 2;
3654
- return this.client.query({
3634
+ return this.client("query")({
3655
3635
  user: [{}, {
3656
3636
  receivedMails: gqlMailQuery
3657
3637
  }]
3658
3638
  });
3659
3639
 
3660
3640
  case 2:
3661
- _yield$this$client$qu16 = _context58.sent;
3662
- user = _yield$this$client$qu16.user;
3641
+ _yield$this$client47 = _context58.sent;
3642
+ user = _yield$this$client47.user;
3663
3643
  mails = (_user$receivedMails = user == null ? void 0 : user.receivedMails) != null ? _user$receivedMails : []; // TODO get actual mails on this app only
3664
3644
 
3665
3645
  receivedMails = new Array();
@@ -3694,22 +3674,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3694
3674
  var _sentMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee59() {
3695
3675
  var _user$sentMails;
3696
3676
 
3697
- var _yield$this$client$qu17, user, mails, sentMails, _iterator20, _step20, m, mail;
3677
+ var _yield$this$client48, user, mails, sentMails, _iterator20, _step20, m, mail;
3698
3678
 
3699
3679
  return _regeneratorRuntime.wrap(function _callee59$(_context59) {
3700
3680
  while (1) {
3701
3681
  switch (_context59.prev = _context59.next) {
3702
3682
  case 0:
3703
3683
  _context59.next = 2;
3704
- return this.client.query({
3684
+ return this.client("query")({
3705
3685
  user: [{}, {
3706
3686
  sentMails: gqlMailQuery
3707
3687
  }]
3708
3688
  });
3709
3689
 
3710
3690
  case 2:
3711
- _yield$this$client$qu17 = _context59.sent;
3712
- user = _yield$this$client$qu17.user;
3691
+ _yield$this$client48 = _context59.sent;
3692
+ user = _yield$this$client48.user;
3713
3693
  mails = (_user$sentMails = user == null ? void 0 : user.sentMails) != null ? _user$sentMails : []; // TODO get actual mails on this app only
3714
3694
 
3715
3695
  sentMails = new Array();
@@ -3744,22 +3724,22 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3744
3724
  var _draftMails = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee60() {
3745
3725
  var _user$draftMails;
3746
3726
 
3747
- var _yield$this$client$qu18, user, mails, draftMails, _iterator21, _step21, m, draft;
3727
+ var _yield$this$client49, user, mails, draftMails, _iterator21, _step21, m, draft;
3748
3728
 
3749
3729
  return _regeneratorRuntime.wrap(function _callee60$(_context60) {
3750
3730
  while (1) {
3751
3731
  switch (_context60.prev = _context60.next) {
3752
3732
  case 0:
3753
3733
  _context60.next = 2;
3754
- return this.client.query({
3734
+ return this.client("query")({
3755
3735
  user: [{}, {
3756
3736
  draftMails: gqlMailQuery
3757
3737
  }]
3758
3738
  });
3759
3739
 
3760
3740
  case 2:
3761
- _yield$this$client$qu18 = _context60.sent;
3762
- user = _yield$this$client$qu18.user;
3741
+ _yield$this$client49 = _context60.sent;
3742
+ user = _yield$this$client49.user;
3763
3743
  mails = (_user$draftMails = user == null ? void 0 : user.draftMails) != null ? _user$draftMails : []; // TODO get actual mails on this app only
3764
3744
 
3765
3745
  draftMails = new Array();
@@ -3790,6 +3770,39 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3790
3770
  return draftMails;
3791
3771
  }();
3792
3772
 
3773
+ _proto.unreadReceivedMailsCount = /*#__PURE__*/function () {
3774
+ var _unreadReceivedMailsCount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee61() {
3775
+ var _yield$this$client50, unreadReceivedMailsCount;
3776
+
3777
+ return _regeneratorRuntime.wrap(function _callee61$(_context61) {
3778
+ while (1) {
3779
+ switch (_context61.prev = _context61.next) {
3780
+ case 0:
3781
+ _context61.next = 2;
3782
+ return this.client("query")({
3783
+ unreadReceivedMailsCount: true
3784
+ });
3785
+
3786
+ case 2:
3787
+ _yield$this$client50 = _context61.sent;
3788
+ unreadReceivedMailsCount = _yield$this$client50.unreadReceivedMailsCount;
3789
+ return _context61.abrupt("return", unreadReceivedMailsCount != null ? unreadReceivedMailsCount : 0);
3790
+
3791
+ case 5:
3792
+ case "end":
3793
+ return _context61.stop();
3794
+ }
3795
+ }
3796
+ }, _callee61, this);
3797
+ }));
3798
+
3799
+ function unreadReceivedMailsCount() {
3800
+ return _unreadReceivedMailsCount.apply(this, arguments);
3801
+ }
3802
+
3803
+ return unreadReceivedMailsCount;
3804
+ }();
3805
+
3793
3806
  _createClass(SecrecyClient, [{
3794
3807
  key: "publicKey",
3795
3808
  get: function get() {
@@ -3799,4 +3812,4 @@ export var SecrecyClient = /*#__PURE__*/function (_BaseClient) {
3799
3812
 
3800
3813
  return SecrecyClient;
3801
3814
  }(BaseClient);
3802
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJqd3QiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibXV0YXRpb24iLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsInNpZ25hbCIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJmaWxlQnVmZmVyIiwiY29tcHJlc3NlZCIsImVuY3J5cHRlZEZpbGUiLCJtZDVGaWxlIiwibWQ1RW5jcnlwdGVkIiwiZW5jcnlwdGVkRmlsZUtleSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJOdW1iZXIiLCJpbmRleCIsImNodW5rIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwiZW50cmllcyIsInZhbHVlIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwicmVzcG9uc2UiLCJzdGF0dXMiLCJ1cGxvYWRGaWxlSW5DbG91ZCIsInNhdmVJbkNsb3VkIiwibG9nb3V0Iiwic2Vzc2lvbklkIiwiY2xlYXIiLCJjcmVhdGVGb2xkZXIiLCJwYXJlbnRGb2xkZXJJZCIsImVuY3J5cHRlZE5hbWUiLCJlbmNyeXB0ZWRLZXkiLCJwYXJlbnRGb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwicmlnaHRzIiwic2hhcmVGb2xkZXIiLCJkZWxldGVkIiwicXVlcnkiLCJtYWlsIiwic2hhcmVWRmlsZSIsImgiLCJzaGFyZWRWRmlsZXMiLCJ2RmlsZXMiLCJ2RmlsZXNTaGFyZWRXaXRoTWUiLCJkZWxldGVkVkZpbGVzIiwic2hhcmVkRm9sZGVycyIsImZvbGRlcnMiLCJmb2xkZXJzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZEZvbGRlcnMiLCJkZWxldGVkTWFpbHMiLCJtYWlsVHlwZSIsIm1haWxzIiwibSIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiRGF0ZSIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJWRmlsZSIsInJlY292ZXJGb2xkZXIiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVWRmlsZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJfX3R5cGVuYW1lIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwicHIiLCJidWYiLCJtZDVQYXJ0IiwiZW5jcnlwdGVkQ29udGVudCIsInNvcnQiLCJhIiwiYiIsInNyYyIsIm1kNUNvbnRlbnQiLCJ1cGRhdGVGaWxlIiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJhdXRvRGlzY29ubmVjdERlbGF5IiwiY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZSIsImNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlNYXhGaWxlQ291bnQiLCJ1cGRhdGVBcHBTZXR0aW5ncyIsInNldHRpbmdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBT0EsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixrQkFBM0I7QUFDQSxTQUFTQyxXQUFULEVBQXNCQyxZQUF0QixFQUFvQ0MsVUFBcEMsRUFBZ0RDLFVBQWhELFFBQWtFLGFBQWxFO0FBRUEsU0FBU0Msa0JBQVQsRUFBNkJDLG1CQUE3QixRQUF3RCxtQkFBeEQ7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxvQkFBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyw2QkFGRixRQUdPLHFCQUhQO0FBSUEsU0FDRUMsa0JBREYsRUFFRUMsa0JBRkYsRUFHRUMsb0JBSEYsUUFJTyxvQkFKUDtBQTJCQSxTQUFTQyxpQkFBVCxRQUFrQyxtQkFBbEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLGNBQXZCO0FBRUEsU0FBU0MsZ0JBQVQsRUFBMkJDLGdCQUEzQixRQUFtRCxvQkFBbkQ7QUFFQSxTQUFTQyxRQUFULFFBQXlCLFNBQXpCO0FBQ0EsU0FBU0MsR0FBVCxRQUFvQixrQkFBcEI7QUFDQSxTQUFTQyxPQUFULEVBQWtCQyxPQUFsQixRQUFpQyxxQkFBakM7QUFDQSxTQUFTQyxNQUFULEVBQWlCQyxXQUFqQixFQUE4QkMsU0FBOUIsRUFBeUNDLGVBQXpDLFFBQWdFLGFBQWhFO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxjQUZGLEVBR0VDLGtCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixFQU1FQyx1QkFORixRQU9PLG9CQVBQO0FBU0EsU0FBU0MsNkJBQVQsUUFBOEMsbUJBQTlDLEMsQ0FDQTtBQUNBOztBQVlBLElBQU1DLFdBQVc7QUFBQSxz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RCw4QkFBSSxJQUFKLGdCQUR0Qjs7QUFFckIsb0JBQUlrQyxLQUFKLEVBQVc7QUFDVEYsa0JBQUFBLFVBQVUsQ0FBQ2xJLElBQVgsQ0FBZ0JvSSxLQUFoQjtBQUNEO0FBQ0Y7O0FBckJILGlEQXVCU0YsVUF2QlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0F6bkRGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxTQWdCRSxlQUF3QjtBQUN0QixhQUFPLGdEQUFXOUosU0FBbEI7QUFDRDtBQWxCSDs7QUFBQTtBQUFBLEVBQW1DaEQsVUFBbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1haWxUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IHZGaWxlc0NhY2hlLCBmb2xkZXJzQ2FjaGUsIGZpbGVzQ2FjaGUsIHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiwgZW5jcnlwdFNlY3JldHN0cmVhbSB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBncWxGb2xkZXJUb0V4dGVybmFsLFxuICBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbFxufSBmcm9tIFwiLi9jb252ZXJ0L2ZvbGRlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsVkZpbGVUb0V4dGVybmFsLFxuICBncWxWRmlsZVRvSW50ZXJuYWwsXG4gIGludGVybmFsVkZpbGVUb1ZGaWxlXG59IGZyb20gXCIuL2NvbnZlcnQvdkZpbGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgRm9sZGVyLFxuICBWRmlsZVdpdGhGb2xkZXIsXG4gIEZvbGRlckZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGUgYXMgU2VjcmVjeUZpbGUsXG4gIFdhaXRpbmdSZWNlaXZlZE1haWwsXG4gIERyYWZ0TWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0LFxuICBWRmlsZSxcbiAgU2hhcmVGb2xkZXJzSW5wdXQsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTmFtZUtleUlucHV0Rm9sZGVycyxcbiAgTWFpbCxcbiAgU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIEZpbGVDb250ZW50UGFydFxufSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ3FsRmlsZVRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L2ZpbGUuanNcIjtcbmltcG9ydCB7IHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5UGFpciB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGRlY3J5cHRDcnlwdG9Cb3gsIGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzaG9ydGlkXCI7XG5pbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL21kNS5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdCwgZGVjcnlwdCB9IGZyb20gXCIuLi93b3JrZXIvc29kaXVtLmpzXCI7XG5pbXBvcnQgeyBjaHVua3MsIGNvbmNhdGVuYXRlLCBlbnVtZXJhdGUsIHByb21pc2VBbGxMaW1pdCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRmlsZVF1ZXJ5LFxuICBncWxGb2xkZXJRdWVyeSxcbiAgZ3FsRm9sZGVyRnVsbFF1ZXJ5LFxuICBncWxNYWlsUXVlcnksXG4gIGdxbFZGaWxlUXVlcnksXG4gIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG59IGZyb20gXCIuL3R5cGVzL3F1ZXJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD47XG5cbmNvbnN0IGVuY3J5cHROYW1lID0gYXN5bmMgKG5hbWU6IHN0cmluZywgbmFtZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBlbmNyeXB0U2VjcmV0c3RyZWFtKFxuICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICBzb2RpdW0uZnJvbV9zdHJpbmcobmFtZSlcbiAgKTtcbiAgY29uc3QgbmFtZUVuY3J5cHRlZCA9IHNvZGl1bS50b19oZXgoZGF0YSk7XG4gIHJldHVybiBuYW1lRW5jcnlwdGVkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50IHtcbiAgand0OiBzdHJpbmc7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuI2tleXMgPSB1YUtleXM7XG4gIH1cblxuICBnZXQgcHVibGljS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2tleXMucHVibGljS2V5O1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gYXdhaXQgZ3FsVkZpbGVUb0ludGVybmFsKGFkZEZpbGVUb0hpc3RvcnksIHRoaXMuI2tleXMpO1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IHZGaWxlLnVzZXJzLmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXQ6IFNoYXJlRmlsZUluSGlzdG9yeUlucHV0ID0ge1xuICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIHVzZXJzOiB1c2Vycy5tYXAoKFt1XSkgPT4gKHtcbiAgICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS51c2VyIS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KSlcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbeyBpbnB1dCwgdkZpbGVJZCB9LCB0cnVlXVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcm5hbFZGaWxlVG9WRmlsZSh2RmlsZSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZmlsZUJ1ZmZlciA9XG4gICAgICBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSkgOiBmaWxlO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSBjb21wcmVzcyhmaWxlQnVmZmVyKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MsIHNpZ25hbCk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZCxcbiAgICAgICAgICAgIG1kNSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZVBhcnRFbmQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIHVwbG9hZEZpbGVFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZCA/PyBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLmZpbGVQYXJ0U2l6ZSkpXG4gICAgKSkge1xuICAgICAgY2h1bmtQYXJ0cy5wdXNoKHtcbiAgICAgICAgb3JkZXI6IGluZGV4ICsgMSxcbiAgICAgICAgZGF0YTogY2h1bmssXG4gICAgICAgIG1kNTogYXdhaXQgbWQ1KGNodW5rKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgUHJvZ3Jlc3NFdmVudD4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKHBhcnQ6IG51bWJlciwgcHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLmxvYWRlZCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiBjdXJyZW50IC8gZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVQYXJ0UmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rUGFydHMuZmluZChwID0+IHAub3JkZXIgPT09IHBhcnQub3JkZXIpO1xuICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJ0LmZpZWxkcykpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICBcImZpbGVcIixcbiAgICAgICAgbmV3IEJsb2IoW2NodW5rLmRhdGFdKSxcbiAgICAgICAgYCR7dXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgICBvblVwbG9hZFByb2dyZXNzOiBwcm9ncmVzc0V2ZW50ID0+XG4gICAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICAgIHNpZ25hbFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgoZSBhcyBhbnkpLnJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgIC8vIFRPRE8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9reS9pc3N1ZXMvMzA1XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS5wYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgKTtcblxuICAgIHJldHVybiB1cGxvYWRFbmRlZCgpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBmb2xkZXJJZCxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmb2xkZXJJZD86IHN0cmluZztcbiAgICBlbmNyeXB0UHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHVwbG9hZFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICB0aHJvdyBgQ2FuJ3QgdXBsb2FkIGZpbGVgO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYXZlSW5DbG91ZCh7IGZpbGVJZCwgbmFtZSwgZm9sZGVySWQgfSk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHZGaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZmlsZXNDYWNoZS5jbGVhcigpO1xuICAgIGZvbGRlcnNDYWNoZS5jbGVhcigpO1xuICAgIGF3YWl0IHN1cGVyLmxvZ291dChzZXNzaW9uSWQpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRm9sZGVyKHtcbiAgICBuYW1lLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGFyZW50Rm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxGb2xkZXJGdWxsPiB7XG4gICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgoa2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcbiAgICBjb25zdCB7IGNyZWF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZvbGRlckZ1bGxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghY3JlYXRlRm9sZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBmb2xkZXJgKTtcbiAgICB9XG4gICAgY29uc3QgZm9sZGVyID0gYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbEZvbGRlckZ1bGwoXG4gICAgICBjcmVhdGVGb2xkZXIsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJzID1cbiAgICAgIGZvbGRlci5wYXJlbnRGb2xkZXI/LnVzZXJzPy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKSA/PyBbXTtcblxuICAgIGlmICh1c2Vycy5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB1c2Vycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVGb2xkZXIoe1xuICAgICAgICAgICAgZm9sZGVySWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcjtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlcih7XG4gICAgaWQsXG4gICAgZGVsZXRlZFxuICB9OiB7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogUHJvbWlzZTxGb2xkZXJGdWxsIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmb2xkZXI6IFt7IGRlbGV0ZWQsIGlkIH0sIGdxbEZvbGRlckZ1bGxRdWVyeV1cbiAgICB9KTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChmb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZWNyZWN5RmlsZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGaWxlVG9FeHRlcm5hbChmaWxlLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHZGaWxlKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlciB8IG51bGw+IHtcbiAgICBjb25zdCB7IHZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB2RmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykgYXMgUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXI+O1xuICB9XG5cbiAgYXN5bmMgbWFpbCh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgbWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtYWlsLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlVkZpbGUoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiB2RmlsZUlkIH0pO1xuICAgICAgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICAgIGlmICghdkZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGhpc3RvcnkgPSBuZXcgQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGtleTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGggb2YgdkZpbGUuaGlzdG9yeSkge1xuICAgICAgaWYgKCFoLnVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICBpZDogaC5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoaC51c2VyLmtleSksXG4gICAgICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZVZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB2RmlsZUlkLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgbmFtZUtleSxcbiAgICAgICAgICBoaXN0b3J5XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzaGFyZVZGaWxlID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkVkZpbGVzKCk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZFZGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgc2hhcmVkVkZpbGVzOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2Ygc2hhcmVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgdkZpbGVzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHZGaWxlc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdkZpbGVzU2hhcmVkV2l0aE1lOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgdkZpbGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGRlbGV0ZWRWRmlsZXM6IGdxbFZGaWxlUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZT4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgZGVsZXRlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBzaGFyZWRGb2xkZXJzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBzaGFyZWRGb2xkZXJzOiBncWxGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm9sZGVycyA9IG5ldyBBcnJheTxGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBzaGFyZWRGb2xkZXJzKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGZvbGRlcnNTaGFyZWRXaXRoTWUoKTogUHJvbWlzZTxGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgZm9sZGVyc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZm9sZGVyc1NoYXJlZFdpdGhNZTogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZm9sZGVyc1NoYXJlZFdpdGhNZSkge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGVsZXRlZEZvbGRlcnM6IGdxbEZvbGRlclF1ZXJ5XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2xkZXJzID0gbmV3IEFycmF5PEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIGRlbGV0ZWRGb2xkZXJzKSB7XG4gICAgICBmb2xkZXJzLnB1c2goYXdhaXQgZ3FsRm9sZGVyVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9sZGVycztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRNYWlscyh7IG1haWxUeXBlIH06IHsgbWFpbFR5cGU6IE1haWxUeXBlIH0pOiBQcm9taXNlPE1haWxbXT4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZE1haWxzIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBkZWxldGVkTWFpbHM6IFt7IG1haWxUeXBlIH0sIGdxbE1haWxRdWVyeV1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gbmV3IEFycmF5PE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVsZXRlZE1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBtYWlscy5wdXNoKG1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWlscztcbiAgfVxuXG4gIGFzeW5jIHNoYXJlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICB1c2VySWQsXG4gICAgcmlnaHRzXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHNoYXJlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBzaGFyZUZvbGRlcjogW1xuICAgICAgICB7IGZvbGRlcklkLCB1c2VySWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlczogdHJ1ZSxcbiAgICAgICAgICBmb2xkZXJzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNoYXJlRm9sZGVyczogU2hhcmVGb2xkZXJzSW5wdXQgPSB7XG4gICAgICB2RmlsZXM6IFtdLFxuICAgICAgZm9sZGVyczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci5mb2xkZXJzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJGb2xkZXIoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy5mb2xkZXJzLnB1c2gobmFtZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci52RmlsZXMpIHtcbiAgICAgIGNvbnN0IHZGaWxlSW5wdXQgPSBhd2FpdCB0aGlzLnBlclZGaWxlKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAodkZpbGVJbnB1dCkge1xuICAgICAgICBzaGFyZUZvbGRlcnMudkZpbGVzLnB1c2godkZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZUZvbGRlckZpbmlzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2hhcmVGb2xkZXJGaW5pc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgc2hhcmVGb2xkZXJzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzaGFyZUZvbGRlckZpbmlzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBsZXQgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG4gICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBmb2xkZXIgJHtmb2xkZXJJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IGZvbGRlci51c2VyQXBwPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgZm9sZGVyLnVzZXJBcHAubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGlzRmF2b3JpdGUsXG4gICAgICAgICAgZGVsZXRlZEF0XG4gICAgICAgIH0sXG4gICAgICAgIGdxbEZvbGRlckZ1bGxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGb2xkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVwZGF0ZSBmb2xkZXJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKHVwZGF0ZUZvbGRlciwgdGhpcy4ja2V5cyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBOb3RpZmljYXRpb25zKFxuICAgIG5vdGlmaWNhdGlvbnM6IFBhcnRpYWw8VXNlckFwcE5vdGlmaWNhdGlvbnM+XG4gICk6IFByb21pc2U8VXNlckFwcE5vdGlmaWNhdGlvbnMgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVBcHBOb3RpZmljYXRpb25zOiBbXG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlQXBwTm90aWZpY2F0aW9ucyxcbiAgICAgIGRpc2FibGVBbGxVbnRpbDogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWxcbiAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVBcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxVc2VyQXBwTm90aWZpY2F0aW9ucyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGFwcE5vdGlmaWNhdGlvbnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hcHBOb3RpZmljYXRpb25zLFxuICAgICAgZGlzYWJsZUFsbFVudGlsOiBhcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbFxuICAgICAgICA/IG5ldyBEYXRlKGFwcE5vdGlmaWNhdGlvbnMuZGlzYWJsZUFsbFVudGlsKVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlTWFpbChcbiAgICBkYXRhOiBOZXdNYWlsLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1haWwgPSBhd2FpdCB0aGlzLmNyZWF0ZURyYWZ0TWFpbChkYXRhKTtcbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VuZERyYWZ0TWFpbChtYWlsLm1haWxJbnRlZ3JpdHlJZCwgY3VzdG9tTWVzc2FnZSk7XG4gIH1cblxuICBhc3luYyB3YWl0aW5nUmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFdhaXRpbmdSZWNlaXZlZE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHdhaXRpbmdSZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgYXR0YWNobWVudHNDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlcjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGdldCB3YWl0aW5nIHJlY2VpdmVkIG1haWxzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLndhaXRpbmdSZWNlaXZlZE1haWxzLm1hcChtID0+ICh7XG4gICAgICBpZDogZ2VuZXJhdGUoKSxcbiAgICAgIC4uLm0sXG4gICAgICBkYXRlOiBuZXcgRGF0ZShtLmRhdGUpXG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICB7IGJvZHksIHN1YmplY3QsIGZpbGVzLCByZWNpcGllbnRzSWRzLCByZXBseVRvIH06IFBhcnRpYWw8TmV3TWFpbD5cbiAgKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZHJhZnQgJHtkcmFmdElkfWApO1xuICAgIH1cbiAgICBsZXQgaGFzaEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhhc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChib2R5IHx8IHN1YmplY3QpIHtcbiAgICAgIGhhc2hLZXkgPSBzb2RpdW0ucmFuZG9tYnl0ZXNfYnVmKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgICBcImhleFwiXG4gICAgICApO1xuICAgICAgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICAgIHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgYm9keSwgc3ViamVjdCB9KSxcbiAgICAgICAgaGFzaEtleSxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZGVyRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZW5kZXJGaWxlcy5wdXNoKHtcbiAgICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdXBkYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWQsXG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURyYWZ0TWFpbChkcmFmdElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdElkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRHJhZnRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGVTaGFyaW5nKHtcbiAgICB2RmlsZUlkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZVNoYXJpbmcgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlU2hhcmluZzogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZVNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJTaGFyaW5nKHtcbiAgICBmb2xkZXJJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZvbGRlcklkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZvbGRlclNoYXJpbmcgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZvbGRlclNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlclNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAoJHt2RmlsZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1c3RvbU5hbWUgPSBjdXN0b21OYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGN1c3RvbU5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyBkdXBsaWNhdGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZHVwbGljYXRlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHVwbGljYXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyQ2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZU1haWxUcmFzaDtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5TWFpbFRyYXNoOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWRmlsZSh7IHZGaWxlSWQgfTogeyB2RmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlclZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICByZWNvdmVyVkZpbGU6IFt7IHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyVkZpbGU7XG4gIH1cblxuICBhc3luYyByZWNvdmVyRm9sZGVyKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJGb2xkZXI6IFt7IGlkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVjb3ZlckZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICB2RmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVZGaWxlKHsgZmlsZUlkIH06IHsgZmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGRlbGV0ZVZGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGlmIChmb2xkZXJJZCAmJiAhZm9sZGVyc0NhY2hlLmhhcyhmb2xkZXJJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgaWYgKCFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJHtmb2xkZXJJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvciAyXCIpO1xuICAgICAgfVxuICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDNcIik7XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNhdmVJbkNsb3VkOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIGZpbGVuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIG5hbWVLZXk6IGVuY3J5cHRlZE5hbWVLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlID0gKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbChcbiAgICAgIHNhdmVJbkNsb3VkLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkpIGFzIFZGaWxlV2l0aEZvbGRlcjtcblxuICAgIGNvbnN0IG1lID0gdkZpbGUuZm9sZGVyLnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvdGhlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlVkZpbGUoe1xuICAgICAgICAgICAgdkZpbGVJZDogdkZpbGUuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZTtcbiAgfVxuXG4gIGFzeW5jIHNlbmREcmFmdE1haWwoXG4gICAgZHJhZnRJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuXG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBuZXcgQXJyYXk8TWFpbFJlY2lwaWVudElucHV0PigpO1xuXG4gICAgY29uc3QgdGVtcG9yYXJ5UmVjaXBpZW50cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBkcmFmdC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGVtYWlsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChlbWFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgeyBpZCB9IG9mIGRyYWZ0LnJlY2lwaWVudHMpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBpZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNlbmREcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHNlbmREcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBkcmFmdE1haWxJZDogZHJhZnQubWFpbEludGVncml0eUlkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbmREcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzZW5kV2FpdGluZ0VtYWlscygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPIG9wdGkgdGhpc1xuICAgIGNvbnN0IG1haWxzID0gYXdhaXQgdGhpcy5zZW50TWFpbHMoKTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IG1haWxzLmZpbHRlcihtID0+IG0udGVtcG9yYXJ5UmVjaXBpZW50cy5sZW5ndGggPiAwKTtcblxuICAgIGZvciAoY29uc3QgbWFpbCBvZiBmaWx0ZXJlZCkge1xuICAgICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgbWFpbC50ZW1wb3JhcnlSZWNpcGllbnRzKSB7XG4gICAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICAgIG1haWwuZmlsZXMsXG4gICAgICAgICAgbWFpbC5zdWJqZWN0LFxuICAgICAgICAgIG1haWwuYm9keSxcbiAgICAgICAgICBlbWFpbFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBjcmVhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgY3JlYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgb25Eb3dubG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuICAgIHByb2dyZXNzRGVjcnlwdD86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCB7IGZpbGVDb250ZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBmaWxlQ29udGVudDogW1xuICAgICAgICB7IGZpbGVJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50Q2xvdWRcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiOiB7XG4gICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgc2VuZGVyUHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50U2VudE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmaWxlQ29udGVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7ZmlsZUlkfSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBEb3dubG9hZFByb2dyZXNzPiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXG4gICAgICBwYXJ0OiBudW1iZXIsXG4gICAgICBwcm9ncmVzc0V2ZW50OiBEb3dubG9hZFByb2dyZXNzXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IHRyYW5zZmVycmVkQnl0ZXMgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIudHJhbnNmZXJyZWRCeXRlcyxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIoZmlsZUNvbnRlbnQudG90YWxTaXplKTtcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogdHJhbnNmZXJyZWRCeXRlcyAvIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRyYW5zZmVycmVkQnl0ZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTx7IGRhdGE6IFVpbnQ4QXJyYXk7IG9yZGVyOiBudW1iZXIgfT4oKTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlQ29udGVudFBhcnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICBhd2FpdCBreVxuICAgICAgICAgIC5nZXQocGFydC5jb250ZW50VXJsLCB7XG4gICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHByID0+IG9uUHJvZ3Jlc3MocGFydC5vcmRlciwgcHIpLFxuICAgICAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hcnJheUJ1ZmZlcigpXG4gICAgICApO1xuICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgaWYgKG1kNVBhcnQgIT09IHBhcnQubWQ1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWApO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgb3JkZXI6IHBhcnQub3JkZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgZmlsZUNvbnRlbnQucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50ID0gY29uY2F0ZW5hdGUoXG4gICAgICAuLi5wYXJ0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKHAgPT4gcC5kYXRhKVxuICAgICk7XG5cbiAgICAvLyBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2YoZW5jcnlwdGVkQ29udGVudCkpKTtcbiAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICBpZiAobWQ1RW5jcnlwdGVkICE9PSBmaWxlQ29udGVudC5tZDVFbmNyeXB0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVDb250ZW50LmtleSksXG4gICAgICBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgPyBmaWxlQ29udGVudC5zZW5kZXJQdWJsaWNLZXlcbiAgICAgICAgOiBmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50Q2xvdWRcIlxuICAgICAgICA/IGZpbGVDb250ZW50LnB1YmxpY0tleVxuICAgICAgICA6IHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHNyYyA9IGF3YWl0IGRlY3J5cHQoa2V5LCBlbmNyeXB0ZWRDb250ZW50LCBwcm9ncmVzc0RlY3J5cHQsIHNpZ25hbCk7XG5cbiAgICAvLyBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKHNyYykpKTtcbiAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICBpZiAobWQ1Q29udGVudCAhPT0gZmlsZUNvbnRlbnQubWQ1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5jb21wcmVzcyhzcmMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIGZpbGVuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBmaWxlbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxWRmlsZT4ge1xuICAgIGNvbnN0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZpbGUgJHtmaWxlSWR9YDtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gZmlsZW5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoZmlsZW5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZmlsZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHVwZGF0ZUZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgcmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlYWRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdW5yZWFkTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHVucmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIHVucmVhZE1haWw6IFt7IG1haWxJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVucmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBhcHBTZXR0aW5ncygpOiBQcm9taXNlPFVzZXJBcHBTZXR0aW5ncyB8IG51bGw+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgYXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLmFwcFNldHRpbmdzID8/IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgdXBkYXRlQXBwU2V0dGluZ3M6IFtcbiAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlLFxuICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiB1cGRhdGVBcHBTZXR0aW5ncztcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVkTWFpbHMoKTogUHJvbWlzZTxSZWNlaXZlZE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IGdxbE1haWxRdWVyeVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IHVzZXI/LnJlY2VpdmVkTWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IG5ldyBBcnJheTxSZWNlaXZlZE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHJlY2VpdmVkTWFpbHMucHVzaChtYWlsIGFzIFJlY2VpdmVkTWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVkTWFpbHM7XG4gIH1cblxuICBhc3luYyBzZW50TWFpbHMoKTogUHJvbWlzZTxTZW50TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VudE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5zZW50TWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudE1haWxzO1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPERyYWZ0TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRNYWlsczogZ3FsTWFpbFF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IG1haWxzID0gdXNlcj8uZHJhZnRNYWlscyA/PyBbXTtcblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBkcmFmdE1haWxzID0gbmV3IEFycmF5PERyYWZ0TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtYWlscykge1xuICAgICAgY29uc3QgZHJhZnQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKSBhcyBEcmFmdE1haWw7XG4gICAgICBpZiAoZHJhZnQpIHtcbiAgICAgICAgZHJhZnRNYWlscy5wdXNoKGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZHJhZnRNYWlscztcbiAgfVxuXG4gIHByaXZhdGUgcGVyRm9sZGVyID0gYXN5bmMgKFxuICAgIGZvbGRlcklkOiBzdHJpbmcsXG4gICAgcHVibGljS2V5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxOYW1lS2V5SW5wdXRGb2xkZXJzIHwgbnVsbD4gPT4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcblxuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvbGRlcih7IGlkOiBmb2xkZXJJZCB9KTtcbiAgICAgIGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZvbGRlci51c2VyQXBwPy5uYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZvbGRlcklkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZm9sZGVyLnVzZXJBcHAubmFtZUtleSksXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIHBlclZGaWxlID0gYXN5bmMgKFxuICAgIHZGaWxlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICBpZiAoIXZGaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgICAgaWYgKCF2RmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHZGaWxlLmlkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgodkZpbGUudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogdkZpbGUuaGlzdG9yeS5tYXAoZiA9PiAoe1xuICAgICAgICBpZDogZi5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZi51c2VyIS5rZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KSlcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgX2VhY2hVc2VyID0gYXN5bmMgKFxuICAgIGZpbGVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10sXG4gICAgc3ViamVjdDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBpZE9yTWFpbDogc3RyaW5nXG4gICk6IFByb21pc2U8TWFpbFJlY2lwaWVudElucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB1ID0gdXNlcnNDYWNoZS5nZXQoaWRPck1haWwpO1xuICAgIGlmICghdSB8fCAhKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHUgPVxuICAgICAgICAoYXdhaXQgdGhpcy51c2VyKHtcbiAgICAgICAgICB1c2VySWQ6IGlkT3JNYWlsLFxuICAgICAgICAgIHdpdGhQdWJsaWNLZXk6IHRydWVcbiAgICAgICAgfSkpID8/IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF1KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciAke2lkT3JNYWlsfSBoYXZlIG5vIHB1YmxpYyBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0gZmlsZUluSGlzdG9yeS51c2VyPy5rZXk7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlY2lwaWVudHNGaWxlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGYuaWQsXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNpcGllbnRJZDogdS5pZCxcbiAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgc3ViamVjdDogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgdS5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogcmVjaXBpZW50c0ZpbGVzXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
3815
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOlsia3kiLCJheGlvcyIsIkJhc2VDbGllbnQiLCJ2RmlsZXNDYWNoZSIsImZvbGRlcnNDYWNoZSIsImZpbGVzQ2FjaGUiLCJ1c2Vyc0NhY2hlIiwic2VjcmV0c3RyZWFtS2V5Z2VuIiwiZW5jcnlwdFNlY3JldHN0cmVhbSIsImNvbXByZXNzIiwidW5jb21wcmVzcyIsImdxbEZvbGRlclRvRXh0ZXJuYWwiLCJncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCIsImdxbFZGaWxlVG9FeHRlcm5hbCIsImdxbFZGaWxlVG9JbnRlcm5hbCIsImludGVybmFsVkZpbGVUb1ZGaWxlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImdxbEZpbGVRdWVyeSIsImdxbEZvbGRlclF1ZXJ5IiwiZ3FsRm9sZGVyRnVsbFF1ZXJ5IiwiZ3FsTWFpbFF1ZXJ5IiwiZ3FsVkZpbGVRdWVyeSIsImdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5IiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsImRhdGEiLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsInVhU2Vzc2lvbiIsInVhS2V5cyIsInVhSnd0IiwiZW52IiwicGVyRm9sZGVyIiwiZm9sZGVySWQiLCJwdWJsaWNLZXkiLCJmb2xkZXIiLCJnZXQiLCJpZCIsInVzZXJBcHAiLCJwcml2YXRlS2V5IiwicGVyVkZpbGUiLCJ2RmlsZUlkIiwidkZpbGUiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwidXNlciIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVuZGVmaW5lZCIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJqd3QiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwiZmluZCIsInVzZXJzIiwiZmlsdGVyIiwiaW5wdXQiLCJzaGFyZUZpbGVJbkhpc3RvcnkiLCJ1cGxvYWRGaWxlIiwiZW5jcnlwdFByb2dyZXNzIiwidXBsb2FkUHJvZ3Jlc3MiLCJzaWduYWwiLCJGaWxlIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiZmlsZUJ1ZmZlciIsImNvbXByZXNzZWQiLCJlbmNyeXB0ZWRGaWxlIiwibWQ1RmlsZSIsIm1kNUVuY3J5cHRlZCIsImVuY3J5cHRlZEZpbGVLZXkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlU2l6ZUJlZm9yZSIsImZpbGVQYXJ0U2l6ZSIsInBhcnRzIiwiZmllbGRzIiwib3JkZXIiLCJ1cmwiLCJ0b3RhbCIsImN1cnJlbnQiLCJwZXJjZW50IiwibGVuZ3RoIiwidXBsb2FkUGFydEVuZGVkIiwidXBsb2FkRmlsZVBhcnRFbmQiLCJ1cGxvYWRFbmRlZCIsInVwbG9hZEZpbGVFbmQiLCJjaHVua1BhcnRzIiwiTnVtYmVyIiwiaW5kZXgiLCJjaHVuayIsInByb2dyZXNzUGFydHMiLCJvblByb2dyZXNzIiwicGFydCIsInByb2dyZXNzRXZlbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJwcnYiLCJjdXIiLCJsb2FkZWQiLCJieVBhcnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwicCIsImVudHJpZXMiLCJ2YWx1ZSIsImFwcGVuZCIsIkJsb2IiLCJwb3N0Iiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudEZvbGRlciIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZUZvbGRlciIsImRlbGV0ZWQiLCJtYWlsIiwic2hhcmVWRmlsZSIsImgiLCJzaGFyZWRWRmlsZXMiLCJ2RmlsZXMiLCJ2RmlsZXNTaGFyZWRXaXRoTWUiLCJkZWxldGVkVkZpbGVzIiwic2hhcmVkRm9sZGVycyIsImZvbGRlcnMiLCJmb2xkZXJzU2hhcmVkV2l0aE1lIiwiZGVsZXRlZEZvbGRlcnMiLCJkZWxldGVkTWFpbHMiLCJtYWlsVHlwZSIsIm1haWxzIiwibSIsInNoYXJlRm9sZGVycyIsInZGaWxlSW5wdXQiLCJzaGFyZUZvbGRlckZpbmlzaCIsInVwZGF0ZUZvbGRlciIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiRGF0ZSIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRNYWlscyIsImRyYWZ0cyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwiSlNPTiIsInN0cmluZ2lmeSIsInNlbmRlckZpbGVzIiwiZGVsZXRlRHJhZnRNYWlsIiwiZGVsZXRlVkZpbGVTaGFyaW5nIiwiZGVsZXRlRm9sZGVyU2hhcmluZyIsImR1cGxpY2F0ZVZGaWxlIiwiY3VzdG9tTmFtZSIsImRlbGV0ZUZvbGRlckNsb3VkVHJhc2giLCJpZHMiLCJkZWxldGVWRmlsZUNsb3VkVHJhc2giLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJWRmlsZSIsInJlY292ZXJGb2xkZXIiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVWRmlsZSIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJfX3R5cGVuYW1lIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwicHIiLCJidWYiLCJtZDVQYXJ0IiwiZW5jcnlwdGVkQ29udGVudCIsInNvcnQiLCJhIiwiYiIsInNyYyIsIm1kNUNvbnRlbnQiLCJ1cGRhdGVGaWxlIiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJhdXRvRGlzY29ubmVjdERlbGF5IiwiY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZSIsImNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZSIsImhpc3RvcnlNYXhGaWxlQ291bnQiLCJ1cGRhdGVBcHBTZXR0aW5ncyIsInNldHRpbmdzIiwidW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBT0EsRUFBUCxNQUFlLElBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLE9BQWxCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixrQkFBM0I7QUFDQSxTQUFTQyxXQUFULEVBQXNCQyxZQUF0QixFQUFvQ0MsVUFBcEMsRUFBZ0RDLFVBQWhELFFBQWtFLGFBQWxFO0FBRUEsU0FBU0Msa0JBQVQsRUFBNkJDLG1CQUE3QixRQUF3RCxtQkFBeEQ7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxVQUFuQixRQUFxQyxvQkFBckM7QUFDQSxTQUNFQyxtQkFERixFQUVFQyw2QkFGRixRQUdPLHFCQUhQO0FBSUEsU0FDRUMsa0JBREYsRUFFRUMsa0JBRkYsRUFHRUMsb0JBSEYsUUFJTyxvQkFKUDtBQTJCQSxTQUFTQyxpQkFBVCxRQUFrQyxtQkFBbEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLGNBQXZCO0FBRUEsU0FBU0MsZ0JBQVQsRUFBMkJDLGdCQUEzQixRQUFtRCxvQkFBbkQ7QUFFQSxTQUFTQyxRQUFULFFBQXlCLFNBQXpCO0FBQ0EsU0FBU0MsR0FBVCxRQUFvQixrQkFBcEI7QUFDQSxTQUFTQyxPQUFULEVBQWtCQyxPQUFsQixRQUFpQyxxQkFBakM7QUFDQSxTQUFTQyxNQUFULEVBQWlCQyxXQUFqQixFQUE4QkMsU0FBOUIsRUFBeUNDLGVBQXpDLFFBQWdFLGFBQWhFO0FBQ0EsU0FDRUMsWUFERixFQUVFQyxjQUZGLEVBR0VDLGtCQUhGLEVBSUVDLFlBSkYsRUFLRUMsYUFMRixFQU1FQyx1QkFORixRQU9PLG9CQVBQO0FBU0EsU0FBU0MsNkJBQVQsUUFBOEMsbUJBQTlDLEMsQ0FDQTtBQUNBOztBQVlBLElBQU1DLFdBQVc7QUFBQSxzRUFBRyxpQkFBT0Ms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QXB0RFI7QUFBQSw2RkFvdERFO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUM2QyxLQUFLbk0sTUFBTCxDQUFZLE9BQVosRUFBcUI7QUFDOURtTSxnQkFBQUEsd0JBQXdCLEVBQUU7QUFEb0MsZUFBckIsQ0FEN0M7O0FBQUE7QUFBQTtBQUNVQSxjQUFBQSx3QkFEVix3QkFDVUEsd0JBRFY7QUFBQSxpREFLU0Esd0JBTFQsV0FLU0Esd0JBTFQsR0FLcUMsQ0FMckM7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0FwdERGOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxTQWdCRSxlQUF3QjtBQUN0QixhQUFPLGdEQUFXck8sU0FBbEI7QUFDRDtBQWxCSDs7QUFBQTtBQUFBLEVBQW1DaEQsVUFBbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1haWxUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IHZGaWxlc0NhY2hlLCBmb2xkZXJzQ2FjaGUsIGZpbGVzQ2FjaGUsIHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiwgZW5jcnlwdFNlY3JldHN0cmVhbSB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQge1xuICBncWxGb2xkZXJUb0V4dGVybmFsLFxuICBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbFxufSBmcm9tIFwiLi9jb252ZXJ0L2ZvbGRlci5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsVkZpbGVUb0V4dGVybmFsLFxuICBncWxWRmlsZVRvSW50ZXJuYWwsXG4gIGludGVybmFsVkZpbGVUb1ZGaWxlXG59IGZyb20gXCIuL2NvbnZlcnQvdkZpbGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgRm9sZGVyLFxuICBWRmlsZVdpdGhGb2xkZXIsXG4gIEZvbGRlckZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGUgYXMgU2VjcmVjeUZpbGUsXG4gIFdhaXRpbmdSZWNlaXZlZE1haWwsXG4gIERyYWZ0TWFpbCxcbiAgTWFpbFJlY2lwaWVudElucHV0LFxuICBWRmlsZSxcbiAgU2hhcmVGb2xkZXJzSW5wdXQsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTmFtZUtleUlucHV0Rm9sZGVycyxcbiAgTWFpbCxcbiAgU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIEZpbGVDb250ZW50UGFydFxufSBmcm9tIFwiLi90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ3FsRmlsZVRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L2ZpbGUuanNcIjtcbmltcG9ydCB7IHNvZGl1bSB9IGZyb20gXCIuLi9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5UGFpciB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGRlY3J5cHRDcnlwdG9Cb3gsIGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzaG9ydGlkXCI7XG5pbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL21kNS5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdCwgZGVjcnlwdCB9IGZyb20gXCIuLi93b3JrZXIvc29kaXVtLmpzXCI7XG5pbXBvcnQgeyBjaHVua3MsIGNvbmNhdGVuYXRlLCBlbnVtZXJhdGUsIHByb21pc2VBbGxMaW1pdCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsRmlsZVF1ZXJ5LFxuICBncWxGb2xkZXJRdWVyeSxcbiAgZ3FsRm9sZGVyRnVsbFF1ZXJ5LFxuICBncWxNYWlsUXVlcnksXG4gIGdxbFZGaWxlUXVlcnksXG4gIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG59IGZyb20gXCIuL3R5cGVzL3F1ZXJpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogUHJvZ3Jlc3MpID0+IFByb21pc2U8dm9pZD47XG5cbmNvbnN0IGVuY3J5cHROYW1lID0gYXN5bmMgKG5hbWU6IHN0cmluZywgbmFtZUtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBlbmNyeXB0U2VjcmV0c3RyZWFtKFxuICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICBzb2RpdW0uZnJvbV9zdHJpbmcobmFtZSlcbiAgKTtcbiAgY29uc3QgbmFtZUVuY3J5cHRlZCA9IHNvZGl1bS50b19oZXgoZGF0YSk7XG4gIHJldHVybiBuYW1lRW5jcnlwdGVkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbGllbnQgZXh0ZW5kcyBCYXNlQ2xpZW50IHtcbiAgand0OiBzdHJpbmc7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuI2tleXMgPSB1YUtleXM7XG4gIH1cblxuICBnZXQgcHVibGljS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2tleXMucHVibGljS2V5O1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIHZGaWxlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIHZGaWxlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB7IGFkZEZpbGVUb0hpc3RvcnkgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgYWRkRmlsZVRvSGlzdG9yeTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSBhd2FpdCBncWxWRmlsZVRvSW50ZXJuYWwoYWRkRmlsZVRvSGlzdG9yeSwgdGhpcy4ja2V5cyk7XG4gICAgY29uc3QgZmlsZSA9IHZGaWxlLmhpc3RvcnkuZmluZChmID0+IGYuaWQgPT09IGZpbGVJZCk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHVzZXJzID0gdkZpbGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLnVzZXIhLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW3sgaW5wdXQsIHZGaWxlSWQgfSwgdHJ1ZV1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxWRmlsZVRvVkZpbGUodkZpbGUpO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGZpbGVCdWZmZXIgPVxuICAgICAgZmlsZSBpbnN0YW5jZW9mIEZpbGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpIDogZmlsZTtcbiAgICBjb25zdCBjb21wcmVzc2VkID0gY29tcHJlc3MoZmlsZUJ1ZmZlcik7XG5cbiAgICBjb25zdCB7XG4gICAgICBkYXRhOiBlbmNyeXB0ZWRGaWxlLFxuICAgICAgbWQ1OiBtZDVGaWxlLFxuICAgICAgbWQ1RW5jcnlwdGVkXG4gICAgfSA9IGF3YWl0IGVuY3J5cHQoZmlsZUtleSwgY29tcHJlc3NlZCwgZW5jcnlwdFByb2dyZXNzLCBzaWduYWwpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkRmlsZUtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBmaWxlS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuXG4gICAgY29uc3QgeyB1cGxvYWRGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICBmaWxlUGFydFNpemU6IHRydWUsXG4gICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdXBsb2FkRmlsZS5maWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVQYXJ0RW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBsb2FkRW5kZWQgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gICAgICBjb25zdCB7IHVwbG9hZEZpbGVFbmQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQgPz8gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2h1bmtQYXJ0cyA9IG5ldyBBcnJheTx7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgZGF0YTogVWludDhBcnJheTtcbiAgICAgIG1kNTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY2h1bmtdIG9mIGVudW1lcmF0ZShcbiAgICAgIGNodW5rcyhlbmNyeXB0ZWRGaWxlLCBOdW1iZXIodXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHByb2dyZXNzRXZlbnQgPT5cbiAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICAvLyBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIC8vICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRocm93IGU7XG4gICAgICAvLyB9XG4gICAgfTtcblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHVwbG9hZEVuZGVkKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZvbGRlcklkPzogc3RyaW5nO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXI+IHtcbiAgICBjb25zdCBmaWxlSWQgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoe1xuICAgICAgZmlsZSxcbiAgICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICAgIHVwbG9hZFByb2dyZXNzLFxuICAgICAgc2lnbmFsXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHRocm93IGBDYW4ndCB1cGxvYWQgZmlsZWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhdmVJbkNsb3VkKHsgZmlsZUlkLCBuYW1lLCBmb2xkZXJJZCB9KTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdkZpbGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgZm9sZGVyc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPEZvbGRlckZ1bGw+IHtcbiAgICBjb25zdCBrZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChrZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAga2V5LFxuICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICApO1xuICAgIGNvbnN0IHsgY3JlYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgZm9sZGVyYCk7XG4gICAgfVxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWxGb2xkZXJGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Rm9sZGVyPy51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlRm9sZGVyKHtcbiAgICAgICAgICAgIGZvbGRlcklkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXI7XG4gIH1cblxuICBhc3luYyBmb2xkZXIoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8Rm9sZGVyRnVsbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXI6IFt7IGRlbGV0ZWQsIGlkIH0sIGdxbEZvbGRlckZ1bGxRdWVyeV1cbiAgICB9KTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbChmb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZWNyZWN5RmlsZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsRmlsZVF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGdxbEZpbGVUb0V4dGVybmFsKGZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdkZpbGUoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8VkZpbGVXaXRoRm9sZGVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdkZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGdxbFZGaWxlV2l0aEZvbGRlclF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpIGFzIFByb21pc2U8VkZpbGVXaXRoRm9sZGVyPjtcbiAgfVxuXG4gIGFzeW5jIG1haWwoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWFpbCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsTWFpbFF1ZXJ5XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtYWlsLCB0aGlzLiNrZXlzKTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlVkZpbGUoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgdkZpbGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgaWYgKCF2RmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy52RmlsZSh7IGlkOiB2RmlsZUlkIH0pO1xuICAgICAgdkZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG5cbiAgICAgIGlmICghdkZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGhpc3RvcnkgPSBuZXcgQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGtleTogc3RyaW5nO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGggb2YgdkZpbGUuaGlzdG9yeSkge1xuICAgICAgaWYgKCFoLnVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICBpZDogaC5pZCxcbiAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoaC51c2VyLmtleSksXG4gICAgICAgICAgICB1c2VyLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZVZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlVkZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICBuYW1lS2V5LFxuICAgICAgICAgIGhpc3RvcnlcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlVkZpbGUgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBzaGFyZWRWRmlsZXMoKTogUHJvbWlzZTxWRmlsZVdpdGhGb2xkZXJbXT4ge1xuICAgIGNvbnN0IHsgc2hhcmVkVkZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHNoYXJlZFZGaWxlczogZ3FsVkZpbGVXaXRoRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHZGaWxlcyA9IG5ldyBBcnJheTxWRmlsZVdpdGhGb2xkZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHZGaWxlIG9mIHNoYXJlZFZGaWxlcykge1xuICAgICAgdkZpbGVzLnB1c2goXG4gICAgICAgIChhd2FpdCBncWxWRmlsZVRvRXh0ZXJuYWwodkZpbGUsIHRoaXMuI2tleXMpKSBhcyBWRmlsZVdpdGhGb2xkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlcztcbiAgfVxuXG4gIGFzeW5jIHZGaWxlc1NoYXJlZFdpdGhNZSgpOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyB2RmlsZXNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdkZpbGVzU2hhcmVkV2l0aE1lOiBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlV2l0aEZvbGRlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdkZpbGUgb2YgdkZpbGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICB2RmlsZXMucHVzaChcbiAgICAgICAgKGF3YWl0IGdxbFZGaWxlVG9FeHRlcm5hbCh2RmlsZSwgdGhpcy4ja2V5cykpIGFzIFZGaWxlV2l0aEZvbGRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdkZpbGVzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZFZGaWxlcygpOiBQcm9taXNlPFZGaWxlW10+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRWRmlsZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZFZGaWxlczogZ3FsVkZpbGVRdWVyeVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGVzID0gbmV3IEFycmF5PFZGaWxlPigpO1xuXG4gICAgZm9yIChjb25zdCB2RmlsZSBvZiBkZWxldGVkVkZpbGVzKSB7XG4gICAgICB2RmlsZXMucHVzaCgoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKHZGaWxlLCB0aGlzLiNrZXlzKSkgYXMgVkZpbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2RmlsZXM7XG4gIH1cblxuICBhc3luYyBzaGFyZWRGb2xkZXJzKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IHNoYXJlZEZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgc2hhcmVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkRm9sZGVycykge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBmb2xkZXJzU2hhcmVkV2l0aE1lKCk6IFByb21pc2U8Rm9sZGVyW10+IHtcbiAgICBjb25zdCB7IGZvbGRlcnNTaGFyZWRXaXRoTWUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZm9sZGVyc1NoYXJlZFdpdGhNZTogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZm9sZGVyc1NoYXJlZFdpdGhNZSkge1xuICAgICAgZm9sZGVycy5wdXNoKGF3YWl0IGdxbEZvbGRlclRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbGRlcnM7XG4gIH1cblxuICBhc3luYyBkZWxldGVkRm9sZGVycygpOiBQcm9taXNlPEZvbGRlcltdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkRm9sZGVycyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkZWxldGVkRm9sZGVyczogZ3FsRm9sZGVyUXVlcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvbGRlcnMgPSBuZXcgQXJyYXk8Rm9sZGVyPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2YgZGVsZXRlZEZvbGRlcnMpIHtcbiAgICAgIGZvbGRlcnMucHVzaChhd2FpdCBncWxGb2xkZXJUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXJzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE1haWxzKHsgbWFpbFR5cGUgfTogeyBtYWlsVHlwZTogTWFpbFR5cGUgfSk6IFByb21pc2U8TWFpbFtdPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTWFpbHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE1haWxzOiBbeyBtYWlsVHlwZSB9LCBncWxNYWlsUXVlcnldXG4gICAgfSk7XG5cbiAgICBjb25zdCBtYWlscyA9IG5ldyBBcnJheTxNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIGRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFpbHM7XG4gIH1cblxuICBhc3luYyBzaGFyZUZvbGRlcih7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgZm9sZGVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByaWdodHM6IFJpZ2h0cztcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXIoeyB1c2VySWQsIHdpdGhQdWJsaWNLZXk6IHRydWUgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBzaGFyZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZUZvbGRlcjogW1xuICAgICAgICB7IGZvbGRlcklkLCB1c2VySWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlczogdHJ1ZSxcbiAgICAgICAgICBmb2xkZXJzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNoYXJlRm9sZGVyczogU2hhcmVGb2xkZXJzSW5wdXQgPSB7XG4gICAgICB2RmlsZXM6IFtdLFxuICAgICAgZm9sZGVyczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci5mb2xkZXJzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJGb2xkZXIoaWQsIHVzZXIucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlRm9sZGVycy5mb2xkZXJzLnB1c2gobmFtZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZUZvbGRlci52RmlsZXMpIHtcbiAgICAgIGNvbnN0IHZGaWxlSW5wdXQgPSBhd2FpdCB0aGlzLnBlclZGaWxlKGlkLCB1c2VyLnB1YmxpY0tleSk7XG4gICAgICBpZiAodkZpbGVJbnB1dCkge1xuICAgICAgICBzaGFyZUZvbGRlcnMudkZpbGVzLnB1c2godkZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZUZvbGRlckZpbmlzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZUZvbGRlckZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZUZvbGRlcnNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNoYXJlRm9sZGVyRmluaXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRm9sZGVyKHtcbiAgICBmb2xkZXJJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyRnVsbD4ge1xuICAgIGxldCBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICBpZiAoIWZvbGRlcikge1xuICAgICAgYXdhaXQgdGhpcy5mb2xkZXIoeyBpZDogZm9sZGVySWQgfSk7XG4gICAgICBmb2xkZXIgPSBmb2xkZXJzQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGZvbGRlciAke2ZvbGRlcklkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmFtZSA9IG5hbWVcbiAgICAgID8gZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXlcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBmb2xkZXIudXNlckFwcC5uYW1lS2V5KVxuICAgICAgICA6IG5hbWVcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICBncWxGb2xkZXJGdWxsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRm9sZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZm9sZGVyXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBncWxGb2xkZXJUb0V4dGVybmFsRm9sZGVyRnVsbCh1cGRhdGVGb2xkZXIsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyhcbiAgICBub3RpZmljYXRpb25zOiBQYXJ0aWFsPFVzZXJBcHBOb3RpZmljYXRpb25zPlxuICApOiBQcm9taXNlPFVzZXJBcHBOb3RpZmljYXRpb25zIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXBkYXRlQXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBOb3RpZmljYXRpb25zOiBbXG4gICAgICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgICAgbWFpbDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlQXBwTm90aWZpY2F0aW9ucyxcbiAgICAgIGRpc2FibGVBbGxVbnRpbDogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWxcbiAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVBcHBOb3RpZmljYXRpb25zLmRpc2FibGVBbGxVbnRpbClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxVc2VyQXBwTm90aWZpY2F0aW9ucyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGFwcE5vdGlmaWNhdGlvbnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgYXBwTm90aWZpY2F0aW9uczoge1xuICAgICAgICBlbmFibGVBbGw6IHRydWUsXG4gICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgIGNsb3VkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQWxsVW50aWw6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcE5vdGlmaWNhdGlvbnMsXG4gICAgICBkaXNhYmxlQWxsVW50aWw6IGFwcE5vdGlmaWNhdGlvbnMuZGlzYWJsZUFsbFVudGlsXG4gICAgICAgID8gbmV3IERhdGUoYXBwTm90aWZpY2F0aW9ucy5kaXNhYmxlQWxsVW50aWwpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVNYWlsKFxuICAgIGRhdGE6IE5ld01haWwsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbWFpbCA9IGF3YWl0IHRoaXMuY3JlYXRlRHJhZnRNYWlsKGRhdGEpO1xuICAgIGlmICghbWFpbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZW5kRHJhZnRNYWlsKG1haWwubWFpbEludGVncml0eUlkLCBjdXN0b21NZXNzYWdlKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8V2FpdGluZ1JlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0aW5nUmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBzZW5kZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWNpcGllbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgd2FpdGluZyByZWNlaXZlZCBtYWlsc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlci53YWl0aW5nUmVjZWl2ZWRNYWlscy5tYXAobSA9PiAoe1xuICAgICAgaWQ6IGdlbmVyYXRlKCksXG4gICAgICAuLi5tLFxuICAgICAgZGF0ZTogbmV3IERhdGUobS5kYXRlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgeyBib2R5LCBzdWJqZWN0LCBmaWxlcywgcmVjaXBpZW50c0lkcywgcmVwbHlUbyB9OiBQYXJ0aWFsPE5ld01haWw+XG4gICk6IFByb21pc2U8RHJhZnRNYWlsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZmlsZS51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLnVzZXIua2V5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHVwZGF0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWQsXG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzdWJqZWN0OiBzdWJqZWN0XG4gICAgICAgICAgICA/IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIGdxbE1haWxRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURyYWZ0TWFpbChkcmFmdElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZURyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRyYWZ0SWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVEcmFmdE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZVNoYXJpbmcoe1xuICAgIHZGaWxlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVZGaWxlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVWRmlsZVNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZGaWxlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGVTaGFyaW5nO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyU2hhcmluZyh7XG4gICAgZm9sZGVySWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlclNoYXJpbmc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcklkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlclNoYXJpbmc7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVWRmlsZSh7XG4gICAgdkZpbGVJZCxcbiAgICBmb2xkZXJJZCxcbiAgICBjdXN0b21OYW1lXG4gIH06IHtcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZpbGUgPSB2RmlsZXNDYWNoZS5nZXQodkZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLnZGaWxlKHsgaWQ6IHZGaWxlSWQgfSk7XG4gICAgICBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAoJHt2RmlsZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1c3RvbU5hbWUgPSBjdXN0b21OYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGN1c3RvbU5hbWUsIGZpbGUudXNlckFwcC5uYW1lS2V5KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyBkdXBsaWNhdGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkdXBsaWNhdGVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdkZpbGVJZCxcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBjdXN0b21OYW1lXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkdXBsaWNhdGVWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXJDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlbGV0ZUZvbGRlckNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVWRmlsZUNsb3VkVHJhc2goe1xuICAgIGlkc1xuICB9OiB7XG4gICAgaWRzOiBBcnJheTxzdHJpbmc+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlVkZpbGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVWRmlsZUNsb3VkVHJhc2ggPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsVHJhc2goeyBpZHMgfTogeyBpZHM6IEFycmF5PHN0cmluZz4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU1haWxUcmFzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlTWFpbFRyYXNoO1xuICB9XG5cbiAgYXN5bmMgZW1wdHlNYWlsVHJhc2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBlbXB0eU1haWxUcmFzaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5TWFpbFRyYXNoID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZW1wdHlDbG91ZFRyYXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZW1wdHlDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWRmlsZSh7IHZGaWxlSWQgfTogeyB2RmlsZUlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlclZGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJWRmlsZTogW3sgdkZpbGVJZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJWRmlsZTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcmVjb3ZlckZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWNvdmVyRm9sZGVyOiBbeyBpZCB9LCB0cnVlXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlY292ZXJGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWNvdmVyTWFpbCh7IG1haWxJZCB9OiB7IG1haWxJZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHJlY292ZXJNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWNvdmVyTWFpbDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICB2RmlsZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICB2RmlsZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIHZGaWxlSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVGaWxlO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVkZpbGUoeyBmaWxlSWQgfTogeyBmaWxlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVWRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVWRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVsZXRlVkZpbGU7XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuICAgIHJldHVybiBkZWxldGVNYWlsO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFZGaWxlV2l0aEZvbGRlcj4ge1xuICAgIGlmIChmb2xkZXJJZCAmJiAhZm9sZGVyc0NhY2hlLmhhcyhmb2xkZXJJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgaWYgKCFmb2xkZXJzQ2FjaGUuaGFzKGZvbGRlcklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJHtmb2xkZXJJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmaWxlLnVzZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBlcnJvciAyXCIpO1xuICAgICAgfVxuICAgICAga2V5ID0gZmlsZS51c2VyLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yIDNcIik7XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICBncWxWRmlsZVdpdGhGb2xkZXJRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgdkZpbGUgPSAoYXdhaXQgZ3FsVkZpbGVUb0V4dGVybmFsKFxuICAgICAgc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSkgYXMgVkZpbGVXaXRoRm9sZGVyO1xuXG4gICAgY29uc3QgbWUgPSB2RmlsZS5mb2xkZXIudXNlcnMuZmluZChcbiAgICAgIChbdV0pID0+IHUucHVibGljS2V5ID09PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICk7XG5cbiAgICBpZiAobWUgJiYgW1wiYWRtaW5cIiwgXCJ3cml0ZVwiXS5pbmNsdWRlcyhtZVsxXSkpIHtcbiAgICAgIGNvbnN0IG90aGVycyA9IHZGaWxlLmZvbGRlci51c2Vycy5maWx0ZXIoXG4gICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVWRmlsZSh7XG4gICAgICAgICAgICB2RmlsZUlkOiB2RmlsZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZGaWxlO1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZHJhZnRNYWlsSWQ6IGRyYWZ0Lm1haWxJbnRlZ3JpdHlJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kRHJhZnRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZFdhaXRpbmdFbWFpbHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gVE9ETyBvcHRpIHRoaXNcbiAgICBjb25zdCBtYWlscyA9IGF3YWl0IHRoaXMuc2VudE1haWxzKCk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBtYWlscy5maWx0ZXIobSA9PiBtLnRlbXBvcmFyeVJlY2lwaWVudHMubGVuZ3RoID4gMCk7XG5cbiAgICBmb3IgKGNvbnN0IG1haWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIG1haWwudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgICBtYWlsLmZpbGVzLFxuICAgICAgICAgIG1haWwuc3ViamVjdCxcbiAgICAgICAgICBtYWlsLmJvZHksXG4gICAgICAgICAgZW1haWxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxEcmFmdE1haWwgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWZpbGUudXNlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgZmlsZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGZpbGUudXNlci5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50czogcmVjaXBpZW50c0lkcyxcbiAgICAgICAgICByZXBseVRvLFxuICAgICAgICAgIGJvZHk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoc3ViamVjdCksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHNlbmRlckZpbGVzLFxuICAgICAgICAgIGhhc2gsXG4gICAgICAgICAgaGFzaEtleVxuICAgICAgICB9LFxuICAgICAgICBncWxNYWlsUXVlcnlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKSBhcyBEcmFmdE1haWw7XG4gIH1cblxuICBhc3luYyBmaWxlQ29udGVudCh7XG4gICAgZmlsZUlkLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBwcm9ncmVzc0RlY3J5cHQsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/OiAocHJvZ3Jlc3M6IERvd25sb2FkUHJvZ3Jlc3MpID0+IHZvaWQ7XG4gICAgcHJvZ3Jlc3NEZWNyeXB0PzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGVJZH0gZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgRG93bmxvYWRQcm9ncmVzcz4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKFxuICAgICAgcGFydDogbnVtYmVyLFxuICAgICAgcHJvZ3Jlc3NFdmVudDogRG93bmxvYWRQcm9ncmVzc1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcnJlZEJ5dGVzID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLnRyYW5zZmVycmVkQnl0ZXMsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKGZpbGVDb250ZW50LnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFydHMgPSBuZXcgQXJyYXk8eyBkYXRhOiBVaW50OEFycmF5OyBvcmRlcjogbnVtYmVyIH0+KCk7XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQga3lcbiAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXJyYXlCdWZmZXIoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1kNVBhcnQgPSBhd2FpdCBtZDUoYnVmKTtcbiAgICAgIGlmIChtZDVQYXJ0ICE9PSBwYXJ0Lm1kNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWQ1IGZvciBwYXJ0ICR7cGFydC5vcmRlcn0gb2YgZmlsZSAke2ZpbGVJZH1gKTtcbiAgICAgIH1cbiAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICBkYXRhOiBidWYsXG4gICAgICAgIG9yZGVyOiBwYXJ0Lm9yZGVyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgMyxcbiAgICAgIGZpbGVDb250ZW50LnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudCA9IGNvbmNhdGVuYXRlKFxuICAgICAgLi4ucGFydHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChwID0+IHAuZGF0YSlcbiAgICApO1xuXG4gICAgLy8gY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKGVuY3J5cHRlZENvbnRlbnQpKSk7XG4gICAgY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgbWQ1KGVuY3J5cHRlZENvbnRlbnQpO1xuXG4gICAgaWYgKG1kNUVuY3J5cHRlZCAhPT0gZmlsZUNvbnRlbnQubWQ1RW5jcnlwdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY3J5cHRlZCBjb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlQ29udGVudC5rZXkpLFxuICAgICAgZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiXG4gICAgICAgID8gZmlsZUNvbnRlbnQuc2VuZGVyUHVibGljS2V5XG4gICAgICAgIDogZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgPyBmaWxlQ29udGVudC5wdWJsaWNLZXlcbiAgICAgICAgOiB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0LCBzaWduYWwpO1xuXG4gICAgLy8gY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihzcmMpKSk7XG4gICAgY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IG1kNShzcmMpO1xuXG4gICAgaWYgKG1kNUNvbnRlbnQgIT09IGZpbGVDb250ZW50Lm1kNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuY29tcHJlc3Moc3JjKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBmaWxlbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCBmaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBmaWxlICR7ZmlsZUlkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGZpbGVuYW1lXG4gICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKGZpbGVuYW1lLCBmaWxlLnVzZXJBcHAubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgdXBkYXRlRmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVGaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAgZ3FsVkZpbGVRdWVyeVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1cGRhdGUgZmlsZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3FsVkZpbGVUb0V4dGVybmFsKHVwZGF0ZUZpbGUsIHRoaXMuI2tleXMpO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1haWwoeyBtYWlsSWQgfTogeyBtYWlsSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWFkTWFpbDogW3sgbWFpbElkIH0sIHRydWVdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZE1haWwgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHsgbWFpbElkIH06IHsgbWFpbElkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdW5yZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1bnJlYWRNYWlsOiBbeyBtYWlsSWQgfSwgdHJ1ZV1cbiAgICB9KTtcblxuICAgIHJldHVybiB1bnJlYWRNYWlsID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYXBwU2V0dGluZ3MoKTogUHJvbWlzZTxVc2VyQXBwU2V0dGluZ3MgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgYXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyLmFwcFNldHRpbmdzID8/IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBTZXR0aW5ncyhcbiAgICBzZXR0aW5nczogUGFydGlhbDxVc2VyQXBwU2V0dGluZ3M+XG4gICk6IFByb21pc2U8VXNlckFwcFNldHRpbmdzPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9EaXNjb25uZWN0RGVsYXk6IHRydWUsXG4gICAgICAgICAgY2xvdWRGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGhpc3RvcnlNYXhGaWxlQ291bnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFJlY2VpdmVkTWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICByZWNlaXZlZE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5yZWNlaXZlZE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IHJlY2VpdmVkTWFpbHMgPSBuZXcgQXJyYXk8UmVjZWl2ZWRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICByZWNlaXZlZE1haWxzLnB1c2gobWFpbCBhcyBSZWNlaXZlZE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWNlaXZlZE1haWxzO1xuICB9XG5cbiAgYXN5bmMgc2VudE1haWxzKCk6IFByb21pc2U8U2VudE1haWxbXT4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2VudE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5zZW50TWFpbHMgPz8gW107XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VudE1haWxzO1xuICB9XG5cbiAgYXN5bmMgZHJhZnRNYWlscygpOiBQcm9taXNlPERyYWZ0TWFpbFtdPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBkcmFmdE1haWxzOiBncWxNYWlsUXVlcnlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWFpbHMgPSB1c2VyPy5kcmFmdE1haWxzID8/IFtdO1xuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIG1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkcmFmdE1haWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJGb2xkZXIgPSBhc3luYyAoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dEZvbGRlcnMgfCBudWxsPiA9PiB7XG4gICAgbGV0IGZvbGRlciA9IGZvbGRlcnNDYWNoZS5nZXQoZm9sZGVySWQpO1xuXG4gICAgaWYgKCFmb2xkZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9sZGVyKHsgaWQ6IGZvbGRlcklkIH0pO1xuICAgICAgZm9sZGVyID0gZm9sZGVyc0NhY2hlLmdldChmb2xkZXJJZCk7XG5cbiAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9sZGVyLnVzZXJBcHA/Lm5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmb2xkZXIudXNlckFwcC5uYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgcGVyVkZpbGUgPSBhc3luYyAoXG4gICAgdkZpbGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCB2RmlsZSA9IHZGaWxlc0NhY2hlLmdldCh2RmlsZUlkKTtcblxuICAgIGlmICghdkZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudkZpbGUoeyBpZDogdkZpbGVJZCB9KTtcbiAgICAgIHZGaWxlID0gdkZpbGVzQ2FjaGUuZ2V0KHZGaWxlSWQpO1xuXG4gICAgICBpZiAoIXZGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdkZpbGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleCh2RmlsZS51c2VyQXBwLm5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOiB2RmlsZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLnVzZXIhLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgYXN5bmMgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50ID8/IDA7XG4gIH1cblxuICBwcml2YXRlIF9lYWNoVXNlciA9IGFzeW5jIChcbiAgICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIHN1YmplY3Q6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaWRPck1haWw6IHN0cmluZ1xuICApOiBQcm9taXNlPE1haWxSZWNpcGllbnRJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdSA9IHVzZXJzQ2FjaGUuZ2V0KGlkT3JNYWlsKTtcbiAgICBpZiAoIXUgfHwgIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB1ID1cbiAgICAgICAgKGF3YWl0IHRoaXMudXNlcih7XG4gICAgICAgICAgdXNlcklkOiBpZE9yTWFpbCxcbiAgICAgICAgICB3aXRoUHVibGljS2V5OiB0cnVlXG4gICAgICAgIH0pKSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghdSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShcInB1YmxpY0tleVwiIGluIHUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZXIgJHtpZE9yTWFpbH0gaGF2ZSBubyBwdWJsaWMga2V5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBpZW50c0ZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBmaWxlSW5IaXN0b3J5ID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgIGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlSW5IaXN0b3J5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGZpbGVJbkhpc3RvcnkudXNlcj8ua2V5O1xuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWNpcGllbnRzRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50SWQ6IHUuaWQsXG4gICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6IHJlY2lwaWVudHNGaWxlc1xuICAgIH07XG4gIH07XG59XG4iXX0=