@sumaris-net/ngx-components 2.4.85 → 2.4.86

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 (231) hide show
  1. package/esm2020/src/app/admin/admin-routing.module.mjs +5 -5
  2. package/esm2020/src/app/admin/admin.module.mjs +5 -5
  3. package/esm2020/src/app/admin/services/person.service.mjs +4 -4
  4. package/esm2020/src/app/admin/services/validator/person.validator.mjs +4 -4
  5. package/esm2020/src/app/admin/users/users.mjs +4 -4
  6. package/esm2020/src/app/admin/users/users.module.mjs +5 -5
  7. package/esm2020/src/app/core/about/about.modal.mjs +4 -4
  8. package/esm2020/src/app/core/about/about.module.mjs +5 -5
  9. package/esm2020/src/app/core/account/account.module.mjs +5 -5
  10. package/esm2020/src/app/core/account/account.page.mjs +4 -4
  11. package/esm2020/src/app/core/auth/auth.form.mjs +4 -4
  12. package/esm2020/src/app/core/auth/auth.modal.mjs +4 -4
  13. package/esm2020/src/app/core/auth/auth.module.mjs +5 -5
  14. package/esm2020/src/app/core/core.module.mjs +5 -5
  15. package/esm2020/src/app/core/core.testing.module.mjs +5 -5
  16. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
  17. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
  18. package/esm2020/src/app/core/form/entity/editor.class.mjs +7 -7
  19. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -4
  20. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +49 -39
  21. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
  22. package/esm2020/src/app/core/form/entity/entity.module.mjs +5 -5
  23. package/esm2020/src/app/core/form/form.class.mjs +4 -4
  24. package/esm2020/src/app/core/form/form.module.mjs +5 -5
  25. package/esm2020/src/app/core/form/list/list.form.mjs +4 -4
  26. package/esm2020/src/app/core/form/list/list.module.mjs +5 -5
  27. package/esm2020/src/app/core/form/properties/properties.form.mjs +4 -4
  28. package/esm2020/src/app/core/form/properties/properties.module.mjs +5 -5
  29. package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
  30. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
  31. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
  32. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +4 -4
  33. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
  34. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +4 -4
  35. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
  36. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
  37. package/esm2020/src/app/core/graphql/graphql.module.mjs +5 -5
  38. package/esm2020/src/app/core/graphql/graphql.service.mjs +4 -4
  39. package/esm2020/src/app/core/home/home.mjs +5 -5
  40. package/esm2020/src/app/core/home/home.module.mjs +5 -5
  41. package/esm2020/src/app/core/icon/icon.component.mjs +4 -4
  42. package/esm2020/src/app/core/icon/icon.module.mjs +5 -5
  43. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +4 -4
  44. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +5 -5
  45. package/esm2020/src/app/core/menu/menu.component.mjs +4 -4
  46. package/esm2020/src/app/core/menu/menu.module.mjs +5 -5
  47. package/esm2020/src/app/core/menu/menu.service.mjs +4 -4
  48. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
  49. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
  50. package/esm2020/src/app/core/peer/select-peer.modal.mjs +4 -4
  51. package/esm2020/src/app/core/peer/select-peer.module.mjs +5 -5
  52. package/esm2020/src/app/core/register/register-confirm.page.mjs +4 -4
  53. package/esm2020/src/app/core/register/register.form.mjs +4 -4
  54. package/esm2020/src/app/core/register/register.modal.mjs +4 -4
  55. package/esm2020/src/app/core/register/register.module.mjs +5 -5
  56. package/esm2020/src/app/core/services/account.service.mjs +9 -4
  57. package/esm2020/src/app/core/services/auth-guard.service.mjs +4 -4
  58. package/esm2020/src/app/core/services/base-entity-service.class.mjs +4 -4
  59. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +4 -4
  60. package/esm2020/src/app/core/services/config.service.mjs +4 -4
  61. package/esm2020/src/app/core/services/crypto.service.mjs +4 -4
  62. package/esm2020/src/app/core/services/local-settings.service.mjs +10 -10
  63. package/esm2020/src/app/core/services/model/config.model.mjs +3 -3
  64. package/esm2020/src/app/core/services/network.service.mjs +4 -4
  65. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +9 -9
  66. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  67. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  68. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  69. package/esm2020/src/app/core/services/platform.service.mjs +4 -4
  70. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +4 -4
  71. package/esm2020/src/app/core/services/testing/referential.validator.mjs +4 -4
  72. package/esm2020/src/app/core/services/validator/account.validator.mjs +4 -4
  73. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +4 -4
  74. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +4 -4
  75. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  76. package/esm2020/src/app/core/settings/settings.module.mjs +5 -5
  77. package/esm2020/src/app/core/settings/settings.page.mjs +4 -4
  78. package/esm2020/src/app/core/table/actions-column.component.mjs +4 -4
  79. package/esm2020/src/app/core/table/async-table.class.mjs +4 -4
  80. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
  81. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +4 -4
  82. package/esm2020/src/app/core/table/memory-table.class.mjs +4 -4
  83. package/esm2020/src/app/core/table/table-select-columns.component.mjs +4 -4
  84. package/esm2020/src/app/core/table/table.class.mjs +4 -4
  85. package/esm2020/src/app/core/table/table.module.mjs +5 -5
  86. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +4 -4
  87. package/esm2020/src/app/core/table/testing/table.testing.mjs +4 -4
  88. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +5 -5
  89. package/esm2020/src/app/shared/audio/audio.mjs +4 -4
  90. package/esm2020/src/app/shared/audio/audio.testing.mjs +4 -4
  91. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +5 -5
  92. package/esm2020/src/app/shared/capacitor/keyboard.mjs +4 -4
  93. package/esm2020/src/app/shared/debug/debug.component.mjs +4 -4
  94. package/esm2020/src/app/shared/debug/debug.module.mjs +5 -5
  95. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +4 -4
  96. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +4 -4
  97. package/esm2020/src/app/shared/directives/directives.module.mjs +5 -5
  98. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  99. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +4 -4
  100. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  101. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  102. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  103. package/esm2020/src/app/shared/file/file.service.mjs +4 -4
  104. package/esm2020/src/app/shared/form/field.component.mjs +4 -4
  105. package/esm2020/src/app/shared/form/loading-spinner.mjs +4 -4
  106. package/esm2020/src/app/shared/functions.mjs +4 -1
  107. package/esm2020/src/app/shared/gesture/gesture-config.mjs +4 -4
  108. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  109. package/esm2020/src/app/shared/help/help.modal.mjs +4 -4
  110. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
  111. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +4 -4
  112. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
  113. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
  114. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
  115. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
  116. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
  117. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
  118. package/esm2020/src/app/shared/image/image.module.mjs +5 -5
  119. package/esm2020/src/app/shared/image/image.service.mjs +4 -4
  120. package/esm2020/src/app/shared/logging/logging-service.class.mjs +4 -4
  121. package/esm2020/src/app/shared/logging/logging-service.module.mjs +5 -5
  122. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +4 -4
  123. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
  124. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +4 -4
  125. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +4 -4
  126. package/esm2020/src/app/shared/material/badge/badge.module.mjs +5 -5
  127. package/esm2020/src/app/shared/material/badge/badge.test.mjs +4 -4
  128. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +5 -5
  129. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +4 -4
  130. package/esm2020/src/app/shared/material/chips/chips.module.mjs +5 -5
  131. package/esm2020/src/app/shared/material/chips/material.chips.mjs +4 -4
  132. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +4 -4
  133. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  134. package/esm2020/src/app/shared/material/datetime/material.date.mjs +4 -4
  135. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +4 -4
  136. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +4 -4
  137. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
  138. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +4 -4
  139. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +4 -4
  140. package/esm2020/src/app/shared/material/duration/duration.module.mjs +5 -5
  141. package/esm2020/src/app/shared/material/duration/material.duration.mjs +4 -4
  142. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +4 -4
  143. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  144. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
  145. package/esm2020/src/app/shared/material/material.module.mjs +5 -5
  146. package/esm2020/src/app/shared/material/material.testing.module.mjs +5 -5
  147. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +4 -4
  148. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +4 -4
  149. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +4 -4
  150. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +4 -4
  151. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +4 -4
  152. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +4 -4
  153. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +5 -5
  154. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +4 -4
  155. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +4 -4
  156. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  157. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +4 -4
  158. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +5 -5
  159. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
  160. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  161. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +4 -4
  162. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
  163. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +7 -7
  164. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
  165. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +5 -5
  166. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +4 -4
  167. package/esm2020/src/app/shared/pipes/form.pipes.mjs +19 -19
  168. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  169. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
  170. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +13 -13
  171. package/esm2020/src/app/shared/pipes/math.pipes.mjs +13 -13
  172. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
  173. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  174. package/esm2020/src/app/shared/pipes/pipes.module.mjs +5 -5
  175. package/esm2020/src/app/shared/pipes/property.pipes.mjs +8 -8
  176. package/esm2020/src/app/shared/pipes/string.pipes.mjs +22 -22
  177. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
  178. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +4 -4
  179. package/esm2020/src/app/shared/services/progress-bar.service.mjs +4 -4
  180. package/esm2020/src/app/shared/services/startable-service.class.mjs +6 -1
  181. package/esm2020/src/app/shared/services/translate-context.service.mjs +4 -4
  182. package/esm2020/src/app/shared/shared-routing.module.mjs +8 -8
  183. package/esm2020/src/app/shared/shared.module.mjs +5 -5
  184. package/esm2020/src/app/shared/shared.testing.module.mjs +5 -5
  185. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +4 -4
  186. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +5 -5
  187. package/esm2020/src/app/shared/storage/storage.service.mjs +4 -4
  188. package/esm2020/src/app/shared/testing/observable.test.mjs +4 -4
  189. package/esm2020/src/app/shared/testing/tests.page.mjs +4 -4
  190. package/esm2020/src/app/shared/toast/toast.testing.mjs +6 -6
  191. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +5 -5
  192. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
  193. package/esm2020/src/app/shared/toolbar/toolbar.mjs +5 -5
  194. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +5 -5
  195. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
  196. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
  197. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
  198. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +4 -4
  199. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
  200. package/esm2020/src/app/social/job/job.module.mjs +5 -5
  201. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +4 -4
  202. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +4 -4
  203. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +4 -4
  204. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -4
  205. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
  206. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +5 -5
  207. package/esm2020/src/app/social/message/message.form.mjs +4 -4
  208. package/esm2020/src/app/social/message/message.modal.mjs +4 -4
  209. package/esm2020/src/app/social/message/message.module.mjs +5 -5
  210. package/esm2020/src/app/social/message/message.service.mjs +4 -4
  211. package/esm2020/src/app/social/social.module.mjs +5 -5
  212. package/esm2020/src/app/social/social.testing.module.mjs +5 -5
  213. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +4 -4
  214. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
  215. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +4 -4
  216. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
  217. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
  218. package/esm2020/src/app/social/user-event/user-event.module.mjs +5 -5
  219. package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -4
  220. package/fesm2015/sumaris-net.ngx-components.mjs +898 -871
  221. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  222. package/fesm2020/sumaris-net.ngx-components.mjs +891 -869
  223. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  224. package/package.json +1 -1
  225. package/src/app/core/form/entity/entity-editor.class.d.ts +33 -29
  226. package/src/app/core/services/account.service.d.ts +5 -0
  227. package/src/app/core/services/local-settings.service.d.ts +1 -1
  228. package/src/app/core/services/platform.service.d.ts +2 -2
  229. package/src/app/shared/file/file.utils.d.ts +1 -1
  230. package/src/app/shared/functions.d.ts +1 -0
  231. package/src/app/shared/services/startable-service.class.d.ts +1 -0
@@ -244,15 +244,15 @@ export class AppFormField {
244
244
  }
245
245
  }
246
246
  }
247
- AppFormField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppFormField, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i2.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
248
- AppFormField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AppFormField, selector: "app-form-field", inputs: { definition: "definition", required: "required", readonly: "readonly", disabled: "disabled", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", compact: "compact", floatLabel: "floatLabel", tabindex: "tabindex", autofocus: "autofocus", clearable: "clearable", chipColor: "chipColor", debug: "debug", classList: ["class", "classList"] }, outputs: { onKeyupEnter: "keyup.enter" }, providers: [
247
+ AppFormField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppFormField, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i2.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
248
+ AppFormField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AppFormField, selector: "app-form-field", inputs: { definition: "definition", required: "required", readonly: "readonly", disabled: "disabled", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", compact: "compact", floatLabel: "floatLabel", tabindex: "tabindex", autofocus: "autofocus", clearable: "clearable", chipColor: "chipColor", debug: "debug", classList: ["class", "classList"] }, outputs: { onKeyupEnter: "keyup.enter" }, providers: [
249
249
  {
250
250
  provide: NG_VALUE_ACCESSOR,
251
251
  useExisting: forwardRef(() => AppFormField),
252
252
  multi: true
253
253
  }
254
254
  ], viewQueries: [{ propertyName: "matInput", first: true, predicate: ["matInput"], descendants: true }, { propertyName: "autocompleteField", first: true, predicate: ["autocompleteField"], descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"type\">\n\n <!-- integer -->\n <mat-form-field *ngSwitchCase=\"'integer'\" [floatLabel]=\"floatLabel\" [class]=\"classList\">\n <input matInput #matInput\n type=\"number\"\n autocomplete=\"off\"\n [readonly]=\"readonly\"\n [min]=\"definition.minValue\"\n [max]=\"definition.maxValue\"\n pattern=\"-?[0-9]*\"\n step=\"1\"\n [appAutofocus]=\"autofocus\"\n [placeholder]=\"placeholder\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\"\n (keypress)=\"filterNumberInput($event, false)\"\n [formControl]=\"formControl\"\n [required]=\"required\"\n [tabIndex]=\"tabindex\"\n (click)=\"selectInputContent($event)\">\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{(compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate:formControl.errors['min'] }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors['max'] }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('pattern')\">\n {{'ERROR.FIELD_NOT_VALID_INTEGER'| translate }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('integer')\">\n {{'ERROR.FIELD_NOT_VALID_INTEGER'| translate }}</mat-error>\n\n <button matSuffix *ngIf=\"clearable\"\n mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"formControl.reset()\"\n [hidden]=\"formControl.disabled || (formControl|formGetValue|isNilOrBlank)\">\n <mat-icon>close</mat-icon>\n </button>\n\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-form-field>\n\n <!-- double -->\n <mat-form-field *ngSwitchCase=\"'double'\" [floatLabel]=\"floatLabel\" [class]=\"classList\">\n\n <input matInput #matInput\n type=\"number\"\n decimal=\"true\"\n autocomplete=\"off\"\n [min]=\"definition.minValue\"\n [max]=\"definition.maxValue\"\n [appAutofocus]=\"autofocus\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [step]=\"numberInputStep\"\n (keypress)=\"filterNumberInput($event, true)\"\n [formControl]=\"formControl\"\n [required]=\"required\"\n [tabIndex]=\"tabindex\"\n (click)=\"selectInputContent($event)\">\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('decimal')\" translate>ERROR.FIELD_NOT_VALID_DECIMAL</mat-error>\n <mat-error *ngIf=\"formControl.hasError('min')\">\n {{ (compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN')| translate:formControl.errors['min'] }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('max')\">\n {{(compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate:formControl.errors['max'] }}</mat-error>\n <mat-error *ngIf=\"formControl.hasError('maxDecimals')\">\n {{ (compact ? 'ERROR.FIELD_MAXIMUM_DECIMALS_COMPACT' : 'ERROR.FIELD_MAXIMUM_DECIMALS')| translate:{maxDecimals:\n definition.maximumNumberDecimals} }}</mat-error>\n\n <button matSuffix *ngIf=\"clearable\"\n mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"formControl.reset()\"\n [hidden]=\"formControl.disabled || (formControl|formGetValue|isNilOrBlank)\">\n <mat-icon>close</mat-icon>\n </button>\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-form-field>\n\n <!-- boolean -->\n <mat-boolean-field *ngSwitchCase=\"'boolean'\" #matInput\n [class]=\"classList\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [floatLabel]=\"floatLabel\"\n [required]=\"required\"\n [compact]=\"compact\"\n [tabindex]=\"tabindex\"\n [readonly]=\"readonly\">\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-boolean-field>\n\n <!-- date -->\n <mat-date-field *ngSwitchCase=\"'date'\" #matInput\n [class]=\"classList\"\n [formControl]=\"formControl\"\n [placeholder]=\"compact ? ('COMMON.DATE_PLACEHOLDER'|translate): placeholder\"\n [floatLabel]=\"floatLabel\"\n [required]=\"required\"\n [clearable]=\"clearable\"\n [readonly]=\"readonly\"\n [compact]=\"compact\"\n [tabindex]=\"tabindex\"\n [autofocus]=\"autofocus\">\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-date-field>\n\n <!-- date time -->\n <mat-date-time-field *ngSwitchCase=\"'dateTime'\" #matInput\n [class]=\"classList\"\n [formControl]=\"formControl\"\n [placeholder]=\"compact ? ('COMMON.DATE_TIME_PLACEHOLDER'|translate): placeholder\"\n [floatLabel]=\"floatLabel\"\n [required]=\"required\"\n [clearable]=\"clearable\"\n [readonly]=\"readonly\"\n [compact]=\"compact\"\n [tabindex]=\"tabindex\"\n [autofocus]=\"autofocus\">\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-date-time-field>\n\n <!-- enum -->\n <mat-form-field *ngSwitchCase=\"'enum'\" [floatLabel]=\"floatLabel\" [class]=\"classList\">\n <mat-select [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\">\n <mat-option *ngFor=\"let item of _values\" [value]=\"item.key\">{{ item.value | translate }}</mat-option>\n </mat-select>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-form-field>\n\n <!-- multi enum -->\n <mat-chips-field *ngSwitchCase=\"'enums'\"\n [class]=\"classList\"\n [placeholder]=\"placeholder\"\n [floatLabel]=\"floatLabel\"\n [formControl]=\"formControl\"\n [clearable]=\"clearable\"\n [items]=\"_values\"\n [displayAttributes]=\"definition.autocomplete?.attributes || ['key', 'value']\"\n [config]=\"definition.autocomplete\"\n [showAllOnFocus]=\"true\"\n [required]=\"required\"\n [chipColor]=\"chipColor\">\n <ng-content select=\"[matPrefix]\"></ng-content>\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-chips-field>\n\n <!-- color -->\n <mat-form-field *ngSwitchCase=\"'color'\" [floatLabel]=\"floatLabel\" [class]=\"classList\">\n\n <ion-icon margin-right name=\"color-fill\" matPrefix></ion-icon>\n\n <input matInput autocomplete=\"off\"\n [appAutofocus]=\"autofocus\"\n [formControl]=\"formControl\"\n [style.color]=\"getColorContrast(formControl.value)\"\n [style.background]=\"formControl.value\"\n [colorPicker]=\"formControl.value\"\n (colorPickerChange)=\"writeValue($event)\"\n [cpSaveClickOutside]=\"true\"\n cpPosition=\"top\"\n cpOutputFormat=\"hex\"\n [cpOKButton]=\"false\"\n [required]=\"required\"/>\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n </mat-form-field>\n\n <!-- string -->\n <mat-form-field *ngSwitchCase=\"'string'\" [floatLabel]=\"floatLabel\" [class]=\"classList\">\n <input matInput #matInput\n autocomplete=\"off\"\n [appAutofocus]=\"autofocus\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [tabIndex]=\"tabindex\"\n (click)=\"selectInputContent($event)\"\n (keypress)=\"filterAlphanumericalInput($event)\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\">\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <button matSuffix *ngIf=\"clearable\"\n mat-icon-button tabindex=\"-1\"\n type=\"button\"\n (click)=\"formControl.reset()\"\n [hidden]=\"formControl.disabled || (formControl|formGetValue|isNilOrBlank)\">\n <mat-icon>close</mat-icon>\n </button>\n\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-form-field>\n\n <!-- auto-complete -->\n <mat-autocomplete-field *ngSwitchCase=\"'entity'\"\n #autocompleteField\n [class]=\"classList\"\n [autofocus]=\"autofocus\"\n [placeholder]=\"placeholder\"\n [floatLabel]=\"floatLabel\"\n [formControl]=\"formControl\"\n [config]=\"definition.autocomplete\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [clearable]=\"clearable\"\n (keyup.enter)=\"onKeyupEnter.emit($event)\"\n [displayWith]=\"getDisplayValueFn(definition)\">\n <ng-content select=\"[matPrefix]\"></ng-content>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </mat-autocomplete-field>\n\n <!-- multi auto-complete -->\n <mat-chips-field *ngSwitchCase=\"'entities'\"\n [class]=\"classList\"\n [placeholder]=\"placeholder\"\n [floatLabel]=\"floatLabel\"\n [formControl]=\"formControl\"\n [config]=\"definition.autocomplete\"\n [required]=\"required\"\n [chipColor]=\"chipColor\"\n [clearable]=\"clearable\"\n [displayWith]=\"getDisplayValueFn(definition)\">\n <ng-content select=\"[matPrefix]\"></ng-content>\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </mat-chips-field>\n\n <!-- other -->\n <div *ngSwitchDefault>\n <mat-error *ngIf=\"type\">Unknown type {{type}} for option {{definition.key}}. Please report this error.</mat-error>\n <mat-error *ngIf=\"!type\">Error on option field. Please check console log for details.</mat-error>\n <div matSuffix>\n <ng-content select=\"[matSuffix]\"></ng-content>\n </div>\n </div>\n\n</ng-container>\n", styles: [":host{display:inline-block;position:relative}button[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i5.ColorPickerDirective, selector: "[colorPicker]", inputs: ["colorPicker", "cpWidth", "cpHeight", "cpToggle", "cpDisabled", "cpIgnoredElements", "cpFallbackColor", "cpColorMode", "cpCmykEnabled", "cpOutputFormat", "cpAlphaChannel", "cpDisableInput", "cpDialogDisplay", "cpSaveClickOutside", "cpCloseClickOutside", "cpUseRootViewContainer", "cpPosition", "cpPositionOffset", "cpPositionRelativeToArrow", "cpOKButton", "cpOKButtonText", "cpOKButtonClass", "cpCancelButton", "cpCancelButtonText", "cpCancelButtonClass", "cpEyeDropper", "cpPresetLabel", "cpPresetColors", "cpPresetColorsClass", "cpMaxPresetColorsLength", "cpPresetEmptyMessage", "cpPresetEmptyMessageClass", "cpAddColorButton", "cpAddColorButtonText", "cpAddColorButtonClass", "cpRemoveColorButtonClass", "cpExtraTemplate"], outputs: ["cpInputChange", "cpToggleChange", "cpSliderChange", "cpSliderDragEnd", "cpSliderDragStart", "colorPickerOpen", "colorPickerClose", "colorPickerCancel", "colorPickerSelect", "colorPickerChange", "cpCmykColorChange", "cpPresetColorsChange"], exportAs: ["ngxColorPicker"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i12.MatAutocompleteField, selector: "mat-autocomplete-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "placeholder", "suggestFn", "required", "mobile", "clearable", "debounceTime", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "autofocus", "config", "i18nPrefix", "noResultMessage", "class", "panelWidth", "matAutocompletePosition", "multiple", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "debug", "showSearchBar", "stickySearchBar", "filter", "readonly", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keyup.enter"] }, { kind: "component", type: i13.MatDate, selector: "mat-date-field", inputs: ["mobile", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "required", "compact", "placeholderChar", "autofocus", "startDate", "clearable", "timezone", "datePickerFilter", "readonly", "tabindex"] }, { kind: "component", type: i14.MatDateTime, selector: "mat-date-time-field", inputs: ["formControl", "formControlName", "placeholder", "floatLabel", "appearance", "required", "mobile", "compact", "placeholderChar", "autofocus", "startDate", "clearable", "datePickerFilter", "readonly", "tabindex"] }, { kind: "component", type: i15.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "tabindex", "value"], outputs: ["keyup.enter", "onBlur"] }, { kind: "component", type: i16.MatChipsField, selector: "mat-chips-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "placeholder", "suggestFn", "required", "mobile", "readonly", "clearable", "debounceTime", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "autofocus", "config", "i18nPrefix", "noResultMessage", "class", "panelWidth", "matAutocompletePosition", "itemSize", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "chipColor", "debug", "filter", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keyup.enter"] }, { kind: "directive", type: i17.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i18.IsNilOrBlankPipe, name: "isNilOrBlank" }, { kind: "pipe", type: i19.FormGetValuePipe, name: "formGetValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppFormField, decorators: [{
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppFormField, decorators: [{
256
256
  type: Component,
257
257
  args: [{ selector: 'app-form-field', providers: [
258
258
  {
@@ -304,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
304
304
  type: ViewChild,
305
305
  args: ['autocompleteField']
306
306
  }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQUUsY0FBYyxFQUMxQixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUErRCxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzSCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxZQUFZLEVBQW1CLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUdwSyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96QyxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBZUYsTUFBTSxPQUFPLFlBQVk7SUFpRHZCLFlBQ1ksU0FBMkIsRUFDM0IsRUFBcUIsRUFDckIsUUFBa0IsRUFDUixZQUFnQztRQUgxQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1IsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBbkQ5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RSxDQUFDLFlBQVksQ0FBQztZQUMzQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YseU9DeENILDRoV0FxUUE7NEZEMU5hLFlBQVk7a0JBYnhCLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDOzRCQUMzQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUQ1QyxRQUFROzRDQXpDUCxVQUFVO3NCQURiLEtBQUs7Z0JBV0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUdkLFlBQVk7c0JBRFgsTUFBTTt1QkFBQyxhQUFhO2dCQU9FLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDVyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZiwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RmxvYXRMYWJlbFR5cGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHthcnJheURpc3RpbmN0LCBpc0JsYW5rU3RyaW5nLCBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsQm9vbGVhbiwgaXNOb3ROaWxPckJsYW5rLCBqb2luUHJvcGVydGllc1BhdGgsIHRvQm9vbGVhbn0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IERpc3BsYXlGbiwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkVHlwZSB9IGZyb20gJy4vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Z2V0Q29sb3JDb250cmFzdH0gZnJvbSAnLi4vZ3JhcGgvY29sb3JzLnV0aWxzJztcbmltcG9ydCB7YXNJbnB1dEVsZW1lbnQsIGZpbHRlck51bWJlcklucHV0LCBzZWxlY3RJbnB1dENvbnRlbnR9IGZyb20gJy4uL2lucHV0cyc7XG5pbXBvcnQge3RvRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtQcmVkZWZpbmVkQ29sb3JzfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZCB9IGZyb20gJy4uL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtpc05vbkVtcHR5QXJyYXl9IGZyb20gJ0BhcG9sbG8vY2xpZW50L3V0aWxpdGllcyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybS1maWVsZCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXBwRm9ybUZpZWxkKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBGb3JtRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9kZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uO1xuXG4gIHByb3RlY3RlZCBfdmFsdWVzOiBQcm9wZXJ0eVtdO1xuXG4gIHByb3RlY3RlZCB0eXBlOiBGb3JtRmllbGRUeXBlO1xuICBwcm90ZWN0ZWQgbnVtYmVySW5wdXRTdGVwOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IGRlZmluaXRpb24odmFsdWU6IEZvcm1GaWVsZERlZmluaXRpb24pIHtcbiAgICBpZiAoIXZhbHVlIHx8IHRoaXMuX2RlZmluaXRpb24gPT09IHZhbHVlKSByZXR1cm47IC8vIFNraXAgaXMgc2FtZSBvciBuaWxcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fb25EZWZpbml0aW9uQ2hhbmdlZCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHRhYmluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbjtcblxuICBASW5wdXQoKSBjbGVhcmFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNoaXBDb2xvcjogVGhlbWVQYWxldHRlIHwgUHJlZGVmaW5lZENvbG9ycyA9IG51bGw7XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG5cbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJylcbiAgb25LZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdtYXRJbnB1dCcpIG1hdElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVGaWVsZCcpIGF1dG9jb21wbGV0ZUZpZWxkOiBNYXRBdXRvY29tcGxldGVGaWVsZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuY2hlY2tBbmRSZXNvbHZlRm9ybUNvbnRyb2woKTtcblxuICAgIGlmICghdGhpcy5fZGVmaW5pdGlvbikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZGVmaW5pdGlvblxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+LicpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZGVmaW5pdGlvbiAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgXFwnZGVmaW5pdGlvblxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+LiBTaG91bGQgYmUgYW4gb2JqZWN0LicpO1xuICAgIHRoaXMuX29uRGVmaW5pdGlvbkNoYW5nZWQodGhpcy5fZGVmaW5pdGlvbiwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICgodGhpcy50eXBlID09PSAnaW50ZWdlcicgfHwgdGhpcy50eXBlID09PSAnZG91YmxlJykgJiYgTnVtYmVyLmlzTmFOKG9iaikpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiV0FSTjogdHJ5aW5nIHRvIHNldCBOYU4gdmFsdWUsIGluIGFuIDxhcHAtZm9ybS1maWVsZD4hIFJlc2V0IHRvIG51bGxcIik7XG5cbiAgICAgIG9iaiA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBvYmogPSAob2JqICE9PSAnZmFsc2UnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIG9iaiA9IHRvRGF0ZUlTT1N0cmluZyhvYmopO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlbnVtcycgJiYgaXNOb3ROaWwob2JqKSkge1xuICAgICAgbGV0IGNoYW5nZXMgPSBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICBvYmogPSBvYmouc3BsaXQoJywnKTtcbiAgICAgICAgY2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkQXJyYXkgPSAob2JqIHx8IFtdKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzLmZpbmQodiA9PiB2LmtleSA9PT0gaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5maWx0ZXIoaXNOb3ROaWwpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgb2JqID0gdXBkYXRlZEFycmF5O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlbnRpdHknICYmIGlzTmlsT3JCbGFuayhvYmopKSB7XG4gICAgICBvYmogPSBudWxsO1xuICAgIH1cbiAgICBpZiAob2JqICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhcIlNldCA8YXBwLWZvcm0tZmllbGQ+IHZhbHVlOiBcIiwgb2JqKTtcblxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9iaiwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sob2JqKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PT0gaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckFscGhhbnVtZXJpY2FsSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgLyo9RW50ZXIqLyAmJiB0aGlzLm9uS2V5dXBFbnRlci5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbktleXVwRW50ZXIuZW1pdChldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEFkZCBmZWF0dXJlcyAoZS5nLiBjaGVjayBhZ2FpbnN0IGEgcGF0dGVybilcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLm1hdElucHV0KSB0aGlzLm1hdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBlbHNlIGlmICh0aGlzLmF1dG9jb21wbGV0ZUZpZWxkKSB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmZvY3VzKCk7XG4gIH1cblxuICBmaWx0ZXJOdW1iZXJJbnB1dCA9IGZpbHRlck51bWJlcklucHV0O1xuICBzZWxlY3RJbnB1dENvbnRlbnQgPSBzZWxlY3RJbnB1dENvbnRlbnQ7XG5cbiAgZ2V0RGlzcGxheVZhbHVlRm4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IERpc3BsYXlGbiB7XG4gICAgaWYgKGRlZmluaXRpb24uYXV0b2NvbXBsZXRlICYmIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKSB7XG4gICAgICByZXR1cm4gKG9iajogYW55KSA9PiBkZWZpbml0aW9uLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aChvYmopO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGVmaW5pdGlvbi5hdXRvY29tcGxldGUgJiYgZGVmaW5pdGlvbi5hdXRvY29tcGxldGUuYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICByZXR1cm4gKG9iajogYW55KSA9PiBvYmogJiYgam9pblByb3BlcnRpZXNQYXRoKG9iaiwgYXR0cmlidXRlcyk7XG4gIH1cblxuICBnZXRDb2xvckNvbnRyYXN0KGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBpc05vdE5pbE9yQmxhbmsoY29sb3IpID8gZ2V0Q29sb3JDb250cmFzdChjb2xvciwgdHJ1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gcmVsb2FkIHZhbHVlcywgaWYgbm90IGRldGVjdGVkXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX2RlZmluaXRpb24pIHJldHVybjtcblxuICAgIHRoaXMuX29uRGVmaW5pdGlvbkNoYW5nZWQodGhpcy5fZGVmaW5pdGlvbik7XG5cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVGaWVsZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkPy5yZWxvYWRJdGVtcyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29tcHV0ZU51bWJlcklucHV0U3RlcChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHtcblxuICAgIGlmIChkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyA+IDApIHtcbiAgICAgIGxldCBzdGVwID0gJzAuJztcbiAgICAgIGlmIChkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyAtIDE7IGkrKykge1xuICAgICAgICAgIHN0ZXAgKz0gJzAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGVwICs9ICcxJztcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzEnO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlVmFsdWVzRnJvbVRva2VuKHRva2VuOiBJbmplY3Rpb25Ub2tlbjwoc3RyaW5nfFByb3BlcnR5KVtdPik6IGFueVtdIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmluamVjdG9yLmdldCh0b2tlbik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHRoaXMuY29tcHV0ZVZhbHVlcyh2YWx1ZXMpIDogW107XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVZhbHVlcyh2YWx1ZXM6IChzdHJpbmd8UHJvcGVydHkpW10pOiBQcm9wZXJ0eVtdIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4gICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpXG4gICAgICA/IDxQcm9wZXJ0eT57a2V5OiB2LCB2YWx1ZTogdn1cbiAgICAgIDogPFByb3BlcnR5PntrZXk6IHYua2V5LCB2YWx1ZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2LnZhbHVlKX1cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrQW5kUmVzb2x2ZUZvcm1Db250cm9sKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sKSByZXR1cm47IC8vIE9LLCB0aGVyZSBpcyBhIGNvbnRyb2xcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cERpcikge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgdXNpbmcgZGVmaW5pdGlvbi5rZXksIGFzIGZvcm1Db250cm9sTmFtZVxuICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLl9kZWZpbml0aW9uLmtleSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sTmFtZSA9IHRoaXMuX2RlZmluaXRpb24ua2V5O1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2xOYW1lID0gKHRoaXMuZm9ybUdyb3VwRGlyLmRpcmVjdGl2ZXMgfHwgW10pLmZpbmQoZCA9PiB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiBkLm5hbWUgPT09IHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBmb3JtQ29udHJvbE5hbWUgJiYgZm9ybUNvbnRyb2xOYW1lLmNvbnRyb2w7XG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXR0cmlidXRlIFxcJ2Zvcm1Db250cm9sXFwnIG9yIFxcJ2Zvcm1Db250cm9sTmFtZVxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+IGNvbXBvbmVudC4nKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uRGVmaW5pdGlvbkNoYW5nZWQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuXG4gICAgdGhpcy50eXBlID0gZGVmaW5pdGlvbi50eXBlO1xuICAgIGlmICghdGhpcy50eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIFxcJ2RlZmluaXRpb25cXCcgaW4gPGFwcC1mb3JtLWZpZWxkPi4gTWlzc2luZyB0eXBlICEnKTtcblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyIHx8ICh0aGlzLl9kZWZpbml0aW9uLmxhYmVsICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5fZGVmaW5pdGlvbi5sYWJlbCkpO1xuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZCkgPyB0aGlzLnJlcXVpcmVkIDogKHRoaXMuX2RlZmluaXRpb24ucmVxdWlyZWQgfHwgdGhpcy5mb3JtQ29udHJvbD8udmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5yZXF1aXJlZCkpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0b0Jvb2xlYW4odGhpcy5kaXNhYmxlZCwgdG9Cb29sZWFuKHRoaXMuX2RlZmluaXRpb24uZGlzYWJsZWQsIGZhbHNlKSk7XG5cbiAgICAvLyBkb3VibGVcbiAgICBpZiAodGhpcy50eXBlID09PSAnZG91YmxlJykge1xuICAgICAgdGhpcy5udW1iZXJJbnB1dFN0ZXAgPSB0aGlzLmNvbXB1dGVOdW1iZXJJbnB1dFN0ZXAoZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgLy8gZW51bSAob3IgZW51bXMpXG4gICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnZW51bScgfHwgdGhpcy50eXBlID09PSAnZW51bXMnKSB7XG4gICAgICAvLyBSZXNvbHZlIGVudW0gdmFsdWVzXG4gICAgICBpZiAoZGVmaW5pdGlvbi52YWx1ZXMgaW5zdGFuY2VvZiBJbmplY3Rpb25Ub2tlbikge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLmNvbXB1dGVWYWx1ZXNGcm9tVG9rZW4oZGVmaW5pdGlvbi52YWx1ZXMpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHRoaXMuY29tcHV0ZVZhbHVlcyhkZWZpbml0aW9uLnZhbHVlcyBhcyAoc3RyaW5nW118UHJvcGVydHlbXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlcGFpbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFJlY29tcHV0ZSB0YWIgaW5kZXgsIGJlY2F1c2UgaWYgdHlwZSBjaGFuZ2VkLCB0aGVuIG1hdElucHV0IGNhbiBoYXZlIGNoYW5nZWRcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVGFiSW5kZXgodGltZW91dD86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnRhYmluZGV4ICYmIHRoaXMudGFiaW5kZXggIT09IC0xKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGFzSW5wdXRFbGVtZW50KHRoaXMubWF0SW5wdXQpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQudGFiSW5kZXggPSB0aGlzLnRhYmluZGV4O1xuICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hdXRvY29tcGxldGVGaWVsZCkge1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQudGFiaW5kZXggPSB0aGlzLnRhYmluZGV4O1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0IHx8IDApO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxuXG4gIDwhLS0gaW50ZWdlciAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInaW50ZWdlcidcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjbWF0SW5wdXRcbiAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFttaW5dPVwiZGVmaW5pdGlvbi5taW5WYWx1ZVwiXG4gICAgICAgICAgIFttYXhdPVwiZGVmaW5pdGlvbi5tYXhWYWx1ZVwiXG4gICAgICAgICAgIHBhdHRlcm49XCItP1swLTldKlwiXG4gICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlwcmVzcyk9XCJmaWx0ZXJOdW1iZXJJbnB1dCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgIFt0YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJbnB1dENvbnRlbnQoJGV2ZW50KVwiPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJylcIj5cbiAgICAgIHt7KGNvbXBhY3QgPyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01JTicpIHwgdHJhbnNsYXRlOmZvcm1Db250cm9sLmVycm9yc1snbWluJ10gfX08L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpXCI+XG4gICAgICB7eyhjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTpmb3JtQ29udHJvbC5lcnJvcnNbJ21heCddIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgIHt7J0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJ3wgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdpbnRlZ2VyJylcIj5cbiAgICAgIHt7J0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJ3wgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb3JtQ29udHJvbC5yZXNldCgpXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWQgfHwgKGZvcm1Db250cm9sfGZvcm1HZXRWYWx1ZXxpc05pbE9yQmxhbmspXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIGRvdWJsZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZG91YmxlJ1wiIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG5cbiAgICA8aW5wdXQgbWF0SW5wdXQgI21hdElucHV0XG4gICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICBkZWNpbWFsPVwidHJ1ZVwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFttaW5dPVwiZGVmaW5pdGlvbi5taW5WYWx1ZVwiXG4gICAgICAgICAgIFttYXhdPVwiZGVmaW5pdGlvbi5tYXhWYWx1ZVwiXG4gICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3N0ZXBdPVwibnVtYmVySW5wdXRTdGVwXCJcbiAgICAgICAgICAgKGtleXByZXNzKT1cImZpbHRlck51bWJlcklucHV0KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW5wdXRDb250ZW50KCRldmVudClcIj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2RlY2ltYWwnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREVDSU1BTDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJylcIj5cbiAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01JTl9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NSU4nKXwgdHJhbnNsYXRlOmZvcm1Db250cm9sLmVycm9yc1snbWluJ10gfX08L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpXCI+XG4gICAgICB7eyhjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTpmb3JtQ29udHJvbC5lcnJvcnNbJ21heCddIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdtYXhEZWNpbWFscycpXCI+XG4gICAgICB7eyAoY29tcGFjdCA/ICdFUlJPUi5GSUVMRF9NQVhJTVVNX0RFQ0lNQUxTX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01BWElNVU1fREVDSU1BTFMnKXwgdHJhbnNsYXRlOnttYXhEZWNpbWFsczpcbiAgICAgIGRlZmluaXRpb24ubWF4aW11bU51bWJlckRlY2ltYWxzfSB9fTwvbWF0LWVycm9yPlxuXG4gICAgPGJ1dHRvbiBtYXRTdWZmaXggKm5nSWY9XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZm9ybUNvbnRyb2wucmVzZXQoKVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZvcm1Db250cm9sLmRpc2FibGVkIHx8IChmb3JtQ29udHJvbHxmb3JtR2V0VmFsdWV8aXNOaWxPckJsYW5rKVwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwhLS0gYm9vbGVhbiAtLT5cbiAgPG1hdC1ib29sZWFuLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1ib29sZWFuLWZpZWxkPlxuXG4gIDwhLS0gZGF0ZSAtLT5cbiAgPG1hdC1kYXRlLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wYWN0ID8gKCdDT01NT04uREFURV9QTEFDRUhPTERFUid8dHJhbnNsYXRlKTogcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCI+XG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZGF0ZS1maWVsZD5cblxuICA8IS0tIGRhdGUgdGltZSAtLT5cbiAgPG1hdC1kYXRlLXRpbWUtZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wYWN0ID8gKCdDT01NT04uREFURV9USU1FX1BMQUNFSE9MREVSJ3x0cmFuc2xhdGUpOiBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiPlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWRhdGUtdGltZS1maWVsZD5cblxuICA8IS0tIGVudW0gLS0+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ2VudW0nXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtjbGFzc109XCJjbGFzc0xpc3RcIj5cbiAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbktleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfdmFsdWVzXCIgW3ZhbHVlXT1cIml0ZW0ua2V5XCI+e3sgaXRlbS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPCEtLSBtdWx0aSBlbnVtIC0tPlxuICA8bWF0LWNoaXBzLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZW51bXMnXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJfdmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzcGxheUF0dHJpYnV0ZXNdPVwiZGVmaW5pdGlvbi5hdXRvY29tcGxldGU/LmF0dHJpYnV0ZXMgfHwgWydrZXknLCAndmFsdWUnXVwiXG4gICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkZWZpbml0aW9uLmF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgW3Nob3dBbGxPbkZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgW2NoaXBDb2xvcl09XCJjaGlwQ29sb3JcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1jaGlwcy1maWVsZD5cblxuICA8IS0tIGNvbG9yIC0tPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidjb2xvcidcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuXG4gICAgPGlvbi1pY29uIG1hcmdpbi1yaWdodCBuYW1lPVwiY29sb3ItZmlsbFwiIG1hdFByZWZpeD48L2lvbi1pY29uPlxuXG4gICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldENvbG9yQ29udHJhc3QoZm9ybUNvbnRyb2wudmFsdWUpXCJcbiAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICBbY29sb3JQaWNrZXJdPVwiZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAoY29sb3JQaWNrZXJDaGFuZ2UpPVwid3JpdGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgW2NwU2F2ZUNsaWNrT3V0c2lkZV09XCJ0cnVlXCJcbiAgICAgICAgICAgY3BQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgIGNwT3V0cHV0Rm9ybWF0PVwiaGV4XCJcbiAgICAgICAgICAgW2NwT0tCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIi8+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPCEtLSBzdHJpbmcgLS0+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ3N0cmluZydcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjbWF0SW5wdXRcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW5wdXRDb250ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5cHJlc3MpPVwiZmlsdGVyQWxwaGFudW1lcmljYWxJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uS2V5dXBFbnRlci5lbWl0KCRldmVudClcIj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgIDxidXR0b24gbWF0U3VmZml4ICpuZ0lmPVwiY2xlYXJhYmxlXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1Db250cm9sLnJlc2V0KClcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmb3JtQ29udHJvbC5kaXNhYmxlZCB8fCAoZm9ybUNvbnRyb2x8Zm9ybUdldFZhbHVlfGlzTmlsT3JCbGFuaylcIj5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwhLS0gYXV0by1jb21wbGV0ZSAtLT5cbiAgPG1hdC1hdXRvY29tcGxldGUtZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG9jb21wbGV0ZUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRlZmluaXRpb24uYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5VmFsdWVGbihkZWZpbml0aW9uKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICA8L21hdC1hdXRvY29tcGxldGUtZmllbGQ+XG5cbiAgPCEtLSBtdWx0aSBhdXRvLWNvbXBsZXRlIC0tPlxuICA8bWF0LWNoaXBzLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZW50aXRpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRlZmluaXRpb24uYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoaXBDb2xvcl09XCJjaGlwQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5VmFsdWVGbihkZWZpbml0aW9uKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNoaXBzLWZpZWxkPlxuXG4gIDwhLS0gb3RoZXIgLS0+XG4gIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwidHlwZVwiPlVua25vd24gdHlwZSB7e3R5cGV9fSBmb3Igb3B0aW9uIHt7ZGVmaW5pdGlvbi5rZXl9fS4gUGxlYXNlIHJlcG9ydCB0aGlzIGVycm9yLjwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCIhdHlwZVwiPkVycm9yIG9uIG9wdGlvbiBmaWVsZC4gUGxlYXNlIGNoZWNrIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzLjwvbWF0LWVycm9yPlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQUUsY0FBYyxFQUMxQixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUErRCxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzSCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxZQUFZLEVBQW1CLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUdwSyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96QyxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBZUYsTUFBTSxPQUFPLFlBQVk7SUFpRHZCLFlBQ1ksU0FBMkIsRUFDM0IsRUFBcUIsRUFDckIsUUFBa0IsRUFDUixZQUFnQztRQUgxQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ1IsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBbkQ5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RSxDQUFDLFlBQVksQ0FBQztZQUMzQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YseU9DeENILDRoV0FxUUE7MkZEMU5hLFlBQVk7a0JBYnhCLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDOzRCQUMzQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUQ1QyxRQUFROzRDQXpDUCxVQUFVO3NCQURiLEtBQUs7Z0JBV0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUdkLFlBQVk7c0JBRFgsTUFBTTt1QkFBQyxhQUFhO2dCQU9FLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDVyxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZiwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RmxvYXRMYWJlbFR5cGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHthcnJheURpc3RpbmN0LCBpc0JsYW5rU3RyaW5nLCBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsQm9vbGVhbiwgaXNOb3ROaWxPckJsYW5rLCBqb2luUHJvcGVydGllc1BhdGgsIHRvQm9vbGVhbn0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IERpc3BsYXlGbiwgRm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkVHlwZSB9IGZyb20gJy4vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Z2V0Q29sb3JDb250cmFzdH0gZnJvbSAnLi4vZ3JhcGgvY29sb3JzLnV0aWxzJztcbmltcG9ydCB7YXNJbnB1dEVsZW1lbnQsIGZpbHRlck51bWJlcklucHV0LCBzZWxlY3RJbnB1dENvbnRlbnR9IGZyb20gJy4uL2lucHV0cyc7XG5pbXBvcnQge3RvRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtQcmVkZWZpbmVkQ29sb3JzfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZCB9IGZyb20gJy4uL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtpc05vbkVtcHR5QXJyYXl9IGZyb20gJ0BhcG9sbG8vY2xpZW50L3V0aWxpdGllcyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybS1maWVsZCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXBwRm9ybUZpZWxkKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBGb3JtRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9kZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uO1xuXG4gIHByb3RlY3RlZCBfdmFsdWVzOiBQcm9wZXJ0eVtdO1xuXG4gIHByb3RlY3RlZCB0eXBlOiBGb3JtRmllbGRUeXBlO1xuICBwcm90ZWN0ZWQgbnVtYmVySW5wdXRTdGVwOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IGRlZmluaXRpb24odmFsdWU6IEZvcm1GaWVsZERlZmluaXRpb24pIHtcbiAgICBpZiAoIXZhbHVlIHx8IHRoaXMuX2RlZmluaXRpb24gPT09IHZhbHVlKSByZXR1cm47IC8vIFNraXAgaXMgc2FtZSBvciBuaWxcbiAgICB0aGlzLl9kZWZpbml0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fb25EZWZpbml0aW9uQ2hhbmdlZCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHRhYmluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbjtcblxuICBASW5wdXQoKSBjbGVhcmFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNoaXBDb2xvcjogVGhlbWVQYWxldHRlIHwgUHJlZGVmaW5lZENvbG9ycyA9IG51bGw7XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG5cbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJylcbiAgb25LZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdtYXRJbnB1dCcpIG1hdElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVGaWVsZCcpIGF1dG9jb21wbGV0ZUZpZWxkOiBNYXRBdXRvY29tcGxldGVGaWVsZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuY2hlY2tBbmRSZXNvbHZlRm9ybUNvbnRyb2woKTtcblxuICAgIGlmICghdGhpcy5fZGVmaW5pdGlvbikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZGVmaW5pdGlvblxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+LicpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZGVmaW5pdGlvbiAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgXFwnZGVmaW5pdGlvblxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+LiBTaG91bGQgYmUgYW4gb2JqZWN0LicpO1xuICAgIHRoaXMuX29uRGVmaW5pdGlvbkNoYW5nZWQodGhpcy5fZGVmaW5pdGlvbiwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICgodGhpcy50eXBlID09PSAnaW50ZWdlcicgfHwgdGhpcy50eXBlID09PSAnZG91YmxlJykgJiYgTnVtYmVyLmlzTmFOKG9iaikpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiV0FSTjogdHJ5aW5nIHRvIHNldCBOYU4gdmFsdWUsIGluIGFuIDxhcHAtZm9ybS1maWVsZD4hIFJlc2V0IHRvIG51bGxcIik7XG5cbiAgICAgIG9iaiA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBvYmogPSAob2JqICE9PSAnZmFsc2UnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIG9iaiA9IHRvRGF0ZUlTT1N0cmluZyhvYmopO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlbnVtcycgJiYgaXNOb3ROaWwob2JqKSkge1xuICAgICAgbGV0IGNoYW5nZXMgPSBmYWxzZTtcbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICBvYmogPSBvYmouc3BsaXQoJywnKTtcbiAgICAgICAgY2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkQXJyYXkgPSAob2JqIHx8IFtdKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzLmZpbmQodiA9PiB2LmtleSA9PT0gaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KS5maWx0ZXIoaXNOb3ROaWwpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgb2JqID0gdXBkYXRlZEFycmF5O1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlbnRpdHknICYmIGlzTmlsT3JCbGFuayhvYmopKSB7XG4gICAgICBvYmogPSBudWxsO1xuICAgIH1cbiAgICBpZiAob2JqICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhcIlNldCA8YXBwLWZvcm0tZmllbGQ+IHZhbHVlOiBcIiwgb2JqKTtcblxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9iaiwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sob2JqKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PT0gaXNEaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckFscGhhbnVtZXJpY2FsSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgLyo9RW50ZXIqLyAmJiB0aGlzLm9uS2V5dXBFbnRlci5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbktleXVwRW50ZXIuZW1pdChldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEFkZCBmZWF0dXJlcyAoZS5nLiBjaGVjayBhZ2FpbnN0IGEgcGF0dGVybilcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLm1hdElucHV0KSB0aGlzLm1hdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBlbHNlIGlmICh0aGlzLmF1dG9jb21wbGV0ZUZpZWxkKSB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmZvY3VzKCk7XG4gIH1cblxuICBmaWx0ZXJOdW1iZXJJbnB1dCA9IGZpbHRlck51bWJlcklucHV0O1xuICBzZWxlY3RJbnB1dENvbnRlbnQgPSBzZWxlY3RJbnB1dENvbnRlbnQ7XG5cbiAgZ2V0RGlzcGxheVZhbHVlRm4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IERpc3BsYXlGbiB7XG4gICAgaWYgKGRlZmluaXRpb24uYXV0b2NvbXBsZXRlICYmIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKSB7XG4gICAgICByZXR1cm4gKG9iajogYW55KSA9PiBkZWZpbml0aW9uLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aChvYmopO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGVmaW5pdGlvbi5hdXRvY29tcGxldGUgJiYgZGVmaW5pdGlvbi5hdXRvY29tcGxldGUuYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICByZXR1cm4gKG9iajogYW55KSA9PiBvYmogJiYgam9pblByb3BlcnRpZXNQYXRoKG9iaiwgYXR0cmlidXRlcyk7XG4gIH1cblxuICBnZXRDb2xvckNvbnRyYXN0KGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBpc05vdE5pbE9yQmxhbmsoY29sb3IpID8gZ2V0Q29sb3JDb250cmFzdChjb2xvciwgdHJ1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gcmVsb2FkIHZhbHVlcywgaWYgbm90IGRldGVjdGVkXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuX2RlZmluaXRpb24pIHJldHVybjtcblxuICAgIHRoaXMuX29uRGVmaW5pdGlvbkNoYW5nZWQodGhpcy5fZGVmaW5pdGlvbik7XG5cbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVGaWVsZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkPy5yZWxvYWRJdGVtcyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29tcHV0ZU51bWJlcklucHV0U3RlcChkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nIHtcblxuICAgIGlmIChkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyA+IDApIHtcbiAgICAgIGxldCBzdGVwID0gJzAuJztcbiAgICAgIGlmIChkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWZpbml0aW9uLm1heGltdW1OdW1iZXJEZWNpbWFscyAtIDE7IGkrKykge1xuICAgICAgICAgIHN0ZXAgKz0gJzAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGVwICs9ICcxJztcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzEnO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlVmFsdWVzRnJvbVRva2VuKHRva2VuOiBJbmplY3Rpb25Ub2tlbjwoc3RyaW5nfFByb3BlcnR5KVtdPik6IGFueVtdIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmluamVjdG9yLmdldCh0b2tlbik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHRoaXMuY29tcHV0ZVZhbHVlcyh2YWx1ZXMpIDogW107XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVZhbHVlcyh2YWx1ZXM6IChzdHJpbmd8UHJvcGVydHkpW10pOiBQcm9wZXJ0eVtdIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4gICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpXG4gICAgICA/IDxQcm9wZXJ0eT57a2V5OiB2LCB2YWx1ZTogdn1cbiAgICAgIDogPFByb3BlcnR5PntrZXk6IHYua2V5LCB2YWx1ZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2LnZhbHVlKX1cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrQW5kUmVzb2x2ZUZvcm1Db250cm9sKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sKSByZXR1cm47IC8vIE9LLCB0aGVyZSBpcyBhIGNvbnRyb2xcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cERpcikge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgdXNpbmcgZGVmaW5pdGlvbi5rZXksIGFzIGZvcm1Db250cm9sTmFtZVxuICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLl9kZWZpbml0aW9uLmtleSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sTmFtZSA9IHRoaXMuX2RlZmluaXRpb24ua2V5O1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybUNvbnRyb2xOYW1lID0gKHRoaXMuZm9ybUdyb3VwRGlyLmRpcmVjdGl2ZXMgfHwgW10pLmZpbmQoZCA9PiB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiBkLm5hbWUgPT09IHRoaXMuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBmb3JtQ29udHJvbE5hbWUgJiYgZm9ybUNvbnRyb2xOYW1lLmNvbnRyb2w7XG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXR0cmlidXRlIFxcJ2Zvcm1Db250cm9sXFwnIG9yIFxcJ2Zvcm1Db250cm9sTmFtZVxcJyBpbiA8YXBwLWZvcm0tZmllbGQ+IGNvbXBvbmVudC4nKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uRGVmaW5pdGlvbkNoYW5nZWQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuXG4gICAgdGhpcy50eXBlID0gZGVmaW5pdGlvbi50eXBlO1xuICAgIGlmICghdGhpcy50eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIFxcJ2RlZmluaXRpb25cXCcgaW4gPGFwcC1mb3JtLWZpZWxkPi4gTWlzc2luZyB0eXBlICEnKTtcblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyIHx8ICh0aGlzLl9kZWZpbml0aW9uLmxhYmVsICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5fZGVmaW5pdGlvbi5sYWJlbCkpO1xuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZCkgPyB0aGlzLnJlcXVpcmVkIDogKHRoaXMuX2RlZmluaXRpb24ucmVxdWlyZWQgfHwgdGhpcy5mb3JtQ29udHJvbD8udmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkIHx8IGlzQmxhbmtTdHJpbmcodGhpcy5yZXF1aXJlZCkpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0b0Jvb2xlYW4odGhpcy5kaXNhYmxlZCwgdG9Cb29sZWFuKHRoaXMuX2RlZmluaXRpb24uZGlzYWJsZWQsIGZhbHNlKSk7XG5cbiAgICAvLyBkb3VibGVcbiAgICBpZiAodGhpcy50eXBlID09PSAnZG91YmxlJykge1xuICAgICAgdGhpcy5udW1iZXJJbnB1dFN0ZXAgPSB0aGlzLmNvbXB1dGVOdW1iZXJJbnB1dFN0ZXAoZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgLy8gZW51bSAob3IgZW51bXMpXG4gICAgZWxzZSBpZiAodGhpcy50eXBlID09PSAnZW51bScgfHwgdGhpcy50eXBlID09PSAnZW51bXMnKSB7XG4gICAgICAvLyBSZXNvbHZlIGVudW0gdmFsdWVzXG4gICAgICBpZiAoZGVmaW5pdGlvbi52YWx1ZXMgaW5zdGFuY2VvZiBJbmplY3Rpb25Ub2tlbikge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLmNvbXB1dGVWYWx1ZXNGcm9tVG9rZW4oZGVmaW5pdGlvbi52YWx1ZXMpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHRoaXMuY29tcHV0ZVZhbHVlcyhkZWZpbml0aW9uLnZhbHVlcyBhcyAoc3RyaW5nW118UHJvcGVydHlbXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlcGFpbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFJlY29tcHV0ZSB0YWIgaW5kZXgsIGJlY2F1c2UgaWYgdHlwZSBjaGFuZ2VkLCB0aGVuIG1hdElucHV0IGNhbiBoYXZlIGNoYW5nZWRcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVGFiSW5kZXgodGltZW91dD86IG51bWJlcikge1xuICAgIGlmICh0aGlzLnRhYmluZGV4ICYmIHRoaXMudGFiaW5kZXggIT09IC0xKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGFzSW5wdXRFbGVtZW50KHRoaXMubWF0SW5wdXQpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQudGFiSW5kZXggPSB0aGlzLnRhYmluZGV4O1xuICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hdXRvY29tcGxldGVGaWVsZCkge1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQudGFiaW5kZXggPSB0aGlzLnRhYmluZGV4O1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0IHx8IDApO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxuXG4gIDwhLS0gaW50ZWdlciAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInaW50ZWdlcidcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjbWF0SW5wdXRcbiAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgIFttaW5dPVwiZGVmaW5pdGlvbi5taW5WYWx1ZVwiXG4gICAgICAgICAgIFttYXhdPVwiZGVmaW5pdGlvbi5tYXhWYWx1ZVwiXG4gICAgICAgICAgIHBhdHRlcm49XCItP1swLTldKlwiXG4gICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlwcmVzcyk9XCJmaWx0ZXJOdW1iZXJJbnB1dCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgIFt0YWJJbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJbnB1dENvbnRlbnQoJGV2ZW50KVwiPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJylcIj5cbiAgICAgIHt7KGNvbXBhY3QgPyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01JTicpIHwgdHJhbnNsYXRlOmZvcm1Db250cm9sLmVycm9yc1snbWluJ10gfX08L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpXCI+XG4gICAgICB7eyhjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTpmb3JtQ29udHJvbC5lcnJvcnNbJ21heCddIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgIHt7J0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJ3wgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdpbnRlZ2VyJylcIj5cbiAgICAgIHt7J0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJ3wgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb3JtQ29udHJvbC5yZXNldCgpXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWQgfHwgKGZvcm1Db250cm9sfGZvcm1HZXRWYWx1ZXxpc05pbE9yQmxhbmspXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIGRvdWJsZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZG91YmxlJ1wiIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG5cbiAgICA8aW5wdXQgbWF0SW5wdXQgI21hdElucHV0XG4gICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICBkZWNpbWFsPVwidHJ1ZVwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFttaW5dPVwiZGVmaW5pdGlvbi5taW5WYWx1ZVwiXG4gICAgICAgICAgIFttYXhdPVwiZGVmaW5pdGlvbi5tYXhWYWx1ZVwiXG4gICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3N0ZXBdPVwibnVtYmVySW5wdXRTdGVwXCJcbiAgICAgICAgICAgKGtleXByZXNzKT1cImZpbHRlck51bWJlcklucHV0KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW5wdXRDb250ZW50KCRldmVudClcIj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2RlY2ltYWwnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREVDSU1BTDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJylcIj5cbiAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01JTl9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NSU4nKXwgdHJhbnNsYXRlOmZvcm1Db250cm9sLmVycm9yc1snbWluJ10gfX08L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpXCI+XG4gICAgICB7eyhjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTpmb3JtQ29udHJvbC5lcnJvcnNbJ21heCddIH19PC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdtYXhEZWNpbWFscycpXCI+XG4gICAgICB7eyAoY29tcGFjdCA/ICdFUlJPUi5GSUVMRF9NQVhJTVVNX0RFQ0lNQUxTX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01BWElNVU1fREVDSU1BTFMnKXwgdHJhbnNsYXRlOnttYXhEZWNpbWFsczpcbiAgICAgIGRlZmluaXRpb24ubWF4aW11bU51bWJlckRlY2ltYWxzfSB9fTwvbWF0LWVycm9yPlxuXG4gICAgPGJ1dHRvbiBtYXRTdWZmaXggKm5nSWY9XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZm9ybUNvbnRyb2wucmVzZXQoKVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZvcm1Db250cm9sLmRpc2FibGVkIHx8IChmb3JtQ29udHJvbHxmb3JtR2V0VmFsdWV8aXNOaWxPckJsYW5rKVwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwhLS0gYm9vbGVhbiAtLT5cbiAgPG1hdC1ib29sZWFuLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1ib29sZWFuLWZpZWxkPlxuXG4gIDwhLS0gZGF0ZSAtLT5cbiAgPG1hdC1kYXRlLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wYWN0ID8gKCdDT01NT04uREFURV9QTEFDRUhPTERFUid8dHJhbnNsYXRlKTogcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCI+XG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZGF0ZS1maWVsZD5cblxuICA8IS0tIGRhdGUgdGltZSAtLT5cbiAgPG1hdC1kYXRlLXRpbWUtZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIiAjbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wYWN0ID8gKCdDT01NT04uREFURV9USU1FX1BMQUNFSE9MREVSJ3x0cmFuc2xhdGUpOiBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiPlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWRhdGUtdGltZS1maWVsZD5cblxuICA8IS0tIGVudW0gLS0+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ2VudW0nXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtjbGFzc109XCJjbGFzc0xpc3RcIj5cbiAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbktleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfdmFsdWVzXCIgW3ZhbHVlXT1cIml0ZW0ua2V5XCI+e3sgaXRlbS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPCEtLSBtdWx0aSBlbnVtIC0tPlxuICA8bWF0LWNoaXBzLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZW51bXMnXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJfdmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzcGxheUF0dHJpYnV0ZXNdPVwiZGVmaW5pdGlvbi5hdXRvY29tcGxldGU/LmF0dHJpYnV0ZXMgfHwgWydrZXknLCAndmFsdWUnXVwiXG4gICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkZWZpbml0aW9uLmF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgW3Nob3dBbGxPbkZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgW2NoaXBDb2xvcl09XCJjaGlwQ29sb3JcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1jaGlwcy1maWVsZD5cblxuICA8IS0tIGNvbG9yIC0tPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidjb2xvcidcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuXG4gICAgPGlvbi1pY29uIG1hcmdpbi1yaWdodCBuYW1lPVwiY29sb3ItZmlsbFwiIG1hdFByZWZpeD48L2lvbi1pY29uPlxuXG4gICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImdldENvbG9yQ29udHJhc3QoZm9ybUNvbnRyb2wudmFsdWUpXCJcbiAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICBbY29sb3JQaWNrZXJdPVwiZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAoY29sb3JQaWNrZXJDaGFuZ2UpPVwid3JpdGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgW2NwU2F2ZUNsaWNrT3V0c2lkZV09XCJ0cnVlXCJcbiAgICAgICAgICAgY3BQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgIGNwT3V0cHV0Rm9ybWF0PVwiaGV4XCJcbiAgICAgICAgICAgW2NwT0tCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIi8+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPCEtLSBzdHJpbmcgLS0+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ3N0cmluZydcIiBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjbWF0SW5wdXRcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW5wdXRDb250ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5cHJlc3MpPVwiZmlsdGVyQWxwaGFudW1lcmljYWxJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uS2V5dXBFbnRlci5lbWl0KCRldmVudClcIj5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgIDxidXR0b24gbWF0U3VmZml4ICpuZ0lmPVwiY2xlYXJhYmxlXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1Db250cm9sLnJlc2V0KClcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmb3JtQ29udHJvbC5kaXNhYmxlZCB8fCAoZm9ybUNvbnRyb2x8Zm9ybUdldFZhbHVlfGlzTmlsT3JCbGFuaylcIj5cbiAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwhLS0gYXV0by1jb21wbGV0ZSAtLT5cbiAgPG1hdC1hdXRvY29tcGxldGUtZmllbGQgKm5nU3dpdGNoQ2FzZT1cIidlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG9jb21wbGV0ZUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRlZmluaXRpb24uYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25LZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5VmFsdWVGbihkZWZpbml0aW9uKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICA8L21hdC1hdXRvY29tcGxldGUtZmllbGQ+XG5cbiAgPCEtLSBtdWx0aSBhdXRvLWNvbXBsZXRlIC0tPlxuICA8bWF0LWNoaXBzLWZpZWxkICpuZ1N3aXRjaENhc2U9XCInZW50aXRpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRlZmluaXRpb24uYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoaXBDb2xvcl09XCJjaGlwQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5VmFsdWVGbihkZWZpbml0aW9uKVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNoaXBzLWZpZWxkPlxuXG4gIDwhLS0gb3RoZXIgLS0+XG4gIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwidHlwZVwiPlVua25vd24gdHlwZSB7e3R5cGV9fSBmb3Igb3B0aW9uIHt7ZGVmaW5pdGlvbi5rZXl9fS4gUGxlYXNlIHJlcG9ydCB0aGlzIGVycm9yLjwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCIhdHlwZVwiPkVycm9yIG9uIG9wdGlvbiBmaWVsZC4gUGxlYXNlIGNoZWNrIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzLjwvbWF0LWVycm9yPlxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -8,14 +8,14 @@ export class AppLoadingSpinner {
8
8
  this.color = 'secondary';
9
9
  }
10
10
  }
11
- AppLoadingSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppLoadingSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- AppLoadingSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AppLoadingSpinner, selector: "app-loading-spinner", inputs: { loading: "loading", color: "color", name: "name" }, ngImport: i0, template: `
11
+ AppLoadingSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppLoadingSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ AppLoadingSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AppLoadingSpinner, selector: "app-loading-spinner", inputs: { loading: "loading", color: "color", name: "name" }, ngImport: i0, template: `
13
13
  <ion-spinner *ngIf="loading; else content" [color]="color" [name]="name"></ion-spinner>
14
14
  <ng-template #content>
15
15
  <ng-content></ng-content>
16
16
  </ng-template>
17
17
  `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppLoadingSpinner, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppLoadingSpinner, decorators: [{
19
19
  type: Component,
20
20
  args: [{
21
21
  selector: 'app-loading-spinner',
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
33
33
  }], name: [{
34
34
  type: Input
35
35
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9sb2FkaW5nLXNwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFXL0MsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVXLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUF1QixXQUFXLENBQUM7S0FFbEQ7OytHQUpZLGlCQUFpQjttR0FBakIsaUJBQWlCLHlIQVBsQjs7Ozs7R0FLVDs0RkFFVSxpQkFBaUI7a0JBVDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFOzs7OztHQUtUO2lCQUNGOzhCQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRpbmctc3Bpbm5lcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1zcGlubmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2NvbG9yXT1cImNvbG9yXCIgW25hbWVdPVwibmFtZVwiPjwvaW9uLXNwaW5uZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQXBwTG9hZGluZ1NwaW5uZXIgIHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gIEBJbnB1dCgpIG5hbWU6ICdidWJibGVzJyB8ICdjaXJjbGVzJyB8ICdjaXJjdWxhcicgfCAnY3Jlc2NlbnQnIHwgJ2RvdHMnIHwgJ2xpbmVzJyB8ICdsaW5lcy1zbWFsbCcgfCB1bmRlZmluZWQ7XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9sb2FkaW5nLXNwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFXL0MsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVXLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUF1QixXQUFXLENBQUM7S0FFbEQ7OzhHQUpZLGlCQUFpQjtrR0FBakIsaUJBQWlCLHlIQVBsQjs7Ozs7R0FLVDsyRkFFVSxpQkFBaUI7a0JBVDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFOzs7OztHQUtUO2lCQUNGOzhCQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRpbmctc3Bpbm5lcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1zcGlubmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2NvbG9yXT1cImNvbG9yXCIgW25hbWVdPVwibmFtZVwiPjwvaW9uLXNwaW5uZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQXBwTG9hZGluZ1NwaW5uZXIgIHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gIEBJbnB1dCgpIG5hbWU6ICdidWJibGVzJyB8ICdjaXJjbGVzJyB8ICdjaXJjdWxhcicgfCAnY3Jlc2NlbnQnIHwgJ2RvdHMnIHwgJ2xpbmVzJyB8ICdsaW5lcy1zbWFsbCcgfCB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -74,6 +74,9 @@ export function arrayDistinct(values, propertiesOrKeyFn) {
74
74
  export function nullIfUndefined(obj) {
75
75
  return obj === undefined ? null : obj;
76
76
  }
77
+ export function undefinedIfNull(obj) {
78
+ return obj === null ? undefined : obj;
79
+ }
77
80
  export function trimEmptyToNull(str) {
78
81
  const value = str && str.trim() || undefined;
79
82
  return value && value.length && value || null;
@@ -469,4 +472,4 @@ export function findParentWithClass(elem, className) {
469
472
  }
470
473
  return undefined;
471
474
  }
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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S0FBSyxRQUFRO2dCQUFFLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNHLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUksS0FBVTtRQUM5QixPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFlLENBQUMsQ0FBQztJQUNuRCxDQUFDOztBQUVNLHVCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFpQixFQUFFLFNBQWlCO0lBQ3RFLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDakMsSUFBSSxjQUFjLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztJQUN6QyxPQUFPLGNBQWMsRUFBRTtRQUNyQixJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ3hFLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7S2V5c0VudW0sIEtleVZhbHVlVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge0lFbnRpdHl9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoudHJpbSgpID09PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT3JCbGFuazxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnIHx8IG9iai50cmltKCkgIT09ICcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiAhPT0gJ251bWJlcicgfHwgIWlzTmFOKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsT3JOYU48VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyAmJiBpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdEVtcHR5QXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgb2JqLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RBcnJheVZhbHVlPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgPyBvYmpbMF0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICFvYmoubGVuZ3RoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsQm9vbGVhbihvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtTdHJpbmcob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIHN0cmluZyB7XG4gIHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpICYmIG9iai50cmltKCkubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdE5pbE9yRGVmYXVsdDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IFQpOiBUIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U2l6ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgJiYgb2JqLmxlbmd0aCB8fCAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5R3JvdXBCeTxcbiAgVCA9IGFueSxcbiAgSyBleHRlbmRzIGtleW9mIFQgPSBhbnksXG4gIE0gZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IFRbXTtcbn0gPSB7IFtrZXk6IHN0cmluZ106IFRbXSB9PihvYmo6IFRbXSwga2V5OiBrZXlvZiBUKTogTSB7XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIG9iai5yZWR1Y2UoKHJ2OiBhbnksIHgpID0+IHtcbiAgICAocnZbeFtrZXldXSA9IHJ2W3hba2V5XV0gfHwgW10pLnB1c2goeCk7XG4gICAgcmV0dXJuIHJ2O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZWQgdmFsdWUsIGluIGFycmF5LiBXaWxsIGNvbXB1dGUgYSB1bmlxdWUga2V5IChmcm9tIGdpdmVuIHByb3BlcnRpZXMsIG9yIGdpdmVuIGZ1bmN0aW9uKS5cbiAqIElmIHByb3BlcnRpZXNPcktleUZuIGlzIG5pbCBvciB1bmRlZmluZWQsIHdpbGwgdXNlIGFsbCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIHByb3BlcnRpZXNPcktleUZuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheURpc3RpbmN0PFQgPSBhbnk+KHZhbHVlczogVFtdLCBwcm9wZXJ0aWVzT3JLZXlGbj86IHN0cmluZyB8IHN0cmluZ1tdIHwgKChvYmo6IFQpID0+IHN0cmluZykgKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICBjb25zdCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSA9ICghcHJvcGVydGllc09yS2V5Rm4gJiYgT2JqZWN0LmtleXModmFsdWVzWzBdKSkgfHwgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yS2V5Rm4pICYmIHByb3BlcnRpZXNPcktleUZuKTtcbiAgY29uc3QgZ2V0S2V5OiAob2JqOiBUKSA9PiBzdHJpbmcgPVxuICAgICh0eXBlb2YgcHJvcGVydGllc09yS2V5Rm4gPT09ICdmdW5jdGlvbicgJiYgcHJvcGVydGllc09yS2V5Rm4pXG4gICAgfHwgKHR5cGVvZiBwcm9wZXJ0aWVzT3JLZXlGbiA9PT0gJ3N0cmluZycgJiYgKChvYmopID0+IGdldFByb3BlcnR5QnlQYXRoQXNTdHJpbmcob2JqLCBwcm9wZXJ0aWVzT3JLZXlGbikpKVxuICAgIHx8IChpc0VtcHR5QXJyYXkocHJvcGVydGllcykgJiYgKChvYmopID0+IG9iaj8udG9TdHJpbmcoKSkpXG4gICAgfHwgKChvYmopID0+IGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHByb3BlcnRpZXMsICd8JykpO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gZ2V0S2V5KGl0ZW0pO1xuICAgIGlmIChleGlzdGluZ0lkcy5oYXModW5pcXVlS2V5KSkgcmV0dXJuIHJlczsgLy8gU2tpcCBpZiBkdXBsaWNhdGVcbiAgICBleGlzdGluZ0lkcy5hZGQodW5pcXVlS2V5KTtcbiAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgfSwgW10pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bGxJZlVuZGVmaW5lZDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IG51bGwge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgPyBudWxsIDogb2JqO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1FbXB0eVRvTnVsbDxUPihzdHI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgdmFsdWUgPSBzdHIgJiYgc3RyLnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggJiYgdmFsdWUgfHwgbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0Jvb2xlYW4ob2JqOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCB8IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyAob2JqICE9PSAnZmFsc2UnID8gISFvYmogOiBmYWxzZSkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIob2JqOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyArb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvRmxvYXQob2JqOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gcGFyc2VGbG9hdChvYmopIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50KG9iajogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IHBhcnNlSW50KG9iaiwgMCkgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Ob3ROaWw8VCA9IGFueT4ob2JqOiBULCBkZWZhdWx0VmFsdWU/OiBUKTogYW55IHwgbnVsbCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IG9iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzRnJvbUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwgcHJvcGVydHk/OiBzdHJpbmcpOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlzRW1wdHlBcnJheShvYmopKSByZXR1cm4gb2JqO1xuICBpZiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gb2JqLmZpbHRlcigoaXRlbSwgaSwgYXJyYXkpID0+IGFycmF5LmZpbmRJbmRleCh0ID0+IHQgJiYgaXRlbSAmJiB0W3Byb3BlcnR5XSA9PT0gaXRlbVtwcm9wZXJ0eV0pID09PSBpKTtcbiAgfVxuICByZXR1cm4gb2JqLmZpbHRlcigoaXRlbSwgaSwgYXJyYXkpID0+IGFycmF5LmZpbmRJbmRleCh0ID0+IHQgJiYgaXRlbSAmJiB0ID09PSBpdGVtKSA9PT0gaSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQgJiYgaW5wdXQudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaCk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgcmVnZXhwOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0ICYmICEhaW5wdXQudG9VcHBlckNhc2UoKS5tYXRjaChyZWdleHApO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBpZiBhbnkuIEV4YW1wbGVzIDpcbiAqIC0gJy90ZXN0LycgLT4gJy90ZXN0J1xuICogLSAnLycgLT4gdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub1RyYWlsaW5nU2xhc2gocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoIHx8IHBhdGgudHJpbSgpID09PSAnLycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChwYXRoLnRyaW0oKS5sYXN0SW5kZXhPZignLycpID09PSBwYXRoLmxlbmd0aCAtIDEpIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpO1xuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBbGwodmFsdWU6IHN0cmluZywgc2VhcmNoU3RyaW5nOiBhbnksIHJlcGxhY2VtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgd2hpbGUgKHZhbHVlICYmIHZhbHVlLmluZGV4T2Yoc2VhcmNoU3RyaW5nKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2Uoc2VhcmNoU3RyaW5nLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW5kKHZhbHVlOiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlPy5lbmRzV2l0aChlbmQgfHwgJycpID8gdmFsdWUuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCAtIGVuZC5sZW5ndGgpIDogdmFsdWU7XG59XG5cbi8qKlxuICogUmVwbGFjZSBjYXNlIGNoYW5nZSBieSBhbiB1bmRlcnNjb3JlICguZS5nICdteVN0cmluZycgYmVjb21lcyAnbXlfc3RyaW5nJylcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDFfJDInKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGlhY3JpdGljcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1Z2dlc3RGcm9tU3RyaW5nQXJyYXkodmFsdWVzOiBzdHJpbmdbXSwgdmFsdWU6IGFueSwgb3B0aW9ucz86IHtcbiAgc2VhcmNoQXR0cmlidXRlPzogc3RyaW5nO1xuICBzZWFyY2hBdHRyaWJ1dGVzPzogc3RyaW5nW107XG59KTogc3RyaW5nW10ge1xuICB2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnKicpICYmIHZhbHVlLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkO1xuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIHZhbHVlcztcblxuICAvLyBJZiB3aWxkY2FyZCwgc2VhcmNoIHVzaW5nIHJlZ2V4cFxuICBpZiAoKHZhbHVlIGFzIHN0cmluZykuaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgIHZhbHVlID0gKHZhbHVlIGFzIHN0cmluZykucmVwbGFjZSgnKicsICcuKicpO1xuICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKHYgPT4gbWF0Y2hVcHBlckNhc2UodiwgdmFsdWUpKTtcbiAgfVxuXG4gIC8vIElmIG5vIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgc3RhcnRzV2l0aFxuICByZXR1cm4gdmFsdWVzLmZpbHRlcih2ID0+IHN0YXJ0c1dpdGhVcHBlckNhc2UodiwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Qcm9wZXJ0aWVzUGF0aDxUID0gYW55PihvYmo6IFQsIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICBpZiAoaXNFbXB0eUFycmF5KHByb3BlcnRpZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgZW1wdHkgXFwncHJvcGVydGllc1xcJyBhcmd1bWVudCcpO1xuICByZXR1cm4gcHJvcGVydGllc1xuICAgIC5tYXAocGF0aCA9PiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGgpKVxuICAgIC5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKVxuICAgIC5qb2luKHNlcGFyYXRvciB8fCAnIC0gJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luUHJvcGVydGllczxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4ob2JqOiBULCBrZXlzOiBLW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkaXNwbGF5IGFuIHVuZGVmaW5lZCBlbnRpdHkuJyk7XG4gIHJldHVybiBrZXlzXG4gICAgLm1hcChrZXkgPT4gZ2V0UHJvcGVydHkob2JqLCBrZXkpKVxuICAgIC5maWx0ZXIoaXNOb3ROaWxPckJsYW5rKVxuICAgIC5qb2luKHNlcGFyYXRvciB8fCAnIC0gJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVBhdGhDb21wYXJhdG9yPFQgPSBhbnk+KHBhdGg6IHN0cmluZ3xzdHJpbmdbXSk6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICBjb25zdCB2YWx1ZUEgPSBnZXRQcm9wZXJ0eUJ5UGF0aChhLCBwYXRoKTtcbiAgICBjb25zdCB2YWx1ZUIgPSBnZXRQcm9wZXJ0eUJ5UGF0aChiLCBwYXRoKTtcbiAgICByZXR1cm4gdmFsdWVBID09PSB2YWx1ZUIgPyAwIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUNvbXBhcmF0b3I8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KGtleTogSywgZGVmYXVsdFZhbHVlPzogYW55KTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlQSA9IGFba2V5XSAhPT0gdW5kZWZpbmVkID8gYVtrZXldIDogZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IHZhbHVlQiA9IGJba2V5XSA/IGJba2V5XSA6IGRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4gdmFsdWVBID09PSB2YWx1ZUIgPyAwIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzUGF0aENvbXBhcmF0b3I8VCA9IGFueT4oa2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZXM/OiBhbnlbXSk6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICBpZiAoIWtleXMgfHwgIWtleXMubGVuZ3RoIHx8IChkZWZhdWx0VmFsdWVzICYmIGtleXMubGVuZ3RoID4gZGVmYXVsdFZhbHVlcy5sZW5ndGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogbWlzc2luZyBcXCdrZXlzXFwnIG9yIGFycmF5IFxcJ2RlZmF1bHRWYWx1ZXNcXCcgaGFzIGEgYmFkIGxlbmd0aCcpO1xuICB9XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ga2V5cy5tYXAoKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQSA9IGdldFByb3BlcnR5QnlQYXRoKGEsIGtleSwgZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzW2luZGV4XSk7XG4gICAgICBjb25zdCB2YWx1ZUIgPSBnZXRQcm9wZXJ0eUJ5UGF0aChiLCBrZXksIGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlc1tpbmRleF0pO1xuICAgICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICAgIH0pXG4gICAgICAvLyBTdG9wIGlmIG5vdCBlcXVhbHMsIG90aGVyd2lzZSBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGtleVxuICAgICAgLmZpbmQocmVzID0+IHJlcyAhPT0gMCkgfHwgMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnQ8VD4oYXJyYXk6IFRbXSwgYXR0cmlidXRlOiBzdHJpbmcsIG9wdHM/OiBJbnRsLkNvbGxhdG9yT3B0aW9ucyk6IFRbXSB7XG4gIGlmIChpc0VtcHR5QXJyYXkoYXJyYXkpKSByZXR1cm4gYXJyYXk7XG4gIGNvbnN0IGNvbXBhcmVGbiA9IG9wdHNcbiAgICA/IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgb3B0cykuY29tcGFyZVxuICAgIDogKHYxLCB2MikgPT4gdjEgPT09IHYyID8gMCA6IHYxID4gdjIgPyAxIDogLTE7XG4gIHJldHVybiBhcnJheVxuICAgIC5zbGljZSgpIC8vIGNvcHlcbiAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZUZuKGFbYXR0cmlidXRlXSwgYlthdHRyaWJ1dGVdKSk7XG59XG5jb25zdCBJTlRFR0VSX1JFR0VYUCA9IC9eWy1dP1xcZCskLztcbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgSU5URUdFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5jb25zdCBOVU1CRVJfUkVHRVhQID0gL15bLV0/XFxkKyhcXC5cXGQrKT8kLztcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuY29uc3QgTlVNQkVSX1JBTkdFX1JFR0VYUCA9IC9eKFxcZCstXFxkKyl8KFs+PD1dKlxcZCspJC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJSYW5nZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JBTkdFX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmd8c3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgaWYgKGlzTmlsT3JCbGFuayhwYXRoKSkgcmV0dXJuIG9iajtcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICAvLyBTaW1wbGUgcHJvcGVydHkgcGF0aFxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBjb25zdCByZXMgPSBvYmpbcGF0aF07XG4gICAgcmV0dXJuIChpc05vdE5pbChyZXMpIHx8IGlzTmlsKGRlZmF1bHRWYWx1ZSkpID8gcmVzIDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8vIENvbXBsZXggcHJvcGVydHkgcGF0aFxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHsgLy8gT2JqZWN0IG9yIEFycmF5XG4gICAgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByb3BlcnR5IHBhdGg6ICcke2tleX0nIGlzIG5vdCBhbiB2YWxpZCBvYmplY3QuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eTxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4ob2JqOiBULCBrZXk6IEspOiBUW0tdIHtcbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmpba2V5XTsgLy8gSW5mZXJyZWQgdHlwZSBpcyBUW0tdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKG9iajogYW55LCBwYXRoOiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXMgPSBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGgpO1xuICByZXR1cm4gKHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSA/IHJlcyA6ICgnJyArIHJlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgLy8gUGF0aCBpcyBhbiBhcnJheTogY29udmVydCBwYXRoIHRvIHN0cmluZ1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGguam9pbignLicpLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybjsgLy8gU2tpcFxuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIC8vIFNpbXBsZSBwcm9wZXJ0eSBwYXRoXG4gIGlmIChpID09PSAtMSkge1xuICAgIG9ialtwYXRoXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSwgdmFsdWUpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHBhdGg6ICcke2tleX0nIGlzIG5vdCBhbiB2YWxpZCBvYmplY3QuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChtcyA8PSAwKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKTogbnVtYmVyIHtcbiAgaWYgKGlzTm90TmlsT3JOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoKHZhbHVlICsgTnVtYmVyLkVQU0lMT04pICogMTAwKSAvIDEwMDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHNPck5pbCh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpIHtcbiAgcmV0dXJuICh2YWx1ZTEgPT09IHZhbHVlMikgfHwgKGlzTmlsKHZhbHVlMSkgJiYgaXNOaWwodmFsdWUyKSk7XG59XG5cbi8qKlxuICogcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRzXG4gKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IG9uIHdoaWNoIGVsZW1lbnRzIHdpbGwgYmUgcmVtb3ZlZFxuICogQHBhcmFtIHByZWRpY2F0ZSB0aGUgc2VsZWN0aW9uIHByZWRpY2F0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHBtZm06IFQpID0+IGJvb2xlYW4pOiBUW10ge1xuICBsZXQgbmJSZW1vdmUgPSAwO1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBuYlJlbW92ZSsrOyAvLyBnbGl0Y2ggY291bnRlciB0byBhdm9pZCBpbmRleCBnYXBcbiAgICAgIHJldHVybiBhcnJheS5zcGxpY2UoaW5kZXggLSBuYlJlbW92ZSArIDEsIDEpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSkuZmlsdGVyKGlzTm90TmlsKTtcbn1cblxuLyoqXG4gKiByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheVxuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgZWxlbWVudFxuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCB0aGUgZWxlbWVudCB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZTxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IChwbWZtOiBUKSA9PiBib29sZWFuKTogVCB7XG4gIHJldHVybiBhcnJheS5zbGljZSgpLmZpbmQoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5UHJvcGVydHk8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBUIHwgc3RyaW5nKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIGFueSk/Lltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCB7fSkgYXMgTTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QnlJZDxULCBNIGV4dGVuZHMgS2V5VmFsdWVUeXBlPFQ+ID0gS2V5VmFsdWVUeXBlPFQ+PihhcnJheTogVFtdIHwgcmVhZG9ubHkgVFtdKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHZhbHVlPy5bJ2lkJ107XG4gICAgaWYgKGlzTm90TmlsKGtleSkpIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDxNPnt9KTtcbn1cblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheSwgaW50byBhIG1hcCBvZiBhcnJheSwgZ3JvdXAgYnkgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCeVByb3BlcnR5PFQ+KHZhbHVlczogVFtdLCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBLZXlWYWx1ZVR5cGU8VFtdPiB7XG4gIHJldHVybiAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0gJiYgaXRlbVtwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzW2tleV0gPSByZXNba2V5XSB8fCBbXTtcbiAgICAgIHJlc1trZXldLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDxLZXlWYWx1ZVR5cGU8VFtdPj57fSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIFR3byBvYmplY3RzIG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5XG4gKiAgIGNvbXBhcmluZyB0aGVtIHdpdGggYGVxdWFsc2AuXG4gKlxuICogQHBhcmFtIG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIG8yIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIGxldCB0MSA9IHR5cGVvZiBvMSwgdDIgPSB0eXBlb2YgbzIsIGxlbmd0aDogbnVtYmVyLCBrZXk6IGFueSwga2V5U2V0OiBhbnk7XG4gIGlmICh0MSA9PSB0MiAmJiB0MSA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09IG8yLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCZWFucyB7XG4gIC8qKlxuICAgKiBDb3B5IGEgc291cmNlIG9iamVjdCwgYnkgaW5jbHVkaW5nIG9ubHkgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZGF0YVR5cGUuXG4gICAqIElNUE9SVEFOVDogZXh0cmEgcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgaW4gdGhlIHRhcmdldENsYXNzIGFyZSBOT1QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGNvcHlcbiAgICogQHBhcmFtIGRhdGFUeXBlIHRoZSBjbGFzcyB0byB1c2UgYXMgdGFyZ2V0IGNsYXNzXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGNvcHkuIElmIGVtcHR5LCB3aWxsIGNvcHkgb25seSBOT1Qgb3B0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhVHlwZVxuICAgKi9cbiAgc3RhdGljIGNvcHk8VD4oc291cmNlOiBULCBkYXRhVHlwZTogbmV3ICgpID0+IFQsIGtleXM/OiBLZXlzRW51bTxUPik6IFQge1xuICAgIGlmIChpc05pbChzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIE9iamVjdC5rZXlzKGtleXMgfHwgdGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyBpZiBhbiBvYmplY3QgYWxsIGFsbCBwcm9wZXJ0aWVzIHRvIG5pbFxuICAgKi9cbiAgc3RhdGljIGlzRW1wdHk8VD4oZGF0YTogVCwga2V5cz86IEtleXNFbnVtPFQ+fHN0cmluZ1tdLCBvcHRzPzoge1xuICAgIGJsYW5rU3RyaW5nTGlrZUVtcHR5PzogYm9vbGVhbjtcbiAgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChkYXRhKSB8fCAoQXJyYXkuaXNBcnJheShrZXlzKSA/IGtleXMgOiBPYmplY3Qua2V5cyhrZXlzIHx8IGRhdGEpKVxuICAgICAgLy8gRmluZCBpbmRleCBvZiB0aGUgZmlyc3QgTk9UIG5pbCB2YWx1ZVxuICAgICAgLmZpbmRJbmRleChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAhQmVhbnMuaXNFbXB0eSh2YWx1ZSwgbnVsbCwgb3B0cyk7IC8vIExvb3BcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5ibGFua1N0cmluZ0xpa2VFbXB0eSA9PT0gdHJ1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gaXNOb3ROaWxPckJsYW5rKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIH0pID09PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUPihhcnJheTogVFtdKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICAgIHJldHVybiBjb2xsZWN0QnlQcm9wZXJ0eShhcnJheSwgJ2lkJyBhcyBrZXlvZiBUKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlQcm9wZXJ0eSA9IGNvbGxlY3RCeVByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbGVtOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtPy5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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Q0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN6RixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0csT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFVO1FBQzlCLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O0FBRU0sdUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFHL0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWlCLEVBQUUsU0FBaUI7SUFDdEUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqQyxJQUFJLGNBQWMsR0FBRyxJQUFJLEVBQUUsYUFBYSxDQUFDO0lBQ3pDLE9BQU8sY0FBYyxFQUFFO1FBQ3JCLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDeEUsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7S0FDL0M7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtLZXlzRW51bSwgS2V5VmFsdWVUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7SUVudGl0eX0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOaWw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsT3JCbGFuazxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai50cmltKCkgPT09ICcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycgfHwgb2JqLnRyaW0oKSAhPT0gJycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT3JOYU48VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqICE9PSAnbnVtYmVyJyB8fCAhaXNOYU4ob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOaWxPck5hTjxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogPT09ICdudW1iZXInICYmIGlzTmFOKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90RW1wdHlBcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEFycmF5VmFsdWU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc05vdEVtcHR5QXJyYXkob2JqKSA/IG9ialswXSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5QXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgIW9iai5sZW5ndGg7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxCb29sZWFuKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxTdHJpbmcob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIHN0cmluZyB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua1N0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgJiYgb2JqLnRyaW0oKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gbm90TmlsT3JEZWZhdWx0PFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogVCk6IFQge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlTaXplPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBpc05vdEVtcHR5QXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoIHx8IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlHcm91cEJ5PFxuICBUID0gYW55LFxuICBLIGV4dGVuZHMga2V5b2YgVCA9IGFueSxcbiAgTSBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogVFtdO1xufSA9IHsgW2tleTogc3RyaW5nXTogVFtdIH0+KG9iajogVFtdLCBrZXk6IGtleW9mIFQpOiBNIHtcbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBudWxsO1xuICByZXR1cm4gb2JqLnJlZHVjZSgocnY6IGFueSwgeCkgPT4ge1xuICAgIChydlt4W2tleV1dID0gcnZbeFtrZXldXSB8fCBbXSkucHVzaCh4KTtcbiAgICByZXR1cm4gcnY7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlZCB2YWx1ZSwgaW4gYXJyYXkuIFdpbGwgY29tcHV0ZSBhIHVuaXF1ZSBrZXkgKGZyb20gZ2l2ZW4gcHJvcGVydGllcywgb3IgZ2l2ZW4gZnVuY3Rpb24pLlxuICogSWYgcHJvcGVydGllc09yS2V5Rm4gaXMgbmlsIG9yIHVuZGVmaW5lZCwgd2lsbCB1c2UgYWxsIG9iamVjdCBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gcHJvcGVydGllc09yS2V5Rm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5RGlzdGluY3Q8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3BlcnRpZXNPcktleUZuPzogc3RyaW5nIHwgc3RyaW5nW10gfCAoKG9iajogVCkgPT4gc3RyaW5nKSApOiBUW10ge1xuICBpZiAoaXNFbXB0eUFycmF5KHZhbHVlcykpIHJldHVybiB2YWx1ZXM7XG4gIGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gKCFwcm9wZXJ0aWVzT3JLZXlGbiAmJiBPYmplY3Qua2V5cyh2YWx1ZXNbMF0pKSB8fCAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzT3JLZXlGbikgJiYgcHJvcGVydGllc09yS2V5Rm4pO1xuICBjb25zdCBnZXRLZXk6IChvYmo6IFQpID0+IHN0cmluZyA9XG4gICAgKHR5cGVvZiBwcm9wZXJ0aWVzT3JLZXlGbiA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wZXJ0aWVzT3JLZXlGbilcbiAgICB8fCAodHlwZW9mIHByb3BlcnRpZXNPcktleUZuID09PSAnc3RyaW5nJyAmJiAoKG9iaikgPT4gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhvYmosIHByb3BlcnRpZXNPcktleUZuKSkpXG4gICAgfHwgKGlzRW1wdHlBcnJheShwcm9wZXJ0aWVzKSAmJiAoKG9iaikgPT4gb2JqPy50b1N0cmluZygpKSlcbiAgICB8fCAoKG9iaikgPT4gam9pblByb3BlcnRpZXNQYXRoKG9iaiwgcHJvcGVydGllcywgJ3wnKSk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJldHVybiB2YWx1ZXMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgaWYgKGV4aXN0aW5nSWRzLmhhcyh1bmlxdWVLZXkpKSByZXR1cm4gcmVzOyAvLyBTa2lwIGlmIGR1cGxpY2F0ZVxuICAgIGV4aXN0aW5nSWRzLmFkZCh1bmlxdWVLZXkpO1xuICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICB9LCBbXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVsbElmVW5kZWZpbmVkPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgbnVsbCB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkSWZOdWxsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW1wdHlUb051bGw8VD4oc3RyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbHVlID0gc3RyICYmIHN0ci50cmltKCkgfHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoICYmIHZhbHVlIHx8IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKG9iajogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gKG9iaiAhPT0gJ2ZhbHNlJyA/ICEhb2JqIDogZmFsc2UpIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKG9iajogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gK29iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0Zsb2F0KG9iajogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IHBhcnNlRmxvYXQob2JqKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0ludChvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBwYXJzZUludChvYmosIDApIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTm90TmlsPFQgPSBhbnk+KG9iajogVCwgZGVmYXVsdFZhbHVlPzogVCk6IGFueSB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIHByb3BlcnR5Pzogc3RyaW5nKTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc0VtcHR5QXJyYXkob2JqKSkgcmV0dXJuIG9iajtcbiAgaWYgKHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG9iai5maWx0ZXIoKGl0ZW0sIGksIGFycmF5KSA9PiBhcnJheS5maW5kSW5kZXgodCA9PiB0ICYmIGl0ZW0gJiYgdFtwcm9wZXJ0eV0gPT09IGl0ZW1bcHJvcGVydHldKSA9PT0gaSk7XG4gIH1cbiAgcmV0dXJuIG9iai5maWx0ZXIoKGl0ZW0sIGksIGFycmF5KSA9PiBhcnJheS5maW5kSW5kZXgodCA9PiB0ICYmIGl0ZW0gJiYgdCA9PT0gaXRlbSkgPT09IGkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0ICYmIGlucHV0LnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHJlZ2V4cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dCAmJiAhIWlucHV0LnRvVXBwZXJDYXNlKCkubWF0Y2gocmVnZXhwKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggaWYgYW55LiBFeGFtcGxlcyA6XG4gKiAtICcvdGVzdC8nIC0+ICcvdGVzdCdcbiAqIC0gJy8nIC0+IHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9UcmFpbGluZ1NsYXNoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghcGF0aCB8fCBwYXRoLnRyaW0oKSA9PT0gJy8nKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAocGF0aC50cmltKCkubGFzdEluZGV4T2YoJy8nKSA9PT0gcGF0aC5sZW5ndGggLSAxKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQWxsKHZhbHVlOiBzdHJpbmcsIHNlYXJjaFN0cmluZzogYW55LCByZXBsYWNlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHdoaWxlICh2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKHNlYXJjaFN0cmluZykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHNlYXJjaFN0cmluZywgcmVwbGFjZW1lbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVuZCh2YWx1ZTogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoZW5kIHx8ICcnKSA/IHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSBlbmQubGVuZ3RoKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgY2FzZSBjaGFuZ2UgYnkgYW4gdW5kZXJzY29yZSAoLmUuZyAnbXlTdHJpbmcnIGJlY29tZXMgJ215X3N0cmluZycpXG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxXyQyJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURpYWNyaXRpY3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWdnZXN0RnJvbVN0cmluZ0FycmF5KHZhbHVlczogc3RyaW5nW10sIHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7XG4gIHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZztcbiAgc2VhcmNoQXR0cmlidXRlcz86IHN0cmluZ1tdO1xufSk6IHN0cmluZ1tdIHtcbiAgdmFsdWUgPSAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyonKSAmJiB2YWx1ZS50b1VwcGVyQ2FzZSgpIHx8IHVuZGVmaW5lZDtcbiAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkpIHJldHVybiB2YWx1ZXM7XG5cbiAgLy8gSWYgd2lsZGNhcmQsIHNlYXJjaCB1c2luZyByZWdleHBcbiAgaWYgKCh2YWx1ZSBhcyBzdHJpbmcpLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJyonLCAnLionKTtcbiAgICByZXR1cm4gdmFsdWVzLmZpbHRlcih2ID0+IG1hdGNoVXBwZXJDYXNlKHYsIHZhbHVlKSk7XG4gIH1cblxuICAvLyBJZiBubyB3aWxkY2FyZCwgc2VhcmNoIHVzaW5nIHN0YXJ0c1dpdGhcbiAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodiA9PiBzdGFydHNXaXRoVXBwZXJDYXNlKHYsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luUHJvcGVydGllc1BhdGg8VCA9IGFueT4ob2JqOiBULCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRpc3BsYXkgYW4gdW5kZWZpbmVkIGVudGl0eS4nKTtcbiAgaWYgKGlzRW1wdHlBcnJheShwcm9wZXJ0aWVzKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGVtcHR5IFxcJ3Byb3BlcnRpZXNcXCcgYXJndW1lbnQnKTtcbiAgcmV0dXJuIHByb3BlcnRpZXNcbiAgICAubWFwKHBhdGggPT4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXM8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5czogS1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoa2V5ID0+IGdldFByb3BlcnR5KG9iaiwga2V5KSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlQYXRoQ29tcGFyYXRvcjxUID0gYW55PihwYXRoOiBzdHJpbmd8c3RyaW5nW10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCk7XG4gICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwgcGF0aCk7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlDb21wYXJhdG9yPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihrZXk6IEssIGRlZmF1bHRWYWx1ZT86IGFueSk6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICBjb25zdCB2YWx1ZUEgPSBhW2tleV0gIT09IHVuZGVmaW5lZCA/IGFba2V5XSA6IGRlZmF1bHRWYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUIgPSBiW2tleV0gPyBiW2tleV0gOiBkZWZhdWx0VmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc1BhdGhDb21wYXJhdG9yPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWVzPzogYW55W10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgaWYgKCFrZXlzIHx8ICFrZXlzLmxlbmd0aCB8fCAoZGVmYXVsdFZhbHVlcyAmJiBrZXlzLmxlbmd0aCA+IGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IG1pc3NpbmcgXFwna2V5c1xcJyBvciBhcnJheSBcXCdkZWZhdWx0VmFsdWVzXFwnIGhhcyBhIGJhZCBsZW5ndGgnKTtcbiAgfVxuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IGtleXMubWFwKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUEgPSBnZXRQcm9wZXJ0eUJ5UGF0aChhLCBrZXksIGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlc1tpbmRleF0pO1xuICAgICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwga2V5LCBkZWZhdWx0VmFsdWVzICYmIGRlZmF1bHRWYWx1ZXNbaW5kZXhdKTtcbiAgICAgIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IC0xKTtcbiAgICB9KVxuICAgICAgLy8gU3RvcCBpZiBub3QgZXF1YWxzLCBvdGhlcndpc2UgY29udGludWUgd2l0aCB0aGUgbmV4dCBrZXlcbiAgICAgIC5maW5kKHJlcyA9PiByZXMgIT09IDApIHx8IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0PFQ+KGFycmF5OiBUW10sIGF0dHJpYnV0ZTogc3RyaW5nLCBvcHRzPzogSW50bC5Db2xsYXRvck9wdGlvbnMpOiBUW10ge1xuICBpZiAoaXNFbXB0eUFycmF5KGFycmF5KSkgcmV0dXJuIGFycmF5O1xuICBjb25zdCBjb21wYXJlRm4gPSBvcHRzXG4gICAgPyBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIG9wdHMpLmNvbXBhcmVcbiAgICA6ICh2MSwgdjIpID0+IHYxID09PSB2MiA/IDAgOiB2MSA+IHYyID8gMSA6IC0xO1xuICByZXR1cm4gYXJyYXlcbiAgICAuc2xpY2UoKSAvLyBjb3B5XG4gICAgLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVGbihhW2F0dHJpYnV0ZV0sIGJbYXR0cmlidXRlXSkpO1xufVxuY29uc3QgSU5URUdFUl9SRUdFWFAgPSAvXlstXT9cXGQrJC87XG5leHBvcnQgZnVuY3Rpb24gaXNJbnQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIElOVEVHRVJfUkVHRVhQLnRlc3QodmFsdWUpO1xufVxuY29uc3QgTlVNQkVSX1JFR0VYUCA9IC9eWy1dP1xcZCsoXFwuXFxkKyk/JC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmNvbnN0IE5VTUJFUl9SQU5HRV9SRUdFWFAgPSAvXihcXGQrLVxcZCspfChbPjw9XSpcXGQrKSQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUmFuZ2UodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SQU5HRV9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICAvLyBQYXRoIGlzIGFuIGFycmF5OiBjb252ZXJ0IHBhdGggdG8gc3RyaW5nXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aC5qb2luKCcuJyksIGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGlmIChpc05pbE9yQmxhbmsocGF0aCkpIHJldHVybiBvYmo7XG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgLy8gU2ltcGxlIHByb3BlcnR5IHBhdGhcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgY29uc3QgcmVzID0gb2JqW3BhdGhdO1xuICAgIHJldHVybiAoaXNOb3ROaWwocmVzKSB8fCBpc05pbChkZWZhdWx0VmFsdWUpKSA/IHJlcyA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuICAvLyBDb21wbGV4IHByb3BlcnR5IHBhdGhcbiAgY29uc3Qga2V5ID0gcGF0aC5zdWJzdHJpbmcoMCwgaSk7XG4gIGlmIChpc05pbChvYmpba2V5XSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7IC8vIE9iamVjdCBvciBBcnJheVxuICAgIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKG9ialtrZXldLCBwYXRoLnN1YnN0cmluZyhpICsgMSkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSBwYXRoOiAnJHtrZXl9JyBpcyBub3QgYW4gdmFsaWQgb2JqZWN0LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHk8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5OiBLKTogVFtLXSB7XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gb2JqW2tleV07IC8vIEluZmVycmVkIHR5cGUgaXMgVFtLXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzID0gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKTtcbiAgcmV0dXJuICh0eXBlb2YgcmVzID09PSAnc3RyaW5nJykgPyByZXMgOiAoJycgKyByZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHlCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgdmFsdWU6IGFueSk6IGFueSB7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgdmFsdWUpO1xuICB9XG4gIGlmIChpc05pbChvYmopKSByZXR1cm47IC8vIFNraXBcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICAvLyBTaW1wbGUgcHJvcGVydHkgcGF0aFxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBvYmpbcGF0aF0gPSB2YWx1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qga2V5ID0gcGF0aC5zdWJzdHJpbmcoMCwgaSk7XG4gIGlmIChpc05pbChvYmpba2V5XSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5QnlQYXRoKG9ialtrZXldLCBwYXRoLnN1YnN0cmluZyhpICsgMSksIHZhbHVlKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBwYXRoOiAnJHtrZXl9JyBpcyBub3QgYW4gdmFsaWQgb2JqZWN0LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobXMgPD0gMCkgcmV0dXJuO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCk6IG51bWJlciB7XG4gIGlmIChpc05vdE5pbE9yTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkgLyAxMDA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzT3JOaWwodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSB7XG4gIHJldHVybiAodmFsdWUxID09PSB2YWx1ZTIpIHx8IChpc05pbCh2YWx1ZTEpICYmIGlzTmlsKHZhbHVlMikpO1xufVxuXG4vKipcbiAqIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5XG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBlbGVtZW50c1xuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IChwbWZtOiBUKSA9PiBib29sZWFuKTogVFtdIHtcbiAgbGV0IG5iUmVtb3ZlID0gMDtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKCkubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgbmJSZW1vdmUrKzsgLy8gZ2xpdGNoIGNvdW50ZXIgdG8gYXZvaWQgaW5kZXggZ2FwXG4gICAgICByZXR1cm4gYXJyYXkuc3BsaWNlKGluZGV4IC0gbmJSZW1vdmUgKyAxLCAxKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLmZpbHRlcihpc05vdE5pbCk7XG59XG5cbi8qKlxuICogcmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRcbiAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgb24gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkXG4gKiBAcGFyYW0gcHJlZGljYXRlIHRoZSBzZWxlY3Rpb24gcHJlZGljYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmU8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiAocG1mbTogVCkgPT4gYm9vbGVhbik6IFQge1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5maW5kKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRCeVByb3BlcnR5PFQsIE0gZXh0ZW5kcyBLZXlWYWx1ZVR5cGU8VD4gPSBLZXlWYWx1ZVR5cGU8VD4+KGFycmF5OiBUW10gfCByZWFkb25seSBUW10sIHByb3BlcnR5TmFtZToga2V5b2YgVCB8IHN0cmluZyk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSAodmFsdWUgYXMgdW5rbm93biBhcyBhbnkpPy5bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAoaXNOb3ROaWwoa2V5KSkge1xuICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pIGFzIE07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5SWQ8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSB2YWx1ZT8uWydpZCddO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCA8TT57fSk7XG59XG5cbi8qKlxuICogU3BsaXQgYW4gYXJyYXksIGludG8gYSBtYXAgb2YgYXJyYXksIGdyb3VwIGJ5IHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0QnlQcm9wZXJ0eTxUPih2YWx1ZXM6IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBUKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICByZXR1cm4gKHZhbHVlcyB8fCBbXSkucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICBjb25zdCBrZXkgPSBpdGVtICYmIGl0ZW1bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc1trZXldID0gcmVzW2tleV0gfHwgW107XG4gICAgICByZXNba2V5XS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCA8S2V5VmFsdWVUeXBlPFRbXT4+e30pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgb3IgdHdvIHZhbHVlcyBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBUd28gb2JqZWN0cyBvciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICpcbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBwYXNzIGA9PT1gIGNvbXBhcmlzb24uXG4gKiAqIEJvdGggb2JqZWN0cyBvciB2YWx1ZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGFsbCBvZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSBlcXVhbCBieVxuICogICBjb21wYXJpbmcgdGhlbSB3aXRoIGBlcXVhbHNgLlxuICpcbiAqIEBwYXJhbSBvMSBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBvMiBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHRydWUgaWYgYXJndW1lbnRzIGFyZSBlcXVhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XG4gIGlmIChvMSA9PT0gbzIpIHJldHVybiB0cnVlO1xuICBpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpIHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuICBsZXQgdDEgPSB0eXBlb2YgbzEsIHQyID0gdHlwZW9mIG8yLCBsZW5ndGg6IG51bWJlciwga2V5OiBhbnksIGtleVNldDogYW55O1xuICBpZiAodDEgPT0gdDIgJiYgdDEgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvMSkpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvMikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICgobGVuZ3RoID0gbzEubGVuZ3RoKSA9PSBvMi5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGtleVNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGtleSBpbiBvMSkge1xuICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvMikge1xuICAgICAgICBpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiB0eXBlb2YgbzJba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgQmVhbnMge1xuICAvKipcbiAgICogQ29weSBhIHNvdXJjZSBvYmplY3QsIGJ5IGluY2x1ZGluZyBvbmx5IHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIGRhdGFUeXBlLlxuICAgKiBJTVBPUlRBTlQ6IGV4dHJhIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGluIHRoZSB0YXJnZXRDbGFzcyBhcmUgTk9UIGNvcGllZC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCB0byBjb3B5XG4gICAqIEBwYXJhbSBkYXRhVHlwZSB0aGUgY2xhc3MgdG8gdXNlIGFzIHRhcmdldCBjbGFzc1xuICAgKiBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBjb3B5LiBJZiBlbXB0eSwgd2lsbCBjb3B5IG9ubHkgTk9UIG9wdGlvbmFsIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YVR5cGVcbiAgICovXG4gIHN0YXRpYyBjb3B5PFQ+KHNvdXJjZTogVCwgZGF0YVR5cGU6IG5ldyAoKSA9PiBULCBrZXlzPzogS2V5c0VudW08VD4pOiBUIHtcbiAgICBpZiAoaXNOaWwoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgZGF0YVR5cGUoKTtcbiAgICBPYmplY3Qua2V5cyhrZXlzIHx8IHRhcmdldCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgaWYgYW4gb2JqZWN0IGFsbCBhbGwgcHJvcGVydGllcyB0byBuaWxcbiAgICovXG4gIHN0YXRpYyBpc0VtcHR5PFQ+KGRhdGE6IFQsIGtleXM/OiBLZXlzRW51bTxUPnxzdHJpbmdbXSwgb3B0cz86IHtcbiAgICBibGFua1N0cmluZ0xpa2VFbXB0eT86IGJvb2xlYW47XG4gIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWwoZGF0YSkgfHwgKEFycmF5LmlzQXJyYXkoa2V5cykgPyBrZXlzIDogT2JqZWN0LmtleXMoa2V5cyB8fCBkYXRhKSlcbiAgICAgIC8vIEZpbmQgaW5kZXggb2YgdGhlIGZpcnN0IE5PVCBuaWwgdmFsdWVcbiAgICAgIC5maW5kSW5kZXgoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gIUJlYW5zLmlzRW1wdHkodmFsdWUsIG51bGwsIG9wdHMpOyAvLyBMb29wXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmxhbmtTdHJpbmdMaWtlRW1wdHkgPT09IHRydWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIGlzTm90TmlsT3JCbGFuayh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSk7XG4gICAgICB9KSA9PT0gLTE7XG4gIH1cblxuICBzdGF0aWMgY29sbGVjdEJ5SWQ8VD4oYXJyYXk6IFRbXSk6IEtleVZhbHVlVHlwZTxUW10+IHtcbiAgICByZXR1cm4gY29sbGVjdEJ5UHJvcGVydHkoYXJyYXksICdpZCcgYXMga2V5b2YgVCk7XG4gIH1cblxuICBzdGF0aWMgY29sbGVjdEJ5UHJvcGVydHkgPSBjb2xsZWN0QnlQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnRXaXRoQ2xhc3MoZWxlbTogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICBpZiAoIWNsYXNzTmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbT8ucGFyZW50RWxlbWVudDtcbiAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSByZXR1cm4gY3VycmVudEVsZW1lbnQ7XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -40,10 +40,10 @@ export class AppGestureConfig extends HammerGestureConfig {
40
40
  return mc;
41
41
  }
42
42
  }
43
- AppGestureConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
44
- AppGestureConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, providedIn: 'root' });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, decorators: [{
43
+ AppGestureConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
44
+ AppGestureConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, providedIn: 'root' });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, decorators: [{
46
46
  type: Injectable,
47
47
  args: [{ providedIn: 'root' }]
48
48
  }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsaURBQWlEO0FBQ3ZGOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBRHpEOztRQUdFLHFDQUFxQztRQUNyQyxjQUFTLEdBQVE7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjthQUN4QjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsS0FBSzthQUNkO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSxLQUFLO2FBQ2Q7WUFDRCxtREFBbUQ7WUFDbkQsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxHQUFHLENBQUUscUVBQXFFO2FBQ3JGO1NBQ0YsQ0FBQztLQWVIO0lBYkMsV0FBVyxDQUFDLE9BQW9CO1FBRTlCLFFBQVE7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFVLE1BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RDLElBQUksU0FBUztnQkFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzhHQWhDVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQURKLE1BQU07NEZBQ2xCLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIYW1tZXJHZXN0dXJlQ29uZmlnfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuZXhwb3J0IGNvbnN0IEhBTU1FUl9UQVBfVElNRSA9IDI1MDtcbmV4cG9ydCBjb25zdCBIQU1NRVJfUFJFU1NfVElNRSA9IDQwMDsgLy8gSW5jcmVhc2UgbmVlZCBmb3IgZG91YmxlIHRhcCAoZGVmYXVsdDogMjUxIG1zKVxuLyoqXG4gKiBAaGlkZGVuXG4gKiBUaGlzIGNsYXNzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBBbmd1bGFyIGdlc3R1cmUgY29uZmlnLlxuICpcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXBwR2VzdHVyZUNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuXG4gIC8vIE92ZXJyaWRlIEhhbW1lckpTIGRlZmF1bHQgc2V0dGluZ3NcbiAgb3ZlcnJpZGVzID0gPGFueT57XG4gICAgcHJlc3M6IHtcbiAgICAgIHRpbWU6IEhBTU1FUl9QUkVTU19USU1FXG4gICAgfSxcbiAgICBwaW5jaDoge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcm90YXRlOiB7XG4gICAgICBlbmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBzZWUgaHR0cHM6Ly9oYW1tZXJqcy5naXRodWIuaW8vcmVjb2duaXplci1zd2lwZS9cbiAgICBzd2lwZToge1xuICAgICAgdGhyZXNob2xkOiAzMCwgIC8vIE1pbmltYWwgZGlzdGFuY2UgcmVxdWlyZWQgYmVmb3JlIHJlY29nbml6aW5nLlxuICAgICAgdmVsb2NpdHk6IDAuNCAgLy9NaW5pbWFsIHZlbG9jaXR5IHJlcXVpcmVkIGJlZm9yZSByZWNvZ25pemluZywgdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAgfVxuICB9O1xuXG4gIGJ1aWxkSGFtbWVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgICAvLyBERUJVR1xuICAgIGNvbnNvbGUuZGVidWcoJ1tnZXN0dXJlXSBBcHBseWluZyBIYW1tZXJKUyBjb25maWcgdG8gJywgZWxlbWVudC50YWdOYW1lKTtcblxuICAgIGNvbnN0IG1jID0gbmV3ICg8YW55PndpbmRvdykuSGFtbWVyKGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gdGhpcy5vdmVycmlkZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUpIG1jLmdldChldmVudE5hbWUpLnNldCh0aGlzLm92ZXJyaWRlc1tldmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWM7XG4gIH1cbn1cbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsaURBQWlEO0FBQ3ZGOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBRHpEOztRQUdFLHFDQUFxQztRQUNyQyxjQUFTLEdBQVE7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjthQUN4QjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsS0FBSzthQUNkO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSxLQUFLO2FBQ2Q7WUFDRCxtREFBbUQ7WUFDbkQsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxHQUFHLENBQUUscUVBQXFFO2FBQ3JGO1NBQ0YsQ0FBQztLQWVIO0lBYkMsV0FBVyxDQUFDLE9BQW9CO1FBRTlCLFFBQVE7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFVLE1BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RDLElBQUksU0FBUztnQkFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzZHQWhDVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQURKLE1BQU07MkZBQ2xCLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIYW1tZXJHZXN0dXJlQ29uZmlnfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuZXhwb3J0IGNvbnN0IEhBTU1FUl9UQVBfVElNRSA9IDI1MDtcbmV4cG9ydCBjb25zdCBIQU1NRVJfUFJFU1NfVElNRSA9IDQwMDsgLy8gSW5jcmVhc2UgbmVlZCBmb3IgZG91YmxlIHRhcCAoZGVmYXVsdDogMjUxIG1zKVxuLyoqXG4gKiBAaGlkZGVuXG4gKiBUaGlzIGNsYXNzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBBbmd1bGFyIGdlc3R1cmUgY29uZmlnLlxuICpcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXBwR2VzdHVyZUNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuXG4gIC8vIE92ZXJyaWRlIEhhbW1lckpTIGRlZmF1bHQgc2V0dGluZ3NcbiAgb3ZlcnJpZGVzID0gPGFueT57XG4gICAgcHJlc3M6IHtcbiAgICAgIHRpbWU6IEhBTU1FUl9QUkVTU19USU1FXG4gICAgfSxcbiAgICBwaW5jaDoge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcm90YXRlOiB7XG4gICAgICBlbmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBzZWUgaHR0cHM6Ly9oYW1tZXJqcy5naXRodWIuaW8vcmVjb2duaXplci1zd2lwZS9cbiAgICBzd2lwZToge1xuICAgICAgdGhyZXNob2xkOiAzMCwgIC8vIE1pbmltYWwgZGlzdGFuY2UgcmVxdWlyZWQgYmVmb3JlIHJlY29nbml6aW5nLlxuICAgICAgdmVsb2NpdHk6IDAuNCAgLy9NaW5pbWFsIHZlbG9jaXR5IHJlcXVpcmVkIGJlZm9yZSByZWNvZ25pemluZywgdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAgfVxuICB9O1xuXG4gIGJ1aWxkSGFtbWVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgICAvLyBERUJVR1xuICAgIGNvbnNvbGUuZGVidWcoJ1tnZXN0dXJlXSBBcHBseWluZyBIYW1tZXJKUyBjb25maWcgdG8gJywgZWxlbWVudC50YWdOYW1lKTtcblxuICAgIGNvbnN0IG1jID0gbmV3ICg8YW55PndpbmRvdykuSGFtbWVyKGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gdGhpcy5vdmVycmlkZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUpIG1jLmdldChldmVudE5hbWUpLnNldCh0aGlzLm92ZXJyaWRlc1tldmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWM7XG4gIH1cbn1cbiJdfQ==