@fundamental-ngx/core 0.43.25 → 0.43.27

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 (95) hide show
  1. package/esm2020/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  2. package/esm2020/combobox/combobox.component.mjs +2 -2
  3. package/esm2020/dialog/dialog-default/dialog-default.component.mjs +1 -1
  4. package/esm2020/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -3
  5. package/esm2020/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.mjs +3 -3
  6. package/esm2020/facets/facet/facet.component.mjs +5 -3
  7. package/esm2020/grid-list/components/grid-list-item/grid-list-item.component.mjs +1 -1
  8. package/esm2020/input-group/input-group.component.mjs +2 -2
  9. package/esm2020/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  10. package/esm2020/message-box/message-box-default/message-box-default.component.mjs +1 -1
  11. package/esm2020/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  12. package/esm2020/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  13. package/esm2020/multi-input/multi-input.component.mjs +2 -2
  14. package/esm2020/popover/popover-mobile/popover-mobile.component.mjs +2 -2
  15. package/esm2020/quick-view/quick-view-subheader-title/quick-view-subheader-title.component.mjs +1 -1
  16. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +2 -2
  17. package/esm2020/select/select-mobile/select-mobile.component.mjs +1 -1
  18. package/esm2020/select/select.component.mjs +2 -2
  19. package/esm2020/slider/slider.component.mjs +2 -2
  20. package/esm2020/time-picker/time-picker.component.mjs +2 -2
  21. package/esm2020/title/title.component.mjs +3 -3
  22. package/facets/facet/facet.component.d.ts +6 -1
  23. package/fesm2015/fundamental-ngx-core-combobox.mjs +2 -2
  24. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  25. package/fesm2015/fundamental-ngx-core-dialog.mjs +1 -1
  26. package/fesm2015/fundamental-ngx-core-dialog.mjs.map +1 -1
  27. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +4 -4
  28. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  29. package/fesm2015/fundamental-ngx-core-facets.mjs +4 -2
  30. package/fesm2015/fundamental-ngx-core-facets.mjs.map +1 -1
  31. package/fesm2015/fundamental-ngx-core-grid-list.mjs +1 -1
  32. package/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  33. package/fesm2015/fundamental-ngx-core-input-group.mjs +1 -1
  34. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  35. package/fesm2015/fundamental-ngx-core-menu.mjs +1 -1
  36. package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
  37. package/fesm2015/fundamental-ngx-core-message-box.mjs +1 -1
  38. package/fesm2015/fundamental-ngx-core-message-box.mjs.map +1 -1
  39. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +1 -1
  40. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  41. package/fesm2015/fundamental-ngx-core-multi-input.mjs +2 -2
  42. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  43. package/fesm2015/fundamental-ngx-core-popover.mjs +1 -1
  44. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  45. package/fesm2015/fundamental-ngx-core-quick-view.mjs +1 -1
  46. package/fesm2015/fundamental-ngx-core-quick-view.mjs.map +1 -1
  47. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +1 -1
  48. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  49. package/fesm2015/fundamental-ngx-core-select.mjs +2 -2
  50. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-slider.mjs +1 -1
  52. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  53. package/fesm2015/fundamental-ngx-core-time-picker.mjs +1 -1
  54. package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  55. package/fesm2015/fundamental-ngx-core-title.mjs +2 -2
  56. package/fesm2015/fundamental-ngx-core-title.mjs.map +1 -1
  57. package/fesm2020/fundamental-ngx-core-combobox.mjs +2 -2
  58. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-dialog.mjs +1 -1
  60. package/fesm2020/fundamental-ngx-core-dialog.mjs.map +1 -1
  61. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +4 -4
  62. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  63. package/fesm2020/fundamental-ngx-core-facets.mjs +4 -2
  64. package/fesm2020/fundamental-ngx-core-facets.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-grid-list.mjs +1 -1
  66. package/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  67. package/fesm2020/fundamental-ngx-core-input-group.mjs +1 -1
  68. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  69. package/fesm2020/fundamental-ngx-core-menu.mjs +1 -1
  70. package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
  71. package/fesm2020/fundamental-ngx-core-message-box.mjs +1 -1
  72. package/fesm2020/fundamental-ngx-core-message-box.mjs.map +1 -1
  73. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +1 -1
  74. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  75. package/fesm2020/fundamental-ngx-core-multi-input.mjs +2 -2
  76. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  77. package/fesm2020/fundamental-ngx-core-popover.mjs +1 -1
  78. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  79. package/fesm2020/fundamental-ngx-core-quick-view.mjs +1 -1
  80. package/fesm2020/fundamental-ngx-core-quick-view.mjs.map +1 -1
  81. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +1 -1
  82. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  83. package/fesm2020/fundamental-ngx-core-select.mjs +2 -2
  84. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  85. package/fesm2020/fundamental-ngx-core-slider.mjs +1 -1
  86. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  87. package/fesm2020/fundamental-ngx-core-time-picker.mjs +1 -1
  88. package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  89. package/fesm2020/fundamental-ngx-core-title.mjs +2 -2
  90. package/fesm2020/fundamental-ngx-core-title.mjs.map +1 -1
  91. package/fundamental-ngx-core-v0.43.27.tgz +0 -0
  92. package/package.json +3 -3
  93. package/schematics/add-dependencies/index.js +4 -4
  94. package/title/title.component.d.ts +1 -1
  95. package/fundamental-ngx-core-v0.43.25.tgz +0 -0
@@ -382,7 +382,7 @@ export class SliderComponent {
382
382
  if (emitEvent) {
383
383
  this.onChange(value);
384
384
  }
385
- this._cdr.markForCheck();
385
+ this._cdr.detectChanges();
386
386
  }
387
387
  /** @hidden */
388
388
  _updatePopoversPosition() {
@@ -772,4 +772,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
772
772
  type: HostBinding,
773
773
  args: ['class.fd-slider--range']
774
774
  }], buildComponentCssClass: [] } });
775
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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U0FBUztzQkFEUixLQUFLO2dCQUtGLEdBQUc7c0JBRE4sS0FBSztnQkFlRixHQUFHO3NCQUROLEtBQUs7Z0JBZUYsSUFBSTtzQkFEUCxLQUFLO2dCQWVGLElBQUk7c0JBRFAsS0FBSztnQkFVRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQVVOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFVTixvQ0FBb0M7c0JBRG5DLEtBQUs7Z0JBVU4sb0NBQW9DO3NCQURuQyxLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFlTixPQUFPO3NCQUROLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLeEMsTUFBTTtzQkFETCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3pDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQjtnQkFLOUIsc0JBQXNCO3NCQURyQixZQUFZO3VCQUFDLHNCQUFzQjtnQkFXcEMsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHdCQUF3QjtnQkF5SnJDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIG1hcFRvLFxuICAgIHNraXAsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgU2xpZGVyQ29udHJvbFZhbHVlLFxuICAgIFNsaWRlckN1c3RvbVZhbHVlLFxuICAgIFNsaWRlclJhbmdlSGFuZGxlcyxcbiAgICBTbGlkZXJUaWNrTWFyayxcbiAgICBTbGlkZXJWYWx1ZVRhcmdldHNcbn0gZnJvbSAnLi9zbGlkZXIubW9kZWwnO1xuaW1wb3J0IHsgTUlOX0RJU1RBTkNFX0JFVFdFRU5fVElDS1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzLCBDc3NDbGFzc0J1aWxkZXIsIEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgY29uc3QgU0xJREVSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbmxldCBzbGlkZXJJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtc2xpZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBTTElERVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKFNsaWRlckNvbXBvbmVudCksXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoe1xuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVCxcbiAgICAgICAgICAgIG1vZGlmaWVyczogeyBbQ29udGVudERlbnNpdHlNb2RlLkNPWlldOiAnZmQtc2xpZGVyLS1sZycgfVxuICAgICAgICB9KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ3RoaXMuX2NvbXBvbmVudEhvdmVyZWQkLm5leHQodHJ1ZSknLFxuICAgICAgICAnKG1vdXNlbGVhdmUpJzogJ3RoaXMuX2NvbXBvbmVudEhvdmVyZWQkLm5leHQoZmFsc2UpJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnb25Ub3VjaGVkKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBDc3NDbGFzc0J1aWxkZXIsIEZvcm1JdGVtQ29udHJvbFxue1xuICAgIC8qKiBTbGlkZXIgaWQsIGl0IGhhcyBzb21lIGRlZmF1bHQgdmFsdWUgaWYgbm90IHNldCwgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gJ2ZkLXNsaWRlci1pZC0nICsgc2xpZGVySWQrKztcblxuICAgIC8qKiBVc2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogSWQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHMgc2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIHNsaWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBNaW5pbXVtIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX21pbik7XG4gICAgICAgIGlmICgoKHRoaXMubWF4IC0gbmV3VmFsdWUpIC8gdGhpcy5zdGVwKSAlIDEgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIE1heGltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgaWYgKCgobmV3VmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG5cbiAgICAvKiogU3RlcCB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fc3RlcCk7XG4gICAgICAgIGlmICgoKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gbmV3VmFsdWUpICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKiogSnVtcCB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBqdW1wKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fanVtcCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9qdW1wKTtcbiAgICB9XG4gICAgZ2V0IGp1bXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2p1bXA7XG4gICAgfVxuXG4gICAgLyoqIFB1dCBhIGxhYmVsIG9uIGV2ZXJ5IE4tdGggdGlja21hcmsuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGlja21hcmtzQmV0d2VlbkxhYmVscyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscyk7XG4gICAgfVxuICAgIGdldCB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsaWRlciBtb2RlLlxuICAgICAqIE9wdGlvbnMgaW5jbHVkZTogJ3NpbmdsZScgfCAncmFuZ2UnXG4gICAgICogVGhlIGRlZmF1bHQgaXMgc2V0IHRvICdzaW5nbGUnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtb2RlOiAnc2luZ2xlJyB8ICdyYW5nZScgPSAnc2luZ2xlJztcblxuICAgIC8qKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRpY2sgbWFya3MuICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGlja3MgPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRpY2sgbWFyayBsYWJlbHMuIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICdzaG93VGlja3MnICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGlja3NMYWJlbHMgPSBmYWxzZTtcblxuICAgIC8qKiBBcnJheSBvZiBjdXN0b20gdmFsdWVzIHRvIHVzZSBmb3IgU2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tVmFsdWVzOiBTbGlkZXJDdXN0b21WYWx1ZVtdID0gW107XG5cbiAgICAvKiogVG9vbHRpcCBjYW4gYmUgdHdvIHR5cGVzLCAncmVhZG9ubHknIHRvIGRpc3BsYXkgdmFsdWUgYW5kICdlZGl0YWJsZScgdG8gbWFrZSB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIGRpc3BsYXkgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICB0b29sdGlwTW9kZTogJ3JlYWRvbmx5JyB8ICdlZGl0YWJsZSc7XG5cbiAgICAvKiogSGlkZXMgZGlzcGxheSBvZiBjb2xvcmVkIHByb2dyZXNzIGJhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVQcm9ncmVzc0JhciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogc2xpZGVyIGN1cnJlbnQgdmFsdWUgdmVyYm9zZSBzdHJpbmcuXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciB1c2VkLCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMSBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gcmFuZ2Ugc2xpZGVyIGhhbmRsZSAyIGN1cnJlbnQgdmFsdWUgc3VwcG9ydGluZyBzdHJpbmdcbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogKiBAZGVwcmVjYXRlZCBubyBsb25nZXIgdXNlZCwgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9zaXRpb246IG51bWJlciB8IG51bWJlcltdID0gMDtcblxuICAgIC8qKiBDb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBTbGlkZXJDb250cm9sVmFsdWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3BvcG92ZXJWYWx1ZVJlZigpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5fcG9zaXRpb24gYXMgbnVtYmVyLCB0aGlzLl9oYW5kbGUxVmFsdWUsIHRoaXMuX2hhbmRsZTJWYWx1ZV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0cmFjaycsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHRyYWNrRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdoYW5kbGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBoYW5kbGU6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTEnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByYW5nZUhhbmRsZTE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByYW5nZUhhbmRsZTI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKFBvcG92ZXJDb21wb25lbnQpXG4gICAgX3BvcG92ZXJzOiBRdWVyeUxpc3Q8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3NsaWRlclRvb2x0aXBXcmFwcGVyJylcbiAgICBfc2xpZGVyVG9vbHRpcFdyYXBwZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSB8IG51bWJlcltdID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2dyZXNzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1zbGlkZXItLXJhbmdlJylcbiAgICBfaXNSYW5nZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMVBvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTJQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUxVmFsdWUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMlZhbHVlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3JhbmdlUHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdGlja01hcmtzOiBTbGlkZXJUaWNrTWFya1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXJWYWx1ZVRhcmdldHMgPSBTbGlkZXJWYWx1ZVRhcmdldHM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3BvdmVySW5wdXRGaWVsZENsYXNzID0gYGZkLXNsaWRlci1wb3BvdmVyLWlucHV0LSR7c2xpZGVySWR9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzUnRsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogd2hldGhlciB0byB1c2UgdmFsdWUgd2l0aCBhIHByZWZpeCBmb3IgYW5ub3VuY2luZ1xuICAgICAqL1xuICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21pbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heCA9IDEwMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2p1bXAgPSAxMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlc0J5U3RlcHM6IG51bWJlcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfY29tcG9uZW50SG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2hhbmRsZUZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yYW5nZUhhbmRsZTFGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmFuZ2VIYW5kbGUyRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuX29uUmVzaXplKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc0J5U3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tJc0luUmFuZ2VNb2RlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIHRoaXMuX3JlY2FsY0hhbmRsZVBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRWYWx1ZW5vdyhwb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10sIHNsaWRlclZhbHVlVGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmN1c3RvbVZhbHVlc1twb3NpdGlvbiBhcyBudW1iZXJdLmxhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX3BvcG92ZXJWYWx1ZVJlZltzbGlkZXJWYWx1ZVRhcmdldF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWluVmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1pbiBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5taW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWF4VmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1heCBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1zbGlkZXInLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA/ICdpcy1kaXNhYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2UgPyAnZmQtc2xpZGVyLS1yYW5nZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpY2tzICYmIHRoaXMuc2hvd1RpY2tzTGFiZWxzID8gJ2ZkLXNsaWRlci0td2l0aC1sYWJlbHMnIDogJycsXG4gICAgICAgICAgICB0aGlzLmNsYXNzLFxuICAgICAgICAgICAgdGhpcy5fcGxhdGZvcm0uRURHRSB8fCB0aGlzLl9wbGF0Zm9ybS5UUklERU5UID8gJ2ZkLXNsaWRlcl9fYWx0ZXJuYXRpdmUtdGljay13aWR0aCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudCkpO1xuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlRnJvbU1vdXNlbW92ZSA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2Vtb3ZlJywgKG1vdmVFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50LCBmYWxzZSkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tTW91c2V1cCA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlRnJvbU1vdXNlbW92ZSgpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVGcm9tTW91c2V1cCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXM6IG51bWJlcltdID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVywgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFXTtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgYWxsb3dlZEtleXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmp1bXAgOiB0aGlzLnN0ZXA7XG4gICAgICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHByZXZWYWx1ZSA9IHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlcjtcbiAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXMgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlZhbHVlID0gdGhpcy5faGFuZGxlMVZhbHVlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwcmV2VmFsdWUgPSB0aGlzLl9oYW5kbGUyVmFsdWU7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlICsgZGlmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBwcmV2VmFsdWUgLSBkaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSAtIGRpZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlIGFzIG51bWJlciwgIXRoaXMuX2lzUmFuZ2UpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIG5ld1ZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXBkYXRlVmFsdWVGcm9tSW5wdXQodmFsdWU6IHN0cmluZywgdGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUoK3ZhbHVlKSBhcyBudW1iZXI7XG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSAmJiB0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0ID09PSBTbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikge1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlLCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlKCh2YWx1ZSA/PyBbMC4wXSkgYXMgbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGUoKHZhbHVlID8/IDApIGFzIG51bWJlciB8IFNsaWRlclRpY2tNYXJrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLnJlZnJlc2hQb3NpdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudDogTW91c2VFdmVudCwgdGFrZUN1c3RvbVZhbHVlID0gdHJ1ZSk6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCB3aWR0aCB9ID0gdGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBwZXJjZW50YWdlID0gKGV2ZW50LmNsaWVudFggLSBsZWZ0KSAvIHdpZHRoO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1J0bCkge1xuICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEgLSBwZXJjZW50YWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLm1pbiArIHBlcmNlbnRhZ2UgKiAodGhpcy5tYXggLSB0aGlzLm1pbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZSwgdGFrZUN1c3RvbVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZTogbnVtYmVyLCB0YWtlQ3VzdG9tVmFsdWUgPSB0cnVlKTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsge1xuICAgICAgICBpZiAobmV3VmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1heDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdWYWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMubWluO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXNlU2xpZGVyVmFsdWVQcmVmaXggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGNvbnN0IHN0ZXBEaWZmQXJyYXkgPSB0aGlzLl92YWx1ZXNCeVN0ZXBzXG4gICAgICAgICAgICAubWFwKChzdGVwVmFsdWUpID0+ICh7IGRpZmY6IE1hdGguYWJzKHN0ZXBWYWx1ZSAtIG5ld1ZhbHVlKSwgdmFsdWU6IHN0ZXBWYWx1ZSB9KSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRpZmYgLSBiLmRpZmYpO1xuICAgICAgICBsZXQgdmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgbnVtYmVyID0gc3RlcERpZmZBcnJheVswXS52YWx1ZTtcblxuICAgICAgICBpZiAodGFrZUN1c3RvbVZhbHVlICYmIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jdXN0b21WYWx1ZXNbdmFsdWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXMsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModmFsdWUsIHRydWUpO1xuXG4gICAgICAgIGlmIChoYW5kbGVJbmRleCA9PT0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUxVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTFQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VQcm9ncmVzcyA9IE1hdGguYWJzKHRoaXMuX2hhbmRsZTJQb3NpdGlvbiAtIHRoaXMuX2hhbmRsZTFQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdIHtcbiAgICAgICAgbGV0IHJhbmdlTG93ZXJWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgICAgICBsZXQgcmFuZ2VIaWdoZXJWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgICAgICBsZXQgcmFuZ2VWYWx1ZTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdID0gW1xuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5faGFuZGxlMVZhbHVlLCB0aGlzLl9oYW5kbGUyVmFsdWUpLFxuICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5faGFuZGxlMVZhbHVlLCB0aGlzLl9oYW5kbGUyVmFsdWUpXG4gICAgICAgIF07XG5cbiAgICAgICAgcmFuZ2VMb3dlclZhbHVlID0gcmFuZ2VWYWx1ZVswXTtcbiAgICAgICAgcmFuZ2VIaWdoZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMV07XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuY3VzdG9tVmFsdWVzW3JhbmdlVmFsdWVbMF1dIHx8IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5jdXN0b21WYWx1ZXNbcmFuZ2VWYWx1ZVsxXV0gfHwgdGhpcy5jdXN0b21WYWx1ZXNbdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIHJhbmdlVmFsdWUgPSBbbWluLCBtYXhdO1xuICAgICAgICAgICAgcmFuZ2VMb3dlclZhbHVlID0gcmFuZ2VWYWx1ZVswXS5sYWJlbDtcbiAgICAgICAgICAgIHJhbmdlSGlnaGVyVmFsdWUgPSByYW5nZVZhbHVlWzFdLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UoJ3JhbmdlIHZhbHVlIGJldHdlZW4gJyArIHJhbmdlTG93ZXJWYWx1ZSArICcgYW5kICcgKyByYW5nZUhpZ2hlclZhbHVlLCAncG9saXRlJyk7XG4gICAgICAgIHJldHVybiByYW5nZVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXR0YWNoUmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25SZXNpemUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0VGlja01hcmtzKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNCeVN0ZXBzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwICsgMSB9LCAoXywgaSkgPT5cbiAgICAgICAgICAgICAgICBOdW1iZXIoKHRoaXMubWluICsgaSAqIHRoaXMuc3RlcCkudG9GaXhlZCgyKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RUaWNrTWFya3MoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IFtdO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm1pbiA9IDA7XG4gICAgICAgICAgICB0aGlzLm1heCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tVmFsdWVzTGVuZ3RoID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IHRoaXMuY3VzdG9tVmFsdWVzLm1hcCgoaXRlbSwgaSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAoMTAwIC8gY3VzdG9tVmFsdWVzTGVuZ3RoKSAqIGlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tNYXJrc0NvdW50ID0gdG90YWwgLyB0aGlzLnN0ZXAgKyAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuX21heFRpY2tNYXJrc051bWJlciAhPT0gdW5kZWZpbmVkICYmIHRpY2tNYXJrc0NvdW50ID4gdGhpcy5fbWF4VGlja01hcmtzTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gW1xuICAgICAgICAgICAgICAgICAgICB7IHBvc2l0aW9uOiAwLCB2YWx1ZTogMCwgbGFiZWw6IGAke3RoaXMubWlufWAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwb3NpdGlvbjogMTAwLCB2YWx1ZTogdG90YWwsIGxhYmVsOiBgJHt0aGlzLm1heH1gIH1cbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGlja01hcmtzQ291bnQgJSAxID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGlja01hcmtzQ291bnQgfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLnJvdW5kKGkgKiB0aGlzLnN0ZXAgKiAxMDApIC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9ICh2YWx1ZSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWUsIHBvc2l0aW9uLCBsYWJlbDogYCR7dGhpcy5taW4gKyB2YWx1ZX1gIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9tYXhUaWNrTWFya3NOdW1iZXIoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYWNrRWwgfHwgIXRoaXMudHJhY2tFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnRyYWNrRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIE1JTl9ESVNUQU5DRV9CRVRXRUVOX1RJQ0tTKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGNQcm9ncmVzcyh2YWx1ZTogbnVtYmVyLCBza2lwUnRsID0gZmFsc2UpOiBudW1iZXIge1xuICAgICAgICBsZXQgcHJvZ3Jlc3MgPSAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcblxuICAgICAgICBpZiAoIXNraXBSdGwgJiYgdGhpcy5faXNSdGwpIHtcbiAgICAgICAgICAgIHByb2dyZXNzID0gMTAwIC0gcHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZ3Jlc3MgPiAxMDApIHtcbiAgICAgICAgICAgIHJldHVybiAxMDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9ncmVzcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlY2FsY0hhbmRsZVBvc2l0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTFQb3NpdGlvbiA9IHRoaXMuX2NhbGNQcm9ncmVzcyh0aGlzLl9oYW5kbGUxVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMlBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX2hhbmRsZTJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVByb2dyZXNzID0gTWF0aC5hYnModGhpcy5faGFuZGxlMlBvc2l0aW9uIC0gdGhpcy5faGFuZGxlMVBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0lzSW5SYW5nZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzUmFuZ2UgPSB0aGlzLm1vZGUgPT09ICdyYW5nZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc1J0bDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNSdGwgPSBpc1J0bDtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlKHZhbHVlOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZVdpdGhDdXN0b21WYWx1ZSh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFyayk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVEZWZhdWx0KGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLm1pbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fY2FsY1Byb2dyZXNzKHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWUoc2xpZGVyVGlja01hcms6IFNsaWRlclRpY2tNYXJrKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9uKHNsaWRlclRpY2tNYXJrKSBhcyBudW1iZXIpIHx8IHRoaXMubWluO1xuXG4gICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVEZWZhdWx0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRSYW5nZU1vZGUodmFsdWU6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZVdpdGhDdXN0b21WYWx1ZXModmFsdWUgYXMgU2xpZGVyVGlja01hcmtbXSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0SGFuZGxlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWVbMF0sIHRoaXMubWluKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kSGFuZGxlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWVbMV0sIHRoaXMubWF4KTtcblxuICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlRGVmYXVsdChbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZURlZmF1bHQoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXTtcblxuICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBmaXJzdEhhbmRsZSk7XG4gICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kLCBzZWNvbmRIYW5kbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZVdpdGhDdXN0b21WYWx1ZXMoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdOiBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24oW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdKSB8fCBbdGhpcy5taW4sIHRoaXMubWF4XTtcblxuICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlRGVmYXVsdCh2YWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbih2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBTbGlkZXJUaWNrTWFya1tdKTogbnVtYmVyIHwgbnVtYmVyW10ge1xuICAgICAgICB0aGlzLm1pbiA9IDA7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5zdGVwID0gMTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb25zKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9ucyh2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBTbGlkZXJUaWNrTWFya1tdKTogbnVtYmVyIHwgbnVtYmVyW10ge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFya1tdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlID8gWzAsIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFdIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoZmlyc3RIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoc2Vjb25kSGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZEhhbmRsZSA9IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEhhbmRsZVBvc2l0aW9uID0gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBmaXJzdEhhbmRsZS52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRIYW5kbGVQb3NpdGlvbiA9IHRoaXMuY3VzdG9tVmFsdWVzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gc2Vjb25kSGFuZGxlLnZhbHVlKTtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXhlcyA9IFtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZVBvc2l0aW9uID49IDAgPyBmaXJzdEhhbmRsZVBvc2l0aW9uIDogMCxcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGVQb3NpdGlvbiA+PSAwID8gc2Vjb25kSGFuZGxlUG9zaXRpb24gOiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5kZXhlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmaXJzdEhhbmRsZSA9IHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoZmlyc3RIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gZmlyc3RIYW5kbGUudmFsdWUpIHx8IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luc3RhbmNlT2ZDdXN0b21WYWx1ZShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBTbGlkZXJDdXN0b21WYWx1ZSB7XG4gICAgICAgIHJldHVybiAhIW9iamVjdCAmJiAndmFsdWUnIGluIG9iamVjdCAmJiAnbGFiZWwnIGluIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvSW50ZXJhY3Rpb25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcmFuZ2VIYW5kbGUxRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9yYW5nZUhhbmRsZTJGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRIb3ZlcmVkJCxcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCRcbiAgICAgICAgXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgbWFwKChzdGF0ZXMpID0+IHN0YXRlcy5zb21lKEJvb2xlYW4pKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgZm9jdXNlZCwgY2hlY2sgZm9yIHRoZSBlZGdlIGNhc2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gaG92ZXIgaXMgb24gdGhlIGZkLXBvcG92ZXItYm9keSwgdGhhdCBpcyBhIHBhcmVudCBmb3IgdGhlIHRvb2x0aXAuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gdHJ1ZSwgd2hlbiBob3ZlcmluZyB0aGUgZ2FwIGJldHdlZW4gaGFuZGxlIGFuZCB0aGUgdG9vbHRpcC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUG9wb3ZlckhvdmVyZWQoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcnMuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5vcGVuKCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0UHJlZml4KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJzLmZvckVhY2goKHBvcG92ZXIpID0+IHBvcG92ZXIuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gcmVzZXQgZGVmYXVsdCBwcmVmaXggb24gbGVhdmluZyB0aGUgc2xpZGVyICovXG4gICAgcHJpdmF0ZSBfcmVzZXRQcmVmaXgoKTogdm9pZCB7XG4gICAgICAgIC8vIHJlc2V0IHByZWZpeCBzdHJpbmcgZm9yIHNsaWRlciBjdXJyZW50IHZhbHVlIHRoYXQgbmVlZCB0byBiZSBhbm5vdW5jZWRcbiAgICAgICAgdGhpcy5fdXNlU2xpZGVyVmFsdWVQcmVmaXggPSB0cnVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoZWNrcyB3aGV0aGVyIGlucHV0IHBvcG92ZXIgZWxlbWVudCBpcyBob3ZlcmVkLlxuICAgICAqIFdpbGwgYWxzbyByZXR1cm4gdHJ1ZSwgd2hlbiBob3ZlcmluZyB0aGUgZ2FwIGJldHdlZW4gaGFuZGxlIGFuZCB0aGUgdG9vbHRpcC5cbiAgICAgKiBJZiB5ZXMsIHJldHVybnMgXCJ0cnVlXCIgaW5zdGFudGx5IGFuZCBcImZhbHNlXCIgb25jZSBpdCdzIG5vdCBob3ZlcmVkIGFueW1vcmUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNQb3BvdmVySG92ZXJlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckJvZHkgPSB0aGlzLl9zbGlkZXJUb29sdGlwV3JhcHBlcnMuZmlyc3Q/Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnZmQtcG9wb3Zlci1ib2R5Jyk7XG4gICAgICAgIGlmIChwb3BvdmVyQm9keT8ubWF0Y2hlcygnOmhvdmVyJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQocG9wb3ZlckJvZHksICdtb3VzZWxlYXZlJykucGlwZShtYXBUbyhmYWxzZSksIHRha2UoMSksIHN0YXJ0V2l0aCh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX19pbm5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfaXNSYW5nZSA/IHJhbmdlTW9kZSA6IHNpbmdsZU1vZGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX3RyYWNrXCIgKGNsaWNrKT1cIm9uVHJhY2tDbGljaygkZXZlbnQpXCIgI3RyYWNrPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2lzUmFuZ2UgPyByYW5nZU1vZGVUcmFjayA6IHNpbmdsZU1vZGVUcmFja1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdGljay13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2tzXCIgKGNsaWNrKT1cIm9uVHJhY2tDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RpY2tzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGljayBvZiBfdGlja01hcmtzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX190aWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInRpY2sucG9zaXRpb24gfHwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX190aWNrLS1pbi1yYW5nZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaGlkZVByb2dyZXNzQmFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9pc1JhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGljay52YWx1ZSA+PSBfcG9zaXRpb25bMF0gJiYgdGljay52YWx1ZSA8PSBfcG9zaXRpb25bMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aWNrLnZhbHVlIDw9IF9wb3NpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX19sYWJlbHNcIiAqbmdJZj1cInNob3dUaWNrcyAmJiBzaG93VGlja3NMYWJlbHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRpY2sgb2YgX3RpY2tNYXJrczsgaW5kZXggYXMgaTsgbGFzdCBhcyBsYXN0OyBmaXJzdCBhcyBmaXJzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaXJzdCB8fCBsYXN0IHx8IGkgJSB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJ0aWNrLnBvc2l0aW9uIHx8IDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlTW9kZVRyYWNrPlxuICAgIDxkaXYgKm5nSWY9XCIhaGlkZVByb2dyZXNzQmFyXCIgY2xhc3M9XCJmZC1zbGlkZXJfX3RyYWNrLXJhbmdlXCIgW3N0eWxlLndpZHRoLiVdPVwiX3Byb2dyZXNzXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JhbmdlTW9kZVRyYWNrPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhaGlkZVByb2dyZXNzQmFyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX3RyYWNrLXJhbmdlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiX3JhbmdlUHJvZ3Jlc3NcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9oYW5kbGUxUG9zaXRpb24gPCBfaGFuZGxlMlBvc2l0aW9uID8gX2hhbmRsZTFQb3NpdGlvbiA6IF9oYW5kbGUyUG9zaXRpb25cIlxuICAgID48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlTW9kZT5cbiAgICA8ZGl2XG4gICAgICAgICNoYW5kbGVcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX2hhbmRsZS0tbGddPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCB8fCAnY29yZVNsaWRlci5zaW5nbGVNaW5NYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgW2ZkUG9wb3ZlclRyaWdnZXJdPVwidG9vbHRpcE1vZGUgPyBzaW5nbGVTbGlkZXJQb3BvdmVyIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVtaW5EZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWluVmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVtYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWF4VmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5zaW5nbGVWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUilcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5zaW5nbGVWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUilcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfcHJvZ3Jlc3NcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uSGFuZGxlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9oYW5kbGVGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX2hhbmRsZUZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgID48L2Rpdj5cblxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgICNzaW5nbGVTbGlkZXJQb3BvdmVyXG4gICAgICAgIFt0cmlnZ2Vyc109XCJbXVwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImhhbmRsZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1vZGVcIlxuICAgICAgICBjbGFzcz1cImZkLXBvcG92ZXItLXNsaWRlclwiXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtcG9wb3ZlclwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHBvcG92ZXJJbm5lcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHRhcmdldDogX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSLCBwb3NpdGlvbjogX3Bvc2l0aW9uIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JhbmdlTW9kZT5cbiAgICA8ZGl2XG4gICAgICAgICNyYW5nZUhhbmRsZTFcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX2hhbmRsZS0tbGddPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCB8fCAnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFNaW5NYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgW2ZkUG9wb3ZlclRyaWdnZXJdPVwidG9vbHRpcE1vZGUgPyByYW5nZVNsaWRlclBvcG92ZXIxIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVtaW5EZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWluVmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVtYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWF4VmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTFQb3NpdGlvblwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJfcmFuZ2VIYW5kbGUxRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9yYW5nZUhhbmRsZTFGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICAjcmFuZ2VIYW5kbGUyXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19oYW5kbGVcIlxuICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX19oYW5kbGUtLWxnXT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgfHwgJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyTWluTWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFtmZFBvcG92ZXJUcmlnZ2VyXT1cInRvb2x0aXBNb2RlID8gcmFuZ2VTbGlkZXJQb3BvdmVyMiA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlbWluRGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1pblZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlbWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1heFZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMilcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9oYW5kbGUyUG9zaXRpb25cIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uSGFuZGxlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwiX3JhbmdlSGFuZGxlMkZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfcmFuZ2VIYW5kbGUyRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgID48L2Rpdj5cblxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgICNyYW5nZVNsaWRlclBvcG92ZXIxXG4gICAgICAgIFt0cmlnZ2Vyc109XCJbXVwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cInJhbmdlSGFuZGxlMVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1vZGVcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXBvcG92ZXJcIlxuICAgICAgICBjbGFzcz1cImZkLXBvcG92ZXItLXNsaWRlclwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHBvcG92ZXJJbm5lcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHRhcmdldDogX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxLCBwb3NpdGlvbjogX2hhbmRsZTFWYWx1ZSB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1wb3BvdmVyPlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3JhbmdlU2xpZGVyUG9wb3ZlcjJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwicmFuZ2VIYW5kbGUyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtcG9wb3ZlclwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIsIHBvc2l0aW9uOiBfaGFuZGxlMlZhbHVlIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BvcG92ZXJJbm5lciBsZXQtdGFyZ2V0PVwidGFyZ2V0XCIgbGV0LXBvc2l0aW9uPVwicG9zaXRpb25cIj5cbiAgICA8ZGl2XG4gICAgICAgICNzbGlkZXJUb29sdGlwV3JhcHBlclxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC13cmFwcGVyXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJfcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJC5uZXh0KGZhbHNlKVwiXG4gICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKGN1c3RvbVZhbHVlcyAmJiBjdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkgfHwgdG9vbHRpcE1vZGUgPT09ICdyZWFkb25seSdcIiBjbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcFwiPlxuICAgICAgICAgICAge3sgY3VzdG9tVmFsdWVzICYmIGN1c3RvbVZhbHVlcy5sZW5ndGggPiAwID8gY3VzdG9tVmFsdWVzW3Bvc2l0aW9uXS5sYWJlbCA6IF9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XSB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNwb3BvdmVySW5wdXRGaWVsZFxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgZmRrT25seURpZ2l0c1xuICAgICAgICAgICAgW2RlY2ltYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguY2hdPVwiKCcnICsgX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdKS5sZW5ndGggKyAyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQgZmQtc2xpZGVyLS10b29sdGlwIHt7IF9wb3BvdmVySW5wdXRGaWVsZENsYXNzIH19XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tVmFsdWVzPy5sZW5ndGggPT09IDAgJiYgdG9vbHRpcE1vZGUgPT09ICdlZGl0YWJsZSdcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF1cIlxuICAgICAgICAgICAgKGJsdXIpPVwiX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHBvcG92ZXJJbnB1dEZpZWxkLnZhbHVlLCB0YXJnZXQpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl91cGRhdGVWYWx1ZUZyb21JbnB1dChwb3BvdmVySW5wdXRGaWVsZC52YWx1ZSwgdGFyZ2V0KVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
775
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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U0FBUztzQkFEUixLQUFLO2dCQUtGLEdBQUc7c0JBRE4sS0FBSztnQkFlRixHQUFHO3NCQUROLEtBQUs7Z0JBZUYsSUFBSTtzQkFEUCxLQUFLO2dCQWVGLElBQUk7c0JBRFAsS0FBSztnQkFVRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQVVOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFVTixvQ0FBb0M7c0JBRG5DLEtBQUs7Z0JBVU4sb0NBQW9DO3NCQURuQyxLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFlTixPQUFPO3NCQUROLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLeEMsTUFBTTtzQkFETCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3pDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUsvQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLL0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQjtnQkFLOUIsc0JBQXNCO3NCQURyQixZQUFZO3VCQUFDLHNCQUFzQjtnQkFXcEMsUUFBUTtzQkFEUCxXQUFXO3VCQUFDLHdCQUF3QjtnQkF5SnJDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIG1hcFRvLFxuICAgIHNraXAsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgU2xpZGVyQ29udHJvbFZhbHVlLFxuICAgIFNsaWRlckN1c3RvbVZhbHVlLFxuICAgIFNsaWRlclJhbmdlSGFuZGxlcyxcbiAgICBTbGlkZXJUaWNrTWFyayxcbiAgICBTbGlkZXJWYWx1ZVRhcmdldHNcbn0gZnJvbSAnLi9zbGlkZXIubW9kZWwnO1xuaW1wb3J0IHsgTUlOX0RJU1RBTkNFX0JFVFdFRU5fVElDS1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzLCBDc3NDbGFzc0J1aWxkZXIsIEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgY29uc3QgU0xJREVSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbmxldCBzbGlkZXJJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtc2xpZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBTTElERVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKFNsaWRlckNvbXBvbmVudCksXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoe1xuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVCxcbiAgICAgICAgICAgIG1vZGlmaWVyczogeyBbQ29udGVudERlbnNpdHlNb2RlLkNPWlldOiAnZmQtc2xpZGVyLS1sZycgfVxuICAgICAgICB9KVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKG1vdXNlZW50ZXIpJzogJ3RoaXMuX2NvbXBvbmVudEhvdmVyZWQkLm5leHQodHJ1ZSknLFxuICAgICAgICAnKG1vdXNlbGVhdmUpJzogJ3RoaXMuX2NvbXBvbmVudEhvdmVyZWQkLm5leHQoZmFsc2UpJyxcbiAgICAgICAgJyhmb2N1c291dCknOiAnb25Ub3VjaGVkKCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBDc3NDbGFzc0J1aWxkZXIsIEZvcm1JdGVtQ29udHJvbFxue1xuICAgIC8qKiBTbGlkZXIgaWQsIGl0IGhhcyBzb21lIGRlZmF1bHQgdmFsdWUgaWYgbm90IHNldCwgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gJ2ZkLXNsaWRlci1pZC0nICsgc2xpZGVySWQrKztcblxuICAgIC8qKiBVc2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogSWQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHMgc2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIHNsaWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBNaW5pbXVtIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX21pbik7XG4gICAgICAgIGlmICgoKHRoaXMubWF4IC0gbmV3VmFsdWUpIC8gdGhpcy5zdGVwKSAlIDEgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIE1heGltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgaWYgKCgobmV3VmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG5cbiAgICAvKiogU3RlcCB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fc3RlcCk7XG4gICAgICAgIGlmICgoKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gbmV3VmFsdWUpICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKiogSnVtcCB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBqdW1wKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fanVtcCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9qdW1wKTtcbiAgICB9XG4gICAgZ2V0IGp1bXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2p1bXA7XG4gICAgfVxuXG4gICAgLyoqIFB1dCBhIGxhYmVsIG9uIGV2ZXJ5IE4tdGggdGlja21hcmsuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGlja21hcmtzQmV0d2VlbkxhYmVscyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscyk7XG4gICAgfVxuICAgIGdldCB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsaWRlciBtb2RlLlxuICAgICAqIE9wdGlvbnMgaW5jbHVkZTogJ3NpbmdsZScgfCAncmFuZ2UnXG4gICAgICogVGhlIGRlZmF1bHQgaXMgc2V0IHRvICdzaW5nbGUnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtb2RlOiAnc2luZ2xlJyB8ICdyYW5nZScgPSAnc2luZ2xlJztcblxuICAgIC8qKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRpY2sgbWFya3MuICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGlja3MgPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRpY2sgbWFyayBsYWJlbHMuIE11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICdzaG93VGlja3MnICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGlja3NMYWJlbHMgPSBmYWxzZTtcblxuICAgIC8qKiBBcnJheSBvZiBjdXN0b20gdmFsdWVzIHRvIHVzZSBmb3IgU2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tVmFsdWVzOiBTbGlkZXJDdXN0b21WYWx1ZVtdID0gW107XG5cbiAgICAvKiogVG9vbHRpcCBjYW4gYmUgdHdvIHR5cGVzLCAncmVhZG9ubHknIHRvIGRpc3BsYXkgdmFsdWUgYW5kICdlZGl0YWJsZScgdG8gbWFrZSB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIGRpc3BsYXkgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICB0b29sdGlwTW9kZTogJ3JlYWRvbmx5JyB8ICdlZGl0YWJsZSc7XG5cbiAgICAvKiogSGlkZXMgZGlzcGxheSBvZiBjb2xvcmVkIHByb2dyZXNzIGJhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVQcm9ncmVzc0JhciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogc2xpZGVyIGN1cnJlbnQgdmFsdWUgdmVyYm9zZSBzdHJpbmcuXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciB1c2VkLCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMSBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gcmFuZ2Ugc2xpZGVyIGhhbmRsZSAyIGN1cnJlbnQgdmFsdWUgc3VwcG9ydGluZyBzdHJpbmdcbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogKiBAZGVwcmVjYXRlZCBubyBsb25nZXIgdXNlZCwgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9zaXRpb246IG51bWJlciB8IG51bWJlcltdID0gMDtcblxuICAgIC8qKiBDb250cm9sIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBTbGlkZXJDb250cm9sVmFsdWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3BvcG92ZXJWYWx1ZVJlZigpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5fcG9zaXRpb24gYXMgbnVtYmVyLCB0aGlzLl9oYW5kbGUxVmFsdWUsIHRoaXMuX2hhbmRsZTJWYWx1ZV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0cmFjaycsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHRyYWNrRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdoYW5kbGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBoYW5kbGU6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTEnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByYW5nZUhhbmRsZTE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByYW5nZUhhbmRsZTI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKFBvcG92ZXJDb21wb25lbnQpXG4gICAgX3BvcG92ZXJzOiBRdWVyeUxpc3Q8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3NsaWRlclRvb2x0aXBXcmFwcGVyJylcbiAgICBfc2xpZGVyVG9vbHRpcFdyYXBwZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSB8IG51bWJlcltdID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2dyZXNzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1zbGlkZXItLXJhbmdlJylcbiAgICBfaXNSYW5nZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMVBvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTJQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUxVmFsdWUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMlZhbHVlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3JhbmdlUHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdGlja01hcmtzOiBTbGlkZXJUaWNrTWFya1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXJWYWx1ZVRhcmdldHMgPSBTbGlkZXJWYWx1ZVRhcmdldHM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3BvdmVySW5wdXRGaWVsZENsYXNzID0gYGZkLXNsaWRlci1wb3BvdmVyLWlucHV0LSR7c2xpZGVySWR9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzUnRsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogd2hldGhlciB0byB1c2UgdmFsdWUgd2l0aCBhIHByZWZpeCBmb3IgYW5ub3VuY2luZ1xuICAgICAqL1xuICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21pbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heCA9IDEwMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2p1bXAgPSAxMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlc0J5U3RlcHM6IG51bWJlcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfY29tcG9uZW50SG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2hhbmRsZUZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yYW5nZUhhbmRsZTFGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmFuZ2VIYW5kbGUyRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuX29uUmVzaXplKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc0J5U3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tJc0luUmFuZ2VNb2RlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIHRoaXMuX3JlY2FsY0hhbmRsZVBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRWYWx1ZW5vdyhwb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10sIHNsaWRlclZhbHVlVGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmN1c3RvbVZhbHVlc1twb3NpdGlvbiBhcyBudW1iZXJdLmxhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX3BvcG92ZXJWYWx1ZVJlZltzbGlkZXJWYWx1ZVRhcmdldF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWluVmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1pbiBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5taW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWF4VmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1heCBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1zbGlkZXInLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA/ICdpcy1kaXNhYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2UgPyAnZmQtc2xpZGVyLS1yYW5nZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpY2tzICYmIHRoaXMuc2hvd1RpY2tzTGFiZWxzID8gJ2ZkLXNsaWRlci0td2l0aC1sYWJlbHMnIDogJycsXG4gICAgICAgICAgICB0aGlzLmNsYXNzLFxuICAgICAgICAgICAgdGhpcy5fcGxhdGZvcm0uRURHRSB8fCB0aGlzLl9wbGF0Zm9ybS5UUklERU5UID8gJ2ZkLXNsaWRlcl9fYWx0ZXJuYXRpdmUtdGljay13aWR0aCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudCkpO1xuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlRnJvbU1vdXNlbW92ZSA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2Vtb3ZlJywgKG1vdmVFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50KSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50LCBmYWxzZSkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tTW91c2V1cCA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlRnJvbU1vdXNlbW92ZSgpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVGcm9tTW91c2V1cCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXM6IG51bWJlcltdID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVywgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFXTtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgYWxsb3dlZEtleXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmp1bXAgOiB0aGlzLnN0ZXA7XG4gICAgICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHByZXZWYWx1ZSA9IHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlcjtcbiAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXMgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlZhbHVlID0gdGhpcy5faGFuZGxlMVZhbHVlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwcmV2VmFsdWUgPSB0aGlzLl9oYW5kbGUyVmFsdWU7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlICsgZGlmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBwcmV2VmFsdWUgLSBkaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSAtIGRpZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1ZhbHVlID0gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlIGFzIG51bWJlciwgIXRoaXMuX2lzUmFuZ2UpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIG5ld1ZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXBkYXRlVmFsdWVGcm9tSW5wdXQodmFsdWU6IHN0cmluZywgdGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUoK3ZhbHVlKSBhcyBudW1iZXI7XG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSAmJiB0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0ID09PSBTbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikge1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlLCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlKCh2YWx1ZSA/PyBbMC4wXSkgYXMgbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGUoKHZhbHVlID8/IDApIGFzIG51bWJlciB8IFNsaWRlclRpY2tNYXJrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fcG9wb3ZlcnMuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5yZWZyZXNoUG9zaXRpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIHRha2VDdXN0b21WYWx1ZSA9IHRydWUpOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgd2lkdGggfSA9IHRoaXMudHJhY2tFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgcGVyY2VudGFnZSA9IChldmVudC5jbGllbnRYIC0gbGVmdCkgLyB3aWR0aDtcblxuICAgICAgICBpZiAodGhpcy5faXNSdGwpIHtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxIC0gcGVyY2VudGFnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5taW4gKyBwZXJjZW50YWdlICogKHRoaXMubWF4IC0gdGhpcy5taW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzTmV3VmFsdWUobmV3VmFsdWUsIHRha2VDdXN0b21WYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9jZXNzTmV3VmFsdWUobmV3VmFsdWU6IG51bWJlciwgdGFrZUN1c3RvbVZhbHVlID0gdHJ1ZSk6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHtcbiAgICAgICAgaWYgKG5ld1ZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VzZVNsaWRlclZhbHVlUHJlZml4ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICBjb25zdCBzdGVwRGlmZkFycmF5ID0gdGhpcy5fdmFsdWVzQnlTdGVwc1xuICAgICAgICAgICAgLm1hcCgoc3RlcFZhbHVlKSA9PiAoeyBkaWZmOiBNYXRoLmFicyhzdGVwVmFsdWUgLSBuZXdWYWx1ZSksIHZhbHVlOiBzdGVwVmFsdWUgfSkpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5kaWZmIC0gYi5kaWZmKTtcbiAgICAgICAgbGV0IHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IG51bWJlciA9IHN0ZXBEaWZmQXJyYXlbMF0udmFsdWU7XG5cbiAgICAgICAgaWYgKHRha2VDdXN0b21WYWx1ZSAmJiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY3VzdG9tVmFsdWVzW3ZhbHVlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHZhbHVlLCB0cnVlKTtcblxuICAgICAgICBpZiAoaGFuZGxlSW5kZXggPT09IFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdCkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUxUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVJbmRleCA9PT0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZCkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCk6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSB7XG4gICAgICAgIGxldCByYW5nZUxvd2VyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlSGlnaGVyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlVmFsdWU6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSA9IFtcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKSxcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKVxuICAgICAgICBdO1xuXG4gICAgICAgIHJhbmdlTG93ZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMF07XG4gICAgICAgIHJhbmdlSGlnaGVyVmFsdWUgPSByYW5nZVZhbHVlWzFdO1xuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmN1c3RvbVZhbHVlc1tyYW5nZVZhbHVlWzBdXSB8fCB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMuY3VzdG9tVmFsdWVzW3JhbmdlVmFsdWVbMV1dIHx8IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICByYW5nZVZhbHVlID0gW21pbiwgbWF4XTtcbiAgICAgICAgICAgIHJhbmdlTG93ZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMF0ubGFiZWw7XG4gICAgICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKCdyYW5nZSB2YWx1ZSBiZXR3ZWVuICcgKyByYW5nZUxvd2VyVmFsdWUgKyAnIGFuZCAnICsgcmFuZ2VIaWdoZXJWYWx1ZSwgJ3BvbGl0ZScpO1xuICAgICAgICByZXR1cm4gcmFuZ2VWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uUmVzaXplKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzQnlTdGVwcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCArIDEgfSwgKF8sIGkpID0+XG4gICAgICAgICAgICAgICAgTnVtYmVyKCh0aGlzLm1pbiArIGkgKiB0aGlzLnN0ZXApLnRvRml4ZWQoMikpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0VGlja01hcmtzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd1RpY2tzKSB7XG4gICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSBbXTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlc0xlbmd0aCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSB0aGlzLmN1c3RvbVZhbHVlcy5tYXAoKGl0ZW0sIGkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogKDEwMCAvIGN1c3RvbVZhbHVlc0xlbmd0aCkgKiBpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMubWF4IC0gdGhpcy5taW47XG4gICAgICAgICAgICBjb25zdCB0aWNrTWFya3NDb3VudCA9IHRvdGFsIC8gdGhpcy5zdGVwICsgMTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXhUaWNrTWFya3NOdW1iZXIgIT09IHVuZGVmaW5lZCAmJiB0aWNrTWFya3NDb3VudCA+IHRoaXMuX21heFRpY2tNYXJrc051bWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgeyBwb3NpdGlvbjogMCwgdmFsdWU6IDAsIGxhYmVsOiBgJHt0aGlzLm1pbn1gIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcG9zaXRpb246IDEwMCwgdmFsdWU6IHRvdGFsLCBsYWJlbDogYCR7dGhpcy5tYXh9YCB9XG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRpY2tNYXJrc0NvdW50ICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRpY2tNYXJrc0NvdW50IH0sIChfLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZChpICogdGhpcy5zdGVwICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodmFsdWUgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBwb3NpdGlvbiwgbGFiZWw6IGAke3RoaXMubWluICsgdmFsdWV9YCB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfbWF4VGlja01hcmtzTnVtYmVyKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy50cmFja0VsIHx8ICF0aGlzLnRyYWNrRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyBNSU5fRElTVEFOQ0VfQkVUV0VFTl9USUNLUyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjUHJvZ3Jlc3ModmFsdWU6IG51bWJlciwgc2tpcFJ0bCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHByb2dyZXNzID0gKCh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG5cbiAgICAgICAgaWYgKCFza2lwUnRsICYmIHRoaXMuX2lzUnRsKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCAtIHByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2dyZXNzID4gMTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWNhbGNIYW5kbGVQb3NpdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUxUG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5faGFuZGxlMVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJQb3NpdGlvbiA9IHRoaXMuX2NhbGNQcm9ncmVzcyh0aGlzLl9oYW5kbGUyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VQcm9ncmVzcyA9IE1hdGguYWJzKHRoaXMuX2hhbmRsZTJQb3NpdGlvbiAtIHRoaXMuX2hhbmRsZTFQb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX2NhbGNQcm9ncmVzcyh0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXIsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tJc0luUmFuZ2VNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1JhbmdlID0gdGhpcy5tb2RlID09PSAncmFuZ2UnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJ0bCBjaGFuZ2Ugc3Vic2NyaXB0aW9uICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SdGwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fcnRsU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzUnRsID0gaXNSdGw7XG4gICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZSh2YWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmspOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWUodmFsdWUgYXMgU2xpZGVyVGlja01hcmspO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbml0U2luZ2VNb2RlRGVmYXVsdChjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5taW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaW5nZU1vZGVEZWZhdWx0KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX2NhbGNQcm9ncmVzcyh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlV2l0aEN1c3RvbVZhbHVlKHNsaWRlclRpY2tNYXJrOiBTbGlkZXJUaWNrTWFyayk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbihzbGlkZXJUaWNrTWFyaykgYXMgbnVtYmVyKSB8fCB0aGlzLm1pbjtcblxuICAgICAgICB0aGlzLl9pbml0U2luZ2VNb2RlRGVmYXVsdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlKHZhbHVlOiBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWVzKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrW10pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzBdLCB0aGlzLm1pbik7XG4gICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzFdLCB0aGlzLm1heCk7XG5cbiAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZURlZmF1bHQoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRSYW5nZU1vZGVEZWZhdWx0KFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXTogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV07XG5cbiAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdCwgZmlyc3RIYW5kbGUpO1xuICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZCwgc2Vjb25kSGFuZGxlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRSYW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWVzKFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXTogU2xpZGVyVGlja01hcmtbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9uKFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSkgfHwgW3RoaXMubWluLCB0aGlzLm1heF07XG5cbiAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZURlZmF1bHQodmFsdWUgYXMgbnVtYmVyW10pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24odmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbnModmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAodmFsdWUgYXMgU2xpZGVyVGlja01hcmtbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSYW5nZSA/IFswLCB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXSA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKGZpcnN0SGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlID0gdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKHNlY29uZEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlyc3RIYW5kbGVQb3NpdGlvbiA9IHRoaXMuY3VzdG9tVmFsdWVzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gZmlyc3RIYW5kbGUudmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSGFuZGxlUG9zaXRpb24gPSB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHNlY29uZEhhbmRsZS52YWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZXMgPSBbXG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGVQb3NpdGlvbiA+PSAwID8gZmlyc3RIYW5kbGVQb3NpdGlvbiA6IDAsXG4gICAgICAgICAgICAgICAgc2Vjb25kSGFuZGxlUG9zaXRpb24gPj0gMCA/IHNlY29uZEhhbmRsZVBvc2l0aW9uIDogdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZmlyc3RIYW5kbGUgPSB2YWx1ZSBhcyBTbGlkZXJUaWNrTWFyaztcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKGZpcnN0SGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlID0gdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZpcnN0SGFuZGxlLnZhbHVlKSB8fCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgU2xpZGVyQ3VzdG9tVmFsdWUge1xuICAgICAgICByZXR1cm4gISFvYmplY3QgJiYgJ3ZhbHVlJyBpbiBvYmplY3QgJiYgJ2xhYmVsJyBpbiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlSGFuZGxlMUZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcmFuZ2VIYW5kbGUyRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50SG92ZXJlZCQsXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgIG1hcCgoc3RhdGVzKSA9PiBzdGF0ZXMuc29tZShCb29sZWFuKSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChmb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IGZvY3VzZWQsIGNoZWNrIGZvciB0aGUgZWRnZSBjYXNlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGhvdmVyIGlzIG9uIHRoZSBmZC1wb3BvdmVyLWJvZHksIHRoYXQgaXMgYSBwYXJlbnQgZm9yIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRydWUsIHdoZW4gaG92ZXJpbmcgdGhlIGdhcCBiZXR3ZWVuIGhhbmRsZSBhbmQgdGhlIHRvb2x0aXAuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1BvcG92ZXJIb3ZlcmVkKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJzLmZvckVhY2goKHBvcG92ZXIpID0+IHBvcG92ZXIub3BlbigpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFByZWZpeCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIHJlc2V0IGRlZmF1bHQgcHJlZml4IG9uIGxlYXZpbmcgdGhlIHNsaWRlciAqL1xuICAgIHByaXZhdGUgX3Jlc2V0UHJlZml4KCk6IHZvaWQge1xuICAgICAgICAvLyByZXNldCBwcmVmaXggc3RyaW5nIGZvciBzbGlkZXIgY3VycmVudCB2YWx1ZSB0aGF0IG5lZWQgdG8gYmUgYW5ub3VuY2VkXG4gICAgICAgIHRoaXMuX3VzZVNsaWRlclZhbHVlUHJlZml4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVja3Mgd2hldGhlciBpbnB1dCBwb3BvdmVyIGVsZW1lbnQgaXMgaG92ZXJlZC5cbiAgICAgKiBXaWxsIGFsc28gcmV0dXJuIHRydWUsIHdoZW4gaG92ZXJpbmcgdGhlIGdhcCBiZXR3ZWVuIGhhbmRsZSBhbmQgdGhlIHRvb2x0aXAuXG4gICAgICogSWYgeWVzLCByZXR1cm5zIFwidHJ1ZVwiIGluc3RhbnRseSBhbmQgXCJmYWxzZVwiIG9uY2UgaXQncyBub3QgaG92ZXJlZCBhbnltb3JlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzUG9wb3ZlckhvdmVyZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJCb2R5ID0gdGhpcy5fc2xpZGVyVG9vbHRpcFdyYXBwZXJzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2ZkLXBvcG92ZXItYm9keScpO1xuICAgICAgICBpZiAocG9wb3ZlckJvZHk/Lm1hdGNoZXMoJzpob3ZlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHBvcG92ZXJCb2R5LCAnbW91c2VsZWF2ZScpLnBpcGUobWFwVG8oZmFsc2UpLCB0YWtlKDEpLCBzdGFydFdpdGgodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9faW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2lzUmFuZ2UgPyByYW5nZU1vZGUgOiBzaW5nbGVNb2RlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190cmFja1wiIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiICN0cmFjaz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9pc1JhbmdlID8gcmFuZ2VNb2RlVHJhY2sgOiBzaW5nbGVNb2RlVHJhY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2std3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190aWNrc1wiIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUaWNrc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRpY2sgb2YgX3RpY2tNYXJrczsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fdGlja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJ0aWNrLnBvc2l0aW9uIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9fdGljay0taW4tcmFuZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWhpZGVQcm9ncmVzc0JhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfaXNSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRpY2sudmFsdWUgPj0gX3Bvc2l0aW9uWzBdICYmIHRpY2sudmFsdWUgPD0gX3Bvc2l0aW9uWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGljay52YWx1ZSA8PSBfcG9zaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fbGFiZWxzXCIgKm5nSWY9XCJzaG93VGlja3MgJiYgc2hvd1RpY2tzTGFiZWxzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWNrIG9mIF90aWNrTWFya3M7IGluZGV4IGFzIGk7IGxhc3QgYXMgbGFzdDsgZmlyc3QgYXMgZmlyc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlyc3QgfHwgbGFzdCB8fCBpICUgdGlja21hcmtzQmV0d2VlbkxhYmVscyA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwidGljay5wb3NpdGlvbiB8fCAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZU1vZGVUcmFjaz5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVQcm9ncmVzc0JhclwiIGNsYXNzPVwiZmQtc2xpZGVyX190cmFjay1yYW5nZVwiIFtzdHlsZS53aWR0aC4lXT1cIl9wcm9ncmVzc1wiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyYW5nZU1vZGVUcmFjaz5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWhpZGVQcm9ncmVzc0JhclwiXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX190cmFjay1yYW5nZVwiXG4gICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIl9yYW5nZVByb2dyZXNzXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMVBvc2l0aW9uIDwgX2hhbmRsZTJQb3NpdGlvbiA/IF9oYW5kbGUxUG9zaXRpb24gOiBfaGFuZGxlMlBvc2l0aW9uXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZU1vZGU+XG4gICAgPGRpdlxuICAgICAgICAjaGFuZGxlXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19oYW5kbGVcIlxuICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX19oYW5kbGUtLWxnXT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgfHwgJ2NvcmVTbGlkZXIuc2luZ2xlTWluTWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFtmZFBvcG92ZXJUcmlnZ2VyXT1cInRvb2x0aXBNb2RlID8gc2luZ2xlU2xpZGVyUG9wb3ZlciA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIidjb3JlU2xpZGVyLnNpbmdsZVZhbHVlbWluRGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1pblZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIidjb3JlU2xpZGVyLnNpbmdsZVZhbHVlbWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1heFZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX3Byb2dyZXNzXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9oYW5kbGVGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjc2luZ2xlU2xpZGVyUG9wb3ZlclxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJoYW5kbGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXBvcG92ZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUiwgcG9zaXRpb246IF9wb3NpdGlvbiB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyYW5nZU1vZGU+XG4gICAgPGRpdlxuICAgICAgICAjcmFuZ2VIYW5kbGUxXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19oYW5kbGVcIlxuICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX19oYW5kbGUtLWxnXT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgfHwgJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxTWluTWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFtmZFBvcG92ZXJUcmlnZ2VyXT1cInRvb2x0aXBNb2RlID8gcmFuZ2VTbGlkZXJQb3BvdmVyMSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlbWluRGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1pblZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlbWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1heFZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSkgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSlcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9oYW5kbGUxUG9zaXRpb25cIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uSGFuZGxlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwiX3JhbmdlSGFuZGxlMUZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfcmFuZ2VIYW5kbGUxRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgID48L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgI3JhbmdlSGFuZGxlMlxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMk1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHJhbmdlU2xpZGVyUG9wb3ZlcjIgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMilcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMlBvc2l0aW9uXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9yYW5nZUhhbmRsZTJGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX3JhbmdlSGFuZGxlMkZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjcmFuZ2VTbGlkZXJQb3BvdmVyMVxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJyYW5nZUhhbmRsZTFcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSwgcG9zaXRpb246IF9oYW5kbGUxVmFsdWUgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cblxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgICNyYW5nZVNsaWRlclBvcG92ZXIyXG4gICAgICAgIFt0cmlnZ2Vyc109XCJbXVwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cInJhbmdlSGFuZGxlMlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1vZGVcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXBvcG92ZXJcIlxuICAgICAgICBjbGFzcz1cImZkLXBvcG92ZXItLXNsaWRlclwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHBvcG92ZXJJbm5lcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHRhcmdldDogX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyLCBwb3NpdGlvbjogX2hhbmRsZTJWYWx1ZSB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3BvdmVySW5uZXIgbGV0LXRhcmdldD1cInRhcmdldFwiIGxldC1wb3NpdGlvbj1cInBvc2l0aW9uXCI+XG4gICAgPGRpdlxuICAgICAgICAjc2xpZGVyVG9vbHRpcFdyYXBwZXJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtd3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJfcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQubmV4dChmYWxzZSlcIlxuICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihjdXN0b21WYWx1ZXMgJiYgY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHx8IHRvb2x0aXBNb2RlID09PSAncmVhZG9ubHknXCIgY2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXBcIj5cbiAgICAgICAgICAgIHt7IGN1c3RvbVZhbHVlcyAmJiBjdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IGN1c3RvbVZhbHVlc1twb3NpdGlvbl0ubGFiZWwgOiBfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF0gfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjcG9wb3ZlcklucHV0RmllbGRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIGZka09ubHlEaWdpdHNcbiAgICAgICAgICAgIFtkZWNpbWFsXT1cInRydWVcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLmNoXT1cIignJyArIF9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XSkubGVuZ3RoICsgMlwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0IGZkLXNsaWRlci0tdG9vbHRpcCB7eyBfcG9wb3ZlcklucHV0RmllbGRDbGFzcyB9fVwiXG4gICAgICAgICAgICAqbmdJZj1cImN1c3RvbVZhbHVlcz8ubGVuZ3RoID09PSAwICYmIHRvb2x0aXBNb2RlID09PSAnZWRpdGFibGUnXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdXCJcbiAgICAgICAgICAgIChibHVyKT1cIl91cGRhdGVWYWx1ZUZyb21JbnB1dChwb3BvdmVySW5wdXRGaWVsZC52YWx1ZSwgdGFyZ2V0KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfdXBkYXRlVmFsdWVGcm9tSW5wdXQocG9wb3ZlcklucHV0RmllbGQudmFsdWUsIHRhcmdldClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==