@wavemaker/app-ng-runtime 12.0.0-next.45032 → 12.0.0-next.45501

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +405 -451
  2. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +2 -3
  3. app-ng-runtime/build-task/esm2022/public_api.mjs +1 -3
  4. app-ng-runtime/build-task/fesm2022/index.mjs +406 -454
  5. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  6. app-ng-runtime/build-task/public_api.d.ts +0 -2
  7. app-ng-runtime/components/base/bundles/index.umd.js +14 -62
  8. app-ng-runtime/components/base/components.module.d.ts +11 -12
  9. app-ng-runtime/components/base/esm2022/components.module.mjs +1 -5
  10. app-ng-runtime/components/base/esm2022/public_api.mjs +1 -2
  11. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +15 -25
  12. app-ng-runtime/components/base/fesm2022/index.mjs +15 -62
  13. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  14. app-ng-runtime/components/base/public_api.d.ts +0 -1
  15. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +5 -10
  16. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +17 -0
  17. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +18 -1
  18. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +17 -0
  19. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  20. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +1 -0
  21. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +1 -3
  22. app-ng-runtime/components/data/form/fesm2022/index.mjs +0 -2
  23. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  24. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +11 -0
  25. app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +12 -1
  26. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +11 -0
  27. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  28. app-ng-runtime/components/input/default/bundles/index.umd.js +63 -39
  29. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +0 -1
  30. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +5 -8
  31. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +5 -8
  32. app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +57 -29
  33. app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +1 -4
  34. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +2 -2
  35. app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +4 -1
  36. app-ng-runtime/components/input/default/fesm2022/index.mjs +63 -39
  37. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  38. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +0 -1
  39. app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
  40. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +3 -2
  41. app-ng-runtime/components/input/epoch/bundles/index.umd.js +3 -0
  42. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -1
  43. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +3 -0
  44. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  45. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +31 -5
  46. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +34 -8
  47. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +32 -6
  48. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  49. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +6 -2
  50. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +2 -2
  51. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +2 -2
  52. app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +2 -2
  53. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +2 -2
  54. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  55. app-ng-runtime/core/bundles/index.umd.js +6 -16
  56. app-ng-runtime/core/enums/enums.d.ts +1 -2
  57. app-ng-runtime/core/esm2022/enums/enums.mjs +1 -2
  58. app-ng-runtime/core/esm2022/types/types.mjs +1 -4
  59. app-ng-runtime/core/esm2022/utils/build-utils.mjs +1 -6
  60. app-ng-runtime/core/esm2022/utils/utils.mjs +4 -3
  61. app-ng-runtime/core/fesm2022/index.mjs +4 -12
  62. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  63. app-ng-runtime/core/types/types.d.ts +1 -5
  64. app-ng-runtime/core/utils/utils.d.ts +1 -0
  65. app-ng-runtime/mobile/core/bundles/index.umd.js +18 -2
  66. app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +19 -3
  67. app-ng-runtime/mobile/core/fesm2022/index.mjs +18 -2
  68. app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
  69. app-ng-runtime/package.json +1 -1
  70. app-ng-runtime/runtime/base/bundles/index.umd.js +5 -288
  71. app-ng-runtime/runtime/base/esm2022/public_api.mjs +1 -2
  72. app-ng-runtime/runtime/base/esm2022/runtime-base.module.mjs +1 -6
  73. app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +2 -2
  74. app-ng-runtime/runtime/base/esm2022/types/types.mjs +1 -2
  75. app-ng-runtime/runtime/base/fesm2022/index.mjs +4 -287
  76. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
  77. app-ng-runtime/runtime/base/public_api.d.ts +0 -1
  78. app-ng-runtime/runtime/base/runtime-base.module.d.ts +8 -9
  79. app-ng-runtime/runtime/base/types/types.d.ts +1 -2
  80. app-ng-runtime/runtime/dynamic/bundles/index.umd.js +9 -27
  81. app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +2 -5
  82. app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +7 -23
  83. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +7 -26
  84. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  85. app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  86. app-ng-runtime/scripts/datatable/datatable.js +6 -3
  87. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +2 -3
  88. app-ng-runtime/transpiler/bundles/index.umd.js +0 -5
  89. app-ng-runtime/transpiler/esm2022/build.mjs +1 -4
  90. app-ng-runtime/transpiler/esm2022/imports.mjs +1 -3
  91. app-ng-runtime/transpiler/fesm2022/index.mjs +0 -5
  92. app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
  93. app-ng-runtime/build-task/advanced/custom-widget-container/custom-widget-container.build.d.ts +0 -2
  94. app-ng-runtime/build-task/advanced/custom-widget-wrapper/custom-widget-wrapper.build.d.ts +0 -2
  95. app-ng-runtime/build-task/esm2022/advanced/custom-widget-container/custom-widget-container.build.mjs +0 -15
  96. app-ng-runtime/build-task/esm2022/advanced/custom-widget-wrapper/custom-widget-wrapper.build.mjs +0 -26
  97. app-ng-runtime/components/advanced/custom/.npmignore +0 -2
  98. app-ng-runtime/components/advanced/custom/bundles/index.umd.js +0 -232
  99. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +0 -19
  100. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +0 -2
  101. app-ng-runtime/components/advanced/custom/custom-widget-prop.d.ts +0 -1
  102. app-ng-runtime/components/advanced/custom/custom-widget.directive.d.ts +0 -19
  103. app-ng-runtime/components/advanced/custom/custom-widget.module.d.ts +0 -10
  104. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +0 -102
  105. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +0 -12
  106. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-prop.mjs +0 -8
  107. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.directive.mjs +0 -68
  108. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.module.mjs +0 -32
  109. app-ng-runtime/components/advanced/custom/esm2022/index.mjs +0 -5
  110. app-ng-runtime/components/advanced/custom/esm2022/public_api.mjs +0 -4
  111. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +0 -215
  112. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +0 -1
  113. app-ng-runtime/components/advanced/custom/index.d.ts +0 -5
  114. app-ng-runtime/components/advanced/custom/package.json +0 -23
  115. app-ng-runtime/components/advanced/custom/public_api.d.ts +0 -3
  116. app-ng-runtime/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +0 -39
  117. app-ng-runtime/components/base/widgets/common/base/custom-widget-container.directive.d.ts +0 -14
  118. app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +0 -72
  119. app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +0 -288
@@ -6,6 +6,7 @@ import { DataSource } from '../types/types';
6
6
  import { setAttr } from './dom';
7
7
  import { $parseEvent } from './expression-parser';
8
8
  import { attempt, camelCase, cloneDeep, every, filter, forEach, get, identity, includes, indexOf, intersection, isArray, isDate, isEqual, isEqualWith, isError, isFunction, isNull, isNumber, isString, isUndefined, keys, map, noop as _noop, omit, replace as _replace, split, startsWith, toLower, toUpper, trim } from "lodash-es";
9
+ import "x2js";
9
10
  const userAgent = window.navigator.userAgent;
10
11
  const REGEX = {
11
12
  SNAKE_CASE: /[A-Z]/g,
@@ -286,7 +287,7 @@ export const getFormattedDate = (datePipe, dateObj, format, timeZone, isTimeStam
286
287
  if (format === 'UTC') {
287
288
  return new Date(dateObj).toISOString();
288
289
  }
289
- if (timeZone) {
290
+ if (timeZone && timeZone !== moment.defaultZone?.name) {
290
291
  const momentFormat = format.replaceAll('y', 'Y').replaceAll('d', 'D').replace('a', 'A');
291
292
  if (isIntervalDateTime) { // dates which are of type time widget (value is hh:mm:ss) but returned as date string from time comp
292
293
  return moment(dateObj).format(momentFormat);
@@ -422,7 +423,7 @@ export const getValidJSON = (content) => {
422
423
  }
423
424
  };
424
425
  export const xmlToJson = (xmlString) => {
425
- const x2jsObj = new X2JS({ 'emptyNodeForm': 'content', 'attributePrefix': '', 'enableToStringFunc': false });
426
+ const x2jsObj = new X2JS({ 'emptyNodeForm': 'object', 'attributePrefix': '', 'enableToStringFunc': false });
426
427
  let json = x2jsObj.xml2js(xmlString);
427
428
  if (json) {
428
429
  json = get(json, Object.keys(json)[0]);
@@ -1461,4 +1462,4 @@ export const findViewParent = (lView) => {
1461
1462
  }
1462
1463
 
1463
1464
  }*/
1464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDM0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDN0IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksUUFBUSxFQUNoRSxLQUFLLEVBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUNyQyxNQUFNLFdBQVcsQ0FBQztBQVluQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxNQUFNLEtBQUssR0FBRztJQUNWLFVBQVUsRUFBRSxRQUFRO0lBQ3BC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T0FrQkc7QUFDUCxDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtnZXRXbVByb2plY3RQcm9wZXJ0aWVzfSBmcm9tICcuL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNofSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHtEYXRhU291cmNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3NldEF0dHJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7JHBhcnNlRXZlbnR9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgICBhdHRlbXB0LFxuICAgIGNhbWVsQ2FzZSwgY2xvbmVEZWVwLCBldmVyeSxcbiAgICBmaWx0ZXIsIGZvckVhY2gsIGdldCwgaWRlbnRpdHksXG4gICAgaW5jbHVkZXMsIGluZGV4T2YsIGludGVyc2VjdGlvbiwgaXNBcnJheSwgaXNEYXRlLFxuICAgIGlzRXF1YWwsIGlzRXF1YWxXaXRoLCBpc0Vycm9yLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNOdWxsLFxuICAgIGlzTnVtYmVyLCBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCwga2V5cywgbWFwLCBub29wIGFzIF9ub29wLCBvbWl0LCByZXBsYWNlIGFzIF9yZXBsYWNlLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IFgySlM7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgICAgICBNQUNJTlRFTDogL01hY0ludGVsL2ksXG4gICAgQU5EUk9JRF9UQUJMRVQ6IC9hbmRyb2lkfGFuZHJvaWQgMy4wfHhvb218c2NoLWk4MDB8cGxheWJvb2t8dGFibGV0fGtpbmRsZS9pLFxuICAgIE1PQklMRTogL01vYmlsZS9pLFxuICAgIFdJTkRPV1M6IC9XaW5kb3dzIFBob25lL2ksXG4gICAgU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVDogL1xcLihibXB8Z2lmfGpwZXxqcGd8anBlZ3x0aWZ8dGlmZnxwYm18cG5nfGljbykkL2ksXG4gICAgU1VQUE9SVEVEX0ZJTEVfRk9STUFUOiAvXFwuKHR4dHxqc3xjc3N8aHRtbHxzY3JpcHR8cHJvcGVydGllc3xqc29ufGphdmF8eG1sfHNtZHx4bWl8c3FsfGxvZ3x3c2RsfHZtfGZ0bHxqcnhtbHx5bWx8eWFtbHxtZHxsZXNzfGpzcCkkL2ksXG4gICAgU1VQUE9SVEVEX0FVRElPX0ZPUk1BVDogL1xcLihtcDN8b2dnfHdlYm18d21hfDNncHx3YXZ8bTRhKSQvaSxcbiAgICBTVVBQT1JURURfVklERU9fRk9STUFUOiAvXFwuKG1wNHxvZ2d8d2VibXx3bXZ8bXBlZ3xtcGd8YXZpfG1vdikkL2ksXG4gICAgUEFHRV9SRVNPVVJDRV9QQVRIOiAvXlxcL3BhZ2VzXFwvLipcXC4oanN8Y3NzfGh0bWx8anNvbikkLyxcbiAgICBNSU5fUEFHRV9SRVNPVVJDRV9QQVRIOiAvLioocGFnZS5taW4uaHRtbCkkLyxcbiAgICBWQUxJRF9FTUFJTDogL15bYS16QS1aXVtcXHcuK10rQFthLXpBLVpfXSs/XFwuW2EtekEtWi5dezEsNH1bYS16QS1aXSQvLFxuICAgIFZBTElEX1dFQl9VUkw6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1dFQlNPQ0tFVF9VUkw6IC9eKHdzW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9SRUxBVElWRV9VUkw6IC9eKD8hd3d3XFwufCg/Omh0dHB8ZnRwKXM/OlxcL1xcL3xbQS1aYS16XTpcXFxcfFxcL1xcLykuKi8sXG4gICAgUkVQTEFDRV9QQVRURVJOOiAvXFwkXFx7KFteXFx9XSspXFx9L2csXG4gICAgWklQX0ZJTEU6IC9cXC56aXAkL2ksXG4gICAgRVhFX0ZJTEU6IC9cXC5leGUkL2ksXG4gICAgTk9fUVVPVEVTX0FMTE9XRUQ6IC9eW14nfFwiXSokLyxcbiAgICBOT19ET1VCTEVfUVVPVEVTX0FMTE9XRUQ6IC9eW15cIl0qJC8sXG4gICAgVkFMSURfSFRNTDogLzxbYS16XVtcXHNcXFNdKj4vaSxcbiAgICBWQUxJRF9QQVNTV09SRDogL15bMC05YS16QS1aLV8uQCYqISMkJV0rJC8sXG4gICAgU1BFQ0lBTF9DSEFSQUNURVJTOiAvW15BLVowLTlhLXpfXSsvaSxcbiAgICBBUFBfU0VSVkVSX1VSTF9GT1JNQVQ6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOVxcLlxcLV0rKFs6XT9bMC05XXsyLDV9fFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KVxcLytbXj8jJj1dKyQvLFxuICAgIEpTT05fREFURV9GT1JNQVQ6IC9cXGR7NH0tWzAtMV1cXGQtWzAtM11cXGQoVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkLlxcZHsxLDN9WiQpPy8sXG4gICAgREFUQV9VUkw6IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKilcXHMqJC9pLFxuICAgIElTT19EQVRFX0ZPUk1BVDogLyhcXGR7NH0tXFxkezJ9LVxcZHsyfSlUKFxcZHsyfTpcXGR7Mn06XFxkezJ9KShcXC5cXGQrKT8oWystXVxcZHsyfTo/XFxkezJ9fFopJC9cbn0sXG4gICAgY29tcGFyZUJ5U2VwYXJhdG9yID0gJzonO1xuXG5jb25zdCBOVU1CRVJfVFlQRVMgPSBbJ2ludCcsIERhdGFUeXBlLklOVEVHRVIsIERhdGFUeXBlLkZMT0FULCBEYXRhVHlwZS5ET1VCTEUsIERhdGFUeXBlLkxPTkcsIERhdGFUeXBlLlNIT1JULCBEYXRhVHlwZS5CWVRFLCBEYXRhVHlwZS5CSUdfSU5URUdFUiwgRGF0YVR5cGUuQklHX0RFQ0lNQUxdO1xuY29uc3Qgbm93OiBEYXRlID0gbmV3IERhdGUoKTtcbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuXG5leHBvcnQgY29uc3QgZW51bSBFVkVOVF9MSUZFIHsgT05DRSwgV0lORE9XIH1cblxuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZCA9IHYgPT4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2ID0+IG51bGwgIT09IHYgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgdG9Cb29sZWFuID0gKHZhbCwgaWRlbnRpdHk/KSA9PiAoKHZhbCAmJiB2YWwgIT09ICdmYWxzZScpID8gdHJ1ZSA6IChpZGVudGl0eSA/IHZhbCA9PT0gaWRlbnRpdHkgOiBmYWxzZSkpO1xuXG5mdW5jdGlvbiBpc0lFMTEoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdUcmlkZW50LycpID4gLTE7XG59XG5cbmV4cG9ydCBjb25zdCBpc0lFID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0lFMTEoKSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICgpID0+IFJFR0VYLkFORFJPSUQudGVzdCh1c2VyQWdlbnQpO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKCkgPT4gUkVHRVguQU5EUk9JRF9UQUJMRVQudGVzdCh1c2VyQWdlbnQpICYmICEoKC9UYWJsZXQgUEMgMi4wL2kpLnRlc3QodXNlckFnZW50KSk7XG5cbmV4cG9ydCBjb25zdCBpc0lwaG9uZSA9ICgpID0+IFJFR0VYLklQSE9ORS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcG9kID0gKCkgPT4gUkVHRVguSVBPRC50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcGFkID0gKCkgPT4ge1xuICAgIHJldHVybiBSRUdFWC5JUEFELnRlc3QodXNlckFnZW50KSB8fCAod2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMiAmJiAoUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkgfHwgUkVHRVguTUFDSU5URUwudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBpbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IGluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IGNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IHNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBtYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKGlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChpc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSkge1xuICAgICAgICBjb25zdCBtb21lbnRGb3JtYXQgPSBmb3JtYXQucmVwbGFjZUFsbCgneScsICdZJykucmVwbGFjZUFsbCgnZCcsICdEJykucmVwbGFjZSgnYScsICdBJyk7XG4gICAgICAgIGlmIChpc0ludGVydmFsRGF0ZVRpbWUgKSB7IC8vIGRhdGVzIHdoaWNoIGFyZSBvZiB0eXBlIHRpbWUgd2lkZ2V0ICh2YWx1ZSBpcyBoaDptbTpzcykgYnV0IHJldHVybmVkIGFzIGRhdGUgc3RyaW5nIGZyb20gdGltZSBjb21wXG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RpbWVTdGFtcFR5cGUgPT09ICdkYXRldGltZXN0YW1wJykge1xuICAgICAgICAgICAgZGF0ZU9iaiA9IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lWm9uZSwgZGF0ZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lLCBjb21wSW5zdGFuY2UpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBkYXRlIGhhcyB0aW1lem9uZSBpbmZvcm1hdGlvbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc09mZnNldFN0ciA9IChkYXRlU3RyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkYXRlU3RyICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRlU3RyLm1hdGNoKFJFR0VYLklTT19EQVRFX0ZPUk1BVCk7XG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1s0XSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogbWV0aG9kIHRvIGdldCB0aGUgZGF0ZSBvYmplY3QgZnJvbSB0aGUgaW5wdXQgcmVjZWl2ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGVPYmogPSAodmFsdWUsIG9wdGlvbnM/LCB0aW1lem9uZT8pOiBEYXRlID0+IHtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICAvLyBGaXggZm9yIFdNUy0xOTYwMSwgaW52YWxpZCBkYXRlIGlzIHJldHVybmVkIG9uIGRhdGUgc2VsZWN0aW9uLlxuICAgICAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9ICBpc05hdGl2ZVBpY2tlciA/ICdZWVlZL01NL0REIEhIOm1tOnNzJyA6IG1vbWVudFBhdHRlcm4ob3B0aW9ucy5wYXR0ZXJuKTtcbiAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUsIHBhdHRlcm4pLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZSBvYmplY3QsIG5vIG5lZWQgdG8gY292ZXJ0IGl0Ki9cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKCFtb21lbnQodmFsdWUpLmlzVmFsaWQoKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgZGF0ZU9iaiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAvKipcbiAgICAgKiBpZiBkYXRlIHZhbHVlIGlzIHN0cmluZyBcIjIwLTA1LTIwMTlcIiB0aGVuIG5ldyBEYXRlKHZhbHVlKSByZXR1cm4gMjBNYXkyMDE5IHdpdGggY3VycmVudCB0aW1lIGluIEluZGlhLFxuICAgICAqIHdoZXJlYXMgdGhpcyB3aWxsIHJldHVybiAxOU1heTIwMTkgd2l0aCB0aW1lIGxhZ2dpbmcgZm9yIGZldyBob3Vycy5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaXQgcmV0dXJucyBVVEMgdGltZSBpLmUuIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChVVEMpLlxuICAgICAqIFRvIGNyZWF0ZSBkYXRlIGluIGxvY2FsIHRpbWUgdXNlIG1vbWVudFxuICAgICAqL1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogSWYgc2VsZWN0ZWQgbG9jYWxlIGlzIEFyYWJpYywgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBnaXZpbmcgZGF0ZSBpbiBBcmFiaWMgbGFuZ3VhZ2VcbiAgICAgICAgICogKEV4OiBJZiBkYXRlIHZhbHVlIGlzIFwiMTk5MC0xMS0yM1wiIGFuZCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIFwi2aHZqdmp2aAt2aHZoS3ZotmjVNmg2aA62aDZoDrZoNmgK9mg2aU62aPZoFwiKVxuICAgICAgICAgKiBhbmQgbmV3IERhdGUobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkgaXMgZ2l2aW5nIEludmFsaWQgRGF0ZS4gU28gZnJzdCBjb252ZXJ0aW5nIGl0IHRvIHRpbWVzdGFtcCB2YWx1ZS5cbiAgICAgICAgKi9cblxuICAgICAgICBkYXRlT2JqID0gIXRpbWV6b25lID8gbmV3IERhdGUobW9tZW50KG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpLnZhbHVlT2YoKSkgOiBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZXpvbmUsIHZhbHVlKTs7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDVVJSRU5UX0RBVEUgfHwgaXNOYU4oZGF0ZU9iai5nZXREYXkoKSkpIHtcbiAgICAgICAgcmV0dXJuIG5vdztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVPYmo7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudCA9IChfZWxlbWVudDogRWxlbWVudCwgZXhjbHVkZUVsZW1lbnQ6IEVsZW1lbnQsIG5hdGl2ZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50VHlwZSwgaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCwgc3VjY2Vzc0NCLCBsaWZlOiBFVkVOVF9MSUZFLCBpc0NhcHR1cmUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBfZWxlbWVudDtcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChleGNsdWRlRWxlbWVudCAmJiAoZXhjbHVkZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fCBleGNsdWRlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIGlmICgkKGV2ZW50LnRhcmdldCkuaXMoJ2lucHV0JykgJiYgIWlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWZlID09PSBFVkVOVF9MSUZFLk9OQ0UpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VjY2Vzc0NCKCk7XG4gICAgfTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIGNvbnN0IHJlbW92ZUV2ZW50TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY2xvbmVkIHJlcGxpY2Egb2YgdGhlIHBhc3NlZCBvYmplY3QvYXJyYXlcbiAqIEBwYXJhbSBvYmplY3Qgb2JqZWN0L2FycmF5IHRvIGNsb25lXG4gKiBAcmV0dXJucyBhIGNsb25lIG9mIHRoZSBwYXNzZWQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDbG9uZWRPYmplY3QgPSAob2JqZWN0KSA9PiB7XG4gICAgcmV0dXJuIGNsb25lRGVlcChvYmplY3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzID0gKGZvcm1OYW1lLCBmaWVsZE5hbWUsIGlzTGlzdCkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2V0KGRvY3VtZW50LmZvcm1zLCBbZm9ybU5hbWUsIGZpZWxkTmFtZSwgJ2ZpbGVzJ10pO1xuICAgIHJldHVybiBpc0xpc3QgPyBtYXAoZmlsZXMsIGlkZW50aXR5KSA6IGZpbGVzICYmIGZpbGVzWzBdO1xufTtcblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIqL1xuZnVuY3Rpb24gcmFuZG9tKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgZ3VpZCBiYXNlZCBvbiByYW5kb20gbnVtYmVycy4qL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlR1VJZCA9ICgpID0+IHtcbiAgICByZXR1cm4gcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKSArICctJyArIHJhbmRvbSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBpZiBnaXZlbiBhY2Nlc3Mgcm9sZSBpcyBpbiBjdXJyZW50IGxvZ2dlZGluIHVzZXIgYWNjZXNzIHJvbGVzXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjY2Vzc1JvbGVzID0gKHJvbGVFeHAsIGxvZ2dlZEluVXNlcikgPT4ge1xuICAgIGxldCByb2xlcztcblxuICAgIGlmIChyb2xlRXhwICYmIGxvZ2dlZEluVXNlcikge1xuXG4gICAgICAgIHJvbGVzID0gcm9sZUV4cCAmJiByb2xlRXhwLnNwbGl0KCcsJykubWFwKEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuXG4gICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocm9sZXMsIGxvZ2dlZEluVXNlci51c2VyUm9sZXMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWxpZEpTT04gPSAoY29udGVudCkgPT4ge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWRJbnRWYWx1ZSA9IHBhcnNlSW50KGNvbnRlbnQsIDEwKTtcbiAgICAgICAgLypvYnRhaW5pbmcganNvbiBmcm9tIGVkaXRvciBjb250ZW50IHN0cmluZyovXG4gICAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSB8fCAhaXNOYU4ocGFyc2VkSW50VmFsdWUpID8gY29udGVudCA6IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKnRlcm1pbmF0aW5nIGV4ZWN1dGlvbiBpZiBuZXcgdmFyaWFibGUgb2JqZWN0IGlzIG5vdCB2YWxpZCBqc29uLiovXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHhtbFRvSnNvbiA9ICh4bWxTdHJpbmcpID0+IHtcbiAgICBjb25zdCB4MmpzT2JqID0gbmV3IFgySlMoeyAnZW1wdHlOb2RlRm9ybSc6ICdjb250ZW50JywgJ2F0dHJpYnV0ZVByZWZpeCc6ICcnLCAnZW5hYmxlVG9TdHJpbmdGdW5jJzogZmFsc2UgfSk7XG4gICAgbGV0IGpzb24gPSB4MmpzT2JqLnhtbDJqcyh4bWxTdHJpbmcpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICAgIGpzb24gPSBnZXQoanNvbiwgT2JqZWN0LmtleXMoanNvbilbMF0pO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byBmaW5kIHRoZSB2YWx1ZSBvZiBhIGtleSBpbiB0aGUgb2JqZWN0XG4gKiBpZiBrZXkgbm90IGZvdW5kIGFuZCBjcmVhdGUgaXMgdHJ1ZSwgYW4gb2JqZWN0IGlzIGNyZWF0ZWQgYWdhaW5zdCB0aGF0IG5vZGVcbiAqIEV4YW1wbGVzOlxuICogdmFyIGEgPSB7XG4gKiAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYy5kJykgLS0+ICd0ZXN0J1xuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMnKSAtLT4ge2Q6ICd0ZXN0J31cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScpIC0tPiB1bmRlZmluZWRcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScsIHRydWUpIC0tPiB7fSBhbmQgYSB3aWxsIGJlY29tZTpcbiAqIHtcbiAqICAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9LFxuICogIGU6IHtcbiAqICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kVmFsdWVPZiA9IChvYmosIGtleSwgY3JlYXRlPykgPT4ge1xuXG4gICAgaWYgKCFvYmogfHwgIWtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGUpIHtcbiAgICAgICAgcmV0dXJuIGdldChvYmosIGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAga2V5cyA9IFtdO1xuXG4gICAgbGV0IHNraXBQcm9jZXNzaW5nO1xuXG4gICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnRzLmxlbmd0aCkgeyAvLyBpZiB0aGUgcGFydCBvZiBhIGtleSBpcyBub3QgdmFsaWQsIHNraXAgdGhlIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICBza2lwUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHBhcnQubWF0Y2goL1xcdysvZyk7XG4gICAgICAgIGxldCBzdWJQYXJ0O1xuXG4gICAgICAgIHdoaWxlIChzdWJQYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YlBhcnQgPSBzdWJQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAga2V5cy5wdXNoKHsgJ2tleSc6IHN1YlBhcnQsICd2YWx1ZSc6IHN1YlBhcnRzLmxlbmd0aCA/IFtdIDoge30gfSk7IC8vIGRldGVybWluZSB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBhcnJheSBvciBhbiBvYmplY3RcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNraXBQcm9jZXNzaW5nKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKChfa2V5KSA9PiB7XG4gICAgICAgIGxldCB0ZW1wT2JqID0gb2JqW19rZXkua2V5XTtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0ZW1wT2JqKSkge1xuICAgICAgICAgICAgdGVtcE9iaiA9IGdldFZhbGlkSlNPTih0ZW1wT2JqKTtcbiAgICAgICAgICAgIGlmICghdGVtcE9iaikge1xuICAgICAgICAgICAgICAgIHRlbXBPYmogPSBfa2V5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialtfa2V5LmtleV0gPSB0ZW1wT2JqO1xuICAgICAgICBvYmogPSB0ZW1wT2JqO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qXG4qIGV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGJpdCBmcm9tIGZ1bGwgdHlwZVJlZiBvZiBhIGZpZWxkXG4qIGUuZy4gcmV0dXJucyAnU3RyaW5nJyBmb3IgdHlwZVJlZiA9ICdqYXZhLmxhbmcuU3RyaW5nJ1xuKiBAcGFyYW1zOiB7dHlwZVJlZn0gdHlwZSByZWZlcmVuY2VcbiovXG5leHBvcnQgY29uc3QgZXh0cmFjdFR5cGUgPSAodHlwZVJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBsZXQgdHlwZTtcbiAgICBpZiAoIXR5cGVSZWYpIHtcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlNUUklORztcbiAgICB9XG4gICAgdHlwZSA9IHR5cGVSZWYgJiYgdHlwZVJlZi5zdWJzdHJpbmcodHlwZVJlZi5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgdHlwZSA9IHR5cGUgJiYgdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHR5cGUgPSB0eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FID8gRGF0YVR5cGUuREFURVRJTUUgOiB0eXBlO1xuICAgIHJldHVybiB0eXBlO1xufTtcblxuLyogcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkYXRhIHR5cGUgbWF0Y2hlcyBudW1iZXIgdHlwZSAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtYmVyVHlwZSA9ICh0eXBlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKE5VTUJFUl9UWVBFUy5pbmRleE9mKGV4dHJhY3RUeXBlKHR5cGUpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XG59O1xuXG4vKiBmdW5jdGlvbiB0byBjaGVjayBpZiBwcm92aWRlZCBvYmplY3QgaXMgZW1wdHkqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNPYmplY3Qob2JqKSAmJiAhaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gRnVuY3Rpb24gZXhwZWN0cyBhbiBlbGVtZW50IG9uIHdoaWNoIHRoZSBzY3JvbGxpbmcgc2hvdWxkIGJlIGFwcGxpZWQsIERlcGVuZGluZyBvbiB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IHNjcm9sbGJhciB3aWxsIGJlIGFkanVzdGVkXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgY29uc3QgZm9ybVBvc2l0aW9uID0gJGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgIGNvbnN0ICRzY3JvbGxQYXJlbnQgPSAkZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGw9XCJ0cnVlXCJdJyk7XG4gICAgaWYgKGlzTW9iaWxlQXBwKCkgJiYgJHNjcm9sbFBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaVNjcm9sbCA9IGdldCgkc2Nyb2xsUGFyZW50WzBdLCAnaXNjcm9sbCcpO1xuICAgICAgICBsZXQgdG8gPSAtKGZvcm1Qb3NpdGlvbiAtIGlTY3JvbGwueSk7XG4gICAgICAgIHRvID0gKGlTY3JvbGwubWF4U2Nyb2xsWSA+IHRvKSA/IGlTY3JvbGwubWF4U2Nyb2xsWSA6IHRvO1xuICAgICAgICBpU2Nyb2xsLnNjcm9sbFRvKDAsIHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKHtcbiAgICAgICAgICAgIHRvcDogZm9ybVBvc2l0aW9uLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgaW4gdmlld3BvcnQgb3Igbm90XG5leHBvcnQgY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IChlbGVtZW50KSA9PiB7XG4gICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIHJlY3QudG9wID49IDAgJiZcbiAgICAgICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICAgICAgcmVjdC5ib3R0b20gPD0gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSAmJlxuICAgICAgICByZWN0LnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXG4gICAgKTtcbn1cblxuLypGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgcGFnZWFibGUgb2JqZWN0IG9yIG5vdC4qL1xuZXhwb3J0IGNvbnN0IGlzUGFnZWFibGUgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBwYWdlYWJsZSA9IHtcbiAgICAgICAgJ2NvbnRlbnQnOiBbXSxcbiAgICAgICAgJ2ZpcnN0JzogdHJ1ZSxcbiAgICAgICAgJ2xhc3QnOiB0cnVlLFxuICAgICAgICAnbnVtYmVyJzogMCxcbiAgICAgICAgJ251bWJlck9mRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3NpemUnOiAyMCxcbiAgICAgICAgJ3NvcnQnOiBudWxsLFxuICAgICAgICAndG90YWxFbGVtZW50cyc6IDEwLFxuICAgICAgICAndG90YWxQYWdlcyc6IDFcbiAgICB9O1xuICAgIC8vIHBhZ2luYXRlZCBvYmplY3QgbWF5IG9yIG1heSBub3QgY29udGFpbiAnZW1wdHknIHByb3BlcnR5LiBJbiBlaXRoZXIgY2FzZSwgUGFnZWFibGUgc2hvdWxkIHJldHVybiBhcyB0cnVlLlxuICAgIGNvbnN0IHBhZ2luYXRlZE9iaiA9IG9taXQob2JqLCAnZW1wdHknKTtcbiAgICByZXR1cm4gKGlzRXF1YWwoa2V5cyhwYWdlYWJsZSksIGtleXMocGFnaW5hdGVkT2JqKS5zb3J0KCkpKTtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byByZXBsYWNlIHBhdHRlcm5zIGluIHN0cmluZyB3aXRoIG9iamVjdCBrZXlzIG9yIGFycmF5IHZhbHVlc1xuICogRXhhbXBsZXM6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHtmaXJzdH0gJHtsYXN0fSAhJywge2ZpcnN0OiAnd2F2ZW1ha2VyJywgbGFzdDogJ25nJ30pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHswfSAkezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBFeGFtcGxlcyBpZiBwYXJzZUVycm9yIGlzIHRydWU6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgezB9IHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9ICh0ZW1wbGF0ZSwgbWFwLCBwYXJzZUVycm9yPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZWdFeCA9IFJFR0VYLlJFUExBQ0VfUEFUVEVSTjtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgcmVnRXggPSAvXFx7KFteXFx9XSspXFx9L2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnRXgsIGZ1bmN0aW9uIChtYXRjaCwga2V5KSB7XG4gICAgICAgIHJldHVybiBnZXQobWFwLCBrZXkpO1xuICAgIH0pO1xufTtcblxuLypGdW5jdGlvbiB0byBjaGVjayBpZiBkYXRlIHRpbWUgdHlwZSovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZVR5cGUgPSB0eXBlID0+IHtcbiAgICBpZiAoaW5jbHVkZXModHlwZSwgJy4nKSkge1xuICAgICAgICB0eXBlID0gdG9Mb3dlcihleHRyYWN0VHlwZSh0eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBpbmNsdWRlcyhbRGF0YVR5cGUuREFURSwgRGF0YVR5cGUuVElNRSwgRGF0YVR5cGUuVElNRVNUQU1QLCBEYXRhVHlwZS5EQVRFVElNRSwgRGF0YVR5cGUuTE9DQUxEQVRFVElNRV0sIHR5cGUpO1xufTtcblxuY29uc3QgbW9tZW50UGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKGluY2x1ZGVzKHBhdHRlcm4sICdFJykpIHtcbiAgICAgICAgcGF0dGVybiA9IF9yZXBsYWNlKHBhdHRlcm4sIC9FWyxdPy9nLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBfcmVwbGFjZShwYXR0ZXJuLCAveSpkKi9nLCAodmFsKSA9PiB2YWwudG9VcHBlckNhc2UoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGRhdGUgb2JqZWN0LiBJZiB2YWwgaXMgdW5kZWZpbmVkIGl0IHJldHVybnMgaW52YWxpZCBkYXRlICovXG5leHBvcnQgY29uc3QgZ2V0VmFsaWREYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgIGNvbnN0IGRlZmF1bHRNZXJpZGlhbiA9IFsnQU0nLCAnUE0nXTtcbiAgIGNvbnN0IG1vbWVudE1lcmlkaWFuID0gbW9tZW50KCkuX2xvY2FsZS5tZXJpZGllbSgpO1xuICAgIC8vIFVwZGF0aW5nIGxvY2FsaXplZCBtZXJpZGlhbnMgd2l0aCBkZWZhdWx0IG1lcmlkaWFucyB3aGVuIG1vbWVudCBtZXJpZGlhbiBpcyBub3QgZGVmaW5lZFxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWVyaWRpYW5zICYmIGluY2x1ZGVzKGRlZmF1bHRNZXJpZGlhbiwgbW9tZW50TWVyaWRpYW4pKSB7XG4gICAgICAgIGZvckVhY2gob3B0aW9ucy5tZXJpZGlhbnMsIChtZXJpZGlhbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlcyh2YWwsIG1lcmlkaWFuKSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKG1lcmlkaWFuLCBkZWZhdWx0TWVyaWRpYW5baW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBnZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBpc05hdGl2ZVBpY2tlciA/IChnZXQob3B0aW9ucywgJ3BhdHRlcm4nKSB8fCAnWVlZWS9NTS9ERCBISDptbTpzcycpIDogKG1vbWVudFBhdHRlcm4oZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykpIHx8ICcnKTtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICBpZiAoIWlzTmFOKChuZXcgRGF0ZSh2YWwpKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHZhbCBpcyBhIHZhbGlkIGRhdGUgb3Igbm90XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBpT1MsIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZm9ybWF0IHRvIGNvbnNpZGVyIGV2ZW4gdGhlIHNlY29uZHMuXG4gICAgICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobmV3IERhdGUodmFsKSwgcGF0dGVybik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSB2YWwudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1vbWVudCh2YWwsIHBhdHRlcm4pLmlzVmFsaWQoKSkge1xuICAgICAgICAvLyBkYXRlIHdpdGggKzUgaG91cnMgaXMgcmV0dXJuZWQgaW4gc2FmYXJpIGJyb3dzZXIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZGF0ZS5cbiAgICAgICAgLy8gSGVuY2UgY29udmVydGluZyB0aGUgZGF0ZSB0byB0aGUgc3VwcG9ydGVkIGZvcm1hdCBcIllZWVkvTU0vREQgSEg6bW06c3NcIiBpbiBJT1NcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChtb21lbnQodmFsKS52YWx1ZU9mKCkpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgdGltZXN0YW1wIHN0cmluZywgY29udmVydCBpdCB0byBhIG51bWJlciovXG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaWYgdGhlIHZhbHVlIGlzIGluIEhIOm1tOnNzIGZvcm1hdCwgaXQgcmV0dXJucyBhIHdyb25nIGRhdGUuIFNvIGFwcGVuZCB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgdG8gZ2V0IGRhdGUqL1xuICAgICAgICBpZiAoIShuZXcgRGF0ZSh2YWwpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCgobW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnICcgKyB2YWwpLCAnWVlZWS1NTS1ERCBISDptbTpzcyBBJyk7XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobW9tZW50KHZhbCkudmFsdWVPZigpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgamF2YXNjcmlwdCBkYXRlIG9iamVjdCovXG5leHBvcnQgY29uc3QgZ2V0TmF0aXZlRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICAgdmFsID0gZ2V0VmFsaWREYXRlT2JqZWN0KHZhbCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbCk7XG59O1xuXG5cbi8qKlxuICogcHJlcGFyZSBhIGJsb2Igb2JqZWN0IGJhc2VkIG9uIHRoZSBjb250ZW50IGFuZCBjb250ZW50IHR5cGUgcHJvdmlkZWRcbiAqIGlmIGNvbnRlbnQgaXMgYmxvYiBpdHNlbGYsIHNpbXBseSByZXR1cm5zIGl0IGJhY2tcbiAqIEBwYXJhbSB2YWxcbiAqIEBwYXJhbSB2YWxDb250ZW50VHlwZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCbG9iID0gKHZhbCwgdmFsQ29udGVudFR5cGU/KSA9PiB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgY29uc3QganNvblZhbCA9IGdldFZhbGlkSlNPTih2YWwpO1xuICAgIGlmIChqc29uVmFsICYmIGpzb25WYWwgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGpzb25WYWwpXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW3ZhbF0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ3RleHQvcGxhaW4nIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBieSBjb21wYXJpbmcgdHdvIG9iamVjdHMgYmFzZWQgb24gdGhlIGZpZWxkc1xuICogQHBhcmFtIG9iajEgb2JqZWN0XG4gKiBAcGFyYW0gb2JqMiBvYmplY3RcbiAqIEBwYXJhbSBjb21wYXJlQnkgc3RyaW5nIGZpZWxkIHZhbHVlcyB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBvYmplY3QgZXF1YWxpdHkgcmV0dXJucyB0cnVlIGJhc2VkIG9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbFdpdGhGaWVsZHMgPSAob2JqMSwgb2JqMiwgY29tcGFyZUJ5KSA9PiB7XG4gICAgLy8gY29tcGFyZUJ5IGNhbiBiZSAnaWQnIG9yICdpZDEsIGlkMicgb3IgJ2lkMSwgaWQyOmlkMydcbiAgICAvLyBTcGxpdCB0aGUgY29tcGFyZWJ5IGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXNcbiAgICBsZXQgX2NvbXBhcmVCeSA9IGlzQXJyYXkoY29tcGFyZUJ5KSA/IGNvbXBhcmVCeSA6IHNwbGl0KGNvbXBhcmVCeSwgJywnKTtcblxuICAgIF9jb21wYXJlQnkgPSBtYXAoX2NvbXBhcmVCeSwgdHJpbSk7XG5cbiAgICByZXR1cm4gaXNFcXVhbFdpdGgob2JqMSwgb2JqMiwgZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgICByZXR1cm4gZXZlcnkoX2NvbXBhcmVCeSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBsZXQgY2IxLCBjYjIsIF9jYjtcblxuICAgICAgICAgICAgLy8gSWYgY29tcGFyZWJ5IGNvbnRhaW5zIDogLCBjb21wYXJlIHRoZSB2YWx1ZXMgYnkgdGhlIGtleXMgb24gZWl0aGVyIHNpZGUgb2YgOlxuICAgICAgICAgICAgaWYgKGluZGV4T2YoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2IxID0gY2IyID0gdHJpbShjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jYiA9IHNwbGl0KGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIGNiMSA9IHRyaW0oX2NiWzBdKTtcbiAgICAgICAgICAgICAgICBjYjIgPSB0cmltKF9jYlsxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBnZXQobzEsIGNiMSkgPT09IGdldChvMiwgY2IyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXROb2RlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1N0eWxlU2hlZXRMb2FkZWQgPSBocmVmID0+ICEhZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuXG4vLyBmdW5jdGlvbiB0byByZW1vdmUgc3R5bGVzaGVldCBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgcmVtb3ZlU3R5bGVTaGVldCA9IGhyZWYgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICB9XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIGEgc3R5bGVzaGVldFxuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0ID0gKHVybCwgYXR0cikgPT4ge1xuICAgIGlmIChpc1N0eWxlU2hlZXRMb2FkZWQodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIC8vIFRvIGFkZCBhdHRyaWJ1dGVzIHRvIGxpbmsgdGFnXG4gICAgaWYgKGF0dHIgJiYgYXR0ci5uYW1lKSB7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICByZXR1cm4gbGluaztcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzaGVldHNcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldHMgPSAodXJscyA9IFtdKSA9PiB7XG4gICAgLy8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheSwgY29udmVydCBpdCB0byBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkge1xuICAgICAgICB1cmxzID0gW3VybHNdO1xuICAgIH1cbiAgICB1cmxzLmZvckVhY2gobG9hZFN0eWxlU2hlZXQpO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTY3JpcHRMb2FkZWQgPSBzcmMgPT4gISFnZXROb2RlKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdLCBzY3JpcHRbZGF0YS1zcmM9XCIke3NyY31cIl1gKTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbWVudExvY2FsZU9iamVjdCA9ICh0aW1lWm9uZSwgZGF0ZU9iaj8pID0+IHtcbiAgICBpZiAoZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KGRhdGVPYmopLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0ID0gYXN5bmMgKHVybCwgbG9hZFZpYVNjcmlwdFRhZywgY2FjaGVhYmxlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBfdXJsID0gdXJsLnRyaW0oKTtcbiAgICBpZiAoIV91cmwubGVuZ3RoIHx8IGlzU2NyaXB0TG9hZGVkKF91cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAobG9hZFZpYVNjcmlwdFRhZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUpIHsgIC8vSUVcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7ICAvL090aGVyIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKGNhY2hlYWJsZSkge1xuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSkuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAkLmdldFNjcmlwdCh1cmwpXG4gICAgICAgICAgICAuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0cyA9IGFzeW5jICh1cmxzID0gW10sIGxvYWRWaWFTY3JpcHRUYWcgPSB0cnVlKSA9PiB7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0KHVybCwgbG9hZFZpYVNjcmlwdFRhZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbmV4cG9ydCBsZXQgX1dNX0FQUF9QUk9KRUNUOiBhbnkgPSB7fTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGxldCBpdGVtOiBhbnkgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgIH1cbiAgICBpdGVtW2tleV0gPSB2YWx1ZTtcblxuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCwgSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSBrZXkgPT4ge1xuICAgIC8vIHNhbml0eSBjaGVjayBmb3IgdGhpcyB0byB3b3JrIHdpdGggbmctY29kZWdlblxuICAgIGxldCBpdGVtID0gd2luZG93ICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoLi4uYXJncykgPT4geyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZpbGUgcGF0aFxuICogQHBhcmFtIGZpbGVwYXRoXG4gKiBAcmV0dXJucyBwcm9taXNlIGhhdmluZyBibG9iIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRvQmxvYiA9IChmaWxlcGF0aCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBSZWFkIHRoZSBmaWxlIGVudHJ5IGZyb20gdGhlIGZpbGUgVVJMXG4gICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZmlsZXBhdGgsIGZ1bmN0aW9uIChmaWxlRW50cnkpIHtcbiAgICAgICAgICAgIGZpbGVFbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlsZSBoYXMgdGhlIGNvcmRvdmEgZmlsZSBzdHJ1Y3R1cmUuIFRvIHN1Ym1pdCB0byB0aGUgYmFja2VuZCwgY29udmVydCB0aGlzIGZpbGUgdG8gamF2YXNjcmlwdCBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdCbG9iID0gbmV3IEJsb2IoW3JlYWRlci5yZXN1bHRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IGZpbGUudHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7ICdibG9iJzogaW1nQmxvYiwgJ2ZpbGVwYXRoJzogZmlsZXBhdGggfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNDb3Jkb3ZhID0gKCkgPT4ge1xuICAgIHJldHVybiAhIXdpbmRvd1snY29yZG92YSddO1xufTtcblxuZXhwb3J0IGNvbnN0IEFwcENvbnN0YW50cyA9IHtcbiAgICBJTlRfTUFYX1ZBTFVFOiAyMTQ3NDgzNjQ3XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkxpbmsgPSAobGluazogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyA9ICdfc2VsZicpID0+IHtcbiAgICBpZiAoaGFzQ29yZG92YSgpICYmIHN0YXJ0c1dpdGgobGluaywgJyMnKSkge1xuICAgICAgICBsb2NhdGlvbi5oYXNoID0gbGluaztcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cub3BlbihsaW5rLCB0YXJnZXQpO1xuICAgIH1cbn07XG5cbi8qIHV0aWwgZnVuY3Rpb24gdG8gbG9hZCB0aGUgY29udGVudCBmcm9tIGEgdXJsICovXG5leHBvcnQgY29uc3QgZmV0Y2hDb250ZW50ID0gKGRhdGFUeXBlLCB1cmw6IHN0cmluZywgaW5TeW5jOiBib29sZWFuID0gZmFsc2UsIHN1Y2Nlc3M/LCBlcnJvcj8pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiAkLmFqYXgoeyB0eXBlOiAnZ2V0JywgZGF0YVR5cGU6IGRhdGFUeXBlLCB1cmw6IHVybCwgYXN5bmM6ICFpblN5bmMgfSlcbiAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gc3VjY2VzcyAmJiBzdWNjZXNzKHJlc3BvbnNlKSlcbiAgICAgICAgLmZhaWwocmVhc29uID0+IGVycm9yICYmIGVycm9yKHJlYXNvbikpO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgcHJvbWlzZSwgdGhlbiBvYmplY3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7UHJvbWlzZTxUPiB8IFR9IGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fVxuICovXG5leHBvcnQgY29uc3QgdG9Qcm9taXNlID0gPFQ+KGE6IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYSBhcyBUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaW52b2tlcyB0aGUgZ2l2ZW4gdGhlIGZ1bmN0aW9uIChmbikgdW50aWwgdGhlIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlcyBvciB0aGUgbWF4aW11bSBudW1iZXJcbiAqIG9mIHJldHJpZXMgaXMgcmVhY2hlZCBvciBvbkJlZm9yZVJldHJ5IHJldHVybnMgZmFsc2UuXG4gKlxuICogQHBhcmFtIGZuIC0gYSBmdW5jdGlvbiB0aGF0IGlzIG5lZWRzIHRvIGJlIGludm9rZWQuIFRoZSBmdW5jdGlvbiBjYW4gYWxzbyByZXR1cm4gYSBwcm9taXNlIGFzIHdlbGwuXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBtaW5pbXVtIHRpbWUgZ2FwIGJldHdlZW4gc3VjY2Vzc2l2ZSByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAuXG4gKiBAcGFyYW0gbWF4UmV0cmllcyAtIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBGb3IgYWxsIG90aGVyIHZhbHVlcyxcbiAqIG1heFJldHJpZXMgaXMgaW5maW5pdHkuXG4gKiBAcGFyYW0gb25CZWZvcmVSZXRyeSAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIHJlLWludm9raW5nIGFnYWluLiBUaGlzIGZ1bmN0aW9uIGNhblxuICogcmV0dXJuIGZhbHNlIG9yIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHRvIGZhbHNlIHRvIHN0b3AgZnVydGhlciByZXRyeSBhdHRlbXB0cy5cbiAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGZuIGlzIHN1Y2Nlc3MgKG9yKSBtYXhpbXVtIHJldHJ5IGF0dGVtcHRzIHJlYWNoZWRcbiAqIChvcikgb25CZWZvcmVSZXRyeSByZXR1cm5lZCBmYWxzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJldHJ5SWZGYWlscyA9IChmbjogKCkgPT4gYW55LCBpbnRlcnZhbDogbnVtYmVyLCBtYXhSZXRyaWVzOiBudW1iZXIsIG9uQmVmb3JlUmV0cnkgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKSA9PiB7XG4gICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgIGNvbnN0IHRyeUZuID0gKCkgPT4ge1xuICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIG1heFJldHJpZXMgPSAoaXNOdW1iZXIobWF4UmV0cmllcykgJiYgbWF4UmV0cmllcyA+IDAgPyBtYXhSZXRyaWVzIDogMCk7XG4gICAgaW50ZXJ2YWwgPSAoaXNOdW1iZXIoaW50ZXJ2YWwpICYmIGludGVydmFsID4gMCA/IGludGVydmFsIDogMCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyckFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b1Byb21pc2U8Ym9vbGVhbj4ob25CZWZvcmVSZXRyeSgpKS50aGVuKGZ1bmN0aW9uIChyZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnkgIT09IGZhbHNlICYmICghbWF4UmV0cmllcyB8fCByZXRyeUNvdW50IDw9IG1heFJldHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sICgpID0+IHJlamVjdChlcnJBcmdzKSk7XG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIG9mIGEgZGVmZXIgY3JlYXRlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBoYXMgYWJvcnQgZnVuY3Rpb24gdGhhdCB3aWxsIHJlamVjdCB0aGUgZGVmZXIgd2hlbiBjYWxsZWQuXG4gKiBAcmV0dXJucyB7Kn0gYW5ndWxhciBkZWZlciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFib3J0YWJsZURlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IF9kZWZlcjogYW55ID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZWplY3Q6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG51bGwsXG4gICAgICAgIG9uQWJvcnQ6ICgpID0+IHsgfSxcbiAgICAgICAgaXNBYm9ydGVkOiBmYWxzZVxuICAgIH07XG4gICAgX2RlZmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIF9kZWZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICBfZGVmZXIucHJvbWlzZS5hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgdHJpZ2dlckZuKF9kZWZlci5vbkFib3J0KTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCgnYWJvcnRlZCcpO1xuICAgICAgICBfZGVmZXIuaXNBYm9ydGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBfZGVmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ1NTUnVsZSA9IChydWxlU2VsZWN0b3I6IHN0cmluZywgcnVsZXM6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTtcbiAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYCR7cnVsZVNlbGVjdG9yfSB7ICR7cnVsZXN9IH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAobGluaykgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIC8vIElmIHVybCBwYXJhbXMgYXJlIHByZXNlbnQsIGNvbnN0cnVjdCBwYXJhbXMgb2JqZWN0IGFuZCBwYXNzIGl0IHRvIHNlYXJjaFxuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNwbGl0KGxpbmsuc3Vic3RyaW5nKGluZGV4ICsgMSwgbGluay5sZW5ndGgpLCAnJicpO1xuICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcmFtQXJyYXkgPSBzcGxpdChwYXJhbSwgJz0nKTtcbiAgICAgICAgICAgIHBhcmFtc1twYXJhbUFycmF5WzBdXSA9IHBhcmFtQXJyYXlbMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJvdXRlTmFtZUZyb21MaW5rID0gKGxpbmspID0+IHtcbiAgICBsaW5rID0gbGluay5yZXBsYWNlKCcjLycsICcvJyk7XG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXBwbGVQcm9kdWN0ID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5leHBvcnQgY29uc3QgZGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbm9vcCxcbiAgICAgICAgcmVqZWN0OiBub29wXG4gICAgfTtcbiAgICBkLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGQucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIGQucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHJldHVybiBkO1xufTtcblxuLypcbiAqIEludm9rZXMgdGhlIGdpdmVuIGxpc3Qgb2YgZnVuY3Rpb25zIHNlcXVlbnRpYWxseSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhIHByb21pc2UsXG4gKiB0aGVuIG5leHQgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9ubHkgaWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjdXRlUHJvbWlzZUNoYWluID0gKGZucywgYXJncywgZD8sIGk/KSA9PiB7XG4gICAgZCA9IGQgfHwgZGVmZXIoKTtcbiAgICBpID0gaSB8fCAwO1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGZucyA9IGZpbHRlcihmbnMsIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgcmV0dXJuICEoaXNVbmRlZmluZWQoZm4pIHx8IGlzTnVsbChmbikpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGZucyAmJiBpIDwgZm5zLmxlbmd0aCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9Qcm9taXNlKGZuc1tpXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4oZm5zLCBhcmdzLCBkLCBpICsgMSksIGQucmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZC5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBkLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGQucHJvbWlzZTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHR3byBkYXRhIHNvdXJjZXMgYW5kIHdpbGwgY2hlY2sgaWYgYm90aCBhcmUgc2FtZSBieSBjb21wYXJpbmcgdGhlIHVuaXF1ZSBpZCBhbmRcbiAqIGNvbnRleHQgaW4gd2hpY2ggZGF0YXNvdXJjZXMgYXJlIHByZXNlbnRcbiAqIEByZXR1cm5zIHsqfSBib29sZWFuIHRydWUvIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RhdGFTb3VyY2VFcXVhbCA9IChkMSwgZDIpID0+IHtcbiAgICByZXR1cm4gZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpID09PSBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgJiZcbiAgICAgICAgaXNFcXVhbChkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpLCBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpKTtcbn07XG5cbi8qKlxuICogY2hlY2tzIGlmIHRoZSBwYXNzZWQgZGF0YXNvdXJjZSBjb250ZXh0IG1hdGNoZXMgd2l0aCBwYXNzZWQgY29udGV4dFxuICogQHBhcmFtIGRzLCBkYXRhc291cmNlIGhhdmluZyBhIGNvbnRleHRcbiAqIEBwYXJhbSBjdHgsIGNvbnRleHQgdG8gY29tcGFyZSB3aXRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YVNvdXJjZUN0eCA9IChkcywgY3R4KSA9PiB7XG4gICAgcmV0dXJuIGRzLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikgPT09IGN0eDtcbn07XG5cbi8qKlxuICogVGhpcyB0cmF2ZXJzZXMgdGhlIGZpbHRlcmV4cHJlc3Npb25zIG9iamVjdCByZWN1cnNpdmVseSBhbmQgcHJvY2VzcyB0aGUgYmluZCBzdHJpbmcgaWYgYW55IGluIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSBvYmplY3RcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gY29udGV4dCBzY29wZSBvZiB0aGUgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSA9IChjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucywgdmFyaWFibGU/KSA9PiB7XG4gICAgY29uc3QgZGVzdHJveUZuID0gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lciA/IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIuYmluZChjb250ZXh0KSA6IF9ub29wO1xuICAgIGNvbnN0IGZpbHRlciQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgYmluZEZpbEV4cE9iaiA9IChvYmosIHRhcmdldE5vZGVLZXkpID0+IHtcbiAgICAgICBjb25zdCBsaXN0ZW5lciA9IChuZXdWYWwsIG9sZFZhbCkgPT4ge1xuICAgICAgICAgICBpZiAoKG5ld1ZhbCA9PT0gb2xkVmFsICYmIGlzVW5kZWZpbmVkKG5ld1ZhbCkpIHx8IChpc1VuZGVmaW5lZChuZXdWYWwpICYmICFpc1VuZGVmaW5lZChvbGRWYWwpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgY2xvbmluZyBmb3IgYmxvYiBjb2x1bW5cbiAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2Jsb2InLCAnZmlsZSddLCBvYmoudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBnZXRDbG9uZWRPYmplY3QobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHdoZXJlIHdlIGFyZSBhbGxvd2luZyB0aGUgdXNlciB0byBiaW5kIGNvbXBsZXRlIG9iamVjdFxuICAgICAgICAgICAgaWYgKG9iai50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGV4aXN0aW5nIGRhdGFiaW5kaW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG5vdyBhZGQgYWxsIHRoZSByZXR1cm5lZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBmb3JFYWNoKG5ld1ZhbCwgZnVuY3Rpb24gKHZhbHVlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0JzogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogb2JqLm1hdGNoTW9kZSB8fCAnc3RhcnRpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB2YWx1ZSB0byB0aGUgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgb2JqW3RhcmdldE5vZGVLZXldID0gbmV3VmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyJC5uZXh0KHsgZmlsdGVyRXhwcmVzc2lvbnMsIG5ld1ZhbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKG9ialt0YXJnZXROb2RlS2V5XSwgJ2JpbmQ6JykpIHtcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IG5lZWRzIGEgY2hlY2ssIHdoZXJlIGlzIHRoaXMgdXNlZFxuICAgICAgICAgICAgZGVzdHJveUZuKFxuICAgICAgICAgICAgICAgICR3YXRjaChvYmpbdGFyZ2V0Tm9kZUtleV0ucmVwbGFjZSgnYmluZDonLCAnJyksIGNvbnRleHQsIHt9LCB2YXJpYWJsZSA/IHZhcmlhYmxlLmludm9rZU9uRmlsdGVydEV4cHJlc3Npb25DaGFuZ2UuYmluZCh2YXJpYWJsZSwgb2JqLCB0YXJnZXROb2RlS2V5KSA6IGxpc3RlbmVyLCB1bmRlZmluZWQsIGZhbHNlLCB7YXJyYXlUeXBlOiBpbmNsdWRlcyhbJ2luJywgJ25vdGluJ10sIG9iai5tYXRjaE1vZGUpfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zID0+IHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLnJ1bGVzKSB7XG4gICAgICAgICAgICBmb3JFYWNoKGV4cHJlc3Npb25zLnJ1bGVzLCAoZmlsRXhwT2JqLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5ydWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbEV4cE9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICdzZWNvbmR2YWx1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWx0ZXJFeHByZXNzaW9ucyk7XG5cbiAgICByZXR1cm4gZmlsdGVyJDtcbn07XG5cbi8vIFRoaXMgbWV0aG9kIHdpbGwgc2V0IHRoZSBnaXZlbiBwcm90byBvbiB0aGUgdGFyZ2V0XG5leHBvcnQgY29uc3QgZXh0ZW5kUHJvdG8gPSAodGFyZ2V0LCBwcm90bykgPT4ge1xuICAgIGxldCBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90bykuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgICBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKTtcbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBwcm90b3R5cGUgb2YgY3JlYXRlZCBjb21wb25lbnQgYW5kIHByb3RvdHlwZSBvZiBjb250ZXh0IGFyZSBzYW1lXG4gICAgICAgIGlmIChwcm90byA9PT0gX3Byb3RvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF9wcm90bywgcHJvdG8pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4dHJhU2xhc2hlcyA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICBjb25zdCBiYXNlNjRyZWdleCA9IC9eZGF0YTppbWFnZVxcLyhbYS16XXsyLH0pO2Jhc2U2NCwvO1xuICAgIGlmIChpc1N0cmluZyh1cmwpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICogc3VwcG9ydCBmb3IgbW9iaWxlIGFwcHMgaGF2aW5nIGxvY2FsIGZpbGUgcGF0aCB1cmwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vLyBhbmRcbiAgICAgICAgKiBzdXBwb3J0IGZvciBiYXNlNjQgZm9ybWF0XG4gICAgICAgICogKi9cbiAgICAgICAgaWYgKHN0YXJ0c1dpdGgodXJsLCAnZmlsZTovLy8nKSB8fCBiYXNlNjRyZWdleC50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbXjpdXFwvKShcXC8pKycsICdnJyksICckMScpO1xuICAgIH1cbn07XG5cbiQuY2FjaGVkU2NyaXB0ID0gKCgpID0+IHtcbiAgICBjb25zdCBpblByb2dyZXNzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IFNldCgpO1xuXG4gICAgY29uc3QgaXNJblByb2dyZXNzID0gdXJsID0+IGluUHJvZ3Jlc3MuaGFzKHVybCk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IHVybCA9PiByZXNvbHZlZC5oYXModXJsKTtcbiAgICBjb25zdCBvbkxvYWQgPSB1cmwgPT4ge1xuICAgICAgICByZXNvbHZlZC5hZGQodXJsKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5nZXQodXJsKS5yZXNvbHZlKCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZGVsZXRlKHVybCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEluUHJvZ3Jlc3MgPSB1cmwgPT4ge1xuICAgICAgICBsZXQgcmVzRm47XG4gICAgICAgIGxldCByZWpGbjtcbiAgICAgICAgY29uc3QgcHJvbWlzZTogYW55ID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNGbiA9IHJlcztcbiAgICAgICAgICAgIHJlakZuID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICBwcm9taXNlLnJlc29sdmUgPSByZXNGbjtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QgPSByZWpGbjtcblxuICAgICAgICBpblByb2dyZXNzLnNldCh1cmwsIHByb21pc2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICBpZiAoaXNSZXNvbHZlZCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJblByb2dyZXNzKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0SW5Qcm9ncmVzcyh1cmwpO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybFxuICAgICAgICB9O1xuXG4gICAgICAgICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IG9uTG9hZCh1cmwpKTtcblxuICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICB9O1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFMgPSB7XG4gICAgREFURTogJ3l5eXktTU0tZGQnLFxuICAgIFRJTUU6ICdoaDptbSBhJyxcbiAgICBUSU1FU1RBTVA6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxuICAgIERBVEVUSU1FOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbn07XG4vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGUgZm9ybWF0IGZvciBnaXZlbiB0eXBlXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0ID0gdHlwZSA9PiB7XG4gICAgcmV0dXJuIERFRkFVTFRfRElTUExBWV9GT1JNQVRTW3RvVXBwZXIodHlwZSldO1xufTtcblxuLy8gR2VuZXJhdGUgZm9yIGF0dHJpYnV0ZSBvbiBsYWJlbCBhbmQgSUQgb24gaW5wdXQgZWxlbWVudCwgc28gdGhhdCBsYWJlbCBlbGVtZW50cyBhcmUgYXNzb2NpYXRlZCB0byBmb3JtIGNvbnRyb2xzXG5leHBvcnQgY29uc3QgYWRkRm9ySWRBdHRyaWJ1dGVzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbGFiZWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwuY29udHJvbC1sYWJlbCcpO1xuICAgIGxldCBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgIGlmICghaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTtcbiAgICB9XG4gICAgLyppZiB0aGVyZSBhcmUgb25seSBvbmUgaW5wdXQgZWwgYW5kIGxhYmVsIEVsIGFkZCBpZCBhbmQgZm9yIGF0dHJpYnV0ZSovXG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIGlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJChpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdbd2lkZ2V0LWlkXScpLmF0dHIoJ3dpZGdldC1pZCcpO1xuICAgICAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgICAgIHNldEF0dHIoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgICAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnZm9yJywgd2lkZ2V0SWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qQWRkaW5nIGFyaWEtbGFiZWxsZWRieSB0byByYWRpb3NldCwgY2hlY2tib3hzZXQgd2lkZ2V0cyovXG4gICAgY29uc3QgdWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndWwnKTtcbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgdWxFbC5sZW5ndGggJiYgKHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdyYWRpb2dyb3VwJyB8fCB1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnZ3JvdXAnKSkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICd3bS1ncm91cC1sYWJlbC0nICsgZ2VuZXJhdGVHVUlkKCk7XG4gICAgICAgIHNldEF0dHIodWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHdpZGdldElkKTtcbiAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIGxlZnQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG5lZ2F0aXZlIHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogVG8gRml4IHRoZSBjb250YWluZXIgb3ZlcmxhcHBpbmcgaXNzdWUgY2hhbmdpbmcgdGhlIGNvbnRyYWluZXIgbGVmdCB0cmFuc2xhdGlvbiB0byAwXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAtIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSAtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAtIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgLSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG4gICAgICAgIGlmIChjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxIDwgMCkge1xuICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSAwO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgfSk7XG4gICB9O1xuXG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiByaWdodCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gb3V0IG9mIHRoZSB2aWV3cG9ydCB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBjb250YWluZXJFbGVtICBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmICBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuICAgZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMgPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbGUgPyBwYXJzZUludChlbGUuY3NzKCd3aWR0aCcpKSA6IHBhcnNlSW50KGNvbnRhaW5lckVsZW0uY3NzKCd3aWR0aCcpKTtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IHBhcmVudERpbWVzaW9uID0gcGFyZW50RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGFyZW50UmlnaHQgPSBwYXJlbnREaW1lc2lvbi5yaWdodCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBsZXQgbmV3TGVmdDtcbiAgICAgICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3UG9ydFdpZHRoIC0gKHBhcmVudFJpZ2h0ICsgcGFyZW50RGltZXNpb24ud2lkdGgpIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gcGFyZW50UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3TGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSBuZXdMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgZ2l2ZW4gZWxlbWVudCBzZXQgdGhlIHRyYXNsYXRpb25cbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gdGFuc2xhdGVkIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyB0cmFuc2xhdGUgbWF0cml4IHBvc2l0aW9uc1xuICAgKi9cbiAgIGV4cG9ydCBjb25zdCBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVBvc2l0aW9uID0gJ3RyYW5zbGF0ZTNkKCcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxICsgJ3B4LCAnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MiArICdweCwgMHB4KSc7XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICB9O1xuXG4gICAvKipcbiAgICAqXG4gICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSBlbGVtZXQgZm9yIHRoZSBXZWJLaXRDU1NNYXRyaXhcbiAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4ID0gKGNvbnRhaW5lckVsZW0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXZWJLaXRDU1NNYXRyaXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1TQ1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkud2Via2l0VHJhbnNmb3JtKTtcbiAgICB9XG5cbi8vIGNsb3NlIGFsbCB0aGUgcG9wb3ZlcnMuXG5leHBvcnQgY29uc3QgY2xvc2VQb3BvdmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wb3BvdmVyJykubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hcHAtcG9wb3Zlci13cmFwcGVyJyk7XG4gICAgICAgIGZvckVhY2gocG9wb3ZlckVsZW1lbnRzLCAoZWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlLndpZGdldC5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBlbGUud2lkZ2V0LmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgYXBwXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBlbmQgdXNlciBkZXZlbG9wZXIgb2YgV00gYXBwXG4gKiBUaGlzIGlzIHRoZSBhbHRlcm5hdGl2ZSBmb3IgJHJzLiRzYWZlQXBwbHkoKSBpbiBBbmd1bGFySlNcbiAqIFNlZSAkYXBwRGlnZXN0IGluIHV0aWxzIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdENoYW5nZXMgPSAkYXBwRGlnZXN0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgdGhlIGFjdGlvbi9saW5rIG9mIG1lbnUvbmF2IGl0ZW1cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBpdGVtIC0gaXRlbSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IHRyaWdnZXJJdGVtQWN0aW9uID0gKHNjb3BlLCBpdGVtKSA9PiB7XG4gICAgbGV0IGl0ZW1MaW5rID0gaXRlbS5saW5rO1xuICAgIGNvbnN0IGl0ZW1BY3Rpb24gPSBpdGVtLmFjdGlvbjtcbiAgICBjb25zdCBsaW5rVGFyZ2V0ID0gaXRlbS50YXJnZXQ7XG4gICAgaWYgKGl0ZW1BY3Rpb24pIHtcbiAgICAgICAgaWYgKCFzY29wZS5pdGVtQWN0aW9uRm4pIHtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogVGhpcyB3aWxsIG5vdCB3b3JrIGFzIGZ1bmN0aW9uIHdpbGwgYmUgZHluYW1pY1xuICAgICAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuID0gJHBhcnNlRXZlbnQoaXRlbUFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4oc2NvcGUudXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0LCBPYmplY3QuY3JlYXRlKGl0ZW0pKTtcbiAgICB9XG4gICAgaWYgKGl0ZW1MaW5rKSB7XG4gICAgICAgIGlmIChpdGVtTGluay5zdGFydHNXaXRoKCcjLycpICYmICghbGlua1RhcmdldCB8fCBsaW5rVGFyZ2V0ID09PSAnX3NlbGYnKSkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRVcmxQYXJhbXMoaXRlbUxpbmspO1xuICAgICAgICAgICAgaXRlbUxpbmsgPSBnZXRSb3V0ZU5hbWVGcm9tTGluayhpdGVtTGluayk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBnZXQoc2NvcGUsICdyb3V0ZScpIHx8IGdldChzY29wZSwgJ21lbnVSZWYucm91dGUnKTtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbaXRlbUxpbmtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3BlbkxpbmsoaXRlbUxpbmssIGxpbmtUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0c291cmNlIGZyb20gdGhlIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gZXhwcmVzc2lvbiBvZiB0aGUgZGF0YXNldFxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1skaV0uYWRkcmVzc2VzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqIEV4YW1wbGUyOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmFkZHJlc3Nlc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhc291cmNlRnJvbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBpc0JvdW5kVG9WYXJpYWJsZSA9IHN0YXJ0c1dpdGgoZXhwciwgJ1ZhcmlhYmxlcy4nKTtcbiAgICBjb25zdCBpc0JvdW5kVG9XaWRnZXQgPSBzdGFydHNXaXRoKGV4cHIsICdXaWRnZXRzLicpO1xuICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgIGlmIChpc0JvdW5kVG9WYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuVmFyaWFibGVzLCBwYXJ0c1sxXSk7XG4gICAgfVxuICAgIGlmIChpc0JvdW5kVG9XaWRnZXQpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBnZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGxldCB3aWRnZXRCb3VuZEV4cHJlc3Npb247XG4gICAgICAgIHdpZGdldEJvdW5kRXhwcmVzc2lvbiA9ICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSA/IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgOiB3aWRnZXRTY29wZS5iaW5kZGF0YXNldDtcbiAgICAgICAgcmV0dXJuIGdldERhdGFzb3VyY2VGcm9tRXhwcih3aWRnZXRCb3VuZEV4cHJlc3Npb24sIHdpZGdldFNjb3BlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRhc2V0IGJvdW5kIGV4cHJlc3Npb24gZnJvbSBsaXN0IGN1cnJlbnRpdGVtIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gYm91bmQgZGF0YXNldCBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5kZXRhaWxzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFwiIHRoZW4gaXQgcmV0dXJucyBleHByZXNzaW9uIGFzIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFskaV0uZGV0YWlsc1wiXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0Q3VycmVudEl0ZW1FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEl0ZW1SZWdFeCA9IC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZztcbiAgICBpZiAoY3VycmVudEl0ZW1SZWdFeC50ZXN0KGV4cHIpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IGdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgaWYgKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXREYXRhc2V0Qm91bmRFeHByfVskaV1gKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0Q3VycmVudEl0ZW1FeHByKGV4cHIsIHNjb3BlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXRTY29wZS5iaW5kZGF0YXNldH1bJGldYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG59O1xuXG4vLyB0aGlzIHdpbGwgYWRkIHRoZSBodG1sIHRhZyB0byB0aGUgd2lkZ2V0IHRvIHNjb3BlIHRoZSBjc3MgdG8gdGhlIHBhZ2UuXG5leHBvcnQgY29uc3QgZmluZFJvb3RDb250YWluZXIgPSAoJGVsKSA9PiB7XG4gICAgbGV0IHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wcmVmYWInKTtcbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYXJ0aWFsJyk7XG4gICAgfVxuICAgIGlmKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtc3BhLXBhZ2UnKTtcbiAgICB9XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFnZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdC5sZW5ndGggJiYgcm9vdC5wYXJlbnQoKVswXS50YWdOYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgICBSRVFVSVJFRDogJ3JlcXVpcmVkJyxcbiAgICBNQVhDSEFSUzogJ21heGNoYXJzJyxcbiAgICBNSU5WQUxVRTogJ21pbnZhbHVlJyxcbiAgICBNQVhWQUxVRTogJ21heHZhbHVlJyxcbiAgICBSRUdFWFA6ICdyZWdleHAnLFxuICAgIE1JTkRBVEU6ICdtaW5kYXRlJyxcbiAgICBNQVhEQVRFOiAnbWF4ZGF0ZScsXG4gICAgTUlOVElNRTogJ21pbnRpbWUnLFxuICAgIE1BWFRJTUU6ICdtYXh0aW1lJyxcbiAgICBFWENMVURFREFURVM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIEVYQ0xVREVEQVlTOiAnZXhjbHVkZWRheXMnXG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtRmlsZVVSSSA9ICh1cmwpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcodXJsKSAmJiBoYXNDb3Jkb3ZhKCkgJiYgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBbmRyb2lkKCkgJiYgbG9jYXRpb24uaHJlZi5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArICd3d3cnLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZFNjcmlwdFRvSGVhZCA9IChjYWxsYmFjaykgPT57XG5cbiAgICBjb25zdCBzY3JpcHRlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHRlbGUub25sb2FkID0gKCkgPT4ge1xuICAgICBjYWxsYmFjayhXTV9DVVNUT01fRk9STUFUVEVSUyk7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUub25lcnJvciA9IGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgZmlsZSAnICsgc2NyaXB0ZWxlLnNyYyArICdcXG4nICsgZXJyKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0ZWxlLnNyYyA9ICcuL2V4dGVuc2lvbnMvZm9ybWF0dGVycy5qcyc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRlbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcFNldHRpbmcgPSAoa2V5LCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncyAmJiBnZXQoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzLCBrZXkpKSB8fCBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKiB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlIGl0ZW1jbGFzcyBkZXBlbmRpbmcgb24gaXRlbXNwZXJyb3cuXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzIDIgZm9yIGxhcmdlIGRldmljZSwgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC14cy0xIGNvbC1zbS0xIGNvbC1sZy0yJ1xuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAnbGctMycgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC1sZy0zJ1xuKi9cbmV4cG9ydCBjb25zdCBzZXRMaXN0Q2xhc3MgPSAoc2NvcGUpID0+IHtcbiAgICBsZXQgdGVtcCA9ICcnO1xuICAgIGlmIChzY29wZS5pdGVtc3BlcnJvdykge1xuICAgICAgICBpZiAoaXNOYU4ocGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSkpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGNvbnRhaW5pbmcgc3RyaW5nIG9mIGNsYXNzZXNcbiAgICAgICAgICAgIHNwbGl0KHNjb3BlLml0ZW1zcGVycm93LCAnICcpLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHNwbGl0KGNscywgJy0nKTtcbiAgICAgICAgICAgICAgICBjbHMgPSBgJHtrZXlzWzBdfS0keygxMiAvIHBhcnNlSW50KGtleXNbMV0sIDEwKSl9YDtcbiAgICAgICAgICAgICAgICB0ZW1wICs9IGAgY29sLSR7Y2xzfWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSB0ZW1wLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGhhdmluZyBpbnRlZ2VyIHZhbHVlLlxuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IGBjb2wteHMtJHsoMTIgLyBwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKX1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXRlbXNwZXJyb3cgaXMgbm90IHNwZWNpZmllZCBtYWtlIGl0IGZ1bGwgd2lkdGhcbiAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9ICdjb2wteHMtMTInO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ID0gKGxWaWV3OiBhbnksIHZpZXdQYXJlbnRBcHA/OiBhbnkpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFZpZXdQYXJlbnQobFZpZXcpO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQgOiB2aWV3UGFyZW50QXBwO1xufVxuXG5leHBvcnQgY29uc3QgZmluZFZpZXdQYXJlbnQgPSAobFZpZXc6IGFueSkgPT4ge1xuICAgIHJldHVybiBsVmlld1sxNV0gPyBsVmlld1sxNV1bOF0gOiBsVmlld1sxNV07XG4gICAgLyppZihsVmlld1szXSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbFZpZXdbOF07XG4gICAgfVxuICAgIGxldCBwYXJlbnRsVmlldyA9IGxWaWV3WzNdO1xuICAgIGlmKHR5cGVvZiBsVmlld1sxXSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9XG4gICAgbGV0IGNvbXBvbmVudFR5cGUgPSBsVmlld1sxXVtcInR5cGVcIl07XG4gICAgaWYoY29tcG9uZW50VHlwZSA9PT0gMCB8fCBjb21wb25lbnRUeXBlID09PSAxKSB7XG4gICAgICAgIGxldCBwID0gbFZpZXdbOF07XG4gICAgICAgIC8vIHRzLWlnbm9yZVxuICAgICAgICBpZihwLmhhc093blByb3BlcnR5KFwiaXNEaWFsb2dDb21wb25lbnRcIikgfHwgcC5oYXNPd25Qcm9wZXJ0eShcImlzQ29udGFpbmVyRGlyZWN0aXZlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH0qL1xufVxuXG4vKmV4cG9ydCBjb25zdCBnZXRQYXJlbnQgPSAocGFyZW50OiBhbnkpID0+IHtcbiAgICBpZihwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc0R5bmFtaWNDb21wb25lbnRcIikgfHwgcGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNQYWdlQ29tcG9uZW50XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9IGVsc2V7XG4gICAgICAgIHJldHVybiBwYXJlbnQudmlld1BhcmVudCA/IGdldFBhcmVudChwYXJlbnQudmlld1BhcmVudCkgOiBwYXJlbnQ7XG4gICAgfVxuXG59Ki9cbiJdfQ==
1465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDM0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDN0IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksUUFBUSxFQUNoRSxLQUFLLEVBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUNyQyxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLE1BQU0sQ0FBQTtBQVliLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQzdDLE1BQU0sS0FBSyxHQUFHO0lBQ1Ys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QUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Z2V0V21Qcm9qZWN0UHJvcGVydGllc30gZnJvbSAnLi93bS1wcm9qZWN0LXByb3BlcnRpZXMnO1xuXG5pbXBvcnQgeyRhcHBEaWdlc3QsICR3YXRjaH0gZnJvbSAnLi93YXRjaGVyJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL2VudW1zL2VudW1zJztcbmltcG9ydCB7RGF0YVNvdXJjZX0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtzZXRBdHRyfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyRwYXJzZUV2ZW50fSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyJztcbmltcG9ydCB7XG4gICAgYXR0ZW1wdCxcbiAgICBjYW1lbENhc2UsIGNsb25lRGVlcCwgZXZlcnksXG4gICAgZmlsdGVyLCBmb3JFYWNoLCBnZXQsIGlkZW50aXR5LFxuICAgIGluY2x1ZGVzLCBpbmRleE9mLCBpbnRlcnNlY3Rpb24sIGlzQXJyYXksIGlzRGF0ZSxcbiAgICBpc0VxdWFsLCBpc0VxdWFsV2l0aCwgaXNFcnJvcixcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzTnVsbCxcbiAgICBpc051bWJlciwgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsIGtleXMsIG1hcCwgbm9vcCBhcyBfbm9vcCwgb21pdCwgcmVwbGFjZSBhcyBfcmVwbGFjZSxcbiAgICBzcGxpdCxcbiAgICBzdGFydHNXaXRoLCB0b0xvd2VyLCB0b1VwcGVyLCB0cmltXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCBcIngyanNcIlxuXG5kZWNsYXJlIGNvbnN0IFgySlM7XG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgICAgICBNQUNJTlRFTDogL01hY0ludGVsL2ksXG4gICAgQU5EUk9JRF9UQUJMRVQ6IC9hbmRyb2lkfGFuZHJvaWQgMy4wfHhvb218c2NoLWk4MDB8cGxheWJvb2t8dGFibGV0fGtpbmRsZS9pLFxuICAgIE1PQklMRTogL01vYmlsZS9pLFxuICAgIFdJTkRPV1M6IC9XaW5kb3dzIFBob25lL2ksXG4gICAgU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVDogL1xcLihibXB8Z2lmfGpwZXxqcGd8anBlZ3x0aWZ8dGlmZnxwYm18cG5nfGljbykkL2ksXG4gICAgU1VQUE9SVEVEX0ZJTEVfRk9STUFUOiAvXFwuKHR4dHxqc3xjc3N8aHRtbHxzY3JpcHR8cHJvcGVydGllc3xqc29ufGphdmF8eG1sfHNtZHx4bWl8c3FsfGxvZ3x3c2RsfHZtfGZ0bHxqcnhtbHx5bWx8eWFtbHxtZHxsZXNzfGpzcCkkL2ksXG4gICAgU1VQUE9SVEVEX0FVRElPX0ZPUk1BVDogL1xcLihtcDN8b2dnfHdlYm18d21hfDNncHx3YXZ8bTRhKSQvaSxcbiAgICBTVVBQT1JURURfVklERU9fRk9STUFUOiAvXFwuKG1wNHxvZ2d8d2VibXx3bXZ8bXBlZ3xtcGd8YXZpfG1vdikkL2ksXG4gICAgUEFHRV9SRVNPVVJDRV9QQVRIOiAvXlxcL3BhZ2VzXFwvLipcXC4oanN8Y3NzfGh0bWx8anNvbikkLyxcbiAgICBNSU5fUEFHRV9SRVNPVVJDRV9QQVRIOiAvLioocGFnZS5taW4uaHRtbCkkLyxcbiAgICBWQUxJRF9FTUFJTDogL15bYS16QS1aXVtcXHcuK10rQFthLXpBLVpfXSs/XFwuW2EtekEtWi5dezEsNH1bYS16QS1aXSQvLFxuICAgIFZBTElEX1dFQl9VUkw6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1dFQlNPQ0tFVF9VUkw6IC9eKHdzW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9SRUxBVElWRV9VUkw6IC9eKD8hd3d3XFwufCg/Omh0dHB8ZnRwKXM/OlxcL1xcL3xbQS1aYS16XTpcXFxcfFxcL1xcLykuKi8sXG4gICAgUkVQTEFDRV9QQVRURVJOOiAvXFwkXFx7KFteXFx9XSspXFx9L2csXG4gICAgWklQX0ZJTEU6IC9cXC56aXAkL2ksXG4gICAgRVhFX0ZJTEU6IC9cXC5leGUkL2ksXG4gICAgTk9fUVVPVEVTX0FMTE9XRUQ6IC9eW14nfFwiXSokLyxcbiAgICBOT19ET1VCTEVfUVVPVEVTX0FMTE9XRUQ6IC9eW15cIl0qJC8sXG4gICAgVkFMSURfSFRNTDogLzxbYS16XVtcXHNcXFNdKj4vaSxcbiAgICBWQUxJRF9QQVNTV09SRDogL15bMC05YS16QS1aLV8uQCYqISMkJV0rJC8sXG4gICAgU1BFQ0lBTF9DSEFSQUNURVJTOiAvW15BLVowLTlhLXpfXSsvaSxcbiAgICBBUFBfU0VSVkVSX1VSTF9GT1JNQVQ6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOVxcLlxcLV0rKFs6XT9bMC05XXsyLDV9fFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KVxcLytbXj8jJj1dKyQvLFxuICAgIEpTT05fREFURV9GT1JNQVQ6IC9cXGR7NH0tWzAtMV1cXGQtWzAtM11cXGQoVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkLlxcZHsxLDN9WiQpPy8sXG4gICAgREFUQV9VUkw6IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKilcXHMqJC9pLFxuICAgIElTT19EQVRFX0ZPUk1BVDogLyhcXGR7NH0tXFxkezJ9LVxcZHsyfSlUKFxcZHsyfTpcXGR7Mn06XFxkezJ9KShcXC5cXGQrKT8oWystXVxcZHsyfTo/XFxkezJ9fFopJC9cbn0sXG4gICAgY29tcGFyZUJ5U2VwYXJhdG9yID0gJzonO1xuXG5jb25zdCBOVU1CRVJfVFlQRVMgPSBbJ2ludCcsIERhdGFUeXBlLklOVEVHRVIsIERhdGFUeXBlLkZMT0FULCBEYXRhVHlwZS5ET1VCTEUsIERhdGFUeXBlLkxPTkcsIERhdGFUeXBlLlNIT1JULCBEYXRhVHlwZS5CWVRFLCBEYXRhVHlwZS5CSUdfSU5URUdFUiwgRGF0YVR5cGUuQklHX0RFQ0lNQUxdO1xuY29uc3Qgbm93OiBEYXRlID0gbmV3IERhdGUoKTtcbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuXG5leHBvcnQgY29uc3QgZW51bSBFVkVOVF9MSUZFIHsgT05DRSwgV0lORE9XIH1cblxuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZCA9IHYgPT4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2ID0+IG51bGwgIT09IHYgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgdG9Cb29sZWFuID0gKHZhbCwgaWRlbnRpdHk/KSA9PiAoKHZhbCAmJiB2YWwgIT09ICdmYWxzZScpID8gdHJ1ZSA6IChpZGVudGl0eSA/IHZhbCA9PT0gaWRlbnRpdHkgOiBmYWxzZSkpO1xuXG5mdW5jdGlvbiBpc0lFMTEoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdUcmlkZW50LycpID4gLTE7XG59XG5cbmV4cG9ydCBjb25zdCBpc0lFID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0lFMTEoKSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICgpID0+IFJFR0VYLkFORFJPSUQudGVzdCh1c2VyQWdlbnQpO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKCkgPT4gUkVHRVguQU5EUk9JRF9UQUJMRVQudGVzdCh1c2VyQWdlbnQpICYmICEoKC9UYWJsZXQgUEMgMi4wL2kpLnRlc3QodXNlckFnZW50KSk7XG5cbmV4cG9ydCBjb25zdCBpc0lwaG9uZSA9ICgpID0+IFJFR0VYLklQSE9ORS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcG9kID0gKCkgPT4gUkVHRVguSVBPRC50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcGFkID0gKCkgPT4ge1xuICAgIHJldHVybiBSRUdFWC5JUEFELnRlc3QodXNlckFnZW50KSB8fCAod2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMiAmJiAoUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkgfHwgUkVHRVguTUFDSU5URUwudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBpbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IGluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IGNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IHNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBtYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKGlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChpc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSAmJiB0aW1lWm9uZSAhPT0gbW9tZW50LmRlZmF1bHRab25lPy5uYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vbWVudEZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKTtcbiAgICAgICAgaWYgKGlzSW50ZXJ2YWxEYXRlVGltZSApIHsgLy8gZGF0ZXMgd2hpY2ggYXJlIG9mIHR5cGUgdGltZSB3aWRnZXQgKHZhbHVlIGlzIGhoOm1tOnNzKSBidXQgcmV0dXJuZWQgYXMgZGF0ZSBzdHJpbmcgZnJvbSB0aW1lIGNvbXBcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZVN0YW1wVHlwZSA9PT0gJ2RhdGV0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICBkYXRlT2JqID0gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWVab25lLCBkYXRlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmUsIGNvbXBJbnN0YW5jZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRhdGUgaGFzIHRpbWV6b25lIGluZm9ybWF0aW9uIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgaGFzT2Zmc2V0U3RyID0gKGRhdGVTdHIpID0+IHtcbiAgICBpZiAodHlwZW9mIGRhdGVTdHIgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2goUkVHRVguSVNPX0RBVEVfRk9STUFUKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBtZXRob2QgdG8gZ2V0IHRoZSBkYXRlIG9iamVjdCBmcm9tIHRoZSBpbnB1dCByZWNlaXZlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZU9iaiA9ICh2YWx1ZSwgb3B0aW9ucz8sIHRpbWV6b25lPyk6IERhdGUgPT4ge1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgV01TLTE5NjAxLCBpbnZhbGlkIGRhdGUgaXMgcmV0dXJuZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBnZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gIGlzTmF0aXZlUGlja2VyID8gJ1lZWVkvTU0vREQgSEg6bW06c3MnIDogbW9tZW50UGF0dGVybihvcHRpb25zLnBhdHRlcm4pO1xuICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSwgcGF0dGVybikudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSBkYXRlIG9iamVjdCwgbm8gbmVlZCB0byBjb3ZlcnQgaXQqL1xuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoIW1vbWVudCh2YWx1ZSkuaXNWYWxpZCgpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBkYXRlT2JqID0gbmV3IERhdGUodmFsdWUpO1xuICAgIC8qKlxuICAgICAqIGlmIGRhdGUgdmFsdWUgaXMgc3RyaW5nIFwiMjAtMDUtMjAxOVwiIHRoZW4gbmV3IERhdGUodmFsdWUpIHJldHVybiAyME1heTIwMTkgd2l0aCBjdXJyZW50IHRpbWUgaW4gSW5kaWEsXG4gICAgICogd2hlcmVhcyB0aGlzIHdpbGwgcmV0dXJuIDE5TWF5MjAxOSB3aXRoIHRpbWUgbGFnZ2luZyBmb3IgZmV3IGhvdXJzLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSBpdCByZXR1cm5zIFVUQyB0aW1lIGkuZS4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKFVUQykuXG4gICAgICogVG8gY3JlYXRlIGRhdGUgaW4gbG9jYWwgdGltZSB1c2UgbW9tZW50XG4gICAgICovXG4gICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBzZWxlY3RlZCBsb2NhbGUgaXMgQXJhYmljLCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIGdpdmluZyBkYXRlIGluIEFyYWJpYyBsYW5ndWFnZVxuICAgICAgICAgKiAoRXg6IElmIGRhdGUgdmFsdWUgaXMgXCIxOTkwLTExLTIzXCIgYW5kIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgXCLZodmp2anZoC3ZodmhLdmi2aNU2aDZoDrZoNmgOtmg2aAr2aDZpTrZo9mgXCIpXG4gICAgICAgICAqIGFuZCBuZXcgRGF0ZShtb21lbnQodmFsdWUpLmZvcm1hdCgpKSBpcyBnaXZpbmcgSW52YWxpZCBEYXRlLiBTbyBmcnN0IGNvbnZlcnRpbmcgaXQgdG8gdGltZXN0YW1wIHZhbHVlLlxuICAgICAgICAqL1xuXG4gICAgICAgIGRhdGVPYmogPSAhdGltZXpvbmUgPyBuZXcgRGF0ZShtb21lbnQobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkudmFsdWVPZigpKSA6IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lem9uZSwgdmFsdWUpOztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IENVUlJFTlRfREFURSB8fCBpc05hTihkYXRlT2JqLmdldERheSgpKSkge1xuICAgICAgICByZXR1cm4gbm93O1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZU9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50ID0gKF9lbGVtZW50OiBFbGVtZW50LCBleGNsdWRlRWxlbWVudDogRWxlbWVudCwgbmF0aXZlRWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlLCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0LCBzdWNjZXNzQ0IsIGxpZmU6IEVWRU5UX0xJRkUsIGlzQ2FwdHVyZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IF9lbGVtZW50O1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVFbGVtZW50ICYmIChleGNsdWRlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8IGV4Y2x1ZGVFbGVtZW50ID09PSBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpZmUgPT09IEVWRU5UX0xJRkUuT05DRSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzQ0IoKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjbG9uZWQgcmVwbGljYSBvZiB0aGUgcGFzc2VkIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG9iamVjdCBvYmplY3QvYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIHBhc3NlZCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENsb25lZE9iamVjdCA9IChvYmplY3QpID0+IHtcbiAgICByZXR1cm4gY2xvbmVEZWVwKG9iamVjdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZXMgPSAoZm9ybU5hbWUsIGZpZWxkTmFtZSwgaXNMaXN0KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBnZXQoZG9jdW1lbnQuZm9ybXMsIFtmb3JtTmFtZSwgZmllbGROYW1lLCAnZmlsZXMnXSk7XG4gICAgcmV0dXJuIGlzTGlzdCA/IG1hcChmaWxlcywgaWRlbnRpdHkpIDogZmlsZXMgJiYgZmlsZXNbMF07XG59O1xuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciovXG5mdW5jdGlvbiByYW5kb20oKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBndWlkIGJhc2VkIG9uIHJhbmRvbSBudW1iZXJzLiovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHVUlkID0gKCkgPT4ge1xuICAgIHJldHVybiByYW5kb20oKSArICctJyArIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGlmIGdpdmVuIGFjY2VzcyByb2xlIGlzIGluIGN1cnJlbnQgbG9nZ2VkaW4gdXNlciBhY2Nlc3Mgcm9sZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWNjZXNzUm9sZXMgPSAocm9sZUV4cCwgbG9nZ2VkSW5Vc2VyKSA9PiB7XG4gICAgbGV0IHJvbGVzO1xuXG4gICAgaWYgKHJvbGVFeHAgJiYgbG9nZ2VkSW5Vc2VyKSB7XG5cbiAgICAgICAgcm9sZXMgPSByb2xlRXhwICYmIHJvbGVFeHAuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG5cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbihyb2xlcywgbG9nZ2VkSW5Vc2VyLnVzZXJSb2xlcykubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZhbGlkSlNPTiA9IChjb250ZW50KSA9PiB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEludFZhbHVlID0gcGFyc2VJbnQoY29udGVudCwgMTApO1xuICAgICAgICAvKm9idGFpbmluZyBqc29uIGZyb20gZWRpdG9yIGNvbnRlbnQgc3RyaW5nKi9cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpIHx8ICFpc05hTihwYXJzZWRJbnRWYWx1ZSkgPyBjb250ZW50IDogSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qdGVybWluYXRpbmcgZXhlY3V0aW9uIGlmIG5ldyB2YXJpYWJsZSBvYmplY3QgaXMgbm90IHZhbGlkIGpzb24uKi9cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgeG1sVG9Kc29uID0gKHhtbFN0cmluZykgPT4ge1xuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ29iamVjdCcsICdhdHRyaWJ1dGVQcmVmaXgnOiAnJywgJ2VuYWJsZVRvU3RyaW5nRnVuYyc6IGZhbHNlIH0pO1xuICAgIGxldCBqc29uID0geDJqc09iai54bWwyanMoeG1sU3RyaW5nKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgICBqc29uID0gZ2V0KGpzb24sIE9iamVjdC5rZXlzKGpzb24pWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gZmluZCB0aGUgdmFsdWUgb2YgYSBrZXkgaW4gdGhlIG9iamVjdFxuICogaWYga2V5IG5vdCBmb3VuZCBhbmQgY3JlYXRlIGlzIHRydWUsIGFuIG9iamVjdCBpcyBjcmVhdGVkIGFnYWluc3QgdGhhdCBub2RlXG4gKiBFeGFtcGxlczpcbiAqIHZhciBhID0ge1xuICogIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfVxuICogfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMuZCcpIC0tPiAndGVzdCdcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jJykgLS0+IHtkOiAndGVzdCd9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnKSAtLT4gdW5kZWZpbmVkXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnLCB0cnVlKSAtLT4ge30gYW5kIGEgd2lsbCBiZWNvbWU6XG4gKiB7XG4gKiAgIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfSxcbiAqICBlOiB7XG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZmluZFZhbHVlT2YgPSAob2JqLCBrZXksIGNyZWF0ZT8pID0+IHtcblxuICAgIGlmICghb2JqIHx8ICFrZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlKSB7XG4gICAgICAgIHJldHVybiBnZXQob2JqLCBrZXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgIGtleXMgPSBbXTtcblxuICAgIGxldCBza2lwUHJvY2Vzc2luZztcblxuICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHsgLy8gaWYgdGhlIHBhcnQgb2YgYSBrZXkgaXMgbm90IHZhbGlkLCBza2lwIHRoZSBwcm9jZXNzaW5nLlxuICAgICAgICAgICAgc2tpcFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViUGFydHMgPSBwYXJ0Lm1hdGNoKC9cXHcrL2cpO1xuICAgICAgICBsZXQgc3ViUGFydDtcblxuICAgICAgICB3aGlsZSAoc3ViUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdWJQYXJ0ID0gc3ViUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGtleXMucHVzaCh7ICdrZXknOiBzdWJQYXJ0LCAndmFsdWUnOiBzdWJQYXJ0cy5sZW5ndGggPyBbXSA6IHt9IH0pOyAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBjcmVhdGUgYW4gYXJyYXkgb3IgYW4gb2JqZWN0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChza2lwUHJvY2Vzc2luZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaCgoX2tleSkgPT4ge1xuICAgICAgICBsZXQgdGVtcE9iaiA9IG9ialtfa2V5LmtleV07XG4gICAgICAgIGlmICghaXNPYmplY3QodGVtcE9iaikpIHtcbiAgICAgICAgICAgIHRlbXBPYmogPSBnZXRWYWxpZEpTT04odGVtcE9iaik7XG4gICAgICAgICAgICBpZiAoIXRlbXBPYmopIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JqID0gX2tleS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbX2tleS5rZXldID0gdGVtcE9iajtcbiAgICAgICAgb2JqID0gdGVtcE9iajtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKlxuKiBleHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgbGFzdCBiaXQgZnJvbSBmdWxsIHR5cGVSZWYgb2YgYSBmaWVsZFxuKiBlLmcuIHJldHVybnMgJ1N0cmluZycgZm9yIHR5cGVSZWYgPSAnamF2YS5sYW5nLlN0cmluZydcbiogQHBhcmFtczoge3R5cGVSZWZ9IHR5cGUgcmVmZXJlbmNlXG4qL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RUeXBlID0gKHR5cGVSZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKCF0eXBlUmVmKSB7XG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5TVFJJTkc7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlUmVmICYmIHR5cGVSZWYuc3Vic3RyaW5nKHR5cGVSZWYubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHR5cGUgPSB0eXBlICYmIHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB0eXBlID0gdHlwZSA9PT0gRGF0YVR5cGUuTE9DQUxEQVRFVElNRSA/IERhdGFUeXBlLkRBVEVUSU1FIDogdHlwZTtcbiAgICByZXR1cm4gdHlwZTtcbn07XG5cbi8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGF0YSB0eXBlIG1hdGNoZXMgbnVtYmVyIHR5cGUgKi9cbmV4cG9ydCBjb25zdCBpc051bWJlclR5cGUgPSAodHlwZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChOVU1CRVJfVFlQRVMuaW5kZXhPZihleHRyYWN0VHlwZSh0eXBlKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpO1xufTtcblxuLyogZnVuY3Rpb24gdG8gY2hlY2sgaWYgcHJvdmlkZWQgb2JqZWN0IGlzIGVtcHR5Ki9cbmV4cG9ydCBjb25zdCBpc0VtcHR5T2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikgJiYgIWlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIEZ1bmN0aW9uIGV4cGVjdHMgYW4gZWxlbWVudCBvbiB3aGljaCB0aGUgc2Nyb2xsaW5nIHNob3VsZCBiZSBhcHBsaWVkLCBEZXBlbmRpbmcgb24gdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBzY3JvbGxiYXIgd2lsbCBiZSBhZGp1c3RlZFxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIGNvbnN0IGZvcm1Qb3NpdGlvbiA9ICRlbGVtZW50Lm9mZnNldCgpLnRvcDtcbiAgICBjb25zdCAkc2Nyb2xsUGFyZW50ID0gJGVsZW1lbnQuY2xvc2VzdCgnW3dtc21vb3Roc2Nyb2xsPVwidHJ1ZVwiXScpO1xuICAgIGlmIChpc01vYmlsZUFwcCgpICYmICRzY3JvbGxQYXJlbnQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGlTY3JvbGwgPSBnZXQoJHNjcm9sbFBhcmVudFswXSwgJ2lzY3JvbGwnKTtcbiAgICAgICAgbGV0IHRvID0gLShmb3JtUG9zaXRpb24gLSBpU2Nyb2xsLnkpO1xuICAgICAgICB0byA9IChpU2Nyb2xsLm1heFNjcm9sbFkgPiB0bykgPyBpU2Nyb2xsLm1heFNjcm9sbFkgOiB0bztcbiAgICAgICAgaVNjcm9sbC5zY3JvbGxUbygwLCB0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGZvcm1Qb3NpdGlvbixcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBGdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGluIHZpZXdwb3J0IG9yIG5vdFxuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluVmlld3BvcnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgICAgIHJlY3QubGVmdCA+PSAwICYmXG4gICAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgICAgcmVjdC5yaWdodCA8PSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxuICAgICk7XG59XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIHBhZ2VhYmxlIG9iamVjdCBvciBub3QuKi9cbmV4cG9ydCBjb25zdCBpc1BhZ2VhYmxlID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgcGFnZWFibGUgPSB7XG4gICAgICAgICdjb250ZW50JzogW10sXG4gICAgICAgICdmaXJzdCc6IHRydWUsXG4gICAgICAgICdsYXN0JzogdHJ1ZSxcbiAgICAgICAgJ251bWJlcic6IDAsXG4gICAgICAgICdudW1iZXJPZkVsZW1lbnRzJzogMTAsXG4gICAgICAgICdzaXplJzogMjAsXG4gICAgICAgICdzb3J0JzogbnVsbCxcbiAgICAgICAgJ3RvdGFsRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3RvdGFsUGFnZXMnOiAxXG4gICAgfTtcbiAgICAvLyBwYWdpbmF0ZWQgb2JqZWN0IG1heSBvciBtYXkgbm90IGNvbnRhaW4gJ2VtcHR5JyBwcm9wZXJ0eS4gSW4gZWl0aGVyIGNhc2UsIFBhZ2VhYmxlIHNob3VsZCByZXR1cm4gYXMgdHJ1ZS5cbiAgICBjb25zdCBwYWdpbmF0ZWRPYmogPSBvbWl0KG9iaiwgJ2VtcHR5Jyk7XG4gICAgcmV0dXJuIChpc0VxdWFsKGtleXMocGFnZWFibGUpLCBrZXlzKHBhZ2luYXRlZE9iaikuc29ydCgpKSk7XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gcmVwbGFjZSBwYXR0ZXJucyBpbiBzdHJpbmcgd2l0aCBvYmplY3Qga2V5cyBvciBhcnJheSB2YWx1ZXNcbiAqIEV4YW1wbGVzOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7Zmlyc3R9ICR7bGFzdH0gIScsIHtmaXJzdDogJ3dhdmVtYWtlcicsIGxhc3Q6ICduZyd9KSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7MH0gJHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogRXhhbXBsZXMgaWYgcGFyc2VFcnJvciBpcyB0cnVlOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sIHswfSB7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSAodGVtcGxhdGUsIG1hcCwgcGFyc2VFcnJvcj86IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgcmVnRXggPSBSRUdFWC5SRVBMQUNFX1BBVFRFUk47XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJzZUVycm9yKSB7XG4gICAgICAgIHJlZ0V4ID0gL1xceyhbXlxcfV0rKVxcfS9nO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ0V4LCBmdW5jdGlvbiAobWF0Y2gsIGtleSkge1xuICAgICAgICByZXR1cm4gZ2V0KG1hcCwga2V5KTtcbiAgICB9KTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgZGF0ZSB0aW1lIHR5cGUqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVUeXBlID0gdHlwZSA9PiB7XG4gICAgaWYgKGluY2x1ZGVzKHR5cGUsICcuJykpIHtcbiAgICAgICAgdHlwZSA9IHRvTG93ZXIoZXh0cmFjdFR5cGUodHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5jbHVkZXMoW0RhdGFUeXBlLkRBVEUsIERhdGFUeXBlLlRJTUUsIERhdGFUeXBlLlRJTUVTVEFNUCwgRGF0YVR5cGUuREFURVRJTUUsIERhdGFUeXBlLkxPQ0FMREFURVRJTUVdLCB0eXBlKTtcbn07XG5cbmNvbnN0IG1vbWVudFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmIChpbmNsdWRlcyhwYXR0ZXJuLCAnRScpKSB7XG4gICAgICAgIHBhdHRlcm4gPSBfcmVwbGFjZShwYXR0ZXJuLCAvRVssXT8vZywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gX3JlcGxhY2UocGF0dGVybiwgL3kqZCovZywgKHZhbCkgPT4gdmFsLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBkYXRlIG9iamVjdC4gSWYgdmFsIGlzIHVuZGVmaW5lZCBpdCByZXR1cm5zIGludmFsaWQgZGF0ZSAqL1xuZXhwb3J0IGNvbnN0IGdldFZhbGlkRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICBjb25zdCBkZWZhdWx0TWVyaWRpYW4gPSBbJ0FNJywgJ1BNJ107XG4gICBjb25zdCBtb21lbnRNZXJpZGlhbiA9IG1vbWVudCgpLl9sb2NhbGUubWVyaWRpZW0oKTtcbiAgICAvLyBVcGRhdGluZyBsb2NhbGl6ZWQgbWVyaWRpYW5zIHdpdGggZGVmYXVsdCBtZXJpZGlhbnMgd2hlbiBtb21lbnQgbWVyaWRpYW4gaXMgbm90IGRlZmluZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1lcmlkaWFucyAmJiBpbmNsdWRlcyhkZWZhdWx0TWVyaWRpYW4sIG1vbWVudE1lcmlkaWFuKSkge1xuICAgICAgICBmb3JFYWNoKG9wdGlvbnMubWVyaWRpYW5zLCAobWVyaWRpYW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZXModmFsLCBtZXJpZGlhbikpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShtZXJpZGlhbiwgZGVmYXVsdE1lcmlkaWFuW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gaXNOYXRpdmVQaWNrZXIgPyAoZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykgfHwgJ1lZWVkvTU0vREQgSEg6bW06c3MnKSA6IChtb21lbnRQYXR0ZXJuKGdldChvcHRpb25zLCAncGF0dGVybicpKSB8fCAnJyk7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgaWYgKCFpc05hTigobmV3IERhdGUodmFsKSkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB2YWwgaXMgYSB2YWxpZCBkYXRlIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgaU9TLCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGZvcm1hdCB0byBjb25zaWRlciBldmVuIHRoZSBzZWNvbmRzLlxuICAgICAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsID0gbW9tZW50KG5ldyBEYXRlKHZhbCksIHBhdHRlcm4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCwgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gdmFsLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChtb21lbnQodmFsLCBwYXR0ZXJuKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgLy8gZGF0ZSB3aXRoICs1IGhvdXJzIGlzIHJldHVybmVkIGluIHNhZmFyaSBicm93c2VyIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGRhdGUuXG4gICAgICAgIC8vIEhlbmNlIGNvbnZlcnRpbmcgdGhlIGRhdGUgdG8gdGhlIHN1cHBvcnRlZCBmb3JtYXQgXCJZWVlZL01NL0REIEhIOm1tOnNzXCIgaW4gSU9TXG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobW9tZW50KHZhbCkudmFsdWVPZigpKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIHRpbWVzdGFtcCBzdHJpbmcsIGNvbnZlcnQgaXQgdG8gYSBudW1iZXIqL1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgICB2YWwgPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvKmlmIHRoZSB2YWx1ZSBpcyBpbiBISDptbTpzcyBmb3JtYXQsIGl0IHJldHVybnMgYSB3cm9uZyBkYXRlLiBTbyBhcHBlbmQgdGhlIGRhdGUgdG8gdGhlIGdpdmVuIHZhbHVlIHRvIGdldCBkYXRlKi9cbiAgICAgICAgaWYgKCEobmV3IERhdGUodmFsKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQoKG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpICsgJyAnICsgdmFsKSwgJ1lZWVktTU0tREQgSEg6bW06c3MgQScpO1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKG1vbWVudCh2YWwpLnZhbHVlT2YoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGphdmFzY3JpcHQgZGF0ZSBvYmplY3QqL1xuZXhwb3J0IGNvbnN0IGdldE5hdGl2ZURhdGVPYmplY3QgPSAodmFsLCBvcHRpb25zPykgPT4ge1xuICAgIHZhbCA9IGdldFZhbGlkRGF0ZU9iamVjdCh2YWwsIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xufTtcblxuXG4vKipcbiAqIHByZXBhcmUgYSBibG9iIG9iamVjdCBiYXNlZCBvbiB0aGUgY29udGVudCBhbmQgY29udGVudCB0eXBlIHByb3ZpZGVkXG4gKiBpZiBjb250ZW50IGlzIGJsb2IgaXRzZWxmLCBzaW1wbHkgcmV0dXJucyBpdCBiYWNrXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gdmFsQ29udGVudFR5cGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmxvYiA9ICh2YWwsIHZhbENvbnRlbnRUeXBlPykgPT4ge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGNvbnN0IGpzb25WYWwgPSBnZXRWYWxpZEpTT04odmFsKTtcbiAgICBpZiAoanNvblZhbCAmJiBqc29uVmFsIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShqc29uVmFsKV0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IG5ldyBCbG9iKFt2YWxdLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICd0ZXh0L3BsYWluJyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgYnkgY29tcGFyaW5nIHR3byBvYmplY3RzIGJhc2VkIG9uIHRoZSBmaWVsZHNcbiAqIEBwYXJhbSBvYmoxIG9iamVjdFxuICogQHBhcmFtIG9iajIgb2JqZWN0XG4gKiBAcGFyYW0gY29tcGFyZUJ5IHN0cmluZyBmaWVsZCB2YWx1ZXMgdG8gY29tcGFyZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgb2JqZWN0IGVxdWFsaXR5IHJldHVybnMgdHJ1ZSBiYXNlZCBvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRXF1YWxXaXRoRmllbGRzID0gKG9iajEsIG9iajIsIGNvbXBhcmVCeSkgPT4ge1xuICAgIC8vIGNvbXBhcmVCeSBjYW4gYmUgJ2lkJyBvciAnaWQxLCBpZDInIG9yICdpZDEsIGlkMjppZDMnXG4gICAgLy8gU3BsaXQgdGhlIGNvbXBhcmVieSBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzXG4gICAgbGV0IF9jb21wYXJlQnkgPSBpc0FycmF5KGNvbXBhcmVCeSkgPyBjb21wYXJlQnkgOiBzcGxpdChjb21wYXJlQnksICcsJyk7XG5cbiAgICBfY29tcGFyZUJ5ID0gbWFwKF9jb21wYXJlQnksIHRyaW0pO1xuXG4gICAgcmV0dXJuIGlzRXF1YWxXaXRoKG9iajEsIG9iajIsIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgICAgcmV0dXJuIGV2ZXJ5KF9jb21wYXJlQnksIGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbGV0IGNiMSwgY2IyLCBfY2I7XG5cbiAgICAgICAgICAgIC8vIElmIGNvbXBhcmVieSBjb250YWlucyA6ICwgY29tcGFyZSB0aGUgdmFsdWVzIGJ5IHRoZSBrZXlzIG9uIGVpdGhlciBzaWRlIG9mIDpcbiAgICAgICAgICAgIGlmIChpbmRleE9mKGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNiMSA9IGNiMiA9IHRyaW0oY2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfY2IgPSBzcGxpdChjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBjYjEgPSB0cmltKF9jYlswXSk7XG4gICAgICAgICAgICAgICAgY2IyID0gdHJpbShfY2JbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZ2V0KG8xLCBjYjEpID09PSBnZXQobzIsIGNiMik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0Tm9kZSA9IHNlbGVjdG9yID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTdHlsZVNoZWV0TG9hZGVkID0gaHJlZiA9PiAhIWdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcblxuLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIHN0eWxlc2hlZXQgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IHJlbW92ZVN0eWxlU2hlZXQgPSBocmVmID0+IHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgfVxufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBhIHN0eWxlc2hlZXRcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldCA9ICh1cmwsIGF0dHIpID0+IHtcbiAgICBpZiAoaXNTdHlsZVNoZWV0TG9hZGVkKHVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAvLyBUbyBhZGQgYXR0cmlidXRlcyB0byBsaW5rIHRhZ1xuICAgIGlmIChhdHRyICYmIGF0dHIubmFtZSkge1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgIH1cbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgncmVsJywgJ3N0eWxlc2hlZXQnKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIHN0eWxlc2hlZXRzXG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXRzID0gKHVybHMgPSBbXSkgPT4ge1xuICAgIC8vIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgYW4gYXJyYXksIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJscykpIHtcbiAgICAgICAgdXJscyA9IFt1cmxzXTtcbiAgICB9XG4gICAgdXJscy5mb3JFYWNoKGxvYWRTdHlsZVNoZWV0KTtcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU2NyaXB0TG9hZGVkID0gc3JjID0+ICEhZ2V0Tm9kZShgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXSwgc2NyaXB0W2RhdGEtc3JjPVwiJHtzcmN9XCJdYCk7XG5cbmV4cG9ydCBjb25zdCBnZXRNb21lbnRMb2NhbGVPYmplY3QgPSAodGltZVpvbmUsIGRhdGVPYmo/KSA9PiB7XG4gICAgaWYgKGRhdGVPYmopIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudChkYXRlT2JqKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KCkudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdCA9IGFzeW5jICh1cmwsIGxvYWRWaWFTY3JpcHRUYWcsIGNhY2hlYWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgX3VybCA9IHVybC50cmltKCk7XG4gICAgaWYgKCFfdXJsLmxlbmd0aCB8fCBpc1NjcmlwdExvYWRlZChfdXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRWaWFTY3JpcHRUYWcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gX3VybDtcbiAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7ICAvL0lFXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy9PdGhlciBicm93c2Vyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKGVycm9yOiBhbnkpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZihjYWNoZWFibGUpIHtcbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH0pLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJC5nZXRTY3JpcHQodXJsKVxuICAgICAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdHMgPSBhc3luYyAodXJscyA9IFtdLCBsb2FkVmlhU2NyaXB0VGFnID0gdHJ1ZSkgPT4ge1xuICAgIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICAgICAgYXdhaXQgbG9hZFNjcmlwdCh1cmwsIGxvYWRWaWFTY3JpcHRUYWcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG5leHBvcnQgbGV0IF9XTV9BUFBfUFJPSkVDVDogYW55ID0ge307XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBsZXQgaXRlbTogYW55ID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSB7fTtcbiAgICB9XG4gICAgaXRlbVtrZXldID0gdmFsdWU7XG5cbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQsIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0ga2V5ID0+IHtcbiAgICAvLyBzYW5pdHkgY2hlY2sgZm9yIHRoaXMgdG8gd29yayB3aXRoIG5nLWNvZGVnZW5cbiAgICBsZXQgaXRlbSA9IHdpbmRvdyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBub29wID0gKC4uLmFyZ3MpID0+IHsgfTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBibG9iIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBmaWxlIHBhdGhcbiAqIEBwYXJhbSBmaWxlcGF0aFxuICogQHJldHVybnMgcHJvbWlzZSBoYXZpbmcgYmxvYiBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb0Jsb2IgPSAoZmlsZXBhdGgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gUmVhZCB0aGUgZmlsZSBlbnRyeSBmcm9tIHRoZSBmaWxlIFVSTFxuICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGZpbGVwYXRoLCBmdW5jdGlvbiAoZmlsZUVudHJ5KSB7XG4gICAgICAgICAgICBmaWxlRW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgICAgIC8vIGZpbGUgaGFzIHRoZSBjb3Jkb3ZhIGZpbGUgc3RydWN0dXJlLiBUbyBzdWJtaXQgdG8gdGhlIGJhY2tlbmQsIGNvbnZlcnQgdGhpcyBmaWxlIHRvIGphdmFzY3JpcHQgZmlsZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nQmxvYiA9IG5ldyBCbG9iKFtyZWFkZXIucmVzdWx0XSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBmaWxlLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeyAnYmxvYic6IGltZ0Jsb2IsICdmaWxlcGF0aCc6IGZpbGVwYXRoIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzQ29yZG92YSA9ICgpID0+IHtcbiAgICByZXR1cm4gISF3aW5kb3dbJ2NvcmRvdmEnXTtcbn07XG5cbmV4cG9ydCBjb25zdCBBcHBDb25zdGFudHMgPSB7XG4gICAgSU5UX01BWF9WQUxVRTogMjE0NzQ4MzY0N1xufTtcblxuZXhwb3J0IGNvbnN0IG9wZW5MaW5rID0gKGxpbms6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgPSAnX3NlbGYnKSA9PiB7XG4gICAgaWYgKGhhc0NvcmRvdmEoKSAmJiBzdGFydHNXaXRoKGxpbmssICcjJykpIHtcbiAgICAgICAgbG9jYXRpb24uaGFzaCA9IGxpbms7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93Lm9wZW4obGluaywgdGFyZ2V0KTtcbiAgICB9XG59O1xuXG4vKiB1dGlsIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIGNvbnRlbnQgZnJvbSBhIHVybCAqL1xuZXhwb3J0IGNvbnN0IGZldGNoQ29udGVudCA9IChkYXRhVHlwZSwgdXJsOiBzdHJpbmcsIGluU3luYzogYm9vbGVhbiA9IGZhbHNlLCBzdWNjZXNzPywgZXJyb3I/KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gJC5hamF4KHsgdHlwZTogJ2dldCcsIGRhdGFUeXBlOiBkYXRhVHlwZSwgdXJsOiB1cmwsIGFzeW5jOiAhaW5TeW5jIH0pXG4gICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHN1Y2Nlc3MgJiYgc3VjY2VzcyhyZXNwb25zZSkpXG4gICAgICAgIC5mYWlsKHJlYXNvbiA9PiBlcnJvciAmJiBlcnJvcihyZWFzb24pKTtcbn07XG5cbi8qKlxuICogSWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIHByb21pc2UsIHRoZW4gb2JqZWN0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD4gfCBUfSBhXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cbiAqL1xuZXhwb3J0IGNvbnN0IHRvUHJvbWlzZSA9IDxUPihhOiBUIHwgUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4ge1xuICAgIGlmIChhIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEgYXMgVCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGludm9rZXMgdGhlIGdpdmVuIHRoZSBmdW5jdGlvbiAoZm4pIHVudGlsIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMgb3IgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiByZXRyaWVzIGlzIHJlYWNoZWQgb3Igb25CZWZvcmVSZXRyeSByZXR1cm5zIGZhbHNlLlxuICpcbiAqIEBwYXJhbSBmbiAtIGEgZnVuY3Rpb24gdGhhdCBpcyBuZWVkcyB0byBiZSBpbnZva2VkLiBUaGUgZnVuY3Rpb24gY2FuIGFsc28gcmV0dXJuIGEgcHJvbWlzZSBhcyB3ZWxsLlxuICogQHBhcmFtIGludGVydmFsIC0gbWluaW11bSB0aW1lIGdhcCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAwLlxuICogQHBhcmFtIG1heFJldHJpZXMgLSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4gRm9yIGFsbCBvdGhlciB2YWx1ZXMsXG4gKiBtYXhSZXRyaWVzIGlzIGluZmluaXR5LlxuICogQHBhcmFtIG9uQmVmb3JlUmV0cnkgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSByZS1pbnZva2luZyBhZ2Fpbi4gVGhpcyBmdW5jdGlvbiBjYW5cbiAqIHJldHVybiBmYWxzZSBvciBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB0byBmYWxzZSB0byBzdG9wIGZ1cnRoZXIgcmV0cnkgYXR0ZW1wdHMuXG4gKiBAcmV0dXJucyB7Kn0gYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBmbiBpcyBzdWNjZXNzIChvcikgbWF4aW11bSByZXRyeSBhdHRlbXB0cyByZWFjaGVkXG4gKiAob3IpIG9uQmVmb3JlUmV0cnkgcmV0dXJuZWQgZmFsc2UuXG4gKi9cbmV4cG9ydCBjb25zdCByZXRyeUlmRmFpbHMgPSAoZm46ICgpID0+IGFueSwgaW50ZXJ2YWw6IG51bWJlciwgbWF4UmV0cmllczogbnVtYmVyLCBvbkJlZm9yZVJldHJ5ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSkgPT4ge1xuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICBjb25zdCB0cnlGbiA9ICgpID0+IHtcbiAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBtYXhSZXRyaWVzID0gKGlzTnVtYmVyKG1heFJldHJpZXMpICYmIG1heFJldHJpZXMgPiAwID8gbWF4UmV0cmllcyA6IDApO1xuICAgIGludGVydmFsID0gKGlzTnVtYmVyKGludGVydmFsKSAmJiBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IDApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJBcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9Qcm9taXNlPGJvb2xlYW4+KG9uQmVmb3JlUmV0cnkoKSkudGhlbihmdW5jdGlvbiAocmV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5ICE9PSBmYWxzZSAmJiAoIW1heFJldHJpZXMgfHwgcmV0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAoKSA9PiByZWplY3QoZXJyQXJncykpO1xuICAgICAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB9O1xuICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICB9KTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBvZiBhIGRlZmVyIGNyZWF0ZWQgdXNpbmcgdGhpcyBmdW5jdGlvbiwgaGFzIGFib3J0IGZ1bmN0aW9uIHRoYXQgd2lsbCByZWplY3QgdGhlIGRlZmVyIHdoZW4gY2FsbGVkLlxuICogQHJldHVybnMgeyp9IGFuZ3VsYXIgZGVmZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBYm9ydGFibGVEZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBfZGVmZXI6IGFueSA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVqZWN0OiBudWxsLFxuICAgICAgICByZXNvbHZlOiBudWxsLFxuICAgICAgICBvbkFib3J0OiAoKSA9PiB7IH0sXG4gICAgICAgIGlzQWJvcnRlZDogZmFsc2VcbiAgICB9O1xuICAgIF9kZWZlci5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBfZGVmZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIF9kZWZlci5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgX2RlZmVyLnByb21pc2UuYWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHRyaWdnZXJGbihfZGVmZXIub25BYm9ydCk7XG4gICAgICAgIF9kZWZlci5yZWplY3QoJ2Fib3J0ZWQnKTtcbiAgICAgICAgX2RlZmVyLmlzQWJvcnRlZCA9IHRydWU7XG4gICAgfTtcbiAgICByZXR1cm4gX2RlZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNTU1J1bGUgPSAocnVsZVNlbGVjdG9yOiBzdHJpbmcsIHJ1bGVzOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKGAke3J1bGVTZWxlY3Rvcn0geyAke3J1bGVzfSB9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKGxpbmspID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAvLyBJZiB1cmwgcGFyYW1zIGFyZSBwcmVzZW50LCBjb25zdHJ1Y3QgcGFyYW1zIG9iamVjdCBhbmQgcGFzcyBpdCB0byBzZWFyY2hcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzcGxpdChsaW5rLnN1YnN0cmluZyhpbmRleCArIDEsIGxpbmsubGVuZ3RoKSwgJyYnKTtcbiAgICAgICAgcXVlcnlQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIGxldCBwYXJhbUFycmF5ID0gc3BsaXQocGFyYW0sICc9Jyk7XG4gICAgICAgICAgICBwYXJhbXNbcGFyYW1BcnJheVswXV0gPSBwYXJhbUFycmF5WzFdO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3V0ZU5hbWVGcm9tTGluayA9IChsaW5rKSA9PiB7XG4gICAgbGluayA9IGxpbmsucmVwbGFjZSgnIy8nLCAnLycpO1xuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbGluaztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwcGxlUHJvZHVjdCA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuZXhwb3J0IGNvbnN0IGRlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG5vb3AsXG4gICAgICAgIHJlamVjdDogbm9vcFxuICAgIH07XG4gICAgZC5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBkLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBkLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICByZXR1cm4gZDtcbn07XG5cbi8qXG4gKiBJbnZva2VzIHRoZSBnaXZlbiBsaXN0IG9mIGZ1bmN0aW9ucyBzZXF1ZW50aWFsbHkgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBJZiBhIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9taXNlLFxuICogdGhlbiBuZXh0IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmx5IGlmIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICovXG5leHBvcnQgY29uc3QgZXhlY3V0ZVByb21pc2VDaGFpbiA9IChmbnMsIGFyZ3MsIGQ/LCBpPykgPT4ge1xuICAgIGQgPSBkIHx8IGRlZmVyKCk7XG4gICAgaSA9IGkgfHwgMDtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBmbnMgPSBmaWx0ZXIoZm5zLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiAhKGlzVW5kZWZpbmVkKGZuKSB8fCBpc051bGwoZm4pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmbnMgJiYgaSA8IGZucy5sZW5ndGgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRvUHJvbWlzZShmbnNbaV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBleGVjdXRlUHJvbWlzZUNoYWluKGZucywgYXJncywgZCwgaSArIDEpLCBkLnJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGQucmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZC5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBkLnByb21pc2U7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0d28gZGF0YSBzb3VyY2VzIGFuZCB3aWxsIGNoZWNrIGlmIGJvdGggYXJlIHNhbWUgYnkgY29tcGFyaW5nIHRoZSB1bmlxdWUgaWQgYW5kXG4gKiBjb250ZXh0IGluIHdoaWNoIGRhdGFzb3VyY2VzIGFyZSBwcmVzZW50XG4gKiBAcmV0dXJucyB7Kn0gYm9vbGVhbiB0cnVlLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNEYXRhU291cmNlRXF1YWwgPSAoZDEsIGQyKSA9PiB7XG4gICAgcmV0dXJuIGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSA9PT0gZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpICYmXG4gICAgICAgIGlzRXF1YWwoZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSwgZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSk7XG59O1xuXG4vKipcbiAqIGNoZWNrcyBpZiB0aGUgcGFzc2VkIGRhdGFzb3VyY2UgY29udGV4dCBtYXRjaGVzIHdpdGggcGFzc2VkIGNvbnRleHRcbiAqIEBwYXJhbSBkcywgZGF0YXNvdXJjZSBoYXZpbmcgYSBjb250ZXh0XG4gKiBAcGFyYW0gY3R4LCBjb250ZXh0IHRvIGNvbXBhcmUgd2l0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFTb3VyY2VDdHggPSAoZHMsIGN0eCkgPT4ge1xuICAgIHJldHVybiBkcy5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpID09PSBjdHg7XG59O1xuXG4vKipcbiAqIFRoaXMgdHJhdmVyc2VzIHRoZSBmaWx0ZXJleHByZXNzaW9ucyBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHByb2Nlc3MgdGhlIGJpbmQgc3RyaW5nIGlmIGFueSBpbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gdmFyaWFibGUgdmFyaWFibGUgb2JqZWN0XG4gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSB2YXJpYWJsZVxuICogQHBhcmFtIGNvbnRleHQgc2NvcGUgb2YgdGhlIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUgPSAoY29udGV4dCwgZmlsdGVyRXhwcmVzc2lvbnMsIHZhcmlhYmxlPykgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyLmJpbmQoY29udGV4dCkgOiBfbm9vcDtcbiAgICBjb25zdCBmaWx0ZXIkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGJpbmRGaWxFeHBPYmogPSAob2JqLCB0YXJnZXROb2RlS2V5KSA9PiB7XG4gICAgICAgY29uc3QgbGlzdGVuZXIgPSAobmV3VmFsLCBvbGRWYWwpID0+IHtcbiAgICAgICAgICAgaWYgKChuZXdWYWwgPT09IG9sZFZhbCAmJiBpc1VuZGVmaW5lZChuZXdWYWwpKSB8fCAoaXNVbmRlZmluZWQobmV3VmFsKSAmJiAhaXNVbmRlZmluZWQob2xkVmFsKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTa2lwIGNsb25pbmcgZm9yIGJsb2IgY29sdW1uXG4gICAgICAgICAgIGlmICghaW5jbHVkZXMoWydibG9iJywgJ2ZpbGUnXSwgb2JqLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsID0gZ2V0Q2xvbmVkT2JqZWN0KG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiB3aGVyZSB3ZSBhcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gYmluZCBjb21wbGV0ZSBvYmplY3RcbiAgICAgICAgICAgIGlmIChvYmoudGFyZ2V0ID09PSAnZGF0YUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBleGlzdGluZyBkYXRhYmluZGluZyBlbGVtZW50XG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBub3cgYWRkIGFsbCB0aGUgcmV0dXJuZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgZm9yRWFjaChuZXdWYWwsIGZ1bmN0aW9uICh2YWx1ZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCc6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ21hdGNoTW9kZSc6IG9iai5tYXRjaE1vZGUgfHwgJ3N0YXJ0aWdub3JlY2FzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJydcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgdmFsdWUgdG8gdGhlIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIG9ialt0YXJnZXROb2RlS2V5XSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlciQubmV4dCh7IGZpbHRlckV4cHJlc3Npb25zLCBuZXdWYWwgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaW5nU3RhcnRzV2l0aChvYmpbdGFyZ2V0Tm9kZUtleV0sICdiaW5kOicpKSB7XG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBuZWVkcyBhIGNoZWNrLCB3aGVyZSBpcyB0aGlzIHVzZWRcbiAgICAgICAgICAgIGRlc3Ryb3lGbihcbiAgICAgICAgICAgICAgICAkd2F0Y2gob2JqW3RhcmdldE5vZGVLZXldLnJlcGxhY2UoJ2JpbmQ6JywgJycpLCBjb250ZXh0LCB7fSwgdmFyaWFibGUgPyB2YXJpYWJsZS5pbnZva2VPbkZpbHRlcnRFeHByZXNzaW9uQ2hhbmdlLmJpbmQodmFyaWFibGUsIG9iaiwgdGFyZ2V0Tm9kZUtleSkgOiBsaXN0ZW5lciwgdW5kZWZpbmVkLCBmYWxzZSwge2FycmF5VHlwZTogaW5jbHVkZXMoWydpbicsICdub3RpbiddLCBvYmoubWF0Y2hNb2RlKX0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucyA9PiB7XG4gICAgICAgIGlmIChleHByZXNzaW9ucy5ydWxlcykge1xuICAgICAgICAgICAgZm9yRWFjaChleHByZXNzaW9ucy5ydWxlcywgKGZpbEV4cE9iaiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoucnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWxFeHBPYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxFeHBPYmoubWF0Y2hNb2RlID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAnc2Vjb25kdmFsdWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsdGVyRXhwcmVzc2lvbnMpO1xuXG4gICAgcmV0dXJuIGZpbHRlciQ7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCB3aWxsIHNldCB0aGUgZ2l2ZW4gcHJvdG8gb24gdGhlIHRhcmdldFxuZXhwb3J0IGNvbnN0IGV4dGVuZFByb3RvID0gKHRhcmdldCwgcHJvdG8pID0+IHtcbiAgICBsZXQgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgICAgX3Byb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90byk7XG4gICAgICAgIC8vIHJldHVybiBpZiB0aGUgcHJvdG90eXBlIG9mIGNyZWF0ZWQgY29tcG9uZW50IGFuZCBwcm90b3R5cGUgb2YgY29udGV4dCBhcmUgc2FtZVxuICAgICAgICBpZiAocHJvdG8gPT09IF9wcm90bykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfcHJvdG8sIHByb3RvKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFeHRyYVNsYXNoZXMgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgY29uc3QgYmFzZTY0cmVnZXggPSAvXmRhdGE6aW1hZ2VcXC8oW2Etel17Mix9KTtiYXNlNjQsLztcbiAgICBpZiAoaXNTdHJpbmcodXJsKSkge1xuICAgICAgICAvKlxuICAgICAgICAqIHN1cHBvcnQgZm9yIG1vYmlsZSBhcHBzIGhhdmluZyBsb2NhbCBmaWxlIHBhdGggdXJsIHN0YXJ0aW5nIHdpdGggZmlsZTovLy8gYW5kXG4gICAgICAgICogc3VwcG9ydCBmb3IgYmFzZTY0IGZvcm1hdFxuICAgICAgICAqICovXG4gICAgICAgIGlmIChzdGFydHNXaXRoKHVybCwgJ2ZpbGU6Ly8vJykgfHwgYmFzZTY0cmVnZXgudGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZShuZXcgUmVnRXhwKCcoW146XVxcLykoXFwvKSsnLCAnZycpLCAnJDEnKTtcbiAgICB9XG59O1xuXG4kLmNhY2hlZFNjcmlwdCA9ICgoKSA9PiB7XG4gICAgY29uc3QgaW5Qcm9ncmVzcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBTZXQoKTtcblxuICAgIGNvbnN0IGlzSW5Qcm9ncmVzcyA9IHVybCA9PiBpblByb2dyZXNzLmhhcyh1cmwpO1xuICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSB1cmwgPT4gcmVzb2x2ZWQuaGFzKHVybCk7XG4gICAgY29uc3Qgb25Mb2FkID0gdXJsID0+IHtcbiAgICAgICAgcmVzb2x2ZWQuYWRkKHVybCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZ2V0KHVybCkucmVzb2x2ZSgpO1xuICAgICAgICBpblByb2dyZXNzLmRlbGV0ZSh1cmwpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRJblByb2dyZXNzID0gdXJsID0+IHtcbiAgICAgICAgbGV0IHJlc0ZuO1xuICAgICAgICBsZXQgcmVqRm47XG4gICAgICAgIGNvbnN0IHByb21pc2U6IGFueSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgcmVzRm4gPSByZXM7XG4gICAgICAgICAgICByZWpGbiA9IHJlajtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvbWlzZS5yZXNvbHZlID0gcmVzRm47XG4gICAgICAgIHByb21pc2UucmVqZWN0ID0gcmVqRm47XG5cbiAgICAgICAgaW5Qcm9ncmVzcy5zZXQodXJsLCBwcm9taXNlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSW5Qcm9ncmVzcyh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEluUHJvZ3Jlc3ModXJsKTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgfTtcblxuICAgICAgICAkLmFqYXgob3B0aW9ucykuZG9uZSgoKSA9PiBvbkxvYWQodXJsKSk7XG5cbiAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgfTtcbn0pKCk7XG5cbmNvbnN0IERFRkFVTFRfRElTUExBWV9GT1JNQVRTID0ge1xuICAgIERBVEU6ICd5eXl5LU1NLWRkJyxcbiAgICBUSU1FOiAnaGg6bW0gYScsXG4gICAgVElNRVNUQU1QOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbiAgICBEQVRFVElNRTogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG59O1xuLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGlzcGxheSBkYXRlIGZvcm1hdCBmb3IgZ2l2ZW4gdHlwZVxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCA9IHR5cGUgPT4ge1xuICAgIHJldHVybiBERUZBVUxUX0RJU1BMQVlfRk9STUFUU1t0b1VwcGVyKHR5cGUpXTtcbn07XG5cbi8vIEdlbmVyYXRlIGZvciBhdHRyaWJ1dGUgb24gbGFiZWwgYW5kIElEIG9uIGlucHV0IGVsZW1lbnQsIHNvIHRoYXQgbGFiZWwgZWxlbWVudHMgYXJlIGFzc29jaWF0ZWQgdG8gZm9ybSBjb250cm9sc1xuZXhwb3J0IGNvbnN0IGFkZEZvcklkQXR0cmlidXRlcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsLmNvbnRyb2wtbGFiZWwnKTtcbiAgICBsZXQgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2ZvY3VzLXRhcmdldF0nKTtcbiAgICBpZiAoIWlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyk7XG4gICAgfVxuICAgIC8qaWYgdGhlcmUgYXJlIG9ubHkgb25lIGlucHV0IGVsIGFuZCBsYWJlbCBFbCBhZGQgaWQgYW5kIGZvciBhdHRyaWJ1dGUqL1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiBpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICQoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnW3dpZGdldC1pZF0nKS5hdHRyKCd3aWRnZXQtaWQnKTtcbiAgICAgICAgaWYgKHdpZGdldElkKSB7XG4gICAgICAgICAgICBzZXRBdHRyKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICAgICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2ZvcicsIHdpZGdldElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKkFkZGluZyBhcmlhLWxhYmVsbGVkYnkgdG8gcmFkaW9zZXQsIGNoZWNrYm94c2V0IHdpZGdldHMqL1xuICAgIGNvbnN0IHVsRWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsJyk7XG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIHVsRWwubGVuZ3RoICYmICh1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAncmFkaW9ncm91cCcgfHwgdWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ2dyb3VwJykpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAnd20tZ3JvdXAtbGFiZWwtJyArIGdlbmVyYXRlR1VJZCgpO1xuICAgICAgICBzZXRBdHRyKHVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB3aWRnZXRJZCk7XG4gICAgICAgIHNldEF0dHIobGFiZWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiBsZWZ0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBuZWdhdGl2ZSB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIFRvIEZpeCB0aGUgY29udGFpbmVyIG92ZXJsYXBwaW5nIGlzc3VlIGNoYW5naW5nIHRoZSBjb250cmFpbmVyIGxlZnQgdHJhbnNsYXRpb24gdG8gMFxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gLSBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gLSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgLSBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIC0gQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuICAgICAgICBpZiAoY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA8IDApIHtcbiAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gMDtcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgIH0pO1xuICAgfTtcblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gcmlnaHQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG91dCBvZiB0aGUgdmlld3BvcnQgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAgcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAgc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbiAgIGV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxlID8gcGFyc2VJbnQoZWxlLmNzcygnd2lkdGgnKSkgOiBwYXJzZUludChjb250YWluZXJFbGVtLmNzcygnd2lkdGgnKSk7XG4gICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKSArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHBhcmVudEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJpZ2h0ID0gcGFyZW50RGltZXNpb24ucmlnaHQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgbGV0IG5ld0xlZnQ7XG4gICAgICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgICAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuXG4gICAgICAgICAgICBpZiAodmlld1BvcnRXaWR0aCAtIChwYXJlbnRSaWdodCArIHBhcmVudERpbWVzaW9uLndpZHRoKSA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbmV3TGVmdCA9IHBhcmVudFJpZ2h0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gbmV3TGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgfTtcblxuICAvKipcbiAgICogRm9yIGdpdmVuIGVsZW1lbnQgc2V0IHRoZSB0cmFzbGF0aW9uXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVtIHRhbnNsYXRlZCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgdHJhbnNsYXRlIG1hdHJpeCBwb3NpdGlvbnNcbiAgICovXG4gICBleHBvcnQgY29uc3Qgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVQb3NpdGlvbiA9ICd0cmFuc2xhdGUzZCgnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSArICdweCwgJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDIgKyAncHgsIDBweCknO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk1velRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuT1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgfTtcblxuICAgLyoqXG4gICAgKlxuICAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gZWxlbWV0IGZvciB0aGUgV2ViS2l0Q1NTTWF0cml4XG4gICAgKi9cbiAgICBleHBvcnQgY29uc3QgZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeCA9IChjb250YWluZXJFbGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgV2ViS2l0Q1NTTWF0cml4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNU0NTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS50cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLndlYmtpdFRyYW5zZm9ybSk7XG4gICAgfVxuXG4vLyBjbG9zZSBhbGwgdGhlIHBvcG92ZXJzLlxuZXhwb3J0IGNvbnN0IGNsb3NlUG9wb3ZlciA9IChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50LmNsb3Nlc3QoJy5hcHAtcG9wb3ZlcicpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXBwLXBvcG92ZXItd3JhcHBlcicpO1xuICAgICAgICBmb3JFYWNoKHBvcG92ZXJFbGVtZW50cywgKGVsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZS53aWRnZXQuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgZWxlLndpZGdldC5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaW4gdGhlIGFwcFxuICogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgZW5kIHVzZXIgZGV2ZWxvcGVyIG9mIFdNIGFwcFxuICogVGhpcyBpcyB0aGUgYWx0ZXJuYXRpdmUgZm9yICRycy4kc2FmZUFwcGx5KCkgaW4gQW5ndWxhckpTXG4gKiBTZWUgJGFwcERpZ2VzdCBpbiB1dGlscyBmb3IgbW9yZSBpbmZvXG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlY3RDaGFuZ2VzID0gJGFwcERpZ2VzdDtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byB0cmlnZ2VyIHRoZSBhY3Rpb24vbGluayBvZiBtZW51L25hdiBpdGVtXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0gaXRlbSAtIGl0ZW0gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCB0cmlnZ2VySXRlbUFjdGlvbiA9IChzY29wZSwgaXRlbSkgPT4ge1xuICAgIGxldCBpdGVtTGluayA9IGl0ZW0ubGluaztcbiAgICBjb25zdCBpdGVtQWN0aW9uID0gaXRlbS5hY3Rpb247XG4gICAgY29uc3QgbGlua1RhcmdldCA9IGl0ZW0udGFyZ2V0O1xuICAgIGlmIChpdGVtQWN0aW9uKSB7XG4gICAgICAgIGlmICghc2NvcGUuaXRlbUFjdGlvbkZuKSB7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IFRoaXMgd2lsbCBub3Qgd29yayBhcyBmdW5jdGlvbiB3aWxsIGJlIGR5bmFtaWNcbiAgICAgICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbiA9ICRwYXJzZUV2ZW50KGl0ZW1BY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuKHNjb3BlLnVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dCwgT2JqZWN0LmNyZWF0ZShpdGVtKSk7XG4gICAgfVxuICAgIGlmIChpdGVtTGluaykge1xuICAgICAgICBpZiAoaXRlbUxpbmsuc3RhcnRzV2l0aCgnIy8nKSAmJiAoIWxpbmtUYXJnZXQgfHwgbGlua1RhcmdldCA9PT0gJ19zZWxmJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZ2V0VXJsUGFyYW1zKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGl0ZW1MaW5rID0gZ2V0Um91dGVOYW1lRnJvbUxpbmsoaXRlbUxpbmspO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gZ2V0KHNjb3BlLCAncm91dGUnKSB8fCBnZXQoc2NvcGUsICdtZW51UmVmLnJvdXRlJyk7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2l0ZW1MaW5rXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wZW5MaW5rKGl0ZW1MaW5rLCBsaW5rVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdHNvdXJjZSBmcm9tIHRoZSBleHByZXNzaW9uXG4gKiBAcGFyYW0gZXhwciAtIGV4cHJlc3Npb24gb2YgdGhlIGRhdGFzZXRcbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNbJGldLmFkZHJlc3Nlc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKiBFeGFtcGxlMjogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5hZGRyZXNzZXNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNvdXJjZUZyb21FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgaXNCb3VuZFRvVmFyaWFibGUgPSBzdGFydHNXaXRoKGV4cHIsICdWYXJpYWJsZXMuJyk7XG4gICAgY29uc3QgaXNCb3VuZFRvV2lkZ2V0ID0gc3RhcnRzV2l0aChleHByLCAnV2lkZ2V0cy4nKTtcbiAgICBjb25zdCBwYXJ0cyA9IGV4cHIuc3BsaXQoJy4nKTtcbiAgICBpZiAoaXNCb3VuZFRvVmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIGdldChzY29wZS52aWV3UGFyZW50LlZhcmlhYmxlcywgcGFydHNbMV0pO1xuICAgIH1cbiAgICBpZiAoaXNCb3VuZFRvV2lkZ2V0KSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBsZXQgd2lkZ2V0Qm91bmRFeHByZXNzaW9uO1xuICAgICAgICB3aWRnZXRCb3VuZEV4cHJlc3Npb24gPSAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikgPyB3aWRnZXREYXRhc2V0Qm91bmRFeHByIDogd2lkZ2V0U2NvcGUuYmluZGRhdGFzZXQ7XG4gICAgICAgIHJldHVybiBnZXREYXRhc291cmNlRnJvbUV4cHIod2lkZ2V0Qm91bmRFeHByZXNzaW9uLCB3aWRnZXRTY29wZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0YXNldCBib3VuZCBleHByZXNzaW9uIGZyb20gbGlzdCBjdXJyZW50aXRlbSBleHByZXNzaW9uXG4gKiBAcGFyYW0gZXhwciAtIGJvdW5kIGRhdGFzZXQgZXhwcmVzc2lvblxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uZGV0YWlsc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXRcIiB0aGVuIGl0IHJldHVybnMgZXhwcmVzc2lvbiBhcyBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXRbJGldLmRldGFpbHNcIlxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdEN1cnJlbnRJdGVtRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRJdGVtUmVnRXggPSAvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2c7XG4gICAgaWYgKGN1cnJlbnRJdGVtUmVnRXgudGVzdChleHByKSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGV4cHIuc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBnZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGlmICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0RGF0YXNldEJvdW5kRXhwcn1bJGldYCk7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdEN1cnJlbnRJdGVtRXhwcihleHByLCBzY29wZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNlKC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZywgYCR7d2lkZ2V0U2NvcGUuYmluZGRhdGFzZXR9WyRpXWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHByO1xufTtcblxuLy8gdGhpcyB3aWxsIGFkZCB0aGUgaHRtbCB0YWcgdG8gdGhlIHdpZGdldCB0byBzY29wZSB0aGUgY3NzIHRvIHRoZSBwYWdlLlxuZXhwb3J0IGNvbnN0IGZpbmRSb290Q29udGFpbmVyID0gKCRlbCkgPT4ge1xuICAgIGxldCByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcHJlZmFiJyk7XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFydGlhbCcpO1xuICAgIH1cbiAgICBpZighcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXNwYS1wYWdlJyk7XG4gICAgfVxuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3QubGVuZ3RoICYmIHJvb3QucGFyZW50KClbMF0udGFnTmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCBWQUxJREFUT1IgPSB7XG4gICAgUkVRVUlSRUQ6ICdyZXF1aXJlZCcsXG4gICAgTUFYQ0hBUlM6ICdtYXhjaGFycycsXG4gICAgTUlOVkFMVUU6ICdtaW52YWx1ZScsXG4gICAgTUFYVkFMVUU6ICdtYXh2YWx1ZScsXG4gICAgUkVHRVhQOiAncmVnZXhwJyxcbiAgICBNSU5EQVRFOiAnbWluZGF0ZScsXG4gICAgTUFYREFURTogJ21heGRhdGUnLFxuICAgIE1JTlRJTUU6ICdtaW50aW1lJyxcbiAgICBNQVhUSU1FOiAnbWF4dGltZScsXG4gICAgRVhDTFVERURBVEVTOiAnZXhjbHVkZWRhdGVzJyxcbiAgICBFWENMVURFREFZUzogJ2V4Y2x1ZGVkYXlzJ1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUZpbGVVUkkgPSAodXJsKSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKHVybCkgJiYgaGFzQ29yZG92YSgpICYmIHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQW5kcm9pZCgpICYmIGxvY2F0aW9uLmhyZWYuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZShjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkgKyAnd3d3JywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBlbmRTY3JpcHRUb0hlYWQgPSAoY2FsbGJhY2spID0+e1xuXG4gICAgY29uc3Qgc2NyaXB0ZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0ZWxlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgY2FsbGJhY2soV01fQ1VTVE9NX0ZPUk1BVFRFUlMpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIGZpbGUgJyArIHNjcmlwdGVsZS5zcmMgKyAnXFxuJyArIGVycik7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdGVsZS5zcmMgPSAnLi9leHRlbnNpb25zL2Zvcm1hdHRlcnMuanMnO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0ZWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBTZXR0aW5nID0gKGtleSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MgJiYgZ2V0KF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncywga2V5KSkgfHwgZGVmYXVsdFZhbHVlO1xufTtcblxuLyogdGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBpdGVtY2xhc3MgZGVwZW5kaW5nIG9uIGl0ZW1zcGVycm93LlxuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAyIGZvciBsYXJnZSBkZXZpY2UsIHRoZW4gaXRlbWNsYXNzIGlzICdjb2wteHMtMSBjb2wtc20tMSBjb2wtbGctMidcbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgJ2xnLTMnIHRoZW4gaXRlbWNsYXNzIGlzICdjb2wtbGctMydcbiovXG5leHBvcnQgY29uc3Qgc2V0TGlzdENsYXNzID0gKHNjb3BlKSA9PiB7XG4gICAgbGV0IHRlbXAgPSAnJztcbiAgICBpZiAoc2NvcGUuaXRlbXNwZXJyb3cpIHtcbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlSW50KHNjb3BlLml0ZW1zcGVycm93LCAxMCkpKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBjb250YWluaW5nIHN0cmluZyBvZiBjbGFzc2VzXG4gICAgICAgICAgICBzcGxpdChzY29wZS5pdGVtc3BlcnJvdywgJyAnKS5mb3JFYWNoKChjbHM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBzcGxpdChjbHMsICctJyk7XG4gICAgICAgICAgICAgICAgY2xzID0gYCR7a2V5c1swXX0tJHsoMTIgLyBwYXJzZUludChrZXlzWzFdLCAxMCkpfWA7XG4gICAgICAgICAgICAgICAgdGVtcCArPSBgIGNvbC0ke2Nsc31gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gdGVtcC50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBoYXZpbmcgaW50ZWdlciB2YWx1ZS5cbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSBgY29sLXhzLSR7KDEyIC8gcGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSl9YDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIElmIGl0ZW1zcGVycm93IGlzIG5vdCBzcGVjaWZpZWQgbWFrZSBpdCBmdWxsIHdpZHRoXG4gICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSAnY29sLXhzLTEyJztcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFBhcmVudCA9IChsVmlldzogYW55LCB2aWV3UGFyZW50QXBwPzogYW55KSA9PiB7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRWaWV3UGFyZW50KGxWaWV3KTtcbiAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50IDogdmlld1BhcmVudEFwcDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRWaWV3UGFyZW50ID0gKGxWaWV3OiBhbnkpID0+IHtcbiAgICByZXR1cm4gbFZpZXdbMTVdID8gbFZpZXdbMTVdWzhdIDogbFZpZXdbMTVdO1xuICAgIC8qaWYobFZpZXdbM10gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxWaWV3WzhdO1xuICAgIH1cbiAgICBsZXQgcGFyZW50bFZpZXcgPSBsVmlld1szXTtcbiAgICBpZih0eXBlb2YgbFZpZXdbMV0gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgfVxuICAgIGxldCBjb21wb25lbnRUeXBlID0gbFZpZXdbMV1bXCJ0eXBlXCJdO1xuICAgIGlmKGNvbXBvbmVudFR5cGUgPT09IDAgfHwgY29tcG9uZW50VHlwZSA9PT0gMSkge1xuICAgICAgICBsZXQgcCA9IGxWaWV3WzhdO1xuICAgICAgICAvLyB0cy1pZ25vcmVcbiAgICAgICAgaWYocC5oYXNPd25Qcm9wZXJ0eShcImlzRGlhbG9nQ29tcG9uZW50XCIpIHx8IHAuaGFzT3duUHJvcGVydHkoXCJpc0NvbnRhaW5lckRpcmVjdGl2ZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9Ki9cbn1cblxuLypleHBvcnQgY29uc3QgZ2V0UGFyZW50ID0gKHBhcmVudDogYW55KSA9PiB7XG4gICAgaWYocGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNEeW5hbWljQ29tcG9uZW50XCIpIHx8IHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzUGFnZUNvbXBvbmVudFwiKSkge1xuICAgICAgICByZXR1cm4gcGFyZW50XG4gICAgfSBlbHNle1xuICAgICAgICByZXR1cm4gcGFyZW50LnZpZXdQYXJlbnQgPyBnZXRQYXJlbnQocGFyZW50LnZpZXdQYXJlbnQpIDogcGFyZW50O1xuICAgIH1cblxufSovXG4iXX0=