tnx-shared 5.1.26 → 5.1.30

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.
Files changed (120) hide show
  1. package/bundles/tnx-shared.umd.js +1999 -249
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-list-base.d.ts +2 -0
  6. package/classes/base/data-list-base.d.ts.map +1 -1
  7. package/classes/form-schema.d.ts +3 -0
  8. package/classes/form-schema.d.ts.map +1 -1
  9. package/components/chat/chat-box/chat-box.component.d.ts +102 -0
  10. package/components/chat/chat-box/chat-box.component.d.ts.map +1 -0
  11. package/components/chat/chat-box/chat-box.component.ngfactory.d.ts.map +1 -0
  12. package/components/chat/chat-box/chat-box.component.scss.shim.ngstyle.d.ts.map +1 -0
  13. package/components/chat/chat-send-message-box/chat-send-message-box.component.d.ts +37 -0
  14. package/components/chat/chat-send-message-box/chat-send-message-box.component.d.ts.map +1 -0
  15. package/components/chat/chat-send-message-box/chat-send-message-box.component.ngfactory.d.ts.map +1 -0
  16. package/components/chat/chat-send-message-box/chat-send-message-box.component.scss.shim.ngstyle.d.ts.map +1 -0
  17. package/components/chat/common-style.scss.shim.ngstyle.d.ts.map +1 -0
  18. package/components/chat/models/enums.d.ts +11 -0
  19. package/components/chat/models/enums.d.ts.map +1 -0
  20. package/components/chat/models/models.d.ts +10 -0
  21. package/components/chat/models/models.d.ts.map +1 -0
  22. package/components/chat/services/chat.service.d.ts +34 -0
  23. package/components/chat/services/chat.service.d.ts.map +1 -0
  24. package/components/chat/services/chat.service.ngfactory.d.ts.map +1 -0
  25. package/components/chat/services/content.service.d.ts +20 -0
  26. package/components/chat/services/content.service.d.ts.map +1 -0
  27. package/components/chat/services/content.service.ngfactory.d.ts.map +1 -0
  28. package/components/chat/services/message-board.service.d.ts +15 -0
  29. package/components/chat/services/message-board.service.d.ts.map +1 -0
  30. package/components/chat/services/message-board.service.ngfactory.d.ts.map +1 -0
  31. package/components/chat/services/status.service.d.ts +14 -0
  32. package/components/chat/services/status.service.d.ts.map +1 -0
  33. package/components/chat/services/status.service.ngfactory.d.ts.map +1 -0
  34. package/components/crud/crud-list/crud-list.component.d.ts +6 -0
  35. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  36. package/components/file-explorer/file-manager/file-manager.component.d.ts +6 -0
  37. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  38. package/components/file-explorer/models/service-request-model.d.ts +1 -0
  39. package/components/file-explorer/models/service-request-model.d.ts.map +1 -1
  40. package/components/statemachines/models/enums.d.ts +4 -0
  41. package/components/statemachines/models/enums.d.ts.map +1 -1
  42. package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts +1 -1
  43. package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts.map +1 -1
  44. package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts +1 -0
  45. package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts.map +1 -1
  46. package/components/tn-dialog/tn-dialog.component.d.ts +1 -0
  47. package/components/tn-dialog/tn-dialog.component.d.ts.map +1 -1
  48. package/components/user-picker/user-picker-dialog/user-picker-dialog.component.d.ts +23 -0
  49. package/components/user-picker/user-picker-dialog/user-picker-dialog.component.d.ts.map +1 -0
  50. package/components/user-picker/user-picker-dialog/user-picker-dialog.component.ngfactory.d.ts.map +1 -0
  51. package/components/user-picker/user-picker-dialog/user-picker-dialog.component.scss.shim.ngstyle.d.ts.map +1 -0
  52. package/components/workflow/permission-sharing/permission-sharing.component.d.ts +21 -0
  53. package/components/workflow/permission-sharing/permission-sharing.component.d.ts.map +1 -0
  54. package/components/workflow/permission-sharing/permission-sharing.component.ngfactory.d.ts.map +1 -0
  55. package/components/workflow/permission-sharing/permission-sharing.component.scss.shim.ngstyle.d.ts.map +1 -0
  56. package/components/workflow/services/workflow-permission.service.d.ts +10 -0
  57. package/components/workflow/services/workflow-permission.service.d.ts.map +1 -0
  58. package/components/workflow/services/workflow-permission.service.ngfactory.d.ts.map +1 -0
  59. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  60. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +6 -2
  61. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  62. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +9 -1
  63. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  64. package/esm2015/classes/base/data-form-base.js +3 -3
  65. package/esm2015/classes/base/data-list-base.js +41 -6
  66. package/esm2015/classes/form-schema.js +1 -1
  67. package/esm2015/components/chat/chat-box/chat-box.component.js +626 -0
  68. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +245 -0
  69. package/esm2015/components/chat/models/enums.js +13 -0
  70. package/esm2015/components/chat/models/models.js +12 -0
  71. package/esm2015/components/chat/services/chat.service.js +113 -0
  72. package/esm2015/components/chat/services/content.service.js +57 -0
  73. package/esm2015/components/chat/services/message-board.service.js +40 -0
  74. package/esm2015/components/chat/services/status.service.js +36 -0
  75. package/esm2015/components/crud/crud-list/crud-list.component.js +55 -4
  76. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +69 -16
  77. package/esm2015/components/file-explorer/file-viewer/file-viewer.component.js +2 -2
  78. package/esm2015/components/file-explorer/models/service-request-model.js +5 -2
  79. package/esm2015/components/statemachines/models/enums.js +6 -1
  80. package/esm2015/components/tn-custom-scrollbar/tn-custom-scrollbar.component.js +26 -11
  81. package/esm2015/components/tn-dialog/tn-dialog.component.js +4 -2
  82. package/esm2015/components/user-picker/user-picker-dialog/user-picker-dialog.component.js +52 -0
  83. package/esm2015/components/workflow/permission-sharing/permission-sharing.component.js +123 -0
  84. package/esm2015/components/workflow/services/workflow-permission.service.js +27 -0
  85. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +4 -1
  86. package/esm2015/congviec/cauhinh-workflow/cauhinh-workflow-detail/cauhinh-workflow-detail.component.js +2 -2
  87. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +38 -14
  88. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +25 -4
  89. package/esm2015/congviec/congviec/congviec.component.js +3 -3
  90. package/esm2015/models/basic-user-info.js +6 -1
  91. package/esm2015/public-api.js +4 -1
  92. package/esm2015/services/base.service.js +33 -9
  93. package/esm2015/services/common.service.js +3 -18
  94. package/esm2015/services/crud.service.js +56 -41
  95. package/esm2015/services/notifier.service.js +2 -2
  96. package/esm2015/services/user.service.js +37 -23
  97. package/esm2015/tnx-shared.js +49 -43
  98. package/esm2015/tnx-shared.module.js +10 -2
  99. package/fesm2015/tnx-shared.js +1705 -202
  100. package/fesm2015/tnx-shared.js.map +1 -1
  101. package/models/basic-user-info.d.ts +2 -3
  102. package/models/basic-user-info.d.ts.map +1 -1
  103. package/package.json +2 -2
  104. package/public-api.d.ts +3 -0
  105. package/public-api.d.ts.map +1 -1
  106. package/services/base.service.d.ts +5 -1
  107. package/services/base.service.d.ts.map +1 -1
  108. package/services/common.service.d.ts +3 -3
  109. package/services/common.service.d.ts.map +1 -1
  110. package/services/crud.service.d.ts.map +1 -1
  111. package/services/notifier.service.d.ts +1 -1
  112. package/services/notifier.service.d.ts.map +1 -1
  113. package/services/user.service.d.ts +14 -2
  114. package/services/user.service.d.ts.map +1 -1
  115. package/tnx-shared.d.ts +48 -42
  116. package/tnx-shared.d.ts.map +1 -1
  117. package/tnx-shared.metadata.json +1 -1
  118. package/tnx-shared.module.d.ts +5 -1
  119. package/tnx-shared.module.d.ts.map +1 -1
  120. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -1,4 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
+ import { v4 as uuidv4 } from 'uuid';
2
3
  import { DatePipe } from '@angular/common';
3
4
  import { Injectable } from '@angular/core';
4
5
  import stringify from 'fast-safe-stringify';
@@ -29,23 +30,7 @@ export class CommonService {
29
30
  this.STORAGE_KEY = 'CLIPBOARD_CONTENT';
30
31
  }
31
32
  guid() {
32
- function s4() {
33
- return Math.floor((1 + Math.random()) * 0x10000)
34
- .toString(16)
35
- .substring(1);
36
- }
37
- return (s4() +
38
- s4() +
39
- '-' +
40
- s4() +
41
- '-' +
42
- s4() +
43
- '-' +
44
- s4() +
45
- '-' +
46
- s4() +
47
- s4() +
48
- s4());
33
+ return uuidv4();
49
34
  }
50
35
  randomString() {
51
36
  return this.guid();
@@ -1116,4 +1101,4 @@ CommonService.decorators = [
1116
1101
  CommonService.ctorParameters = () => [
1117
1102
  { type: ModuleConfigService }
1118
1103
  ];
1119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUVyRCxxQkFBcUI7QUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCLElBQUssZUFLSjtBQUxELFdBQUssZUFBZTtJQUNoQix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7SUFDSixpRUFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBSUQsTUFBTSxPQUFPLGFBQWE7SUFrQ3RCLFlBQW9CLG9CQUF5QztRQUF6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBakM3RCxlQUFVLEdBQW9CLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXlCcEIsZ0JBQVcsR0FBRyxrQ0FBa0Ms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QThCLENBQUMsR0FBUTtRQUNuQyxPQUFZO1lBQ1IsS0FBSyxFQUFFLFdBQVc7WUFDbEIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsR0FBRztTQUNuQixDQUFDO0lBQ04sQ0FBQzs7OztZQXJ0Q0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFkUSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnZmFzdC1zYWZlLXN0cmluZ2lmeSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbHRlciwgU29ydCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG4vLyBmaXggZm9yIGJ1aWxkIHByb2RcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbmVudW0gTWVudU9yaWVudGF0aW9uIHtcclxuICAgIFNUQVRJQyxcclxuICAgIE9WRVJMQVksXHJcbiAgICBTTElNLFxyXG4gICAgSE9SSVpPTlRBTCxcclxufVxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25TZXJ2aWNlIHtcclxuICAgIGxheW91dE1vZGU6IE1lbnVPcmllbnRhdGlvbiA9IE1lbnVPcmllbnRhdGlvbi5TVEFUSUM7XHJcblxyXG4gICAgZGFya01lbnUgPSBmYWxzZTtcclxuXHJcbiAgICBwcm9maWxlTW9kZSA9ICd0b3AnO1xyXG5cclxuICAgIHJvdGF0ZU1lbnVCdXR0b246IGJvb2xlYW47XHJcblxyXG4gICAgdG9wYmFyTWVudUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBvdmVybGF5TWVudUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN0YXRpY01lbnVNb2JpbGVBY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgbWVudUNsaWNrOiBib29sZWFuO1xyXG5cclxuICAgIHRvcGJhckl0ZW1DbGljazogYm9vbGVhbjtcclxuXHJcbiAgICBhY3RpdmVUb3BiYXJJdGVtOiBhbnk7XHJcblxyXG4gICAgcmVzZXRNZW51OiBib29sZWFuO1xyXG5cclxuICAgIGN1cnJlbnRBY3RpdmVJdGVtOiBhbnk7XHJcblxyXG4gICAgbWVudUhvdmVyQWN0aXZlOiBib29sZWFuO1xyXG4gICAgdGVzdDogYm9vbGVhbjtcclxuXHJcbiAgICB0blByZWZpeExvZyA9ICctLS0tLS0tLS0+VE5fTE9HX0NPTlNPTEUtLS0tLS0tPic7XHJcblxyXG4gICAgU1RPUkFHRV9LRVkgPSAnQ0xJUEJPQVJEX0NPTlRFTlQnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBndWlkKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIHM0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygxNilcclxuICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICBzNCgpICtcclxuICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgczQoKSArXHJcbiAgICAgICAgICAgIHM0KCkgK1xyXG4gICAgICAgICAgICBzNCgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByYW5kb21TdHJpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJhbmRvbVN0cmluZ1dpdGhOb3REZWxpbWl0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpZCgpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RyaW5nRm9ybWF0KGlucHV0U3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3MpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cclxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIGFyZ3MpIHtcclxuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5yZXBsYWNlKGB7JHtpbmRleH19YCwgYXJnc1tpbmRleF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGh0bWxFbmNvZGUoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhzdHIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvJy9nLCAnJnF1b3Q7Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTOG6pXkgduG7gSBnacOhIHRy4buLIHRoZW8gcGF0aCAnJ1xyXG4gICAgZ2V0VmFsdWVCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgcGF0aHMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW3BhdGhzW2ldXTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICAvLyB7c2VhcmNoOiB7a2V5IDogJ25hbW5oJ319IC4gPT4gc2VhcmNoLmtleVxyXG4gICAgc2V0VmFsdWVCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBvYmo7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSBmaWVsZHMubGVuZ3RoOyBpIDwgbiAmJiByZXN1bHQgIT09IHVuZGVmaW5lZDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSBkYXRhO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGRdID09PSAndW5kZWZpbmVkJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICFfLmlzT2JqZWN0KHJlc3VsdFtmaWVsZF0pXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgY2xvbmVkLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICBjbG9uZWQuc2V0VGltZShjbG9uZWQuZ2V0VGltZSgpICsgKGhvdXJzICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgICByZXR1cm4gY2xvbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFdvcmtEYXlzKGRhdGUsIGRheXMpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICB3aGlsZSAoZGF5cyA+IDApIHtcclxuICAgICAgICAgICAgY2xvbmVkLnNldERhdGUoY2xvbmVkLmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgICAgICBpZiAoY2xvbmVkLmdldERheSgpICE9PSAwICYmIGNsb25lZC5nZXREYXkoKSAhPT0gNikge1xyXG4gICAgICAgICAgICAgICAgZGF5cyAtPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1YoZGF0YXM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZG0ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XHJcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xyXG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFRvQ1NWMihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkbS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJykgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1ZHcm91cChkYXRhczogYW55LCBjb2x1bW5zOiBhbnlbXSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcclxuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjb2x1bW5zW2ldLmhlYWRlciArICcsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoc3ViRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goc3ViRGF0YS5ncm91cE5hbWUpO1xyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goaGVhZGVyU3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHN1YkRhdGEuZGF0YS5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRbYy5maWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmRhdGFNYXBwaW5nLmZvckVhY2goKGRtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkbS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSArICcsJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2goJ1xcbicpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XHJcbiAgICAgICAgbGV0IGNzdiA9ICcnO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICB2YWx1ZUZpZWxkOiBzdHJpbmcsXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICB0ZXh0RmllbGQyOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyID0gJycsXHJcbiAgICAgICAgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZVxyXG4gICAgKTogU2VsZWN0SXRlbVtdIHtcclxuICAgICAgICBpZiAoIXRleHRGaWVsZCB8fCB0ZXh0RmllbGQgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRleHRGaWVsZCA9IHZhbHVlRmllbGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZW1wQXJyOiBTZWxlY3RJdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGFsbG93TnVsbCkge1xyXG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goeyBsYWJlbDogJycsIHZhbHVlOiAnJyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxyXG4gICAgICAgIGZvciAoY29uc3QgaW5kIGluIGRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbaW5kXTtcclxuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4VGV4dEZpZWxkMlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3ZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRlbXBBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFiZWwoXHJcbiAgICAgICAgaXRlbTogYW55LFxyXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nLFxyXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyxcclxuICAgICAgICBwcmVmaXhUZXh0RmllbGQyOiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICAgIGlmICh0ZXh0RmllbGQyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBpdGVtW3RleHRGaWVsZF0gK1xyXG4gICAgICAgICAgICAgICAgJyAtICcgK1xyXG4gICAgICAgICAgICAgICAgcHJlZml4VGV4dEZpZWxkMiArXHJcbiAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgaXRlbVt0ZXh0RmllbGQyXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtW3RleHRGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW1NYXN0ZXJEYXRhKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnLFxyXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJ25hbWUnXHJcbiAgICApOiBTZWxlY3RJdGVtW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb1NlbGVjdEl0ZW0oZGF0YSwgdmFsdWVGaWVsZCwgdGV4dEZpZWxkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcmNlSWY0MDEgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmlzRm9yY2VMb2dvdXRJZjQwMTtcclxuICAgICAgICAgICAgaWYgKGZvcmNlSWY0MDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9hdXRoZW5TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEF1dGhlblNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX25vdGlmaWVyU2VydmljZSA9IGluamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnSOG7hyB0aOG7kW5nIHPhur0gdOG7sSDEkcSDbmcgeHXhuqV0IHNhdSA1cyDEkeG7gyBj4bqtcCBuaOG6rXAgcGhpw6puIGLhuqNuIG3hu5tpJywgJ1Row7RuZyBiw6FvJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2xlZXAgYmVmb3JlIGxvZ291dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoPFJlc3BvbnNlUmVzdWx0PntcclxuICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYS4gSMOjeSBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dCEhIScsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICB0b3RhbFJlY29yZDogMCxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICBlcnJvckNoZWNrRXhpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGVycm9yQ29udHJvbElkOiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckZvcm1JZDogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9wYmFySXRlbUNsaWNrKGV2ZW50LCBpdGVtKSB7XHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVUb3BiYXJJdGVtID09PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBhdXRvT3BlblRvcGJhckl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpc0hvcml6b250YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLkhPUklaT05UQUw7XHJcbiAgICB9XHJcbiAgICBpc1NsaW0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLlNMSU07XHJcbiAgICB9XHJcbiAgICBoaWRlT3ZlcmxheU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgb25MYXlvdXRDbGljaygpIHtcclxuICAgICAgICBpZiAoIXRoaXMudG9wYmFySXRlbUNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1lbnVDbGljaykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSB8fCB0aGlzLmlzU2xpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TWVudSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlNZW51QWN0aXZlIHx8IHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5tZW51SG92ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvblRvcGJhck1lbnVCdXR0b25DbGljayhldnQpIHtcclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gIXRoaXMudG9wYmFyTWVudUFjdGl2ZTtcclxuXHJcbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLmF1dG9PcGVuVG9wYmFySXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dUb3BiYXJNZW51KCkge1xyXG4gICAgICAgIGlmICghdGhpcy50b3BiYXJNZW51QWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9PcGVuVG9wYmFySXRlbSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1lbnVCdXR0b25DbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSAhdGhpcy5yb3RhdGVNZW51QnV0dG9uO1xyXG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWSkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXRoaXMub3ZlcmxheU1lbnVBY3RpdmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUxlZnRNZW51KHNob3cpIHtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9ICFzaG93O1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVDbGljayA9IHNob3c7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhc2hvdztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gc2hvdztcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IHNob3c7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhc2hvdztcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICFzaG93O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudUNsaWNrKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2V0TWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVGFibGV0KCkge1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDEwMjQgJiYgd2lkdGggPiA2NDA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEZXNrdG9wKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQ7XHJcbiAgICB9XHJcblxyXG4gICAgaXNNb2JpbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDY0MDtcclxuICAgIH1cclxuXHJcbiAgICBpc092ZXJsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZVNlcnZpY2VDb2RlQW5kU3VmZml4KHNlcnZpY2VDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuc3VmZml4U2VydmljZUNvZGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3NlcnZpY2VDb2RlfSR7dGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudFxyXG4gICAgICAgICAgICAgICAgLnN1ZmZpeFNlcnZpY2VDb2RlXHJcbiAgICAgICAgICAgICAgICB9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZXJ2aWNlQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxheShtczogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEJlZ2luIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xyXG4gICAgc2V0QXV0b2ZvY3VzRmlyc3RDb250cm9sKGlkRWxlbWVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRFbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKHZpZXdSZWYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQudHlwZSAhPSAncmFkaW8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4YXRlYXJhID0gdmlld1JlZi5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4YXRlYXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleGF0ZWFyYS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkge1xyXG4gICAgICAgIC8vIHJldHVybiB7XHJcbiAgICAgICAgLy8gICAgIGtleSAgICA6IDksXHJcbiAgICAgICAgLy8gICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuZXh0ID0gSlF1ZXJ5KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoJ3AtZWRpdG9yJykucGFyZW50KCkubmV4dCgpLmZpbmQoJzp0YWJiYWJsZSwgOmZvY3VzYWJsZScpLmZpcnN0KCk7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vIH07XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGFiRGlzYWJsZWRIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICAgICAgLy8gdGhpcy5kaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpO1xyXG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5wdXNoKHRoaXMuZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCkge1xyXG4gICAgICAgIC8vIGpRdWVyeShcIi5xbC10b29sYmFyXCIpLmZpbmQoXCI6YnV0dG9uXCIpLmF0dHIoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xyXG4gICAgfVxyXG4gICAgLyoqIEVuZCBkaXNhYmxlIGVkaXRvciB0YWIgKi9cclxuXHJcbiAgICBwcm9jZXNzRGF0ZUlucHV0KGlucHV0VmFsdWUsIHNob3dUaW1lOiBib29sZWFuKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZWdlclN0cmluZyhpbnB1dFZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1Ob3cgPSBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3Qgc05vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXIgPiA5OSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSAxMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSAnRERNTVlZWVloaG1tJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGlucHV0VmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTIwMTlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICtpbnB1dFZhbHVlLnN1YnN0cig0LCA0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTE5XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArKCcyMCcgKyBpbnB1dFZhbHVlLnN1YnN0cig0LCAyKS50b1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRDdXJyZW50WWVhcigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID4gLTEwMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuYWRkRGF5cyhuZXcgRGF0ZSgpLCBudW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC8tL2csICcvJyk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGVUaW1lID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSBoaDptbSdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGVUaW1lICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZJ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKTtcclxuICAgICAgICByZXR1cm4gZC5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFllYXIoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRNb250aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldE1vbnRoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RHluYW1pY0Zvcm1JZChzZXJ2aWNlLCBlbnRpdHksIGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBgJHtzZXJ2aWNlfV8ke2VudGl0eX1fJHthY3Rpb259YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHREeW5hbWljRm9ybUlkKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBgREVGQVVMVF8ke2FjdGlvbn1gLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvbmVPYmplY3Qob2JqOiBhbnkpIHtcclxuICAgICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UHJvcGVydHkocHJvcCwgdmFsLCBtb2RlbCkge1xyXG4gICAgICAgIGxldCBjbG9uZSA9IHRoaXMuY2xvbmVPYmplY3QobW9kZWwpO1xyXG4gICAgICAgIGlmIChjbG9uZSkge1xyXG4gICAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFuZGFyZGl6ZWRKc29uKGlucHV0SnNvbjogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBpbnB1dEpzb24ucmVwbGFjZSgvT2JqZWN0SWRcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvSVNPRGF0ZVxcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9OdW1iZXJMb25nXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0cmlnZ2VyUmVzaXplV2luZG93KCkge1xyXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9BbGlnbkRpYWxvZyhkaWFsb2c6IERpYWxvZykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyUmVzaXplV2luZG93KCksIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JqSGFzTnVsbChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwgJiYgb2JqW2tleV0gIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXJyYXlIYXNDaGFuZ2VkKG9sZEFycmF5LCBuZXdBcnJheSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBpLCBpdGVtLCBqLCBsZW47XHJcbiAgICAgICAgaWYgKCghb2xkQXJyYXkgJiYgbmV3QXJyYXkpIHx8IChvbGRBcnJheSAmJiAhbmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZEFycmF5KSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3QXJyYXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGogPSAwLCBsZW4gPSBuZXdBcnJheS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcclxuICAgICAgICAgICAgaXRlbSA9IG5ld0FycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoaXRlbSkgIT09IEpTT04uc3RyaW5naWZ5KG9sZEFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeVBhcnNlRXh0cmFjdERhdGUoZGF0ZVZhbHVlLCBmb3JtYXQpIHtcclxuICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoZGF0ZVZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgIGlmIChkYXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWVGcm9tVGFzayhrZXlWYWx1ZSwgY3VycmVudFZpZXcsIHN0ZXBNZXRhZGF0YSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGlmIChjdXJyZW50Vmlldy5rZXlWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50Vmlldy5rZXlWYWx1ZXMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5rZXkgPT09IGtleVZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0YXNrS2V5VmFsdWUgIT09IG51bGwgJiYgdGFza0tleVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RlcE1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyckV4dGVuZERhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICAgICAgc3RlcE1ldGFkYXRhLmZpbmQoKHgpID0+IHgua2V5ID09PSAnZXh0ZW5kRGF0YScpLnZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IGFyckV4dGVuZERhdGEuZmluZChcclxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSAmJiB4LmtleS50b0xvd2VyQ2FzZSgpID09PSBrZXlWYWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGFza0tleVZhbHVlICE9PSBudWxsICYmIHRhc2tLZXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0YXNrS2V5VmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB1cHBlckZpcnN0TGV0dGVyKGlucHV0KSB7XHJcbiAgICAgICAgaWYgKGlucHV0ID09ICcnIHx8IGlucHV0ID09IG51bGwgfHwgaW5wdXQgPT0gdW5kZWZpbmVkKSB7IHJldHVybiAnJzsgfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAod29yZC50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3b3JkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd29yZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQuc3Vic3RyaW5nKDEpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJyAnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgcmVzdWx0ICs9IHdvcmQudG9VcHBlckNhc2UoKSArICcgJzsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwbGFjZUFsbChpbnB1dFN0ciwgc2VhcmNoLCByZXBsYWNlbWVudCkge1xyXG4gICAgICAgIGlmIChpbnB1dFN0ciA9PT0gbnVsbCB8fCBpbnB1dFN0ciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBpbnB1dFN0cjsgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dFN0ci5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSW1hZ2UoZmlsZU5hbWUpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWZpbGVOYW1lKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgIHJldHVybiAvXFwuKGdpZnxqcGd8anBlZ3x0aWZmfHBuZykkL2kudGVzdChmaWxlTmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVJZnJhbWUodXJsKSB7XHJcbiAgICAgICAgY29uc3QgaWZyYW1lID0gYDxpZnJhbWUgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPmA7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGlmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbnRlZ2VyU3RyaW5nKHN0cjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgd2hpbGUgKHN0ci5pbmRleE9mKCcwJykgPT0gMCkge1xyXG4gICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RyID09ICcnKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IoTnVtYmVyKHN0cikpO1xyXG4gICAgICAgIHJldHVybiBuICE9PSBJbmZpbml0eSAmJiBTdHJpbmcobikgPT09IHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlNYXNrKCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLWRpYWxvZy1tYXNrXCJdJykgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktc2lkZWJhci1tYXNrXCJdJylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhZmVTdHJpbmdpZnkoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdHJpbmdpZnkuc3RhYmxlU3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVTdHJpbmcodmFsdWUxLCB2YWx1ZTIpIHtcclxuICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikge1xyXG4gICAgICAgIGlmICghZGF0ZTEgfHwgIWRhdGUyKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgZGF0ZTEgPSB0aGlzLnBhcnNlRGF0ZShkYXRlMSk7XHJcbiAgICAgICAgZGF0ZTIgPSB0aGlzLnBhcnNlRGF0ZShkYXRlMik7XHJcbiAgICAgICAgaWYgKGRhdGUxLmdldFRpbWUoKSA8IGRhdGUyLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlMS5nZXRUaW1lKCkgPT0gZGF0ZTIuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaWZmRGF0ZShkYXRlMTogYW55LCBkYXRlMjogYW55KTogbnVtYmVyIHtcclxuICAgICAgICAvLyBkMSA8IGQyIHRow6wgYuG6sW5nID0gLTFcclxuICAgICAgICBjb25zdCBkMSA9IG1vbWVudChkYXRlMSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgY29uc3QgZDIgPSBtb21lbnQoZGF0ZTIpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgIGlmIChkMSA9PSBkMikgeyByZXR1cm4gMDsgfVxyXG4gICAgICAgIGlmIChkMSA+IGQyKSB7IHJldHVybiAxOyB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBhcmVXaXRoTm93KGRhdGUxKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKGRhdGUxLCBjdXJyZW50RGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VEYXRlKGRhdGVTdHI6IGFueSkge1xyXG4gICAgICAgIGlmIChkYXRlU3RyIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZVN0cjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGVTdHIgfHwgZGF0ZVN0ciA9PSAnJykgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFzeW5jRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3JkZXJCeShvYmo6IGFueVtdLCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gXy5zb3J0Qnkob2JqLCBwcm9wKTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cEJ5KG9iajogYW55W10sIHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBfLmdyb3VwQnkob2JqLCBwcm9wKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0aW5jdChhcnJheTogbnVtYmVyW10pIHtcclxuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZmxhZ3NbYXJyYXlbaV1dKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgIGZsYWdzW2FycmF5W2ldXSA9IHRydWU7XHJcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKGFycmF5W2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0aW5jdEFycmF5KGFycmF5OiBhbnlbXSkge1xyXG4gICAgICAgIHZhciBhcnJSZXN1bHQgPSBhcnJheS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBhcnJheS5pbmRleE9mKGl0ZW0pID09PSBpbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGFyclJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0aW5jdEZpZWxkKGFycmF5OiBhbnlbXSwgZmllbGQpIHtcclxuICAgICAgICBjb25zdCBmbGFncyA9IFtdLCBvdXRwdXQgPSBbXSwgbCA9IGFycmF5Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpXVtmaWVsZF07XHJcbiAgICAgICAgICAgIGlmIChmbGFnc1t2YWx1ZV0pIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgZmxhZ3NbdmFsdWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERpc3RpbmN0KHNvdXJjZTogYW55W10sIGRlc3Q6IGFueVtdKSB7XHJcbiAgICAgICAgc291cmNlLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGVzdC5zb21lKHAgPT4gcCA9PSBzKSkge1xyXG4gICAgICAgICAgICAgICAgZGVzdC5wdXNoKHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSMOgbSBkdXnhu4d0IG3huqNuZywgbOG6pXkgcmEgcGjhuqduIHThu60gdGjhu49hIG3Do24gW2Z1bmNdIHbDoCB4w7NhIHBo4bqnbiB04butIMSRw7MgxJFpIGto4buPaSBt4bqjbmdcclxuICAgIC8vICAgICAgY2FsbEJhY2s6IG9wdGlvbmFsIHBo4bulYyB24bulIG5odSBj4bqndSBraMOhYyBraGkgZHV54buHdCDEkeG6v24gaXRlbSB0aOG7j2EgbcOjblxyXG4gICAgZ2V0QW5kUmVtb3ZlKHNvdXJjZTogYW55W10sIGZ1bmM6IEZ1bmN0aW9uLCBjYWxsQmFjaz86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGNhbGxCYWNrID09IG51bGwpIHtcclxuICAgICAgICAgICAgY2FsbEJhY2sgPSBpID0+IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jKHNvdXJjZVtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxCYWNrKHNvdXJjZVtpXSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzb3VyY2VbaV0pO1xyXG4gICAgICAgICAgICAgICAgc291cmNlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZU1lbnUoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lbnUtYnV0dG9uJykuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBidWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBidWZmZXJWaWV3W2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ3VpZEVtcHR5KCkge1xyXG4gICAgICAgIHJldHVybiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VmFsKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgPT0gdW5kZWZpbmVkIHx8IHZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lU3BhbjogVHLhuqMgduG7gSB0cnVlIG7hur91IGhhaSBraG/huqNuZyB0aOG7nWkgZ2lhbiAoc3RhcnQsIGVuZClcclxuICAgICAqIHbDoCAoY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSBnaWFvIG5oYXUuIEtow7RuZyB0w61uaFxyXG4gICAgICogY2jhu4kgZ2lhbyBt4buZdCDEkeG6p3UgbcO6dC5cclxuICAgICAqL1xyXG4gICAgaGFzSW50ZXJzZWN0aW9uKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkge1xyXG4gICAgICAgIHZhciBoYXNJbnRlcnNlY3Rpb24gPSAoc3RhcnQgPCBjb21wYXJlU3RhcnQgJiYgY29tcGFyZVN0YXJ0IDwgZW5kKVxyXG4gICAgICAgICAgICB8fCAoc3RhcnQgPCBjb21wYXJlRW5kICYmIGNvbXBhcmVFbmQgPCBlbmQpXHJcbiAgICAgICAgICAgIHx8IChjb21wYXJlU3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGNvbXBhcmVFbmQpO1xyXG5cclxuICAgICAgICByZXR1cm4gaGFzSW50ZXJzZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0ludGVyc2VjdGlvbkRhdGUoc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kLCBkYXRlRm9ybWF0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghZGF0ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHN0YXJ0KSA8IG5ldyBEYXRlKGNvbXBhcmVFbmQpICYmIG5ldyBEYXRlKGVuZCkgPiBuZXcgRGF0ZShjb21wYXJlU3RhcnQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnQgPCBjb21wYXJlRW5kICYmIGVuZCA+IGNvbXBhcmVTdGFydDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2Zmc2V0SW5NaW51dGUoc3RyRGF0ZTEsIHN0ckRhdGUyLCByb3VuZCA9IHRydWUpIHtcclxuICAgICAgICBpZiAoIXN0ckRhdGUxIHx8ICFzdHJEYXRlMikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkMSA9IG5ldyBEYXRlKHN0ckRhdGUxKTtcclxuICAgICAgICBsZXQgZDIgPSBuZXcgRGF0ZShzdHJEYXRlMik7XHJcblxyXG4gICAgICAgIGxldCBvZmZzZXQgPSAoZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpKSAvIDEwMDAgLyA2MDtcclxuICAgICAgICBpZiAocm91bmQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kVGVtcGxhdGVGcm9tTGlzdCgkbGlzdDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+LCB0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiAkbGlzdFxyXG4gICAgICAgICAgICA/ICRsaXN0LmZpbmQoKHRlbXBsYXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5fZGVmICYmIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCB2ZXJzaW9uLCBub3QgaXZ5XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWYucmVmZXJlbmNlc1t0ZW1wbGF0ZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyICYmIHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIubG9jYWxOYW1lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzIGl2eSB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXNbMF0gPT0gdGVtcGxhdGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpc1NhbWVBcnJheShhcnJheTE6IGFueVtdLCBhcnJheTI6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFycmF5MS5sZW5ndGggIT0gYXJyYXkyLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gb2YgYXJyYXkxKSB7XHJcbiAgICAgICAgICAgIGlmICghYXJyYXkyLnNvbWUocSA9PiBxID09IGl0ZW0pKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQYWdlKCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkICYmIGlucHV0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbXB0eUFycmF5T3JOdWxsKGFycmF5OiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChhcnJheSAhPT0gdW5kZWZpbmVkICYmIGFycmF5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChhcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyQ29udGFpbmVyKGxvZ2ljOiAnYW5kJyB8ICdvcicsIC4uLmZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsb2dpYyxcclxuICAgICAgICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnNdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJDbGlwYm9hcmRTdG9yYWdlKCkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlCeVN0b3JhZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZLCB2YWwpO1xyXG4gICAgICAgIHRoaXMuY29weU1lc3NhZ2UodmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXN0ZUJ5U3RvcmFnZSgpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29weU1lc3NhZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzZWxCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLmxlZnQgPSAnMCc7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLnRvcCA9ICcwJztcclxuICAgICAgICBzZWxCb3guc3R5bGUub3BhY2l0eSA9ICcwJztcclxuICAgICAgICBzZWxCb3gudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxCb3gpO1xyXG4gICAgICAgIHNlbEJveC5mb2N1cygpO1xyXG4gICAgICAgIHNlbEJveC5zZWxlY3QoKTtcclxuICAgICAgICBzZWxCb3guc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5OTkpO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzZWxCb3gpO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXHJcbiAgICAgICAgICAgIG9wZXJhdG9yLFxyXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcclxuICAgICAgICAgICAgc3ViRmllbGRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nRXJyb3IoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0luZm8obXNnKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8obXNnKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dJbmZvU2ltcGxlKG1zZykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke21zZ31gKTtcclxuICAgIH07XHJcblxyXG4gICAgbWF0Y2hSdWxlU2hvcnQoc3RyLCBydWxlKSB7XHJcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcnVsZS5zcGxpdCgnKicpLm1hcChlc2NhcGVSZWdleCkuam9pbignLionKSArICckJykudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4cGxhbmF0aW9uIGNvZGVcclxuICAgIG1hdGNoUnVsZUV4cGwoc3RyLCBydWxlKSB7XHJcbiAgICAgICAgLy8gZm9yIHRoaXMgc29sdXRpb24gdG8gd29yayBvbiBhbnkgc3RyaW5nLCBubyBtYXR0ZXIgd2hhdCBjaGFyYWN0ZXJzIGl0IGhhc1xyXG4gICAgICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xyXG5cclxuICAgICAgICAvLyBcIi5cIiAgPT4gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGV4Y2VwdCBuZXdsaW5lIG9yIGxpbmUgdGVybWluYXRvclxyXG4gICAgICAgIC8vIFwiLipcIiA9PiBNYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVyc1xyXG4gICAgICAgIHJ1bGUgPSBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpO1xyXG5cclxuICAgICAgICAvLyBcIl5cIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhlIGZvbGxvd2luZyBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0XHJcbiAgICAgICAgLy8gXCIkXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoYXQgaW4gZnJvbnQgYXQgdGhlIGVuZCBvZiBpdFxyXG4gICAgICAgIHJ1bGUgPSAnXicgKyBydWxlICsgJyQnO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciBtYXRjaGluZyBzdHJpbmdcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocnVsZSk7XHJcblxyXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBmaW5kcyBhIG1hdGNoLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZVxyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVzcG9uc2VSZXN1bHRGcm9tRXhjZXB0aW9uKGVycjogYW55KTogUmVzcG9uc2VSZXN1bHQge1xyXG4gICAgICAgIHJldHVybiA8YW55PntcclxuICAgICAgICAgICAgZXJyb3I6ICdFWENFUFRJT04nLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJyxcclxuICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JEZXRhaWw6IGVyclxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIl19
1104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsic2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUVyRCxxQkFBcUI7QUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZCLElBQUssZUFLSjtBQUxELFdBQUssZUFBZTtJQUNoQix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7SUFDSixpRUFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUxJLGVBQWUsS0FBZixlQUFlLFFBS25CO0FBSUQsTUFBTSxPQUFPLGFBQWE7SUFrQ3RCLFlBQW9CLG9CQUF5QztRQUF6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBakM3RCxlQUFVLEdBQW9CLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztR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RyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ25CLDRFQUE0RTtRQUM1RSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRixxRUFBcUU7UUFDckUsbUVBQW1FO1FBQ25FLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkQsdUVBQXVFO1FBQ3ZFLGlFQUFpRTtRQUNqRSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7UUFFeEIseURBQXlEO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLCtEQUErRDtRQUMvRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELDhCQUE4QixDQUFDLEdBQVE7UUFDbkMsT0FBWTtZQUNSLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLEdBQUc7U0FDbkIsQ0FBQztJQUNOLENBQUM7Ozs7WUFuc0NKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBZFEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICdmYXN0LXNhZmUtc3RyaW5naWZ5JztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyLCBTb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcclxuXHJcbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxyXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xyXG5cclxuZW51bSBNZW51T3JpZW50YXRpb24ge1xyXG4gICAgU1RBVElDLFxyXG4gICAgT1ZFUkxBWSxcclxuICAgIFNMSU0sXHJcbiAgICBIT1JJWk9OVEFMLFxyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xyXG4gICAgbGF5b3V0TW9kZTogTWVudU9yaWVudGF0aW9uID0gTWVudU9yaWVudGF0aW9uLlNUQVRJQztcclxuXHJcbiAgICBkYXJrTWVudSA9IGZhbHNlO1xyXG5cclxuICAgIHByb2ZpbGVNb2RlID0gJ3RvcCc7XHJcblxyXG4gICAgcm90YXRlTWVudUJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgICB0b3BiYXJNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIG92ZXJsYXlNZW51QWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3RhdGljTWVudU1vYmlsZUFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBtZW51Q2xpY2s6IGJvb2xlYW47XHJcblxyXG4gICAgdG9wYmFySXRlbUNsaWNrOiBib29sZWFuO1xyXG5cclxuICAgIGFjdGl2ZVRvcGJhckl0ZW06IGFueTtcclxuXHJcbiAgICByZXNldE1lbnU6IGJvb2xlYW47XHJcblxyXG4gICAgY3VycmVudEFjdGl2ZUl0ZW06IGFueTtcclxuXHJcbiAgICBtZW51SG92ZXJBY3RpdmU6IGJvb2xlYW47XHJcbiAgICB0ZXN0OiBib29sZWFuO1xyXG5cclxuICAgIHRuUHJlZml4TG9nID0gJy0tLS0tLS0tLT5UTl9MT0dfQ09OU09MRS0tLS0tLS0+JztcclxuXHJcbiAgICBTVE9SQUdFX0tFWSA9ICdDTElQQk9BUkRfQ09OVEVOVCc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIGd1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHV1aWR2NCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJhbmRvbVN0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tU3RyaW5nV2l0aE5vdERlbGltaXRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCkucmVwbGFjZSgnLScsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdGb3JtYXQoaW5wdXRTdHJpbmc6IHN0cmluZywgLi4uYXJncykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpmb3JpblxyXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggaW4gYXJncykge1xyXG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2UoYHske2luZGV4fX1gLCBhcmdzW2luZGV4XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbEVuY29kZShzdHIpIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nKHN0cilcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmcXVvdDsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBM4bqleSB24buBIGdpw6EgdHLhu4sgdGhlbyBwYXRoICcnXHJcbiAgICBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcGF0aHNbaV1dO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIC8vIHtzZWFyY2g6IHtrZXkgOiAnbmFtbmgnfX0gLiA9PiBzZWFyY2gua2V5XHJcbiAgICBzZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG9iajtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBuICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaV07XHJcbiAgICAgICAgICAgIGlmIChpID09PSBuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIV8uaXNPYmplY3QocmVzdWx0W2ZpZWxkXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtmaWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICBjbG9uZWQuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSG91cnMoZGF0ZTogRGF0ZSwgaG91cnM6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIGNsb25lZC5zZXRUaW1lKGNsb25lZC5nZXRUaW1lKCkgKyAoaG91cnMgKiA2MCAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgIHJldHVybiBjbG9uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV29ya0RheXMoZGF0ZSwgZGF5cykge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgIHdoaWxlIChkYXlzID4gMCkge1xyXG4gICAgICAgICAgICBjbG9uZWQuc2V0RGF0ZShjbG9uZWQuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZWQuZ2V0RGF5KCkgIT09IDAgJiYgY2xvbmVkLmdldERheSgpICE9PSA2KSB7XHJcbiAgICAgICAgICAgICAgICBkYXlzIC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJvd1N0cmluZyArPSAodHlwZW9mIGRbYy5maWVsZF0pLnRvU3RyaW5nKCkgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbFRtcCA9IHRoaXMuZ2V0VmFsdWVCeVBhdGgoZCwgYy5kYXRhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBEYXRlXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZGF0ZVBpcGUudHJhbnNmb3JtKGNvbFZhbCwgYy5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXHJcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhTWFwcGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkbS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXHInLCAnJykgKyAnLCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcclxuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0VG9DU1YyKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBsZXQgaGVhZGVyU3RyaW5nID0gJyc7XHJcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXJTdHJpbmcgKz0gYy5oZWFkZXIgKyAnLCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3NTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcclxuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGNvbFZhbFRtcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcclxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRtLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcbicsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKSArICcsJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGNzdiA9IGhlYWRlclN0cmluZyArICdcXG4nO1xyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcclxuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnRUb0NTVkdyb3VwKGRhdGFzOiBhbnksIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIER1eeG7h3QgY+G7mXQgxJHhu4MgdGjDqm0gdsOgbyBoZWFkZXJcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGNvbHVtbnNbaV0uaGVhZGVyICsgJywnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBkYXRhcy5mb3JFYWNoKChzdWJEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChzdWJEYXRhLmdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChoZWFkZXJTdHJpbmcpO1xyXG5cclxuICAgICAgICAgICAgc3ViRGF0YS5kYXRhLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRtLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xccicsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXG4nLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpICsgJywnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaCgnXFxuJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcclxuICAgICAgICBsZXQgY3N2ID0gJyc7XHJcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xyXG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW0oXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcclxuICAgICAgICB0ZXh0RmllbGQ6IHN0cmluZyA9ICcnLFxyXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyA9ICcnLFxyXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDIgPSAnJyxcclxuICAgICAgICBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlXHJcbiAgICApOiBTZWxlY3RJdGVtW10ge1xyXG4gICAgICAgIGlmICghdGV4dEZpZWxkIHx8IHRleHRGaWVsZCA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGV4dEZpZWxkID0gdmFsdWVGaWVsZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBBcnI6IFNlbGVjdEl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmZvcmluXHJcbiAgICAgICAgZm9yIChjb25zdCBpbmQgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtpbmRdO1xyXG4gICAgICAgICAgICB0ZW1wQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkMixcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bdmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGVtcEFycjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYWJlbChcclxuICAgICAgICBpdGVtOiBhbnksXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcsXHJcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nLFxyXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDI6IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHRleHRGaWVsZDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGl0ZW1bdGV4dEZpZWxkXSArXHJcbiAgICAgICAgICAgICAgICAnIC0gJyArXHJcbiAgICAgICAgICAgICAgICBwcmVmaXhUZXh0RmllbGQyICtcclxuICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICBpdGVtW3RleHRGaWVsZDJdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGV4dEZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFRvU2VsZWN0SXRlbU1hc3RlckRhdGEoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCcsXHJcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnbmFtZSdcclxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvU2VsZWN0SXRlbShkYXRhLCB2YWx1ZUZpZWxkLCB0ZXh0RmllbGQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9yY2VJZjQwMSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaXNGb3JjZUxvZ291dElmNDAxO1xyXG4gICAgICAgICAgICBpZiAoZm9yY2VJZjQwMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX2F1dGhlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aGVuU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdI4buHIHRo4buRbmcgc+G6vSB04buxIMSRxINuZyB4deG6pXQgc2F1IDVzIMSR4buDIGPhuq1wIG5o4bqtcCBwaGnDqm4gYuG6o24gbeG7m2knLCAnVGjDtG5nIGLDoW8nKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzbGVlcCBiZWZvcmUgbG9nb3V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSg8UmVzcG9uc2VSZXN1bHQ+e1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhLiBIw6N5IGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90ISEhJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkOiAwLFxyXG4gICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yQ2hlY2tFeGlzdDogbnVsbCxcclxuICAgICAgICAgICAgZXJyb3JDb250cm9sSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIGVycm9yRm9ybUlkOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQsIGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGF1dG9PcGVuVG9wYmFySXRlbSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSG9yaXpvbnRhbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uSE9SSVpPTlRBTDtcclxuICAgIH1cclxuICAgIGlzU2xpbSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uU0xJTTtcclxuICAgIH1cclxuICAgIGhpZGVPdmVybGF5TWVudSgpIHtcclxuICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBvbkxheW91dENsaWNrKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50b3BiYXJJdGVtQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWVudUNsaWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuaXNTbGltKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRNZW51ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgfHwgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lbnVDbGljayA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9wYmFyTWVudUJ1dHRvbkNsaWNrKGV2dCkge1xyXG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSAhdGhpcy50b3BiYXJNZW51QWN0aXZlO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVPdmVybGF5TWVudSgpO1xyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1RvcGJhck1lbnUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvcGJhck1lbnVBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudUJ1dHRvbkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICF0aGlzLnJvdGF0ZU1lbnVCdXR0b247XHJcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhdGhpcy5vdmVybGF5TWVudUFjdGl2ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gIXRoaXNcclxuICAgICAgICAgICAgICAgICAgICAuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTGVmdE1lbnUoc2hvdykge1xyXG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gIXNob3c7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUNsaWNrID0gc2hvdztcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5TWVudUFjdGl2ZSA9ICFzaG93O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUgPSBzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gc2hvdztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9ICFzaG93O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXNob3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NZW51Q2xpY2soJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzZXRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUYWJsZXQoKSB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICByZXR1cm4gd2lkdGggPD0gMTAyNCAmJiB3aWR0aCA+IDY0MDtcclxuICAgIH1cclxuXHJcbiAgICBpc0Rlc2t0b3AoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNDtcclxuICAgIH1cclxuXHJcbiAgICBpc01vYmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNjQwO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT3ZlcmxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lU2VydmljZUNvZGVBbmRTdWZmaXgoc2VydmljZUNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7c2VydmljZUNvZGV9JHt0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50XHJcbiAgICAgICAgICAgICAgICAuc3VmZml4U2VydmljZUNvZGVcclxuICAgICAgICAgICAgICAgIH1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQmVnaW4gZGlzYWJsZSBlZGl0b3IgdGFiICovXHJcbiAgICBzZXRBdXRvZm9jdXNGaXJzdENvbnRyb2woaWRFbGVtZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAodmlld1JlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC50eXBlICE9ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXhhdGVhcmEgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhhdGVhcmEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4YXRlYXJhLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHtcclxuICAgICAgICAvLyAgICAga2V5ICAgIDogOSxcclxuICAgICAgICAvLyAgICAgaGFuZGxlcjogZnVuY3Rpb24gKGFyZzEsIGFyZzIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5leHQgPSBKUXVlcnkoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgncC1lZGl0b3InKS5wYXJlbnQoKS5uZXh0KCkuZmluZCgnOnRhYmJhYmxlLCA6Zm9jdXNhYmxlJykuZmlyc3QoKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUYWJEaXNhYmxlZEhhbmRsZXIoZXZlbnQpIHtcclxuICAgICAgICAvLyB0aGlzLmRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCk7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gZXZlbnQuZWRpdG9yLmtleWJvYXJkLmJpbmRpbmdzWzldLnB1c2godGhpcy5nZXRUYWJEaXNhYmxlZEhhbmRsZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZVRhYlRvb2xiYXJFZGl0b3IoKSB7XHJcbiAgICAgICAgLy8galF1ZXJ5KFwiLnFsLXRvb2xiYXJcIikuZmluZChcIjpidXR0b25cIikuYXR0cihcInRhYmluZGV4XCIsIFwiLTFcIik7XHJcbiAgICB9XHJcbiAgICAvKiogRW5kIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xyXG5cclxuICAgIHByb2Nlc3NEYXRlSW5wdXQoaW5wdXRWYWx1ZSwgc2hvd1RpbWU6IGJvb2xlYW4pOiBEYXRlIHtcclxuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGlucHV0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgaE5vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcclxuICAgICAgICAgICAgY29uc3QgbU5vdyA9IG5ldyBEYXRlKCkuZ2V0TWludXRlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBzTm93ID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDk5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9ICdERE1NWVlZWWhobW0nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBtb21lbnQoaW5wdXRWYWx1ZSwgZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMjAxOVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gK2lucHV0VmFsdWUuc3Vic3RyKDQsIDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDYpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxMTlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICsoJzIwJyArIGlucHV0VmFsdWUuc3Vic3RyKDQsIDIpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSA+IG1heERheSB8fCBkYXkgPCAxKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA+IDEyIHx8IG1vbnRoIDwgMSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEYXkgPSB0aGlzLmdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRIb3VycyhoTm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPiAtMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5hZGREYXlzKG5ldyBEYXRlKCksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIHIuc2V0TWludXRlcyhtTm93KTtcclxuICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0VmFsdWUgPSBpbnB1dFZhbHVlLnJlcGxhY2UoLy0vZywgJy8nKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZVRpbWUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZVRpbWUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlVGltZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVknXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1heERheUluTW9udGhBbmRZZWFyKG1vbnRoLCB5ZWFyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDApO1xyXG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50WWVhcigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudE1vbnRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0TW9udGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREeW5hbWljRm9ybUlkKHNlcnZpY2UsIGVudGl0eSwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3NlcnZpY2V9XyR7ZW50aXR5fV8ke2FjdGlvbn1gLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdER5bmFtaWNGb3JtSWQoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGBERUZBVUxUXyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9uZU9iamVjdChvYmo6IGFueSkge1xyXG4gICAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQcm9wZXJ0eShwcm9wLCB2YWwsIG1vZGVsKSB7XHJcbiAgICAgICAgbGV0IGNsb25lID0gdGhpcy5jbG9uZU9iamVjdChtb2RlbCk7XHJcbiAgICAgICAgaWYgKGNsb25lKSB7XHJcbiAgICAgICAgICAgIGNsb25lW3Byb3BdID0gdmFsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YW5kYXJkaXplZEpzb24oaW5wdXRKc29uOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IGlucHV0SnNvbi5yZXBsYWNlKC9PYmplY3RJZFxcKCguKj8pXFwpL2dtLCAnJDEnKTtcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9JU09EYXRlXFwoKC4qPylcXCkvZ20sICckMScpO1xyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL051bWJlckxvbmdcXCgoLio/KVxcKS9nbSwgJyQxJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRyaWdnZXJSZXNpemVXaW5kb3coKSB7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXV0b0FsaWduRGlhbG9nKGRpYWxvZzogRGlhbG9nKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJSZXNpemVXaW5kb3coKSwgMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBvYmpIYXNOdWxsKG9iaikge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqW2tleV0gIT0gbnVsbCAmJiBvYmpba2V5XSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhcnJheUhhc0NoYW5nZWQob2xkQXJyYXksIG5ld0FycmF5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGksIGl0ZW0sIGosIGxlbjtcclxuICAgICAgICBpZiAoKCFvbGRBcnJheSAmJiBuZXdBcnJheSkgfHwgKG9sZEFycmF5ICYmICFuZXdBcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkQXJyYXkpID09PSBKU09OLnN0cmluZ2lmeShuZXdBcnJheSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IG5ld0FycmF5Lmxlbmd0aDsgaiA8IGxlbjsgaSA9ICsraikge1xyXG4gICAgICAgICAgICBpdGVtID0gbmV3QXJyYXlbaV07XHJcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2xkQXJyYXlbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UGFyc2VFeHRyYWN0RGF0ZShkYXRlVmFsdWUsIGZvcm1hdCkge1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChkYXRlVmFsdWUsIGZvcm1hdCk7XHJcbiAgICAgICAgaWYgKGRheSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF5LnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZUZyb21UYXNrKGtleVZhbHVlLCBjdXJyZW50Vmlldywgc3RlcE1ldGFkYXRhKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWaWV3LmtleVZhbHVlcykge1xyXG4gICAgICAgICAgICBjb25zdCB0YXNrS2V5VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWaWV3LmtleVZhbHVlcykuZmluZChcclxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSA9PT0ga2V5VmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGVwTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyRXh0ZW5kRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gYXJyRXh0ZW5kRGF0YS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHgpID0+IHgua2V5ICYmIHgua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleVZhbHVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICh0YXNrS2V5VmFsdWUgIT09IG51bGwgJiYgdGFza0tleVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwcGVyRmlyc3RMZXR0ZXIoaW5wdXQpIHtcclxuICAgICAgICBpZiAoaW5wdXQgPT0gJycgfHwgaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSB1bmRlZmluZWQpIHsgcmV0dXJuICcnOyB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh3b3JkLnRyaW0oKSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd29yZC5zdWJzdHJpbmcoMSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnICc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyByZXN1bHQgKz0gd29yZC50b1VwcGVyQ2FzZSgpICsgJyAnOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBsYWNlQWxsKGlucHV0U3RyLCBzZWFyY2gsIHJlcGxhY2VtZW50KSB7XHJcbiAgICAgICAgaWYgKGlucHV0U3RyID09PSBudWxsIHx8IGlucHV0U3RyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIGlucHV0U3RyOyB9XHJcbiAgICAgICAgcmV0dXJuIGlucHV0U3RyLnNwbGl0KHNlYXJjaCkuam9pbihyZXBsYWNlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNJbWFnZShmaWxlTmFtZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZmlsZU5hbWUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWUgPSBgPGlmcmFtZSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIiB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgc3JjPVwiJHt1cmx9XCI+PC9pZnJhbWU+YDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaWZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ludGVnZXJTdHJpbmcoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXN0cikgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICB3aGlsZSAoc3RyLmluZGV4T2YoJzAnKSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdHIgPT0gJycpIHsgcmV0dXJuIHRydWU7IH1cclxuICAgICAgICBjb25zdCBuID0gTWF0aC5mbG9vcihOdW1iZXIoc3RyKSk7XHJcbiAgICAgICAgcmV0dXJuIG4gIT09IEluZmluaXR5ICYmIFN0cmluZyhuKSA9PT0gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0FueU1hc2soKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3N+PVwidWktZGlhbG9nLW1hc2tcIl0nKSB8fFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc349XCJ1aS1zaWRlYmFyLW1hc2tcIl0nKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2FmZVN0cmluZ2lmeShkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHN0cmluZ2lmeS5zdGFibGVTdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZVN0cmluZyh2YWx1ZTEsIHZhbHVlMikge1xyXG4gICAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSB7XHJcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHsgcmV0dXJuIG51bGw7IH1cclxuICAgICAgICBkYXRlMSA9IHRoaXMucGFyc2VEYXRlKGRhdGUxKTtcclxuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcclxuICAgICAgICBpZiAoZGF0ZTEuZ2V0VGltZSgpIDwgZGF0ZTIuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGUxLmdldFRpbWUoKSA9PSBkYXRlMi5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpZmZEYXRlKGRhdGUxOiBhbnksIGRhdGUyOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIC8vIGQxIDwgZDIgdGjDrCBi4bqxbmcgPSAtMVxyXG4gICAgICAgIGNvbnN0IGQxID0gbW9tZW50KGRhdGUxKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICBjb25zdCBkMiA9IG1vbWVudChkYXRlMikuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgaWYgKGQxID09IGQyKSB7IHJldHVybiAwOyB9XHJcbiAgICAgICAgaWYgKGQxID4gZDIpIHsgcmV0dXJuIDE7IH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGFyZVdpdGhOb3coZGF0ZTEpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoZGF0ZTEsIGN1cnJlbnREYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGVTdHIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlU3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZGF0ZVN0ciB8fCBkYXRlU3RyID09ICcnKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYXN5bmNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2soYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvcmRlckJ5KG9iajogYW55W10sIHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBfLnNvcnRCeShvYmosIHByb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIF8uZ3JvdXBCeShvYmosIHByb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0KGFycmF5OiBudW1iZXJbXSkge1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmbGFnc1thcnJheVtpXV0pIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgZmxhZ3NbYXJyYXlbaV1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0QXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgdmFyIGFyclJlc3VsdCA9IGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcclxuICAgICAgICByZXR1cm4gYXJyUmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3RpbmN0RmllbGQoYXJyYXk6IGFueVtdLCBmaWVsZCkge1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gW10sIG91dHB1dCA9IFtdLCBsID0gYXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGxldCB2YWx1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W2ldW2ZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKGZsYWdzW3ZhbHVlXSkgeyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICBmbGFnc1t2YWx1ZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGlzdGluY3Qoc291cmNlOiBhbnlbXSwgZGVzdDogYW55W10pIHtcclxuICAgICAgICBzb3VyY2UuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkZXN0LnNvbWUocCA9PiBwID09IHMpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0LnB1c2gocyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIw6BtIGR1eeG7h3QgbeG6o25nLCBs4bqleSByYSBwaOG6p24gdOG7rSB0aOG7j2EgbcOjbiBbZnVuY10gdsOgIHjDs2EgcGjhuqduIHThu60gxJHDsyDEkWkga2jhu49pIG3huqNuZ1xyXG4gICAgLy8gICAgICBjYWxsQmFjazogb3B0aW9uYWwgcGjhu6VjIHbhu6Ugbmh1IGPhuqd1IGtow6FjIGtoaSBkdXnhu4d0IMSR4bq/biBpdGVtIHRo4buPYSBtw6NuXHJcbiAgICBnZXRBbmRSZW1vdmUoc291cmNlOiBhbnlbXSwgZnVuYzogRnVuY3Rpb24sIGNhbGxCYWNrPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoY2FsbEJhY2sgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjYWxsQmFjayA9IGkgPT4gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoc291cmNlW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbEJhY2soc291cmNlW2ldKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNvdXJjZVtpXSk7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTWVudSgpIHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVudS1idXR0b24nKS5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBndWlkRW1wdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlWYWwodmFsKSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVTcGFuOiBUcuG6oyB24buBIHRydWUgbuG6v3UgaGFpIGtob+G6o25nIHRo4budaSBnaWFuIChzdGFydCwgZW5kKVxyXG4gICAgICogdsOgIChjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIGdpYW8gbmhhdS4gS2jDtG5nIHTDrW5oXHJcbiAgICAgKiBjaOG7iSBnaWFvIG3hu5l0IMSR4bqndSBtw7p0LlxyXG4gICAgICovXHJcbiAgICBoYXNJbnRlcnNlY3Rpb24oc3RhcnQsIGVuZCwgY29tcGFyZVN0YXJ0LCBjb21wYXJlRW5kKSB7XHJcbiAgICAgICAgdmFyIGhhc0ludGVyc2VjdGlvbiA9IChzdGFydCA8IGNvbXBhcmVTdGFydCAmJiBjb21wYXJlU3RhcnQgPCBlbmQpXHJcbiAgICAgICAgICAgIHx8IChzdGFydCA8IGNvbXBhcmVFbmQgJiYgY29tcGFyZUVuZCA8IGVuZClcclxuICAgICAgICAgICAgfHwgKGNvbXBhcmVTdGFydCA8PSBzdGFydCAmJiBlbmQgPD0gY29tcGFyZUVuZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBoYXNJbnRlcnNlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgaGFzSW50ZXJzZWN0aW9uRGF0ZShzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQsIGRhdGVGb3JtYXQgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKCFkYXRlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoc3RhcnQpIDwgbmV3IERhdGUoY29tcGFyZUVuZCkgJiYgbmV3IERhdGUoZW5kKSA+IG5ldyBEYXRlKGNvbXBhcmVTdGFydCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRJbk1pbnV0ZShzdHJEYXRlMSwgc3RyRGF0ZTIsIHJvdW5kID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICghc3RyRGF0ZTEgfHwgIXN0ckRhdGUyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGQxID0gbmV3IERhdGUoc3RyRGF0ZTEpO1xyXG4gICAgICAgIGxldCBkMiA9IG5ldyBEYXRlKHN0ckRhdGUyKTtcclxuXHJcbiAgICAgICAgbGV0IG9mZnNldCA9IChkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCkpIC8gMTAwMCAvIDYwO1xyXG4gICAgICAgIGlmIChyb3VuZCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRUZW1wbGF0ZUZyb21MaXN0KCRsaXN0OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj4sIHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICRsaXN0XHJcbiAgICAgICAgICAgID8gJGxpc3QuZmluZCgodGVtcGxhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlLl9kZWYgJiYgdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIHZlcnNpb24sIG5vdCBpdnlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzW3RlbXBsYXRlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIgJiYgdGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5sb2NhbE5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgaXZ5IHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl9kZWNsYXJhdGlvblRDb250YWluZXIubG9jYWxOYW1lc1swXSA9PSB0ZW1wbGF0ZU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2FtZUFycmF5KGFycmF5MTogYW55W10sIGFycmF5MjogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPSBhcnJheTIubGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBhcnJheTEpIHtcclxuICAgICAgICAgICAgaWYgKCFhcnJheTIuc29tZShxID0+IHEgPT0gaXRlbSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFBhZ2UoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9PSB1bmRlZmluZWQgJiYgYXJyYXkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc11cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckNsaXBib2FyZFN0b3JhZ2UoKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29weUJ5U3RvcmFnZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVksIHZhbCk7XHJcbiAgICAgICAgdGhpcy5jb3B5TWVzc2FnZSh2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhc3RlQnlTdG9yYWdlKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5TWVzc2FnZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICAgICAgc2VsQm94LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICBzZWxCb3guc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgICAgIHNlbEJveC52YWx1ZSA9IHZhbDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XHJcbiAgICAgICAgc2VsQm94LmZvY3VzKCk7XHJcbiAgICAgICAgc2VsQm94LnNlbGVjdCgpO1xyXG4gICAgICAgIHNlbEJveC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OSk7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNlbEJveCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcclxuICAgICAgICAgICAgb3BlcmF0b3IsXHJcbiAgICAgICAgICAgIHNvdXJjZUZpZWxkLFxyXG4gICAgICAgICAgICBzdWJGaWVsZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTb3J0KHsgZmllbGQsIGRpciB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dFcnJvcihlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBNcnIgU3RhcnI6ICR7dGhpcy50blByZWZpeExvZ31gKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nSW5mbyhtc2cpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmluZm8oYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ0luZm9TaW1wbGUobXNnKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7bXNnfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBtYXRjaFJ1bGVTaG9ydChzdHIsIHJ1bGUpIHtcclxuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBydWxlLnNwbGl0KCcqJykubWFwKGVzY2FwZVJlZ2V4KS5qb2luKCcuKicpICsgJyQnKS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXhwbGFuYXRpb24gY29kZVxyXG4gICAgbWF0Y2hSdWxlRXhwbChzdHIsIHJ1bGUpIHtcclxuICAgICAgICAvLyBmb3IgdGhpcyBzb2x1dGlvbiB0byB3b3JrIG9uIGFueSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0IGNoYXJhY3RlcnMgaXQgaGFzXHJcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XHJcblxyXG4gICAgICAgIC8vIFwiLlwiICA9PiBGaW5kIGEgc2luZ2xlIGNoYXJhY3RlciwgZXhjZXB0IG5ld2xpbmUgb3IgbGluZSB0ZXJtaW5hdG9yXHJcbiAgICAgICAgLy8gXCIuKlwiID0+IE1hdGNoZXMgYW55IHN0cmluZyB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzXHJcbiAgICAgICAgcnVsZSA9IHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJyk7XHJcblxyXG4gICAgICAgIC8vIFwiXlwiICA9PiBNYXRjaGVzIGFueSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgaXRcclxuICAgICAgICAvLyBcIiRcIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhhdCBpbiBmcm9udCBhdCB0aGUgZW5kIG9mIGl0XHJcbiAgICAgICAgcnVsZSA9ICdeJyArIHJ1bGUgKyAnJCc7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIG1hdGNoaW5nIHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChydWxlKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlXHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXNwb25zZVJlc3VsdEZyb21FeGNlcHRpb24oZXJyOiBhbnkpOiBSZXNwb25zZVJlc3VsdCB7XHJcbiAgICAgICAgcmV0dXJuIDxhbnk+e1xyXG4gICAgICAgICAgICBlcnJvcjogJ0VYQ0VQVElPTicsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnLFxyXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICBlcnJvckRldGFpbDogZXJyXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=