@wavemaker/app-ng-runtime 11.6.0-next.40753 → 11.6.0-next.41002

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 (97) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +1 -1
  2. app-ng-runtime/build-task/esm2020/data/form/form-field/form-field.build.mjs +2 -2
  3. app-ng-runtime/build-task/fesm2015/index.mjs +1 -1
  4. app-ng-runtime/build-task/fesm2015/index.mjs.map +1 -1
  5. app-ng-runtime/build-task/fesm2020/index.mjs +1 -1
  6. app-ng-runtime/build-task/fesm2020/index.mjs.map +1 -1
  7. app-ng-runtime/components/base/bundles/index.umd.js +1 -0
  8. app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +2 -1
  9. app-ng-runtime/components/base/fesm2015/index.mjs +1 -0
  10. app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
  11. app-ng-runtime/components/base/fesm2020/index.mjs +1 -0
  12. app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
  13. app-ng-runtime/components/chart/bundles/index.umd.js +4 -2
  14. app-ng-runtime/components/chart/esm2020/chart.component.mjs +4 -2
  15. app-ng-runtime/components/chart/esm2020/chart.utils.mjs +2 -2
  16. app-ng-runtime/components/chart/fesm2015/index.mjs +4 -2
  17. app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
  18. app-ng-runtime/components/chart/fesm2020/index.mjs +4 -2
  19. app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
  20. app-ng-runtime/components/data/form/bundles/index.umd.js +41 -27
  21. app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +28 -19
  22. app-ng-runtime/components/data/form/esm2020/form.component.mjs +19 -7
  23. app-ng-runtime/components/data/form/fesm2015/index.mjs +45 -27
  24. app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
  25. app-ng-runtime/components/data/form/fesm2020/index.mjs +45 -24
  26. app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
  27. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +2 -0
  28. app-ng-runtime/components/data/table/bundles/index.umd.js +3 -2
  29. app-ng-runtime/components/data/table/esm2020/table.component.mjs +4 -3
  30. app-ng-runtime/components/data/table/fesm2015/index.mjs +3 -2
  31. app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
  32. app-ng-runtime/components/data/table/fesm2020/index.mjs +3 -2
  33. app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
  34. app-ng-runtime/components/data/table/table.component.d.ts +1 -1
  35. app-ng-runtime/components/input/default/bundles/index.umd.js +55 -30
  36. app-ng-runtime/components/input/default/esm2020/caption-position.directive.mjs +2 -2
  37. app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +58 -35
  38. app-ng-runtime/components/input/default/fesm2015/index.mjs +56 -31
  39. app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
  40. app-ng-runtime/components/input/default/fesm2020/index.mjs +53 -31
  41. app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
  42. app-ng-runtime/components/input/default/select/select.component.d.ts +4 -1
  43. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +2 -2
  44. app-ng-runtime/components/input/epoch/bundles/index.umd.js +50 -25
  45. app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +36 -14
  46. app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +5 -5
  47. app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -5
  48. app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +7 -5
  49. app-ng-runtime/components/input/epoch/fesm2015/index.mjs +50 -25
  50. app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
  51. app-ng-runtime/components/input/epoch/fesm2020/index.mjs +50 -25
  52. app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
  53. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +15 -5
  54. app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +12 -4
  55. app-ng-runtime/components/navigation/menu/esm2020/menu.props.mjs +2 -1
  56. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +3 -3
  57. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.props.mjs +2 -1
  58. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +15 -5
  59. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
  60. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +15 -5
  61. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
  62. app-ng-runtime/components/navigation/menu/menu.component.d.ts +3 -0
  63. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +1 -0
  64. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +10 -9
  65. app-ng-runtime/components/navigation/popover/esm2020/popover.component.mjs +11 -10
  66. app-ng-runtime/components/navigation/popover/fesm2015/index.mjs +10 -9
  67. app-ng-runtime/components/navigation/popover/fesm2015/index.mjs.map +1 -1
  68. app-ng-runtime/components/navigation/popover/fesm2020/index.mjs +10 -9
  69. app-ng-runtime/components/navigation/popover/fesm2020/index.mjs.map +1 -1
  70. app-ng-runtime/components/prefab/bundles/index.umd.js +1 -0
  71. app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +2 -1
  72. app-ng-runtime/components/prefab/fesm2015/index.mjs +1 -0
  73. app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
  74. app-ng-runtime/components/prefab/fesm2020/index.mjs +1 -0
  75. app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
  76. app-ng-runtime/core/bundles/index.umd.js +2 -1
  77. app-ng-runtime/core/esm2020/utils/utils.mjs +3 -2
  78. app-ng-runtime/core/fesm2015/index.mjs +2 -1
  79. app-ng-runtime/core/fesm2015/index.mjs.map +1 -1
  80. app-ng-runtime/core/fesm2020/index.mjs +2 -1
  81. app-ng-runtime/core/fesm2020/index.mjs.map +1 -1
  82. app-ng-runtime/package.json +1 -1
  83. app-ng-runtime/runtime/base/bundles/index.umd.js +2 -0
  84. app-ng-runtime/runtime/base/esm2020/components/base-page.component.mjs +3 -1
  85. app-ng-runtime/runtime/base/fesm2015/index.mjs +2 -0
  86. app-ng-runtime/runtime/base/fesm2015/index.mjs.map +1 -1
  87. app-ng-runtime/runtime/base/fesm2020/index.mjs +2 -0
  88. app-ng-runtime/runtime/base/fesm2020/index.mjs.map +1 -1
  89. app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  90. app-ng-runtime/scripts/datatable/datatable.js +3 -3
  91. app-ng-runtime/variables/bundles/index.umd.js +13 -7
  92. app-ng-runtime/variables/esm2020/util/variable/variables.utils.mjs +14 -8
  93. app-ng-runtime/variables/fesm2015/index.mjs +13 -7
  94. app-ng-runtime/variables/fesm2015/index.mjs.map +1 -1
  95. app-ng-runtime/variables/fesm2020/index.mjs +13 -7
  96. app-ng-runtime/variables/fesm2020/index.mjs.map +1 -1
  97. app-ng-runtime/variables/util/variable/variables.utils.d.ts +1 -1
@@ -13,6 +13,7 @@ const REGEX = {
13
13
  IPOD: /iPod/i,
14
14
  IPAD: /iPad/i,
15
15
  MAC: /Mac/i,
16
+ MACINTEL: /MacIntel/i,
16
17
  ANDROID_TABLET: /android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i,
17
18
  MOBILE: /Mobile/i,
18
19
  WINDOWS: /Windows Phone/i,
@@ -56,7 +57,7 @@ export const isAndroidTablet = () => REGEX.ANDROID_TABLET.test(userAgent) && !((
56
57
  export const isIphone = () => REGEX.IPHONE.test(userAgent);
57
58
  export const isIpod = () => REGEX.IPOD.test(userAgent);
58
59
  export const isIpad = () => {
59
- return REGEX.IPAD.test(userAgent) || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 && REGEX.MAC.test(window.navigator.platform));
60
+ return REGEX.IPAD.test(userAgent) || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 && (REGEX.MAC.test(window.navigator.platform) || REGEX.MACINTEL.test(window.navigator.platform)));
60
61
  };
61
62
  export const isIos = () => isIphone() || isIpod() || isIpad();
62
63
  export const isLargeTabletLandscape = (landScapeWidth, landScapeHeight) => {
@@ -1463,4 +1464,4 @@ export const findViewParent = (lView) => {
1463
1464
  }
1464
1465
 
1465
1466
  }*/
1466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFZbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQUc7SUFDVixVQUFVLEVBQUUsUUFBUTtJQUNwQixPQUFPLEVBQUUsVUFBVTtJQUNuQixNQUFNLEVBQUUsU0FBUztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLElBQUksRUFBRSxPQUFPO0lBQ2IsR0FBRyxFQUFFLE1BQU07SUFDWCxjQUFjLEVBQUUsMkRBQTJEO0lBQzNFLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsc0JBQXNCLEVBQUUsaURBQWlEO0lBQ3pFLHFCQUFxQixFQUFFLDhHQUE4RztJQUNySSxzQkFBc0IsRUFBRSxvQ0FBb0M7SUFDNUQsc0JBQXNCLEVBQUUseUNBQXlDO0lBQ2pFLGtCQUFrQixFQUFFLG1DQUFtQztJQUN2RCxzQkFBc0IsRUFBRSxvQkFBb0I7SUFDNUMsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxhQUFhLEVBQUUsOEVBQThFO0lBQzdGLG1C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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyB9IGZyb20gJy4vd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHsgJHdhdGNoLCAkYXBwRGlnZXN0IH0gZnJvbSAnLi93YXRjaGVyJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IHNldEF0dHIgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyAkcGFyc2VFdmVudCB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuXG5kZWNsYXJlIGNvbnN0IF8sIFgySlM7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgIEFORFJPSURfVEFCTEVUOiAvYW5kcm9pZHxhbmRyb2lkIDMuMHx4b29tfHNjaC1pODAwfHBsYXlib29rfHRhYmxldHxraW5kbGUvaSxcbiAgICBNT0JJTEU6IC9Nb2JpbGUvaSxcbiAgICBXSU5ET1dTOiAvV2luZG93cyBQaG9uZS9pLFxuICAgIFNVUFBPUlRFRF9JTUFHRV9GT1JNQVQ6IC9cXC4oYm1wfGdpZnxqcGV8anBnfGpwZWd8dGlmfHRpZmZ8cGJtfHBuZ3xpY28pJC9pLFxuICAgIFNVUFBPUlRFRF9GSUxFX0ZPUk1BVDogL1xcLih0eHR8anN8Y3NzfGh0bWx8c2NyaXB0fHByb3BlcnRpZXN8anNvbnxqYXZhfHhtbHxzbWR8eG1pfHNxbHxsb2d8d3NkbHx2bXxmdGx8anJ4bWx8eW1sfHlhbWx8bWR8bGVzc3xqc3ApJC9pLFxuICAgIFNVUFBPUlRFRF9BVURJT19GT1JNQVQ6IC9cXC4obXAzfG9nZ3x3ZWJtfHdtYXwzZ3B8d2F2fG00YSkkL2ksXG4gICAgU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVDogL1xcLihtcDR8b2dnfHdlYm18d212fG1wZWd8bXBnfGF2aXxtb3YpJC9pLFxuICAgIFBBR0VfUkVTT1VSQ0VfUEFUSDogL15cXC9wYWdlc1xcLy4qXFwuKGpzfGNzc3xodG1sfGpzb24pJC8sXG4gICAgTUlOX1BBR0VfUkVTT1VSQ0VfUEFUSDogLy4qKHBhZ2UubWluLmh0bWwpJC8sXG4gICAgVkFMSURfRU1BSUw6IC9eW2EtekEtWl1bXFx3LitdK0BbYS16QS1aX10rP1xcLlthLXpBLVouXXsxLDR9W2EtekEtWl0kLyxcbiAgICBWQUxJRF9XRUJfVVJMOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9XRUJTT0NLRVRfVVJMOiAvXih3c1tzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfUkVMQVRJVkVfVVJMOiAvXig/IXd3d1xcLnwoPzpodHRwfGZ0cClzPzpcXC9cXC98W0EtWmEtel06XFxcXHxcXC9cXC8pLiovLFxuICAgIFJFUExBQ0VfUEFUVEVSTjogL1xcJFxceyhbXlxcfV0rKVxcfS9nLFxuICAgIFpJUF9GSUxFOiAvXFwuemlwJC9pLFxuICAgIEVYRV9GSUxFOiAvXFwuZXhlJC9pLFxuICAgIE5PX1FVT1RFU19BTExPV0VEOiAvXlteJ3xcIl0qJC8sXG4gICAgTk9fRE9VQkxFX1FVT1RFU19BTExPV0VEOiAvXlteXCJdKiQvLFxuICAgIFZBTElEX0hUTUw6IC88W2Etel1bXFxzXFxTXSo+L2ksXG4gICAgVkFMSURfUEFTU1dPUkQ6IC9eWzAtOWEtekEtWi1fLkAmKiEjJCVdKyQvLFxuICAgIFNQRUNJQUxfQ0hBUkFDVEVSUzogL1teQS1aMC05YS16X10rL2ksXG4gICAgQVBQX1NFUlZFUl9VUkxfRk9STUFUOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTlcXC5cXC1dKyhbOl0/WzAtOV17Miw1fXxcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSlcXC8rW14/IyY9XSskLyxcbiAgICBKU09OX0RBVEVfRk9STUFUOiAvXFxkezR9LVswLTFdXFxkLVswLTNdXFxkKFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZC5cXGR7MSwzfVokKT8vLFxuICAgIERBVEFfVVJMOiAvXlxccypkYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopXFxzKiQvaSxcbiAgICBJU09fREFURV9GT1JNQVQ6IC8oXFxkezR9LVxcZHsyfS1cXGR7Mn0pVChcXGR7Mn06XFxkezJ9OlxcZHsyfSkoXFwuXFxkKyk/KFsrLV1cXGR7Mn06P1xcZHsyfXxaKSQvXG59LFxuICAgIGNvbXBhcmVCeVNlcGFyYXRvciA9ICc6JztcblxuY29uc3QgTlVNQkVSX1RZUEVTID0gWydpbnQnLCBEYXRhVHlwZS5JTlRFR0VSLCBEYXRhVHlwZS5GTE9BVCwgRGF0YVR5cGUuRE9VQkxFLCBEYXRhVHlwZS5MT05HLCBEYXRhVHlwZS5TSE9SVCwgRGF0YVR5cGUuQllURSwgRGF0YVR5cGUuQklHX0lOVEVHRVIsIERhdGFUeXBlLkJJR19ERUNJTUFMXTtcbmNvbnN0IG5vdzogRGF0ZSA9IG5ldyBEYXRlKCk7XG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcblxuZXhwb3J0IGNvbnN0IGVudW0gRVZFTlRfTElGRSB7IE9OQ0UsIFdJTkRPVyB9XG5cbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSB2ID0+ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdiA9PiBudWxsICE9PSB2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IHRvQm9vbGVhbiA9ICh2YWwsIGlkZW50aXR5PykgPT4gKCh2YWwgJiYgdmFsICE9PSAnZmFsc2UnKSA/IHRydWUgOiAoaWRlbnRpdHkgPyB2YWwgPT09IGlkZW50aXR5IDogZmFsc2UpKTtcblxuZnVuY3Rpb24gaXNJRTExKCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignVHJpZGVudC8nKSA+IC0xO1xufVxuXG5leHBvcnQgY29uc3QgaXNJRSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNJRTExKCkgfHwgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAoKSA9PiBSRUdFWC5BTkRST0lELnRlc3QodXNlckFnZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZFRhYmxldCA9ICgpID0+IFJFR0VYLkFORFJPSURfVEFCTEVULnRlc3QodXNlckFnZW50KSAmJiAhKCgvVGFibGV0IFBDIDIuMC9pKS50ZXN0KHVzZXJBZ2VudCkpO1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAoKSA9PiBSRUdFWC5JUEhPTkUudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBvZCA9ICgpID0+IFJFR0VYLklQT0QudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBhZCA9ICgpID0+IHtcbiAgICByZXR1cm4gUkVHRVguSVBBRC50ZXN0KHVzZXJBZ2VudCkgfHwgKHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIgJiYgUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBfLmluY2x1ZGVzKHBhcmFtLCAnPScpID8gcGFyYW0uaW5kZXhPZignPScpIDogKHBhcmFtICYmIHBhcmFtLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IHBhcmFtLnN1YnN0cigwLCBpKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IHBhcmFtLnN1YnN0cihpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlID0gZm9yIHBhcmFtIG5hbWUgb25seSB3aGVuIHRoZSBwYXJhbSB2YWx1ZSBleGlzdHMgaW4gdGhlIGdpdmVuIHBhcmFtIG9yIGVtcHR5IHZhbHVlIGlzIGFzc2lnbmVkXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtVmFsdWUgfHwgXy5pbmNsdWRlcyhwYXJhbSwgJz0nKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRQYXJhbVZhbHVlID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVkUGFyYW1WYWx1ZSkgKyAnJic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyArPSBwYXJhbU5hbWUgKyAnJic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbmNvZGVkUGFyYW1zID0gZW5jb2RlZFBhcmFtcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShxdWVyeVBhcmFtc1N0cmluZywgZW5jb2RlZFBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8qIGNhcGl0YWxpemUgdGhlIGZpcnN0LWxldHRlciBvZiB0aGUgc3RyaW5nIHBhc3NlZCAqL1xuZXhwb3J0IGNvbnN0IGluaXRDYXBzID0gbmFtZSA9PiB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTtcbn07XG5cbi8qIGNvbnZlcnQgY2FtZWxDYXNlIHN0cmluZyB0byBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBzcGFjZVNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IG5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZShSRUdFWC5TTkFLRV9DQVNFLCBmdW5jdGlvbiAobGV0dGVyLCBwb3MpIHtcbiAgICAgICAgcmV0dXJuIChwb3MgPyAnICcgOiAnJykgKyBsZXR0ZXI7XG4gICAgfSk7XG59O1xuXG4vKlJlcGxhY2UgdGhlIGNoYXJhY3RlciBhdCBhIHBhcnRpY3VsYXIgaW5kZXgqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VBdCA9IChzdHJpbmcsIGluZGV4LCBjaGFyYWN0ZXIpID0+IHN0cmluZy5zdWJzdHIoMCwgaW5kZXgpICsgY2hhcmFjdGVyICsgc3RyaW5nLnN1YnN0cihpbmRleCArIGNoYXJhY3Rlci5sZW5ndGgpO1xuXG4vKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbmV4cG9ydCBjb25zdCBwZXJpb2RTZXBhcmF0ZSA9IG5hbWUgPT4ge1xuICAgIGxldCBkb3RJbmRleDtcbiAgICBkb3RJbmRleCA9IG5hbWUuaW5kZXhPZignLicpO1xuICAgIGlmIChkb3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCArIDEsIG5hbWUuY2hhckF0KGRvdEluZGV4ICsgMSkudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIG5hbWUgPSByZXBsYWNlQXQobmFtZSwgZG90SW5kZXgsICcgJyk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXR0aWZ5TGFiZWwgPSBsYWJlbCA9PiB7XG4gICAgbGFiZWwgPSBfLmNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghXy5pc0FycmF5KG5hbWVzKSkge1xuICAgICAgICBuYW1lc0FycmF5ID0gXy5zcGxpdChuYW1lcywgc2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICBtb2RpZmllZE5hbWVzID0gXy5tYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKF8uaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgcmV0dXJuIG1vZGlmaWVkTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllZE5hbWVzLmpvaW4oc2VwYXJhdG9yKTtcbn07XG5cbi8qKlxuICogdGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgaW5zZWN1cmUgY29udGVudCByZXF1ZXN0IGlzIGJlaW5nIG1hZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5zZWN1cmVDb250ZW50UmVxdWVzdCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXG4gICAgY29uc3QgcGFyc2VyOiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBwYXJzZXIuaHJlZiA9IHVybDtcblxuICAgIC8vIGZvciByZWxhdGl2ZSB1cmxzIElFIHJldHVybnMgdGhlIHByb3RvY29sIGFzIGVtcHR5IHN0cmluZ1xuICAgIGlmIChwYXJzZXIucHJvdG9jb2wgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaW5wdXR0ZWQgc291cmNlIGlzIGEgYmFzZTY0IHVybCwgZG8gbm90IHRocm93IGluc2VjdXJlIGNvbnRlbnQgZXJyb3JcbiAgICBpZiAoUkVHRVguREFUQV9VUkwudGVzdCh1cmwpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChsb2NhdGlvbi5ocmVmLCAnaHR0cHM6Ly8nKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnByb3RvY29sICE9PSAnaHR0cHM6JyAmJiBwYXJzZXIucHJvdG9jb2wgIT09ICd3c3M6JztcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdTdGFydHNXaXRoID0gKHN0cjogc3RyaW5nLCBzdGFydHNXaXRoOiBzdHJpbmcsIGlnbm9yZUNhc2U/KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ0V4ID0gbmV3IFJlZ0V4cCgnXicgKyBzdGFydHNXaXRoLCBpZ25vcmVDYXNlID8gJ2knIDogJycpO1xuXG4gICAgcmV0dXJuIHJlZ0V4LnRlc3Qoc3RyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFdmFsdWF0ZWRFeHByVmFsdWUgPSAob2JqZWN0LCBleHByZXNzaW9uKSA9PiB7XG4gICAgbGV0IHZhbDtcbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB3aXRoIHRoZSBzY29wZSBhbmQgb2JqZWN0LlxuICAgICAqICRldmFsIGlzIHVzZWQsIGFzIGV4cHJlc3Npb24gY2FuIGJlIGluIGZvcm1hdCBvZiBmaWVsZDEgKyAnICcgKyBmaWVsZDJcbiAgICAgKiAkZXZhbCBjYW4gZmFpbCwgaWYgZXhwcmVzc2lvbiBpcyBub3QgaW4gY29ycmVjdCBmb3JtYXQsIHNvIGF0dGVtcHQgdGhlIGV2YWwgZnVuY3Rpb25cbiAgICAgKi9cbiAgICB2YWwgPSBfLmF0dGVtcHQoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IGFyZ3NFeHByID0gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGB2YXIgJHtmaWVsZE5hbWV9ID0gZGF0YVsnJHtmaWVsZE5hbWV9J107YDtcbiAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICBjb25zdCBmID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgYCR7YXJnc0V4cHJ9IHJldHVybiAgJHtleHByZXNzaW9ufWApO1xuICAgICAgICByZXR1cm4gZihvYmplY3QpO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqICRldmFsIGZhaWxzIGlmIGZpZWxkIGV4cHJlc3Npb24gaGFzIHNwYWNlcy4gRXg6ICdmaWVsZCBuYW1lJyBvciAnZmllbGRAbmFtZSdcbiAgICAgKiBBcyBhIGZhbGxiYWNrLCBnZXQgdmFsdWUgZGlyZWN0bHkgZnJvbSBvYmplY3Qgb3Igc2NvcGVcbiAgICAgKi9cbiAgICBpZiAoXy5pc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gXy5nZXQob2JqZWN0LCBleHByZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8qIGZ1bmN0aW9ucyBmb3IgcmVzb3VyY2UgVGFiKi9cbmV4cG9ydCBjb25zdCBpc0ltYWdlRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBdWRpb0ZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9BVURJT19GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmlkZW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfVklERU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkV2ViVVJMID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5WQUxJRF9XRUJfVVJMKS50ZXN0KHVybCk7XG59O1xuXG4vKlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXJsIHRvIHRoZSByZXNvdXJjZSBhZnRlciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdXJsKi9cbmV4cG9ydCBjb25zdCBnZXRSZXNvdXJjZVVSTCA9ICh1cmxTdHJpbmcpID0+IHtcbiAgICBpZiAoaXNWYWxpZFdlYlVSTCh1cmxTdHJpbmcpKSB7XG4gICAgICAgIC8qVE9ETzogVXNlIERvbVNhbml0aXplciovXG4gICAgICAgIC8vIHJldHVybiBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybFN0cmluZyk7XG4gICAgfVxuICAgIHJldHVybiB1cmxTdHJpbmc7XG59O1xuXG4vKmZ1bmN0aW9uIHRvIGNoZWNrIGlmIGZuIGlzIGEgZnVuY3Rpb24gYW5kIHRoZW4gZXhlY3V0ZSovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckZuKGZuLCAuLi5hcmdtbnRzKSB7XG4gICAgLyogVXNlIG9mIHNsaWNlIG9uIGFyZ3VtZW50cyB3aWxsIG1ha2UgdGhpcyBmdW5jdGlvbiBub3Qgb3B0aW1pemFibGVcbiAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9PcHRpbWl6YXRpb24ta2lsbGVycyMzMi1sZWFraW5nLWFyZ3VtZW50c1xuICAgICogKi9cblxuICAgIGxldCBzdGFydCA9IDE7XG4gICAgY29uc3QgbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShsZW4gLSBzdGFydCk7XG4gICAgZm9yIChzdGFydDsgc3RhcnQgPCBsZW47IHN0YXJ0KyspIHtcbiAgICAgICAgYXJnc1tzdGFydCAtIDFdID0gYXJndW1lbnRzW3N0YXJ0XTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBmb3JtYXR0ZWQgZGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWF0dGVkRGF0ZSA9IChkYXRlUGlwZSwgZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZT8sIGlzVGltZVN0YW1wVHlwZT8sIGlzSW50ZXJ2YWxEYXRlVGltZT8sIGNvbXBJbnN0YW5jZT8pOiBhbnkgPT4ge1xuICAgIGlmICghZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLnZhbHVlT2YoKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnVVRDJykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZU9iaikudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodGltZVpvbmUpIHtcbiAgICAgICAgY29uc3QgbW9tZW50Rm9ybWF0ID0gZm9ybWF0LnJlcGxhY2VBbGwoJ3knLCAnWScpLnJlcGxhY2VBbGwoJ2QnLCAnRCcpLnJlcGxhY2UoJ2EnLCAnQScpO1xuICAgICAgICBpZiAoaXNJbnRlcnZhbERhdGVUaW1lICkgeyAvLyBkYXRlcyB3aGljaCBhcmUgb2YgdHlwZSB0aW1lIHdpZGdldCAodmFsdWUgaXMgaGg6bW06c3MpIGJ1dCByZXR1cm5lZCBhcyBkYXRlIHN0cmluZyBmcm9tIHRpbWUgY29tcFxuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUaW1lU3RhbXBUeXBlID09PSAnZGF0ZXRpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgIGRhdGVPYmogPSBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZVpvbmUsIGRhdGVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZSwgY29tcEluc3RhbmNlKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgZGF0ZSBoYXMgdGltZXpvbmUgaW5mb3JtYXRpb24gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNPZmZzZXRTdHIgPSAoZGF0ZVN0cikgPT4ge1xuICAgIGlmICh0eXBlb2YgZGF0ZVN0ciAhPT0gJ3N0cmluZycpIHJldHVybjtcbiAgICBjb25zdCBtYXRjaGVzID0gZGF0ZVN0ci5tYXRjaChSRUdFWC5JU09fREFURV9GT1JNQVQpO1xuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbNF0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIG1ldGhvZCB0byBnZXQgdGhlIGRhdGUgb2JqZWN0IGZyb20gdGhlIGlucHV0IHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlT2JqID0gKHZhbHVlLCBvcHRpb25zPywgdGltZXpvbmU/KTogRGF0ZSA9PiB7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgLy8gRml4IGZvciBXTVMtMTk2MDEsIGludmFsaWQgZGF0ZSBpcyByZXR1cm5lZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IF8uZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9ICBpc05hdGl2ZVBpY2tlciA/ICdZWVlZL01NL0REIEhIOm1tOnNzJyA6IG1vbWVudFBhdHRlcm4ob3B0aW9ucy5wYXR0ZXJuKTtcbiAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUsIHBhdHRlcm4pLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZSBvYmplY3QsIG5vIG5lZWQgdG8gY292ZXJ0IGl0Ki9cbiAgICBpZiAoXy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoIW1vbWVudCh2YWx1ZSkuaXNWYWxpZCgpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkYXRlT2JqID0gbmV3IERhdGUodmFsdWUpO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYgKF8uaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIHNlbGVjdGVkIGxvY2FsZSBpcyBBcmFiaWMsIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgZ2l2aW5nIGRhdGUgaW4gQXJhYmljIGxhbmd1YWdlXG4gICAgICAgICAqIChFeDogSWYgZGF0ZSB2YWx1ZSBpcyBcIjE5OTAtMTEtMjNcIiBhbmQgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBcItmh2anZqdmgLdmh2aEt2aLZo1TZoNmgOtmg2aA62aDZoCvZoNmlOtmj2aBcIilcbiAgICAgICAgICogYW5kIG5ldyBEYXRlKG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpIGlzIGdpdmluZyBJbnZhbGlkIERhdGUuIFNvIGZyc3QgY29udmVydGluZyBpdCB0byB0aW1lc3RhbXAgdmFsdWUuXG4gICAgICAgICovXG5cbiAgICAgICAgZGF0ZU9iaiA9ICF0aW1lem9uZSA/IG5ldyBEYXRlKG1vbWVudChtb21lbnQodmFsdWUpLmZvcm1hdCgpKS52YWx1ZU9mKCkpIDogZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWV6b25lLCB2YWx1ZSk7O1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gQ1VSUkVOVF9EQVRFIHx8IGlzTmFOKGRhdGVPYmouZ2V0RGF5KCkpKSB7XG4gICAgICAgIHJldHVybiBub3c7XG4gICAgfVxuICAgIHJldHVybiBkYXRlT2JqO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQgPSAoX2VsZW1lbnQ6IEVsZW1lbnQsIGV4Y2x1ZGVFbGVtZW50OiBFbGVtZW50LCBuYXRpdmVFbGVtZW50OiBFbGVtZW50LCBldmVudFR5cGUsIGlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQsIHN1Y2Nlc3NDQiwgbGlmZTogRVZFTlRfTElGRSwgaXNDYXB0dXJlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gX2VsZW1lbnQ7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXhjbHVkZUVsZW1lbnQgJiYgKGV4Y2x1ZGVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHwgZXhjbHVkZUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKCdpbnB1dCcpICYmICFpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlmZSA9PT0gRVZFTlRfTElGRS5PTkNFKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHN1Y2Nlc3NDQigpO1xuICAgIH07XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICBjb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBkZWVwIGNsb25lZCByZXBsaWNhIG9mIHRoZSBwYXNzZWQgb2JqZWN0L2FycmF5XG4gKiBAcGFyYW0gb2JqZWN0IG9iamVjdC9hcnJheSB0byBjbG9uZVxuICogQHJldHVybnMgYSBjbG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q2xvbmVkT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICAgIHJldHVybiBfLmNsb25lRGVlcChvYmplY3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzID0gKGZvcm1OYW1lLCBmaWVsZE5hbWUsIGlzTGlzdCkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gXy5nZXQoZG9jdW1lbnQuZm9ybXMsIFtmb3JtTmFtZSwgZmllbGROYW1lLCAnZmlsZXMnXSk7XG4gICAgcmV0dXJuIGlzTGlzdCA/IF8ubWFwKGZpbGVzLCBfLmlkZW50aXR5KSA6IGZpbGVzICYmIGZpbGVzWzBdO1xufTtcblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIqL1xuZnVuY3Rpb24gcmFuZG9tKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgZ3VpZCBiYXNlZCBvbiByYW5kb20gbnVtYmVycy4qL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlR1VJZCA9ICgpID0+IHtcbiAgICByZXR1cm4gcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKSArICctJyArIHJhbmRvbSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBpZiBnaXZlbiBhY2Nlc3Mgcm9sZSBpcyBpbiBjdXJyZW50IGxvZ2dlZGluIHVzZXIgYWNjZXNzIHJvbGVzXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjY2Vzc1JvbGVzID0gKHJvbGVFeHAsIGxvZ2dlZEluVXNlcikgPT4ge1xuICAgIGxldCByb2xlcztcblxuICAgIGlmIChyb2xlRXhwICYmIGxvZ2dlZEluVXNlcikge1xuXG4gICAgICAgIHJvbGVzID0gcm9sZUV4cCAmJiByb2xlRXhwLnNwbGl0KCcsJykubWFwKEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuXG4gICAgICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyb2xlcywgbG9nZ2VkSW5Vc2VyLnVzZXJSb2xlcykubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkSlNPTiA9IChjb250ZW50KSA9PiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEludFZhbHVlID0gcGFyc2VJbnQoY29udGVudCwgMTApO1xuICAgICAgICAvKm9idGFpbmluZyBqc29uIGZyb20gZWRpdG9yIGNvbnRlbnQgc3RyaW5nKi9cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpIHx8ICFpc05hTihwYXJzZWRJbnRWYWx1ZSkgPyBjb250ZW50IDogSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qdGVybWluYXRpbmcgZXhlY3V0aW9uIGlmIG5ldyB2YXJpYWJsZSBvYmplY3QgaXMgbm90IHZhbGlkIGpzb24uKi9cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgeG1sVG9Kc29uID0gKHhtbFN0cmluZykgPT4ge1xuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ2NvbnRlbnQnLCAnYXR0cmlidXRlUHJlZml4JzogJycsICdlbmFibGVUb1N0cmluZ0Z1bmMnOiBmYWxzZSB9KTtcbiAgICBsZXQganNvbiA9IHgyanNPYmoueG1sMmpzKHhtbFN0cmluZyk7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgICAganNvbiA9IF8uZ2V0KGpzb24sIE9iamVjdC5rZXlzKGpzb24pWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gZmluZCB0aGUgdmFsdWUgb2YgYSBrZXkgaW4gdGhlIG9iamVjdFxuICogaWYga2V5IG5vdCBmb3VuZCBhbmQgY3JlYXRlIGlzIHRydWUsIGFuIG9iamVjdCBpcyBjcmVhdGVkIGFnYWluc3QgdGhhdCBub2RlXG4gKiBFeGFtcGxlczpcbiAqIHZhciBhID0ge1xuICogIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfVxuICogfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMuZCcpIC0tPiAndGVzdCdcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jJykgLS0+IHtkOiAndGVzdCd9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnKSAtLT4gdW5kZWZpbmVkXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnLCB0cnVlKSAtLT4ge30gYW5kIGEgd2lsbCBiZWNvbWU6XG4gKiB7XG4gKiAgIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfSxcbiAqICBlOiB7XG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZmluZFZhbHVlT2YgPSAob2JqLCBrZXksIGNyZWF0ZT8pID0+IHtcblxuICAgIGlmICghb2JqIHx8ICFrZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlKSB7XG4gICAgICAgIHJldHVybiBfLmdldChvYmosIGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAga2V5cyA9IFtdO1xuXG4gICAgbGV0IHNraXBQcm9jZXNzaW5nO1xuXG4gICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnRzLmxlbmd0aCkgeyAvLyBpZiB0aGUgcGFydCBvZiBhIGtleSBpcyBub3QgdmFsaWQsIHNraXAgdGhlIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICBza2lwUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHBhcnQubWF0Y2goL1xcdysvZyk7XG4gICAgICAgIGxldCBzdWJQYXJ0O1xuXG4gICAgICAgIHdoaWxlIChzdWJQYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YlBhcnQgPSBzdWJQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAga2V5cy5wdXNoKHsgJ2tleSc6IHN1YlBhcnQsICd2YWx1ZSc6IHN1YlBhcnRzLmxlbmd0aCA/IFtdIDoge30gfSk7IC8vIGRldGVybWluZSB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBhcnJheSBvciBhbiBvYmplY3RcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNraXBQcm9jZXNzaW5nKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKChfa2V5KSA9PiB7XG4gICAgICAgIGxldCB0ZW1wT2JqID0gb2JqW19rZXkua2V5XTtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0ZW1wT2JqKSkge1xuICAgICAgICAgICAgdGVtcE9iaiA9IGdldFZhbGlkSlNPTih0ZW1wT2JqKTtcbiAgICAgICAgICAgIGlmICghdGVtcE9iaikge1xuICAgICAgICAgICAgICAgIHRlbXBPYmogPSBfa2V5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialtfa2V5LmtleV0gPSB0ZW1wT2JqO1xuICAgICAgICBvYmogPSB0ZW1wT2JqO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qXG4qIGV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGJpdCBmcm9tIGZ1bGwgdHlwZVJlZiBvZiBhIGZpZWxkXG4qIGUuZy4gcmV0dXJucyAnU3RyaW5nJyBmb3IgdHlwZVJlZiA9ICdqYXZhLmxhbmcuU3RyaW5nJ1xuKiBAcGFyYW1zOiB7dHlwZVJlZn0gdHlwZSByZWZlcmVuY2VcbiovXG5leHBvcnQgY29uc3QgZXh0cmFjdFR5cGUgPSAodHlwZVJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBsZXQgdHlwZTtcbiAgICBpZiAoIXR5cGVSZWYpIHtcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlNUUklORztcbiAgICB9XG4gICAgdHlwZSA9IHR5cGVSZWYgJiYgdHlwZVJlZi5zdWJzdHJpbmcodHlwZVJlZi5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgdHlwZSA9IHR5cGUgJiYgdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHR5cGUgPSB0eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FID8gRGF0YVR5cGUuREFURVRJTUUgOiB0eXBlO1xuICAgIHJldHVybiB0eXBlO1xufTtcblxuLyogcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkYXRhIHR5cGUgbWF0Y2hlcyBudW1iZXIgdHlwZSAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtYmVyVHlwZSA9ICh0eXBlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKE5VTUJFUl9UWVBFUy5pbmRleE9mKGV4dHJhY3RUeXBlKHR5cGUpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XG59O1xuXG4vKiBmdW5jdGlvbiB0byBjaGVjayBpZiBwcm92aWRlZCBvYmplY3QgaXMgZW1wdHkqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNPYmplY3Qob2JqKSAmJiAhXy5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBGdW5jdGlvbiBleHBlY3RzIGFuIGVsZW1lbnQgb24gd2hpY2ggdGhlIHNjcm9sbGluZyBzaG91bGQgYmUgYXBwbGllZCwgRGVwZW5kaW5nIG9uIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgc2Nyb2xsYmFyIHdpbGwgYmUgYWRqdXN0ZWRcbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBjb25zdCBmb3JtUG9zaXRpb24gPSAkZWxlbWVudC5vZmZzZXQoKS50b3A7XG4gICAgY29uc3QgJHNjcm9sbFBhcmVudCA9ICRlbGVtZW50LmNsb3Nlc3QoJ1t3bXNtb290aHNjcm9sbD1cInRydWVcIl0nKTtcbiAgICBpZiAoaXNNb2JpbGVBcHAoKSAmJiAkc2Nyb2xsUGFyZW50Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBpU2Nyb2xsID0gXy5nZXQoJHNjcm9sbFBhcmVudFswXSwgJ2lzY3JvbGwnKTtcbiAgICAgICAgbGV0IHRvID0gLShmb3JtUG9zaXRpb24gLSBpU2Nyb2xsLnkpO1xuICAgICAgICB0byA9IChpU2Nyb2xsLm1heFNjcm9sbFkgPiB0bykgPyBpU2Nyb2xsLm1heFNjcm9sbFkgOiB0bztcbiAgICAgICAgaVNjcm9sbC5zY3JvbGxUbygwLCB0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGZvcm1Qb3NpdGlvbixcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBGdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGluIHZpZXdwb3J0IG9yIG5vdFxuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluVmlld3BvcnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgICAgIHJlY3QubGVmdCA+PSAwICYmXG4gICAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgICAgcmVjdC5yaWdodCA8PSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxuICAgICk7XG59XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIHBhZ2VhYmxlIG9iamVjdCBvciBub3QuKi9cbmV4cG9ydCBjb25zdCBpc1BhZ2VhYmxlID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgcGFnZWFibGUgPSB7XG4gICAgICAgICdjb250ZW50JzogW10sXG4gICAgICAgICdmaXJzdCc6IHRydWUsXG4gICAgICAgICdsYXN0JzogdHJ1ZSxcbiAgICAgICAgJ251bWJlcic6IDAsXG4gICAgICAgICdudW1iZXJPZkVsZW1lbnRzJzogMTAsXG4gICAgICAgICdzaXplJzogMjAsXG4gICAgICAgICdzb3J0JzogbnVsbCxcbiAgICAgICAgJ3RvdGFsRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3RvdGFsUGFnZXMnOiAxXG4gICAgfTtcbiAgICAvLyBwYWdpbmF0ZWQgb2JqZWN0IG1heSBvciBtYXkgbm90IGNvbnRhaW4gJ2VtcHR5JyBwcm9wZXJ0eS4gSW4gZWl0aGVyIGNhc2UsIFBhZ2VhYmxlIHNob3VsZCByZXR1cm4gYXMgdHJ1ZS5cbiAgICBjb25zdCBwYWdpbmF0ZWRPYmogPSBfLm9taXQob2JqLCAnZW1wdHknKTtcbiAgICByZXR1cm4gKF8uaXNFcXVhbChfLmtleXMocGFnZWFibGUpLCBfLmtleXMocGFnaW5hdGVkT2JqKS5zb3J0KCkpKTtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byByZXBsYWNlIHBhdHRlcm5zIGluIHN0cmluZyB3aXRoIG9iamVjdCBrZXlzIG9yIGFycmF5IHZhbHVlc1xuICogRXhhbXBsZXM6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHtmaXJzdH0gJHtsYXN0fSAhJywge2ZpcnN0OiAnd2F2ZW1ha2VyJywgbGFzdDogJ25nJ30pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHswfSAkezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBFeGFtcGxlcyBpZiBwYXJzZUVycm9yIGlzIHRydWU6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgezB9IHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9ICh0ZW1wbGF0ZSwgbWFwLCBwYXJzZUVycm9yPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZWdFeCA9IFJFR0VYLlJFUExBQ0VfUEFUVEVSTjtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgcmVnRXggPSAvXFx7KFteXFx9XSspXFx9L2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnRXgsIGZ1bmN0aW9uIChtYXRjaCwga2V5KSB7XG4gICAgICAgIHJldHVybiBfLmdldChtYXAsIGtleSk7XG4gICAgfSk7XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRhdGUgdGltZSB0eXBlKi9cbmV4cG9ydCBjb25zdCBpc0RhdGVUaW1lVHlwZSA9IHR5cGUgPT4ge1xuICAgIGlmIChfLmluY2x1ZGVzKHR5cGUsICcuJykpIHtcbiAgICAgICAgdHlwZSA9IF8udG9Mb3dlcihleHRyYWN0VHlwZSh0eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBfLmluY2x1ZGVzKFtEYXRhVHlwZS5EQVRFLCBEYXRhVHlwZS5USU1FLCBEYXRhVHlwZS5USU1FU1RBTVAsIERhdGFUeXBlLkRBVEVUSU1FLCBEYXRhVHlwZS5MT0NBTERBVEVUSU1FXSwgdHlwZSk7XG59O1xuXG5jb25zdCBtb21lbnRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAoXy5pbmNsdWRlcyhwYXR0ZXJuLCAnRScpKSB7XG4gICAgICAgcGF0dGVybiA9ICBfLnJlcGxhY2UocGF0dGVybiwgL0VbLF0/L2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIF8ucmVwbGFjZShwYXR0ZXJuLCAveSpkKi9nLCAodmFsKSA9PiB2YWwudG9VcHBlckNhc2UoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGRhdGUgb2JqZWN0LiBJZiB2YWwgaXMgdW5kZWZpbmVkIGl0IHJldHVybnMgaW52YWxpZCBkYXRlICovXG5leHBvcnQgY29uc3QgZ2V0VmFsaWREYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgIGNvbnN0IGRlZmF1bHRNZXJpZGlhbiA9IFsnQU0nLCAnUE0nXTtcbiAgIGNvbnN0IG1vbWVudE1lcmlkaWFuID0gbW9tZW50KCkuX2xvY2FsZS5tZXJpZGllbSgpO1xuICAgIC8vIFVwZGF0aW5nIGxvY2FsaXplZCBtZXJpZGlhbnMgd2l0aCBkZWZhdWx0IG1lcmlkaWFucyB3aGVuIG1vbWVudCBtZXJpZGlhbiBpcyBub3QgZGVmaW5lZFxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWVyaWRpYW5zICYmIF8uaW5jbHVkZXMoZGVmYXVsdE1lcmlkaWFuLCBtb21lbnRNZXJpZGlhbikpIHtcbiAgICAgICAgXy5mb3JFYWNoKG9wdGlvbnMubWVyaWRpYW5zLCAobWVyaWRpYW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyh2YWwsIG1lcmlkaWFuKSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKG1lcmlkaWFuLCBkZWZhdWx0TWVyaWRpYW5baW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBfLmdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgY29uc3QgcGF0dGVybiA9IGlzTmF0aXZlUGlja2VyID8gKF8uZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykgfHwgICdZWVlZL01NL0REIEhIOm1tOnNzJykgOiAobW9tZW50UGF0dGVybihfLmdldChvcHRpb25zLCAncGF0dGVybicpKSB8fCAnJyk7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgaWYgKCFpc05hTigobmV3IERhdGUodmFsKSkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB2YWwgaXMgYSB2YWxpZCBkYXRlIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgaU9TLCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGZvcm1hdCB0byBjb25zaWRlciBldmVuIHRoZSBzZWNvbmRzLlxuICAgICAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gbW9tZW50KG5ldyBEYXRlKHZhbCksIHBhdHRlcm4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCwgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gdmFsLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChtb21lbnQodmFsLCBwYXR0ZXJuKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgLy8gZGF0ZSB3aXRoICs1IGhvdXJzIGlzIHJldHVybmVkIGluIHNhZmFyaSBicm93c2VyIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGRhdGUuXG4gICAgICAgIC8vIEhlbmNlIGNvbnZlcnRpbmcgdGhlIGRhdGUgdG8gdGhlIHN1cHBvcnRlZCBmb3JtYXQgXCJZWVlZL01NL0REIEhIOm1tOnNzXCIgaW4gSU9TXG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobW9tZW50KHZhbCkudmFsdWVPZigpKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgICB2YWwgPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvKmlmIHRoZSB2YWx1ZSBpcyBpbiBISDptbTpzcyBmb3JtYXQsIGl0IHJldHVybnMgYSB3cm9uZyBkYXRlLiBTbyBhcHBlbmQgdGhlIGRhdGUgdG8gdGhlIGdpdmVuIHZhbHVlIHRvIGdldCBkYXRlKi9cbiAgICAgICAgaWYgKCEobmV3IERhdGUodmFsKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQoKG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpICsgJyAnICsgdmFsKSwgJ1lZWVktTU0tREQgSEg6bW06c3MgQScpO1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG1vbWVudCh2YWwpLnZhbHVlT2YoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGphdmFzY3JpcHQgZGF0ZSBvYmplY3QqL1xuZXhwb3J0IGNvbnN0IGdldE5hdGl2ZURhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgIHZhbCA9IGdldFZhbGlkRGF0ZU9iamVjdCh2YWwsIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xufTtcblxuXG4vKipcbiAqIHByZXBhcmUgYSBibG9iIG9iamVjdCBiYXNlZCBvbiB0aGUgY29udGVudCBhbmQgY29udGVudCB0eXBlIHByb3ZpZGVkXG4gKiBpZiBjb250ZW50IGlzIGJsb2IgaXRzZWxmLCBzaW1wbHkgcmV0dXJucyBpdCBiYWNrXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gdmFsQ29udGVudFR5cGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmxvYiA9ICh2YWwsIHZhbENvbnRlbnRUeXBlPykgPT4ge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGNvbnN0IGpzb25WYWwgPSBnZXRWYWxpZEpTT04odmFsKTtcbiAgICBpZiAoanNvblZhbCAmJiBqc29uVmFsIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShqc29uVmFsKV0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFt2YWxdLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICd0ZXh0L3BsYWluJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgYnkgY29tcGFyaW5nIHR3byBvYmplY3RzIGJhc2VkIG9uIHRoZSBmaWVsZHNcbiAqIEBwYXJhbSBvYmoxIG9iamVjdFxuICogQHBhcmFtIG9iajIgb2JqZWN0XG4gKiBAcGFyYW0gY29tcGFyZUJ5IHN0cmluZyBmaWVsZCB2YWx1ZXMgdG8gY29tcGFyZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgb2JqZWN0IGVxdWFsaXR5IHJldHVybnMgdHJ1ZSBiYXNlZCBvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWxXaXRoRmllbGRzID0gKG9iajEsIG9iajIsIGNvbXBhcmVCeSkgPT4ge1xuICAgIC8vIGNvbXBhcmVCeSBjYW4gYmUgJ2lkJyBvciAnaWQxLCBpZDInIG9yICdpZDEsIGlkMjppZDMnXG4gICAgLy8gU3BsaXQgdGhlIGNvbXBhcmVieSBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzXG4gICAgbGV0IF9jb21wYXJlQnkgPSBfLmlzQXJyYXkoY29tcGFyZUJ5KSA/IGNvbXBhcmVCeSA6IF8uc3BsaXQoY29tcGFyZUJ5LCAnLCcpO1xuXG4gICAgX2NvbXBhcmVCeSA9IF8ubWFwKF9jb21wYXJlQnksIF8udHJpbSk7XG5cbiAgICByZXR1cm4gXy5pc0VxdWFsV2l0aChvYmoxLCBvYmoyLCBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICAgIHJldHVybiBfLmV2ZXJ5KF9jb21wYXJlQnksIGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbGV0IGNiMSwgY2IyLCBfY2I7XG5cbiAgICAgICAgICAgIC8vIElmIGNvbXBhcmVieSBjb250YWlucyA6ICwgY29tcGFyZSB0aGUgdmFsdWVzIGJ5IHRoZSBrZXlzIG9uIGVpdGhlciBzaWRlIG9mIDpcbiAgICAgICAgICAgIGlmIChfLmluZGV4T2YoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2IxID0gY2IyID0gXy50cmltKGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX2NiID0gXy5zcGxpdChjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBjYjEgPSBfLnRyaW0oX2NiWzBdKTtcbiAgICAgICAgICAgICAgICBjYjIgPSBfLnRyaW0oX2NiWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KG8xLCBjYjEpID09PSBfLmdldChvMiwgY2IyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXROb2RlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1N0eWxlU2hlZXRMb2FkZWQgPSBocmVmID0+ICEhZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuXG4vLyBmdW5jdGlvbiB0byByZW1vdmUgc3R5bGVzaGVldCBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgcmVtb3ZlU3R5bGVTaGVldCA9IGhyZWYgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICB9XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIGEgc3R5bGVzaGVldFxuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0ID0gKHVybCwgYXR0cikgPT4ge1xuICAgIGlmIChpc1N0eWxlU2hlZXRMb2FkZWQodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIC8vIFRvIGFkZCBhdHRyaWJ1dGVzIHRvIGxpbmsgdGFnXG4gICAgaWYgKGF0dHIgJiYgYXR0ci5uYW1lKSB7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICByZXR1cm4gbGluaztcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzaGVldHNcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldHMgPSAodXJscyA9IFtdKSA9PiB7XG4gICAgLy8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheSwgY29udmVydCBpdCB0byBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkge1xuICAgICAgICB1cmxzID0gW3VybHNdO1xuICAgIH1cbiAgICB1cmxzLmZvckVhY2gobG9hZFN0eWxlU2hlZXQpO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTY3JpcHRMb2FkZWQgPSBzcmMgPT4gISFnZXROb2RlKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdLCBzY3JpcHRbZGF0YS1zcmM9XCIke3NyY31cIl1gKTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbWVudExvY2FsZU9iamVjdCA9ICh0aW1lWm9uZSwgZGF0ZU9iaj8pID0+IHtcbiAgICBpZiAoZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KGRhdGVPYmopLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0ID0gYXN5bmMgKHVybCwgbG9hZFZpYVNjcmlwdFRhZywgY2FjaGVhYmxlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBfdXJsID0gdXJsLnRyaW0oKTtcbiAgICBpZiAoIV91cmwubGVuZ3RoIHx8IGlzU2NyaXB0TG9hZGVkKF91cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAobG9hZFZpYVNjcmlwdFRhZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUpIHsgIC8vSUVcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7ICAvL090aGVyIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKGNhY2hlYWJsZSkge1xuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSkuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAkLmdldFNjcmlwdCh1cmwpXG4gICAgICAgICAgICAuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0cyA9IGFzeW5jICh1cmxzID0gW10sIGxvYWRWaWFTY3JpcHRUYWcgPSB0cnVlKSA9PiB7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0KHVybCwgbG9hZFZpYVNjcmlwdFRhZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbmV4cG9ydCBsZXQgX1dNX0FQUF9QUk9KRUNUOiBhbnkgPSB7fTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGxldCBpdGVtOiBhbnkgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgIH1cbiAgICBpdGVtW2tleV0gPSB2YWx1ZTtcblxuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCwgSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSBrZXkgPT4ge1xuICAgIC8vIHNhbml0eSBjaGVjayBmb3IgdGhpcyB0byB3b3JrIHdpdGggbmctY29kZWdlblxuICAgIGxldCBpdGVtID0gd2luZG93ICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoLi4uYXJncykgPT4geyB9O1xuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHYgPT4gXy5pc0FycmF5KHYpO1xuXG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSB2ID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJztcblxuZXhwb3J0IGNvbnN0IGlzTnVtYmVyID0gdiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG5cbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSB2ID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoXG4gKiBAcGFyYW0gZmlsZXBhdGhcbiAqIEByZXR1cm5zIHByb21pc2UgaGF2aW5nIGJsb2Igb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9CbG9iID0gKGZpbGVwYXRoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIGZpbGUgZW50cnkgZnJvbSB0aGUgZmlsZSBVUkxcbiAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChmaWxlcGF0aCwgZnVuY3Rpb24gKGZpbGVFbnRyeSkge1xuICAgICAgICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaWxlIGhhcyB0aGUgY29yZG92YSBmaWxlIHN0cnVjdHVyZS4gVG8gc3VibWl0IHRvIHRoZSBiYWNrZW5kLCBjb252ZXJ0IHRoaXMgZmlsZSB0byBqYXZhc2NyaXB0IGZpbGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0Jsb2IgPSBuZXcgQmxvYihbcmVhZGVyLnJlc3VsdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogZmlsZS50eXBlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgJ2Jsb2InOiBpbWdCbG9iLCAnZmlsZXBhdGgnOiBmaWxlcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0NvcmRvdmEgPSAoKSA9PiB7XG4gICAgcmV0dXJuICEhd2luZG93Wydjb3Jkb3ZhJ107XG59O1xuXG5leHBvcnQgY29uc3QgQXBwQ29uc3RhbnRzID0ge1xuICAgIElOVF9NQVhfVkFMVUU6IDIxNDc0ODM2NDdcbn07XG5cbmV4cG9ydCBjb25zdCBvcGVuTGluayA9IChsaW5rOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gJ19zZWxmJykgPT4ge1xuICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgXy5zdGFydHNXaXRoKGxpbmssICcjJykpIHtcbiAgICAgICAgbG9jYXRpb24uaGFzaCA9IGxpbms7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93Lm9wZW4obGluaywgdGFyZ2V0KTtcbiAgICB9XG59O1xuXG4vKiB1dGlsIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIGNvbnRlbnQgZnJvbSBhIHVybCAqL1xuZXhwb3J0IGNvbnN0IGZldGNoQ29udGVudCA9IChkYXRhVHlwZSwgdXJsOiBzdHJpbmcsIGluU3luYzogYm9vbGVhbiA9IGZhbHNlLCBzdWNjZXNzPywgZXJyb3I/KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gJC5hamF4KHsgdHlwZTogJ2dldCcsIGRhdGFUeXBlOiBkYXRhVHlwZSwgdXJsOiB1cmwsIGFzeW5jOiAhaW5TeW5jIH0pXG4gICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHN1Y2Nlc3MgJiYgc3VjY2VzcyhyZXNwb25zZSkpXG4gICAgICAgIC5mYWlsKHJlYXNvbiA9PiBlcnJvciAmJiBlcnJvcihyZWFzb24pKTtcbn07XG5cbi8qKlxuICogSWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIHByb21pc2UsIHRoZW4gb2JqZWN0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD4gfCBUfSBhXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cbiAqL1xuZXhwb3J0IGNvbnN0IHRvUHJvbWlzZSA9IDxUPihhOiBUIHwgUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4ge1xuICAgIGlmIChhIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEgYXMgVCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGludm9rZXMgdGhlIGdpdmVuIHRoZSBmdW5jdGlvbiAoZm4pIHVudGlsIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMgb3IgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiByZXRyaWVzIGlzIHJlYWNoZWQgb3Igb25CZWZvcmVSZXRyeSByZXR1cm5zIGZhbHNlLlxuICpcbiAqIEBwYXJhbSBmbiAtIGEgZnVuY3Rpb24gdGhhdCBpcyBuZWVkcyB0byBiZSBpbnZva2VkLiBUaGUgZnVuY3Rpb24gY2FuIGFsc28gcmV0dXJuIGEgcHJvbWlzZSBhcyB3ZWxsLlxuICogQHBhcmFtIGludGVydmFsIC0gbWluaW11bSB0aW1lIGdhcCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAwLlxuICogQHBhcmFtIG1heFJldHJpZXMgLSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4gRm9yIGFsbCBvdGhlciB2YWx1ZXMsXG4gKiBtYXhSZXRyaWVzIGlzIGluZmluaXR5LlxuICogQHBhcmFtIG9uQmVmb3JlUmV0cnkgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSByZS1pbnZva2luZyBhZ2Fpbi4gVGhpcyBmdW5jdGlvbiBjYW5cbiAqIHJldHVybiBmYWxzZSBvciBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB0byBmYWxzZSB0byBzdG9wIGZ1cnRoZXIgcmV0cnkgYXR0ZW1wdHMuXG4gKiBAcmV0dXJucyB7Kn0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBmbiBpcyBzdWNjZXNzIChvcikgbWF4aW11bSByZXRyeSBhdHRlbXB0cyByZWFjaGVkXG4gKiAob3IpIG9uQmVmb3JlUmV0cnkgcmV0dXJuZWQgZmFsc2UuXG4gKi9cbmV4cG9ydCBjb25zdCByZXRyeUlmRmFpbHMgPSAoZm46ICgpID0+IGFueSwgaW50ZXJ2YWw6IG51bWJlciwgbWF4UmV0cmllczogbnVtYmVyLCBvbkJlZm9yZVJldHJ5ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSkgPT4ge1xuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICBjb25zdCB0cnlGbiA9ICgpID0+IHtcbiAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIG1heFJldHJpZXMgPSAoXy5pc051bWJlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID4gMCA/IG1heFJldHJpZXMgOiAwKTtcbiAgICBpbnRlcnZhbCA9IChfLmlzTnVtYmVyKGludGVydmFsKSAmJiBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IDApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9Qcm9taXNlPGJvb2xlYW4+KG9uQmVmb3JlUmV0cnkoKSkudGhlbihmdW5jdGlvbiAocmV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5ICE9PSBmYWxzZSAmJiAoIW1heFJldHJpZXMgfHwgcmV0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAoKSA9PiByZWplY3QoZXJyQXJncykpO1xuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB9O1xuICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBvZiBhIGRlZmVyIGNyZWF0ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbiwgaGFzIGFib3J0IGZ1bmN0aW9uIHRoYXQgd2lsbCByZWplY3QgdGhlIGRlZmVyIHdoZW4gY2FsbGVkLlxuICogQHJldHVybnMgeyp9IGFuZ3VsYXIgZGVmZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBYm9ydGFibGVEZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBfZGVmZXI6IGFueSA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVqZWN0OiBudWxsLFxuICAgICAgICByZXNvbHZlOiBudWxsLFxuICAgICAgICBvbkFib3J0OiAoKSA9PiB7IH0sXG4gICAgICAgIGlzQWJvcnRlZDogZmFsc2VcbiAgICB9O1xuICAgIF9kZWZlci5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBfZGVmZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIF9kZWZlci5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgX2RlZmVyLnByb21pc2UuYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRyaWdnZXJGbihfZGVmZXIub25BYm9ydCk7XG4gICAgICAgIF9kZWZlci5yZWplY3QoJ2Fib3J0ZWQnKTtcbiAgICAgICAgX2RlZmVyLmlzQWJvcnRlZCA9IHRydWU7XG4gICAgfTtcbiAgICByZXR1cm4gX2RlZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNTU1J1bGUgPSAocnVsZVNlbGVjdG9yOiBzdHJpbmcsIHJ1bGVzOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKGAke3J1bGVTZWxlY3Rvcn0geyAke3J1bGVzfSB9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKGxpbmspID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAvLyBJZiB1cmwgcGFyYW1zIGFyZSBwcmVzZW50LCBjb25zdHJ1Y3QgcGFyYW1zIG9iamVjdCBhbmQgcGFzcyBpdCB0byBzZWFyY2hcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLnNwbGl0KGxpbmsuc3Vic3RyaW5nKGluZGV4ICsgMSwgbGluay5sZW5ndGgpLCAnJicpO1xuICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgcGFyYW0gPSBfLnNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICAgICAgcGFyYW1zW3BhcmFtWzBdXSA9IHBhcmFtWzFdO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3V0ZU5hbWVGcm9tTGluayA9IChsaW5rKSA9PiB7XG4gICAgbGluayA9IGxpbmsucmVwbGFjZSgnIy8nLCAnLycpO1xuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbGluaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwcGxlUHJvZHVjdCA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuZXhwb3J0IGNvbnN0IGRlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG5vb3AsXG4gICAgICAgIHJlamVjdDogbm9vcFxuICAgIH07XG4gICAgZC5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBkLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBkLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICByZXR1cm4gZDtcbn07XG5cbi8qXG4gKiBJbnZva2VzIHRoZSBnaXZlbiBsaXN0IG9mIGZ1bmN0aW9ucyBzZXF1ZW50aWFsbHkgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBJZiBhIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9taXNlLFxuICogdGhlbiBuZXh0IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmx5IGlmIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICovXG5leHBvcnQgY29uc3QgZXhlY3V0ZVByb21pc2VDaGFpbiA9IChmbnMsIGFyZ3MsIGQ/LCBpPykgPT4ge1xuICAgIGQgPSBkIHx8IGRlZmVyKCk7XG4gICAgaSA9IGkgfHwgMDtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBmbnMgPSBfLmZpbHRlcihmbnMsIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgcmV0dXJuICEoXy5pc1VuZGVmaW5lZChmbikgfHwgXy5pc051bGwoZm4pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmbnMgJiYgaSA8IGZucy5sZW5ndGgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRvUHJvbWlzZShmbnNbaV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBleGVjdXRlUHJvbWlzZUNoYWluKGZucywgYXJncywgZCwgaSArIDEpLCBkLnJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGQucmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZC5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBkLnByb21pc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0d28gZGF0YSBzb3VyY2VzIGFuZCB3aWxsIGNoZWNrIGlmIGJvdGggYXJlIHNhbWUgYnkgY29tcGFyaW5nIHRoZSB1bmlxdWUgaWQgYW5kXG4gKiBjb250ZXh0IGluIHdoaWNoIGRhdGFzb3VyY2VzIGFyZSBwcmVzZW50XG4gKiBAcmV0dXJucyB7Kn0gYm9vbGVhbiB0cnVlLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNEYXRhU291cmNlRXF1YWwgPSAoZDEsIGQyKSA9PiB7XG4gICAgcmV0dXJuIGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSA9PT0gZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpICYmXG4gICAgICAgIF8uaXNFcXVhbChkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpLCBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpKTtcbn07XG5cbi8qKlxuICogY2hlY2tzIGlmIHRoZSBwYXNzZWQgZGF0YXNvdXJjZSBjb250ZXh0IG1hdGNoZXMgd2l0aCBwYXNzZWQgY29udGV4dFxuICogQHBhcmFtIGRzLCBkYXRhc291cmNlIGhhdmluZyBhIGNvbnRleHRcbiAqIEBwYXJhbSBjdHgsIGNvbnRleHQgdG8gY29tcGFyZSB3aXRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YVNvdXJjZUN0eCA9IChkcywgY3R4KSA9PiB7XG4gICAgcmV0dXJuIGRzLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikgPT09IGN0eDtcbn07XG5cbi8qKlxuICogVGhpcyB0cmF2ZXJzZXMgdGhlIGZpbHRlcmV4cHJlc3Npb25zIG9iamVjdCByZWN1cnNpdmVseSBhbmQgcHJvY2VzcyB0aGUgYmluZCBzdHJpbmcgaWYgYW55IGluIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSBvYmplY3RcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gY29udGV4dCBzY29wZSBvZiB0aGUgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSA9IChjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucywgdmFyaWFibGU/KSA9PiB7XG4gICAgY29uc3QgZGVzdHJveUZuID0gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lciA/IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIuYmluZChjb250ZXh0KSA6IF8ubm9vcDtcbiAgICBjb25zdCBmaWx0ZXIkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJpbmRGaWxFeHBPYmogPSAob2JqLCB0YXJnZXROb2RlS2V5KSA9PiB7XG4gICAgICAgY29uc3QgbGlzdGVuZXIgPSAobmV3VmFsLCBvbGRWYWwpID0+IHtcbiAgICAgICAgICAgIGlmICgobmV3VmFsID09PSBvbGRWYWwgJiYgXy5pc1VuZGVmaW5lZChuZXdWYWwpKSB8fCAoXy5pc1VuZGVmaW5lZChuZXdWYWwpICYmICFfLmlzVW5kZWZpbmVkKG9sZFZhbCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICAgaWYgKCFfLmluY2x1ZGVzKFsnYmxvYicsICdmaWxlJ10sIG9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGdldENsb25lZE9iamVjdChuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogd2hlcmUgd2UgYXJlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGJpbmQgY29tcGxldGUgb2JqZWN0XG4gICAgICAgICAgICBpZiAob2JqLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZXhpc3RpbmcgZGF0YWJpbmRpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzID0gW107XG4gICAgICAgICAgICAgICAgLy8gbm93IGFkZCBhbGwgdGhlIHJldHVybmVkIHZhbHVlc1xuICAgICAgICAgICAgICAgIF8uZm9yRWFjaChuZXdWYWwsIGZ1bmN0aW9uICh2YWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCc6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21hdGNoTW9kZSc6IG9iai5tYXRjaE1vZGUgfHwgJ3N0YXJ0aWdub3JlY2FzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJydcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdmFsdWUgdG8gdGhlIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIG9ialt0YXJnZXROb2RlS2V5XSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlciQubmV4dCh7IGZpbHRlckV4cHJlc3Npb25zLCBuZXdWYWwgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChvYmpbdGFyZ2V0Tm9kZUtleV0sICdiaW5kOicpKSB7XG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBuZWVkcyBhIGNoZWNrLCB3aGVyZSBpcyB0aGlzIHVzZWRcbiAgICAgICAgICAgIGRlc3Ryb3lGbihcbiAgICAgICAgICAgICAgICAkd2F0Y2gob2JqW3RhcmdldE5vZGVLZXldLnJlcGxhY2UoJ2JpbmQ6JywgJycpLCBjb250ZXh0LCB7fSwgdmFyaWFibGUgPyB2YXJpYWJsZS5pbnZva2VPbkZpbHRlcnRFeHByZXNzaW9uQ2hhbmdlLmJpbmQodmFyaWFibGUsIG9iaiwgdGFyZ2V0Tm9kZUtleSkgOiBsaXN0ZW5lciwgdW5kZWZpbmVkLCBmYWxzZSwgeyBhcnJheVR5cGU6IF8uaW5jbHVkZXMoWydpbicsICdub3RpbiddLCBvYmoubWF0Y2hNb2RlKSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgPT4ge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMucnVsZXMpIHtcbiAgICAgICAgICAgIF8uZm9yRWFjaChleHByZXNzaW9ucy5ydWxlcywgKGZpbEV4cE9iaiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoucnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWxFeHBPYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoubWF0Y2hNb2RlID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAnc2Vjb25kdmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsdGVyRXhwcmVzc2lvbnMpO1xuXG4gICAgcmV0dXJuIGZpbHRlciQ7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCB3aWxsIHNldCB0aGUgZ2l2ZW4gcHJvdG8gb24gdGhlIHRhcmdldFxuZXhwb3J0IGNvbnN0IGV4dGVuZFByb3RvID0gKHRhcmdldCwgcHJvdG8pID0+IHtcbiAgICBsZXQgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90byk7XG4gICAgICAgIC8vIHJldHVybiBpZiB0aGUgcHJvdG90eXBlIG9mIGNyZWF0ZWQgY29tcG9uZW50IGFuZCBwcm90b3R5cGUgb2YgY29udGV4dCBhcmUgc2FtZVxuICAgICAgICBpZiAocHJvdG8gPT09IF9wcm90bykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfcHJvdG8sIHByb3RvKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFeHRyYVNsYXNoZXMgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgY29uc3QgYmFzZTY0cmVnZXggPSAvXmRhdGE6aW1hZ2VcXC8oW2Etel17Mix9KTtiYXNlNjQsLztcbiAgICBpZiAoXy5pc1N0cmluZyh1cmwpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICogc3VwcG9ydCBmb3IgbW9iaWxlIGFwcHMgaGF2aW5nIGxvY2FsIGZpbGUgcGF0aCB1cmwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vLyBhbmRcbiAgICAgICAgKiBzdXBwb3J0IGZvciBiYXNlNjQgZm9ybWF0XG4gICAgICAgICogKi9cbiAgICAgICAgaWYgKF8uc3RhcnRzV2l0aCh1cmwsICdmaWxlOi8vLycpIHx8IGJhc2U2NHJlZ2V4LnRlc3QodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFteOl1cXC8pKFxcLykrJywgJ2cnKSwgJyQxJyk7XG4gICAgfVxufTtcblxuJC5jYWNoZWRTY3JpcHQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBpc0luUHJvZ3Jlc3MgPSB1cmwgPT4gaW5Qcm9ncmVzcy5oYXModXJsKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gdXJsID0+IHJlc29sdmVkLmhhcyh1cmwpO1xuICAgIGNvbnN0IG9uTG9hZCA9IHVybCA9PiB7XG4gICAgICAgIHJlc29sdmVkLmFkZCh1cmwpO1xuICAgICAgICBpblByb2dyZXNzLmdldCh1cmwpLnJlc29sdmUoKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5kZWxldGUodXJsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SW5Qcm9ncmVzcyA9IHVybCA9PiB7XG4gICAgICAgIGxldCByZXNGbjtcbiAgICAgICAgbGV0IHJlakZuO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBhbnkgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc0ZuID0gcmVzO1xuICAgICAgICAgICAgcmVqRm4gPSByZWo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc0ZuO1xuICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlakZuO1xuXG4gICAgICAgIGluUHJvZ3Jlc3Muc2V0KHVybCwgcHJvbWlzZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0luUHJvZ3Jlc3ModXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJblByb2dyZXNzKHVybCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gb25Mb2FkKHVybCkpO1xuXG4gICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgIH07XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0RJU1BMQVlfRk9STUFUUyA9IHtcbiAgICBEQVRFOiAneXl5eS1NTS1kZCcsXG4gICAgVElNRTogJ2hoOm1tIGEnLFxuICAgIFRJTUVTVEFNUDogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG4gICAgREFURVRJTUU6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxufTtcbi8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRpc3BsYXkgZGF0ZSBmb3JtYXQgZm9yIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQgPSB0eXBlID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFNbXy50b1VwcGVyKHR5cGUpXTtcbn07XG5cbi8vIEdlbmVyYXRlIGZvciBhdHRyaWJ1dGUgb24gbGFiZWwgYW5kIElEIG9uIGlucHV0IGVsZW1lbnQsIHNvIHRoYXQgbGFiZWwgZWxlbWVudHMgYXJlIGFzc29jaWF0ZWQgdG8gZm9ybSBjb250cm9sc1xuZXhwb3J0IGNvbnN0IGFkZEZvcklkQXR0cmlidXRlcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsLmNvbnRyb2wtbGFiZWwnKTtcbiAgICBsZXQgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2ZvY3VzLXRhcmdldF0nKTtcbiAgICBpZiAoIWlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyk7XG4gICAgfVxuICAgIC8qaWYgdGhlcmUgYXJlIG9ubHkgb25lIGlucHV0IGVsIGFuZCBsYWJlbCBFbCBhZGQgaWQgYW5kIGZvciBhdHRyaWJ1dGUqL1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiBpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICQoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnW3dpZGdldC1pZF0nKS5hdHRyKCd3aWRnZXQtaWQnKTtcbiAgICAgICAgaWYgKHdpZGdldElkKSB7XG4gICAgICAgICAgICBzZXRBdHRyKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICAgICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2ZvcicsIHdpZGdldElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKkFkZGluZyBhcmlhLWxhYmVsbGVkYnkgdG8gcmFkaW9zZXQsIGNoZWNrYm94c2V0IHdpZGdldHMqL1xuICAgIGNvbnN0IHVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJyk7XG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIHVsRWwubGVuZ3RoICYmICh1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAncmFkaW9ncm91cCcgfHwgdWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ2dyb3VwJykpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAnd20tZ3JvdXAtbGFiZWwtJyArIGdlbmVyYXRlR1VJZCgpO1xuICAgICAgICBzZXRBdHRyKHVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB3aWRnZXRJZCk7XG4gICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiBsZWZ0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBuZWdhdGl2ZSB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIFRvIEZpeCB0aGUgY29udGFpbmVyIG92ZXJsYXBwaW5nIGlzc3VlIGNoYW5naW5nIHRoZSBjb250cmFpbmVyIGxlZnQgdHJhbnNsYXRpb24gdG8gMFxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gLSBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gLSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgLSBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIC0gQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuICAgICAgICBpZiAoY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA8IDApIHtcbiAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gMDtcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgIH0pO1xuICAgfTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gcmlnaHQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG91dCBvZiB0aGUgdmlld3BvcnQgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAgcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAgc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbiAgIGV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsZSA/IF8ucGFyc2VJbnQoZWxlLmNzcygnd2lkdGgnKSkgOiBfLnBhcnNlSW50KGNvbnRhaW5lckVsZW0uY3NzKCd3aWR0aCcpKTtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IHBhcmVudERpbWVzaW9uID0gcGFyZW50RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGFyZW50UmlnaHQgPSBwYXJlbnREaW1lc2lvbi5yaWdodCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBsZXQgbmV3TGVmdDtcbiAgICAgICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3UG9ydFdpZHRoIC0gKHBhcmVudFJpZ2h0ICsgcGFyZW50RGltZXNpb24ud2lkdGgpIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gcGFyZW50UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3TGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSBuZXdMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgZ2l2ZW4gZWxlbWVudCBzZXQgdGhlIHRyYXNsYXRpb25cbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gdGFuc2xhdGVkIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyB0cmFuc2xhdGUgbWF0cml4IHBvc2l0aW9uc1xuICAgKi9cbiAgIGV4cG9ydCBjb25zdCBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVBvc2l0aW9uID0gJ3RyYW5zbGF0ZTNkKCcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxICsgJ3B4LCAnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MiArICdweCwgMHB4KSc7XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICB9O1xuXG4gICAvKipcbiAgICAqXG4gICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSBlbGVtZXQgZm9yIHRoZSBXZWJLaXRDU1NNYXRyaXhcbiAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4ID0gKGNvbnRhaW5lckVsZW0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXZWJLaXRDU1NNYXRyaXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1TQ1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkud2Via2l0VHJhbnNmb3JtKTtcbiAgICB9XG5cbi8vIGNsb3NlIGFsbCB0aGUgcG9wb3ZlcnMuXG5leHBvcnQgY29uc3QgY2xvc2VQb3BvdmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wb3BvdmVyJykubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hcHAtcG9wb3Zlci13cmFwcGVyJyk7XG4gICAgICAgIF8uZm9yRWFjaChwb3BvdmVyRWxlbWVudHMsIChlbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUud2lkZ2V0LmlzT3Blbikge1xuICAgICAgICAgICAgICAgIGVsZS53aWRnZXQuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBhcHBcbiAqIFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIGVuZCB1c2VyIGRldmVsb3BlciBvZiBXTSBhcHBcbiAqIFRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIGZvciAkcnMuJHNhZmVBcHBseSgpIGluIEFuZ3VsYXJKU1xuICogU2VlICRhcHBEaWdlc3QgaW4gdXRpbHMgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgY29uc3QgZGV0ZWN0Q2hhbmdlcyA9ICRhcHBEaWdlc3Q7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciB0aGUgYWN0aW9uL2xpbmsgb2YgbWVudS9uYXYgaXRlbVxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIGl0ZW0gLSBpdGVtIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgdHJpZ2dlckl0ZW1BY3Rpb24gPSAoc2NvcGUsIGl0ZW0pID0+IHtcbiAgICBsZXQgaXRlbUxpbmsgPSBpdGVtLmxpbms7XG4gICAgY29uc3QgaXRlbUFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xuICAgIGNvbnN0IGxpbmtUYXJnZXQgPSBpdGVtLnRhcmdldDtcbiAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBpZiAoIXNjb3BlLml0ZW1BY3Rpb25Gbikge1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBUaGlzIHdpbGwgbm90IHdvcmsgYXMgZnVuY3Rpb24gd2lsbCBiZSBkeW5hbWljXG4gICAgICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4gPSAkcGFyc2VFdmVudChpdGVtQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbihzY29wZS51c2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsIE9iamVjdC5jcmVhdGUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAoaXRlbUxpbmspIHtcbiAgICAgICAgaWYgKGl0ZW1MaW5rLnN0YXJ0c1dpdGgoJyMvJykgJiYgKCFsaW5rVGFyZ2V0IHx8IGxpbmtUYXJnZXQgPT09ICdfc2VsZicpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFVybFBhcmFtcyhpdGVtTGluayk7XG4gICAgICAgICAgICBpdGVtTGluayA9IGdldFJvdXRlTmFtZUZyb21MaW5rKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IF8uZ2V0KHNjb3BlLCAncm91dGUnKSB8fCBfLmdldChzY29wZSwgJ21lbnVSZWYucm91dGUnKTtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbaXRlbUxpbmtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3BlbkxpbmsoaXRlbUxpbmssIGxpbmtUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0c291cmNlIGZyb20gdGhlIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gZXhwcmVzc2lvbiBvZiB0aGUgZGF0YXNldFxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1skaV0uYWRkcmVzc2VzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqIEV4YW1wbGUyOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmFkZHJlc3Nlc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhc291cmNlRnJvbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBpc0JvdW5kVG9WYXJpYWJsZSA9IF8uc3RhcnRzV2l0aChleHByLCAnVmFyaWFibGVzLicpO1xuICAgIGNvbnN0IGlzQm91bmRUb1dpZGdldCA9IF8uc3RhcnRzV2l0aChleHByLCAnV2lkZ2V0cy4nKTtcbiAgICBjb25zdCBwYXJ0cyA9IGV4cHIuc3BsaXQoJy4nKTtcbiAgICBpZiAoaXNCb3VuZFRvVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KHNjb3BlLnZpZXdQYXJlbnQuVmFyaWFibGVzLCBwYXJ0c1sxXSk7XG4gICAgfVxuICAgIGlmIChpc0JvdW5kVG9XaWRnZXQpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBfLmdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgbGV0IHdpZGdldEJvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgd2lkZ2V0Qm91bmRFeHByZXNzaW9uID0gKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpID8gd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA6IHdpZGdldFNjb3BlLmJpbmRkYXRhc2V0O1xuICAgICAgICByZXR1cm4gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHdpZGdldEJvdW5kRXhwcmVzc2lvbiwgd2lkZ2V0U2NvcGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdGFzZXQgYm91bmQgZXhwcmVzc2lvbiBmcm9tIGxpc3QgY3VycmVudGl0ZW0gZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBib3VuZCBkYXRhc2V0IGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmRldGFpbHNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0XCIgdGhlbiBpdCByZXR1cm5zIGV4cHJlc3Npb24gYXMgXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0WyRpXS5kZXRhaWxzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDdXJyZW50SXRlbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SXRlbVJlZ0V4ID0gL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nO1xuICAgIGlmIChjdXJyZW50SXRlbVJlZ0V4LnRlc3QoZXhwcikpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gXy5nZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGlmICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0RGF0YXNldEJvdW5kRXhwcn1bJGldYCk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdEN1cnJlbnRJdGVtRXhwcihleHByLCBzY29wZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0U2NvcGUuYmluZGRhdGFzZXR9WyRpXWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xufTtcblxuLy8gdGhpcyB3aWxsIGFkZCB0aGUgaHRtbCB0YWcgdG8gdGhlIHdpZGdldCB0byBzY29wZSB0aGUgY3NzIHRvIHRoZSBwYWdlLlxuZXhwb3J0IGNvbnN0IGZpbmRSb290Q29udGFpbmVyID0gKCRlbCkgPT4ge1xuICAgIGxldCByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcHJlZmFiJyk7XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFydGlhbCcpO1xuICAgIH1cbiAgICBpZighcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXNwYS1wYWdlJyk7XG4gICAgfVxuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3QubGVuZ3RoICYmIHJvb3QucGFyZW50KClbMF0udGFnTmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCBWQUxJREFUT1IgPSB7XG4gICAgUkVRVUlSRUQ6ICdyZXF1aXJlZCcsXG4gICAgTUFYQ0hBUlM6ICdtYXhjaGFycycsXG4gICAgTUlOVkFMVUU6ICdtaW52YWx1ZScsXG4gICAgTUFYVkFMVUU6ICdtYXh2YWx1ZScsXG4gICAgUkVHRVhQOiAncmVnZXhwJyxcbiAgICBNSU5EQVRFOiAnbWluZGF0ZScsXG4gICAgTUFYREFURTogJ21heGRhdGUnLFxuICAgIE1JTlRJTUU6ICdtaW50aW1lJyxcbiAgICBNQVhUSU1FOiAnbWF4dGltZScsXG4gICAgRVhDTFVERURBVEVTOiAnZXhjbHVkZWRhdGVzJyxcbiAgICBFWENMVURFREFZUzogJ2V4Y2x1ZGVkYXlzJ1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUZpbGVVUkkgPSAodXJsKSA9PiB7XG4gICAgaWYgKF8uaXNTdHJpbmcodXJsKSAmJiBoYXNDb3Jkb3ZhKCkgJiYgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBbmRyb2lkKCkgJiYgbG9jYXRpb24uaHJlZi5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArICd3d3cnLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZFNjcmlwdFRvSGVhZCA9IChjYWxsYmFjaykgPT57XG5cbiAgICBjb25zdCBzY3JpcHRlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHRlbGUub25sb2FkID0gKCkgPT4ge1xuICAgICBjYWxsYmFjayhXTV9DVVNUT01fRk9STUFUVEVSUyk7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUub25lcnJvciA9IGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgZmlsZSAnICsgc2NyaXB0ZWxlLnNyYyArICdcXG4nICsgZXJyKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0ZWxlLnNyYyA9ICcuL2V4dGVuc2lvbnMvZm9ybWF0dGVycy5qcyc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRlbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcFNldHRpbmcgPSAoa2V5LCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncyAmJiBfLmdldChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MsIGtleSkpIHx8IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaXRlbWNsYXNzIGRlcGVuZGluZyBvbiBpdGVtc3BlcnJvdy5cbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgMiBmb3IgbGFyZ2UgZGV2aWNlLCB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLXhzLTEgY29sLXNtLTEgY29sLWxnLTInXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzICdsZy0zJyB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLWxnLTMnXG4qL1xuZXhwb3J0IGNvbnN0IHNldExpc3RDbGFzcyA9IChzY29wZSkgPT4ge1xuICAgIGxldCB0ZW1wID0gJyc7XG4gICAgaWYgKHNjb3BlLml0ZW1zcGVycm93KSB7XG4gICAgICAgIGlmIChpc05hTihwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKSkge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgY29udGFpbmluZyBzdHJpbmcgb2YgY2xhc3Nlc1xuICAgICAgICAgICAgXy5zcGxpdChzY29wZS5pdGVtc3BlcnJvdywgJyAnKS5mb3JFYWNoKChjbHM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBfLnNwbGl0KGNscywgJy0nKTtcbiAgICAgICAgICAgICAgICBjbHMgPSBgJHtrZXlzWzBdfS0keygxMiAvIHBhcnNlSW50KGtleXNbMV0sIDEwKSl9YDtcbiAgICAgICAgICAgICAgICB0ZW1wICs9IGAgY29sLSR7Y2xzfWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSB0ZW1wLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGhhdmluZyBpbnRlZ2VyIHZhbHVlLlxuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IGBjb2wteHMtJHsoMTIgLyBwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKX1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXRlbXNwZXJyb3cgaXMgbm90IHNwZWNpZmllZCBtYWtlIGl0IGZ1bGwgd2lkdGhcbiAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9ICdjb2wteHMtMTInO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ID0gKGxWaWV3OiBhbnksIHZpZXdQYXJlbnRBcHA/OiBhbnkpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFZpZXdQYXJlbnQobFZpZXcpO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQgOiB2aWV3UGFyZW50QXBwO1xufVxuXG5leHBvcnQgY29uc3QgZmluZFZpZXdQYXJlbnQgPSAobFZpZXc6IGFueSkgPT4ge1xuICAgIHJldHVybiBsVmlld1sxNl0gPyBsVmlld1sxNl1bOF0gOiBsVmlld1sxNl07XG4gICAgLyppZihsVmlld1szXSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbFZpZXdbOF07XG4gICAgfVxuICAgIGxldCBwYXJlbnRsVmlldyA9IGxWaWV3WzNdO1xuICAgIGlmKHR5cGVvZiBsVmlld1sxXSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9XG4gICAgbGV0IGNvbXBvbmVudFR5cGUgPSBsVmlld1sxXVtcInR5cGVcIl07XG4gICAgaWYoY29tcG9uZW50VHlwZSA9PT0gMCB8fCBjb21wb25lbnRUeXBlID09PSAxKSB7XG4gICAgICAgIGxldCBwID0gbFZpZXdbOF07XG4gICAgICAgIC8vIHRzLWlnbm9yZVxuICAgICAgICBpZihwLmhhc093blByb3BlcnR5KFwiaXNEaWFsb2dDb21wb25lbnRcIikgfHwgcC5oYXNPd25Qcm9wZXJ0eShcImlzQ29udGFpbmVyRGlyZWN0aXZlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH0qL1xufVxuXG4vKmV4cG9ydCBjb25zdCBnZXRQYXJlbnQgPSAocGFyZW50OiBhbnkpID0+IHtcbiAgICBpZihwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc0R5bmFtaWNDb21wb25lbnRcIikgfHwgcGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNQYWdlQ29tcG9uZW50XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9IGVsc2V7XG4gICAgICAgIHJldHVybiBwYXJlbnQudmlld1BhcmVudCA/IGdldFBhcmVudChwYXJlbnQudmlld1BhcmVudCkgOiBwYXJlbnQ7XG4gICAgfVxuXG59Ki9cbiJdfQ==
1467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFZbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQUc7SUFDVixVQUFVLEVBQUUsUUFBUTtJQUNwQixPQUFPLEVBQUUsVUFBVTtJQUNuQixNQUFNLEVBQUUsU0FBUztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLElBQUksRUFBRSxPQUFPO0lBQ2IsR0FBRyxFQUFFLE1BQU07SUFDWCxRQUFRLEVBQUUsV0FBVztJQUNyQixjQUFjLEVBQUUsMkRBQTJEO0lBQzNFLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsc0JBQXNCLEVBQUUsaURBQWlEO0lBQ3pFLHFCQUFxQixFQUFFLDhHQUE4RztJQUNySSxzQkFBc0IsRUFBRSxvQ0FBb0M7SUFDNUQsc0JBQXNCLEVBQUUseUNBQXlDO0lBQ2pFLGtCQUFrQixFQUFFLG1DQUFtQztJQUN2RCxzQkFBc0IsRUFBRSxvQkFBb0I7SUFDNUMsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxhQUFh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LGNBQWMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyB9IGZyb20gJy4vd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHsgJHdhdGNoLCAkYXBwRGlnZXN0IH0gZnJvbSAnLi93YXRjaGVyJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IHNldEF0dHIgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyAkcGFyc2VFdmVudCB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuXG5kZWNsYXJlIGNvbnN0IF8sIFgySlM7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgIE1BQ0lOVEVMOiAvTWFjSW50ZWwvaSxcbiAgICBBTkRST0lEX1RBQkxFVDogL2FuZHJvaWR8YW5kcm9pZCAzLjB8eG9vbXxzY2gtaTgwMHxwbGF5Ym9va3x0YWJsZXR8a2luZGxlL2ksXG4gICAgTU9CSUxFOiAvTW9iaWxlL2ksXG4gICAgV0lORE9XUzogL1dpbmRvd3MgUGhvbmUvaSxcbiAgICBTVVBQT1JURURfSU1BR0VfRk9STUFUOiAvXFwuKGJtcHxnaWZ8anBlfGpwZ3xqcGVnfHRpZnx0aWZmfHBibXxwbmd8aWNvKSQvaSxcbiAgICBTVVBQT1JURURfRklMRV9GT1JNQVQ6IC9cXC4odHh0fGpzfGNzc3xodG1sfHNjcmlwdHxwcm9wZXJ0aWVzfGpzb258amF2YXx4bWx8c21kfHhtaXxzcWx8bG9nfHdzZGx8dm18ZnRsfGpyeG1sfHltbHx5YW1sfG1kfGxlc3N8anNwKSQvaSxcbiAgICBTVVBQT1JURURfQVVESU9fRk9STUFUOiAvXFwuKG1wM3xvZ2d8d2VibXx3bWF8M2dwfHdhdnxtNGEpJC9pLFxuICAgIFNVUFBPUlRFRF9WSURFT19GT1JNQVQ6IC9cXC4obXA0fG9nZ3x3ZWJtfHdtdnxtcGVnfG1wZ3xhdml8bW92KSQvaSxcbiAgICBQQUdFX1JFU09VUkNFX1BBVEg6IC9eXFwvcGFnZXNcXC8uKlxcLihqc3xjc3N8aHRtbHxqc29uKSQvLFxuICAgIE1JTl9QQUdFX1JFU09VUkNFX1BBVEg6IC8uKihwYWdlLm1pbi5odG1sKSQvLFxuICAgIFZBTElEX0VNQUlMOiAvXlthLXpBLVpdW1xcdy4rXStAW2EtekEtWl9dKz9cXC5bYS16QS1aLl17MSw0fVthLXpBLVpdJC8sXG4gICAgVkFMSURfV0VCX1VSTDogL14oaHR0cFtzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfV0VCU09DS0VUX1VSTDogL14od3Nbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1JFTEFUSVZFX1VSTDogL14oPyF3d3dcXC58KD86aHR0cHxmdHApcz86XFwvXFwvfFtBLVphLXpdOlxcXFx8XFwvXFwvKS4qLyxcbiAgICBSRVBMQUNFX1BBVFRFUk46IC9cXCRcXHsoW15cXH1dKylcXH0vZyxcbiAgICBaSVBfRklMRTogL1xcLnppcCQvaSxcbiAgICBFWEVfRklMRTogL1xcLmV4ZSQvaSxcbiAgICBOT19RVU9URVNfQUxMT1dFRDogL15bXid8XCJdKiQvLFxuICAgIE5PX0RPVUJMRV9RVU9URVNfQUxMT1dFRDogL15bXlwiXSokLyxcbiAgICBWQUxJRF9IVE1MOiAvPFthLXpdW1xcc1xcU10qPi9pLFxuICAgIFZBTElEX1BBU1NXT1JEOiAvXlswLTlhLXpBLVotXy5AJiohIyQlXSskLyxcbiAgICBTUEVDSUFMX0NIQVJBQ1RFUlM6IC9bXkEtWjAtOWEtel9dKy9pLFxuICAgIEFQUF9TRVJWRVJfVVJMX0ZPUk1BVDogL14oaHR0cFtzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05XFwuXFwtXSsoWzpdP1swLTldezIsNX18XFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pXFwvK1tePyMmPV0rJC8sXG4gICAgSlNPTl9EQVRFX0ZPUk1BVDogL1xcZHs0fS1bMC0xXVxcZC1bMC0zXVxcZChUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQuXFxkezEsM31aJCk/LyxcbiAgICBEQVRBX1VSTDogL15cXHMqZGF0YTooW2Etel0rXFwvW2EtejAtOS0rLl0rKDtbYS16LV0rPVthLXowLTktXSspPyk/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XFwtLl9+OkBcXC8/JVxcc10qKVxccyokL2ksXG4gICAgSVNPX0RBVEVfRk9STUFUOiAvKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KVQoXFxkezJ9OlxcZHsyfTpcXGR7Mn0pKFxcLlxcZCspPyhbKy1dXFxkezJ9Oj9cXGR7Mn18WikkL1xufSxcbiAgICBjb21wYXJlQnlTZXBhcmF0b3IgPSAnOic7XG5cbmNvbnN0IE5VTUJFUl9UWVBFUyA9IFsnaW50JywgRGF0YVR5cGUuSU5URUdFUiwgRGF0YVR5cGUuRkxPQVQsIERhdGFUeXBlLkRPVUJMRSwgRGF0YVR5cGUuTE9ORywgRGF0YVR5cGUuU0hPUlQsIERhdGFUeXBlLkJZVEUsIERhdGFUeXBlLkJJR19JTlRFR0VSLCBEYXRhVHlwZS5CSUdfREVDSU1BTF07XG5jb25zdCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpO1xuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIEVWRU5UX0xJRkUgeyBPTkNFLCBXSU5ET1cgfVxuXG5leHBvcnQgY29uc3QgaXNEZWZpbmVkID0gdiA9PiAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHY7XG5cbmV4cG9ydCBjb25zdCBpc09iamVjdCA9IHYgPT4gbnVsbCAhPT0gdiAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHY7XG5cbmV4cG9ydCBjb25zdCB0b0Jvb2xlYW4gPSAodmFsLCBpZGVudGl0eT8pID0+ICgodmFsICYmIHZhbCAhPT0gJ2ZhbHNlJykgPyB0cnVlIDogKGlkZW50aXR5ID8gdmFsID09PSBpZGVudGl0eSA6IGZhbHNlKSk7XG5cbmZ1bmN0aW9uIGlzSUUxMSgpIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ1RyaWRlbnQvJykgPiAtMTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzSUUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGlzSUUxMSgpIHx8IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xO1xufTtcblxuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKCkgPT4gUkVHRVguQU5EUk9JRC50ZXN0KHVzZXJBZ2VudCk7XG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWRUYWJsZXQgPSAoKSA9PiBSRUdFWC5BTkRST0lEX1RBQkxFVC50ZXN0KHVzZXJBZ2VudCkgJiYgISgoL1RhYmxldCBQQyAyLjAvaSkudGVzdCh1c2VyQWdlbnQpKTtcblxuZXhwb3J0IGNvbnN0IGlzSXBob25lID0gKCkgPT4gUkVHRVguSVBIT05FLnRlc3QodXNlckFnZW50KTtcbmV4cG9ydCBjb25zdCBpc0lwb2QgPSAoKSA9PiBSRUdFWC5JUE9ELnRlc3QodXNlckFnZW50KTtcbmV4cG9ydCBjb25zdCBpc0lwYWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFJFR0VYLklQQUQudGVzdCh1c2VyQWdlbnQpIHx8ICh3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzICYmIHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAyICYmIChSRUdFWC5NQUMudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSB8fCBSRUdFWC5NQUNJTlRFTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNJb3MgPSAoKSA9PiBpc0lwaG9uZSgpIHx8IGlzSXBvZCgpIHx8IGlzSXBhZCgpO1xuXG5leHBvcnQgY29uc3QgaXNMYXJnZVRhYmxldExhbmRzY2FwZSA9IChsYW5kU2NhcGVXaWR0aCwgbGFuZFNjYXBlSGVpZ2h0KSA9PiB7XG4gICAgY29uc3Qgd2lkdGggPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVIZWlnaHQgfHwgJzEwMjRweCc7XG4gICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1pbi13aWR0aDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LXdpZHRoOiBcIit3aWR0aCtcIilcIikubWF0Y2hlcztcbn1cblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRQb3J0cmFpdCA9IChsYW5kU2NhcGVXaWR0aCwgbGFuZFNjYXBlSGVpZ2h0KSA9PiAge1xuICAgIGNvbnN0IGhlaWdodCA9IGxhbmRTY2FwZVdpZHRoIHx8ICcxMzY2cHgnO1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZSA9ICgpID0+IGlzQW5kcm9pZCgpIHx8IGlzSW9zKCkgfHwgaXNBbmRyb2lkVGFibGV0KCkgfHwgJCgnI3dtLW1vYmlsZS1kaXNwbGF5OnZpc2libGUnKS5sZW5ndGggPiAwO1xuXG5leHBvcnQgY29uc3QgaXNUYWJsZXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2NvcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXBwLXBhZ2UnKS53aWRnZXQ7XG4gICAgcmV0dXJuIHNjb3BlICYmIHNjb3BlLnZpZXdQYXJlbnQuVmlld3BvcnQuaXNUYWJsZXRUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlQXBwID0gKCkgPT4gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnBsYXRmb3JtVHlwZSA9PT0gJ01PQklMRScgJiYgZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG5cbmV4cG9ydCBjb25zdCBnZXRBbmRyb2lkVmVyc2lvbiA9ICgpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9ICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKS5tYXRjaCgvYW5kcm9pZFxccyhbMC05XFwuXSopLyk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0tpdGthdERldmljZSA9ICgpID0+IGlzQW5kcm9pZCgpICYmIHBhcnNlSW50KGdldEFuZHJvaWRWZXJzaW9uKCksIDEwKSA9PT0gNDtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBlbmNvZGVzIHRoZSB1cmwgYW5kIHJldHVybnMgdGhlIGVuY29kZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGVVcmwgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAvLyBlbmNvZGUgdGhlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJKHVybC5zdWJzdHJpbmcoMCwgaW5kZXgpKSArIHVybC5zdWJzdHJpbmcoaW5kZXgpO1xuICAgICAgICAvLyBlbmNvZGUgdXJsIHBhcmFtcywgbm90IGVuY29kZWQgdGhyb3VnaCBlbmNvZGVVUklcbiAgICAgICAgdXJsID0gZW5jb2RlVXJsUGFyYW1zKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJKHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIHBhcmFtcyBhbmQgaXMgcHJpdmF0ZSB0byB0aGUgY2xhc3Mgb25seVxuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsUGFyYW1zID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBsZXQgcXVlcnlQYXJhbXMsIGVuY29kZWRQYXJhbXMgPSAnJywgcXVlcnlQYXJhbXNTdHJpbmcsIGluZGV4O1xuICAgIGluZGV4ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICBxdWVyeVBhcmFtc1N0cmluZyA9IHVybC5zdWJzdHJpbmcoaW5kZXgpO1xuICAgICAgICAvLyBFbmNvZGluZyB0aGUgcXVlcnkgcGFyYW1zIGlmIGV4aXN0XG4gICAgICAgIGlmIChxdWVyeVBhcmFtc1N0cmluZykge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtc1N0cmluZy5zcGxpdCgnJicpO1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVjb2RlZFBhcmFtVmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IF8uaW5jbHVkZXMocGFyYW0sICc9JykgPyBwYXJhbS5pbmRleE9mKCc9JykgOiAocGFyYW0gJiYgcGFyYW0ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gcGFyYW0uc3Vic3RyKDAsIGkpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlID0gcGFyYW0uc3Vic3RyKGkgKyAxKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgPSBmb3IgcGFyYW0gbmFtZSBvbmx5IHdoZW4gdGhlIHBhcmFtIHZhbHVlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gcGFyYW0gb3IgZW1wdHkgdmFsdWUgaXMgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1WYWx1ZSB8fCBfLmluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IF8uY2FtZWxDYXNlKGxhYmVsKTtcbiAgICAvKmNhcGl0YWxpemUgdGhlIGluaXRpYWwgTGV0dGVyKi9cbiAgICBsYWJlbCA9IGluaXRDYXBzKGxhYmVsKTtcbiAgICAvKkNvbnZlcnQgY2FtZWwgY2FzZSB3b3JkcyB0byBzZXBhcmF0ZWQgd29yZHMqL1xuICAgIGxhYmVsID0gc3BhY2VTZXBhcmF0ZShsYWJlbCk7XG4gICAgLypSZXBsYWNlICcuJyB3aXRoIHNwYWNlIGFuZCBjYXBpdGFsaXplIHRoZSBuZXh0IGxldHRlciovXG4gICAgbGFiZWwgPSBwZXJpb2RTZXBhcmF0ZShsYWJlbCk7XG4gICAgcmV0dXJuIGxhYmVsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlSHlwaGVuYXRlID0gKG5hbWUpID0+IHtcbiAgICByZXR1cm4gbmFtZS5zcGxpdCgnLScpLmpvaW4oJyAnKTtcbn07XG5cbi8qQWNjZXB0cyBhbiBhcnJheSBvciBhIHN0cmluZyBzZXBhcmF0ZWQgd2l0aCBzeW1ib2wgYW5kIHJldHVybnMgcHJldHRpZmllZCByZXN1bHQqL1xuZXhwb3J0IGNvbnN0IHByZXR0aWZ5TGFiZWxzID0gKG5hbWVzLCBzZXBhcmF0b3IgPSAnLCcpID0+IHtcbiAgICBsZXQgbW9kaWZpZWROYW1lcywgbmFtZXNBcnJheSA9IFtdO1xuXG4gICAgaWYgKCFfLmlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIG5hbWVzQXJyYXkgPSBfLnNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBfLm1hcChuYW1lc0FycmF5LCBwcmV0dGlmeUxhYmVsKTtcbiAgICBpZiAoXy5pc0FycmF5KG5hbWVzKSkge1xuICAgICAgICByZXR1cm4gbW9kaWZpZWROYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkTmFtZXMuam9pbihzZXBhcmF0b3IpO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBpbnNlY3VyZSBjb250ZW50IHJlcXVlc3QgaXMgYmVpbmcgbWFkZVxuICovXG5leHBvcnQgY29uc3QgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0ID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cbiAgICBjb25zdCBwYXJzZXI6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHBhcnNlci5ocmVmID0gdXJsO1xuXG4gICAgLy8gZm9yIHJlbGF0aXZlIHVybHMgSUUgcmV0dXJucyB0aGUgcHJvdG9jb2wgYXMgZW1wdHkgc3RyaW5nXG4gICAgaWYgKHBhcnNlci5wcm90b2NvbCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbnB1dHRlZCBzb3VyY2UgaXMgYSBiYXNlNjQgdXJsLCBkbyBub3QgdGhyb3cgaW5zZWN1cmUgY29udGVudCBlcnJvclxuICAgIGlmIChSRUdFWC5EQVRBX1VSTC50ZXN0KHVybCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYsICdodHRwczovLycpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIucHJvdG9jb2wgIT09ICdodHRwczonICYmIHBhcnNlci5wcm90b2NvbCAhPT0gJ3dzczonO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogdGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1N0YXJ0c1dpdGggPSAoc3RyOiBzdHJpbmcsIHN0YXJ0c1dpdGg6IHN0cmluZywgaWdub3JlQ2FzZT8pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnRXggPSBuZXcgUmVnRXhwKCdeJyArIHN0YXJ0c1dpdGgsIGlnbm9yZUNhc2UgPyAnaScgOiAnJyk7XG5cbiAgICByZXR1cm4gcmVnRXgudGVzdChzdHIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV2YWx1YXRlZEV4cHJWYWx1ZSA9IChvYmplY3QsIGV4cHJlc3Npb24pID0+IHtcbiAgICBsZXQgdmFsO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIHdpdGggdGhlIHNjb3BlIGFuZCBvYmplY3QuXG4gICAgICogJGV2YWwgaXMgdXNlZCwgYXMgZXhwcmVzc2lvbiBjYW4gYmUgaW4gZm9ybWF0IG9mIGZpZWxkMSArICcgJyArIGZpZWxkMlxuICAgICAqICRldmFsIGNhbiBmYWlsLCBpZiBleHByZXNzaW9uIGlzIG5vdCBpbiBjb3JyZWN0IGZvcm1hdCwgc28gYXR0ZW1wdCB0aGUgZXZhbCBmdW5jdGlvblxuICAgICAqL1xuICAgIHZhbCA9IF8uYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChfLmlzRXJyb3IodmFsKSkge1xuICAgICAgICB2YWwgPSBfLmdldChvYmplY3QsIGV4cHJlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLyogZnVuY3Rpb25zIGZvciByZXNvdXJjZSBUYWIqL1xuZXhwb3J0IGNvbnN0IGlzSW1hZ2VGaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfSU1BR0VfRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0F1ZGlvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX0FVRElPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWaWRlb0ZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9WSURFT19GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRXZWJVUkwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlZBTElEX1dFQl9VUkwpLnRlc3QodXJsKTtcbn07XG5cbi8qVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIHJlc291cmNlIGFmdGVyIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB1cmwqL1xuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlVVJMID0gKHVybFN0cmluZykgPT4ge1xuICAgIGlmIChpc1ZhbGlkV2ViVVJMKHVybFN0cmluZykpIHtcbiAgICAgICAgLypUT0RPOiBVc2UgRG9tU2FuaXRpemVyKi9cbiAgICAgICAgLy8gcmV0dXJuIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsU3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybFN0cmluZztcbn07XG5cbi8qZnVuY3Rpb24gdG8gY2hlY2sgaWYgZm4gaXMgYSBmdW5jdGlvbiBhbmQgdGhlbiBleGVjdXRlKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRm4oZm4sIC4uLmFyZ21udHMpIHtcbiAgICAvKiBVc2Ugb2Ygc2xpY2Ugb24gYXJndW1lbnRzIHdpbGwgbWFrZSB0aGlzIGZ1bmN0aW9uIG5vdCBvcHRpbWl6YWJsZVxuICAgICogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMyLWxlYWtpbmctYXJndW1lbnRzXG4gICAgKiAqL1xuXG4gICAgbGV0IHN0YXJ0ID0gMTtcbiAgICBjb25zdCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtIHN0YXJ0KTtcbiAgICBmb3IgKHN0YXJ0OyBzdGFydCA8IGxlbjsgc3RhcnQrKykge1xuICAgICAgICBhcmdzW3N0YXJ0IC0gMV0gPSBhcmd1bWVudHNbc3RhcnRdO1xuICAgIH1cblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSkge1xuICAgICAgICBjb25zdCBtb21lbnRGb3JtYXQgPSBmb3JtYXQucmVwbGFjZUFsbCgneScsICdZJykucmVwbGFjZUFsbCgnZCcsICdEJykucmVwbGFjZSgnYScsICdBJyk7XG4gICAgICAgIGlmIChpc0ludGVydmFsRGF0ZVRpbWUgKSB7IC8vIGRhdGVzIHdoaWNoIGFyZSBvZiB0eXBlIHRpbWUgd2lkZ2V0ICh2YWx1ZSBpcyBoaDptbTpzcykgYnV0IHJldHVybmVkIGFzIGRhdGUgc3RyaW5nIGZyb20gdGltZSBjb21wXG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RpbWVTdGFtcFR5cGUgPT09ICdkYXRldGltZXN0YW1wJykge1xuICAgICAgICAgICAgZGF0ZU9iaiA9IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lWm9uZSwgZGF0ZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lLCBjb21wSW5zdGFuY2UpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBkYXRlIGhhcyB0aW1lem9uZSBpbmZvcm1hdGlvbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc09mZnNldFN0ciA9IChkYXRlU3RyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkYXRlU3RyICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRlU3RyLm1hdGNoKFJFR0VYLklTT19EQVRFX0ZPUk1BVCk7XG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1s0XSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogbWV0aG9kIHRvIGdldCB0aGUgZGF0ZSBvYmplY3QgZnJvbSB0aGUgaW5wdXQgcmVjZWl2ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGVPYmogPSAodmFsdWUsIG9wdGlvbnM/LCB0aW1lem9uZT8pOiBEYXRlID0+IHtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICAvLyBGaXggZm9yIFdNUy0xOTYwMSwgaW52YWxpZCBkYXRlIGlzIHJldHVybmVkIG9uIGRhdGUgc2VsZWN0aW9uLlxuICAgICAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gXy5nZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gIGlzTmF0aXZlUGlja2VyID8gJ1lZWVkvTU0vREQgSEg6bW06c3MnIDogbW9tZW50UGF0dGVybihvcHRpb25zLnBhdHRlcm4pO1xuICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSwgcGF0dGVybikudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSBkYXRlIG9iamVjdCwgbm8gbmVlZCB0byBjb3ZlcnQgaXQqL1xuICAgIGlmIChfLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgdGltZXN0YW1wIHN0cmluZywgY29udmVydCBpdCB0byBhIG51bWJlciovXG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cblxuICAgIGlmICghbW9tZW50KHZhbHVlKS5pc1ZhbGlkKCkgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IGRhdGVPYmogPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgLyoqXG4gICAgICogaWYgZGF0ZSB2YWx1ZSBpcyBzdHJpbmcgXCIyMC0wNS0yMDE5XCIgdGhlbiBuZXcgRGF0ZSh2YWx1ZSkgcmV0dXJuIDIwTWF5MjAxOSB3aXRoIGN1cnJlbnQgdGltZSBpbiBJbmRpYSxcbiAgICAgKiB3aGVyZWFzIHRoaXMgd2lsbCByZXR1cm4gMTlNYXkyMDE5IHdpdGggdGltZSBsYWdnaW5nIGZvciBmZXcgaG91cnMuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGl0IHJldHVybnMgVVRDIHRpbWUgaS5lLiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoVVRDKS5cbiAgICAgKiBUbyBjcmVhdGUgZGF0ZSBpbiBsb2NhbCB0aW1lIHVzZSBtb21lbnRcbiAgICAgKi9cbiAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogSWYgc2VsZWN0ZWQgbG9jYWxlIGlzIEFyYWJpYywgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBnaXZpbmcgZGF0ZSBpbiBBcmFiaWMgbGFuZ3VhZ2VcbiAgICAgICAgICogKEV4OiBJZiBkYXRlIHZhbHVlIGlzIFwiMTk5MC0xMS0yM1wiIGFuZCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIFwi2aHZqdmp2aAt2aHZoS3ZotmjVNmg2aA62aDZoDrZoNmgK9mg2aU62aPZoFwiKVxuICAgICAgICAgKiBhbmQgbmV3IERhdGUobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkgaXMgZ2l2aW5nIEludmFsaWQgRGF0ZS4gU28gZnJzdCBjb252ZXJ0aW5nIGl0IHRvIHRpbWVzdGFtcCB2YWx1ZS5cbiAgICAgICAgKi9cblxuICAgICAgICBkYXRlT2JqID0gIXRpbWV6b25lID8gbmV3IERhdGUobW9tZW50KG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpLnZhbHVlT2YoKSkgOiBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZXpvbmUsIHZhbHVlKTs7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDVVJSRU5UX0RBVEUgfHwgaXNOYU4oZGF0ZU9iai5nZXREYXkoKSkpIHtcbiAgICAgICAgcmV0dXJuIG5vdztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVPYmo7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudCA9IChfZWxlbWVudDogRWxlbWVudCwgZXhjbHVkZUVsZW1lbnQ6IEVsZW1lbnQsIG5hdGl2ZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50VHlwZSwgaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCwgc3VjY2Vzc0NCLCBsaWZlOiBFVkVOVF9MSUZFLCBpc0NhcHR1cmUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBfZWxlbWVudDtcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChleGNsdWRlRWxlbWVudCAmJiAoZXhjbHVkZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fCBleGNsdWRlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIGlmICgkKGV2ZW50LnRhcmdldCkuaXMoJ2lucHV0JykgJiYgIWlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWZlID09PSBFVkVOVF9MSUZFLk9OQ0UpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VjY2Vzc0NCKCk7XG4gICAgfTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIGNvbnN0IHJlbW92ZUV2ZW50TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY2xvbmVkIHJlcGxpY2Egb2YgdGhlIHBhc3NlZCBvYmplY3QvYXJyYXlcbiAqIEBwYXJhbSBvYmplY3Qgb2JqZWN0L2FycmF5IHRvIGNsb25lXG4gKiBAcmV0dXJucyBhIGNsb25lIG9mIHRoZSBwYXNzZWQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDbG9uZWRPYmplY3QgPSAob2JqZWN0KSA9PiB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKG9iamVjdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXMgPSAoZm9ybU5hbWUsIGZpZWxkTmFtZSwgaXNMaXN0KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBfLmdldChkb2N1bWVudC5mb3JtcywgW2Zvcm1OYW1lLCBmaWVsZE5hbWUsICdmaWxlcyddKTtcbiAgICByZXR1cm4gaXNMaXN0ID8gXy5tYXAoZmlsZXMsIF8uaWRlbnRpdHkpIDogZmlsZXMgJiYgZmlsZXNbMF07XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciovXG5mdW5jdGlvbiByYW5kb20oKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBndWlkIGJhc2VkIG9uIHJhbmRvbSBudW1iZXJzLiovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHVUlkID0gKCkgPT4ge1xuICAgIHJldHVybiByYW5kb20oKSArICctJyArIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGlmIGdpdmVuIGFjY2VzcyByb2xlIGlzIGluIGN1cnJlbnQgbG9nZ2VkaW4gdXNlciBhY2Nlc3Mgcm9sZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWNjZXNzUm9sZXMgPSAocm9sZUV4cCwgbG9nZ2VkSW5Vc2VyKSA9PiB7XG4gICAgbGV0IHJvbGVzO1xuXG4gICAgaWYgKHJvbGVFeHAgJiYgbG9nZ2VkSW5Vc2VyKSB7XG5cbiAgICAgICAgcm9sZXMgPSByb2xlRXhwICYmIHJvbGVFeHAuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG5cbiAgICAgICAgcmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJvbGVzLCBsb2dnZWRJblVzZXIudXNlclJvbGVzKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsaWRKU09OID0gKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkSW50VmFsdWUgPSBwYXJzZUludChjb250ZW50LCAxMCk7XG4gICAgICAgIC8qb2J0YWluaW5nIGpzb24gZnJvbSBlZGl0b3IgY29udGVudCBzdHJpbmcqL1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgfHwgIWlzTmFOKHBhcnNlZEludFZhbHVlKSA/IGNvbnRlbnQgOiBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyp0ZXJtaW5hdGluZyBleGVjdXRpb24gaWYgbmV3IHZhcmlhYmxlIG9iamVjdCBpcyBub3QgdmFsaWQganNvbi4qL1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCB4bWxUb0pzb24gPSAoeG1sU3RyaW5nKSA9PiB7XG4gICAgY29uc3QgeDJqc09iaiA9IG5ldyBYMkpTKHsgJ2VtcHR5Tm9kZUZvcm0nOiAnY29udGVudCcsICdhdHRyaWJ1dGVQcmVmaXgnOiAnJywgJ2VuYWJsZVRvU3RyaW5nRnVuYyc6IGZhbHNlIH0pO1xuICAgIGxldCBqc29uID0geDJqc09iai54bWwyanMoeG1sU3RyaW5nKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgICBqc29uID0gXy5nZXQoanNvbiwgT2JqZWN0LmtleXMoanNvbilbMF0pO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byBmaW5kIHRoZSB2YWx1ZSBvZiBhIGtleSBpbiB0aGUgb2JqZWN0XG4gKiBpZiBrZXkgbm90IGZvdW5kIGFuZCBjcmVhdGUgaXMgdHJ1ZSwgYW4gb2JqZWN0IGlzIGNyZWF0ZWQgYWdhaW5zdCB0aGF0IG5vZGVcbiAqIEV4YW1wbGVzOlxuICogdmFyIGEgPSB7XG4gKiAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYy5kJykgLS0+ICd0ZXN0J1xuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMnKSAtLT4ge2Q6ICd0ZXN0J31cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScpIC0tPiB1bmRlZmluZWRcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScsIHRydWUpIC0tPiB7fSBhbmQgYSB3aWxsIGJlY29tZTpcbiAqIHtcbiAqICAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9LFxuICogIGU6IHtcbiAqICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kVmFsdWVPZiA9IChvYmosIGtleSwgY3JlYXRlPykgPT4ge1xuXG4gICAgaWYgKCFvYmogfHwgIWtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGUpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KG9iaiwga2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICBrZXlzID0gW107XG5cbiAgICBsZXQgc2tpcFByb2Nlc3Npbmc7XG5cbiAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7IC8vIGlmIHRoZSBwYXJ0IG9mIGEga2V5IGlzIG5vdCB2YWxpZCwgc2tpcCB0aGUgcHJvY2Vzc2luZy5cbiAgICAgICAgICAgIHNraXBQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YlBhcnRzID0gcGFydC5tYXRjaCgvXFx3Ky9nKTtcbiAgICAgICAgbGV0IHN1YlBhcnQ7XG5cbiAgICAgICAgd2hpbGUgKHN1YlBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3ViUGFydCA9IHN1YlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBrZXlzLnB1c2goeyAna2V5Jzogc3ViUGFydCwgJ3ZhbHVlJzogc3ViUGFydHMubGVuZ3RoID8gW10gOiB7fSB9KTsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY3JlYXRlIGFuIGFycmF5IG9yIGFuIG9iamVjdFxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2tpcFByb2Nlc3NpbmcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBrZXlzLmZvckVhY2goKF9rZXkpID0+IHtcbiAgICAgICAgbGV0IHRlbXBPYmogPSBvYmpbX2tleS5rZXldO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHRlbXBPYmopKSB7XG4gICAgICAgICAgICB0ZW1wT2JqID0gZ2V0VmFsaWRKU09OKHRlbXBPYmopO1xuICAgICAgICAgICAgaWYgKCF0ZW1wT2JqKSB7XG4gICAgICAgICAgICAgICAgdGVtcE9iaiA9IF9rZXkudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2JqW19rZXkua2V5XSA9IHRlbXBPYmo7XG4gICAgICAgIG9iaiA9IHRlbXBPYmo7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuLypcbiogZXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGxhc3QgYml0IGZyb20gZnVsbCB0eXBlUmVmIG9mIGEgZmllbGRcbiogZS5nLiByZXR1cm5zICdTdHJpbmcnIGZvciB0eXBlUmVmID0gJ2phdmEubGFuZy5TdHJpbmcnXG4qIEBwYXJhbXM6IHt0eXBlUmVmfSB0eXBlIHJlZmVyZW5jZVxuKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0VHlwZSA9ICh0eXBlUmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCB0eXBlO1xuICAgIGlmICghdHlwZVJlZikge1xuICAgICAgICByZXR1cm4gRGF0YVR5cGUuU1RSSU5HO1xuICAgIH1cbiAgICB0eXBlID0gdHlwZVJlZiAmJiB0eXBlUmVmLnN1YnN0cmluZyh0eXBlUmVmLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICB0eXBlID0gdHlwZSAmJiB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdHlwZSA9IHR5cGUgPT09IERhdGFUeXBlLkxPQ0FMREFURVRJTUUgPyBEYXRhVHlwZS5EQVRFVElNRSA6IHR5cGU7XG4gICAgcmV0dXJuIHR5cGU7XG59O1xuXG4vKiByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRhdGEgdHlwZSBtYXRjaGVzIG51bWJlciB0eXBlICovXG5leHBvcnQgY29uc3QgaXNOdW1iZXJUeXBlID0gKHR5cGU6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoTlVNQkVSX1RZUEVTLmluZGV4T2YoZXh0cmFjdFR5cGUodHlwZSkudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcbn07XG5cbi8qIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHByb3ZpZGVkIG9iamVjdCBpcyBlbXB0eSovXG5leHBvcnQgY29uc3QgaXNFbXB0eU9iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChpc09iamVjdChvYmopICYmICFfLmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIEZ1bmN0aW9uIGV4cGVjdHMgYW4gZWxlbWVudCBvbiB3aGljaCB0aGUgc2Nyb2xsaW5nIHNob3VsZCBiZSBhcHBsaWVkLCBEZXBlbmRpbmcgb24gdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBzY3JvbGxiYXIgd2lsbCBiZSBhZGp1c3RlZFxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIGNvbnN0IGZvcm1Qb3NpdGlvbiA9ICRlbGVtZW50Lm9mZnNldCgpLnRvcDtcbiAgICBjb25zdCAkc2Nyb2xsUGFyZW50ID0gJGVsZW1lbnQuY2xvc2VzdCgnW3dtc21vb3Roc2Nyb2xsPVwidHJ1ZVwiXScpO1xuICAgIGlmIChpc01vYmlsZUFwcCgpICYmICRzY3JvbGxQYXJlbnQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGlTY3JvbGwgPSBfLmdldCgkc2Nyb2xsUGFyZW50WzBdLCAnaXNjcm9sbCcpO1xuICAgICAgICBsZXQgdG8gPSAtKGZvcm1Qb3NpdGlvbiAtIGlTY3JvbGwueSk7XG4gICAgICAgIHRvID0gKGlTY3JvbGwubWF4U2Nyb2xsWSA+IHRvKSA/IGlTY3JvbGwubWF4U2Nyb2xsWSA6IHRvO1xuICAgICAgICBpU2Nyb2xsLnNjcm9sbFRvKDAsIHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKHtcbiAgICAgICAgICAgIHRvcDogZm9ybVBvc2l0aW9uLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgaW4gdmlld3BvcnQgb3Igbm90XG5leHBvcnQgY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IChlbGVtZW50KSA9PiB7XG4gICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIHJlY3QudG9wID49IDAgJiZcbiAgICAgICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICAgICAgcmVjdC5ib3R0b20gPD0gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSAmJlxuICAgICAgICByZWN0LnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXG4gICAgKTtcbn1cblxuLypGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgcGFnZWFibGUgb2JqZWN0IG9yIG5vdC4qL1xuZXhwb3J0IGNvbnN0IGlzUGFnZWFibGUgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBwYWdlYWJsZSA9IHtcbiAgICAgICAgJ2NvbnRlbnQnOiBbXSxcbiAgICAgICAgJ2ZpcnN0JzogdHJ1ZSxcbiAgICAgICAgJ2xhc3QnOiB0cnVlLFxuICAgICAgICAnbnVtYmVyJzogMCxcbiAgICAgICAgJ251bWJlck9mRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3NpemUnOiAyMCxcbiAgICAgICAgJ3NvcnQnOiBudWxsLFxuICAgICAgICAndG90YWxFbGVtZW50cyc6IDEwLFxuICAgICAgICAndG90YWxQYWdlcyc6IDFcbiAgICB9O1xuICAgIC8vIHBhZ2luYXRlZCBvYmplY3QgbWF5IG9yIG1heSBub3QgY29udGFpbiAnZW1wdHknIHByb3BlcnR5LiBJbiBlaXRoZXIgY2FzZSwgUGFnZWFibGUgc2hvdWxkIHJldHVybiBhcyB0cnVlLlxuICAgIGNvbnN0IHBhZ2luYXRlZE9iaiA9IF8ub21pdChvYmosICdlbXB0eScpO1xuICAgIHJldHVybiAoXy5pc0VxdWFsKF8ua2V5cyhwYWdlYWJsZSksIF8ua2V5cyhwYWdpbmF0ZWRPYmopLnNvcnQoKSkpO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIHJlcGxhY2UgcGF0dGVybnMgaW4gc3RyaW5nIHdpdGggb2JqZWN0IGtleXMgb3IgYXJyYXkgdmFsdWVzXG4gKiBFeGFtcGxlczpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAke2ZpcnN0fSAke2xhc3R9ICEnLCB7Zmlyc3Q6ICd3YXZlbWFrZXInLCBsYXN0OiAnbmcnfSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCAkezB9ICR7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqIEV4YW1wbGVzIGlmIHBhcnNlRXJyb3IgaXMgdHJ1ZTpcbiAqIFV0aWxzLnJlcGxhY2UoJ0hlbGxvLCB7MH0gezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlID0gKHRlbXBsYXRlLCBtYXAsIHBhcnNlRXJyb3I/OiBib29sZWFuKSA9PiB7XG4gICAgbGV0IHJlZ0V4ID0gUkVHRVguUkVQTEFDRV9QQVRURVJOO1xuICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgICByZWdFeCA9IC9cXHsoW15cXH1dKylcXH0vZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdFeCwgZnVuY3Rpb24gKG1hdGNoLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KG1hcCwga2V5KTtcbiAgICB9KTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgZGF0ZSB0aW1lIHR5cGUqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVUeXBlID0gdHlwZSA9PiB7XG4gICAgaWYgKF8uaW5jbHVkZXModHlwZSwgJy4nKSkge1xuICAgICAgICB0eXBlID0gXy50b0xvd2VyKGV4dHJhY3RUeXBlKHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMoW0RhdGFUeXBlLkRBVEUsIERhdGFUeXBlLlRJTUUsIERhdGFUeXBlLlRJTUVTVEFNUCwgRGF0YVR5cGUuREFURVRJTUUsIERhdGFUeXBlLkxPQ0FMREFURVRJTUVdLCB0eXBlKTtcbn07XG5cbmNvbnN0IG1vbWVudFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmIChfLmluY2x1ZGVzKHBhdHRlcm4sICdFJykpIHtcbiAgICAgICBwYXR0ZXJuID0gIF8ucmVwbGFjZShwYXR0ZXJuLCAvRVssXT8vZywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gXy5yZXBsYWNlKHBhdHRlcm4sIC95KmQqL2csICh2YWwpID0+IHZhbC50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZGF0ZSBvYmplY3QuIElmIHZhbCBpcyB1bmRlZmluZWQgaXQgcmV0dXJucyBpbnZhbGlkIGRhdGUgKi9cbmV4cG9ydCBjb25zdCBnZXRWYWxpZERhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgY29uc3QgZGVmYXVsdE1lcmlkaWFuID0gWydBTScsICdQTSddO1xuICAgY29uc3QgbW9tZW50TWVyaWRpYW4gPSBtb21lbnQoKS5fbG9jYWxlLm1lcmlkaWVtKCk7XG4gICAgLy8gVXBkYXRpbmcgbG9jYWxpemVkIG1lcmlkaWFucyB3aXRoIGRlZmF1bHQgbWVyaWRpYW5zIHdoZW4gbW9tZW50IG1lcmlkaWFuIGlzIG5vdCBkZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5tZXJpZGlhbnMgJiYgXy5pbmNsdWRlcyhkZWZhdWx0TWVyaWRpYW4sIG1vbWVudE1lcmlkaWFuKSkge1xuICAgICAgICBfLmZvckVhY2gob3B0aW9ucy5tZXJpZGlhbnMsIChtZXJpZGlhbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKHZhbCwgbWVyaWRpYW4pKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UobWVyaWRpYW4sIGRlZmF1bHRNZXJpZGlhbltpbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IF8uZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gaXNOYXRpdmVQaWNrZXIgPyAoXy5nZXQob3B0aW9ucywgJ3BhdHRlcm4nKSB8fCAgJ1lZWVkvTU0vREQgSEg6bW06c3MnKSA6IChtb21lbnRQYXR0ZXJuKF8uZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykpIHx8ICcnKTtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICBpZiAoIWlzTmFOKChuZXcgRGF0ZSh2YWwpKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHZhbCBpcyBhIHZhbGlkIGRhdGUgb3Igbm90XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBpT1MsIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZm9ybWF0IHRvIGNvbnNpZGVyIGV2ZW4gdGhlIHNlY29uZHMuXG4gICAgICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobmV3IERhdGUodmFsKSwgcGF0dGVybik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSB2YWwudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1vbWVudCh2YWwsIHBhdHRlcm4pLmlzVmFsaWQoKSkge1xuICAgICAgICAvLyBkYXRlIHdpdGggKzUgaG91cnMgaXMgcmV0dXJuZWQgaW4gc2FmYXJpIGJyb3dzZXIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZGF0ZS5cbiAgICAgICAgLy8gSGVuY2UgY29udmVydGluZyB0aGUgZGF0ZSB0byB0aGUgc3VwcG9ydGVkIGZvcm1hdCBcIllZWVkvTU0vREQgSEg6bW06c3NcIiBpbiBJT1NcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChtb21lbnQodmFsKS52YWx1ZU9mKCkpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgdGltZXN0YW1wIHN0cmluZywgY29udmVydCBpdCB0byBhIG51bWJlciovXG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaWYgdGhlIHZhbHVlIGlzIGluIEhIOm1tOnNzIGZvcm1hdCwgaXQgcmV0dXJucyBhIHdyb25nIGRhdGUuIFNvIGFwcGVuZCB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgdG8gZ2V0IGRhdGUqL1xuICAgICAgICBpZiAoIShuZXcgRGF0ZSh2YWwpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCgobW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnICcgKyB2YWwpLCAnWVlZWS1NTS1ERCBISDptbTpzcyBBJyk7XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobW9tZW50KHZhbCkudmFsdWVPZigpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgamF2YXNjcmlwdCBkYXRlIG9iamVjdCovXG5leHBvcnQgY29uc3QgZ2V0TmF0aXZlRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICAgdmFsID0gZ2V0VmFsaWREYXRlT2JqZWN0KHZhbCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbCk7XG59O1xuXG5cbi8qKlxuICogcHJlcGFyZSBhIGJsb2Igb2JqZWN0IGJhc2VkIG9uIHRoZSBjb250ZW50IGFuZCBjb250ZW50IHR5cGUgcHJvdmlkZWRcbiAqIGlmIGNvbnRlbnQgaXMgYmxvYiBpdHNlbGYsIHNpbXBseSByZXR1cm5zIGl0IGJhY2tcbiAqIEBwYXJhbSB2YWxcbiAqIEBwYXJhbSB2YWxDb250ZW50VHlwZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCbG9iID0gKHZhbCwgdmFsQ29udGVudFR5cGU/KSA9PiB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgY29uc3QganNvblZhbCA9IGdldFZhbGlkSlNPTih2YWwpO1xuICAgIGlmIChqc29uVmFsICYmIGpzb25WYWwgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGpzb25WYWwpXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW3ZhbF0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ3RleHQvcGxhaW4nIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBieSBjb21wYXJpbmcgdHdvIG9iamVjdHMgYmFzZWQgb24gdGhlIGZpZWxkc1xuICogQHBhcmFtIG9iajEgb2JqZWN0XG4gKiBAcGFyYW0gb2JqMiBvYmplY3RcbiAqIEBwYXJhbSBjb21wYXJlQnkgc3RyaW5nIGZpZWxkIHZhbHVlcyB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBvYmplY3QgZXF1YWxpdHkgcmV0dXJucyB0cnVlIGJhc2VkIG9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbFdpdGhGaWVsZHMgPSAob2JqMSwgb2JqMiwgY29tcGFyZUJ5KSA9PiB7XG4gICAgLy8gY29tcGFyZUJ5IGNhbiBiZSAnaWQnIG9yICdpZDEsIGlkMicgb3IgJ2lkMSwgaWQyOmlkMydcbiAgICAvLyBTcGxpdCB0aGUgY29tcGFyZWJ5IGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXNcbiAgICBsZXQgX2NvbXBhcmVCeSA9IF8uaXNBcnJheShjb21wYXJlQnkpID8gY29tcGFyZUJ5IDogXy5zcGxpdChjb21wYXJlQnksICcsJyk7XG5cbiAgICBfY29tcGFyZUJ5ID0gXy5tYXAoX2NvbXBhcmVCeSwgXy50cmltKTtcblxuICAgIHJldHVybiBfLmlzRXF1YWxXaXRoKG9iajEsIG9iajIsIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgICAgcmV0dXJuIF8uZXZlcnkoX2NvbXBhcmVCeSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBsZXQgY2IxLCBjYjIsIF9jYjtcblxuICAgICAgICAgICAgLy8gSWYgY29tcGFyZWJ5IGNvbnRhaW5zIDogLCBjb21wYXJlIHRoZSB2YWx1ZXMgYnkgdGhlIGtleXMgb24gZWl0aGVyIHNpZGUgb2YgOlxuICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYjEgPSBjYjIgPSBfLnRyaW0oY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfY2IgPSBfLnNwbGl0KGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIGNiMSA9IF8udHJpbShfY2JbMF0pO1xuICAgICAgICAgICAgICAgIGNiMiA9IF8udHJpbShfY2JbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gXy5nZXQobzEsIGNiMSkgPT09IF8uZ2V0KG8yLCBjYjIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE5vZGUgPSBzZWxlY3RvciA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU3R5bGVTaGVldExvYWRlZCA9IGhyZWYgPT4gISFnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG5cbi8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBzdHlsZXNoZWV0IGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCByZW1vdmVTdHlsZVNoZWV0ID0gaHJlZiA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgYSBzdHlsZXNoZWV0XG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXQgPSAodXJsLCBhdHRyKSA9PiB7XG4gICAgaWYgKGlzU3R5bGVTaGVldExvYWRlZCh1cmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgLy8gVG8gYWRkIGF0dHJpYnV0ZXMgdG8gbGluayB0YWdcbiAgICBpZiAoYXR0ciAmJiBhdHRyLm5hbWUpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiBsaW5rO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBzdHlsZXNoZWV0c1xuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0cyA9ICh1cmxzID0gW10pID0+IHtcbiAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGFuIGFycmF5LCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKSB7XG4gICAgICAgIHVybHMgPSBbdXJsc107XG4gICAgfVxuICAgIHVybHMuZm9yRWFjaChsb2FkU3R5bGVTaGVldCk7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1NjcmlwdExvYWRlZCA9IHNyYyA9PiAhIWdldE5vZGUoYHNjcmlwdFtzcmM9XCIke3NyY31cIl0sIHNjcmlwdFtkYXRhLXNyYz1cIiR7c3JjfVwiXWApO1xuXG5leHBvcnQgY29uc3QgZ2V0TW9tZW50TG9jYWxlT2JqZWN0ID0gKHRpbWVab25lLCBkYXRlT2JqPykgPT4ge1xuICAgIGlmIChkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoZGF0ZU9iaikudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudCgpLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHQgPSBhc3luYyAodXJsLCBsb2FkVmlhU2NyaXB0VGFnLCBjYWNoZWFibGUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IF91cmwgPSB1cmwudHJpbSgpO1xuICAgIGlmICghX3VybC5sZW5ndGggfHwgaXNTY3JpcHRMb2FkZWQoX3VybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmIChsb2FkVmlhU2NyaXB0VGFnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IF91cmw7XG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAgLy9JRVxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHsgIC8vT3RoZXIgYnJvd3NlcnNcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYoY2FjaGVhYmxlKSB7XG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9KS5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICQuZ2V0U2NyaXB0KHVybClcbiAgICAgICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHRzID0gYXN5bmMgKHVybHMgPSBbXSwgbG9hZFZpYVNjcmlwdFRhZyA9IHRydWUpID0+IHtcbiAgICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgICAgIGF3YWl0IGxvYWRTY3JpcHQodXJsLCBsb2FkVmlhU2NyaXB0VGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufTtcblxuZXhwb3J0IGxldCBfV01fQVBQX1BST0pFQ1Q6IGFueSA9IHt9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25TdG9yYWdlSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgbGV0IGl0ZW06IGFueSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0ge307XG4gICAgfVxuICAgIGl0ZW1ba2V5XSA9IHZhbHVlO1xuXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25TdG9yYWdlSXRlbSA9IGtleSA9PiB7XG4gICAgLy8gc2FuaXR5IGNoZWNrIGZvciB0aGlzIHRvIHdvcmsgd2l0aCBuZy1jb2RlZ2VuXG4gICAgbGV0IGl0ZW0gPSB3aW5kb3cgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7IH07XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gdiA9PiBfLmlzQXJyYXkodik7XG5cbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9IHYgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnO1xuXG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSB2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJztcblxuZXhwb3J0IGNvbnN0IGlzQm9vbGVhbiA9IHYgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBibG9iIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBmaWxlIHBhdGhcbiAqIEBwYXJhbSBmaWxlcGF0aFxuICogQHJldHVybnMgcHJvbWlzZSBoYXZpbmcgYmxvYiBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb0Jsb2IgPSAoZmlsZXBhdGgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gUmVhZCB0aGUgZmlsZSBlbnRyeSBmcm9tIHRoZSBmaWxlIFVSTFxuICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGZpbGVwYXRoLCBmdW5jdGlvbiAoZmlsZUVudHJ5KSB7XG4gICAgICAgICAgICBmaWxlRW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgICAgIC8vIGZpbGUgaGFzIHRoZSBjb3Jkb3ZhIGZpbGUgc3RydWN0dXJlLiBUbyBzdWJtaXQgdG8gdGhlIGJhY2tlbmQsIGNvbnZlcnQgdGhpcyBmaWxlIHRvIGphdmFzY3JpcHQgZmlsZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nQmxvYiA9IG5ldyBCbG9iKFtyZWFkZXIucmVzdWx0XSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBmaWxlLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeyAnYmxvYic6IGltZ0Jsb2IsICdmaWxlcGF0aCc6IGZpbGVwYXRoIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzQ29yZG92YSA9ICgpID0+IHtcbiAgICByZXR1cm4gISF3aW5kb3dbJ2NvcmRvdmEnXTtcbn07XG5cbmV4cG9ydCBjb25zdCBBcHBDb25zdGFudHMgPSB7XG4gICAgSU5UX01BWF9WQUxVRTogMjE0NzQ4MzY0N1xufTtcblxuZXhwb3J0IGNvbnN0IG9wZW5MaW5rID0gKGxpbms6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgPSAnX3NlbGYnKSA9PiB7XG4gICAgaWYgKGhhc0NvcmRvdmEoKSAmJiBfLnN0YXJ0c1dpdGgobGluaywgJyMnKSkge1xuICAgICAgICBsb2NhdGlvbi5oYXNoID0gbGluaztcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cub3BlbihsaW5rLCB0YXJnZXQpO1xuICAgIH1cbn07XG5cbi8qIHV0aWwgZnVuY3Rpb24gdG8gbG9hZCB0aGUgY29udGVudCBmcm9tIGEgdXJsICovXG5leHBvcnQgY29uc3QgZmV0Y2hDb250ZW50ID0gKGRhdGFUeXBlLCB1cmw6IHN0cmluZywgaW5TeW5jOiBib29sZWFuID0gZmFsc2UsIHN1Y2Nlc3M/LCBlcnJvcj8pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiAkLmFqYXgoeyB0eXBlOiAnZ2V0JywgZGF0YVR5cGU6IGRhdGFUeXBlLCB1cmw6IHVybCwgYXN5bmM6ICFpblN5bmMgfSlcbiAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gc3VjY2VzcyAmJiBzdWNjZXNzKHJlc3BvbnNlKSlcbiAgICAgICAgLmZhaWwocmVhc29uID0+IGVycm9yICYmIGVycm9yKHJlYXNvbikpO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgcHJvbWlzZSwgdGhlbiBvYmplY3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7UHJvbWlzZTxUPiB8IFR9IGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fVxuICovXG5leHBvcnQgY29uc3QgdG9Qcm9taXNlID0gPFQ+KGE6IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYSBhcyBUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaW52b2tlcyB0aGUgZ2l2ZW4gdGhlIGZ1bmN0aW9uIChmbikgdW50aWwgdGhlIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlcyBvciB0aGUgbWF4aW11bSBudW1iZXJcbiAqIG9mIHJldHJpZXMgaXMgcmVhY2hlZCBvciBvbkJlZm9yZVJldHJ5IHJldHVybnMgZmFsc2UuXG4gKlxuICogQHBhcmFtIGZuIC0gYSBmdW5jdGlvbiB0aGF0IGlzIG5lZWRzIHRvIGJlIGludm9rZWQuIFRoZSBmdW5jdGlvbiBjYW4gYWxzbyByZXR1cm4gYSBwcm9taXNlIGFzIHdlbGwuXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBtaW5pbXVtIHRpbWUgZ2FwIGJldHdlZW4gc3VjY2Vzc2l2ZSByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAuXG4gKiBAcGFyYW0gbWF4UmV0cmllcyAtIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBGb3IgYWxsIG90aGVyIHZhbHVlcyxcbiAqIG1heFJldHJpZXMgaXMgaW5maW5pdHkuXG4gKiBAcGFyYW0gb25CZWZvcmVSZXRyeSAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIHJlLWludm9raW5nIGFnYWluLiBUaGlzIGZ1bmN0aW9uIGNhblxuICogcmV0dXJuIGZhbHNlIG9yIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHRvIGZhbHNlIHRvIHN0b3AgZnVydGhlciByZXRyeSBhdHRlbXB0cy5cbiAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGZuIGlzIHN1Y2Nlc3MgKG9yKSBtYXhpbXVtIHJldHJ5IGF0dGVtcHRzIHJlYWNoZWRcbiAqIChvcikgb25CZWZvcmVSZXRyeSByZXR1cm5lZCBmYWxzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJldHJ5SWZGYWlscyA9IChmbjogKCkgPT4gYW55LCBpbnRlcnZhbDogbnVtYmVyLCBtYXhSZXRyaWVzOiBudW1iZXIsIG9uQmVmb3JlUmV0cnkgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKSA9PiB7XG4gICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgIGNvbnN0IHRyeUZuID0gKCkgPT4ge1xuICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIGlmIChfLmlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbWF4UmV0cmllcyA9IChfLmlzTnVtYmVyKG1heFJldHJpZXMpICYmIG1heFJldHJpZXMgPiAwID8gbWF4UmV0cmllcyA6IDApO1xuICAgIGludGVydmFsID0gKF8uaXNOdW1iZXIoaW50ZXJ2YWwpICYmIGludGVydmFsID4gMCA/IGludGVydmFsIDogMCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyckFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b1Byb21pc2U8Ym9vbGVhbj4ob25CZWZvcmVSZXRyeSgpKS50aGVuKGZ1bmN0aW9uIChyZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnkgIT09IGZhbHNlICYmICghbWF4UmV0cmllcyB8fCByZXRyeUNvdW50IDw9IG1heFJldHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sICgpID0+IHJlamVjdChlcnJBcmdzKSk7XG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIG9mIGEgZGVmZXIgY3JlYXRlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBoYXMgYWJvcnQgZnVuY3Rpb24gdGhhdCB3aWxsIHJlamVjdCB0aGUgZGVmZXIgd2hlbiBjYWxsZWQuXG4gKiBAcmV0dXJucyB7Kn0gYW5ndWxhciBkZWZlciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFib3J0YWJsZURlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IF9kZWZlcjogYW55ID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZWplY3Q6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG51bGwsXG4gICAgICAgIG9uQWJvcnQ6ICgpID0+IHsgfSxcbiAgICAgICAgaXNBYm9ydGVkOiBmYWxzZVxuICAgIH07XG4gICAgX2RlZmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIF9kZWZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICBfZGVmZXIucHJvbWlzZS5hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgdHJpZ2dlckZuKF9kZWZlci5vbkFib3J0KTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCgnYWJvcnRlZCcpO1xuICAgICAgICBfZGVmZXIuaXNBYm9ydGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBfZGVmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ1NTUnVsZSA9IChydWxlU2VsZWN0b3I6IHN0cmluZywgcnVsZXM6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTtcbiAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYCR7cnVsZVNlbGVjdG9yfSB7ICR7cnVsZXN9IH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAobGluaykgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIC8vIElmIHVybCBwYXJhbXMgYXJlIHByZXNlbnQsIGNvbnN0cnVjdCBwYXJhbXMgb2JqZWN0IGFuZCBwYXNzIGl0IHRvIHNlYXJjaFxuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IF8uc3BsaXQobGluay5zdWJzdHJpbmcoaW5kZXggKyAxLCBsaW5rLmxlbmd0aCksICcmJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBwYXJhbSA9IF8uc3BsaXQocGFyYW0sICc9Jyk7XG4gICAgICAgICAgICBwYXJhbXNbcGFyYW1bMF1dID0gcGFyYW1bMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJvdXRlTmFtZUZyb21MaW5rID0gKGxpbmspID0+IHtcbiAgICBsaW5rID0gbGluay5yZXBsYWNlKCcjLycsICcvJyk7XG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXBwbGVQcm9kdWN0ID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5leHBvcnQgY29uc3QgZGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbm9vcCxcbiAgICAgICAgcmVqZWN0OiBub29wXG4gICAgfTtcbiAgICBkLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGQucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIGQucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHJldHVybiBkO1xufTtcblxuLypcbiAqIEludm9rZXMgdGhlIGdpdmVuIGxpc3Qgb2YgZnVuY3Rpb25zIHNlcXVlbnRpYWxseSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhIHByb21pc2UsXG4gKiB0aGVuIG5leHQgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9ubHkgaWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjdXRlUHJvbWlzZUNoYWluID0gKGZucywgYXJncywgZD8sIGk/KSA9PiB7XG4gICAgZCA9IGQgfHwgZGVmZXIoKTtcbiAgICBpID0gaSB8fCAwO1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGZucyA9IF8uZmlsdGVyKGZucywgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gIShfLmlzVW5kZWZpbmVkKGZuKSB8fCBfLmlzTnVsbChmbikpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGZucyAmJiBpIDwgZm5zLmxlbmd0aCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9Qcm9taXNlKGZuc1tpXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4oZm5zLCBhcmdzLCBkLCBpICsgMSksIGQucmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZC5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBkLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGQucHJvbWlzZTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHR3byBkYXRhIHNvdXJjZXMgYW5kIHdpbGwgY2hlY2sgaWYgYm90aCBhcmUgc2FtZSBieSBjb21wYXJpbmcgdGhlIHVuaXF1ZSBpZCBhbmRcbiAqIGNvbnRleHQgaW4gd2hpY2ggZGF0YXNvdXJjZXMgYXJlIHByZXNlbnRcbiAqIEByZXR1cm5zIHsqfSBib29sZWFuIHRydWUvIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RhdGFTb3VyY2VFcXVhbCA9IChkMSwgZDIpID0+IHtcbiAgICByZXR1cm4gZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpID09PSBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgJiZcbiAgICAgICAgXy5pc0VxdWFsKGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUiksIGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikpO1xufTtcblxuLyoqXG4gKiBjaGVja3MgaWYgdGhlIHBhc3NlZCBkYXRhc291cmNlIGNvbnRleHQgbWF0Y2hlcyB3aXRoIHBhc3NlZCBjb250ZXh0XG4gKiBAcGFyYW0gZHMsIGRhdGFzb3VyY2UgaGF2aW5nIGEgY29udGV4dFxuICogQHBhcmFtIGN0eCwgY29udGV4dCB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhU291cmNlQ3R4ID0gKGRzLCBjdHgpID0+IHtcbiAgICByZXR1cm4gZHMuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSA9PT0gY3R4O1xufTtcblxuLyoqXG4gKiBUaGlzIHRyYXZlcnNlcyB0aGUgZmlsdGVyZXhwcmVzc2lvbnMgb2JqZWN0IHJlY3Vyc2l2ZWx5IGFuZCBwcm9jZXNzIHRoZSBiaW5kIHN0cmluZyBpZiBhbnkgaW4gdGhlIG9iamVjdFxuICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIG9iamVjdFxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSBjb250ZXh0IHNjb3BlIG9mIHRoZSB2YXJpYWJsZVxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlID0gKGNvbnRleHQsIGZpbHRlckV4cHJlc3Npb25zLCB2YXJpYWJsZT8pID0+IHtcbiAgICBjb25zdCBkZXN0cm95Rm4gPSBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lci5iaW5kKGNvbnRleHQpIDogXy5ub29wO1xuICAgIGNvbnN0IGZpbHRlciQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgYmluZEZpbEV4cE9iaiA9IChvYmosIHRhcmdldE5vZGVLZXkpID0+IHtcbiAgICAgICBjb25zdCBsaXN0ZW5lciA9IChuZXdWYWwsIG9sZFZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKChuZXdWYWwgPT09IG9sZFZhbCAmJiBfLmlzVW5kZWZpbmVkKG5ld1ZhbCkpIHx8IChfLmlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgIV8uaXNVbmRlZmluZWQob2xkVmFsKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTa2lwIGNsb25pbmcgZm9yIGJsb2IgY29sdW1uXG4gICAgICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydibG9iJywgJ2ZpbGUnXSwgb2JqLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gZ2V0Q2xvbmVkT2JqZWN0KG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiB3aGVyZSB3ZSBhcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gYmluZCBjb21wbGV0ZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChvYmoudGFyZ2V0ID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBleGlzdGluZyBkYXRhYmluZGluZyBlbGVtZW50XG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBub3cgYWRkIGFsbCB0aGUgcmV0dXJuZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgXy5mb3JFYWNoKG5ld1ZhbCwgZnVuY3Rpb24gKHZhbHVlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0JzogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogb2JqLm1hdGNoTW9kZSB8fCAnc3RhcnRpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB2YWx1ZSB0byB0aGUgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgb2JqW3RhcmdldE5vZGVLZXldID0gbmV3VmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyJC5uZXh0KHsgZmlsdGVyRXhwcmVzc2lvbnMsIG5ld1ZhbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKG9ialt0YXJnZXROb2RlS2V5XSwgJ2JpbmQ6JykpIHtcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IG5lZWRzIGEgY2hlY2ssIHdoZXJlIGlzIHRoaXMgdXNlZFxuICAgICAgICAgICAgZGVzdHJveUZuKFxuICAgICAgICAgICAgICAgICR3YXRjaChvYmpbdGFyZ2V0Tm9kZUtleV0ucmVwbGFjZSgnYmluZDonLCAnJyksIGNvbnRleHQsIHt9LCB2YXJpYWJsZSA/IHZhcmlhYmxlLmludm9rZU9uRmlsdGVydEV4cHJlc3Npb25DaGFuZ2UuYmluZCh2YXJpYWJsZSwgb2JqLCB0YXJnZXROb2RlS2V5KSA6IGxpc3RlbmVyLCB1bmRlZmluZWQsIGZhbHNlLCB7IGFycmF5VHlwZTogXy5pbmNsdWRlcyhbJ2luJywgJ25vdGluJ10sIG9iai5tYXRjaE1vZGUpIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucyA9PiB7XG4gICAgICAgIGlmIChleHByZXNzaW9ucy5ydWxlcykge1xuICAgICAgICAgICAgXy5mb3JFYWNoKGV4cHJlc3Npb25zLnJ1bGVzLCAoZmlsRXhwT2JqLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5ydWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbEV4cE9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICdzZWNvbmR2YWx1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWx0ZXJFeHByZXNzaW9ucyk7XG5cbiAgICByZXR1cm4gZmlsdGVyJDtcbn07XG5cbi8vIFRoaXMgbWV0aG9kIHdpbGwgc2V0IHRoZSBnaXZlbiBwcm90byBvbiB0aGUgdGFyZ2V0XG5leHBvcnQgY29uc3QgZXh0ZW5kUHJvdG8gPSAodGFyZ2V0LCBwcm90bykgPT4ge1xuICAgIGxldCBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90bykuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgICBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKTtcbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBwcm90b3R5cGUgb2YgY3JlYXRlZCBjb21wb25lbnQgYW5kIHByb3RvdHlwZSBvZiBjb250ZXh0IGFyZSBzYW1lXG4gICAgICAgIGlmIChwcm90byA9PT0gX3Byb3RvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF9wcm90bywgcHJvdG8pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4dHJhU2xhc2hlcyA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICBjb25zdCBiYXNlNjRyZWdleCA9IC9eZGF0YTppbWFnZVxcLyhbYS16XXsyLH0pO2Jhc2U2NCwvO1xuICAgIGlmIChfLmlzU3RyaW5nKHVybCkpIHtcbiAgICAgICAgLypcbiAgICAgICAgKiBzdXBwb3J0IGZvciBtb2JpbGUgYXBwcyBoYXZpbmcgbG9jYWwgZmlsZSBwYXRoIHVybCBzdGFydGluZyB3aXRoIGZpbGU6Ly8vIGFuZFxuICAgICAgICAqIHN1cHBvcnQgZm9yIGJhc2U2NCBmb3JtYXRcbiAgICAgICAgKiAqL1xuICAgICAgICBpZiAoXy5zdGFydHNXaXRoKHVybCwgJ2ZpbGU6Ly8vJykgfHwgYmFzZTY0cmVnZXgudGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZShuZXcgUmVnRXhwKCcoW146XVxcLykoXFwvKSsnLCAnZycpLCAnJDEnKTtcbiAgICB9XG59O1xuXG4kLmNhY2hlZFNjcmlwdCA9ICgoKSA9PiB7XG4gICAgY29uc3QgaW5Qcm9ncmVzcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBTZXQoKTtcblxuICAgIGNvbnN0IGlzSW5Qcm9ncmVzcyA9IHVybCA9PiBpblByb2dyZXNzLmhhcyh1cmwpO1xuICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSB1cmwgPT4gcmVzb2x2ZWQuaGFzKHVybCk7XG4gICAgY29uc3Qgb25Mb2FkID0gdXJsID0+IHtcbiAgICAgICAgcmVzb2x2ZWQuYWRkKHVybCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZ2V0KHVybCkucmVzb2x2ZSgpO1xuICAgICAgICBpblByb2dyZXNzLmRlbGV0ZSh1cmwpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRJblByb2dyZXNzID0gdXJsID0+IHtcbiAgICAgICAgbGV0IHJlc0ZuO1xuICAgICAgICBsZXQgcmVqRm47XG4gICAgICAgIGNvbnN0IHByb21pc2U6IGFueSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgcmVzRm4gPSByZXM7XG4gICAgICAgICAgICByZWpGbiA9IHJlajtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvbWlzZS5yZXNvbHZlID0gcmVzRm47XG4gICAgICAgIHByb21pc2UucmVqZWN0ID0gcmVqRm47XG5cbiAgICAgICAgaW5Qcm9ncmVzcy5zZXQodXJsLCBwcm9taXNlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSW5Qcm9ncmVzcyh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEluUHJvZ3Jlc3ModXJsKTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgfTtcblxuICAgICAgICAkLmFqYXgob3B0aW9ucykuZG9uZSgoKSA9PiBvbkxvYWQodXJsKSk7XG5cbiAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgfTtcbn0pKCk7XG5cbmNvbnN0IERFRkFVTFRfRElTUExBWV9GT1JNQVRTID0ge1xuICAgIERBVEU6ICd5eXl5LU1NLWRkJyxcbiAgICBUSU1FOiAnaGg6bW0gYScsXG4gICAgVElNRVNUQU1QOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbiAgICBEQVRFVElNRTogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG59O1xuLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGlzcGxheSBkYXRlIGZvcm1hdCBmb3IgZ2l2ZW4gdHlwZVxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCA9IHR5cGUgPT4ge1xuICAgIHJldHVybiBERUZBVUxUX0RJU1BMQVlfRk9STUFUU1tfLnRvVXBwZXIodHlwZSldO1xufTtcblxuLy8gR2VuZXJhdGUgZm9yIGF0dHJpYnV0ZSBvbiBsYWJlbCBhbmQgSUQgb24gaW5wdXQgZWxlbWVudCwgc28gdGhhdCBsYWJlbCBlbGVtZW50cyBhcmUgYXNzb2NpYXRlZCB0byBmb3JtIGNvbnRyb2xzXG5leHBvcnQgY29uc3QgYWRkRm9ySWRBdHRyaWJ1dGVzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbGFiZWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwuY29udHJvbC1sYWJlbCcpO1xuICAgIGxldCBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgIGlmICghaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTtcbiAgICB9XG4gICAgLyppZiB0aGVyZSBhcmUgb25seSBvbmUgaW5wdXQgZWwgYW5kIGxhYmVsIEVsIGFkZCBpZCBhbmQgZm9yIGF0dHJpYnV0ZSovXG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIGlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJChpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdbd2lkZ2V0LWlkXScpLmF0dHIoJ3dpZGdldC1pZCcpO1xuICAgICAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgICAgIHNldEF0dHIoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgICAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnZm9yJywgd2lkZ2V0SWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qQWRkaW5nIGFyaWEtbGFiZWxsZWRieSB0byByYWRpb3NldCwgY2hlY2tib3hzZXQgd2lkZ2V0cyovXG4gICAgY29uc3QgdWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndWwnKTtcbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgdWxFbC5sZW5ndGggJiYgKHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdyYWRpb2dyb3VwJyB8fCB1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnZ3JvdXAnKSkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICd3bS1ncm91cC1sYWJlbC0nICsgZ2VuZXJhdGVHVUlkKCk7XG4gICAgICAgIHNldEF0dHIodWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHdpZGdldElkKTtcbiAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIGxlZnQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG5lZ2F0aXZlIHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogVG8gRml4IHRoZSBjb250YWluZXIgb3ZlcmxhcHBpbmcgaXNzdWUgY2hhbmdpbmcgdGhlIGNvbnRyYWluZXIgbGVmdCB0cmFuc2xhdGlvbiB0byAwXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAtIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSAtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAtIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgLSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG4gICAgICAgIGlmIChjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxIDwgMCkge1xuICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSAwO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgfSk7XG4gICB9O1xuXG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiByaWdodCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gb3V0IG9mIHRoZSB2aWV3cG9ydCB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBjb250YWluZXJFbGVtICBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmICBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuICAgZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMgPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxlID8gXy5wYXJzZUludChlbGUuY3NzKCd3aWR0aCcpKSA6IF8ucGFyc2VJbnQoY29udGFpbmVyRWxlbS5jc3MoJ3dpZHRoJykpO1xuICAgICAgICBjb25zdCB2aWV3UG9ydFdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSBwYXJlbnRFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRSaWdodCA9IHBhcmVudERpbWVzaW9uLnJpZ2h0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGxldCBuZXdMZWZ0O1xuICAgICAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICAgICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcblxuICAgICAgICAgICAgaWYgKHZpZXdQb3J0V2lkdGggLSAocGFyZW50UmlnaHQgKyBwYXJlbnREaW1lc2lvbi53aWR0aCkgPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgPSBwYXJlbnRSaWdodCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IG5ld0xlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICAgICB9KTtcbiAgIH07XG5cbiAgLyoqXG4gICAqIEZvciBnaXZlbiBlbGVtZW50IHNldCB0aGUgdHJhc2xhdGlvblxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSB0YW5zbGF0ZWQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zIHRyYW5zbGF0ZSBtYXRyaXggcG9zaXRpb25zXG4gICAqL1xuICAgZXhwb3J0IGNvbnN0IHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUG9zaXRpb24gPSAndHJhbnNsYXRlM2QoJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgKyAncHgsICcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQyICsgJ3B4LCAwcHgpJztcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk9UcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgIH07XG5cbiAgIC8qKlxuICAgICpcbiAgICAqIEBwYXJhbSBjb250YWluZXJFbGVtIGVsZW1ldCBmb3IgdGhlIFdlYktpdENTU01hdHJpeFxuICAgICovXG4gICAgZXhwb3J0IGNvbnN0IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXggPSAoY29udGFpbmVyRWxlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIFdlYktpdENTU01hdHJpeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTVNDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS53ZWJraXRUcmFuc2Zvcm0pO1xuICAgIH1cblxuLy8gY2xvc2UgYWxsIHRoZSBwb3BvdmVycy5cbmV4cG9ydCBjb25zdCBjbG9zZVBvcG92ZXIgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC5jbG9zZXN0KCcuYXBwLXBvcG92ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFwcC1wb3BvdmVyLXdyYXBwZXInKTtcbiAgICAgICAgXy5mb3JFYWNoKHBvcG92ZXJFbGVtZW50cywgKGVsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZS53aWRnZXQuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgZWxlLndpZGdldC5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaW4gdGhlIGFwcFxuICogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgZW5kIHVzZXIgZGV2ZWxvcGVyIG9mIFdNIGFwcFxuICogVGhpcyBpcyB0aGUgYWx0ZXJuYXRpdmUgZm9yICRycy4kc2FmZUFwcGx5KCkgaW4gQW5ndWxhckpTXG4gKiBTZWUgJGFwcERpZ2VzdCBpbiB1dGlscyBmb3IgbW9yZSBpbmZvXG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlY3RDaGFuZ2VzID0gJGFwcERpZ2VzdDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byB0cmlnZ2VyIHRoZSBhY3Rpb24vbGluayBvZiBtZW51L25hdiBpdGVtXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0gaXRlbSAtIGl0ZW0gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCB0cmlnZ2VySXRlbUFjdGlvbiA9IChzY29wZSwgaXRlbSkgPT4ge1xuICAgIGxldCBpdGVtTGluayA9IGl0ZW0ubGluaztcbiAgICBjb25zdCBpdGVtQWN0aW9uID0gaXRlbS5hY3Rpb247XG4gICAgY29uc3QgbGlua1RhcmdldCA9IGl0ZW0udGFyZ2V0O1xuICAgIGlmIChpdGVtQWN0aW9uKSB7XG4gICAgICAgIGlmICghc2NvcGUuaXRlbUFjdGlvbkZuKSB7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IFRoaXMgd2lsbCBub3Qgd29yayBhcyBmdW5jdGlvbiB3aWxsIGJlIGR5bmFtaWNcbiAgICAgICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbiA9ICRwYXJzZUV2ZW50KGl0ZW1BY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuKHNjb3BlLnVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dCwgT2JqZWN0LmNyZWF0ZShpdGVtKSk7XG4gICAgfVxuICAgIGlmIChpdGVtTGluaykge1xuICAgICAgICBpZiAoaXRlbUxpbmsuc3RhcnRzV2l0aCgnIy8nKSAmJiAoIWxpbmtUYXJnZXQgfHwgbGlua1RhcmdldCA9PT0gJ19zZWxmJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZ2V0VXJsUGFyYW1zKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGl0ZW1MaW5rID0gZ2V0Um91dGVOYW1lRnJvbUxpbmsoaXRlbUxpbmspO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gXy5nZXQoc2NvcGUsICdyb3V0ZScpIHx8IF8uZ2V0KHNjb3BlLCAnbWVudVJlZi5yb3V0ZScpO1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFtpdGVtTGlua10sIHsgcXVlcnlQYXJhbXMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuTGluayhpdGVtTGluaywgbGlua1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRzb3VyY2UgZnJvbSB0aGUgZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBleHByZXNzaW9uIG9mIHRoZSBkYXRhc2V0XG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzWyRpXS5hZGRyZXNzZXNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICogRXhhbXBsZTI6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uYWRkcmVzc2VzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFzb3VyY2VGcm9tRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGlzQm91bmRUb1ZhcmlhYmxlID0gXy5zdGFydHNXaXRoKGV4cHIsICdWYXJpYWJsZXMuJyk7XG4gICAgY29uc3QgaXNCb3VuZFRvV2lkZ2V0ID0gXy5zdGFydHNXaXRoKGV4cHIsICdXaWRnZXRzLicpO1xuICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgIGlmIChpc0JvdW5kVG9WYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gXy5nZXQoc2NvcGUudmlld1BhcmVudC5WYXJpYWJsZXMsIHBhcnRzWzFdKTtcbiAgICB9XG4gICAgaWYgKGlzQm91bmRUb1dpZGdldCkge1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IF8uZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBsZXQgd2lkZ2V0Qm91bmRFeHByZXNzaW9uO1xuICAgICAgICB3aWRnZXRCb3VuZEV4cHJlc3Npb24gPSAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikgPyB3aWRnZXREYXRhc2V0Qm91bmRFeHByIDogd2lkZ2V0U2NvcGUuYmluZGRhdGFzZXQ7XG4gICAgICAgIHJldHVybiBnZXREYXRhc291cmNlRnJvbUV4cHIod2lkZ2V0Qm91bmRFeHByZXNzaW9uLCB3aWRnZXRTY29wZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0YXNldCBib3VuZCBleHByZXNzaW9uIGZyb20gbGlzdCBjdXJyZW50aXRlbSBleHByZXNzaW9uXG4gKiBAcGFyYW0gZXhwciAtIGJvdW5kIGRhdGFzZXQgZXhwcmVzc2lvblxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uZGV0YWlsc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXRcIiB0aGVuIGl0IHJldHVybnMgZXhwcmVzc2lvbiBhcyBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXRbJGldLmRldGFpbHNcIlxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdEN1cnJlbnRJdGVtRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRJdGVtUmVnRXggPSAvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2c7XG4gICAgaWYgKGN1cnJlbnRJdGVtUmVnRXgudGVzdChleHByKSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGV4cHIuc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBfLmdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgaWYgKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXREYXRhc2V0Qm91bmRFeHByfVskaV1gKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0Q3VycmVudEl0ZW1FeHByKGV4cHIsIHNjb3BlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXRTY29wZS5iaW5kZGF0YXNldH1bJGldYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG59O1xuXG4vLyB0aGlzIHdpbGwgYWRkIHRoZSBodG1sIHRhZyB0byB0aGUgd2lkZ2V0IHRvIHNjb3BlIHRoZSBjc3MgdG8gdGhlIHBhZ2UuXG5leHBvcnQgY29uc3QgZmluZFJvb3RDb250YWluZXIgPSAoJGVsKSA9PiB7XG4gICAgbGV0IHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wcmVmYWInKTtcbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYXJ0aWFsJyk7XG4gICAgfVxuICAgIGlmKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtc3BhLXBhZ2UnKTtcbiAgICB9XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFnZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdC5sZW5ndGggJiYgcm9vdC5wYXJlbnQoKVswXS50YWdOYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgICBSRVFVSVJFRDogJ3JlcXVpcmVkJyxcbiAgICBNQVhDSEFSUzogJ21heGNoYXJzJyxcbiAgICBNSU5WQUxVRTogJ21pbnZhbHVlJyxcbiAgICBNQVhWQUxVRTogJ21heHZhbHVlJyxcbiAgICBSRUdFWFA6ICdyZWdleHAnLFxuICAgIE1JTkRBVEU6ICdtaW5kYXRlJyxcbiAgICBNQVhEQVRFOiAnbWF4ZGF0ZScsXG4gICAgTUlOVElNRTogJ21pbnRpbWUnLFxuICAgIE1BWFRJTUU6ICdtYXh0aW1lJyxcbiAgICBFWENMVURFREFURVM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIEVYQ0xVREVEQVlTOiAnZXhjbHVkZWRheXMnXG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtRmlsZVVSSSA9ICh1cmwpID0+IHtcbiAgICBpZiAoXy5pc1N0cmluZyh1cmwpICYmIGhhc0NvcmRvdmEoKSAmJiB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FuZHJvaWQoKSAmJiBsb2NhdGlvbi5ocmVmLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5ICsgJ3d3dycsICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kU2NyaXB0VG9IZWFkID0gKGNhbGxiYWNrKSA9PntcblxuICAgIGNvbnN0IHNjcmlwdGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdGVsZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgIGNhbGxiYWNrKFdNX0NVU1RPTV9GT1JNQVRURVJTKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBmaWxlICcgKyBzY3JpcHRlbGUuc3JjICsgJ1xcbicgKyBlcnIpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBzY3JpcHRlbGUuc3JjID0gJy4vZXh0ZW5zaW9ucy9mb3JtYXR0ZXJzLmpzJztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdGVsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwU2V0dGluZyA9IChrZXksIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzICYmIF8uZ2V0KF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncywga2V5KSkgfHwgZGVmYXVsdFZhbHVlO1xufTtcblxuLyogdGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpdGVtY2xhc3MgZGVwZW5kaW5nIG9uIGl0ZW1zcGVycm93LlxuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAyIGZvciBsYXJnZSBkZXZpY2UsIHRoZW4gaXRlbWNsYXNzIGlzICdjb2wteHMtMSBjb2wtc20tMSBjb2wtbGctMidcbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgJ2xnLTMnIHRoZW4gaXRlbWNsYXNzIGlzICdjb2wtbGctMydcbiovXG5leHBvcnQgY29uc3Qgc2V0TGlzdENsYXNzID0gKHNjb3BlKSA9PiB7XG4gICAgbGV0IHRlbXAgPSAnJztcbiAgICBpZiAoc2NvcGUuaXRlbXNwZXJyb3cpIHtcbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlSW50KHNjb3BlLml0ZW1zcGVycm93LCAxMCkpKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBjb250YWluaW5nIHN0cmluZyBvZiBjbGFzc2VzXG4gICAgICAgICAgICBfLnNwbGl0KHNjb3BlLml0ZW1zcGVycm93LCAnICcpLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IF8uc3BsaXQoY2xzLCAnLScpO1xuICAgICAgICAgICAgICAgIGNscyA9IGAke2tleXNbMF19LSR7KDEyIC8gcGFyc2VJbnQoa2V5c1sxXSwgMTApKX1gO1xuICAgICAgICAgICAgICAgIHRlbXAgKz0gYCBjb2wtJHtjbHN9YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IHRlbXAudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgaGF2aW5nIGludGVnZXIgdmFsdWUuXG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gYGNvbC14cy0keygxMiAvIHBhcnNlSW50KHNjb3BlLml0ZW1zcGVycm93LCAxMCkpfWA7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBJZiBpdGVtc3BlcnJvdyBpcyBub3Qgc3BlY2lmaWVkIG1ha2UgaXQgZnVsbCB3aWR0aFxuICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gJ2NvbC14cy0xMic7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnQgPSAobFZpZXc6IGFueSwgdmlld1BhcmVudEFwcD86IGFueSkgPT4ge1xuICAgIGxldCBwYXJlbnQgPSBmaW5kVmlld1BhcmVudChsVmlldyk7XG4gICAgcmV0dXJuIHBhcmVudCA/IHBhcmVudCA6IHZpZXdQYXJlbnRBcHA7XG59XG5cbmV4cG9ydCBjb25zdCBmaW5kVmlld1BhcmVudCA9IChsVmlldzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGxWaWV3WzE2XSA/IGxWaWV3WzE2XVs4XSA6IGxWaWV3WzE2XTtcbiAgICAvKmlmKGxWaWV3WzNdID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsVmlld1s4XTtcbiAgICB9XG4gICAgbGV0IHBhcmVudGxWaWV3ID0gbFZpZXdbM107XG4gICAgaWYodHlwZW9mIGxWaWV3WzFdID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH1cbiAgICBsZXQgY29tcG9uZW50VHlwZSA9IGxWaWV3WzFdW1widHlwZVwiXTtcbiAgICBpZihjb21wb25lbnRUeXBlID09PSAwIHx8IGNvbXBvbmVudFR5cGUgPT09IDEpIHtcbiAgICAgICAgbGV0IHAgPSBsVmlld1s4XTtcbiAgICAgICAgLy8gdHMtaWdub3JlXG4gICAgICAgIGlmKHAuaGFzT3duUHJvcGVydHkoXCJpc0RpYWxvZ0NvbXBvbmVudFwiKSB8fCBwLmhhc093blByb3BlcnR5KFwiaXNDb250YWluZXJEaXJlY3RpdmVcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgfSovXG59XG5cbi8qZXhwb3J0IGNvbnN0IGdldFBhcmVudCA9IChwYXJlbnQ6IGFueSkgPT4ge1xuICAgIGlmKHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzRHluYW1pY0NvbXBvbmVudFwiKSB8fCBwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc1BhZ2VDb21wb25lbnRcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH0gZWxzZXtcbiAgICAgICAgcmV0dXJuIHBhcmVudC52aWV3UGFyZW50ID8gZ2V0UGFyZW50KHBhcmVudC52aWV3UGFyZW50KSA6IHBhcmVudDtcbiAgICB9XG5cbn0qL1xuIl19