ngx-techlify-core 11.4.6 → 11.4.7

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 (333) hide show
  1. package/README.md +24 -24
  2. package/bundles/ngx-techlify-core.umd.js +7861 -7849
  3. package/bundles/ngx-techlify-core.umd.js.map +1 -1
  4. package/bundles/ngx-techlify-core.umd.min.js +2 -2
  5. package/bundles/ngx-techlify-core.umd.min.js.map +1 -1
  6. package/esm2015/lib/action-popup/action-popup.component.js +32 -32
  7. package/esm2015/lib/action-popup/action-popup.model.js +3 -3
  8. package/esm2015/lib/action-popup/action-popup.module.js +26 -26
  9. package/esm2015/lib/action-popup/index.js +3 -3
  10. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.js +12 -12
  11. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.component.js +49 -49
  12. package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.module.js +25 -25
  13. package/esm2015/lib/audit-log/audit-log-list/audit-log-list-routing.module.js +12 -12
  14. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.component.js +132 -132
  15. package/esm2015/lib/audit-log/audit-log-list/audit-log-list.module.js +29 -29
  16. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.js +12 -12
  17. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.js +67 -67
  18. package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.js +25 -25
  19. package/esm2015/lib/audit-log/audit-log-routing.module.js +19 -19
  20. package/esm2015/lib/audit-log/audit-log-view/audit-log-view-routing.module.js +12 -12
  21. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +60 -60
  22. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.module.js +21 -21
  23. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.js +12 -12
  24. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +57 -57
  25. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.module.js +21 -21
  26. package/esm2015/lib/audit-log/audit-log.module.js +20 -20
  27. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.js +12 -12
  28. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.js +35 -35
  29. package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.js +21 -21
  30. package/esm2015/lib/core/alert.service.js +39 -39
  31. package/esm2015/lib/core/api-prefix.interceptor.js +28 -28
  32. package/esm2015/lib/core/authentication.guard.js +39 -39
  33. package/esm2015/lib/core/authentication.service.js +59 -59
  34. package/esm2015/lib/core/cache.interceptor.js +60 -60
  35. package/esm2015/lib/core/config.service.js +47 -47
  36. package/esm2015/lib/core/core.module.js +42 -42
  37. package/esm2015/lib/core/credentials.service.js +84 -84
  38. package/esm2015/lib/core/dataManager.service.js +120 -120
  39. package/esm2015/lib/core/error-handler.interceptor.js +53 -53
  40. package/esm2015/lib/core/error-handler.service.js +59 -59
  41. package/esm2015/lib/core/form-validator.service.js +23 -23
  42. package/esm2015/lib/core/header.interceptor.js +22 -22
  43. package/esm2015/lib/core/http-cache.service.js +110 -110
  44. package/esm2015/lib/core/http.service.js +82 -82
  45. package/esm2015/lib/core/index.js +21 -21
  46. package/esm2015/lib/core/logger.service.js +100 -100
  47. package/esm2015/lib/core/route-reusable-strategy.js +35 -35
  48. package/esm2015/lib/core/snack/snack.component.js +33 -33
  49. package/esm2015/lib/core/snack/snack.module.js +25 -25
  50. package/esm2015/lib/core/storage.service.js +36 -36
  51. package/esm2015/lib/core/techlify-config.model.js +28 -28
  52. package/esm2015/lib/core/token.interceptor.js +30 -30
  53. package/esm2015/lib/data-table/data-table.component.js +190 -190
  54. package/esm2015/lib/data-table/data-table.model.js +11 -11
  55. package/esm2015/lib/data-table/data-table.module.js +25 -25
  56. package/esm2015/lib/data-table/index.js +3 -3
  57. package/esm2015/lib/date-validator.js +10 -10
  58. package/esm2015/lib/document-viewer/document-viewer.component.js +58 -58
  59. package/esm2015/lib/document-viewer/document-viewer.module.js +25 -25
  60. package/esm2015/lib/document-viewer/index.js +3 -3
  61. package/esm2015/lib/document-viewer/viewer-config.model.js +3 -3
  62. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.js +26 -26
  63. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.js +72 -72
  64. package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.js +23 -23
  65. package/esm2015/lib/email-subscription/email-subscription-for-user/index.js +2 -2
  66. package/esm2015/lib/email-subscription/email-subscription-routing.module.js +12 -12
  67. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.js +12 -12
  68. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.js +102 -102
  69. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.js +28 -28
  70. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.js +2 -2
  71. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.js +28 -28
  72. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +153 -153
  73. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.js +27 -27
  74. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.js +1 -1
  75. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.js +12 -12
  76. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type.module.js +15 -15
  77. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.js +12 -12
  78. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.js +99 -99
  79. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.js +27 -27
  80. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.js +2 -2
  81. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.js +28 -28
  82. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.js +155 -155
  83. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.js +29 -29
  84. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.js +2 -2
  85. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.js +12 -12
  86. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +50 -50
  87. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.js +25 -25
  88. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.js +2 -2
  89. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.js +12 -12
  90. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user.module.js +15 -15
  91. package/esm2015/lib/email-subscription/email-subscription.module.js +15 -15
  92. package/esm2015/lib/entity-files/entity-file-form/entity-file-form.component.js +138 -138
  93. package/esm2015/lib/entity-files/entity-file.service.js +42 -42
  94. package/esm2015/lib/entity-files/entity-files-view-all.component.js +208 -204
  95. package/esm2015/lib/entity-files/entity-files-view-all.module.js +34 -34
  96. package/esm2015/lib/entity-files/index.js +3 -3
  97. package/esm2015/lib/export-excel/export-excel-button/export-excel-button.component.js +32 -32
  98. package/esm2015/lib/export-excel/export-excel.module.js +17 -17
  99. package/esm2015/lib/file-dropper/file-dropper.component.js +122 -122
  100. package/esm2015/lib/file-dropper/file-dropper.model.js +3 -3
  101. package/esm2015/lib/file-dropper/file-dropper.module.js +21 -21
  102. package/esm2015/lib/file-dropper/index.js +3 -3
  103. package/esm2015/lib/import-csv/data-import/data-import.component.js +18 -18
  104. package/esm2015/lib/import-csv/failed-items-list/failed-items-list.component.js +33 -33
  105. package/esm2015/lib/import-csv/field-mapping/field-mapping.component.js +148 -148
  106. package/esm2015/lib/import-csv/import-csv-config.js +2 -2
  107. package/esm2015/lib/import-csv/import-csv.component.js +196 -196
  108. package/esm2015/lib/import-csv/import-csv.module.js +46 -46
  109. package/esm2015/lib/import-csv/import-history-list/import-history-list.component.js +71 -71
  110. package/esm2015/lib/import-csv/import-success/import-success.component.js +19 -19
  111. package/esm2015/lib/loader/index.js +2 -2
  112. package/esm2015/lib/loader/loader.component.js +22 -22
  113. package/esm2015/lib/loader/loader.module.js +21 -21
  114. package/esm2015/lib/login-history-for-user/login-history-for-user-routing.module.js +20 -20
  115. package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +88 -88
  116. package/esm2015/lib/login-history-for-user/login-history-for-user.module.js +27 -27
  117. package/esm2015/lib/material.module.js +60 -60
  118. package/esm2015/lib/note/comment-form/comment-form.component.js +73 -73
  119. package/esm2015/lib/note/index.js +4 -4
  120. package/esm2015/lib/note/note-form/note-form.component.js +81 -81
  121. package/esm2015/lib/note/note-list/note-list.component.js +151 -151
  122. package/esm2015/lib/note/note.module.js +36 -36
  123. package/esm2015/lib/note/note.service.js +31 -31
  124. package/esm2015/lib/read-more/read-more.component.js +43 -43
  125. package/esm2015/lib/read-more/read-more.module.js +21 -21
  126. package/esm2015/lib/searchable-selector/index.js +3 -3
  127. package/esm2015/lib/searchable-selector/mat-select-infinite-scroll.directive.js +81 -81
  128. package/esm2015/lib/searchable-selector/searchable-selector.component.js +307 -307
  129. package/esm2015/lib/searchable-selector/searchable-selector.module.js +28 -28
  130. package/esm2015/lib/techlify-feature/on-off-switch/on-off-switch.component.js +27 -27
  131. package/esm2015/lib/techlify-feature/techlify-feature-enabled.directive.js +78 -78
  132. package/esm2015/lib/techlify-feature/techlify-feature-listing.component.js +177 -177
  133. package/esm2015/lib/techlify-feature/techlify-feature.module.js +30 -30
  134. package/esm2015/lib/techlify-feature/techlify-feature.routing.js +12 -12
  135. package/esm2015/lib/techlify-feature/techlify-feature.service.js +28 -28
  136. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.js +15 -15
  137. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.js +269 -269
  138. package/esm2015/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.js +25 -25
  139. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.js +168 -168
  140. package/esm2015/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.js +29 -29
  141. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.component.js +114 -114
  142. package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.module.js +28 -28
  143. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.js +22 -22
  144. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.component.js +143 -143
  145. package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.module.js +28 -28
  146. package/esm2015/lib/techlify-update/techlify-update-routing.module.js +22 -22
  147. package/esm2015/lib/techlify-update/techlify-update.module.js +30 -30
  148. package/esm2015/lib/techlify-update/techlify-update.service.js +43 -43
  149. package/esm2015/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.js +161 -161
  150. package/esm2015/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.js +82 -82
  151. package/esm2015/lib/techlify-update/update-notifier/update-notifier.component.js +62 -62
  152. package/esm2015/lib/techlify-update/update-notifier/update-notifier.module.js +29 -29
  153. package/esm2015/lib/techlify-update/update-view/update-view.component.js +36 -36
  154. package/esm2015/lib/techlify-update/update-view/update-view.module.js +24 -24
  155. package/esm2015/lib/timeline-filter/calculate-timeline.js +102 -102
  156. package/esm2015/lib/timeline-filter/index.js +4 -4
  157. package/esm2015/lib/timeline-filter/timeline-filter-routing.module.js +12 -12
  158. package/esm2015/lib/timeline-filter/timeline-filter.component.js +213 -213
  159. package/esm2015/lib/timeline-filter/timeline-filter.module.js +23 -23
  160. package/esm2015/lib/timeline-filter/timeline.model.js +18 -18
  161. package/esm2015/lib/utility/date-utils.service.js +48 -48
  162. package/esm2015/lib/utility/index.js +4 -4
  163. package/esm2015/lib/utility/num-items-selector.component.js +29 -29
  164. package/esm2015/lib/utility/number-selector.component.js +38 -38
  165. package/esm2015/lib/utility/utility.module.js +20 -20
  166. package/esm2015/ngx-techlify-core.js +59 -59
  167. package/esm2015/public-api.js +95 -95
  168. package/fesm2015/ngx-techlify-core.js +6726 -6722
  169. package/fesm2015/ngx-techlify-core.js.map +1 -1
  170. package/lib/action-popup/action-popup.component.d.ts +14 -14
  171. package/lib/action-popup/action-popup.model.d.ts +5 -5
  172. package/lib/action-popup/action-popup.module.d.ts +2 -2
  173. package/lib/action-popup/index.d.ts +2 -2
  174. package/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.d.ts +2 -2
  175. package/lib/audit-log/audit-log-for-model/audit-log-for-model.component.d.ts +12 -12
  176. package/lib/audit-log/audit-log-for-model/audit-log-for-model.module.d.ts +2 -2
  177. package/lib/audit-log/audit-log-list/audit-log-list-routing.module.d.ts +2 -2
  178. package/lib/audit-log/audit-log-list/audit-log-list.component.d.ts +32 -32
  179. package/lib/audit-log/audit-log-list/audit-log-list.module.d.ts +2 -2
  180. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.d.ts +2 -2
  181. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.d.ts +19 -19
  182. package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.d.ts +2 -2
  183. package/lib/audit-log/audit-log-routing.module.d.ts +2 -2
  184. package/lib/audit-log/audit-log-view/audit-log-view-routing.module.d.ts +2 -2
  185. package/lib/audit-log/audit-log-view/audit-log-view.component.d.ts +17 -17
  186. package/lib/audit-log/audit-log-view/audit-log-view.module.d.ts +2 -2
  187. package/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.d.ts +2 -2
  188. package/lib/audit-log/audit-log-view-model/audit-log-view-model.component.d.ts +15 -15
  189. package/lib/audit-log/audit-log-view-model/audit-log-view-model.module.d.ts +2 -2
  190. package/lib/audit-log/audit-log.module.d.ts +2 -2
  191. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.d.ts +2 -2
  192. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.d.ts +11 -11
  193. package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.d.ts +2 -2
  194. package/lib/core/alert.service.d.ts +12 -12
  195. package/lib/core/api-prefix.interceptor.d.ts +11 -11
  196. package/lib/core/authentication.guard.d.ts +10 -10
  197. package/lib/core/authentication.service.d.ts +23 -23
  198. package/lib/core/cache.interceptor.d.ts +21 -21
  199. package/lib/core/config.service.d.ts +19 -19
  200. package/lib/core/core.module.d.ts +3 -3
  201. package/lib/core/credentials.service.d.ts +36 -36
  202. package/lib/core/dataManager.service.d.ts +70 -70
  203. package/lib/core/error-handler.interceptor.d.ts +14 -14
  204. package/lib/core/error-handler.service.d.ts +14 -14
  205. package/lib/core/form-validator.service.d.ts +8 -8
  206. package/lib/core/header.interceptor.d.ts +8 -8
  207. package/lib/core/http-cache.service.d.ts +54 -54
  208. package/lib/core/http.service.d.ts +56 -56
  209. package/lib/core/index.d.ts +20 -20
  210. package/lib/core/logger.service.d.ts +85 -85
  211. package/lib/core/route-reusable-strategy.d.ts +13 -13
  212. package/lib/core/snack/snack.component.d.ts +8 -8
  213. package/lib/core/snack/snack.module.d.ts +2 -2
  214. package/lib/core/storage.service.d.ts +15 -15
  215. package/lib/core/techlify-config.model.d.ts +18 -18
  216. package/lib/core/token.interceptor.d.ts +11 -11
  217. package/lib/data-table/data-table.component.d.ts +60 -60
  218. package/lib/data-table/data-table.model.d.ts +46 -46
  219. package/lib/data-table/data-table.module.d.ts +2 -2
  220. package/lib/data-table/index.d.ts +2 -2
  221. package/lib/date-validator.d.ts +1 -1
  222. package/lib/document-viewer/document-viewer.component.d.ts +16 -16
  223. package/lib/document-viewer/document-viewer.module.d.ts +2 -2
  224. package/lib/document-viewer/index.d.ts +2 -2
  225. package/lib/document-viewer/viewer-config.model.d.ts +5 -5
  226. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.d.ts +7 -7
  227. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.d.ts +17 -17
  228. package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.d.ts +2 -2
  229. package/lib/email-subscription/email-subscription-for-user/index.d.ts +1 -1
  230. package/lib/email-subscription/email-subscription-routing.module.d.ts +2 -2
  231. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.d.ts +2 -2
  232. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.d.ts +32 -32
  233. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.d.ts +2 -2
  234. package/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.d.ts +1 -1
  235. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.d.ts +9 -9
  236. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.d.ts +30 -30
  237. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.d.ts +2 -2
  238. package/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.d.ts +1 -1
  239. package/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.d.ts +2 -2
  240. package/lib/email-subscription/email-subscription-type/email-subscription-type.module.d.ts +2 -2
  241. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.d.ts +2 -2
  242. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.d.ts +32 -32
  243. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.d.ts +2 -2
  244. package/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.d.ts +1 -1
  245. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.d.ts +9 -9
  246. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.d.ts +32 -32
  247. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.d.ts +2 -2
  248. package/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.d.ts +1 -1
  249. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.d.ts +2 -2
  250. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.d.ts +13 -13
  251. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.d.ts +2 -2
  252. package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.d.ts +1 -1
  253. package/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.d.ts +2 -2
  254. package/lib/email-subscription/email-subscription-user/email-subscription-user.module.d.ts +2 -2
  255. package/lib/email-subscription/email-subscription.module.d.ts +2 -2
  256. package/lib/entity-files/entity-file-form/entity-file-form.component.d.ts +34 -34
  257. package/lib/entity-files/entity-file.service.d.ts +10 -10
  258. package/lib/entity-files/entity-files-view-all.component.d.ts +45 -44
  259. package/lib/entity-files/entity-files-view-all.module.d.ts +2 -2
  260. package/lib/entity-files/index.d.ts +2 -2
  261. package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +8 -8
  262. package/lib/export-excel/export-excel.module.d.ts +2 -2
  263. package/lib/file-dropper/file-dropper.component.d.ts +33 -33
  264. package/lib/file-dropper/file-dropper.model.d.ts +10 -10
  265. package/lib/file-dropper/file-dropper.module.d.ts +2 -2
  266. package/lib/file-dropper/index.d.ts +2 -2
  267. package/lib/import-csv/data-import/data-import.component.d.ts +6 -6
  268. package/lib/import-csv/failed-items-list/failed-items-list.component.d.ts +12 -12
  269. package/lib/import-csv/field-mapping/field-mapping.component.d.ts +34 -34
  270. package/lib/import-csv/import-csv-config.d.ts +17 -17
  271. package/lib/import-csv/import-csv.component.d.ts +33 -33
  272. package/lib/import-csv/import-csv.module.d.ts +2 -2
  273. package/lib/import-csv/import-history-list/import-history-list.component.d.ts +21 -21
  274. package/lib/import-csv/import-success/import-success.component.d.ts +8 -8
  275. package/lib/loader/index.d.ts +1 -1
  276. package/lib/loader/loader.component.d.ts +8 -8
  277. package/lib/loader/loader.module.d.ts +2 -2
  278. package/lib/login-history-for-user/login-history-for-user-routing.module.d.ts +2 -2
  279. package/lib/login-history-for-user/login-history-for-user.component.d.ts +23 -23
  280. package/lib/login-history-for-user/login-history-for-user.module.d.ts +2 -2
  281. package/lib/material.module.d.ts +2 -2
  282. package/lib/note/comment-form/comment-form.component.d.ts +22 -22
  283. package/lib/note/index.d.ts +3 -3
  284. package/lib/note/note-form/note-form.component.d.ts +27 -27
  285. package/lib/note/note-list/note-list.component.d.ts +28 -28
  286. package/lib/note/note.module.d.ts +2 -2
  287. package/lib/note/note.service.d.ts +9 -9
  288. package/lib/read-more/read-more.component.d.ts +12 -12
  289. package/lib/read-more/read-more.module.d.ts +2 -2
  290. package/lib/searchable-selector/index.d.ts +2 -2
  291. package/lib/searchable-selector/mat-select-infinite-scroll.directive.d.ts +23 -23
  292. package/lib/searchable-selector/searchable-selector.component.d.ts +81 -81
  293. package/lib/searchable-selector/searchable-selector.module.d.ts +2 -2
  294. package/lib/techlify-feature/on-off-switch/on-off-switch.component.d.ts +9 -9
  295. package/lib/techlify-feature/techlify-feature-enabled.directive.d.ts +17 -17
  296. package/lib/techlify-feature/techlify-feature-listing.component.d.ts +37 -37
  297. package/lib/techlify-feature/techlify-feature.module.d.ts +2 -2
  298. package/lib/techlify-feature/techlify-feature.routing.d.ts +2 -2
  299. package/lib/techlify-feature/techlify-feature.service.d.ts +8 -8
  300. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.d.ts +12 -12
  301. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.d.ts +76 -76
  302. package/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.d.ts +2 -2
  303. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.d.ts +58 -58
  304. package/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.d.ts +2 -2
  305. package/lib/techlify-update/techlify-update-form/techlify-update-form.component.d.ts +30 -30
  306. package/lib/techlify-update/techlify-update-form/techlify-update-form.module.d.ts +2 -2
  307. package/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.d.ts +2 -2
  308. package/lib/techlify-update/techlify-update-history/techlify-update-history.component.d.ts +31 -31
  309. package/lib/techlify-update/techlify-update-history/techlify-update-history.module.d.ts +2 -2
  310. package/lib/techlify-update/techlify-update-routing.module.d.ts +2 -2
  311. package/lib/techlify-update/techlify-update.module.d.ts +2 -2
  312. package/lib/techlify-update/techlify-update.service.d.ts +13 -13
  313. package/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.d.ts +31 -31
  314. package/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.d.ts +25 -25
  315. package/lib/techlify-update/update-notifier/update-notifier.component.d.ts +16 -16
  316. package/lib/techlify-update/update-notifier/update-notifier.module.d.ts +2 -2
  317. package/lib/techlify-update/update-view/update-view.component.d.ts +14 -14
  318. package/lib/techlify-update/update-view/update-view.module.d.ts +2 -2
  319. package/lib/timeline-filter/calculate-timeline.d.ts +6 -6
  320. package/lib/timeline-filter/index.d.ts +3 -3
  321. package/lib/timeline-filter/timeline-filter-routing.module.d.ts +2 -2
  322. package/lib/timeline-filter/timeline-filter.component.d.ts +61 -61
  323. package/lib/timeline-filter/timeline-filter.module.d.ts +2 -2
  324. package/lib/timeline-filter/timeline.model.d.ts +17 -17
  325. package/lib/utility/date-utils.service.d.ts +21 -21
  326. package/lib/utility/index.d.ts +3 -3
  327. package/lib/utility/num-items-selector.component.d.ts +16 -16
  328. package/lib/utility/number-selector.component.d.ts +20 -20
  329. package/lib/utility/utility.module.d.ts +2 -2
  330. package/ngx-techlify-core.d.ts +59 -59
  331. package/ngx-techlify-core.metadata.json +1 -1
  332. package/package.json +1 -1
  333. package/public-api.d.ts +91 -91
@@ -1,269 +1,269 @@
1
- var TechlifyTaggerTagFormFieldComponent_1;
2
- import { __awaiter, __decorate } from "tslib";
3
- import { FocusMonitor } from '@angular/cdk/a11y';
4
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
- import { Component, ElementRef, ViewChild, Input, Inject, Optional, Self } from '@angular/core';
6
- import { FormControl, NgControl } from '@angular/forms';
7
- import { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
8
- import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
9
- import { Subject } from 'rxjs';
10
- import { debounceTime } from 'rxjs/operators';
11
- import { HttpService } from '../core/http.service';
12
- import { TechlifyTaggerTagFormConfigModel } from './techlify-tagger-tag-form-config.model';
13
- let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = class TechlifyTaggerTagFormFieldComponent {
14
- constructor(_focusMonitor, _elementRef, httpService, _formField, ngControl) {
15
- this._focusMonitor = _focusMonitor;
16
- this._elementRef = _elementRef;
17
- this.httpService = httpService;
18
- this._formField = _formField;
19
- this.ngControl = ngControl;
20
- this.stateChanges = new Subject();
21
- this.focused = false;
22
- this.controlType = 'techlify-tagger-form-field';
23
- this.id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent_1.nextId++}`;
24
- this.onChange = (_) => { };
25
- this.onTouched = () => { };
26
- this.tagInputCtrl = new FormControl();
27
- /**Pass the configuration for Techlify Tagger */
28
- this.config = new TechlifyTaggerTagFormConfigModel();
29
- /**Pass the default list of tags */
30
- this._allTags = [];
31
- /**Pass the Categories to filter for a model */
32
- this.categories = [];
33
- this._required = false;
34
- this._disabled = false;
35
- this._value = [];
36
- this.tagInputCtrl.valueChanges
37
- .subscribe(filterValue => {
38
- this.filterString = filterValue;
39
- });
40
- //Set Focus Monitor
41
- _focusMonitor.monitor(_elementRef, true).subscribe(origin => {
42
- if (this.focused && !origin) {
43
- this.onTouched();
44
- }
45
- this.focused = !!origin;
46
- this.stateChanges.next();
47
- });
48
- if (this.ngControl != null) {
49
- this.ngControl.valueAccessor = this;
50
- }
51
- }
52
- get allTags() {
53
- return this._allTags;
54
- }
55
- set allTags(value) {
56
- this._allTags = value;
57
- }
58
- get tags() {
59
- return this.allTags.filter(x => this.value.some(y => y == x.id));
60
- }
61
- //Default Getter and Setters for a Form Field Implementation
62
- get empty() {
63
- return this.value.length == 0;
64
- }
65
- get shouldLabelFloat() {
66
- return this.focused || !this.empty || this.tagInputCtrl.value;
67
- }
68
- get required() {
69
- return this._required;
70
- }
71
- set required(value) {
72
- this._required = coerceBooleanProperty(value);
73
- this.stateChanges.next();
74
- }
75
- get disabled() {
76
- return this._disabled;
77
- }
78
- set disabled(value) {
79
- this._disabled = coerceBooleanProperty(value);
80
- this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();
81
- this.stateChanges.next();
82
- }
83
- get value() {
84
- return this._value;
85
- }
86
- set value(tagIds) {
87
- this._value = tagIds || [];
88
- this.stateChanges.next();
89
- }
90
- get errorState() {
91
- return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);
92
- }
93
- get placeholder() {
94
- return this._placeholder;
95
- }
96
- set placeholder(value) {
97
- this._placeholder = value;
98
- this.stateChanges.next();
99
- }
100
- ngOnInit() {
101
- }
102
- ngOnChanges(changes) {
103
- //API to load all tags for the model type
104
- if (this.allTags.length == 0) {
105
- this.httpService
106
- .cache(!this.config.isCacheTags)
107
- .get(this.config.apiUrl, {
108
- params: {
109
- categories: this.categories.join(','),
110
- perPage: '1000'
111
- }
112
- }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
113
- this.allTags = result.data;
114
- });
115
- }
116
- //API to load only the selected tags for the model
117
- if (this.modelId && this.value.length == 0) {
118
- //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.
119
- this.httpService
120
- .cache(!this.config.isCacheTags)
121
- .get(this.config.apiUrl, {
122
- params: {
123
- categories: this.categories.join(','),
124
- model_type: this.modelType,
125
- model_id: this.modelId,
126
- perPage: '1000'
127
- }
128
- }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
129
- this.value = ((result === null || result === void 0 ? void 0 : result.data) || []).map((x) => x.id);
130
- this._handleInput();
131
- });
132
- }
133
- }
134
- init() {
135
- if (this.modelId && this.allTags.length == 0) {
136
- //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.
137
- this.httpService
138
- .cache(!this.config.isCacheTags)
139
- .get(this.config.apiUrl, {
140
- params: {
141
- categories: this.categories.join(','),
142
- model_type: this.modelType,
143
- model_id: this.modelId
144
- }
145
- }).pipe(untilDestroyed(this)).subscribe((result) => {
146
- this.allTags = result.data;
147
- });
148
- }
149
- }
150
- get filteredTags() {
151
- return this._filter();
152
- }
153
- setDescribedByIds(ids) {
154
- // Just a empty implementation for Mat Form Field Interface
155
- }
156
- onContainerClick() {
157
- // Just a empty implementation for Mat Form Field Interface
158
- }
159
- add(event) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- const value = (event.value || '').trim();
162
- // Add our tag
163
- // Validate for single mode
164
- if (!this.config.isSingle || (this.value.length === 0)) {
165
- if (value && this.config.isCreateable) {
166
- const tags = this.allTags;
167
- let tag = tags.find((item) => item.title.toLowerCase() == value.toLowerCase());
168
- if (!tag) {
169
- //No tag present in the list
170
- try {
171
- const result = yield this.httpService.post(this.config.createApiUrl, {
172
- title: value,
173
- description: value,
174
- category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''
175
- }).toPromise();
176
- tag = result.item;
177
- }
178
- catch (error) {
179
- return;
180
- }
181
- this.allTags.push(tag);
182
- }
183
- else {
184
- //Optionally clean the existing value, to avoid duplicate
185
- this.remove(tag);
186
- }
187
- this.value.push(tag.id);
188
- this._handleInput();
189
- }
190
- }
191
- // Clear the input value
192
- event.input.value = '';
193
- this.tagInputCtrl.setValue(null);
194
- });
195
- }
196
- remove(tag) {
197
- this.value = this.value.filter(x => x !== tag.id);
198
- this._handleInput();
199
- }
200
- selected(event) {
201
- // Validate for single mode
202
- if (!this.config.isSingle || (this.value.length === 0)) {
203
- //Clean the existing value, to avoid duplicate
204
- this.remove({ id: event.option.value });
205
- this.value.push(event.option.value);
206
- this._handleInput();
207
- }
208
- this.tagInput.nativeElement.value = '';
209
- this.tagInputCtrl.setValue(null);
210
- }
211
- _filter() {
212
- const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;
213
- const availableTags = this.allTags.filter((tag) => !this.value.some((item) => item == tag.id));
214
- return filterValue ? availableTags.filter((tag) => tag.title.toLowerCase().includes(filterValue)) : availableTags;
215
- }
216
- writeValue(tagIds) {
217
- this.value = tagIds || [];
218
- }
219
- registerOnChange(fn) {
220
- this.onChange = fn;
221
- }
222
- registerOnTouched(fn) {
223
- this.onTouched = fn;
224
- }
225
- setDisabledState(isDisabled) {
226
- this.disabled = isDisabled;
227
- }
228
- _handleInput() {
229
- this.onChange(this.value);
230
- }
231
- ngOnDestroy() {
232
- this.stateChanges.complete();
233
- this._focusMonitor.stopMonitoring(this._elementRef);
234
- }
235
- };
236
- TechlifyTaggerTagFormFieldComponent.nextId = 0;
237
- TechlifyTaggerTagFormFieldComponent.decorators = [
238
- { type: Component, args: [{
239
- selector: 'app-techlify-tagger-tag-form-field',
240
- template: "<mat-chip-list #chipList aria-label=\"Tag Selection\">\n <mat-chip *ngFor=\"let tag of tags\" [selectable]=\"config.selectable\" [removable]=\"config.removable\"\n (removed)=\"remove(tag)\">\n {{tag.title}}\n <button matChipRemove *ngIf=\"config.removable\" class=\"border-0\">\n <mat-icon class=\"mat-relative-icon\">cancel</mat-icon>\n </button>\n </mat-chip>\n <input placeholder=\"{{config.isCreateable? config.placeholder:''}}\" #tagInput [formControl]=\"tagInputCtrl\"\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeysCodes\" (matChipInputTokenEnd)=\"add($event)\"\n #trigger=\"matAutocompleteTrigger\" (click)=\"trigger.openPanel()\">\n</mat-chip-list>\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let tag of filteredTags\" [value]=\"tag.id\">\n {{tag.title}}\n </mat-option>\n</mat-autocomplete>",
241
- providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent_1 }],
242
- styles: [".mat-relative-icon{font-size:20px;position:relative;right:7px;top:-3px}"]
243
- },] }
244
- ];
245
- TechlifyTaggerTagFormFieldComponent.ctorParameters = () => [
246
- { type: FocusMonitor },
247
- { type: ElementRef },
248
- { type: HttpService },
249
- { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] },
250
- { type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
251
- ];
252
- TechlifyTaggerTagFormFieldComponent.propDecorators = {
253
- tagInput: [{ type: ViewChild, args: ['tagInput',] }],
254
- config: [{ type: Input }],
255
- modelType: [{ type: Input }],
256
- modelId: [{ type: Input }],
257
- allTags: [{ type: Input }],
258
- categories: [{ type: Input }],
259
- defaultCreateCategory: [{ type: Input }],
260
- required: [{ type: Input }],
261
- disabled: [{ type: Input }],
262
- value: [{ type: Input }],
263
- placeholder: [{ type: Input }]
264
- };
265
- TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = __decorate([
266
- UntilDestroy()
267
- ], TechlifyTaggerTagFormFieldComponent);
268
- export { TechlifyTaggerTagFormFieldComponent };
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7SUFTOUUsbUNBQW1DLGlEQUFuQyxtQ0FBbUM7SUFxSzlDLFlBQ1UsYUFBMkIsRUFDM0IsV0FBb0MsRUFDcEMsV0FBd0IsRUFDVyxVQUF3QixFQUN4QyxTQUFvQjtRQUp2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztR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QztJQUM1QixDQUFDO0lBS0QsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FFRixDQUFBO0FBN1JRLDBDQUFNLEdBQUcsQ0FBQyxDQUFDOztZQVJuQixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztnQkFDOUMsa2dDQUE4RDtnQkFFOUQsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHFDQUFtQyxFQUFFLENBQUM7O2FBQ2hHOzs7WUFuQlEsWUFBWTtZQUVELFVBQVU7WUFRckIsV0FBVztZQUpYLFlBQVksdUJBdUxoQixRQUFRLFlBQUksTUFBTSxTQUFDLGNBQWM7WUExTE0sU0FBUyx1QkEyTGhELFFBQVEsWUFBSSxJQUFJOzs7dUJBN0psQixTQUFTLFNBQUMsVUFBVTtxQkFHcEIsS0FBSzt3QkFFTCxLQUFLO3NCQUVMLEtBQUs7c0JBSUwsS0FBSzt5QkFTTCxLQUFLO29DQUVMLEtBQUs7dUJBZUwsS0FBSzt1QkFVTCxLQUFLO29CQWFMLEtBQUs7MEJBYUwsS0FBSzs7QUF0RkssbUNBQW1DO0lBUC9DLFlBQVksRUFBRTtHQU9GLG1DQUFtQyxDQStSL0M7U0EvUlksbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSW5qZWN0LCBPcHRpb25hbCwgU2VsZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZENvbnRyb2wsIE1BVF9GT1JNX0ZJRUxEIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVjaGxpZnlUYWdnZXJUYWdGb3JtQ29uZmlnTW9kZWwgfSBmcm9tICcuL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1jb25maWcubW9kZWwnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUZpZWxkQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeVRhZ2dlclRhZ0Zvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIGNvbnRyb2xUeXBlID0gJ3RlY2hsaWZ5LXRhZ2dlci1mb3JtLWZpZWxkJztcbiAgaWQgPSBgdGVjaGxpZnktdGFnZ2VyLWZvcm0tZmllbGQtJHtUZWNobGlmeVRhZ2dlclRhZ0Zvcm1GaWVsZENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7IH07XG5cbiAgdGFnSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGZpbHRlclN0cmluZzogYW55O1xuICBAVmlld0NoaWxkKCd0YWdJbnB1dCcpIHRhZ0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIC8qKlBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFRlY2hsaWZ5IFRhZ2dlciAqL1xuICBASW5wdXQoKSBjb25maWc6IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsID0gbmV3IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsKCk7XG4gIC8qKlBhc3MgdGhlIE1vZGVsIFR5cGUgZm9yIFRlY2hsaWZ5IFRhZ2dlciwgUmVxdWlyZWQgKi9cbiAgQElucHV0KCkgbW9kZWxUeXBlITogc3RyaW5nO1xuICAvKipQYXNzIHRoZSBNb2RlbCBJRCBmb3IgVGVjaGxpZnkgVGFnZ2VyICovXG4gIEBJbnB1dCgpIG1vZGVsSWQ6IHN0cmluZztcblxuICAvKipQYXNzIHRoZSBkZWZhdWx0IGxpc3Qgb2YgdGFncyAqL1xuICBwcml2YXRlIF9hbGxUYWdzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBnZXQgYWxsVGFncygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsVGFncztcbiAgfVxuICBzZXQgYWxsVGFncyh2YWx1ZSkge1xuICAgIHRoaXMuX2FsbFRhZ3MgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlBhc3MgdGhlIENhdGVnb3JpZXMgdG8gZmlsdGVyIGZvciBhIG1vZGVsICovXG4gIEBJbnB1dCgpIGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKlBhc3MgZGVmYXVsdCBjYXRlZ29yeSB0byBiZSB1c2VkIGZvciBhc3NpZ25pbmcgdGhlIHRhZ3MsIHdoZW4gd2UgZmlsdGVyIGJ5IG1vcmUgdGhhbiBvbmUgY2F0ZWdvcnkgKi9cbiAgQElucHV0KCkgZGVmYXVsdENyZWF0ZUNhdGVnb3J5OiBzdHJpbmc7XG5cbiAgZ2V0IHRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsVGFncy5maWx0ZXIoeCA9PiB0aGlzLnZhbHVlLnNvbWUoeSA9PiB5ID09IHguaWQpKTtcbiAgfVxuXG4gIC8vRGVmYXVsdCBHZXR0ZXIgYW5kIFNldHRlcnMgZm9yIGEgRm9ybSBGaWVsZCBJbXBsZW1lbnRhdGlvblxuICBnZXQgZW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID09IDA7XG4gIH1cblxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5IHx8IHRoaXMudGFnSW5wdXRDdHJsLnZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnRhZ0lucHV0Q3RybC5kaXNhYmxlKCkgOiB0aGlzLnRhZ0lucHV0Q3RybC5lbmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodGFnSWRzOiBhbnlbXSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdGFnSWRzIHx8IFtdO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhZ0lucHV0Q3RybC5kaXJ0eSAmJiB0aGlzLnJlcXVpcmVkICYmICh0aGlzLnZhbHVlLmxlbmd0aCA9PSAwKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXG4gICAgLy9BUEkgdG8gbG9hZCBhbGwgdGFncyBmb3IgdGhlIG1vZGVsIHR5cGVcbiAgICBpZiAodGhpcy5hbGxUYWdzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmh0dHBTZXJ2aWNlXG4gICAgICAgIC5jYWNoZSghdGhpcy5jb25maWcuaXNDYWNoZVRhZ3MpXG4gICAgICAgIC5nZXQodGhpcy5jb25maWcuYXBpVXJsLCB7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLmNhdGVnb3JpZXMuam9pbignLCcpLFxuICAgICAgICAgICAgcGVyUGFnZTogJzEwMDAnXG4gICAgICAgICAgfVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxsVGFncyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvL0FQSSB0byBsb2FkIG9ubHkgdGhlIHNlbGVjdGVkIHRhZ3MgZm9yIHRoZSBtb2RlbFxuICAgIGlmICh0aGlzLm1vZGVsSWQgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgLy9Nb2RlbCBJZCBpcyBwYXNzZWQgYW5kIG5vIHRhZ3MgYXJlIHByZXNlbnQsIHNvIHdlIHF1ZXJ5IGRiIGZvciB0aGUgYXZpbGFibGUgdGFncyBmb3IgdGhlIG1vZGVsIElELlxuICAgICAgdGhpcy5odHRwU2VydmljZVxuICAgICAgICAuY2FjaGUoIXRoaXMuY29uZmlnLmlzQ2FjaGVUYWdzKVxuICAgICAgICAuZ2V0KHRoaXMuY29uZmlnLmFwaVVybCwge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgIG1vZGVsX3R5cGU6IHRoaXMubW9kZWxUeXBlLFxuICAgICAgICAgICAgbW9kZWxfaWQ6IHRoaXMubW9kZWxJZCxcbiAgICAgICAgICAgIHBlclBhZ2U6ICcxMDAwJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gKHJlc3VsdD8uZGF0YSB8fCBbXSkubWFwKCh4OiBhbnkpID0+IHguaWQpO1xuICAgICAgICAgIHRoaXMuX2hhbmRsZUlucHV0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxJZCAmJiB0aGlzLmFsbFRhZ3MubGVuZ3RoID09IDApIHtcbiAgICAgIC8vTW9kZWwgSWQgaXMgcGFzc2VkIGFuZCBubyB0YWdzIGFyZSBwYXNzZWQsIHNvIHdlIHF1ZXJ5IGRiIGZvciB0aGUgYXZpbGFibGUgdGFncyBmb3IgdGhlIG1vZGVsIElELlxuICAgICAgdGhpcy5odHRwU2VydmljZVxuICAgICAgICAuY2FjaGUoIXRoaXMuY29uZmlnLmlzQ2FjaGVUYWdzKVxuICAgICAgICAuZ2V0KHRoaXMuY29uZmlnLmFwaVVybCwge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgIG1vZGVsX3R5cGU6IHRoaXMubW9kZWxUeXBlLFxuICAgICAgICAgICAgbW9kZWxfaWQ6IHRoaXMubW9kZWxJZFxuICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsbFRhZ3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlcmVkVGFncygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcigpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHVibGljIF9mb3JtRmllbGQ6IE1hdEZvcm1GaWVsZCxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuXG4gICAgdGhpcy50YWdJbnB1dEN0cmwudmFsdWVDaGFuZ2VzXG4gICAgICAuc3Vic2NyaWJlKGZpbHRlclZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdHJpbmcgPSBmaWx0ZXJWYWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgLy9TZXQgRm9jdXMgTW9uaXRvclxuICAgIF9mb2N1c01vbml0b3IubW9uaXRvcihfZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XG4gICAgICBpZiAodGhpcy5mb2N1c2VkICYmICFvcmlnaW4pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcbiAgICAvLyBKdXN0IGEgZW1wdHkgaW1wbGVtZW50YXRpb24gZm9yIE1hdCBGb3JtIEZpZWxkIEludGVyZmFjZVxuICB9XG5cbiAgb25Db250YWluZXJDbGljaygpIHtcbiAgICAvLyBKdXN0IGEgZW1wdHkgaW1wbGVtZW50YXRpb24gZm9yIE1hdCBGb3JtIEZpZWxkIEludGVyZmFjZVxuICB9XG5cblxuICBhc3luYyBhZGQoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICAvLyBBZGQgb3VyIHRhZ1xuICAgIC8vIFZhbGlkYXRlIGZvciBzaW5nbGUgbW9kZVxuICAgIGlmICghdGhpcy5jb25maWcuaXNTaW5nbGUgfHwgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHRoaXMuY29uZmlnLmlzQ3JlYXRlYWJsZSkge1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5hbGxUYWdzO1xuICAgICAgICBsZXQgdGFnID0gdGFncy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udGl0bGUudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCF0YWcpIHtcbiAgICAgICAgICAvL05vIHRhZyBwcmVzZW50IGluIHRoZSBsaXN0XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgdGhpcy5odHRwU2VydmljZS5wb3N0KHRoaXMuY29uZmlnLmNyZWF0ZUFwaVVybCwge1xuICAgICAgICAgICAgICB0aXRsZTogdmFsdWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWx1ZSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfdGl0bGU6ICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkgPyAodGhpcy5kZWZhdWx0Q3JlYXRlQ2F0ZWdvcnkgPyB0aGlzLmRlZmF1bHRDcmVhdGVDYXRlZ29yeSA6IHRoaXMuY2F0ZWdvcmllc1swXSkgOiAnJ1xuICAgICAgICAgICAgfSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB0YWcgPSByZXN1bHQuaXRlbTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFsbFRhZ3MucHVzaCh0YWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vT3B0aW9uYWxseSBjbGVhbiB0aGUgZXhpc3RpbmcgdmFsdWUsIHRvIGF2b2lkIGR1cGxpY2F0ZVxuICAgICAgICAgIHRoaXMucmVtb3ZlKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRhZy5pZCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUlucHV0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGlucHV0IHZhbHVlXG4gICAgZXZlbnQuaW5wdXQudmFsdWUgPSAnJztcblxuICAgIHRoaXMudGFnSW5wdXRDdHJsLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlKHRhZzogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKHggPT4geCAhPT0gdGFnLmlkKTtcbiAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xuICB9XG5cbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBmb3Igc2luZ2xlIG1vZGVcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIC8vQ2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcbiAgICAgIHRoaXMucmVtb3ZlKHsgaWQ6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgICAgIHRoaXMudmFsdWUucHVzaChldmVudC5vcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcbiAgICB9XG4gICAgdGhpcy50YWdJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy50YWdJbnB1dEN0cmwuc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXIoKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5maWx0ZXJTdHJpbmcgPyB0aGlzLmZpbHRlclN0cmluZy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICAgIGNvbnN0IGF2YWlsYWJsZVRhZ3MgPSB0aGlzLmFsbFRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gIXRoaXMudmFsdWUuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtID09IHRhZy5pZCkpO1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA/IGF2YWlsYWJsZVRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gdGFnLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSA6IGF2YWlsYWJsZVRhZ3M7XG4gIH1cblxuICB3cml0ZVZhbHVlKHRhZ0lkczogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGFnSWRzIHx8IFtdO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIF9oYW5kbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogQm9vbGVhbklucHV0O1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuICB9XG5cbn1cbiJdfQ==
1
+ var TechlifyTaggerTagFormFieldComponent_1;
2
+ import { __awaiter, __decorate } from "tslib";
3
+ import { FocusMonitor } from '@angular/cdk/a11y';
4
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
+ import { Component, ElementRef, ViewChild, Input, Inject, Optional, Self } from '@angular/core';
6
+ import { FormControl, NgControl } from '@angular/forms';
7
+ import { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
8
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
9
+ import { Subject } from 'rxjs';
10
+ import { debounceTime } from 'rxjs/operators';
11
+ import { HttpService } from '../core/http.service';
12
+ import { TechlifyTaggerTagFormConfigModel } from './techlify-tagger-tag-form-config.model';
13
+ let TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = class TechlifyTaggerTagFormFieldComponent {
14
+ constructor(_focusMonitor, _elementRef, httpService, _formField, ngControl) {
15
+ this._focusMonitor = _focusMonitor;
16
+ this._elementRef = _elementRef;
17
+ this.httpService = httpService;
18
+ this._formField = _formField;
19
+ this.ngControl = ngControl;
20
+ this.stateChanges = new Subject();
21
+ this.focused = false;
22
+ this.controlType = 'techlify-tagger-form-field';
23
+ this.id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent_1.nextId++}`;
24
+ this.onChange = (_) => { };
25
+ this.onTouched = () => { };
26
+ this.tagInputCtrl = new FormControl();
27
+ /**Pass the configuration for Techlify Tagger */
28
+ this.config = new TechlifyTaggerTagFormConfigModel();
29
+ /**Pass the default list of tags */
30
+ this._allTags = [];
31
+ /**Pass the Categories to filter for a model */
32
+ this.categories = [];
33
+ this._required = false;
34
+ this._disabled = false;
35
+ this._value = [];
36
+ this.tagInputCtrl.valueChanges
37
+ .subscribe(filterValue => {
38
+ this.filterString = filterValue;
39
+ });
40
+ //Set Focus Monitor
41
+ _focusMonitor.monitor(_elementRef, true).subscribe(origin => {
42
+ if (this.focused && !origin) {
43
+ this.onTouched();
44
+ }
45
+ this.focused = !!origin;
46
+ this.stateChanges.next();
47
+ });
48
+ if (this.ngControl != null) {
49
+ this.ngControl.valueAccessor = this;
50
+ }
51
+ }
52
+ get allTags() {
53
+ return this._allTags;
54
+ }
55
+ set allTags(value) {
56
+ this._allTags = value;
57
+ }
58
+ get tags() {
59
+ return this.allTags.filter(x => this.value.some(y => y == x.id));
60
+ }
61
+ //Default Getter and Setters for a Form Field Implementation
62
+ get empty() {
63
+ return this.value.length == 0;
64
+ }
65
+ get shouldLabelFloat() {
66
+ return this.focused || !this.empty || this.tagInputCtrl.value;
67
+ }
68
+ get required() {
69
+ return this._required;
70
+ }
71
+ set required(value) {
72
+ this._required = coerceBooleanProperty(value);
73
+ this.stateChanges.next();
74
+ }
75
+ get disabled() {
76
+ return this._disabled;
77
+ }
78
+ set disabled(value) {
79
+ this._disabled = coerceBooleanProperty(value);
80
+ this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();
81
+ this.stateChanges.next();
82
+ }
83
+ get value() {
84
+ return this._value;
85
+ }
86
+ set value(tagIds) {
87
+ this._value = tagIds || [];
88
+ this.stateChanges.next();
89
+ }
90
+ get errorState() {
91
+ return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);
92
+ }
93
+ get placeholder() {
94
+ return this._placeholder;
95
+ }
96
+ set placeholder(value) {
97
+ this._placeholder = value;
98
+ this.stateChanges.next();
99
+ }
100
+ ngOnInit() {
101
+ }
102
+ ngOnChanges(changes) {
103
+ //API to load all tags for the model type
104
+ if (this.allTags.length == 0) {
105
+ this.httpService
106
+ .cache(!this.config.isCacheTags)
107
+ .get(this.config.apiUrl, {
108
+ params: {
109
+ categories: this.categories.join(','),
110
+ perPage: '1000'
111
+ }
112
+ }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
113
+ this.allTags = result.data;
114
+ });
115
+ }
116
+ //API to load only the selected tags for the model
117
+ if (this.modelId && this.value.length == 0) {
118
+ //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.
119
+ this.httpService
120
+ .cache(!this.config.isCacheTags)
121
+ .get(this.config.apiUrl, {
122
+ params: {
123
+ categories: this.categories.join(','),
124
+ model_type: this.modelType,
125
+ model_id: this.modelId,
126
+ perPage: '1000'
127
+ }
128
+ }).pipe(debounceTime(500), untilDestroyed(this)).subscribe((result) => {
129
+ this.value = ((result === null || result === void 0 ? void 0 : result.data) || []).map((x) => x.id);
130
+ this._handleInput();
131
+ });
132
+ }
133
+ }
134
+ init() {
135
+ if (this.modelId && this.allTags.length == 0) {
136
+ //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.
137
+ this.httpService
138
+ .cache(!this.config.isCacheTags)
139
+ .get(this.config.apiUrl, {
140
+ params: {
141
+ categories: this.categories.join(','),
142
+ model_type: this.modelType,
143
+ model_id: this.modelId
144
+ }
145
+ }).pipe(untilDestroyed(this)).subscribe((result) => {
146
+ this.allTags = result.data;
147
+ });
148
+ }
149
+ }
150
+ get filteredTags() {
151
+ return this._filter();
152
+ }
153
+ setDescribedByIds(ids) {
154
+ // Just a empty implementation for Mat Form Field Interface
155
+ }
156
+ onContainerClick() {
157
+ // Just a empty implementation for Mat Form Field Interface
158
+ }
159
+ add(event) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const value = (event.value || '').trim();
162
+ // Add our tag
163
+ // Validate for single mode
164
+ if (!this.config.isSingle || (this.value.length === 0)) {
165
+ if (value && this.config.isCreateable) {
166
+ const tags = this.allTags;
167
+ let tag = tags.find((item) => item.title.toLowerCase() == value.toLowerCase());
168
+ if (!tag) {
169
+ //No tag present in the list
170
+ try {
171
+ const result = yield this.httpService.post(this.config.createApiUrl, {
172
+ title: value,
173
+ description: value,
174
+ category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''
175
+ }).toPromise();
176
+ tag = result.item;
177
+ }
178
+ catch (error) {
179
+ return;
180
+ }
181
+ this.allTags.push(tag);
182
+ }
183
+ else {
184
+ //Optionally clean the existing value, to avoid duplicate
185
+ this.remove(tag);
186
+ }
187
+ this.value.push(tag.id);
188
+ this._handleInput();
189
+ }
190
+ }
191
+ // Clear the input value
192
+ event.input.value = '';
193
+ this.tagInputCtrl.setValue(null);
194
+ });
195
+ }
196
+ remove(tag) {
197
+ this.value = this.value.filter(x => x !== tag.id);
198
+ this._handleInput();
199
+ }
200
+ selected(event) {
201
+ // Validate for single mode
202
+ if (!this.config.isSingle || (this.value.length === 0)) {
203
+ //Clean the existing value, to avoid duplicate
204
+ this.remove({ id: event.option.value });
205
+ this.value.push(event.option.value);
206
+ this._handleInput();
207
+ }
208
+ this.tagInput.nativeElement.value = '';
209
+ this.tagInputCtrl.setValue(null);
210
+ }
211
+ _filter() {
212
+ const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;
213
+ const availableTags = this.allTags.filter((tag) => !this.value.some((item) => item == tag.id));
214
+ return filterValue ? availableTags.filter((tag) => tag.title.toLowerCase().includes(filterValue)) : availableTags;
215
+ }
216
+ writeValue(tagIds) {
217
+ this.value = tagIds || [];
218
+ }
219
+ registerOnChange(fn) {
220
+ this.onChange = fn;
221
+ }
222
+ registerOnTouched(fn) {
223
+ this.onTouched = fn;
224
+ }
225
+ setDisabledState(isDisabled) {
226
+ this.disabled = isDisabled;
227
+ }
228
+ _handleInput() {
229
+ this.onChange(this.value);
230
+ }
231
+ ngOnDestroy() {
232
+ this.stateChanges.complete();
233
+ this._focusMonitor.stopMonitoring(this._elementRef);
234
+ }
235
+ };
236
+ TechlifyTaggerTagFormFieldComponent.nextId = 0;
237
+ TechlifyTaggerTagFormFieldComponent.decorators = [
238
+ { type: Component, args: [{
239
+ selector: 'app-techlify-tagger-tag-form-field',
240
+ template: "<mat-chip-list #chipList aria-label=\"Tag Selection\">\r\n <mat-chip *ngFor=\"let tag of tags\" [selectable]=\"config.selectable\" [removable]=\"config.removable\"\r\n (removed)=\"remove(tag)\">\r\n {{tag.title}}\r\n <button matChipRemove *ngIf=\"config.removable\" class=\"border-0\">\r\n <mat-icon class=\"mat-relative-icon\">cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n <input placeholder=\"{{config.isCreateable? config.placeholder:''}}\" #tagInput [formControl]=\"tagInputCtrl\"\r\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeysCodes\" (matChipInputTokenEnd)=\"add($event)\"\r\n #trigger=\"matAutocompleteTrigger\" (click)=\"trigger.openPanel()\">\r\n</mat-chip-list>\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n <mat-option *ngFor=\"let tag of filteredTags\" [value]=\"tag.id\">\r\n {{tag.title}}\r\n </mat-option>\r\n</mat-autocomplete>",
241
+ providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent_1 }],
242
+ styles: [".mat-relative-icon{font-size:20px;position:relative;right:7px;top:-3px}"]
243
+ },] }
244
+ ];
245
+ TechlifyTaggerTagFormFieldComponent.ctorParameters = () => [
246
+ { type: FocusMonitor },
247
+ { type: ElementRef },
248
+ { type: HttpService },
249
+ { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] },
250
+ { type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
251
+ ];
252
+ TechlifyTaggerTagFormFieldComponent.propDecorators = {
253
+ tagInput: [{ type: ViewChild, args: ['tagInput',] }],
254
+ config: [{ type: Input }],
255
+ modelType: [{ type: Input }],
256
+ modelId: [{ type: Input }],
257
+ allTags: [{ type: Input }],
258
+ categories: [{ type: Input }],
259
+ defaultCreateCategory: [{ type: Input }],
260
+ required: [{ type: Input }],
261
+ disabled: [{ type: Input }],
262
+ value: [{ type: Input }],
263
+ placeholder: [{ type: Input }]
264
+ };
265
+ TechlifyTaggerTagFormFieldComponent = TechlifyTaggerTagFormFieldComponent_1 = __decorate([
266
+ UntilDestroy()
267
+ ], TechlifyTaggerTagFormFieldComponent);
268
+ export { TechlifyTaggerTagFormFieldComponent };
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGVjaGxpZnktdGFnZ2VyLXRhZy1mb3JtLWZpZWxkL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBd0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7SUFTOUUsbUNBQW1DLGlEQUFuQyxtQ0FBbUM7SUFxSzlDLFlBQ1UsYUFBMkIsRUFDM0IsV0FBb0MsRUFDcEMsV0FBd0IsRUFDVyxVQUF3QixFQUN4QyxTQUFvQjtRQUp2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztR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QztJQUM1QixDQUFDO0lBS0QsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FFRixDQUFBO0FBN1JRLDBDQUFNLEdBQUcsQ0FBQyxDQUFDOztZQVJuQixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9DQUFvQztnQkFDOUMsb2lDQUE4RDtnQkFFOUQsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHFDQUFtQyxFQUFFLENBQUM7O2FBQ2hHOzs7WUFuQlEsWUFBWTtZQUVELFVBQVU7WUFRckIsV0FBVztZQUpYLFlBQVksdUJBdUxoQixRQUFRLFlBQUksTUFBTSxTQUFDLGNBQWM7WUExTE0sU0FBUyx1QkEyTGhELFFBQVEsWUFBSSxJQUFJOzs7dUJBN0psQixTQUFTLFNBQUMsVUFBVTtxQkFHcEIsS0FBSzt3QkFFTCxLQUFLO3NCQUVMLEtBQUs7c0JBSUwsS0FBSzt5QkFTTCxLQUFLO29DQUVMLEtBQUs7dUJBZUwsS0FBSzt1QkFVTCxLQUFLO29CQWFMLEtBQUs7MEJBYUwsS0FBSzs7QUF0RkssbUNBQW1DO0lBUC9DLFlBQVksRUFBRTtHQU9GLG1DQUFtQyxDQStSL0M7U0EvUlksbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIEluamVjdCwgT3B0aW9uYWwsIFNlbGYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZENvbnRyb2wsIE1BVF9GT1JNX0ZJRUxEIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsIH0gZnJvbSAnLi90ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tY29uZmlnLm1vZGVsJztcclxuXHJcbkBVbnRpbERlc3Ryb3koKVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZWNobGlmeS10YWdnZXItdGFnLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RlY2hsaWZ5LXRhZ2dlci10YWctZm9ybS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUZpZWxkQ29tcG9uZW50IH1dLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVjaGxpZnlUYWdnZXJUYWdGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcbiAgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBmb2N1c2VkID0gZmFsc2U7XHJcbiAgY29udHJvbFR5cGUgPSAndGVjaGxpZnktdGFnZ2VyLWZvcm0tZmllbGQnO1xyXG4gIGlkID0gYHRlY2hsaWZ5LXRhZ2dlci1mb3JtLWZpZWxkLSR7VGVjaGxpZnlUYWdnZXJUYWdGb3JtRmllbGRDb21wb25lbnQubmV4dElkKyt9YDtcclxuXHJcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICB0YWdJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBmaWx0ZXJTdHJpbmc6IGFueTtcclxuICBAVmlld0NoaWxkKCd0YWdJbnB1dCcpIHRhZ0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICAvKipQYXNzIHRoZSBjb25maWd1cmF0aW9uIGZvciBUZWNobGlmeSBUYWdnZXIgKi9cclxuICBASW5wdXQoKSBjb25maWc6IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsID0gbmV3IFRlY2hsaWZ5VGFnZ2VyVGFnRm9ybUNvbmZpZ01vZGVsKCk7XHJcbiAgLyoqUGFzcyB0aGUgTW9kZWwgVHlwZSBmb3IgVGVjaGxpZnkgVGFnZ2VyLCBSZXF1aXJlZCAqL1xyXG4gIEBJbnB1dCgpIG1vZGVsVHlwZSE6IHN0cmluZztcclxuICAvKipQYXNzIHRoZSBNb2RlbCBJRCBmb3IgVGVjaGxpZnkgVGFnZ2VyICovXHJcbiAgQElucHV0KCkgbW9kZWxJZDogc3RyaW5nO1xyXG5cclxuICAvKipQYXNzIHRoZSBkZWZhdWx0IGxpc3Qgb2YgdGFncyAqL1xyXG4gIHByaXZhdGUgX2FsbFRhZ3M6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBnZXQgYWxsVGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLl9hbGxUYWdzO1xyXG4gIH1cclxuICBzZXQgYWxsVGFncyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYWxsVGFncyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqUGFzcyB0aGUgQ2F0ZWdvcmllcyB0byBmaWx0ZXIgZm9yIGEgbW9kZWwgKi9cclxuICBASW5wdXQoKSBjYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIC8qKlBhc3MgZGVmYXVsdCBjYXRlZ29yeSB0byBiZSB1c2VkIGZvciBhc3NpZ25pbmcgdGhlIHRhZ3MsIHdoZW4gd2UgZmlsdGVyIGJ5IG1vcmUgdGhhbiBvbmUgY2F0ZWdvcnkgKi9cclxuICBASW5wdXQoKSBkZWZhdWx0Q3JlYXRlQ2F0ZWdvcnk6IHN0cmluZztcclxuXHJcbiAgZ2V0IHRhZ3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxUYWdzLmZpbHRlcih4ID0+IHRoaXMudmFsdWUuc29tZSh5ID0+IHkgPT0geC5pZCkpO1xyXG4gIH1cclxuXHJcbiAgLy9EZWZhdWx0IEdldHRlciBhbmQgU2V0dGVycyBmb3IgYSBGb3JtIEZpZWxkIEltcGxlbWVudGF0aW9uXHJcbiAgZ2V0IGVtcHR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID09IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHkgfHwgdGhpcy50YWdJbnB1dEN0cmwudmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy50YWdJbnB1dEN0cmwuZGlzYWJsZSgpIDogdGhpcy50YWdJbnB1dEN0cmwuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG5cclxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG4gIHNldCB2YWx1ZSh0YWdJZHM6IGFueVtdKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHRhZ0lkcyB8fCBbXTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGFnSW5wdXRDdHJsLmRpcnR5ICYmIHRoaXMucmVxdWlyZWQgJiYgKHRoaXMudmFsdWUubGVuZ3RoID09IDApO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblxyXG4gICAgLy9BUEkgdG8gbG9hZCBhbGwgdGFncyBmb3IgdGhlIG1vZGVsIHR5cGVcclxuICAgIGlmICh0aGlzLmFsbFRhZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAgIC5jYWNoZSghdGhpcy5jb25maWcuaXNDYWNoZVRhZ3MpXHJcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLmNhdGVnb3JpZXMuam9pbignLCcpLFxyXG4gICAgICAgICAgICBwZXJQYWdlOiAnMTAwMCdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hbGxUYWdzID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9BUEkgdG8gbG9hZCBvbmx5IHRoZSBzZWxlY3RlZCB0YWdzIGZvciB0aGUgbW9kZWxcclxuICAgIGlmICh0aGlzLm1vZGVsSWQgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAvL01vZGVsIElkIGlzIHBhc3NlZCBhbmQgbm8gdGFncyBhcmUgcHJlc2VudCwgc28gd2UgcXVlcnkgZGIgZm9yIHRoZSBhdmlsYWJsZSB0YWdzIGZvciB0aGUgbW9kZWwgSUQuXHJcbiAgICAgIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgICAuY2FjaGUoIXRoaXMuY29uZmlnLmlzQ2FjaGVUYWdzKVxyXG4gICAgICAgIC5nZXQodGhpcy5jb25maWcuYXBpVXJsLCB7XHJcbiAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogdGhpcy5jYXRlZ29yaWVzLmpvaW4oJywnKSxcclxuICAgICAgICAgICAgbW9kZWxfdHlwZTogdGhpcy5tb2RlbFR5cGUsXHJcbiAgICAgICAgICAgIG1vZGVsX2lkOiB0aGlzLm1vZGVsSWQsXHJcbiAgICAgICAgICAgIHBlclBhZ2U6ICcxMDAwJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gKHJlc3VsdD8uZGF0YSB8fCBbXSkubWFwKCh4OiBhbnkpID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbElkICYmIHRoaXMuYWxsVGFncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAvL01vZGVsIElkIGlzIHBhc3NlZCBhbmQgbm8gdGFncyBhcmUgcGFzc2VkLCBzbyB3ZSBxdWVyeSBkYiBmb3IgdGhlIGF2aWxhYmxlIHRhZ3MgZm9yIHRoZSBtb2RlbCBJRC5cclxuICAgICAgdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAgIC5jYWNoZSghdGhpcy5jb25maWcuaXNDYWNoZVRhZ3MpXHJcbiAgICAgICAgLmdldCh0aGlzLmNvbmZpZy5hcGlVcmwsIHtcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB0aGlzLmNhdGVnb3JpZXMuam9pbignLCcpLFxyXG4gICAgICAgICAgICBtb2RlbF90eXBlOiB0aGlzLm1vZGVsVHlwZSxcclxuICAgICAgICAgICAgbW9kZWxfaWQ6IHRoaXMubW9kZWxJZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hbGxUYWdzID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRUYWdzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHVibGljIF9mb3JtRmllbGQ6IE1hdEZvcm1GaWVsZCxcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sKSB7XHJcblxyXG4gICAgdGhpcy50YWdJbnB1dEN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5zdWJzY3JpYmUoZmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gZmlsdGVyVmFsdWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vU2V0IEZvY3VzIE1vbml0b3JcclxuICAgIF9mb2N1c01vbml0b3IubW9uaXRvcihfZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmZvY3VzZWQgJiYgIW9yaWdpbikge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgLy8gSnVzdCBhIGVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBNYXQgRm9ybSBGaWVsZCBJbnRlcmZhY2VcclxuICB9XHJcblxyXG4gIG9uQ29udGFpbmVyQ2xpY2soKSB7XHJcbiAgICAvLyBKdXN0IGEgZW1wdHkgaW1wbGVtZW50YXRpb24gZm9yIE1hdCBGb3JtIEZpZWxkIEludGVyZmFjZVxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIGFkZChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XHJcbiAgICAvLyBBZGQgb3VyIHRhZ1xyXG4gICAgLy8gVmFsaWRhdGUgZm9yIHNpbmdsZSBtb2RlXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzU2luZ2xlIHx8ICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgaWYgKHZhbHVlICYmIHRoaXMuY29uZmlnLmlzQ3JlYXRlYWJsZSkge1xyXG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmFsbFRhZ3M7XHJcbiAgICAgICAgbGV0IHRhZyA9IHRhZ3MuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkgPT0gdmFsdWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgaWYgKCF0YWcpIHtcclxuICAgICAgICAgIC8vTm8gdGFnIHByZXNlbnQgaW4gdGhlIGxpc3RcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgdGhpcy5odHRwU2VydmljZS5wb3N0KHRoaXMuY29uZmlnLmNyZWF0ZUFwaVVybCwge1xyXG4gICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsdWUsXHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfdGl0bGU6ICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkgPyAodGhpcy5kZWZhdWx0Q3JlYXRlQ2F0ZWdvcnkgPyB0aGlzLmRlZmF1bHRDcmVhdGVDYXRlZ29yeSA6IHRoaXMuY2F0ZWdvcmllc1swXSkgOiAnJ1xyXG4gICAgICAgICAgICB9KS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgdGFnID0gcmVzdWx0Lml0ZW07XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFsbFRhZ3MucHVzaCh0YWcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvL09wdGlvbmFsbHkgY2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcclxuICAgICAgICAgIHRoaXMucmVtb3ZlKHRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0YWcuaWQpO1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZUlucHV0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhciB0aGUgaW5wdXQgdmFsdWVcclxuICAgIGV2ZW50LmlucHV0LnZhbHVlID0gJyc7XHJcblxyXG4gICAgdGhpcy50YWdJbnB1dEN0cmwuc2V0VmFsdWUobnVsbCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUodGFnOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcih4ID0+IHggIT09IHRhZy5pZCk7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIFZhbGlkYXRlIGZvciBzaW5nbGUgbW9kZVxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5pc1NpbmdsZSB8fCAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgIC8vQ2xlYW4gdGhlIGV4aXN0aW5nIHZhbHVlLCB0byBhdm9pZCBkdXBsaWNhdGVcclxuICAgICAgdGhpcy5yZW1vdmUoeyBpZDogZXZlbnQub3B0aW9uLnZhbHVlIH0pO1xyXG4gICAgICB0aGlzLnZhbHVlLnB1c2goZXZlbnQub3B0aW9uLnZhbHVlKTtcclxuICAgICAgdGhpcy5faGFuZGxlSW5wdXQoKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy50YWdJbnB1dEN0cmwuc2V0VmFsdWUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXIoKTogYW55W10ge1xyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmZpbHRlclN0cmluZyA/IHRoaXMuZmlsdGVyU3RyaW5nLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6IG51bGw7XHJcbiAgICBjb25zdCBhdmFpbGFibGVUYWdzID0gdGhpcy5hbGxUYWdzLmZpbHRlcigodGFnOiBhbnkpID0+ICF0aGlzLnZhbHVlLnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbSA9PSB0YWcuaWQpKTtcclxuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA/IGF2YWlsYWJsZVRhZ3MuZmlsdGVyKCh0YWc6IGFueSkgPT4gdGFnLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSA6IGF2YWlsYWJsZVRhZ3M7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHRhZ0lkczogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB0YWdJZHMgfHwgW107XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZUlucHV0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogQm9vbGVhbklucHV0O1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZik7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=