@talrace/ngx-noder 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +15 -9
  2. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +8 -2
  3. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
  4. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +3 -3
  5. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +1 -8
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +2 -2
  7. package/esm2022/lib/editor/components/edges/edges.mjs +21 -2
  8. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +18 -1
  9. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +22 -56
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +6 -6
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +13 -4
  12. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +3 -4
  13. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +15 -5
  14. package/esm2022/lib/editor/content/constants/editor.const.mjs +9 -1
  15. package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
  16. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +1 -1
  17. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
  18. package/esm2022/lib/editor/content/display-data/paragraph.mjs +5 -1
  19. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +2 -1
  20. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +1 -1
  21. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +12 -30
  22. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
  23. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +9 -8
  24. package/esm2022/lib/editor/display/layers/pages.layer.mjs +5 -5
  25. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +2 -2
  26. package/esm2022/lib/editor/display/layers/selection.layer.mjs +15 -9
  27. package/esm2022/lib/editor/display/layers/text.layer.mjs +25 -27
  28. package/esm2022/lib/editor/display/print/print.renderer.mjs +8 -8
  29. package/esm2022/lib/editor/display/renderer.mjs +10 -10
  30. package/esm2022/lib/editor/display/rendering.helper.mjs +2 -4
  31. package/esm2022/lib/editor/display/virtual.renderer.mjs +5 -5
  32. package/esm2022/lib/editor/execution/edit.session.mjs +199 -755
  33. package/esm2022/lib/editor/execution/editor.mjs +116 -75
  34. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +1 -33
  35. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
  36. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +11 -3
  37. package/esm2022/lib/editor/execution/regulator.service.mjs +28 -20
  38. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
  39. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +77 -10
  40. package/esm2022/lib/editor/gadgets/search/search.mjs +6 -6
  41. package/esm2022/lib/editor/interaction/editor.service.mjs +27 -6
  42. package/esm2022/lib/editor/interaction/input.handler.mjs +8 -5
  43. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -1
  44. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +32 -2
  45. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +47 -12
  46. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +13 -14
  47. package/esm2022/lib/editor/operations/save-commands.helper.mjs +2 -2
  48. package/esm2022/lib/editor/positioning/content.helper.mjs +15 -15
  49. package/esm2022/lib/editor/positioning/line-width.helper.mjs +5 -5
  50. package/esm2022/lib/editor/positioning/position.helper.mjs +34 -32
  51. package/esm2022/lib/editor/positioning/selection.mjs +42 -32
  52. package/esm2022/lib/editor/revision.helper.mjs +4 -3
  53. package/fesm2022/talrace-ngx-noder.mjs +3765 -3548
  54. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  55. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +0 -1
  56. package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +0 -2
  57. package/lib/editor/components/image/input-handler/image-input.handler.d.ts +3 -0
  58. package/lib/editor/components/shared/services/custom-content.service.d.ts +3 -5
  59. package/lib/editor/components/table/components/table-cell.component.d.ts +1 -1
  60. package/lib/editor/components/table/components/table.component.d.ts +1 -0
  61. package/lib/editor/components/table/models/cell-data.model.d.ts +1 -1
  62. package/lib/editor/components/table/selection/table-selection.d.ts +2 -0
  63. package/lib/editor/content/constants/editor.const.d.ts +2 -0
  64. package/lib/editor/content/display-data/display-data.d.ts +103 -0
  65. package/lib/editor/content/display-data/general-properties.model.d.ts +5 -0
  66. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
  67. package/lib/editor/content/display-data/paragraph.d.ts +1 -0
  68. package/lib/editor/content/display-data/text-line-info.d.ts +1 -0
  69. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -1
  70. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -2
  71. package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
  72. package/lib/editor/display/layers/text.layer.d.ts +1 -2
  73. package/lib/editor/display/print/print.renderer.d.ts +0 -2
  74. package/lib/editor/execution/edit.session.d.ts +11 -59
  75. package/lib/editor/execution/editor.d.ts +9 -6
  76. package/lib/editor/execution/helpers/format-style.helper.d.ts +0 -2
  77. package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
  78. package/lib/editor/execution/regulator.service.d.ts +1 -1
  79. package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
  80. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +10 -3
  81. package/lib/editor/interaction/editor.service.d.ts +12 -3
  82. package/lib/editor/operations/helpers/link-operations.helper.d.ts +5 -3
  83. package/lib/editor/positioning/content.helper.d.ts +6 -5
  84. package/lib/editor/positioning/position.helper.d.ts +3 -3
  85. package/lib/editor/positioning/selection.d.ts +3 -0
  86. package/package.json +1 -1
  87. package/src/_ngx-noder.theme.scss +31 -2
  88. package/esm2022/lib/editor/content/display-data/document.mjs +0 -134
  89. package/esm2022/lib/editor/content/display-data/pages.wrap.mjs +0 -226
  90. package/esm2022/lib/editor/execution/helpers/delta.helper.mjs +0 -18
  91. package/lib/editor/content/display-data/document.d.ts +0 -56
  92. package/lib/editor/content/display-data/pages.wrap.d.ts +0 -42
  93. package/lib/editor/execution/helpers/delta.helper.d.ts +0 -6
@@ -3,7 +3,7 @@ import { ContentStyleHelper } from '../content/helpers/content-style.helper';
3
3
  import { DistanceModel } from '../execution/distance.model';
4
4
  import { DomHelper } from '../execution/helpers/dom.helper';
5
5
  import { FormatExtModel } from '../content/display-data/format-ext.model';
6
- import { HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, NEW_LINE_MARKUP } from '../content/constants/editor.const';
6
+ import { HYPERLINK_HEADING_STYLE_ID, NEW_LINE_MARKUP } from '../content/constants/editor.const';
7
7
  import { ScalingHelper } from '../content/helpers/scaling.helper';
8
8
  import { TextStyleModel } from '../../models/generated/text-style.model';
9
9
  export class RenderingHelper {
@@ -159,8 +159,6 @@ export class RenderingHelper {
159
159
  span.className = 'paragraph-symbol';
160
160
  }
161
161
  if (textStyle.headingStyleId === HYPERLINK_HEADING_STYLE_ID) {
162
- textStyle.fontColor = HYPERLINK_FONT_COLOR;
163
- textStyle.underline = true;
164
162
  span.classList.add('hyperlink');
165
163
  span.onmousemove = event => {
166
164
  if (event.ctrlKey) {
@@ -184,4 +182,4 @@ export class RenderingHelper {
184
182
  customContentService.componentService.attachComponent(fragment, component);
185
183
  }
186
184
  }
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmluZy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUd0SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLG1CQUEyQixFQUFFLFlBQW9CO1FBQzlGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFFaEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEcsTUFBTSxVQUFVLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sTUFBTSxDQUFDLDJCQUEyQixDQUN0QyxTQUF5QixFQUN6QiwwQkFBa0MsRUFDbEMsaUJBQWdDLEVBQ2hDLEtBQWEsRUFDYixjQUFzQjtRQUV0QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sQ0FDSCxJQUFJLENBQUMsR0FBRyxDQUNKLEtBQUssR0FBRyxjQUFjLElBQUksTUFBTSxDQUFDLFNBQVMsRUFDMUMsU0FBUyxFQUNULFNBQVMsQ0FBQyxRQUFRLEdBQUcsMEJBQTBCLEdBQUcsQ0FBQyxFQUNuRCxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDM0IsR0FBRyxDQUFDLENBQ1IsQ0FBQztJQUNOLENBQUM7SUFFUyxNQUFNLENBQUMsZUFBZSxDQUM1QixRQUEwQixFQUMxQixTQUFnQyxFQUNoQyxvQkFBMEM7UUFFMUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2JyZWFrLm1vZGVsJztcbmltcG9ydCB7IENvbnRlbnRTdHlsZUhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9jb250ZW50LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBDdXN0b21Db250ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL3NlcnZpY2VzL2N1c3RvbS1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdEV4dE1vZGVsIH0gZnJvbSAnLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZm9ybWF0LWV4dC5tb2RlbCc7XG5pbXBvcnQgeyBIWVBFUkxJTktfRk9OVF9DT0xPUiwgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsIE5FV19MSU5FX01BUktVUCB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBjcmVhdGVMaW5lRWxlbWVudChsaW5lSW5mbzogVGV4dExpbmVJbmZvLCBudW1iZXJpbmdPZmZzZXRMZWZ0OiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBsZXQgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAnbm9kZXItbGluZSc7XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IFNjYWxpbmdIZWxwZXIuc2NhbGUobGluZUluZm8ucGFkZGluZ0xlZnQgLSBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IHBhZGRpbmdMZWZ0IDwgMCA/IHBhZGRpbmdMZWZ0IDogMDtcblxuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgIGBwYWRkaW5nLWxlZnQ6JHtwYWRkaW5nTGVmdH1weDtoZWlnaHQ6JHtsaW5lSW5mby5oZWlnaHQgKyBsaW5lSW5mby5vZmZzZXRBZnRlcn1weDttYXJnaW4tdG9wOiR7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLm9mZnNldEJlZm9yZVxuICAgICAgICAgICAgICAgIH1weDttYXJnaW4tYm90dG9tOiR7bGluZUluZm8uZW5kUGFnZU9mZnNldH1weDttYXJnaW4tbGVmdDoke21hcmdpbkxlZnR9cHg7YmFja2dyb3VuZC1jb2xvcjoke2xpbmVJbmZvLmJhY2tncm91bmRDb2xvcn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZSgnc2NyZWVuLWluZGV4JywgYCR7bGluZUluZm8uc2NyZWVuTGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5lRWw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlckNvbnRlbnRTaW1wbGVMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBmb3JtYXRzRXh0OiBGb3JtYXRFeHRNb2RlbFtdLFxuICAgICAgICByb3dEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdEV4dCBvZiBmb3JtYXRzRXh0KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCA9IHJvd0Rpc3RhbmNlLnN0YXJ0ID4gZm9ybWF0RXh0LnN0YXJ0SW5kZXggPyByb3dEaXN0YW5jZS5zdGFydCA6IGZvcm1hdEV4dC5zdGFydEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIDogZm9ybWF0RXh0LmVuZEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gcm93RGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IHJvd0Rpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiBmb3JtYXRFeHQuZW5kSW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVuZGVyQ29udGVudFdyYXBwZWRMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBzcGxpdHM6IG51bWJlcltdLFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIGZvcm1hdHNFeHQ6IEZvcm1hdEV4dE1vZGVsW10sXG4gICAgICAgIGRpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzLFxuICAgICAgICBzY2FsaW5nUmF0aW86IG51bWJlcixcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ09mZnNldExlZnQgPVxuICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggKyBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQ7XG4gICAgICAgIGxldCBsaW5lRWwgPSBSZW5kZXJpbmdIZWxwZXIuY3JlYXRlTGluZUVsZW1lbnQoY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvW3NwbGl0SW5kZXhdLCBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICBkb21Db250ZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobGluZUVsKTtcblxuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoQ2hhcnMgPSAwO1xuICAgICAgICBsZXQgc3BsaXQgPSBzcGxpdHNbc3BsaXRJbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0RXh0IG9mIGZvcm1hdHNFeHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVNwbGl0SW5kZXggPSBzcGxpdCA/IHNwbGl0IC0gMSA6IGRpc3RhbmNlLmVuZCAtIGRpc3RhbmNlLnN0YXJ0O1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgKyBiZWZvcmVTcGxpdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggPSBkaXN0YW5jZS5zdGFydCArIHBhcmFncmFwaENoYXJzO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID8gZm9ybWF0RXh0LmVuZEluZGV4IDogYmVmb3JlU3BsaXREb2N1bWVudEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IGRpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4XG4gICAgICAgICAgICAgICAgICAgID8gZnJhZ21lbnRTdGFydEluZGV4ICsgZm9ybWF0RXh0LmVuZEluZGV4IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBkaXN0YW5jZS5zdGFydCArIGJlZm9yZVNwbGl0SW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHBhcmFncmFwaENoYXJzICs9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpbmVFbC5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGxldCBuZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gZnJhZ21lbnRFbmRJbmRleCArIDE7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoQ2hhcnMgPT09IHNwbGl0ICYmIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggIT09IGRpc3RhbmNlLmVuZCkge1xuICAgICAgICAgICAgICAgIHNwbGl0ID0gc3BsaXRzWysrc3BsaXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ID0gZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggKyBuZXh0RnJhZ21lbnRTdGFydEluZGV4IC0gZnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmVFbCA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVMaW5lRWxlbWVudChjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bc3BsaXRJbmRleF0sIG51bWJlcmluZ09mZnNldExlZnQsIHNjYWxpbmdSYXRpbyk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gZm9ybWF0RXh0LmVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBuZXh0RnJhZ21lbnRTdGFydEluZGV4LCBlbmQ6IG5leHRGcmFnbWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgbmV4dEZyYWdtZW50RW5kSW5kZXggLSBuZXh0RnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV4dEZyYWdtZW50RG9jdW1lbnRFbmRJbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hhcnMgKz0gdGhpcy5yZW5kZXJGb3JtYXRDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsaW5lRWwuYXBwZW5kQ2hpbGQodmFsdWVGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleExlbmd0aCA9IFJlbmRlcmluZ0hlbHBlci5nZXRUZXh0SW5kZXhMZW5ndGhGb3JJbnNlcnQoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENoYXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgdGV4dEluZGV4TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50U3RhcnRJbmRleCArIHRleHRJbmRleExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG5leHRGcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogbmV4dEZyYWdtZW50RW5kSW5kZXggfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDaGFycyA9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RXh0LFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGluZUVsLmFwcGVuZENoaWxkKHZhbHVlRnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggKz0gcmVuZGVyZWRDaGFycztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDaGFycyArPSByZW5kZXJlZENoYXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlck51bWJlcmluZ01hcmtlcihwYXJhZ3JhcGg6IFBhcmFncmFwaCwgbGF5ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc2NhbGluZ1JhdGlvOiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJrZXJMaW5lSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogbWFya2VySGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0QmVmb3JlOiAwLFxuICAgICAgICAgICAgZmlyc3RMaW5lUGFnZU9mZnNldDogMCxcbiAgICAgICAgICAgIGVuZFBhZ2VPZmZzZXQ6IDAsXG4gICAgICAgICAgICBvZmZzZXRBZnRlcjogMCxcbiAgICAgICAgICAgIHNjcmVlbkxpbmU6IDBcbiAgICAgICAgfSBhcyBUZXh0TGluZUluZm87XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xpbmVFbCA9IHRoaXMuY3JlYXRlTGluZUVsZW1lbnQobWFya2VyTGluZUluZm8sIDAsIHNjYWxpbmdSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgbWFya2VyRnJhZ21lbnQgPSBEb21IZWxwZXIuY3JlYXRlRnJhZ21lbnQobGF5ZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubWFya2VyO1xuICAgICAgICBjb25zdCBtYXJrZXJFeHRNb2RlbCA9IG5ldyBGb3JtYXRFeHRNb2RlbCh7XG4gICAgICAgICAgICB0ZXh0U3R5bGU6IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm1hcmtlclRleHRTdHlsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hcmtlclxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJUZXh0KG1hcmtlckZyYWdtZW50LCBtYXJrZXJFeHRNb2RlbCwgbWFya2VyKTtcbiAgICAgICAgbnVtYmVyaW5nTGluZUVsLmFwcGVuZENoaWxkKG1hcmtlckZyYWdtZW50KTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyaW5nTGluZUVsO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEaXZDb250YWluZXIoY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gICAgICAgIGZvcm1hdEV4dDogRm9ybWF0RXh0TW9kZWwsXG4gICAgICAgIGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgdGV4dEZyYWdtZW50ID0gZm9ybWF0RXh0LmNvbnRlbnQuc3Vic3RyaW5nKGZyYWdtZW50RGlzdGFuY2Uuc3RhcnQsIGZyYWdtZW50RGlzdGFuY2UuZW5kICsgMSk7XG4gICAgICAgIGlmICghdGV4dEZyYWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MgPSBCcmVha0hlbHBlci5yZW1vdmVCcmVha01hcmtlcihicmVha3MsIHRleHRGcmFnbWVudCwgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLnN0YXJ0KTtcblxuICAgICAgICBpZiAoY3VzdG9tQ29udGVudFNlcnZpY2UuaXNGcmFnbWVudENvbnRhaW5Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50cywgdGV4dEZyYWdtZW50LCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRXaXRoQ3VzdG9tQ29udGVudChcbiAgICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHRGcmFnbWVudC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyVGV4dFdpdGhDdXN0b21Db250ZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgZm9ybWF0RXh0OiBGb3JtYXRFeHRNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICB0ZXh0RnJhZ21lbnQ6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50c1xuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY3VzdG9tQ29udGVudFNlcnZpY2UuZ2V0Q29tcG9uZW50cyhjdXN0b21Db21wb25lbnRzLCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpO1xuXG4gICAgICAgIGlmICghY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCA9IGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZS5zdGFydDtcbiAgICAgICAgbGV0IG5leHRUZXh0RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZUVsZW1lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZygwLCBjb21wb25lbnQuaW5zdGFuY2UuaW5zZXJ0SW5kZXggLSBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4KTtcbiAgICAgICAgICAgIG5leHRUZXh0RnJhZ21lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZyh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxLCBuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCArICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggPyB0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxIDogMSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJpbmdIZWxwZXIucmVuZGVyVGV4dChmcmFnbWVudCwgZm9ybWF0RXh0LCB0ZXh0QmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQsIGN1c3RvbUNvbnRlbnRTZXJ2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgUmVuZGVyaW5nSGVscGVyLnJlbmRlclRleHQoZnJhZ21lbnQsIGZvcm1hdEV4dCwgbmV4dFRleHRGcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW5kZXJUZXh0KGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50LCBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLCB0ZXh0RnJhZ21lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBuZXcgVGV4dFN0eWxlTW9kZWwoeyAuLi5mb3JtYXRFeHQudGV4dFN0eWxlIH0pO1xuXG4gICAgICAgIGlmICh0ZXh0RnJhZ21lbnQgPT09IE5FV19MSU5FX01BUktVUCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAncGFyYWdyYXBoLXN5bWJvbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLmhlYWRpbmdTdHlsZUlkID09PSBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCkge1xuICAgICAgICAgICAgdGV4dFN0eWxlLmZvbnRDb2xvciA9IEhZUEVSTElOS19GT05UX0NPTE9SO1xuICAgICAgICAgICAgdGV4dFN0eWxlLnVuZGVybGluZSA9IHRydWU7XG4gICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoJ2h5cGVybGluaycpO1xuICAgICAgICAgICAgc3Bhbi5vbm1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoJ2h5cGVybGluay1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaHlwZXJsaW5rLWhvdmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNwYW4ub25tb3VzZWxlYXZlID0gKCkgPT4gc3Bhbi5jbGFzc0xpc3QucmVtb3ZlKCdoeXBlcmxpbmstaG92ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0ZXh0RnJhZ21lbnQ7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdzdHlsZScsIENvbnRlbnRTdHlsZUhlbHBlci5nZXRUZXh0U3R5bGVzU3RyaW5nKHRleHRTdHlsZSkpO1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRUZXh0SW5kZXhMZW5ndGhGb3JJbnNlcnQoXG4gICAgICAgIGZvcm1hdEV4dDogRm9ybWF0RXh0TW9kZWwsXG4gICAgICAgIGZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHBhcmFncmFwaERpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICBzcGxpdDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhDaGFyczogbnVtYmVyXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5tYXgocGFyYWdyYXBoRGlzdGFuY2UuZW5kIC0gcGFyYWdyYXBoQ2hhcnMgLSBwYXJhZ3JhcGhEaXN0YW5jZS5zdGFydCwgMCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBzcGxpdCAtIHBhcmFncmFwaENoYXJzIHx8IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dC5lbmRJbmRleCAtIGZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQuY29udGVudC5sZW5ndGhcbiAgICAgICAgICAgICkgLSAxXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBhdHRhY2hDb21wb25lbnQoXG4gICAgICAgIGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50LFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudFJlZjx1bmtub3duPixcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlLmNvbXBvbmVudFNlcnZpY2UuYXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQpO1xuICAgIH1cbn1cbiJdfQ==
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmluZy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLG1CQUEyQixFQUFFLFlBQW9CO1FBQzlGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFFaEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEcsTUFBTSxVQUFVLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckQsTUFBTSxDQUFDLFlBQVksQ0FDZixPQUFPO1lBQ1AsNkNBQTZDO1lBQzdDLGdCQUFnQixXQUFXLGFBQWEsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxpQkFDMUUsUUFBUSxDQUFDLFlBQ2Isb0JBQW9CLFFBQVEsQ0FBQyxhQUFhLGtCQUFrQixVQUFVLHVCQUF1QixRQUFRLENBQUMsZUFBZSxFQUFFLENBQzFILENBQUM7WUFDRixNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyx1QkFBdUIsQ0FDMUIsVUFBNkQsRUFDN0QsVUFBNEIsRUFDNUIsV0FBMEIsRUFDMUIsb0JBQTBDLEVBQzFDLGdCQUFtQyxFQUNuQyxTQUF1QixFQUFFO1FBRXpCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1lBQ2hDLE1BQU0sMEJBQTBCLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3ZILE1BQU0sd0JBQXdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQzdHLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUN6SCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkgsTUFBTSxnQkFBZ0IsR0FDbEIsU0FBUyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM5SCxNQUFNLGdCQUFnQixHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDakcsSUFBSSxDQUFDLG1CQUFtQixDQUNwQixhQUFhLEVBQ2IsU0FBUyxFQUNULHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixNQUFNLENBQ1QsQ0FBQztTQUNMO1FBRUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELE1BQU0sQ0FBQyx3QkFBd0IsQ0FDM0IsVUFBNkQsRUFDN0QsTUFBZ0IsRUFDaEIsZ0JBQTJCLEVBQzNCLFVBQTRCLEVBQzVCLFFBQXVCLEVBQ3ZCLG9CQUEwQyxFQUMxQyxnQkFBbUMsRUFDbkMsWUFBb0IsRUFDcEIsU0FBdUIsRUFBRTtRQUV6QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxtQkFBbUIsR0FDckIsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUM1RixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlILFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7WUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMzRSxNQUFNLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7WUFDbkUsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUNuRSxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1lBQy9ILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUN6SCxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0csTUFBTSxnQkFBZ0IsR0FDbEIsU0FBUyxDQUFDLFFBQVEsR0FBRyx3QkFBd0I7Z0JBQ3pDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVO2dCQUNoRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUNqRyxjQUFjLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUN0QyxhQUFhLEVBQ2IsU0FBUyxFQUNULHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixNQUFNLENBQ1QsQ0FBQztZQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEMsSUFBSSxzQkFBc0IsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDbEQsT0FBTyxjQUFjLEtBQUssS0FBSyxJQUFJLHNCQUFzQixLQUFLLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hFLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDN0IsTUFBTSw4QkFBOEIsR0FBRywwQkFBMEIsR0FBRyxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQztnQkFDaEgsTUFBTSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzFILElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUU7b0JBQzVCLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLG9CQUFvQixHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7b0JBQzdHLE1BQU0sNEJBQTRCLEdBQUcsOEJBQThCLEdBQUcsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7b0JBQ3BILE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxhQUFhLENBQUM7d0JBQ25ELEtBQUssRUFBRSw4QkFBOEI7d0JBQ3JDLEdBQUcsRUFBRSw0QkFBNEI7cUJBQ3BDLENBQUMsQ0FBQztvQkFDSCxjQUFjLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUN0QyxhQUFhLEVBQ2IsU0FBUyxFQUNULDRCQUE0QixFQUM1QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixNQUFNLENBQ1QsQ0FBQztvQkFDRixNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNsQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFMUMsTUFBTTtpQkFDVDtnQkFFRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsMkJBQTJCLENBQy9ELFNBQVMsRUFDVCw4QkFBOEIsRUFDOUIsUUFBUSxFQUNSLEtBQUssRUFDTCxjQUFjLENBQ2pCLENBQUM7Z0JBQ0YsTUFBTSw0QkFBNEIsR0FBRyw4QkFBOEIsR0FBRyxlQUFlLENBQUM7Z0JBQ3RGLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLEdBQUcsZUFBZSxDQUFDO2dCQUN0RSxNQUFNLG9CQUFvQixHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7Z0JBQzdHLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxhQUFhLENBQUM7b0JBQ25ELEtBQUssRUFBRSw4QkFBOEI7b0JBQ3JDLEdBQUcsRUFBRSw0QkFBNEI7aUJBQ3BDLENBQUMsQ0FBQztnQkFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQzFDLGFBQWEsRUFDYixTQUFTLEVBQ1QsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLE1BQU0sQ0FDVCxDQUFDO2dCQUNGLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxzQkFBc0IsSUFBSSxhQUFhLENBQUM7Z0JBQ3hDLGNBQWMsSUFBSSxhQUFhLENBQUM7YUFDbkM7U0FDSjtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBb0IsRUFBRSxZQUF5QixFQUFFLFlBQW9CO1FBQzlGLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRXBELE1BQU0sY0FBYyxHQUFHO1lBQ25CLFdBQVcsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDaEQsTUFBTSxFQUFFLFlBQVk7WUFDcEIsWUFBWSxFQUFFLENBQUM7WUFDZixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsVUFBVSxFQUFFLENBQUM7U0FDQSxDQUFDO1FBQ2xCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWhGLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUM7WUFDdEMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1QyxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBRXZDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDOUIsUUFBMEIsRUFDMUIsU0FBeUIsRUFDekIsd0JBQXVDLEVBQ3ZDLGdCQUErQixFQUMvQixvQkFBMEMsRUFDMUMsZ0JBQW1DLEVBQ25DLE1BQW9CO1FBRXBCLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxNQUFNLHlCQUF5QixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRILElBQUksb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixDQUFDLEVBQUU7WUFDM0csSUFBSSxDQUFDLDJCQUEyQixDQUM1QixRQUFRLEVBQ1IsU0FBUyxFQUNULHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLGdCQUFnQixDQUNuQixDQUFDO1NBQ0w7YUFBTTtZQUNILGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFTyxNQUFNLENBQUMsMkJBQTJCLENBQ3RDLFFBQTBCLEVBQzFCLFNBQXlCLEVBQ3pCLHdCQUF1QyxFQUN2QyxZQUFvQixFQUNwQixvQkFBMEMsRUFDMUMsZ0JBQW1DO1FBRW5DLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBRWxHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3BCLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5RCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLHlCQUF5QixHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQztRQUMvRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQztRQUVwQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNoQyxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcseUJBQXlCLENBQUMsQ0FBQztZQUNwSCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRyx5QkFBeUIsR0FBRyx5QkFBeUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEgsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFCLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3RFO1lBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7U0FDbkU7UUFFRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUN6QixlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUNyRTtJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQTBCLEVBQUUsU0FBeUIsRUFBRSxZQUFvQjtRQUNqRyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVqRSxJQUFJLFlBQVksS0FBSyxlQUFlLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztTQUN2QztRQUVELElBQUksU0FBUyxDQUFDLGNBQWMsS0FBSywwQkFBMEIsRUFBRTtZQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDekM7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDNUM7WUFDTCxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDdEU7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLE1BQU0sQ0FBQywyQkFBMkIsQ0FDdEMsU0FBeUIsRUFDekIsMEJBQWtDLEVBQ2xDLGlCQUFnQyxFQUNoQyxLQUFhLEVBQ2IsY0FBc0I7UUFFdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxPQUFPLENBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FDSixLQUFLLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQzFDLFNBQVMsRUFDVCxTQUFTLENBQUMsUUFBUSxHQUFHLDBCQUEwQixHQUFHLENBQUMsRUFDbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQzNCLEdBQUcsQ0FBQyxDQUNSLENBQUM7SUFDTixDQUFDO0lBRVMsTUFBTSxDQUFDLGVBQWUsQ0FDNUIsUUFBMEIsRUFDMUIsU0FBZ0MsRUFDaEMsb0JBQTBDO1FBRTFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0UsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJyZWFrSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9wYWdlLWJyZWFrL2JyZWFrLmhlbHBlcic7XG5pbXBvcnQgeyBCcmVha01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9icmVhay5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9zZXJ2aWNlcy9jdXN0b20tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBGb3JtYXRFeHRNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Zvcm1hdC1leHQubW9kZWwnO1xuaW1wb3J0IHsgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsIE5FV19MSU5FX01BUktVUCB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBjcmVhdGVMaW5lRWxlbWVudChsaW5lSW5mbzogVGV4dExpbmVJbmZvLCBudW1iZXJpbmdPZmZzZXRMZWZ0OiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBsZXQgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAnbm9kZXItbGluZSc7XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IFNjYWxpbmdIZWxwZXIuc2NhbGUobGluZUluZm8ucGFkZGluZ0xlZnQgLSBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IHBhZGRpbmdMZWZ0IDwgMCA/IHBhZGRpbmdMZWZ0IDogMDtcblxuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgIGBwYWRkaW5nLWxlZnQ6JHtwYWRkaW5nTGVmdH1weDtoZWlnaHQ6JHtsaW5lSW5mby5oZWlnaHQgKyBsaW5lSW5mby5vZmZzZXRBZnRlcn1weDttYXJnaW4tdG9wOiR7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLm9mZnNldEJlZm9yZVxuICAgICAgICAgICAgICAgIH1weDttYXJnaW4tYm90dG9tOiR7bGluZUluZm8uZW5kUGFnZU9mZnNldH1weDttYXJnaW4tbGVmdDoke21hcmdpbkxlZnR9cHg7YmFja2dyb3VuZC1jb2xvcjoke2xpbmVJbmZvLmJhY2tncm91bmRDb2xvcn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZSgnc2NyZWVuLWluZGV4JywgYCR7bGluZUluZm8uc2NyZWVuTGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5lRWw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlckNvbnRlbnRTaW1wbGVMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBmb3JtYXRzRXh0OiBGb3JtYXRFeHRNb2RlbFtdLFxuICAgICAgICByb3dEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdEV4dCBvZiBmb3JtYXRzRXh0KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCA9IHJvd0Rpc3RhbmNlLnN0YXJ0ID4gZm9ybWF0RXh0LnN0YXJ0SW5kZXggPyByb3dEaXN0YW5jZS5zdGFydCA6IGZvcm1hdEV4dC5zdGFydEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIDogZm9ybWF0RXh0LmVuZEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gcm93RGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IHJvd0Rpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiBmb3JtYXRFeHQuZW5kSW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVuZGVyQ29udGVudFdyYXBwZWRMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBzcGxpdHM6IG51bWJlcltdLFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIGZvcm1hdHNFeHQ6IEZvcm1hdEV4dE1vZGVsW10sXG4gICAgICAgIGRpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzLFxuICAgICAgICBzY2FsaW5nUmF0aW86IG51bWJlcixcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ09mZnNldExlZnQgPVxuICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggKyBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQ7XG4gICAgICAgIGxldCBsaW5lRWwgPSBSZW5kZXJpbmdIZWxwZXIuY3JlYXRlTGluZUVsZW1lbnQoY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvW3NwbGl0SW5kZXhdLCBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICBkb21Db250ZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobGluZUVsKTtcblxuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoQ2hhcnMgPSAwO1xuICAgICAgICBsZXQgc3BsaXQgPSBzcGxpdHNbc3BsaXRJbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0RXh0IG9mIGZvcm1hdHNFeHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVNwbGl0SW5kZXggPSBzcGxpdCA/IHNwbGl0IC0gMSA6IGRpc3RhbmNlLmVuZCAtIGRpc3RhbmNlLnN0YXJ0O1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgKyBiZWZvcmVTcGxpdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggPSBkaXN0YW5jZS5zdGFydCArIHBhcmFncmFwaENoYXJzO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID8gZm9ybWF0RXh0LmVuZEluZGV4IDogYmVmb3JlU3BsaXREb2N1bWVudEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IGRpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4XG4gICAgICAgICAgICAgICAgICAgID8gZnJhZ21lbnRTdGFydEluZGV4ICsgZm9ybWF0RXh0LmVuZEluZGV4IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBkaXN0YW5jZS5zdGFydCArIGJlZm9yZVNwbGl0SW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHBhcmFncmFwaENoYXJzICs9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpbmVFbC5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGxldCBuZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gZnJhZ21lbnRFbmRJbmRleCArIDE7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoQ2hhcnMgPT09IHNwbGl0ICYmIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggIT09IGRpc3RhbmNlLmVuZCkge1xuICAgICAgICAgICAgICAgIHNwbGl0ID0gc3BsaXRzWysrc3BsaXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ID0gZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggKyBuZXh0RnJhZ21lbnRTdGFydEluZGV4IC0gZnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmVFbCA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVMaW5lRWxlbWVudChjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bc3BsaXRJbmRleF0sIG51bWJlcmluZ09mZnNldExlZnQsIHNjYWxpbmdSYXRpbyk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gZm9ybWF0RXh0LmVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBuZXh0RnJhZ21lbnRTdGFydEluZGV4LCBlbmQ6IG5leHRGcmFnbWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgbmV4dEZyYWdtZW50RW5kSW5kZXggLSBuZXh0RnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV4dEZyYWdtZW50RG9jdW1lbnRFbmRJbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hhcnMgKz0gdGhpcy5yZW5kZXJGb3JtYXRDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsaW5lRWwuYXBwZW5kQ2hpbGQodmFsdWVGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleExlbmd0aCA9IFJlbmRlcmluZ0hlbHBlci5nZXRUZXh0SW5kZXhMZW5ndGhGb3JJbnNlcnQoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENoYXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgdGV4dEluZGV4TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50U3RhcnRJbmRleCArIHRleHRJbmRleExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG5leHRGcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogbmV4dEZyYWdtZW50RW5kSW5kZXggfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDaGFycyA9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RXh0LFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGluZUVsLmFwcGVuZENoaWxkKHZhbHVlRnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggKz0gcmVuZGVyZWRDaGFycztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDaGFycyArPSByZW5kZXJlZENoYXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlck51bWJlcmluZ01hcmtlcihwYXJhZ3JhcGg6IFBhcmFncmFwaCwgbGF5ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc2NhbGluZ1JhdGlvOiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJrZXJMaW5lSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogbWFya2VySGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0QmVmb3JlOiAwLFxuICAgICAgICAgICAgZmlyc3RMaW5lUGFnZU9mZnNldDogMCxcbiAgICAgICAgICAgIGVuZFBhZ2VPZmZzZXQ6IDAsXG4gICAgICAgICAgICBvZmZzZXRBZnRlcjogMCxcbiAgICAgICAgICAgIHNjcmVlbkxpbmU6IDBcbiAgICAgICAgfSBhcyBUZXh0TGluZUluZm87XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xpbmVFbCA9IHRoaXMuY3JlYXRlTGluZUVsZW1lbnQobWFya2VyTGluZUluZm8sIDAsIHNjYWxpbmdSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgbWFya2VyRnJhZ21lbnQgPSBEb21IZWxwZXIuY3JlYXRlRnJhZ21lbnQobGF5ZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubWFya2VyO1xuICAgICAgICBjb25zdCBtYXJrZXJFeHRNb2RlbCA9IG5ldyBGb3JtYXRFeHRNb2RlbCh7XG4gICAgICAgICAgICB0ZXh0U3R5bGU6IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm1hcmtlclRleHRTdHlsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hcmtlclxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJUZXh0KG1hcmtlckZyYWdtZW50LCBtYXJrZXJFeHRNb2RlbCwgbWFya2VyKTtcbiAgICAgICAgbnVtYmVyaW5nTGluZUVsLmFwcGVuZENoaWxkKG1hcmtlckZyYWdtZW50KTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyaW5nTGluZUVsO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEaXZDb250YWluZXIoY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gICAgICAgIGZvcm1hdEV4dDogRm9ybWF0RXh0TW9kZWwsXG4gICAgICAgIGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgdGV4dEZyYWdtZW50ID0gZm9ybWF0RXh0LmNvbnRlbnQuc3Vic3RyaW5nKGZyYWdtZW50RGlzdGFuY2Uuc3RhcnQsIGZyYWdtZW50RGlzdGFuY2UuZW5kICsgMSk7XG4gICAgICAgIGlmICghdGV4dEZyYWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MgPSBCcmVha0hlbHBlci5yZW1vdmVCcmVha01hcmtlcihicmVha3MsIHRleHRGcmFnbWVudCwgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLnN0YXJ0KTtcblxuICAgICAgICBpZiAoY3VzdG9tQ29udGVudFNlcnZpY2UuaXNGcmFnbWVudENvbnRhaW5Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50cywgdGV4dEZyYWdtZW50LCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRXaXRoQ3VzdG9tQ29udGVudChcbiAgICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHRGcmFnbWVudC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyVGV4dFdpdGhDdXN0b21Db250ZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgZm9ybWF0RXh0OiBGb3JtYXRFeHRNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICB0ZXh0RnJhZ21lbnQ6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50c1xuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY3VzdG9tQ29udGVudFNlcnZpY2UuZ2V0Q29tcG9uZW50cyhjdXN0b21Db21wb25lbnRzLCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpO1xuXG4gICAgICAgIGlmICghY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCA9IGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZS5zdGFydDtcbiAgICAgICAgbGV0IG5leHRUZXh0RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZUVsZW1lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZygwLCBjb21wb25lbnQuaW5zdGFuY2UuaW5zZXJ0SW5kZXggLSBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4KTtcbiAgICAgICAgICAgIG5leHRUZXh0RnJhZ21lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZyh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxLCBuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCArICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggPyB0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxIDogMSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJpbmdIZWxwZXIucmVuZGVyVGV4dChmcmFnbWVudCwgZm9ybWF0RXh0LCB0ZXh0QmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQsIGN1c3RvbUNvbnRlbnRTZXJ2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgUmVuZGVyaW5nSGVscGVyLnJlbmRlclRleHQoZnJhZ21lbnQsIGZvcm1hdEV4dCwgbmV4dFRleHRGcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW5kZXJUZXh0KGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50LCBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLCB0ZXh0RnJhZ21lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBuZXcgVGV4dFN0eWxlTW9kZWwoeyAuLi5mb3JtYXRFeHQudGV4dFN0eWxlIH0pO1xuXG4gICAgICAgIGlmICh0ZXh0RnJhZ21lbnQgPT09IE5FV19MSU5FX01BUktVUCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAncGFyYWdyYXBoLXN5bWJvbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLmhlYWRpbmdTdHlsZUlkID09PSBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmsnKTtcbiAgICAgICAgICAgIHNwYW4ub25tb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmstaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ2h5cGVybGluay1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzcGFuLm9ubW91c2VsZWF2ZSA9ICgpID0+IHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaHlwZXJsaW5rLWhvdmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGV4dEZyYWdtZW50O1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBDb250ZW50U3R5bGVIZWxwZXIuZ2V0VGV4dFN0eWxlc1N0cmluZyh0ZXh0U3R5bGUpKTtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGV4dEluZGV4TGVuZ3RoRm9ySW5zZXJ0KFxuICAgICAgICBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLFxuICAgICAgICBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgc3BsaXQ6IG51bWJlcixcbiAgICAgICAgcGFyYWdyYXBoQ2hhcnM6IG51bWJlclxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KHBhcmFncmFwaERpc3RhbmNlLmVuZCAtIHBhcmFncmFwaENoYXJzIC0gcGFyYWdyYXBoRGlzdGFuY2Uuc3RhcnQsIDApO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgc3BsaXQgLSBwYXJhZ3JhcGhDaGFycyB8fCBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQuZW5kSW5kZXggLSBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgICApIC0gMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgYXR0YWNoQ29tcG9uZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlOiBDdXN0b21Db250ZW50U2VydmljZVxuICAgICk6IHZvaWQge1xuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZS5jb21wb25lbnRTZXJ2aWNlLmF0dGFjaENvbXBvbmVudChmcmFnbWVudCwgY29tcG9uZW50KTtcbiAgICB9XG59XG4iXX0=
@@ -219,9 +219,9 @@ export class VirtualRenderer {
219
219
  this.scrollSubscription?.unsubscribe();
220
220
  }
221
221
  computeLayerConfig() {
222
- const pagesWrap = this.renderer.session.pagesWrap;
223
- const maxHeight = pagesWrap.allPagesHeight;
224
- const minHeight = pagesWrap.minHeight;
222
+ const displayData = this.renderer.session.displayData;
223
+ const maxHeight = displayData.allPagesHeight;
224
+ const minHeight = displayData.minHeight;
225
225
  const scrollHidden = maxHeight < this.size.scrollerHeight;
226
226
  const newScrollTop = Math.max(Math.min(this.scrollBar.scrollTop, maxHeight - this.size.scrollerHeight), 0);
227
227
  this.scrollBar.setScrollHeight(maxHeight);
@@ -235,7 +235,7 @@ export class VirtualRenderer {
235
235
  const changes = scrollChanged
236
236
  ? this.updateCachedSize(true, this.size.width, this.size.height)
237
237
  : new RenderChangesModel({ scroll: true });
238
- const visibleRange = pagesWrap.getVisibleRange(this.scrollBar.scrollTop, this.size.scrollerHeight);
238
+ const visibleRange = displayData.getVisibleRange(this.scrollBar.scrollTop, this.size.scrollerHeight);
239
239
  this.layerConfig = {
240
240
  width: this.renderer.textLayer.element.clientWidth,
241
241
  height: this.size.scrollerHeight,
@@ -314,4 +314,4 @@ export class VirtualRenderer {
314
314
  };
315
315
  }
316
316
  }
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC5yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3ZpcnR1YWwucmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzFDLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLEdBQVk7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFlO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMs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UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsT0FBTztZQUNILEtBQUssRUFBRSxDQUFDO1lBQ1IsWUFBWSxFQUFFLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckQsU0FBUyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsQ0FBQztZQUNaLEtBQUssRUFBRSxFQUFFO1lBQ1QsWUFBWSxFQUFFO2dCQUNWLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixTQUFTLEVBQUUsQ0FBQztnQkFDWixlQUFlLEVBQUUsQ0FBQztnQkFDbEIsbUJBQW1CLEVBQUUsQ0FBQztnQkFDdEIsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGlCQUFpQixFQUFFLENBQUM7YUFDdkI7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEN1cnNvckxheWVyIH0gZnJvbSAnLi9sYXllcnMvY3Vyc29yLmxheWVyJztcbmltcG9ydCB7IEN1cnNvclBhcmFncmFwaCB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllcnMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBhZ2VzTGF5ZXIgfSBmcm9tICcuL2xheWVycy9wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3JhbmdlJztcbmltcG9ydCB7IFJlbmRlckNoYW5nZXNNb2RlbCB9IGZyb20gJy4vcmVuZGVyLWNoYW5nZXMubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7IFJlbmRlckxvb3AgfSBmcm9tICcuL3JlbmRlcmxvb3AnO1xuaW1wb3J0IHsgU2Nyb2xsQmFyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zY3JvbGxiYXInO1xuXG5leHBvcnQgY2xhc3MgVmlydHVhbFJlbmRlcmVyIHtcbiAgICBnZXQgaXNNb3VzZVByZXNzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmlzTW91c2VQcmVzc2VkO1xuICAgIH1cbiAgICBzZXQgaXNNb3VzZVByZXNzZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaXNNb3VzZVByZXNzZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnNvckxheWVyKCk6IEN1cnNvckxheWVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXI7XG4gICAgfVxuXG4gICAgZ2V0IGxvb3AoKTogUmVuZGVyTG9vcCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxvb3A7XG4gICAgfVxuICAgIHNldCBsb29wKHZhbDogUmVuZGVyTG9vcCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxvb3AgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHRleHRhcmVhKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIudGV4dGFyZWE7XG4gICAgfVxuICAgIHNldCB0ZXh0YXJlYSh2YWw6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudGV4dGFyZWEgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IGxheWVyQ29uZmlnKCk6IElMYXllckNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgIH1cbiAgICBzZXQgbGF5ZXJDb25maWcodmFsOiBJTGF5ZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sYXllckNvbmZpZyA9IHZhbDtcbiAgICB9XG5cbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgc2Nyb2xsZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgcGFnZXNMYXllcjogUGFnZXNMYXllcjtcblxuICAgIGNhblNjcm9sbDogYm9vbGVhbjtcblxuICAgIHJlbmRlcmVyITogUmVuZGVyZXI7XG5cbiAgICBjaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgc2Nyb2xsZXJIZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbGVyV2lkdGg6IDAsXG4gICAgICAgIGRpcnR5OiB0cnVlXG4gICAgfTtcblxuICAgIHByaXZhdGUgc2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50LCBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLCBtYWluU2Vzc2lvbjogRWRpdFNlc3Npb24sIHB1YmxpYyBzY3JvbGxCYXI6IFNjcm9sbEJhcikge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHBhcmVudENvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxlcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHBhcmVudENvbnRhaW5lciwgZWRpdG9yU2VydmljZSwgbWFpblNlc3Npb24pO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKTtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyID0gbmV3IFBhZ2VzTGF5ZXIodGhpcy5yZW5kZXJlci5jb250ZW50LCBtYWluU2Vzc2lvbik7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxCYXIuc2Nyb2xsZWQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvb3Auc2NoZWR1bGUoeyBzY3JvbGw6IHRydWUgfSkpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlbmRlckxvb3AoKTtcbiAgICB9XG5cbiAgICByZW5kZXJDaGFuZ2VzKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGggfHwgKCFjaGFuZ2VzLmFueSAmJiAhZm9yY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuYXBwbHkoY2hhbmdlcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNpemUuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5hcHBseShjaGFuZ2VzKTtcbiAgICAgICAgICAgIHRoaXMub25SZXNpemUodHJ1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQsIHNjcm9sbGluZyBhbmQgcmVzaXplIGNoYW5nZXMgY2FuIGNhdXNlIHRoZSB2aWV3IHBvcnQgc2l6ZSB0byBjaGFuZ2VcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCB8fCBjaGFuZ2VzLnNpemUgfHwgY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKSk7XG5cbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5yZW5kZXJlci5jb250ZW50LCAwLCAtdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpO1xuXG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5yZW5kZXJlci5jb250ZW50LnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLmxheWVyQ29uZmlnLndpZHRofXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5yZW5kZXJlci5jb250ZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5sYXllckNvbmZpZy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZ1bGxcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJGdWxsKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNjcm9sbGluZ1xuICAgICAgICBpZiAoY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU2Nyb2xsKGNoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGV4dCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5jdXJzb3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ3Vyc29yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5tYXJrZXIgfHwgY2hhbmdlcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHJlc2l6ZSBvZiB0aGUgZWRpdG9yXG4gICAgICoqL1xuICAgIG9uUmVzaXplKGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IHRoaXMuY29udGFpbmVyLnNjcm9sbFdpZHRoO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy51cGRhdGVDYWNoZWRTaXplKGZvcmNlLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2hhbmdlcy5hcHBseSh0aGlzLmNoYW5nZXMpO1xuXG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDaGFuZ2VzKGNoYW5nZXMsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmcm9tIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgdHdvIHBhcmFtZXRlcnMuXG4gICAgICoqL1xuICAgIHVwZGF0ZUxpbmVzKGZpcnN0Um93OiBudW1iZXIsIGxhc3RSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9XG5cbiAgICB1cGRhdGVDYWNoZWRTaXplKGZvcmNlOiBib29sZWFuLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IFJlbmRlckNoYW5nZXNNb2RlbCB7XG4gICAgICAgIGlmICh3aWR0aCAmJiAoZm9yY2UgfHwgdGhpcy5zaXplLndpZHRoICE9PSB3aWR0aCkpIHtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCAnbGVmdCcsIDApO1xuICAgICAgICAgICAgdGhpcy5zaXplLnNjcm9sbGVyV2lkdGggPSBNYXRoLm1heCgwLCB0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gdGhpcy5zY3JvbGxCYXIud2lkdGgpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsICdyaWdodCcsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG4gICAgICAgIGlmIChoZWlnaHQgJiYgKGZvcmNlIHx8IHRoaXMuc2l6ZS5oZWlnaHQgIT09IGhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICBjaGFuZ2VzLnNpemUgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnNpemUuc2Nyb2xsZXJIZWlnaHQgPSB0aGlzLnNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgY2hhbmdlcy5zY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnNpemUud2lkdGggIT09IHdpZHRoKSkge1xuICAgICAgICAgICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICBjaGFuZ2VzLnNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaXplLmRpcnR5ID0gIXdpZHRoIHx8ICFoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgbW92ZVRleHRBcmVhVG9DdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTW91c2VQcmVzc2VkIHx8ICF0aGlzLnRleHRhcmVhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3Vyc29yUG9zaXRpb24gPSB0aGlzLmN1cnNvckxheWVyLmN1cnNvclBvc2l0aW9uO1xuICAgICAgICBpZiAoIWN1cnNvclBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NUb3AgPSBjdXJzb3JQb3NpdGlvbi5wYWdlWSAtIHRoaXMubGF5ZXJDb25maWcub2Zmc2V0O1xuICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiB0aGlzLmxheWVyQ29uZmlnLmhlaWdodCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLnRleHRhcmVhLCAwLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnRleHRhcmVhLnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5yZW5kZXJlci50ZXh0YXJlYVNpemUuaGVpZ2h0fXB4YCk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnRleHRhcmVhLnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLnJlbmRlcmVyLnRleHRhcmVhU2l6ZS53aWR0aH1weGApO1xuICAgICAgICBEb21IZWxwZXIudHJhbnNsYXRlKFxuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYSxcbiAgICAgICAgICAgIE1hdGgubWluKGN1cnNvclBvc2l0aW9uLnBhZ2VYLCB0aGlzLnNpemUuc2Nyb2xsZXJXaWR0aCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLndpZHRoKSxcbiAgICAgICAgICAgIE1hdGgubWluKHBvc1RvcCwgdGhpcy5zaXplLmhlaWdodCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLmhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3Rpb24ocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHJhbmdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIGFsbCB0aGUgbGF5ZXJzLCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVGdWxsKGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoZm9yY2UpO1xuICAgIH1cblxuICAgIHVwZGF0ZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBzY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhhbmNob3I6IEN1cnNvclBhcmFncmFwaCwgbGVhZDogQ3Vyc29yUGFyYWdyYXBoLCBvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gZmlyc3Qgc2Nyb2xsIGFuY2hvciBpbnRvIHZpZXcgdGhlbiBzY3JvbGwgbGVhZCBpbnRvIHZpZXdcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyhhbmNob3IsIG9mZnNldCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobGVhZCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRoZSBjdXJzb3IgaW50byB0aGUgZmlyc3QgdmlzaWJpbGUgYXJlYSBvZiB0aGUgZWRpdG9yXG4gICAgICoqL1xuICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGN1cnNvcj86IEN1cnNvclBhcmFncmFwaCwgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaXplLnNjcm9sbGVySGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihjdXJzb3IpO1xuICAgICAgICBsZXQgdG9wID0gcG9zaXRpb24ucGFnZVkgKyB0aGlzLnNjcm9sbEJhci5zY3JvbGxUb3A7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCA+IHRvcCkge1xuICAgICAgICAgICAgaWYgKG9mZnNldCkge1xuICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZzZXQgKiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCArIHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodCA8IHRvcCArIHBvc2l0aW9uLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0b3AgKz0gb2Zmc2V0ICogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3AgKz0gcG9zaXRpb24ubGluZUhlaWdodCAtIHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsQnkoZGVsdGFZOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkZWx0YVkgfHwgIXRoaXMuc2Nyb2xsQmFyLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxCYXIuc2Nyb2xsVG9wICsgZGVsdGFZO1xuICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHg6IG51bWJlciwgeTogbnVtYmVyKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoeCwgeSk7XG4gICAgfVxuXG4gICAgc2hvd0N1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7XG4gICAgfVxuXG4gICAgaGlkZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQodGhpcy5zY3JvbGxCYXIuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucGFnZXNMYXllci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVMYXllckNvbmZpZygpOiBSZW5kZXJDaGFuZ2VzTW9kZWwge1xuICAgICAgICBjb25zdCBwYWdlc1dyYXAgPSB0aGlzLnJlbmRlcmVyLnNlc3Npb24ucGFnZXNXcmFwO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBwYWdlc1dyYXAuYWxsUGFnZXNIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHBhZ2VzV3JhcC5taW5IZWlnaHQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbEhpZGRlbiA9IG1heEhlaWdodCA8IHRoaXMuc2l6ZS5zY3JvbGxlckhlaWdodDtcblxuICAgICAgICBjb25zdCBuZXdTY3JvbGxUb3AgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLnNjcm9sbEJhci5zY3JvbGxUb3AsIG1heEhlaWdodCAtIHRoaXMuc2l6ZS5zY3JvbGxlckhlaWdodCksIDApO1xuICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRTY3JvbGxIZWlnaHQobWF4SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0U2Nyb2xsVG9wKG5ld1Njcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3QgY2FuU2Nyb2xsID0gIXNjcm9sbEhpZGRlbiAmJiB0aGlzLnNpemUuc2Nyb2xsZXJIZWlnaHQgLSBtYXhIZWlnaHQgPCAwO1xuICAgICAgICBjb25zdCBzY3JvbGxDaGFuZ2VkID0gdGhpcy5jYW5TY3JvbGwgIT09IGNhblNjcm9sbDtcbiAgICAgICAgaWYgKHNjcm9sbENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2Nyb2xsID0gY2FuU2Nyb2xsO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXIuc2V0VmlzaWJsZShjYW5TY3JvbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHNjcm9sbENoYW5nZWRcbiAgICAgICAgICAgID8gdGhpcy51cGRhdGVDYWNoZWRTaXplKHRydWUsIHRoaXMuc2l6ZS53aWR0aCwgdGhpcy5zaXplLmhlaWdodClcbiAgICAgICAgICAgIDogbmV3IFJlbmRlckNoYW5nZXNNb2RlbCh7IHNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVJhbmdlID0gcGFnZXNXcmFwLmdldFZpc2libGVSYW5nZSh0aGlzLnNjcm9sbEJhci5zY3JvbGxUb3AsIHRoaXMuc2l6ZS5zY3JvbGxlckhlaWdodCk7XG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcgPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy5yZW5kZXJlci50ZXh0TGF5ZXIuZWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5zaXplLnNjcm9sbGVySGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiB2aXNpYmxlUmFuZ2Uuc3RhcnRQYXJhZ3JhcGgsIGVuZDogdmlzaWJsZVJhbmdlLmVuZFBhcmFncmFwaCB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHZpc2libGVSYW5nZSxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogdGhpcy5zY3JvbGxCYXIuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgcGFnZXM6IHZpc2libGVSYW5nZS5wYWdlc1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2Nyb2xsZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSAnbm9kZXItc2Nyb2xsZXInO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJlbmRlckxvb3AoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9vcCA9IG5ldyBSZW5kZXJMb29wKGNoYW5nZXMgPT4gdGhpcy5yZW5kZXJDaGFuZ2VzKGNoYW5nZXMpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sb29wID0gdGhpcy5sb29wO1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBmdWxsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyU2Nyb2xsKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2VzTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICBpZiAoY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudGV4dExheWVyLnVwZGF0ZUVkZ2VzKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0TGF5ZXIudXBkYXRlTGluZXModGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnRleHRMYXllci5zY3JvbGxQYWdlcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudGV4dExheWVyLnNjcm9sbExpbmVzKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3Rpb25MYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJlci5jdXJzb3JMYXllci5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLm1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJGdWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2VzTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnRleHRMYXllci51cGRhdGVFZGdlcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXJGdWxsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhZ2VzTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlclRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXJDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlZmF1bHRMYXllckNvbmZpZygpOiBJTGF5ZXJDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBjb250ZW50UmFuZ2U6IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IDAsIGVuZDogMCB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodDogMSxcbiAgICAgICAgICAgIG1heEhlaWdodDogMSxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogMCxcbiAgICAgICAgICAgIHBhZ2VzOiBbXSxcbiAgICAgICAgICAgIHZpc2libGVSYW5nZToge1xuICAgICAgICAgICAgICAgIHN0YXJ0UGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0TGluZTogMCxcbiAgICAgICAgICAgICAgICBzdGFydFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JlZW5GdWxsTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRQYXJhZ3JhcGg6IDAsXG4gICAgICAgICAgICAgICAgZW5kTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRTY3JlZW5MaW5lOiAwLFxuICAgICAgICAgICAgICAgIGVuZFNjcmVlbkZ1bGxMaW5lOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC5yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3ZpcnR1YWwucmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzFDLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLEdBQVk7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxHQUFlO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMs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UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsT0FBTztZQUNILEtBQUssRUFBRSxDQUFDO1lBQ1IsWUFBWSxFQUFFLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckQsU0FBUyxFQUFFLENBQUM7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsQ0FBQztZQUNaLEtBQUssRUFBRSxFQUFFO1lBQ1QsWUFBWSxFQUFFO2dCQUNWLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixTQUFTLEVBQUUsQ0FBQztnQkFDWixlQUFlLEVBQUUsQ0FBQztnQkFDbEIsbUJBQW1CLEVBQUUsQ0FBQztnQkFDdEIsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGlCQUFpQixFQUFFLENBQUM7YUFDdkI7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEN1cnNvckxheWVyIH0gZnJvbSAnLi9sYXllcnMvY3Vyc29yLmxheWVyJztcbmltcG9ydCB7IEN1cnNvclBhcmFncmFwaCB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllcnMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBhZ2VzTGF5ZXIgfSBmcm9tICcuL2xheWVycy9wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3JhbmdlJztcbmltcG9ydCB7IFJlbmRlckNoYW5nZXNNb2RlbCB9IGZyb20gJy4vcmVuZGVyLWNoYW5nZXMubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7IFJlbmRlckxvb3AgfSBmcm9tICcuL3JlbmRlcmxvb3AnO1xuaW1wb3J0IHsgU2Nyb2xsQmFyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zY3JvbGxiYXInO1xuXG5leHBvcnQgY2xhc3MgVmlydHVhbFJlbmRlcmVyIHtcbiAgICBnZXQgaXNNb3VzZVByZXNzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmlzTW91c2VQcmVzc2VkO1xuICAgIH1cbiAgICBzZXQgaXNNb3VzZVByZXNzZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaXNNb3VzZVByZXNzZWQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnNvckxheWVyKCk6IEN1cnNvckxheWVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXI7XG4gICAgfVxuXG4gICAgZ2V0IGxvb3AoKTogUmVuZGVyTG9vcCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxvb3A7XG4gICAgfVxuICAgIHNldCBsb29wKHZhbDogUmVuZGVyTG9vcCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxvb3AgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IHRleHRhcmVhKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIudGV4dGFyZWE7XG4gICAgfVxuICAgIHNldCB0ZXh0YXJlYSh2YWw6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudGV4dGFyZWEgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IGxheWVyQ29uZmlnKCk6IElMYXllckNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgIH1cbiAgICBzZXQgbGF5ZXJDb25maWcodmFsOiBJTGF5ZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sYXllckNvbmZpZyA9IHZhbDtcbiAgICB9XG5cbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgc2Nyb2xsZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgcGFnZXNMYXllcjogUGFnZXNMYXllcjtcblxuICAgIGNhblNjcm9sbDogYm9vbGVhbjtcblxuICAgIHJlbmRlcmVyITogUmVuZGVyZXI7XG5cbiAgICBjaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgc2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgc2Nyb2xsZXJIZWlnaHQ6IDAsXG4gICAgICAgIHNjcm9sbGVyV2lkdGg6IDAsXG4gICAgICAgIGRpcnR5OiB0cnVlXG4gICAgfTtcblxuICAgIHByaXZhdGUgc2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50LCBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLCBtYWluU2Vzc2lvbjogRWRpdFNlc3Npb24sIHB1YmxpYyBzY3JvbGxCYXI6IFNjcm9sbEJhcikge1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHBhcmVudENvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxlcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHBhcmVudENvbnRhaW5lciwgZWRpdG9yU2VydmljZSwgbWFpblNlc3Npb24pO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKTtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyID0gbmV3IFBhZ2VzTGF5ZXIodGhpcy5yZW5kZXJlci5jb250ZW50LCBtYWluU2Vzc2lvbik7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxCYXIuc2Nyb2xsZWQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvb3Auc2NoZWR1bGUoeyBzY3JvbGw6IHRydWUgfSkpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlbmRlckxvb3AoKTtcbiAgICB9XG5cbiAgICByZW5kZXJDaGFuZ2VzKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGggfHwgKCFjaGFuZ2VzLmFueSAmJiAhZm9yY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuYXBwbHkoY2hhbmdlcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNpemUuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5hcHBseShjaGFuZ2VzKTtcbiAgICAgICAgICAgIHRoaXMub25SZXNpemUodHJ1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQsIHNjcm9sbGluZyBhbmQgcmVzaXplIGNoYW5nZXMgY2FuIGNhdXNlIHRoZSB2aWV3IHBvcnQgc2l6ZSB0byBjaGFuZ2VcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCB8fCBjaGFuZ2VzLnNpemUgfHwgY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKSk7XG5cbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5yZW5kZXJlci5jb250ZW50LCAwLCAtdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpO1xuXG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5yZW5kZXJlci5jb250ZW50LnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLmxheWVyQ29uZmlnLndpZHRofXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5yZW5kZXJlci5jb250ZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5sYXllckNvbmZpZy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZ1bGxcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJGdWxsKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNjcm9sbGluZ1xuICAgICAgICBpZiAoY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU2Nyb2xsKGNoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudGV4dCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5jdXJzb3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ3Vyc29yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5tYXJrZXIgfHwgY2hhbmdlcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHJlc2l6ZSBvZiB0aGUgZWRpdG9yXG4gICAgICoqL1xuICAgIG9uUmVzaXplKGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IHRoaXMuY29udGFpbmVyLnNjcm9sbFdpZHRoO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy51cGRhdGVDYWNoZWRTaXplKGZvcmNlLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2hhbmdlcy5hcHBseSh0aGlzLmNoYW5nZXMpO1xuXG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDaGFuZ2VzKGNoYW5nZXMsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmcm9tIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgdHdvIHBhcmFtZXRlcnMuXG4gICAgICoqL1xuICAgIHVwZGF0ZUxpbmVzKGZpcnN0Um93OiBudW1iZXIsIGxhc3RSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9XG5cbiAgICB1cGRhdGVDYWNoZWRTaXplKGZvcmNlOiBib29sZWFuLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IFJlbmRlckNoYW5nZXNNb2RlbCB7XG4gICAgICAgIGlmICh3aWR0aCAmJiAoZm9yY2UgfHwgdGhpcy5zaXplLndpZHRoICE9PSB3aWR0aCkpIHtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCAnbGVmdCcsIDApO1xuICAgICAgICAgICAgdGhpcy5zaXplLnNjcm9sbGVyV2lkdGggPSBNYXRoLm1heCgwLCB0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gdGhpcy5zY3JvbGxCYXIud2lkdGgpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsICdyaWdodCcsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG4gICAgICAgIGlmIChoZWlnaHQgJiYgKGZvcmNlIHx8IHRoaXMuc2l6ZS5oZWlnaHQgIT09IGhlaWdodCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICBjaGFuZ2VzLnNpemUgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLnNpemUuc2Nyb2xsZXJIZWlnaHQgPSB0aGlzLnNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgY2hhbmdlcy5zY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoICYmIChmb3JjZSB8fCB0aGlzLnNpemUud2lkdGggIT09IHdpZHRoKSkge1xuICAgICAgICAgICAgdGhpcy5zaXplLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICBjaGFuZ2VzLnNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaXplLmRpcnR5ID0gIXdpZHRoIHx8ICFoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgbW92ZVRleHRBcmVhVG9DdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTW91c2VQcmVzc2VkIHx8ICF0aGlzLnRleHRhcmVhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3Vyc29yUG9zaXRpb24gPSB0aGlzLmN1cnNvckxheWVyLmN1cnNvclBvc2l0aW9uO1xuICAgICAgICBpZiAoIWN1cnNvclBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NUb3AgPSBjdXJzb3JQb3NpdGlvbi5wYWdlWSAtIHRoaXMubGF5ZXJDb25maWcub2Zmc2V0O1xuICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiB0aGlzLmxheWVyQ29uZmlnLmhlaWdodCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLnRleHRhcmVhLCAwLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnRleHRhcmVhLnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5yZW5kZXJlci50ZXh0YXJlYVNpemUuaGVpZ2h0fXB4YCk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZSh0aGlzLnRleHRhcmVhLnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLnJlbmRlcmVyLnRleHRhcmVhU2l6ZS53aWR0aH1weGApO1xuICAgICAgICBEb21IZWxwZXIudHJhbnNsYXRlKFxuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYSxcbiAgICAgICAgICAgIE1hdGgubWluKGN1cnNvclBvc2l0aW9uLnBhZ2VYLCB0aGlzLnNpemUuc2Nyb2xsZXJXaWR0aCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLndpZHRoKSxcbiAgICAgICAgICAgIE1hdGgubWluKHBvc1RvcCwgdGhpcy5zaXplLmhlaWdodCAtIHRoaXMucmVuZGVyZXIudGV4dGFyZWFTaXplLmhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3Rpb24ocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHJhbmdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVRleHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIGFsbCB0aGUgbGF5ZXJzLCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVGdWxsKGZvcmNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoZm9yY2UpO1xuICAgIH1cblxuICAgIHVwZGF0ZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBzY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhhbmNob3I6IEN1cnNvclBhcmFncmFwaCwgbGVhZDogQ3Vyc29yUGFyYWdyYXBoLCBvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gZmlyc3Qgc2Nyb2xsIGFuY2hvciBpbnRvIHZpZXcgdGhlbiBzY3JvbGwgbGVhZCBpbnRvIHZpZXdcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyhhbmNob3IsIG9mZnNldCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobGVhZCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRoZSBjdXJzb3IgaW50byB0aGUgZmlyc3QgdmlzaWJpbGUgYXJlYSBvZiB0aGUgZWRpdG9yXG4gICAgICoqL1xuICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGN1cnNvcj86IEN1cnNvclBhcmFncmFwaCwgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaXplLnNjcm9sbGVySGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihjdXJzb3IpO1xuICAgICAgICBsZXQgdG9wID0gcG9zaXRpb24ucGFnZVkgKyB0aGlzLnNjcm9sbEJhci5zY3JvbGxUb3A7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCA+IHRvcCkge1xuICAgICAgICAgICAgaWYgKG9mZnNldCkge1xuICAgICAgICAgICAgICAgIHRvcCAtPSBvZmZzZXQgKiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCArIHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodCA8IHRvcCArIHBvc2l0aW9uLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0b3AgKz0gb2Zmc2V0ICogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3AgKz0gcG9zaXRpb24ubGluZUhlaWdodCAtIHRoaXMuY29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbFRvcCh0b3ApO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsQnkoZGVsdGFZOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkZWx0YVkgfHwgIXRoaXMuc2Nyb2xsQmFyLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxCYXIuc2Nyb2xsVG9wICsgZGVsdGFZO1xuICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHg6IG51bWJlciwgeTogbnVtYmVyKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoeCwgeSk7XG4gICAgfVxuXG4gICAgc2hvd0N1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7XG4gICAgfVxuXG4gICAgaGlkZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQodGhpcy5zY3JvbGxCYXIuZWxlbWVudCk7XG4gICAgICAgIHRoaXMucGFnZXNMYXllci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVMYXllckNvbmZpZygpOiBSZW5kZXJDaGFuZ2VzTW9kZWwge1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IHRoaXMucmVuZGVyZXIuc2Vzc2lvbi5kaXNwbGF5RGF0YTtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gZGlzcGxheURhdGEuYWxsUGFnZXNIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRpc3BsYXlEYXRhLm1pbkhlaWdodDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGlkZGVuID0gbWF4SGVpZ2h0IDwgdGhpcy5zaXplLnNjcm9sbGVySGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IG5ld1Njcm9sbFRvcCA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCwgbWF4SGVpZ2h0IC0gdGhpcy5zaXplLnNjcm9sbGVySGVpZ2h0KSwgMCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQmFyLnNldFNjcm9sbEhlaWdodChtYXhIZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRTY3JvbGxUb3AobmV3U2Nyb2xsVG9wKTtcblxuICAgICAgICBjb25zdCBjYW5TY3JvbGwgPSAhc2Nyb2xsSGlkZGVuICYmIHRoaXMuc2l6ZS5zY3JvbGxlckhlaWdodCAtIG1heEhlaWdodCA8IDA7XG4gICAgICAgIGNvbnN0IHNjcm9sbENoYW5nZWQgPSB0aGlzLmNhblNjcm9sbCAhPT0gY2FuU2Nyb2xsO1xuICAgICAgICBpZiAoc2Nyb2xsQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5jYW5TY3JvbGwgPSBjYW5TY3JvbGw7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEJhci5zZXRWaXNpYmxlKGNhblNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gc2Nyb2xsQ2hhbmdlZFxuICAgICAgICAgICAgPyB0aGlzLnVwZGF0ZUNhY2hlZFNpemUodHJ1ZSwgdGhpcy5zaXplLndpZHRoLCB0aGlzLnNpemUuaGVpZ2h0KVxuICAgICAgICAgICAgOiBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCB2aXNpYmxlUmFuZ2UgPSBkaXNwbGF5RGF0YS5nZXRWaXNpYmxlUmFuZ2UodGhpcy5zY3JvbGxCYXIuc2Nyb2xsVG9wLCB0aGlzLnNpemUuc2Nyb2xsZXJIZWlnaHQpO1xuICAgICAgICB0aGlzLmxheWVyQ29uZmlnID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMucmVuZGVyZXIudGV4dExheWVyLmVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5zY3JvbGxlckhlaWdodCxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZTogbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogdmlzaWJsZVJhbmdlLnN0YXJ0UGFyYWdyYXBoLCBlbmQ6IHZpc2libGVSYW5nZS5lbmRQYXJhZ3JhcGggfSksXG4gICAgICAgICAgICBtaW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICB2aXNpYmxlUmFuZ2UsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IHRoaXMuc2Nyb2xsQmFyLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHBhZ2VzOiB2aXNpYmxlUmFuZ2UucGFnZXNcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNjcm9sbGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcm9sbGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuc2Nyb2xsZXIuY2xhc3NOYW1lID0gJ25vZGVyLXNjcm9sbGVyJztcbiAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVSZW5kZXJMb29wKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvb3AgPSBuZXcgUmVuZGVyTG9vcChjaGFuZ2VzID0+IHRoaXMucmVuZGVyQ2hhbmdlcyhjaGFuZ2VzKSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIubG9vcCA9IHRoaXMubG9vcDtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgZnVsbDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNjcm9sbChjaGFuZ2VzOiBSZW5kZXJDaGFuZ2VzTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgaWYgKGNoYW5nZXMudGV4dCB8fCBjaGFuZ2VzLmxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnRleHRMYXllci51cGRhdGVFZGdlcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudGV4dExheWVyLnVwZGF0ZUxpbmVzKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0TGF5ZXIuc2Nyb2xsUGFnZXModGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnRleHRMYXllci5zY3JvbGxMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0aW9uTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXIuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5tb3ZlVGV4dEFyZWFUb0N1cnNvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRnVsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0TGF5ZXIudXBkYXRlRWRnZXModGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyRnVsbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXJUZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0TGF5ZXJDb25maWcoKTogSUxheWVyQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IDAgfSksXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IDEsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDEsXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IDAsXG4gICAgICAgICAgICBwYWdlczogW10sXG4gICAgICAgICAgICB2aXNpYmxlUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzdGFydFBhcmFncmFwaDogMCxcbiAgICAgICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JlZW5MaW5lOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgICAgIGVuZExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kU2NyZWVuTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==