ontimize-web-ngx 15.5.1 → 15.6.0-next.1

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 (458) hide show
  1. package/esm2020/lib/components/app-header/o-app-header.component.mjs +4 -4
  2. package/esm2020/lib/components/app-header/o-app-header.module.mjs +5 -5
  3. package/esm2020/lib/components/app-sidenav/image/o-app-sidenav-image.component.mjs +4 -4
  4. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +4 -4
  5. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +4 -4
  6. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +4 -4
  7. package/esm2020/lib/components/app-sidenav/o-app-sidenav.module.mjs +5 -5
  8. package/esm2020/lib/components/bar-menu/locale-menu-item/o-locale-bar-menu-item.component.mjs +4 -4
  9. package/esm2020/lib/components/bar-menu/menu-group/o-bar-menu-group.component.mjs +4 -4
  10. package/esm2020/lib/components/bar-menu/menu-item/o-bar-menu-item.component.mjs +4 -4
  11. package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +4 -4
  12. package/esm2020/lib/components/bar-menu/menu-separator/o-bar-menu-separator.component.mjs +4 -4
  13. package/esm2020/lib/components/bar-menu/o-bar-menu-base.class.mjs +4 -4
  14. package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +4 -4
  15. package/esm2020/lib/components/bar-menu/o-bar-menu.module.mjs +5 -5
  16. package/esm2020/lib/components/bar-menu/o-base-menu-item.class.mjs +4 -4
  17. package/esm2020/lib/components/breadcrumb/o-breadcrumb.component.mjs +4 -4
  18. package/esm2020/lib/components/breadcrumb/o-breadcrumb.module.mjs +5 -5
  19. package/esm2020/lib/components/button/o-button.component.mjs +4 -4
  20. package/esm2020/lib/components/button/o-button.module.mjs +5 -5
  21. package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +4 -4
  22. package/esm2020/lib/components/button-toggle/o-button-toggle.component.mjs +4 -4
  23. package/esm2020/lib/components/button-toggle/o-button-toggle.module.mjs +5 -5
  24. package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +4 -4
  25. package/esm2020/lib/components/card-menu-item/o-card-menu-item.module.mjs +5 -5
  26. package/esm2020/lib/components/container/column/o-column.component.mjs +4 -4
  27. package/esm2020/lib/components/container/column/o-column.module.mjs +5 -5
  28. package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.component.mjs +4 -4
  29. package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.module.mjs +5 -5
  30. package/esm2020/lib/components/container/o-container-collapsible-component.class.mjs +4 -4
  31. package/esm2020/lib/components/container/o-container-component.class.mjs +4 -4
  32. package/esm2020/lib/components/container/row/o-row.component.mjs +4 -4
  33. package/esm2020/lib/components/container/row/o-row.module.mjs +5 -5
  34. package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.component.mjs +4 -4
  35. package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.module.mjs +5 -5
  36. package/esm2020/lib/components/contextmenu/context-menu/o-context-menu-content.component.mjs +4 -4
  37. package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +4 -4
  38. package/esm2020/lib/components/contextmenu/context-menu-group/o-context-menu-group.component.mjs +4 -4
  39. package/esm2020/lib/components/contextmenu/context-menu-item/o-context-menu-item.component.mjs +4 -4
  40. package/esm2020/lib/components/contextmenu/context-menu-separator/o-context-menu-separator.component.mjs +4 -4
  41. package/esm2020/lib/components/contextmenu/o-content-menu-base-item.class.mjs +4 -4
  42. package/esm2020/lib/components/contextmenu/o-context-menu-overlay.service.mjs +4 -4
  43. package/esm2020/lib/components/contextmenu/o-context-menu.component.mjs +4 -4
  44. package/esm2020/lib/components/contextmenu/o-context-menu.directive.mjs +4 -4
  45. package/esm2020/lib/components/contextmenu/o-context-menu.module.mjs +5 -5
  46. package/esm2020/lib/components/contextmenu/o-context-menu.service.mjs +4 -4
  47. package/esm2020/lib/components/dual-list-selector/dual-list-selector-item/date/o-dual-list-selector-date-item.component.mjs +4 -4
  48. package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +4 -4
  49. package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.module.mjs +5 -5
  50. package/esm2020/lib/components/expandable-container/o-expandable-container.component.mjs +4 -4
  51. package/esm2020/lib/components/expandable-container/o-expandable-container.module.mjs +5 -5
  52. package/esm2020/lib/components/filter-builder/filter-builder-menu/filter-builder-menu.component.mjs +4 -4
  53. package/esm2020/lib/components/filter-builder/o-filter-builder-clear.directive.mjs +4 -4
  54. package/esm2020/lib/components/filter-builder/o-filter-builder-query.directive.mjs +4 -4
  55. package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +4 -4
  56. package/esm2020/lib/components/filter-builder/o-filter-builder.module.mjs +5 -5
  57. package/esm2020/lib/components/form/guards/o-form-can-deactivate.guard.mjs +4 -4
  58. package/esm2020/lib/components/form/navigation/o-form-confirm-exit.service.mjs +4 -4
  59. package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +6 -5
  60. package/esm2020/lib/components/form/o-form.component.mjs +27 -13
  61. package/esm2020/lib/components/form/o-form.module.mjs +5 -5
  62. package/esm2020/lib/components/form/services/o-form-message.service.mjs +4 -4
  63. package/esm2020/lib/components/form/toolbar/o-form-toolbar.component.mjs +4 -4
  64. package/esm2020/lib/components/form/toolbar/o-form-toolbar.module.mjs +5 -5
  65. package/esm2020/lib/components/form-container/o-form-container.component.mjs +4 -4
  66. package/esm2020/lib/components/form-container/o-form-container.module.mjs +5 -5
  67. package/esm2020/lib/components/grid/grid-item/o-grid-item.component.mjs +4 -4
  68. package/esm2020/lib/components/grid/grid-item/o-grid-item.directive.mjs +4 -4
  69. package/esm2020/lib/components/grid/o-grid.component.mjs +5 -5
  70. package/esm2020/lib/components/grid/o-grid.module.mjs +5 -5
  71. package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +4 -4
  72. package/esm2020/lib/components/image/fullscreen/fullscreen-dialog.component.mjs +4 -4
  73. package/esm2020/lib/components/image/o-image.component.mjs +6 -6
  74. package/esm2020/lib/components/image/o-image.module.mjs +5 -5
  75. package/esm2020/lib/components/input/checkbox/o-checkbox.component.mjs +4 -4
  76. package/esm2020/lib/components/input/checkbox/o-checkbox.module.mjs +5 -5
  77. package/esm2020/lib/components/input/combo/combo-renderer/boolean/o-combo-renderer-boolean.component.mjs +4 -4
  78. package/esm2020/lib/components/input/combo/combo-renderer/currency/o-combo-renderer-currency.component.mjs +4 -4
  79. package/esm2020/lib/components/input/combo/combo-renderer/date/o-combo-renderer-date.component.mjs +4 -4
  80. package/esm2020/lib/components/input/combo/combo-renderer/icon/o-combo-renderer-icon.component.mjs +4 -4
  81. package/esm2020/lib/components/input/combo/combo-renderer/integer/o-combo-renderer-integer.component.mjs +4 -4
  82. package/esm2020/lib/components/input/combo/combo-renderer/o-combo-renderer.class.mjs +4 -4
  83. package/esm2020/lib/components/input/combo/combo-renderer/percentage/o-combo-renderer-percentage.component.mjs +4 -4
  84. package/esm2020/lib/components/input/combo/combo-renderer/real/o-combo-renderer-real.component.mjs +4 -4
  85. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -4
  86. package/esm2020/lib/components/input/combo/o-combo.component.mjs +4 -4
  87. package/esm2020/lib/components/input/combo/o-combo.module.mjs +5 -5
  88. package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +5 -5
  89. package/esm2020/lib/components/input/currency-input/o-currency-input.module.mjs +5 -5
  90. package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +4 -4
  91. package/esm2020/lib/components/input/date-input/o-date-input.module.mjs +5 -5
  92. package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +4 -4
  93. package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +5 -5
  94. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +4 -4
  95. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +4 -4
  96. package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +5 -5
  97. package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +4 -4
  98. package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +4 -4
  99. package/esm2020/lib/components/input/email-input/o-email-input.module.mjs +5 -5
  100. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +9 -5
  101. package/esm2020/lib/components/input/file-input/o-file-input.module.mjs +5 -5
  102. package/esm2020/lib/components/input/hour-input/o-hour-input.component.mjs +4 -4
  103. package/esm2020/lib/components/input/hour-input/o-hour-input.module.mjs +5 -5
  104. package/esm2020/lib/components/input/html-input/o-html-input.component.mjs +4 -4
  105. package/esm2020/lib/components/input/html-input/o-html-input.module.mjs +5 -5
  106. package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +4 -4
  107. package/esm2020/lib/components/input/integer-input/o-integer-input.module.mjs +5 -5
  108. package/esm2020/lib/components/input/listpicker/listpicker-renderer/currency/o-list-picker-renderer-currency.component.mjs +4 -4
  109. package/esm2020/lib/components/input/listpicker/listpicker-renderer/date/o-list-picker-renderer-date.component.mjs +4 -4
  110. package/esm2020/lib/components/input/listpicker/listpicker-renderer/integer/o-list-picker-renderer-integer.component.mjs +4 -4
  111. package/esm2020/lib/components/input/listpicker/listpicker-renderer/o-list-picker-renderer.class.mjs +4 -4
  112. package/esm2020/lib/components/input/listpicker/listpicker-renderer/percentage/o-list-picker-renderer-percentage.component.mjs +4 -4
  113. package/esm2020/lib/components/input/listpicker/listpicker-renderer/real/o-list-picker-renderer-real.component.mjs +4 -4
  114. package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +4 -4
  115. package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +4 -4
  116. package/esm2020/lib/components/input/listpicker/o-list-picker.module.mjs +5 -5
  117. package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +4 -4
  118. package/esm2020/lib/components/input/nif-input/o-nif-input.module.mjs +5 -5
  119. package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +4 -4
  120. package/esm2020/lib/components/input/o-form-service-component.class.mjs +20 -11
  121. package/esm2020/lib/components/input/password-input/o-password-input.component.mjs +4 -4
  122. package/esm2020/lib/components/input/password-input/o-password-input.module.mjs +5 -5
  123. package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +4 -4
  124. package/esm2020/lib/components/input/percent-input/o-percent-input.module.mjs +5 -5
  125. package/esm2020/lib/components/input/phone-input/data/country-code.mjs +4 -4
  126. package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +4 -4
  127. package/esm2020/lib/components/input/phone-input/o-phone-input.module.mjs +5 -5
  128. package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -4
  129. package/esm2020/lib/components/input/radio/o-radio.module.mjs +5 -5
  130. package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +4 -4
  131. package/esm2020/lib/components/input/real-input/o-real-input.module.mjs +5 -5
  132. package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +4 -4
  133. package/esm2020/lib/components/input/search-input/o-search-input.module.mjs +5 -5
  134. package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.component.mjs +4 -4
  135. package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.module.mjs +5 -5
  136. package/esm2020/lib/components/input/slider/o-slider.component.mjs +4 -4
  137. package/esm2020/lib/components/input/slider/o-slider.module.mjs +5 -5
  138. package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +4 -4
  139. package/esm2020/lib/components/input/text-input/o-text-input.module.mjs +5 -5
  140. package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +4 -4
  141. package/esm2020/lib/components/input/textarea-input/o-textarea-input.module.mjs +5 -5
  142. package/esm2020/lib/components/input/time-input/o-time-input.component.mjs +4 -4
  143. package/esm2020/lib/components/input/time-input/o-time-input.module.mjs +5 -5
  144. package/esm2020/lib/components/language-selector/o-language-selector.component.mjs +4 -4
  145. package/esm2020/lib/components/language-selector/o-language-selector.module.mjs +5 -5
  146. package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +4 -4
  147. package/esm2020/lib/components/list/list-item/o-list-item.directive.mjs +4 -4
  148. package/esm2020/lib/components/list/o-list.component.mjs +5 -5
  149. package/esm2020/lib/components/list/o-list.module.mjs +5 -5
  150. package/esm2020/lib/components/list/renderers/avatar/o-list-item-avatar.component.mjs +4 -4
  151. package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +4 -4
  152. package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +4 -4
  153. package/esm2020/lib/components/list/renderers/o-list-item-card-renderer.class.mjs +4 -4
  154. package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +4 -4
  155. package/esm2020/lib/components/list/renderers/text/o-list-item-text.component.mjs +4 -4
  156. package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +4 -4
  157. package/esm2020/lib/components/material/ckeditor/ck-editor.component.mjs +4 -4
  158. package/esm2020/lib/components/material/ckeditor/ck-editor.module.mjs +5 -5
  159. package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +4 -4
  160. package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.module.mjs +5 -5
  161. package/esm2020/lib/components/o-form-data-component.class.mjs +4 -4
  162. package/esm2020/lib/components/o-service-base-component.class.mjs +35 -24
  163. package/esm2020/lib/components/o-service-component.class.mjs +8 -8
  164. package/esm2020/lib/components/o-skeleton.component.mjs +4 -4
  165. package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +4 -4
  166. package/esm2020/lib/components/table/column/cell-editor/boolean/o-table-cell-editor-boolean.component.mjs +4 -4
  167. package/esm2020/lib/components/table/column/cell-editor/date/o-table-cell-editor-date.component.mjs +4 -4
  168. package/esm2020/lib/components/table/column/cell-editor/email/o-table-cell-editor-email.component.mjs +4 -4
  169. package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +4 -4
  170. package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +4 -4
  171. package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +4 -4
  172. package/esm2020/lib/components/table/column/cell-editor/text/o-table-cell-editor-text.component.mjs +4 -4
  173. package/esm2020/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.mjs +4 -4
  174. package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +4 -4
  175. package/esm2020/lib/components/table/column/cell-renderer/boolean/o-table-cell-renderer-boolean.component.mjs +4 -4
  176. package/esm2020/lib/components/table/column/cell-renderer/currency/o-table-cell-renderer-currency.component.mjs +4 -4
  177. package/esm2020/lib/components/table/column/cell-renderer/date/o-table-cell-renderer-date.component.mjs +4 -4
  178. package/esm2020/lib/components/table/column/cell-renderer/image/o-table-cell-renderer-image.component.mjs +4 -4
  179. package/esm2020/lib/components/table/column/cell-renderer/integer/o-table-cell-renderer-integer.component.mjs +4 -4
  180. package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +4 -4
  181. package/esm2020/lib/components/table/column/cell-renderer/percentage/o-table-cell-renderer-percentage.component.mjs +4 -4
  182. package/esm2020/lib/components/table/column/cell-renderer/real/o-table-cell-renderer-real.component.mjs +4 -4
  183. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +23 -9
  184. package/esm2020/lib/components/table/column/cell-renderer/time/o-table-cell-renderer-time.component.mjs +4 -4
  185. package/esm2020/lib/components/table/column/cell-renderer/translate/o-table-cell-renderer-translate.component.mjs +4 -4
  186. package/esm2020/lib/components/table/column/o-table-column.component.mjs +4 -4
  187. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +4 -4
  188. package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +4 -4
  189. package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +4 -4
  190. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +4 -4
  191. package/esm2020/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.mjs +4 -4
  192. package/esm2020/lib/components/table/extensions/dialog/o-table-base-dialog.class.mjs +4 -4
  193. package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +4 -4
  194. package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +4 -4
  195. package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +4 -4
  196. package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.service.mjs +4 -4
  197. package/esm2020/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.mjs +4 -4
  198. package/esm2020/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.mjs +4 -4
  199. package/esm2020/lib/components/table/extensions/footer/paginator/o-table-mat-paginator-intl.mjs +4 -4
  200. package/esm2020/lib/components/table/extensions/footer/paginator/o-table-paginator.component.mjs +4 -4
  201. package/esm2020/lib/components/table/extensions/header/o-table-header-components.mjs +3 -2
  202. package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +4 -4
  203. package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +4 -4
  204. package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +4 -4
  205. package/esm2020/lib/components/table/extensions/header/table-column-select-all/o-table-column-select-all.directive.mjs +4 -4
  206. package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +4 -4
  207. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +4 -4
  208. package/esm2020/lib/components/table/extensions/header/table-columns-grouping/columns/o-table-columns-grouping-column.component.mjs +4 -4
  209. package/esm2020/lib/components/table/extensions/header/table-columns-grouping/o-table-columns-grouping.component.mjs +4 -4
  210. package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +4 -4
  211. package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +4 -4
  212. package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +4 -4
  213. package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +4 -4
  214. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +4 -4
  215. package/esm2020/lib/components/table/extensions/header/table-option/o-table-option.component.mjs +4 -4
  216. package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
  217. package/esm2020/lib/components/table/extensions/o-table-datasource.service.mjs +4 -4
  218. package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +4 -4
  219. package/esm2020/lib/components/table/extensions/o-table.dao.mjs +10 -12
  220. package/esm2020/lib/components/table/extensions/pipes/o-table-row-class.pipe.mjs +4 -4
  221. package/esm2020/lib/components/table/extensions/row/o-table-row.directive.mjs +4 -4
  222. package/esm2020/lib/components/table/extensions/row/table-row-expandable/o-table-row-expandable.component.mjs +4 -4
  223. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +4 -4
  224. package/esm2020/lib/components/table/extensions/sort/o-mat-sort-header.mjs +4 -4
  225. package/esm2020/lib/components/table/extensions/sort/o-mat-sort-module.mjs +5 -5
  226. package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +4 -4
  227. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  228. package/esm2020/lib/components/table/o-table.component.mjs +20 -15
  229. package/esm2020/lib/components/table/o-table.module.mjs +6 -6
  230. package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +4 -4
  231. package/esm2020/lib/components/tree/o-tree-dao.service.mjs +4 -4
  232. package/esm2020/lib/components/tree/o-tree.component.mjs +6 -6
  233. package/esm2020/lib/components/tree/o-tree.module.mjs +5 -5
  234. package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +4 -4
  235. package/esm2020/lib/components/user-info/o-user-info.component.mjs +4 -4
  236. package/esm2020/lib/components/user-info/o-user-info.module.mjs +5 -5
  237. package/esm2020/lib/components/user-info/user-info-configuration/o-user-info-configuration.directive.mjs +4 -4
  238. package/esm2020/lib/components/user-info/user-info-configuration-item/o-user-info-configuration-item.directive.mjs +4 -4
  239. package/esm2020/lib/config/app-config.mjs +4 -1
  240. package/esm2020/lib/config/o-modules.mjs +5 -5
  241. package/esm2020/lib/config/o-providers.mjs +7 -4
  242. package/esm2020/lib/directives/input-regulate.directive.mjs +4 -4
  243. package/esm2020/lib/directives/keyboard-listener.directive.mjs +4 -4
  244. package/esm2020/lib/directives/locker.directive.mjs +4 -4
  245. package/esm2020/lib/directives/o-file-drag-and-drop.directive.mjs +4 -4
  246. package/esm2020/lib/directives/o-hidden.directive.mjs +4 -4
  247. package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -4
  248. package/esm2020/lib/directives/o-mat-prefix.directive.mjs +4 -4
  249. package/esm2020/lib/directives/o-mat-suffix.directive.mjs +4 -4
  250. package/esm2020/lib/directives/o-tab-group.directive.mjs +4 -4
  251. package/esm2020/lib/interfaces/base-response.interface.mjs +2 -0
  252. package/esm2020/lib/interfaces/data-service.interface.mjs +1 -1
  253. package/esm2020/lib/interfaces/form-data-component.interface.mjs +1 -1
  254. package/esm2020/lib/interfaces/index.mjs +4 -1
  255. package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -0
  256. package/esm2020/lib/interfaces/name-convention.interface.mjs +2 -0
  257. package/esm2020/lib/interfaces/prefereces-service.interface.mjs +2 -0
  258. package/esm2020/lib/interfaces/service-response-adapter.interface.mjs +1 -1
  259. package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
  260. package/esm2020/lib/layouts/app-layout/app-layout-header/o-app-layout-header.component.mjs +4 -4
  261. package/esm2020/lib/layouts/app-layout/app-layout-sidenav/o-app-layout-sidenav.component.mjs +4 -4
  262. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +4 -4
  263. package/esm2020/lib/layouts/app-layout/o-app-layout.module.mjs +5 -5
  264. package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +4 -4
  265. package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.module.mjs +5 -5
  266. package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +4 -4
  267. package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +4 -4
  268. package/esm2020/lib/layouts/form-layout/directives/o-form-layout-manager-content.directive.mjs +4 -4
  269. package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +4 -4
  270. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -4
  271. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.module.mjs +5 -5
  272. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +4 -4
  273. package/esm2020/lib/layouts/form-layout/split-pane/options/o-form-layout-split-pane-options.directive.mjs +4 -4
  274. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +4 -4
  275. package/esm2020/lib/layouts/form-layout/tabgroup/options/o-form-layout-tabgroup-options.directive.mjs +4 -4
  276. package/esm2020/lib/ontimize-web-ngx.module.mjs +5 -5
  277. package/esm2020/lib/pipes/columns-filter.pipe.mjs +4 -4
  278. package/esm2020/lib/pipes/is-empty-value.pipe.mjs +4 -4
  279. package/esm2020/lib/pipes/o-currency.pipe.mjs +4 -4
  280. package/esm2020/lib/pipes/o-icon.pipe.mjs +4 -4
  281. package/esm2020/lib/pipes/o-integer.pipe.mjs +4 -4
  282. package/esm2020/lib/pipes/o-moment.pipe.mjs +4 -4
  283. package/esm2020/lib/pipes/o-percentage.pipe.mjs +4 -4
  284. package/esm2020/lib/pipes/o-real.pipe.mjs +4 -4
  285. package/esm2020/lib/pipes/o-safe.pipe.mjs +4 -4
  286. package/esm2020/lib/pipes/o-translate.pipe.mjs +8 -8
  287. package/esm2020/lib/pipes/order-by.pipe.mjs +4 -4
  288. package/esm2020/lib/services/app-menu.service.mjs +4 -4
  289. package/esm2020/lib/services/appearance.service.mjs +4 -4
  290. package/esm2020/lib/services/auth-guard.service.mjs +4 -4
  291. package/esm2020/lib/services/auth.service.mjs +4 -4
  292. package/esm2020/lib/services/base-data-service.class.mjs +20 -0
  293. package/esm2020/lib/services/base-service.class.mjs +36 -9
  294. package/esm2020/lib/services/currency.service.mjs +4 -4
  295. package/esm2020/lib/services/dialog.service.mjs +4 -4
  296. package/esm2020/lib/services/factories.mjs +74 -5
  297. package/esm2020/lib/services/icon.service.mjs +4 -4
  298. package/esm2020/lib/services/index.mjs +5 -1
  299. package/esm2020/lib/services/jsonapi/index.mjs +5 -0
  300. package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +47 -0
  301. package/esm2020/lib/services/jsonapi/jsonapi-service-response.adapter.mjs +31 -0
  302. package/esm2020/lib/services/jsonapi/jsonapi-service-response.class.mjs +45 -0
  303. package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +165 -0
  304. package/esm2020/lib/services/local-storage.service.mjs +4 -4
  305. package/esm2020/lib/services/login-storage.service.mjs +4 -4
  306. package/esm2020/lib/services/moment.service.mjs +4 -4
  307. package/esm2020/lib/services/name-convention/base-name-convention.service.mjs +59 -0
  308. package/esm2020/lib/services/name-convention/index.mjs +4 -0
  309. package/esm2020/lib/services/name-convention/name-convention-lower.service.mjs +11 -0
  310. package/esm2020/lib/services/name-convention/name-convention-upper.service.mjs +11 -0
  311. package/esm2020/lib/services/name-convention/name-convention.service.mjs +24 -0
  312. package/esm2020/lib/services/navigation.service.mjs +4 -4
  313. package/esm2020/lib/services/number.service.mjs +4 -4
  314. package/esm2020/lib/services/o-auth.service.mjs +4 -4
  315. package/esm2020/lib/services/o-breadcrumb.service.mjs +4 -4
  316. package/esm2020/lib/services/o-error-dialog-manager.service.mjs +4 -4
  317. package/esm2020/lib/services/o-form-layout-manager.service.mjs +4 -4
  318. package/esm2020/lib/services/o-modules-info.service.mjs +4 -4
  319. package/esm2020/lib/services/o-user-info.service.mjs +4 -4
  320. package/esm2020/lib/services/ontimize/index.mjs +3 -1
  321. package/esm2020/lib/services/ontimize/o-preference-response.adapter.mjs +22 -0
  322. package/esm2020/lib/services/ontimize/ontimize-base-service.class.mjs +7 -12
  323. package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +33 -16
  324. package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +7 -7
  325. package/esm2020/lib/services/ontimize/ontimize-export.service.mjs +6 -6
  326. package/esm2020/lib/services/ontimize/ontimize-file.service.mjs +6 -6
  327. package/esm2020/lib/services/ontimize/ontimize-preferences.service.mjs +56 -0
  328. package/esm2020/lib/services/ontimize/ontimize-service-response.adapter.mjs +7 -4
  329. package/esm2020/lib/services/ontimize/ontimize.service.mjs +32 -23
  330. package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +4 -4
  331. package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +4 -4
  332. package/esm2020/lib/services/ontimize-export-data-provider.service.mjs +4 -4
  333. package/esm2020/lib/services/ontimize-icon-registry.service.mjs +4 -4
  334. package/esm2020/lib/services/pagination-context.service.mjs +4 -4
  335. package/esm2020/lib/services/parser/o-service-response.parser.mjs +21 -4
  336. package/esm2020/lib/services/permissions/o-permissions.module.mjs +5 -5
  337. package/esm2020/lib/services/permissions/ontimize-ee-permissions.service.mjs +4 -4
  338. package/esm2020/lib/services/permissions/ontimize-permissions.service.mjs +4 -4
  339. package/esm2020/lib/services/permissions/permissions-can-activate.guard.mjs +4 -4
  340. package/esm2020/lib/services/permissions/permissions.service.mjs +4 -4
  341. package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +9 -0
  342. package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +2 -0
  343. package/esm2020/lib/services/query-arguments/index.mjs +5 -0
  344. package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +62 -0
  345. package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +19 -0
  346. package/esm2020/lib/services/remote-config.service.mjs +5 -5
  347. package/esm2020/lib/services/share-can-activate-child.service.mjs +4 -4
  348. package/esm2020/lib/services/snackbar.service.mjs +4 -4
  349. package/esm2020/lib/services/state/o-app-menu-component-state.service.mjs +4 -4
  350. package/esm2020/lib/services/state/o-component-state.service.mjs +10 -10
  351. package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +4 -4
  352. package/esm2020/lib/services/state/o-form-layout-manager-component-state.service.mjs +4 -4
  353. package/esm2020/lib/services/state/o-grid-component-state.service.mjs +4 -4
  354. package/esm2020/lib/services/state/o-list-component-state.service.mjs +4 -4
  355. package/esm2020/lib/services/state/o-table-component-state.service.mjs +4 -4
  356. package/esm2020/lib/services/state/o-tree-component-state.service.mjs +4 -4
  357. package/esm2020/lib/services/translate/o-translate.parser.mjs +4 -4
  358. package/esm2020/lib/services/translate/o-translate.service.mjs +10 -7
  359. package/esm2020/lib/shared/components/dialog/o-dialog-internal.component.mjs +4 -4
  360. package/esm2020/lib/shared/components/dialog/o-dialog.component.mjs +4 -4
  361. package/esm2020/lib/shared/components/error403/o-error-403.component.mjs +4 -4
  362. package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +4 -4
  363. package/esm2020/lib/shared/components/filter/store-filter/o-store-filter-dialog.component.mjs +4 -4
  364. package/esm2020/lib/shared/components/snackbar/o-snackbar-base.class.mjs +4 -4
  365. package/esm2020/lib/shared/components/snackbar/o-snackbar.component.mjs +4 -4
  366. package/esm2020/lib/shared/components/validation/o-error.component.mjs +4 -4
  367. package/esm2020/lib/shared/components/validation/o-validator.component.mjs +4 -4
  368. package/esm2020/lib/shared/material/custom.material.module.mjs +5 -5
  369. package/esm2020/lib/shared/material/date/ontimize-moment-date-adapter.mjs +4 -4
  370. package/esm2020/lib/shared/shared.module.mjs +5 -5
  371. package/esm2020/lib/types/config.type.mjs +1 -1
  372. package/esm2020/lib/types/configure-service-args.type.mjs +1 -1
  373. package/esm2020/lib/types/index.mjs +5 -1
  374. package/esm2020/lib/types/json-query-parameter.type.mjs +2 -0
  375. package/esm2020/lib/types/preferences.type.mjs +2 -0
  376. package/esm2020/lib/types/query-params.type.mjs +2 -0
  377. package/esm2020/lib/types/service-configuration.type.mjs +2 -0
  378. package/esm2020/lib/types/service-request-param.type.mjs +1 -1
  379. package/esm2020/lib/types/service-type.type.mjs +8 -0
  380. package/esm2020/lib/util/codes.mjs +2 -1
  381. package/esm2020/lib/util/index.mjs +2 -1
  382. package/esm2020/lib/util/preference-mapping-util.mjs +95 -0
  383. package/esm2020/lib/util/sqltypes.mjs +5 -1
  384. package/esm2020/lib/util/util.mjs +118 -12
  385. package/fesm2015/ontimize-web-ngx.mjs +4515 -3577
  386. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  387. package/fesm2020/ontimize-web-ngx.mjs +4524 -3591
  388. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  389. package/lib/components/form/navigation/o-form-navigation.component.d.ts +3 -1
  390. package/lib/components/form/o-form.component.d.ts +12 -7
  391. package/lib/components/grid/o-grid.component.d.ts +2 -1
  392. package/lib/components/input/file-input/o-file-input.component.d.ts +3 -1
  393. package/lib/components/input/o-form-service-component.class.d.ts +11 -4
  394. package/lib/components/list/o-list.component.d.ts +2 -1
  395. package/lib/components/o-service-base-component.class.d.ts +8 -4
  396. package/lib/components/o-service-component.class.d.ts +1 -1
  397. package/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.d.ts +7 -2
  398. package/lib/components/table/column/o-table-column.component.d.ts +1 -1
  399. package/lib/components/table/extensions/o-table.dao.d.ts +7 -4
  400. package/lib/components/table/o-table-base.class.d.ts +1 -0
  401. package/lib/components/table/o-table.component.d.ts +4 -2
  402. package/lib/components/table/o-table.module.d.ts +1 -1
  403. package/lib/config/app-config.d.ts +2 -1
  404. package/lib/config/o-directives.d.ts +1 -1
  405. package/lib/interfaces/base-response.interface.d.ts +7 -0
  406. package/lib/interfaces/data-service.interface.d.ts +1 -0
  407. package/lib/interfaces/form-data-component.interface.d.ts +1 -0
  408. package/lib/interfaces/index.d.ts +3 -0
  409. package/lib/interfaces/jsonapi-response.interface.d.ts +9 -0
  410. package/lib/interfaces/name-convention.interface.d.ts +9 -0
  411. package/lib/interfaces/prefereces-service.interface.d.ts +7 -0
  412. package/lib/interfaces/service-response-adapter.interface.d.ts +4 -2
  413. package/lib/interfaces/service-response.interface.d.ts +2 -6
  414. package/lib/services/base-data-service.class.d.ts +18 -0
  415. package/lib/services/base-service.class.d.ts +27 -20
  416. package/lib/services/factories.d.ts +32 -2
  417. package/lib/services/index.d.ts +4 -0
  418. package/lib/services/jsonapi/index.d.ts +4 -0
  419. package/lib/services/jsonapi/jsonapi-preferences.service.d.ts +13 -0
  420. package/lib/services/jsonapi/jsonapi-service-response.adapter.d.ts +12 -0
  421. package/lib/services/jsonapi/jsonapi-service-response.class.d.ts +23 -0
  422. package/lib/services/jsonapi/jsonapi.service.d.ts +30 -0
  423. package/lib/services/name-convention/base-name-convention.service.d.ts +12 -0
  424. package/lib/services/name-convention/index.d.ts +3 -0
  425. package/lib/services/name-convention/name-convention-lower.service.d.ts +5 -0
  426. package/lib/services/name-convention/name-convention-upper.service.d.ts +5 -0
  427. package/lib/services/name-convention/name-convention.service.d.ts +10 -0
  428. package/lib/services/ontimize/index.d.ts +2 -0
  429. package/lib/services/ontimize/o-preference-response.adapter.d.ts +9 -0
  430. package/lib/services/ontimize/ontimize-base-service.class.d.ts +3 -3
  431. package/lib/services/ontimize/ontimize-ee.service.d.ts +1 -1
  432. package/lib/services/ontimize/ontimize-export-3xx.service.d.ts +3 -2
  433. package/lib/services/ontimize/ontimize-export.service.d.ts +2 -2
  434. package/lib/services/ontimize/ontimize-file.service.d.ts +3 -2
  435. package/lib/services/ontimize/ontimize-preferences.service.d.ts +16 -0
  436. package/lib/services/ontimize/ontimize-service-response.adapter.d.ts +6 -5
  437. package/lib/services/ontimize/ontimize.service.d.ts +2 -0
  438. package/lib/services/parser/o-service-response.parser.d.ts +11 -5
  439. package/lib/services/query-arguments/base-query-argument.adapter.d.ts +6 -0
  440. package/lib/services/query-arguments/base-query-argument.interface.d.ts +3 -0
  441. package/lib/services/query-arguments/index.d.ts +4 -0
  442. package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +12 -0
  443. package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +8 -0
  444. package/lib/services/translate/o-translate.service.d.ts +1 -0
  445. package/lib/types/config.type.d.ts +3 -1
  446. package/lib/types/configure-service-args.type.d.ts +5 -5
  447. package/lib/types/index.d.ts +4 -0
  448. package/lib/types/json-query-parameter.type.d.ts +15 -0
  449. package/lib/types/preferences.type.d.ts +7 -0
  450. package/lib/types/query-params.type.d.ts +11 -0
  451. package/lib/types/service-configuration.type.d.ts +7 -0
  452. package/lib/types/service-request-param.type.d.ts +5 -5
  453. package/lib/types/service-type.type.d.ts +5 -0
  454. package/lib/util/codes.d.ts +6 -5
  455. package/lib/util/index.d.ts +1 -0
  456. package/lib/util/preference-mapping-util.d.ts +93 -0
  457. package/lib/util/util.d.ts +12 -2
  458. package/package.json +1 -1
@@ -2,6 +2,12 @@ import moment from 'moment';
2
2
  import { from, isObservable, of } from 'rxjs';
3
3
  import { Base64 } from './base64';
4
4
  import { Codes } from './codes';
5
+ import { createServiceInstance } from '../services/factories';
6
+ import { AppConfig } from '../config/app-config';
7
+ import { ServiceType } from '../types/service-type.type';
8
+ import { JSONAPIService } from '../services/jsonapi/jsonapi.service';
9
+ import { OntimizeEEService } from '../services/ontimize/ontimize-ee.service';
10
+ import { OntimizeService } from '../services/ontimize/ontimize.service';
5
11
  export class Util {
6
12
  static isObject(val) {
7
13
  const valType = typeof val;
@@ -72,7 +78,7 @@ export class Util {
72
78
  return decoded;
73
79
  }
74
80
  static isArrayEmpty(array) {
75
- if (array && array.length === 0) {
81
+ if (!Util.isDefined(array) || array.length === 0) {
76
82
  return true;
77
83
  }
78
84
  return false;
@@ -340,20 +346,29 @@ export class Util {
340
346
  static isPromise(obj) {
341
347
  return !!obj && typeof obj.then === 'function';
342
348
  }
349
+ static isJsonApiService(injector) {
350
+ const config = injector.get(AppConfig);
351
+ return config.getConfiguration().serviceType === 'JSONAPI' ||
352
+ config.getConfiguration().serviceType instanceof JSONAPIService;
353
+ }
354
+ static isOntimizeEEService(injector) {
355
+ const config = injector.get(AppConfig);
356
+ return (config.getConfiguration().serviceType === 'OntimizeEE' ||
357
+ config.getConfiguration().serviceType instanceof OntimizeEEService) ||
358
+ (config.getConfiguration().serviceType === 'Ontimize' ||
359
+ config.getConfiguration().serviceType instanceof OntimizeService);
360
+ }
343
361
  static configureService(configureServiceArgs) {
344
- let dataService = configureServiceArgs.baseService;
362
+ const baseService = configureServiceArgs.baseService;
345
363
  const entity = configureServiceArgs.entity;
346
364
  const service = configureServiceArgs.service;
347
- const serviceType = configureServiceArgs.serviceType;
348
365
  const injector = configureServiceArgs.injector;
349
- if (serviceType) {
350
- dataService = serviceType;
351
- }
366
+ const config = injector.get(AppConfig);
367
+ const serviceConfiguration = config.getServiceConfiguration();
368
+ const serviceConfigurationType = serviceConfiguration[service]?.serviceType;
369
+ const serviceType = configureServiceArgs.serviceType || serviceConfigurationType;
352
370
  try {
353
- dataService = injector.get(dataService);
354
- if (serviceType) {
355
- dataService = Util.createServiceInstance(dataService, injector);
356
- }
371
+ let dataService = this.getDataServiceInstance(serviceType, baseService, injector);
357
372
  if (Util.isDataService(dataService)) {
358
373
  const serviceCfg = dataService.getDefaultServiceConfiguration(service);
359
374
  if (entity) {
@@ -361,11 +376,21 @@ export class Util {
361
376
  }
362
377
  dataService.configureService(serviceCfg);
363
378
  }
379
+ return dataService;
364
380
  }
365
381
  catch (e) {
366
382
  console.error(e);
383
+ return null;
384
+ }
385
+ }
386
+ static getDataServiceInstance(serviceType, baseService, injector) {
387
+ if (!serviceType) {
388
+ return injector.get(baseService);
389
+ }
390
+ if (![ServiceType.Ontimize, ServiceType.OntimizeEE, ServiceType.JSONAPI].includes(serviceType)) {
391
+ return createServiceInstance(injector.get(serviceType), injector);
367
392
  }
368
- return dataService;
393
+ return createServiceInstance(serviceType, injector);
369
394
  }
370
395
  static createServiceInstance(clazz, injector) {
371
396
  if (!Util.isDefined(clazz)) {
@@ -413,6 +438,46 @@ export class Util {
413
438
  cache = null;
414
439
  return str;
415
440
  }
441
+ static toLowerCase(value) {
442
+ if (typeof value === 'string') {
443
+ return value.toLocaleLowerCase();
444
+ }
445
+ else {
446
+ return value;
447
+ }
448
+ }
449
+ static toUpperCase(value) {
450
+ if (typeof value === 'string') {
451
+ return value.toUpperCase();
452
+ }
453
+ else {
454
+ return value;
455
+ }
456
+ }
457
+ static parseToLowerCase(value) {
458
+ if (Util.isArray(value)) {
459
+ return value.map((x) => x.toLocaleLowerCase());
460
+ }
461
+ else if (typeof value === 'string') {
462
+ return value.toLocaleLowerCase();
463
+ }
464
+ else if (typeof value === 'object') {
465
+ return Util.mapKeys(value, Util.toLowerCase);
466
+ }
467
+ return value;
468
+ }
469
+ static parseToUpperCase(value) {
470
+ if (Util.isArray(value)) {
471
+ return value.map((x) => x.toLocaleUpperCase());
472
+ }
473
+ else if (typeof value === 'string') {
474
+ return value.toLocaleUpperCase();
475
+ }
476
+ else if (typeof value === 'object') {
477
+ return Util.mapKeys(value, Util.toUpperCase);
478
+ }
479
+ return value;
480
+ }
416
481
  static sortFunction(propertyA, propertyB, activeSortDirection) {
417
482
  let valueA = '';
418
483
  let valueB = '';
@@ -437,4 +502,45 @@ export class Util {
437
502
  }
438
503
  }
439
504
  Util.columnAggregates = ['sum', 'count', 'avg', 'min', 'max'];
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMs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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBcUM7UUFDL0QsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUE5aUJlLHFCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kYXRhLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnLi9iYXNlNjQnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuL2NvZGVzJztcbmltcG9ydCB7IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtbWVzc2FnZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGNsYXNzIFV0aWwge1xuXG4gIHN0YXRpYyByZWFkb25seSBjb2x1bW5BZ2dyZWdhdGVzID0gWydzdW0nLCAnY291bnQnLCAnYXZnJywgJ21pbicsICdtYXgnXTtcblxuICBzdGF0aWMgaXNPYmplY3QodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxUeXBlID0gdHlwZW9mIHZhbDtcbiAgICByZXR1cm4gdmFsVHlwZSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBzdGF0aWMgaXNBcnJheSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUJvb2xlYW4odmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdUUlVFJyB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnWUVTJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnRkFMU0UnIHx8IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdOTycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChVdGlsLmlzRGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VBcnJheSh2YWx1ZTogc3RyaW5nLCBleGNsdWRlUmVwZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZS5zcGxpdChDb2Rlcy5BUlJBWV9JTlBVVF9TRVBBUkFUT1IpO1xuICAgIH1cbiAgICBpZiAoZXhjbHVkZVJlcGVhdGVkICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQgPSBBcnJheS5mcm9tKG5ldyBTZXQocmVzdWx0KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBwYXJlbnQga2V5cyBlcXVpdmFsZW5jZXMuXG4gICAqIEBwYXJhbSAgcEtleXNBcnJheSBBcnJheSBvZiBzdHJpbmdzLiBBY2NlcHRlZCBmb3JtYXQ6IGtleSB8IGtleTphbGlhc1xuICAgKiBAcmV0dXJucyBPYmplY3RcbiAgICovXG4gIHN0YXRpYyBwYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocEtleXNBcnJheTogQXJyYXk8c3RyaW5nPiwgc2VwYXJhdG9yOiBzdHJpbmcgPSAnOicpOiBvYmplY3Qge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlcyA9IHt9O1xuICAgIGlmIChwS2V5c0FycmF5ICYmIHBLZXlzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgcEtleXNBcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBhdXggPSBpdGVtLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICAgIGlmIChhdXggJiYgYXV4Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGlmICgvLitcXFsuK1xcXS8udGVzdChhdXhbMV0pKSB7XG4gICAgICAgICAgICBjb25zdCBlcXVpdktleSA9IGF1eFsxXS5zdWJzdHJpbmcoMCwgYXV4WzFdLmluZGV4T2YoJ1snKSk7XG4gICAgICAgICAgICBjb25zdCBlcXVpdlZhbHVlID0gYXV4WzFdLnN1YnN0cmluZyhhdXhbMV0uaW5kZXhPZignWycpICsgMSwgYXV4WzFdLmluZGV4T2YoJ10nKSk7XG4gICAgICAgICAgICBjb25zdCBlcXVpdiA9IHt9O1xuICAgICAgICAgICAgZXF1aXZbZXF1aXZLZXldID0gZXF1aXZWYWx1ZTtcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlc1thdXhbMF1dID0gZXF1aXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlc1thdXhbMF1dID0gYXV4WzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhdXggJiYgYXV4Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGVxdWl2YWxlbmNlc1tpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgc3RhdGljIGVuY29kZVBhcmVudEtleXMocGFyZW50S2V5czogb2JqZWN0KTogc3RyaW5nIHtcbiAgICBsZXQgZW5jb2RlZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKHBhcmVudEtleXMpIHtcbiAgICAgIGVuY29kZWQgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHBhcmVudEtleXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kZWQ7XG4gIH1cblxuICBzdGF0aWMgZGVjb2RlUGFyZW50S2V5cyhwYXJlbnRLZXlzOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgIGxldCBkZWNvZGVkID0ge307XG4gICAgaWYgKHBhcmVudEtleXMgJiYgcGFyZW50S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkID0gQmFzZTY0LmRlY29kZShwYXJlbnRLZXlzKTtcbiAgICAgIGRlY29kZWQgPSBKU09OLnBhcnNlKGQpO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlZDtcbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RW1wdHkoYXJyYXk6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc09iamVjdEVtcHR5KG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0RhdGFTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElEYXRhU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSURhdGFTZXJ2aWNlKS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmNvbmZpZ3VyZVNlcnZpY2UgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzUGVybWlzc2lvbnNTZXJ2aWNlKGFyZzogYW55KTogYXJnIGlzIElQZXJtaXNzaW9uc1NlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElQZXJtaXNzaW9uc1NlcnZpY2UpLmxvYWRQZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBjb21wb25lbnQgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSUZvcm1EYXRhQ29tcG9uZW50JyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgY29tcG9uZW50IGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRm9ybURhdGFDb21wb25lbnQoYXJnOiBhbnkpOiBhcmcgaXMgSUZvcm1EYXRhQ29tcG9uZW50IHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRm9ybURhdGFDb21wb25lbnQpLmlzQXV0b21hdGljQmluZGluZyAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIGlzIGVxdWFsIHR3byBvYmplY3RzXG4gICAqIEBwYXJhbSBhIE9iamVjdCAxXG4gICAqIEBwYXJhbSBiIE9iamVjdCAyXG4gICAqXG4gICAqL1xuICBzdGF0aWMgaXNFcXVpdmFsZW50KGEsIGIpIHtcbiAgICAvLyBDcmVhdGUgYXJyYXlzIG9mIHByb3BlcnR5IG5hbWVzXG4gICAgY29uc3QgYVByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7XG4gICAgY29uc3QgYlByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG5cbiAgICAvLyBJZiBudW1iZXIgb2YgcHJvcGVydGllcyBpcyBkaWZmZXJlbnQsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhUHJvcHNbaV07XG4gICAgICAvLyBJZiB2YWx1ZXMgb2Ygc2FtZSBwcm9wZXJ0eSBhcmUgbm90IGVxdWFsLCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgICAgbGV0IGJWYWx1ZSA9IGJbcHJvcE5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBhW3Byb3BOYW1lXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgaW50QiA9IHBhcnNlSW50KGJWYWx1ZSwgMTApO1xuICAgICAgICBiVmFsdWUgPSBpc05hTihpbnRCKSA/IGJWYWx1ZSA6IGludEI7XG4gICAgICB9XG4gICAgICBpZiAoYVtwcm9wTmFtZV0gIT09IGJWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobzEgPT09IG8yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSB7XG4gICAgICAvLyBOYU4gPT09IE5hTlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHQxID0gdHlwZW9mIG8xO1xuICAgIGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuICAgIGxldCBsZW5ndGg6IG51bWJlcjtcbiAgICBsZXQga2V5OiBhbnk7XG4gICAgbGV0IGtleVNldDogYW55O1xuICAgIGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggPSBvMS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG8yLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYSByYW5kb20gbnVtYmVyXG4gICovXG4gIHN0YXRpYyByYW5kb21OdW1iZXIoKSB7XG4gICAgY29uc3QgcmFuZG9tQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQXJyYXkpO1xuICAgIHJldHVybiByYW5kb21BcnJheVswXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbiBsb3dlcmNhc2UgYW5kIHdpdGhvdXQgYWNjZW50IG1hcmtzLlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRleHQgdG8gbm9ybWFsaXplXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplU3RyaW5nKHZhbHVlOiBzdHJpbmcsIHRvTG93ZXJDYXNlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBpZiAodG9Mb3dlckNhc2UpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgYXJyYXkgZmxhdHRlbmQuXG4gICAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgdG8gZmxhdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4oYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgZmxhdHRlbmVkID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGFycmF5KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudCkpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY3VycmVudCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBjaGlsZEN1cnJlbnQgb2YgY3VycmVudCkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjaGlsZEN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCB3aXRoIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0XG4gICAqL1xuICBzdGF0aWMgZ2V0VmFsdWVzRnJvbU9iamVjdChvYmo6IG9iamVjdCA9IHt9KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgYXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGFycmF5LnB1c2goVXRpbC5nZXRWYWx1ZXNGcm9tT2JqZWN0KG9ialtrZXldKSk7XG4gICAgICB9XG4gICAgICBhcnJheS5wdXNoKG9ialtrZXldKTtcbiAgICB9KTtcbiAgICByZXR1cm4gVXRpbC5mbGF0dGVuKGFycmF5KTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUljb25Qb3NpdGlvbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIGNvbnN0IGF2YWlsYWJsZVBvc2l0aW9ucyA9IFtDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQsIENvZGVzLklDT05fUE9TSVRJT05fUklHSFRdO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChhdmFpbGFibGVQb3NpdGlvbnMuaW5kZXhPZihyZXN1bHQpID09PSAtMSkge1xuICAgICAgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5VG9DbGlwYm9hcmQoZGF0YTogc3RyaW5nKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIChlOiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBkYXRhKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvcHknLCBudWxsKTtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHgnKSA6IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhY3RQaXhlbHNWYWx1ZSh2YWx1ZTogYW55LCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoVXRpbC5jaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gJ3B4Jy5sZW5ndGgpKTtcbiAgICAgIHJlc3VsdCA9IGlzTmFOKHBhcnNlZCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZWQ7XG4gICAgfVxuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZXN1bHQpID8gcmVzdWx0IDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRlZCBjbGFzcyAnYWNjZW50JyBpbiA8bWF0LWZvcm0tZmllbGQ+IGFuZCBzZXQgdGhlIGNvbG9yICBhY2NlbnQgaW4gdGhlIGljb25zXG4gICAqIEBwYXJhbSBlbFJlZlxuICAgKiBAcGFyYW0gb0lucHV0c09wdGlvbnNcbiAgICovXG5cbiAgc3RhdGljIHBhcnNlT0lucHV0c09wdGlvbnMoZWxSZWYsIG9JbnB1dHNPcHRpb25zKSB7XG5cbiAgICBpZiAob0lucHV0c09wdGlvbnMuaWNvbkNvbG9yID09PSBDb2Rlcy5PX0lOUFVUU19PUFRJT05TX0NPTE9SX0FDQ0VOVCkge1xuICAgICAgY29uc3QgbWF0Rm9ybUZpZWxkRUwgPSBlbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtZm9ybS1maWVsZCcpWzBdO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG1hdEZvcm1GaWVsZEVMKSkge1xuICAgICAgICBtYXRGb3JtRmllbGRFTC5jbGFzc0xpc3QuYWRkKCdhY2NlbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiAgUmV0dXJuIHN0cmluZyB3aXRoIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJcbiAgICovXG4gIHN0YXRpYyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVyKFM6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoUyk7XG5cbiAgICBjb25zdCBjcExpc3QgPSBBcnJheS5mcm9tKHN0cltTeW1ib2wuaXRlcmF0b3JdKCkpO1xuXG4gICAgY29uc3QgY3VMaXN0ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIGNwTGlzdCkge1xuICAgICAgLy8gaS4gSWYgYyBpcyBhIFNwZWNpYWxDaGFyYWN0ZXIgdGhlbiBkbzpcbiAgICAgIGlmICgnXiRcXFxcLiorPygpW117fXwnLmluZGV4T2YoYykgIT09IC0xKSB7XG4gICAgICAgIC8vIGEuIEFwcGVuZCBcIlxcXCIgdG8gY3VMaXN0LlxuICAgICAgICBjdUxpc3QucHVzaCgnXFxcXCcpO1xuICAgICAgfVxuICAgICAgLy8gQXBwZW5kIGMgdG8gY3BMaXN0LlxuICAgICAgY3VMaXN0LnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IEwgPSBjdUxpc3Quam9pbignJyk7XG4gICAgcmV0dXJuIEw7XG5cbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5RXF1YWwoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gYXJyYXkxLmxlbmd0aCA9PT0gYXJyYXkyLmxlbmd0aCAmJiBhcnJheTEuZXZlcnkoKHYsIGkpID0+IHYgPT09IGFycmF5MltpXSlcbiAgfTtcblxuICBzdGF0aWMgZGlmZmVyZW5jZUFycmF5cyhhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBhcnJheTEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICByZXR1cm4gIWFycmF5Mi5zb21lKG9iajIgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMob2JqLCBvYmoyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkaWZmZXJlbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUb09EYXRlVmFsdWVUeXBlKHZhbDogYW55KTogT0RhdGVWYWx1ZVR5cGUge1xuICAgIGxldCByZXN1bHQ6IE9EYXRlVmFsdWVUeXBlID0gJ3RpbWVzdGFtcCc7XG4gICAgY29uc3QgbG93ZXJWYWwgPSAodmFsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlclZhbCA9PT0gJ3N0cmluZycgfHwgbG93ZXJWYWwgPT09ICdkYXRlJyB8fCBsb3dlclZhbCA9PT0gJ3RpbWVzdGFtcCcgfHwgbG93ZXJWYWwgPT09ICdpc28tODYwMScpIHtcbiAgICAgIHJlc3VsdCA9IGxvd2VyVmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBzdGF0aWMgdW5pcXVlQnkoYTogQXJyYXk8YW55Piwga2V5KSB7XG4gICAgY29uc3Qgc2VlbiA9IHt9O1xuICAgIHJldHVybiBhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgayA9IGtleShpdGVtKTtcbiAgICAgIHJldHVybiBzZWVuLmhhc093blByb3BlcnR5KGspID8gZmFsc2UgOiAoc2VlbltrXSA9IHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBhcmd1bWVudCwgemVybyBpZiB0aGV5J3JlIGVxdWFsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCeVZhbHVlVHlwZSh2YWx1ZTogYW55LCB2YWx1ZVR5cGU6IE9EYXRlVmFsdWVUeXBlLCBmb3JtYXQ6IHN0cmluZykge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICBjb25zdCBtID0gbW9tZW50KHZhbHVlKTtcbiAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0RhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc28tODYwMSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9JU09TdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXN1bHQgPSBtLnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIHdyYXBJbnRvT2JzZXJ2YWJsZTxUPih2YWx1ZTogVCB8IFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAvLyBVc2UgYFByb21pc2UucmVzb2x2ZSgpYCB0byB3cmFwIHByb21pc2UtbGlrZSBpbnN0YW5jZXMuXG4gICAgICByZXR1cm4gZnJvbShQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzUHJvbWlzZTxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cblxuICBzdGF0aWMgY29uZmlndXJlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzKTogYW55IHtcbiAgICBsZXQgZGF0YVNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5iYXNlU2VydmljZTtcbiAgICBjb25zdCBlbnRpdHkgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5lbnRpdHk7XG4gICAgY29uc3Qgc2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2U7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlVHlwZTtcbiAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmluamVjdG9yO1xuXG4gICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICBkYXRhU2VydmljZSA9IHNlcnZpY2VUeXBlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQ8YW55PihkYXRhU2VydmljZSk7XG4gICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgZGF0YVNlcnZpY2UgPSBVdGlsLmNyZWF0ZVNlcnZpY2VJbnN0YW5jZShkYXRhU2VydmljZSwgaW5qZWN0b3IpXG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlQ2ZnID0gZGF0YVNlcnZpY2UuZ2V0RGVmYXVsdFNlcnZpY2VDb25maWd1cmF0aW9uKHNlcnZpY2UpO1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgc2VydmljZUNmZy5lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVNlcnZpY2UuY29uZmlndXJlU2VydmljZShzZXJ2aWNlQ2ZnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkIHNlcnZpY2UgY2xhc3NcbiAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MgcmVmZXJlbmNlXG4gKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGluamVjdG9yXG4gKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShjbGF6ejogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGNsYXp6KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gbmV3IGNsYXp6KGluamVjdG9yKTtcbiAgICByZXR1cm4gbmV3SW5zdGFuY2U7XG4gIH1cblxuICBzdGF0aWMgY29uZmlndXJlTWVzc2FnZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBtZXNzYWdlU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGU7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBzZXJ2aWNlVHlwZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PGFueT4obWVzc2FnZVNlcnZpY2UpO1xuICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gVXRpbC5jcmVhdGVTZXJ2aWNlSW5zdGFuY2UobWVzc2FnZVNlcnZpY2UsIGluamVjdG9yKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jhc2U2NChmaWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXihbQS1aYS16MC05K1xcL117NH0pKihbQS1aYS16MC05K1xcL117NH18W0EtWmEtejAtOStcXC9dezN9PXxbQS1aYS16MC05K1xcL117Mn09PSkkL2cpXG5cbiAgICBpZiAoZmlsZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdkYXRhJykge1xuICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKGZpbGUuaW5kZXhPZignYmFzZTY0JykgKyA3KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlLnJlcGxhY2UoL1xccysvZywgJycpKTtcblxuICB9XG4gIC8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmcsIGF2b2lkaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9iamVjdC5cbiAqL1xuICBzdGF0aWMgc3RyaW5naWZ5KG9iajogb2JqZWN0KSB7XG4gICAgbGV0IGNhY2hlID0gW107XG4gICAgbGV0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNhY2hlLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybjsgLy8gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIGNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3RhdGljIHNvcnRGdW5jdGlvbihwcm9wZXJ0eUE6IHN0cmluZyB8IG51bWJlciwgcHJvcGVydHlCOiBzdHJpbmcgfCBudW1iZXIsIGFjdGl2ZVNvcnREaXJlY3Rpb246IHN0cmluZykge1xuXG4gICAgbGV0IHZhbHVlQTogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG4gICAgbGV0IHZhbHVlQjogc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlBKSkge1xuICAgICAgdmFsdWVBID0gaXNOYU4oK3Byb3BlcnR5QSkgPyBwcm9wZXJ0eUEudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUE7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHByb3BlcnR5QikpIHtcbiAgICAgIHZhbHVlQiA9IGlzTmFOKCtwcm9wZXJ0eUIpID8gcHJvcGVydHlCLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiArcHJvcGVydHlCO1xuICAgIH1cbiAgICByZXR1cm4gKHZhbHVlQSA8PSB2YWx1ZUIgPyAtMSA6IDEpICogKGFjdGl2ZVNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xKTtcbiAgfVxuXG4gIHN0YXRpYyBjbG9uZUFycmF5PFQ+KGFycjogVFtdKTogVFtdIHtcbiAgICBjb25zdCBjbG9uZWRBcnJheSA9IGFyci5tYXAoKHgpID0+IE9iamVjdC5hc3NpZ24oe30sIHgpKVxuICAgIHJldHVybiBjbG9uZWRBcnJheTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXN0QWN0aXZhdGVSb3V0ZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gICAgbGV0IGNoaWxkID0gcm91dGVTbmFwc2hvdDtcbiAgICB3aGlsZSAoY2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgY2hpbGQgPSBjaGlsZC5maXJzdENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn1cbiJdfQ==
505
+ Util.objectToQueryString = (initialObj) => {
506
+ const reducer = (obj, parentPrefix = null) => (prev, key) => {
507
+ const val = obj[key];
508
+ key = encodeURIComponent(key);
509
+ let prefix;
510
+ if (key === 'filterParentKeys') {
511
+ prefix = parentPrefix;
512
+ }
513
+ else {
514
+ prefix = parentPrefix ? `${parentPrefix}[${key}]` : key;
515
+ }
516
+ if (key === 'filter' && !Util.isObjectEmpty(obj[key])) {
517
+ prev.push(Object.keys(val).map(itemfilter => {
518
+ const filterKey = `filter[${itemfilter}]`;
519
+ if (Util.isObject(val[itemfilter])) {
520
+ return `${encodeURIComponent(filterKey)}=${encodeURIComponent(JSON.stringify(val[itemfilter]))}`;
521
+ }
522
+ else {
523
+ return `${encodeURIComponent(filterKey)}=${encodeURIComponent(val[itemfilter])}`;
524
+ }
525
+ }).join('&'));
526
+ return prev;
527
+ }
528
+ if (val == null || typeof val === 'function') {
529
+ prev.push(`${encodeURIComponent(prefix)}=`);
530
+ return prev;
531
+ }
532
+ if (['number', 'boolean', 'string'].includes(typeof val)) {
533
+ prev.push(`${encodeURIComponent(prefix)}=${encodeURIComponent(val)}`);
534
+ return prev;
535
+ }
536
+ prev.push(Object.keys(val).reduce(reducer(val, prefix), []).join('&'));
537
+ return prev;
538
+ };
539
+ return Object.keys(initialObj).reduce(reducer(initialObj), []).join('&');
540
+ };
541
+ Util.mapKeys = (obj, fn) => Object.keys(obj).reduce((acc, k) => {
542
+ acc[fn(obj[k], k, obj)] = obj[k];
543
+ return acc;
544
+ }, {});
545
+ Util.mapValues = (obj, fn) => Object.keys(obj).reduce((acc, k) => ({ ...acc, [k]: fn(obj[k]) }), {});
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVExRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxJQUFJO0lBSWYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFRO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDO1FBQzNCLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sR0FBRyxZQUFZLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFhLEVBQUUsWUFBc0I7UUFDdkQsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0s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QUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFTyxjQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kYXRhLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlQXJncyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyZS1tZXNzYWdlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPRGF0ZVZhbHVlVHlwZSB9IGZyb20gJy4uL3R5cGVzL28tZGF0ZS12YWx1ZS50eXBlJztcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJy4vYmFzZTY0JztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi9jb2Rlcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZVNlcnZpY2VJbnN0YW5jZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBTZXJ2aWNlVHlwZSB9IGZyb20gJy4uL3R5cGVzL3NlcnZpY2UtdHlwZS50eXBlJztcbmltcG9ydCB7IEpTT05BUElTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvanNvbmFwaS9qc29uYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVFRVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS1lZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbCB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IGNvbHVtbkFnZ3JlZ2F0ZXMgPSBbJ3N1bScsICdjb3VudCcsICdhdmcnLCAnbWluJywgJ21heCddO1xuXG4gIHN0YXRpYyBpc09iamVjdCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbFR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIHJldHVybiB2YWxUeXBlID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEFycmF5O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1RSVUUnIHx8IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdZRVMnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdGQUxTRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ05PJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUFycmF5KHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVSZXBlYXRlZDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnNwbGl0KENvZGVzLkFSUkFZX0lOUFVUX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIGlmIChleGNsdWRlUmVwZWF0ZWQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IEFycmF5LmZyb20obmV3IFNldChyZXN1bHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHBhcmVudCBrZXlzIGVxdWl2YWxlbmNlcy5cbiAgICogQHBhcmFtICBwS2V5c0FycmF5IEFycmF5IG9mIHN0cmluZ3MuIEFjY2VwdGVkIGZvcm1hdDoga2V5IHwga2V5OmFsaWFzXG4gICAqIEByZXR1cm5zIE9iamVjdFxuICAgKi9cbiAgc3RhdGljIHBhcnNlUGFyZW50S2V5c0VxdWl2YWxlbmNlcyhwS2V5c0FycmF5OiBBcnJheTxzdHJpbmc+LCBzZXBhcmF0b3I6IHN0cmluZyA9ICc6Jyk6IG9iamVjdCB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0ge307XG4gICAgaWYgKHBLZXlzQXJyYXkgJiYgcEtleXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBwS2V5c0FycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGF1eCA9IGl0ZW0uc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKC8uK1xcWy4rXFxdLy50ZXN0KGF1eFsxXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2S2V5ID0gYXV4WzFdLnN1YnN0cmluZygwLCBhdXhbMV0uaW5kZXhPZignWycpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2VmFsdWUgPSBhdXhbMV0uc3Vic3RyaW5nKGF1eFsxXS5pbmRleE9mKCdbJykgKyAxLCBhdXhbMV0uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2ID0ge307XG4gICAgICAgICAgICBlcXVpdltlcXVpdktleV0gPSBlcXVpdlZhbHVlO1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBlcXVpdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBhdXhbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgZXF1aXZhbGVuY2VzW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlUGFyZW50S2V5cyhwYXJlbnRLZXlzOiBvYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocGFyZW50S2V5cykge1xuICAgICAgZW5jb2RlZCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyZW50S2V5cykpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgbGV0IGRlY29kZWQgPSB7fTtcbiAgICBpZiAocGFyZW50S2V5cyAmJiBwYXJlbnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGQgPSBCYXNlNjQuZGVjb2RlKHBhcmVudEtleXMpO1xuICAgICAgZGVjb2RlZCA9IEpTT04ucGFyc2UoZCk7XG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXlFbXB0eShhcnJheTogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGFycmF5KSB8fCBhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgaXNPYmplY3RFbXB0eShvYmo6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBzZXJ2aWNlIGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lEYXRhU2VydmljZScgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIHNlcnZpY2UgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNEYXRhU2VydmljZShhcmc6IGFueSk6IGFyZyBpcyBJRGF0YVNlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElEYXRhU2VydmljZSkuZ2V0RGVmYXVsdFNlcnZpY2VDb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChhcmcgYXMgSURhdGFTZXJ2aWNlKS5jb25maWd1cmVTZXJ2aWNlICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc1Blcm1pc3Npb25zU2VydmljZShhcmc6IGFueSk6IGFyZyBpcyBJUGVybWlzc2lvbnNTZXJ2aWNlIHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJUGVybWlzc2lvbnNTZXJ2aWNlKS5sb2FkUGVybWlzc2lvbnMgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgY29tcG9uZW50IGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lGb3JtRGF0YUNvbXBvbmVudCcgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIGNvbXBvbmVudCBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0Zvcm1EYXRhQ29tcG9uZW50KGFyZzogYW55KTogYXJnIGlzIElGb3JtRGF0YUNvbXBvbmVudCB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSUZvcm1EYXRhQ29tcG9uZW50KS5pc0F1dG9tYXRpY0JpbmRpbmcgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBpcyBlcXVhbCB0d28gb2JqZWN0c1xuICAgKiBAcGFyYW0gYSBPYmplY3QgMVxuICAgKiBAcGFyYW0gYiBPYmplY3QgMlxuICAgKlxuICAgKi9cbiAgc3RhdGljIGlzRXF1aXZhbGVudChhLCBiKSB7XG4gICAgLy8gQ3JlYXRlIGFycmF5cyBvZiBwcm9wZXJ0eSBuYW1lc1xuICAgIGNvbnN0IGFQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO1xuICAgIGNvbnN0IGJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpO1xuXG4gICAgLy8gSWYgbnVtYmVyIG9mIHByb3BlcnRpZXMgaXMgZGlmZmVyZW50LCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgIGlmIChhUHJvcHMubGVuZ3RoICE9PSBiUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gYVByb3BzW2ldO1xuICAgICAgLy8gSWYgdmFsdWVzIG9mIHNhbWUgcHJvcGVydHkgYXJlIG5vdCBlcXVhbCwgb2JqZWN0cyBhcmUgbm90IGVxdWl2YWxlbnRcbiAgICAgIGxldCBiVmFsdWUgPSBiW3Byb3BOYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgYVtwcm9wTmFtZV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IGludEIgPSBwYXJzZUludChiVmFsdWUsIDEwKTtcbiAgICAgICAgYlZhbHVlID0gaXNOYU4oaW50QikgPyBiVmFsdWUgOiBpbnRCO1xuICAgICAgfVxuICAgICAgaWYgKGFbcHJvcE5hbWVdICE9PSBiVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGVxdWFscyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKG8xID09PSBvMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikge1xuICAgICAgLy8gTmFOID09PSBOYU5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0MSA9IHR5cGVvZiBvMTtcbiAgICBjb25zdCB0MiA9IHR5cGVvZiBvMjtcbiAgICBsZXQgbGVuZ3RoOiBudW1iZXI7XG4gICAgbGV0IGtleTogYW55O1xuICAgIGxldCBrZXlTZXQ6IGFueTtcbiAgICBpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoID0gbzEubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICAgIGlmICghVXRpbC5lcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gbzIpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiB0eXBlb2YgbzJba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGEgcmFuZG9tIG51bWJlclxuICAqL1xuICBzdGF0aWMgcmFuZG9tTnVtYmVyKCkge1xuICAgIGNvbnN0IHJhbmRvbUFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xuICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhbmRvbUFycmF5KTtcbiAgICByZXR1cm4gcmFuZG9tQXJyYXlbMF07XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBzdHJpbmcgaW4gbG93ZXJjYXNlIGFuZCB3aXRob3V0IGFjY2VudCBtYXJrcy5cbiAgICogQHBhcmFtIHZhbHVlIHRoZSB0ZXh0IHRvIG5vcm1hbGl6ZVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCB0b0xvd2VyQ2FzZTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgaWYgKHRvTG93ZXJDYXNlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIGFycmF5IGZsYXR0ZW5kLlxuICAgKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IHRvIGZsYXRcbiAgICovXG4gIHN0YXRpYyBmbGF0dGVuKGFycmF5OiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgbGV0IGZsYXR0ZW5lZCA9IFtdO1xuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBhcnJheSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgIGZsYXR0ZW5lZC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgY2hpbGRDdXJyZW50IG9mIGN1cnJlbnQpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY2hpbGRDdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdHRlbmVkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBvYmogdGhlIG9iamVjdFxuICAgKi9cbiAgc3RhdGljIGdldFZhbHVlc0Zyb21PYmplY3Qob2JqOiBvYmplY3QgPSB7fSk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGFycmF5OiBBcnJheTxhbnk+ID0gW107XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhcnJheS5wdXNoKFV0aWwuZ2V0VmFsdWVzRnJvbU9iamVjdChvYmpba2V5XSkpO1xuICAgICAgfVxuICAgICAgYXJyYXkucHVzaChvYmpba2V5XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWwuZmxhdHRlbihhcnJheSk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VJY29uUG9zaXRpb24odmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICBjb25zdCBhdmFpbGFibGVQb3NpdGlvbnMgPSBbQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZULCBDb2Rlcy5JQ09OX1BPU0lUSU9OX1JJR0hUXTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoYXZhaWxhYmxlUG9zaXRpb25zLmluZGV4T2YocmVzdWx0KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdCA9IGRlZmF1bHRWYWx1ZSB8fCBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgY29weVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L3BsYWluJywgZGF0YSk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb3B5JywgbnVsbCk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B4JykgOiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBleHRyYWN0UGl4ZWxzVmFsdWUodmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgaWYgKFV0aWwuY2hlY2tQaXhlbHNWYWx1ZVN0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCAtICdweCcubGVuZ3RoKSk7XG4gICAgICByZXN1bHQgPSBpc05hTihwYXJzZWQpID8gZGVmYXVsdFZhbHVlIDogcGFyc2VkO1xuICAgIH1cbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQocmVzdWx0KSA/IHJlc3VsdCA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogQWRkZWQgY2xhc3MgJ2FjY2VudCcgaW4gPG1hdC1mb3JtLWZpZWxkPiBhbmQgc2V0IHRoZSBjb2xvciAgYWNjZW50IGluIHRoZSBpY29uc1xuICAgKiBAcGFyYW0gZWxSZWZcbiAgICogQHBhcmFtIG9JbnB1dHNPcHRpb25zXG4gICAqL1xuXG4gIHN0YXRpYyBwYXJzZU9JbnB1dHNPcHRpb25zKGVsUmVmLCBvSW5wdXRzT3B0aW9ucykge1xuXG4gICAgaWYgKG9JbnB1dHNPcHRpb25zLmljb25Db2xvciA9PT0gQ29kZXMuT19JTlBVVFNfT1BUSU9OU19DT0xPUl9BQ0NFTlQpIHtcbiAgICAgIGNvbnN0IG1hdEZvcm1GaWVsZEVMID0gZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWF0LWZvcm0tZmllbGQnKVswXTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChtYXRGb3JtRmllbGRFTCkpIHtcbiAgICAgICAgbWF0Rm9ybUZpZWxkRUwuY2xhc3NMaXN0LmFkZCgnYWNjZW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogIFJldHVybiBzdHJpbmcgd2l0aCBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAqL1xuICBzdGF0aWMgZXNjYXBlU3BlY2lhbENoYXJhY3RlcihTOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgc3RyID0gU3RyaW5nKFMpO1xuXG4gICAgY29uc3QgY3BMaXN0ID0gQXJyYXkuZnJvbShzdHJbU3ltYm9sLml0ZXJhdG9yXSgpKTtcblxuICAgIGNvbnN0IGN1TGlzdCA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiBjcExpc3QpIHtcbiAgICAgIC8vIGkuIElmIGMgaXMgYSBTcGVjaWFsQ2hhcmFjdGVyIHRoZW4gZG86XG4gICAgICBpZiAoJ14kXFxcXC4qKz8oKVtde318Jy5pbmRleE9mKGMpICE9PSAtMSkge1xuICAgICAgICAvLyBhLiBBcHBlbmQgXCJcXFwiIHRvIGN1TGlzdC5cbiAgICAgICAgY3VMaXN0LnB1c2goJ1xcXFwnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGVuZCBjIHRvIGNwTGlzdC5cbiAgICAgIGN1TGlzdC5wdXNoKGMpO1xuICAgIH1cbiAgICBjb25zdCBMID0gY3VMaXN0LmpvaW4oJycpO1xuICAgIHJldHVybiBMO1xuXG4gIH1cblxuICBzdGF0aWMgaXNBcnJheUVxdWFsKGFycmF5MTogQXJyYXk8YW55PiwgYXJyYXkyOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGFycmF5MS5sZW5ndGggPT09IGFycmF5Mi5sZW5ndGggJiYgYXJyYXkxLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBhcnJheTJbaV0pXG4gIH07XG5cbiAgc3RhdGljIGRpZmZlcmVuY2VBcnJheXMoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gYXJyYXkxLmZpbHRlcihvYmogPT4ge1xuICAgICAgcmV0dXJuICFhcnJheTIuc29tZShvYmoyID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXF1YWxzKG9iaiwgb2JqMik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGlmZmVyZW5jZTtcbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VG9PRGF0ZVZhbHVlVHlwZSh2YWw6IGFueSk6IE9EYXRlVmFsdWVUeXBlIHtcbiAgICBsZXQgcmVzdWx0OiBPRGF0ZVZhbHVlVHlwZSA9ICd0aW1lc3RhbXAnO1xuICAgIGNvbnN0IGxvd2VyVmFsID0gKHZhbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJWYWwgPT09ICdzdHJpbmcnIHx8IGxvd2VyVmFsID09PSAnZGF0ZScgfHwgbG93ZXJWYWwgPT09ICd0aW1lc3RhbXAnIHx8IGxvd2VyVmFsID09PSAnaXNvLTg2MDEnKSB7XG4gICAgICByZXN1bHQgPSBsb3dlclZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgc3RhdGljIHVuaXF1ZUJ5KGE6IEFycmF5PGFueT4sIGtleSkge1xuICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICByZXR1cm4gYS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGsgPSBrZXkoaXRlbSk7XG4gICAgICByZXR1cm4gc2Vlbi5oYXNPd25Qcm9wZXJ0eShrKSA/IGZhbHNlIDogKHNlZW5ba10gPSB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0d28gc3RyaW5ncyBhbmQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGZpcnN0IGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBzZWNvbmQgYXJndW1lbnQsIHplcm8gaWYgdGhleSdyZSBlcXVhbCBhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgY29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhID4gYikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQnlWYWx1ZVR5cGUodmFsdWU6IGFueSwgdmFsdWVUeXBlOiBPRGF0ZVZhbHVlVHlwZSwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgY29uc3QgbSA9IG1vbWVudCh2YWx1ZSk7XG4gICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJlc3VsdCA9IG0uZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9EYXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXNvLTg2MDEnOlxuICAgICAgICByZXN1bHQgPSBtLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgICAgcmVzdWx0ID0gbS52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyB3cmFwSW50b09ic2VydmFibGU8VD4odmFsdWU6IFQgfCBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgLy8gVXNlIGBQcm9taXNlLnJlc29sdmUoKWAgdG8gd3JhcCBwcm9taXNlLWxpa2UgaW5zdGFuY2VzLlxuICAgICAgcmV0dXJuIGZyb20oUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1Byb21pc2U8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG5cbiAgc3RhdGljIGlzSnNvbkFwaVNlcnZpY2UoaW5qZWN0b3I6IEluamVjdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0b3IuZ2V0KEFwcENvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCkuc2VydmljZVR5cGUgPT09ICdKU09OQVBJJyB8fFxuICAgICAgY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKS5zZXJ2aWNlVHlwZSBpbnN0YW5jZW9mIEpTT05BUElTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGlzT250aW1pemVFRVNlcnZpY2UoaW5qZWN0b3I6IEluamVjdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0b3IuZ2V0KEFwcENvbmZpZyk7XG4gICAgcmV0dXJuIChjb25maWcuZ2V0Q29uZmlndXJhdGlvbigpLnNlcnZpY2VUeXBlID09PSAnT250aW1pemVFRScgfHxcbiAgICAgIGNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCkuc2VydmljZVR5cGUgaW5zdGFuY2VvZiBPbnRpbWl6ZUVFU2VydmljZSkgfHxcbiAgICAgIChjb25maWcuZ2V0Q29uZmlndXJhdGlvbigpLnNlcnZpY2VUeXBlID09PSAnT250aW1pemUnIHx8XG4gICAgICAgIGNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCkuc2VydmljZVR5cGUgaW5zdGFuY2VvZiBPbnRpbWl6ZVNlcnZpY2UpO1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncyk6IGFueSB7XG4gICAgY29uc3QgYmFzZVNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5iYXNlU2VydmljZTtcbiAgICBjb25zdCBlbnRpdHkgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5lbnRpdHk7XG4gICAgY29uc3Qgc2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2U7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdG9yLmdldChBcHBDb25maWcpO1xuICAgIGNvbnN0IHNlcnZpY2VDb25maWd1cmF0aW9uID0gY29uZmlnLmdldFNlcnZpY2VDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3Qgc2VydmljZUNvbmZpZ3VyYXRpb25UeXBlID0gc2VydmljZUNvbmZpZ3VyYXRpb25bc2VydmljZV0/LnNlcnZpY2VUeXBlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGUgfHwgc2VydmljZUNvbmZpZ3VyYXRpb25UeXBlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhU2VydmljZSA9IHRoaXMuZ2V0RGF0YVNlcnZpY2VJbnN0YW5jZShzZXJ2aWNlVHlwZSwgYmFzZVNlcnZpY2UsIGluamVjdG9yKTtcblxuICAgICAgaWYgKFV0aWwuaXNEYXRhU2VydmljZShkYXRhU2VydmljZSkpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUNmZyA9IGRhdGFTZXJ2aWNlLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbihzZXJ2aWNlKTtcbiAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgIHNlcnZpY2VDZmcuZW50aXR5ID0gZW50aXR5O1xuICAgICAgICB9XG4gICAgICAgIGRhdGFTZXJ2aWNlLmNvbmZpZ3VyZVNlcnZpY2Uoc2VydmljZUNmZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVNlcnZpY2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0YVNlcnZpY2VJbnN0YW5jZShzZXJ2aWNlVHlwZTogYW55LCBiYXNlU2VydmljZTogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpOiBhbnkge1xuICAgIGlmICghc2VydmljZVR5cGUpIHtcbiAgICAgIHJldHVybiBpbmplY3Rvci5nZXQ8YW55PihiYXNlU2VydmljZSk7XG4gICAgfVxuXG4gICAgaWYgKCFbU2VydmljZVR5cGUuT250aW1pemUsIFNlcnZpY2VUeXBlLk9udGltaXplRUUsIFNlcnZpY2VUeXBlLkpTT05BUEldLmluY2x1ZGVzKHNlcnZpY2VUeXBlKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShpbmplY3Rvci5nZXQ8YW55PihzZXJ2aWNlVHlwZSksIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlU2VydmljZUluc3RhbmNlKHNlcnZpY2VUeXBlLCBpbmplY3Rvcik7XG4gIH1cblxuICAvKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkIHNlcnZpY2UgY2xhc3NcbiAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MgcmVmZXJlbmNlXG4gKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGluamVjdG9yXG4gKi9cbiAgc3RhdGljIGNyZWF0ZVNlcnZpY2VJbnN0YW5jZShjbGF6ejogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKGNsYXp6KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gbmV3IGNsYXp6KGluamVjdG9yKTtcbiAgICByZXR1cm4gbmV3SW5zdGFuY2U7XG4gIH1cblxuICBzdGF0aWMgY29uZmlndXJlTWVzc2FnZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBtZXNzYWdlU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGU7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBzZXJ2aWNlVHlwZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PGFueT4obWVzc2FnZVNlcnZpY2UpO1xuICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gVXRpbC5jcmVhdGVTZXJ2aWNlSW5zdGFuY2UobWVzc2FnZVNlcnZpY2UsIGluamVjdG9yKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Jhc2U2NChmaWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgvXihbQS1aYS16MC05K1xcL117NH0pKihbQS1aYS16MC05K1xcL117NH18W0EtWmEtejAtOStcXC9dezN9PXxbQS1aYS16MC05K1xcL117Mn09PSkkL2cpXG5cbiAgICBpZiAoZmlsZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdkYXRhJykge1xuICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKGZpbGUuaW5kZXhPZignYmFzZTY0JykgKyA3KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlLnJlcGxhY2UoL1xccysvZywgJycpKTtcblxuICB9XG4gIC8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmcsIGF2b2lkaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9iamVjdC5cbiAqL1xuICBzdGF0aWMgc3RyaW5naWZ5KG9iajogb2JqZWN0KSB7XG4gICAgbGV0IGNhY2hlID0gW107XG4gICAgbGV0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNhY2hlLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybjsgLy8gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgICB9XG4gICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIGNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAoaW5pdGlhbE9iaikgPT4ge1xuICAgIGNvbnN0IHJlZHVjZXIgPSAob2JqLCBwYXJlbnRQcmVmaXggPSBudWxsKSA9PiAocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBvYmpba2V5XTtcbiAgICAgIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgbGV0IHByZWZpeDogc3RyaW5nO1xuICAgICAgaWYgKGtleSA9PT0gJ2ZpbHRlclBhcmVudEtleXMnKSB7XG4gICAgICAgIHByZWZpeCA9IHBhcmVudFByZWZpeDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9IHBhcmVudFByZWZpeCA/IGAke3BhcmVudFByZWZpeH1bJHtrZXl9XWAgOiBrZXk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgPT09ICdmaWx0ZXInICYmICFVdGlsLmlzT2JqZWN0RW1wdHkob2JqW2tleV0pKSB7XG4gICAgICAgIHByZXYucHVzaChPYmplY3Qua2V5cyh2YWwpLm1hcChpdGVtZmlsdGVyID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBgZmlsdGVyWyR7aXRlbWZpbHRlcn1dYDtcbiAgICAgICAgICBpZiAoVXRpbC5pc09iamVjdCh2YWxbaXRlbWZpbHRlcl0pKSB7XG4gICAgICAgICAgICAvKiogSW4gY2FzZSBmaWx0ZXIgYW5kIGJhc2ljIGV4cHJlc2lvbiovXG4gICAgICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbHRlcktleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHZhbFtpdGVtZmlsdGVyXSkpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBJbiBjYXNlIHRoZSBzaW1wbGUgZmlsdGVyIHRvIGVzcGFwZSBxdW90ZXMqL1xuICAgICAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWxbaXRlbWZpbHRlcl0pfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5qb2luKCcmJykpO1xuXG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByZXYucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJlZml4KX09YCk7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG4gICAgICBpZiAoWydudW1iZXInLCAnYm9vbGVhbicsICdzdHJpbmcnXS5pbmNsdWRlcyh0eXBlb2YgdmFsKSkge1xuICAgICAgICBwcmV2LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YCk7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG4gICAgICBwcmV2LnB1c2goT2JqZWN0LmtleXModmFsKS5yZWR1Y2UocmVkdWNlcih2YWwsIHByZWZpeCksIFtdKS5qb2luKCcmJykpO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbml0aWFsT2JqKS5yZWR1Y2UocmVkdWNlcihpbml0aWFsT2JqKSwgW10pLmpvaW4oJyYnKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFwIGtleXMgb2Ygb2JqZWN0XG4gICAqIEZvciBleGFtcGxlOiBjb252ZXJ0aW5nIHRoZSBrZXlzIG9mIGFuIG9iamVjdCB0byB1cHBlcmNhc2VcbiAgICovXG4gIHN0YXRpYyByZWFkb25seSBtYXBLZXlzID0gKG9iaiwgZm4pID0+XG4gICAgT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgaykgPT4ge1xuICAgICAgYWNjW2ZuKG9ialtrXSwgaywgb2JqKV0gPSBvYmpba107XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICBzdGF0aWMgcmVhZG9ubHkgbWFwVmFsdWVzID0gKG9iaiwgZm4pID0+XG4gICAgT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBba106IGZuKG9ialtrXSkgfSksIHt9KTtcblxuXG4gIHN0YXRpYyB0b0xvd2VyQ2FzZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHRvVXBwZXJDYXNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuXG4gIHN0YXRpYyBwYXJzZVRvTG93ZXJDYXNlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoVXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeDogc3RyaW5nKSA9PiB4LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gVXRpbC5tYXBLZXlzKHZhbHVlLCBVdGlsLnRvTG93ZXJDYXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlVG9VcHBlckNhc2UodmFsdWU6IGFueSkge1xuICAgIGlmIChVdGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4OiBzdHJpbmcpID0+IHgudG9Mb2NhbGVVcHBlckNhc2UoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBVdGlsLm1hcEtleXModmFsdWUsIFV0aWwudG9VcHBlckNhc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgc29ydEZ1bmN0aW9uKHByb3BlcnR5QTogc3RyaW5nIHwgbnVtYmVyLCBwcm9wZXJ0eUI6IHN0cmluZyB8IG51bWJlciwgYWN0aXZlU29ydERpcmVjdGlvbjogc3RyaW5nKSB7XG5cbiAgICBsZXQgdmFsdWVBOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcbiAgICBsZXQgdmFsdWVCOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcm9wZXJ0eUEpKSB7XG4gICAgICB2YWx1ZUEgPSBpc05hTigrcHJvcGVydHlBKSA/IHByb3BlcnR5QS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogK3Byb3BlcnR5QTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlCKSkge1xuICAgICAgdmFsdWVCID0gaXNOYU4oK3Byb3BlcnR5QikgPyBwcm9wZXJ0eUIudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUI7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWVBIDw9IHZhbHVlQiA/IC0xIDogMSkgKiAoYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTEpO1xuICB9XG5cbiAgc3RhdGljIGNsb25lQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIGNvbnN0IGNsb25lZEFycmF5ID0gYXJyLm1hcCgoeCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpXG4gICAgcmV0dXJuIGNsb25lZEFycmF5O1xuICB9XG5cbiAgc3RhdGljIGdldExhc3RBY3RpdmF0ZVJvdXRlKHJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgICBsZXQgY2hpbGQgPSByb3V0ZVNuYXBzaG90O1xuICAgIHdoaWxlIChjaGlsZC5maXJzdENoaWxkKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkLmZpcnN0Q2hpbGQ7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufVxuIl19