@bizdoc/core 2.3.18 → 2.3.21

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 (237) hide show
  1. package/assets/themes/brown.min.css +4 -4
  2. package/assets/themes/dark.min.css +4 -4
  3. package/assets/themes/deep-purple-light-blue.min.css +4 -4
  4. package/assets/themes/deep-purple-teal.min.css +4 -4
  5. package/assets/themes/default.min.css +4 -4
  6. package/assets/themes/green.min.css +4 -4
  7. package/assets/themes/indigo.min.css +4 -4
  8. package/esm2022/lib/admin/admin-menu.component.mjs +9 -10
  9. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +11 -11
  10. package/esm2022/lib/admin/architecture/designer-element.component.mjs +4 -4
  11. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +15 -16
  12. package/esm2022/lib/admin/architecture/designer.component.mjs +16 -15
  13. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +13 -14
  14. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +11 -12
  15. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +4 -5
  16. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +10 -11
  17. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +11 -12
  18. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +13 -14
  19. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +9 -10
  20. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +11 -12
  21. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +23 -24
  22. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +11 -12
  23. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +10 -11
  24. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +10 -11
  25. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +10 -11
  26. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +16 -17
  27. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +17 -18
  28. package/esm2022/lib/admin/architecture/elements/form.component.mjs +22 -23
  29. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +16 -17
  30. package/esm2022/lib/admin/architecture/elements/job.component.mjs +12 -13
  31. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +9 -10
  32. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +12 -13
  33. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +10 -11
  34. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +10 -11
  35. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +10 -11
  36. package/esm2022/lib/admin/architecture/elements/report.component.mjs +10 -11
  37. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +8 -9
  38. package/esm2022/lib/admin/architecture/elements/role.component.mjs +13 -14
  39. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +10 -11
  40. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +13 -13
  41. package/esm2022/lib/admin/architecture/elements/type.component.mjs +18 -19
  42. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +11 -12
  43. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +10 -11
  44. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +7 -8
  45. package/esm2022/lib/admin/core/color-picker.input.mjs +5 -6
  46. package/esm2022/lib/admin/core/localized-string.component.mjs +10 -11
  47. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +11 -11
  48. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +18 -18
  49. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +12 -12
  50. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +13 -12
  51. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +24 -60
  52. package/esm2022/lib/admin/form/designer/declarations.mjs +1 -1
  53. package/esm2022/lib/admin/form/designer/design-control.component.mjs +41 -0
  54. package/esm2022/lib/admin/form/designer/properties.component.mjs +11 -12
  55. package/esm2022/lib/admin/form/designer/section.component.mjs +11 -12
  56. package/esm2022/lib/admin/form/workflow/node.component.mjs +9 -10
  57. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +15 -16
  58. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
  59. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +13 -13
  60. package/esm2022/lib/admin/patterns/patterns.component.mjs +19 -19
  61. package/esm2022/lib/admin/permissions/permissions.component.mjs +14 -15
  62. package/esm2022/lib/admin/positions/positions-popup.component.mjs +11 -11
  63. package/esm2022/lib/admin/positions/positions.component.mjs +23 -24
  64. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +13 -13
  65. package/esm2022/lib/admin/profiler/profiler.component.mjs +15 -15
  66. package/esm2022/lib/browse/browse-items.component.mjs +4 -4
  67. package/esm2022/lib/browse/browse.mobile.component.mjs +15 -16
  68. package/esm2022/lib/browse/browse.pane.component.mjs +14 -15
  69. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +14 -15
  70. package/esm2022/lib/browse/filter/filter.component.mjs +13 -13
  71. package/esm2022/lib/browse/folders-menu.component.mjs +10 -11
  72. package/esm2022/lib/chat/chat.mobile.component.mjs +5 -6
  73. package/esm2022/lib/chat/contacts.component.mjs +16 -16
  74. package/esm2022/lib/chat/conversation.component.mjs +13 -14
  75. package/esm2022/lib/compose/action/action-picker.component.mjs +9 -10
  76. package/esm2022/lib/compose/action/action.dialog.mjs +8 -9
  77. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +6 -7
  78. package/esm2022/lib/compose/action/assign-action.component.mjs +12 -12
  79. package/esm2022/lib/compose/action/moveto-action.component.mjs +11 -11
  80. package/esm2022/lib/compose/action/return-action.component.mjs +9 -9
  81. package/esm2022/lib/compose/attachments/attachments.component.mjs +11 -12
  82. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +8 -9
  83. package/esm2022/lib/compose/box/box.component.mjs +7 -8
  84. package/esm2022/lib/compose/comments/comment.component.mjs +14 -15
  85. package/esm2022/lib/compose/comments/comments.component.mjs +8 -9
  86. package/esm2022/lib/compose/comments/edits.component.mjs +5 -5
  87. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +5 -6
  88. package/esm2022/lib/compose/comments/votes.component.mjs +8 -8
  89. package/esm2022/lib/compose/compose.mobile.component.mjs +16 -17
  90. package/esm2022/lib/compose/compose.pane.component.mjs +30 -24
  91. package/esm2022/lib/compose/copy/copy.dialog.mjs +11 -11
  92. package/esm2022/lib/compose/events/events.component.mjs +7 -8
  93. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +7 -8
  94. package/esm2022/lib/compose/form.component.mjs +5 -5
  95. package/esm2022/lib/compose/new-menu.component.mjs +8 -9
  96. package/esm2022/lib/compose/tag/tags.component.mjs +10 -10
  97. package/esm2022/lib/compose/trace/people.component.mjs +4 -5
  98. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +10 -11
  99. package/esm2022/lib/core/animations.mjs +7 -1
  100. package/esm2022/lib/core/checkbox.mjs +20 -17
  101. package/esm2022/lib/core/fields/address.field.mjs +35 -26
  102. package/esm2022/lib/core/fields/autocomplete.field.mjs +68 -52
  103. package/esm2022/lib/core/fields/checkbox.field.mjs +9 -10
  104. package/esm2022/lib/core/fields/checklist.designer.mjs +66 -47
  105. package/esm2022/lib/core/fields/checklist.field.mjs +8 -9
  106. package/esm2022/lib/core/fields/date-range.field.mjs +6 -6
  107. package/esm2022/lib/core/fields/date.field.mjs +10 -11
  108. package/esm2022/lib/core/fields/expression.field.mjs +31 -23
  109. package/esm2022/lib/core/fields/file.field.mjs +8 -9
  110. package/esm2022/lib/core/fields/html.field.mjs +9 -10
  111. package/esm2022/lib/core/fields/input.field.mjs +8 -9
  112. package/esm2022/lib/core/fields/numeric.field.mjs +7 -7
  113. package/esm2022/lib/core/fields/options.component.mjs +11 -12
  114. package/esm2022/lib/core/fields/radio-button.designer.mjs +10 -11
  115. package/esm2022/lib/core/fields/radio-button.field.mjs +8 -9
  116. package/esm2022/lib/core/fields/select.designer.mjs +71 -52
  117. package/esm2022/lib/core/fields/select.field.mjs +9 -10
  118. package/esm2022/lib/core/fields/signature.field.mjs +10 -11
  119. package/esm2022/lib/core/fields/switch.field.mjs +8 -9
  120. package/esm2022/lib/core/fields/tags.field.mjs +9 -10
  121. package/esm2022/lib/core/fields/textarea.field.mjs +9 -10
  122. package/esm2022/lib/core/fields/time.field.mjs +9 -10
  123. package/esm2022/lib/core/fields/timespan.field.mjs +33 -26
  124. package/esm2022/lib/core/fields/yesno.designer.mjs +70 -55
  125. package/esm2022/lib/core/fields/yesno.field.mjs +8 -9
  126. package/esm2022/lib/core/guide/guide.component.mjs +7 -8
  127. package/esm2022/lib/core/guide/help-tip.component.mjs +21 -18
  128. package/esm2022/lib/core/identity/identity.component.mjs +5 -6
  129. package/esm2022/lib/core/inputs/address.input.mjs +24 -21
  130. package/esm2022/lib/core/inputs/auto-complete.input.mjs +42 -26
  131. package/esm2022/lib/core/inputs/combination-picker-body.mjs +12 -13
  132. package/esm2022/lib/core/inputs/combination-picker.mjs +8 -5
  133. package/esm2022/lib/core/inputs/combination-pool.mjs +7 -8
  134. package/esm2022/lib/core/inputs/file.input.mjs +11 -12
  135. package/esm2022/lib/core/inputs/select.input.mjs +39 -23
  136. package/esm2022/lib/core/inputs/time-picker.mjs +6 -7
  137. package/esm2022/lib/core/mailbox.service.mjs +1 -1
  138. package/esm2022/lib/core/models.mjs +1 -1
  139. package/esm2022/lib/core/none.component.mjs +19 -22
  140. package/esm2022/lib/core/slots/slots.component.mjs +13 -14
  141. package/esm2022/lib/core/tagging/documents.component.mjs +7 -7
  142. package/esm2022/lib/core/tagging/edit-input.component.mjs +12 -13
  143. package/esm2022/lib/core/tagging/users.component.mjs +7 -7
  144. package/esm2022/lib/core/translations.mjs +4 -2
  145. package/esm2022/lib/cube/cube-menu.component.mjs +8 -9
  146. package/esm2022/lib/cube/explore/explore-items.component.mjs +8 -8
  147. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +6 -7
  148. package/esm2022/lib/cube/filter/filter.component.mjs +11 -11
  149. package/esm2022/lib/cube/grid/spreadsheet.component.mjs +1 -2
  150. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +12 -12
  151. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +12 -12
  152. package/esm2022/lib/cube/matrix/popup.component.mjs +10 -10
  153. package/esm2022/lib/cube/matrix/table.component.mjs +3 -4
  154. package/esm2022/lib/cube/parallel/parallel.component.mjs +4 -5
  155. package/esm2022/lib/cube/sum/sum.component.mjs +10 -8
  156. package/esm2022/lib/cube/view.mobile.component.mjs +16 -17
  157. package/esm2022/lib/cube/view.pane.component.mjs +12 -13
  158. package/esm2022/lib/dashboard/dashboard.component.mjs +11 -12
  159. package/esm2022/lib/dashboard/recents/recents.widget.mjs +14 -13
  160. package/esm2022/lib/dashboard/score/activity.widget.mjs +4 -5
  161. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +5 -5
  162. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +11 -12
  163. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -2
  164. package/esm2022/lib/designer.module.mjs +6 -5
  165. package/esm2022/lib/home/about/about.dialog.mjs +7 -8
  166. package/esm2022/lib/home/home.desktop.component.mjs +17 -18
  167. package/esm2022/lib/home/home.mobile.component.mjs +16 -17
  168. package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
  169. package/esm2022/lib/home/options/options.component.mjs +11 -11
  170. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +8 -9
  171. package/esm2022/lib/home/tools.component.mjs +13 -13
  172. package/esm2022/lib/impersonate/impersonate.component.mjs +10 -10
  173. package/esm2022/lib/modules/gantt.module.mjs +4 -2
  174. package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
  175. package/esm2022/lib/notifications/types/commented.notification.mjs +19 -12
  176. package/esm2022/lib/notifications/types/escalated.notification.mjs +6 -6
  177. package/esm2022/lib/notifications/types/liked.notification.mjs +19 -12
  178. package/esm2022/lib/notifications/types/tagged.notification.mjs +9 -9
  179. package/esm2022/lib/notifications/types/text.notification.mjs +6 -3
  180. package/esm2022/lib/options/options.component.mjs +52 -28
  181. package/esm2022/lib/options/options.service.mjs +26 -6
  182. package/esm2022/lib/reports/cube/table-documents.component.mjs +10 -10
  183. package/esm2022/lib/reports/report.mobile.component.mjs +12 -13
  184. package/esm2022/lib/reports/report.pane.component.mjs +10 -11
  185. package/esm2022/lib/reports/reports-menu.component.mjs +7 -8
  186. package/esm2022/lib/reports/substitution/substitution.component.mjs +10 -11
  187. package/esm2022/lib/reports/table/table-view.component.mjs +5 -6
  188. package/esm2022/lib/search/path.component.mjs +17 -18
  189. package/esm2022/lib/shared.module.mjs +4 -2
  190. package/esm2022/lib/system.module.mjs +6 -6
  191. package/esm2022/lib/views/cube/chart.component.mjs +6 -7
  192. package/esm2022/lib/views/cube/cube-base.mjs +11 -6
  193. package/esm2022/lib/views/cube/explore.component.mjs +10 -10
  194. package/esm2022/lib/views/cube/matrix.component.mjs +13 -11
  195. package/esm2022/lib/views/cube/parallel.component.mjs +4 -5
  196. package/esm2022/lib/views/cube/pivot.component.mjs +4 -5
  197. package/esm2022/lib/views/cube/sum.component.mjs +12 -10
  198. package/esm2022/lib/views/cube/view.component.mjs +11 -12
  199. package/esm2022/lib/views/timeline/timeline.component.exp.mjs +199 -200
  200. package/esm2022/lib/views/views.component.mjs +4 -5
  201. package/esm2022/lib/views/views.pane.component.mjs +2 -2
  202. package/esm2022/public-api.mjs +3 -1
  203. package/fesm2022/bizdoc-core.mjs +3552 -3319
  204. package/fesm2022/bizdoc-core.mjs.map +1 -1
  205. package/lib/admin/architecture/elements/analysis-view.component.d.ts +2 -2
  206. package/lib/admin/architecture/elements/cube-view.component.d.ts +2 -2
  207. package/lib/admin/architecture/elements/form.component.d.ts +5 -5
  208. package/lib/admin/architecture/elements/matrix-view.component.d.ts +17 -9
  209. package/lib/admin/architecture/elements/parallel-view.component.d.ts +5 -5
  210. package/lib/admin/architecture/elements/tasks-report.component.d.ts +3 -2
  211. package/lib/admin/form/designer/box-designer.component.d.ts +26 -23
  212. package/lib/admin/form/designer/declarations.d.ts +2 -2
  213. package/lib/admin/form/designer/design-control.component.d.ts +19 -0
  214. package/lib/admin/form/designer/section.component.d.ts +3 -3
  215. package/lib/browse/browse-items.component.d.ts +1 -1
  216. package/lib/compose/attachments/attachments.component.d.ts +2 -2
  217. package/lib/compose/compose.pane.component.d.ts +4 -2
  218. package/lib/core/animations.d.ts +1 -0
  219. package/lib/core/inputs/combination-picker.d.ts +1 -0
  220. package/lib/core/mailbox.service.d.ts +4 -3
  221. package/lib/core/models.d.ts +1 -1
  222. package/lib/core/translations.d.ts +2 -0
  223. package/lib/cube/matrix/table.component.d.ts +2 -2
  224. package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
  225. package/lib/designer.module.d.ts +27 -26
  226. package/lib/notifications/types/escalated.notification.d.ts +1 -1
  227. package/lib/notifications/types/tagged.notification.d.ts +1 -1
  228. package/lib/notifications/types/text.notification.d.ts +1 -1
  229. package/lib/options/options.component.d.ts +6 -4
  230. package/lib/options/options.service.d.ts +7 -2
  231. package/lib/shared.module.d.ts +1 -1
  232. package/lib/system.module.d.ts +25 -25
  233. package/lib/views/cube/cube-base.d.ts +1 -1
  234. package/lib/views/cube/sum.component.d.ts +1 -0
  235. package/lib/views/timeline/timeline.component.exp.d.ts +12 -4
  236. package/package.json +1 -1
  237. package/public-api.d.ts +2 -0
@@ -6,11 +6,10 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../cube/cube.service";
7
7
  import * as i2 from "@angular/forms";
8
8
  import * as i3 from "../session.service";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/material/core";
11
- import * as i6 from "@angular/material/form-field";
12
- import * as i7 from "@angular/material/select";
13
- import * as i8 from "../pipes/translate.pipe";
9
+ import * as i4 from "@angular/material/core";
10
+ import * as i5 from "@angular/material/form-field";
11
+ import * as i6 from "@angular/material/select";
12
+ import * as i7 from "../pipes/translate.pipe";
14
13
  export class CombinationPool {
15
14
  constructor(_service, _fb, _session) {
16
15
  this._service = _service;
@@ -83,11 +82,11 @@ export class CombinationPool {
83
82
  this._destroy.next();
84
83
  }
85
84
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: CombinationPool, deps: [{ token: i1.CubeService }, { token: i2.FormBuilder }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
86
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: CombinationPool, selector: "bizdoc-combination-pool", inputs: { form: ["formGroup", "form"], appearance: "appearance", cube: "cube", model: "model", source: "source" }, outputs: { modelChange: "modelChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <mat-form-field *ngFor=\"let a of _axes\" [appearance]=\"appearance\">\r\n <mat-label>{{a.title}}</mat-label>\r\n <mat-select [formControlName]=\"a.name\">\r\n <mat-option *ngIf=\"form.controls[a.name].value\">{{'Dashes'|translate:('Clear'|translate)}}</mat-option>\r\n <mat-option *ngFor=\"let key of _keys[a.dataType]\" [value]=\"key\">{{_values[a.dataType][key]}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{form.controls[a.name].value}}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n", styles: [":host{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}form{flex-flow:row wrap;box-sizing:border-box;display:flex;padding:0!important}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}[dir=rtl] form>*{padding:0 0 5px}@media (max-width: 599px){form{flex-flow:column}form>*{width:unset}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
85
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.1", type: CombinationPool, selector: "bizdoc-combination-pool", inputs: { form: ["formGroup", "form"], appearance: "appearance", cube: "cube", model: "model", source: "source" }, outputs: { modelChange: "modelChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\n @for (a of _axes; track a) {\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{a.title}}</mat-label>\n <mat-select [formControlName]=\"a.name\">\n @if (form.controls[a.name].value) {\n <mat-option>{{'Dashes'|translate:('Clear'|translate)}}</mat-option>\n }\n @for (key of _keys[a.dataType]; track key) {\n <mat-option [value]=\"key\">{{_values[a.dataType][key]}}</mat-option>\n }\n </mat-select>\n <mat-hint>{{form.controls[a.name].value}}</mat-hint>\n </mat-form-field>\n }\n</form>\n", styles: [":host{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}form{flex-flow:row wrap;box-sizing:border-box;display:flex;padding:0!important}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}[dir=rtl] form>*{padding:0 0 5px}@media (max-width: 599px){form{flex-flow:column}form>*{width:unset}}\n"], dependencies: [{ kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
87
86
  }
88
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: CombinationPool, decorators: [{
89
88
  type: Component,
90
- args: [{ selector: 'bizdoc-combination-pool', template: "<form [formGroup]=\"form\">\r\n <mat-form-field *ngFor=\"let a of _axes\" [appearance]=\"appearance\">\r\n <mat-label>{{a.title}}</mat-label>\r\n <mat-select [formControlName]=\"a.name\">\r\n <mat-option *ngIf=\"form.controls[a.name].value\">{{'Dashes'|translate:('Clear'|translate)}}</mat-option>\r\n <mat-option *ngFor=\"let key of _keys[a.dataType]\" [value]=\"key\">{{_values[a.dataType][key]}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{form.controls[a.name].value}}</mat-hint>\r\n </mat-form-field>\r\n</form>\r\n", styles: [":host{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}form{flex-flow:row wrap;box-sizing:border-box;display:flex;padding:0!important}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}[dir=rtl] form>*{padding:0 0 5px}@media (max-width: 599px){form{flex-flow:column}form>*{width:unset}}\n"] }]
89
+ args: [{ selector: 'bizdoc-combination-pool', template: "<form [formGroup]=\"form\">\n @for (a of _axes; track a) {\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{a.title}}</mat-label>\n <mat-select [formControlName]=\"a.name\">\n @if (form.controls[a.name].value) {\n <mat-option>{{'Dashes'|translate:('Clear'|translate)}}</mat-option>\n }\n @for (key of _keys[a.dataType]; track key) {\n <mat-option [value]=\"key\">{{_values[a.dataType][key]}}</mat-option>\n }\n </mat-select>\n <mat-hint>{{form.controls[a.name].value}}</mat-hint>\n </mat-form-field>\n }\n</form>\n", styles: [":host{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto}form{flex-flow:row wrap;box-sizing:border-box;display:flex;padding:0!important}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}[dir=rtl] form>*{padding:0 0 5px}@media (max-width: 599px){form{flex-flow:column}form>*{width:unset}}\n"] }]
91
90
  }], ctorParameters: () => [{ type: i1.CubeService }, { type: i2.FormBuilder }, { type: i3.SessionService }], propDecorators: { form: [{
92
91
  type: Input,
93
92
  args: ['formGroup']
@@ -102,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
102
101
  }], modelChange: [{
103
102
  type: Output
104
103
  }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluYXRpb24tcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvY29tYmluYXRpb24tcG9vbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvY29tYmluYXRpb24tcG9vbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFlLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLGVBQWU7SUFtQjFCLFlBQW9CLFFBQXFCLEVBQy9CLEdBQWdCLEVBQ2hCLFFBQXdCO1FBRmQsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUMvQixRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBYmxDLFVBQUssR0FBMEMsRUFBRSxDQUFDO1FBRWxELFdBQU0sR0FBbUMsY0FBYyxDQUFDO1FBRS9DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXlDLENBQUM7UUFDakYsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUV2QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ04sVUFBSyxHQUFpQyxFQUFFLENBQUM7UUFDekMsWUFBTyxHQUErQyxFQUFFLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFHVixDQUFDO0lBQ3ZDLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FB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QUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OEdBN0VVLGVBQWU7a0dBQWYsZUFBZSwyTkNiNUIscWlCQVVBOzsyRkRHYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLHlCQUF5Qjt1SUFNbkMsSUFBSTtzQkFESCxLQUFLO3VCQUFDLFdBQVc7Z0JBR2xCLFVBQVU7c0JBRFQsS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHRyxXQUFXO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jdWJlL2N1YmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDdWJlQXhpcywgQ3ViZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jb21iaW5hdGlvbi1wb29sJyxcclxuICB0ZW1wbGF0ZVVybDogJ2NvbWJpbmF0aW9uLXBvb2wuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2NvbWJpbmF0aW9uLXBvb2wuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21iaW5hdGlvblBvb2wgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCdmb3JtR3JvdXAnKVxyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KClcclxuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcclxuICBASW5wdXQoKVxyXG4gIGN1YmU6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIG1vZGVsOiB7IFtheGlzOiBzdHJpbmddOiAoc3RyaW5nIHwgbnVtYmVyKSB9ID0ge307XHJcbiAgQElucHV0KClcclxuICBzb3VyY2U6ICdjb25zdHJhaW50cycgfCAnY29tYmluYXRpb25zJyA9ICdjb21iaW5hdGlvbnMnO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtheGlzOiBzdHJpbmddOiAoc3RyaW5nIHwgbnVtYmVyKSB9PigpO1xyXG4gIF9heGVzOiBDdWJlQXhpc1tdID0gW107XHJcbiAgX2N1YmU6IEN1YmU7XHJcbiAgd29ya2luZyA9IHRydWU7XHJcbiAgcmVhZG9ubHkgX2tleXM6IHsgW3R5cGU6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICByZWFkb25seSBfdmFsdWVzOiB7IFt0eXBlOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1YmUgPSB0aGlzLmN1YmUgPyB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5jdWJlKSA6IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgIHRoaXMuX2F4ZXMgPSB0aGlzLl9jdWJlLmF4ZXMuZmlsdGVyKGEgPT4gYS5jb21iaW5hdGlvbiAmJiBhLnNlbGVjdGlvbk1vZGUgIT09ICdOb25lJyk7XHJcbiAgICB0aGlzLl9heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIGxldCBjb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW2EubmFtZV07XHJcbiAgICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGEubmFtZSwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fa2V5c1thLmRhdGFUeXBlXSA9IFtdO1xyXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsW2EubmFtZV0gPSB2O1xyXG4gICAgICAgIHRoaXMuX3BvcHVsYXRlKCkuXHJcbiAgICAgICAgICBwaXBlKHRhcCgoKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLm5leHQodGhpcy5tb2RlbCkpKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BvcHVsYXRlKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BvcHVsYXRlKCkge1xyXG4gICAgdGhpcy53b3JraW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xyXG4gICAgdGhpcy5fYXhlcy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSB0aGlzLm1vZGVsW2EubmFtZV07XHJcbiAgICAgIGlmICh2YWwpIHZhbHVlc1thLm5hbWVdID0gdmFsO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5jb25zdHJhaW50cyh0aGlzLl9jdWJlLm5hbWUsIHZhbHVlcywgeyBzb3VyY2U6IHRoaXMuc291cmNlIH0pLnBpcGUodGFwKHIgPT4ge1xyXG4gICAgICBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlc1t0XSA9IHJbdF07XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuX2tleXNbdF0gPSBPYmplY3Qua2V5cyhyW3RdKTtcclxuICAgICAgICBjb25zdCBheGlzID0gdGhpcy5fYXhlcy5maW5kKGEgPT4gYS5kYXRhVHlwZSA9PT0gdCksIGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbYXhpcy5uYW1lXTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsW2F4aXMubmFtZV0gPSBrZXlzWzBdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ZhbHVlcywgcik7XHJcbiAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuICBjbGVhcihheGlzOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbYXhpc107XHJcbiAgICBjb250cm9sLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgfVxyXG4gIGNsZWFyQWxsKCkge1xyXG4gICAgY29uc3QgdmFsdWVzID0ge307XHJcbiAgICB0aGlzLl9heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIHZhbHVlc1thLm5hbWVdID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodmFsdWVzKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0Zvcj1cImxldCBhIG9mIF9heGVzXCIgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxyXG4gICAgPG1hdC1sYWJlbD57e2EudGl0bGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sTmFtZV09XCJhLm5hbWVcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmb3JtLmNvbnRyb2xzW2EubmFtZV0udmFsdWVcIj57eydEYXNoZXMnfHRyYW5zbGF0ZTooJ0NsZWFyJ3x0cmFuc2xhdGUpfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBrZXkgb2YgX2tleXNbYS5kYXRhVHlwZV1cIiBbdmFsdWVdPVwia2V5XCI+e3tfdmFsdWVzW2EuZGF0YVR5cGVdW2tleV19fTwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDxtYXQtaGludD57e2Zvcm0uY29udHJvbHNbYS5uYW1lXS52YWx1ZX19PC9tYXQtaGludD5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Zvcm0+XHJcbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluYXRpb24tcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvY29tYmluYXRpb24tcG9vbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvY29tYmluYXRpb24tcG9vbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFlLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQU8vQixNQUFNLE9BQU8sZUFBZTtJQW1CMUIsWUFBb0IsUUFBcUIsRUFDL0IsR0FBZ0IsRUFDaEIsUUFBd0I7UUFGZCxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFibEMsVUFBSyxHQUEwQyxFQUFFLENBQUM7UUFFbEQsV0FBTSxHQUFtQyxjQUFjLENBQUM7UUFFL0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBeUMsQ0FBQztRQUNqRixVQUFLLEdBQWUsRUFBRSxDQUFDO1FBRXZCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDTixVQUFLLEdBQWlDLEVBQUUsQ0FBQztRQUN6QyxZQUFPLEdBQStDLEVBQUUsQ0FBQztRQUNqRCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUdWLENBQUM7SUFDdkMsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFD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QU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs4R0E3RVUsZUFBZTtrR0FBZixlQUFlLDJOQ2I1QiwybEJBZ0JBOzsyRkRIYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLHlCQUF5Qjt1SUFNbkMsSUFBSTtzQkFESCxLQUFLO3VCQUFDLFdBQVc7Z0JBR2xCLFVBQVU7c0JBRFQsS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHRyxXQUFXO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jdWJlL2N1YmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDdWJlQXhpcywgQ3ViZSB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jb21iaW5hdGlvbi1wb29sJyxcclxuICB0ZW1wbGF0ZVVybDogJ2NvbWJpbmF0aW9uLXBvb2wuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2NvbWJpbmF0aW9uLXBvb2wuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21iaW5hdGlvblBvb2wgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCdmb3JtR3JvdXAnKVxyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KClcclxuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcclxuICBASW5wdXQoKVxyXG4gIGN1YmU6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIG1vZGVsOiB7IFtheGlzOiBzdHJpbmddOiAoc3RyaW5nIHwgbnVtYmVyKSB9ID0ge307XHJcbiAgQElucHV0KClcclxuICBzb3VyY2U6ICdjb25zdHJhaW50cycgfCAnY29tYmluYXRpb25zJyA9ICdjb21iaW5hdGlvbnMnO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtheGlzOiBzdHJpbmddOiAoc3RyaW5nIHwgbnVtYmVyKSB9PigpO1xyXG4gIF9heGVzOiBDdWJlQXhpc1tdID0gW107XHJcbiAgX2N1YmU6IEN1YmU7XHJcbiAgd29ya2luZyA9IHRydWU7XHJcbiAgcmVhZG9ubHkgX2tleXM6IHsgW3R5cGU6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuICByZWFkb25seSBfdmFsdWVzOiB7IFt0eXBlOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlKSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1YmUgPSB0aGlzLmN1YmUgPyB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5jdWJlKSA6IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgIHRoaXMuX2F4ZXMgPSB0aGlzLl9jdWJlLmF4ZXMuZmlsdGVyKGEgPT4gYS5jb21iaW5hdGlvbiAmJiBhLnNlbGVjdGlvbk1vZGUgIT09ICdOb25lJyk7XHJcbiAgICB0aGlzLl9heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIGxldCBjb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW2EubmFtZV07XHJcbiAgICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGEubmFtZSwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fa2V5c1thLmRhdGFUeXBlXSA9IFtdO1xyXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsW2EubmFtZV0gPSB2O1xyXG4gICAgICAgIHRoaXMuX3BvcHVsYXRlKCkuXHJcbiAgICAgICAgICBwaXBlKHRhcCgoKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLm5leHQodGhpcy5tb2RlbCkpKS5zdWJzY3JpYmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BvcHVsYXRlKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BvcHVsYXRlKCkge1xyXG4gICAgdGhpcy53b3JraW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xyXG4gICAgdGhpcy5fYXhlcy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSB0aGlzLm1vZGVsW2EubmFtZV07XHJcbiAgICAgIGlmICh2YWwpIHZhbHVlc1thLm5hbWVdID0gdmFsO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5jb25zdHJhaW50cyh0aGlzLl9jdWJlLm5hbWUsIHZhbHVlcywgeyBzb3VyY2U6IHRoaXMuc291cmNlIH0pLnBpcGUodGFwKHIgPT4ge1xyXG4gICAgICBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlc1t0XSA9IHJbdF07XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuX2tleXNbdF0gPSBPYmplY3Qua2V5cyhyW3RdKTtcclxuICAgICAgICBjb25zdCBheGlzID0gdGhpcy5fYXhlcy5maW5kKGEgPT4gYS5kYXRhVHlwZSA9PT0gdCksIGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbYXhpcy5uYW1lXTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsW2F4aXMubmFtZV0gPSBrZXlzWzBdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ZhbHVlcywgcik7XHJcbiAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuICBjbGVhcihheGlzOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbYXhpc107XHJcbiAgICBjb250cm9sLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgfVxyXG4gIGNsZWFyQWxsKCkge1xyXG4gICAgY29uc3QgdmFsdWVzID0ge307XHJcbiAgICB0aGlzLl9heGVzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgIHZhbHVlc1thLm5hbWVdID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodmFsdWVzKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIEBmb3IgKGEgb2YgX2F4ZXM7IHRyYWNrIGEpIHtcbiAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgICAgPG1hdC1sYWJlbD57e2EudGl0bGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sTmFtZV09XCJhLm5hbWVcIj5cbiAgICAgICAgQGlmIChmb3JtLmNvbnRyb2xzW2EubmFtZV0udmFsdWUpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbj57eydEYXNoZXMnfHRyYW5zbGF0ZTooJ0NsZWFyJ3x0cmFuc2xhdGUpfX08L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoa2V5IG9mIF9rZXlzW2EuZGF0YVR5cGVdOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwia2V5XCI+e3tfdmFsdWVzW2EuZGF0YVR5cGVdW2tleV19fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPG1hdC1oaW50Pnt7Zm9ybS5jb250cm9sc1thLm5hbWVdLnZhbHVlfX08L21hdC1oaW50PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIH1cbjwvZm9ybT5cbiJdfQ==
@@ -13,15 +13,14 @@ import * as i4 from "../translate.service";
13
13
  import * as i5 from "../session.service";
14
14
  import * as i6 from "../prompt.service";
15
15
  import * as i7 from "@angular/forms";
16
- import * as i8 from "@angular/common";
17
- import * as i9 from "@angular/material/divider";
18
- import * as i10 from "@angular/material/button";
19
- import * as i11 from "@angular/material/icon";
20
- import * as i12 from "@angular/material/menu";
21
- import * as i13 from "../../compose/attachments/progress-button.directive";
22
- import * as i14 from "../popup/tooltip.directive";
23
- import * as i15 from "../pipes/calendar.pipe";
24
- import * as i16 from "../pipes/translate.pipe";
16
+ import * as i8 from "@angular/material/divider";
17
+ import * as i9 from "@angular/material/button";
18
+ import * as i10 from "@angular/material/icon";
19
+ import * as i11 from "@angular/material/menu";
20
+ import * as i12 from "../../compose/attachments/progress-button.directive";
21
+ import * as i13 from "../popup/tooltip.directive";
22
+ import * as i14 from "../pipes/calendar.pipe";
23
+ import * as i15 from "../pipes/translate.pipe";
25
24
  const EXTENTION_ICONS = { 'xlsx': 'excel', 'docx': 'word', 'pptx': 'powerpoint', 'pdf': 'pdf' };
26
25
  export class FileInput {
27
26
  static { this.nextId = 0; }
@@ -367,11 +366,11 @@ export class FileInput {
367
366
  this.stateChanges.complete();
368
367
  }
369
368
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: FileInput, deps: [{ token: i0.ElementRef }, { token: i1.MailboxService }, { token: i2.DomSanitizer }, { token: i3.AttachmentInfo }, { token: i4.TranslateService }, { token: i5.SessionService }, { token: i6.PromptService }, { token: i7.NgControl, optional: true, self: true }, { token: DOCUMENT_MODEL }], target: i0.ɵɵFactoryTarget.Component }); }
370
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: FileInput, selector: "bizdoc-file-upload", inputs: { multiple: "multiple", accept: "accept", icon: "icon", value: "value", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)" }, properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy" }, classAttribute: "file-dropable" }, viewQueries: [{ propertyName: "_input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<button mat-button *ngIf=\"!items.length; else preview\" (click)=\"open()\">\r\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\r\n <span class=\"mat-h3\">{{placeholder}}</span>\r\n</button>\r\n<input type=\"file\" #input\r\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\r\n<ng-template #preview>\r\n <div *ngFor='let a of items' class=\"attachment-item\"\r\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\r\n [progressIndicator]=\"a.progress\">\r\n <div class=\"file-preview\">\r\n <img *ngIf=\"a.isImage\" [src]=\"a.url\" (click)=\"apreview(a)\" height=\"80\">\r\n <button mat-icon-button *ngIf=\"a.hasPreview && !a.isImage\" [bizdocTooltip]=\"'Preview'|translate\" (click)=\"apreview(a)\" [ngSwitch]=\"a.icon !== undefined\">\r\n <mat-icon *ngSwitchCase=\"true\" [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\r\n <mat-icon *ngSwitchDefault class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"!a.hasPreview && a.icon\" [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\r\n </div>\r\n <div class=\"file-overlay row\">\r\n <span class=\"filename\">{{a.fileName}}</span>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n <mat-menu #menu>\r\n <ng-container *ngIf=\"!a.failed\">\r\n <ng-container *ngIf=\"canEdit(a) && !a.failed\">\r\n <ng-container *ngIf=\"!a.checkedOut\">\r\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"multiple\" (click)=\"open()\">{{\"Add\" | translate}}</button>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"checkIn(a)\" *ngIf=\"a.checkedOut\">{{\"CheckIn\" | translate}}</button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"a.hasPreview\" (click)=\"apreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\r\n <ng-container *ngIf=\"hasVersions(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item *ngFor=\"let v of getVersions(a)\" (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"canEdit(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"cancel(a)\" *ngIf=\"a.failed\">{{\"Cancel\" | translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative;display:inline-flex}.attachment-item img{cursor:zoom-in}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;cursor:pointer;background:#fff6;align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:#fff;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.ProgressDirective, selector: "[progressIndicator]", inputs: ["progressIndicator"] }, { kind: "directive", type: i14.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i15.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }] }); }
369
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.1", type: FileInput, selector: "bizdoc-file-upload", inputs: { multiple: "multiple", accept: "accept", icon: "icon", value: "value", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)" }, properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy" }, classAttribute: "file-dropable" }, viewQueries: [{ propertyName: "_input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "@if (!items.length) {\n <button mat-button (click)=\"open()\">\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\n <span class=\"mat-h3\">{{placeholder}}</span>\n </button>\n} @else {\n @for (a of items; track a) {\n <div class=\"attachment-item\"\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\n [progressIndicator]=\"a.progress\">\n <div class=\"file-preview\">\n @if (a.isImage) {\n <img [src]=\"a.url\" (click)=\"apreview(a)\" height=\"80\">\n }\n @if (a.hasPreview && !a.isImage) {\n <button mat-icon-button [bizdocTooltip]=\"'Preview'|translate\" (click)=\"apreview(a)\">\n @switch (a.icon !== undefined) {\n @case (true) {\n <mat-icon [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\n }\n @default {\n <mat-icon class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon>\n }\n }\n </button>\n }\n @if (!a.hasPreview && a.icon) {\n <mat-icon [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\n }\n </div>\n <div class=\"file-overlay row\">\n <span class=\"filename\">{{a.fileName}}</span>\n <span class=\"divider\"></span>\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <mat-menu #menu>\n @if (!a.failed) {\n @if (canEdit(a) && !a.failed) {\n @if (!a.checkedOut) {\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\n @if (multiple) {\n <button mat-menu-item (click)=\"open()\">{{\"Add\" | translate}}</button>\n }\n }\n @if (a.checkedOut) {\n <button mat-menu-item (click)=\"checkIn(a)\">{{\"CheckIn\" | translate}}</button>\n }\n }\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\n @if (a.hasPreview) {\n <button mat-menu-item (click)=\"apreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\n }\n @if (hasVersions(a)) {\n <mat-divider></mat-divider>\n @for (v of getVersions(a); track v) {\n <button mat-menu-item (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\n }\n }\n @if (canEdit(a)) {\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\n }\n }\n @if (a.failed) {\n <button mat-menu-item (click)=\"cancel(a)\">{{\"Cancel\" | translate}}</button>\n }\n </mat-menu>\n </div>\n }\n}\n<input type=\"file\" #input\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative;display:inline-flex}.attachment-item img{cursor:zoom-in}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;cursor:pointer;background:#fff6;align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:#fff;opacity:.5}\n"], dependencies: [{ kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i12.ProgressDirective, selector: "[progressIndicator]", inputs: ["progressIndicator"] }, { kind: "directive", type: i13.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i14.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
371
370
  }
372
371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: FileInput, decorators: [{
373
372
  type: Component,
374
- args: [{ host: { class: 'file-dropable' }, selector: 'bizdoc-file-upload', template: "<button mat-button *ngIf=\"!items.length; else preview\" (click)=\"open()\">\r\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\r\n <span class=\"mat-h3\">{{placeholder}}</span>\r\n</button>\r\n<input type=\"file\" #input\r\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\r\n<ng-template #preview>\r\n <div *ngFor='let a of items' class=\"attachment-item\"\r\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\r\n [progressIndicator]=\"a.progress\">\r\n <div class=\"file-preview\">\r\n <img *ngIf=\"a.isImage\" [src]=\"a.url\" (click)=\"apreview(a)\" height=\"80\">\r\n <button mat-icon-button *ngIf=\"a.hasPreview && !a.isImage\" [bizdocTooltip]=\"'Preview'|translate\" (click)=\"apreview(a)\" [ngSwitch]=\"a.icon !== undefined\">\r\n <mat-icon *ngSwitchCase=\"true\" [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\r\n <mat-icon *ngSwitchDefault class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon>\r\n </button>\r\n <mat-icon *ngIf=\"!a.hasPreview && a.icon\" [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\r\n </div>\r\n <div class=\"file-overlay row\">\r\n <span class=\"filename\">{{a.fileName}}</span>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n </div>\r\n <mat-menu #menu>\r\n <ng-container *ngIf=\"!a.failed\">\r\n <ng-container *ngIf=\"canEdit(a) && !a.failed\">\r\n <ng-container *ngIf=\"!a.checkedOut\">\r\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"multiple\" (click)=\"open()\">{{\"Add\" | translate}}</button>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"checkIn(a)\" *ngIf=\"a.checkedOut\">{{\"CheckIn\" | translate}}</button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\r\n <button mat-menu-item *ngIf=\"a.hasPreview\" (click)=\"apreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\r\n <ng-container *ngIf=\"hasVersions(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item *ngFor=\"let v of getVersions(a)\" (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"canEdit(a)\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\r\n </ng-container>\r\n </ng-container>\r\n <button mat-menu-item (click)=\"cancel(a)\" *ngIf=\"a.failed\">{{\"Cancel\" | translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative;display:inline-flex}.attachment-item img{cursor:zoom-in}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;cursor:pointer;background:#fff6;align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:#fff;opacity:.5}\n"] }]
373
+ args: [{ host: { class: 'file-dropable' }, selector: 'bizdoc-file-upload', template: "@if (!items.length) {\n <button mat-button (click)=\"open()\">\n <mat-icon class=\"filled\">{{icon}}</mat-icon>\n <span class=\"mat-h3\">{{placeholder}}</span>\n </button>\n} @else {\n @for (a of items; track a) {\n <div class=\"attachment-item\"\n [class.deleted]=\"a.deleted\" [class.failed]=\"a.failed\"\n [progressIndicator]=\"a.progress\">\n <div class=\"file-preview\">\n @if (a.isImage) {\n <img [src]=\"a.url\" (click)=\"apreview(a)\" height=\"80\">\n }\n @if (a.hasPreview && !a.isImage) {\n <button mat-icon-button [bizdocTooltip]=\"'Preview'|translate\" (click)=\"apreview(a)\">\n @switch (a.icon !== undefined) {\n @case (true) {\n <mat-icon [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\n }\n @default {\n <mat-icon class=\"mat-icon-rtl-mirror\">find_in_page</mat-icon>\n }\n }\n </button>\n }\n @if (!a.hasPreview && a.icon) {\n <mat-icon [svgIcon]=\"a.icon\" [inline]=\"false\"></mat-icon>\n }\n </div>\n <div class=\"file-overlay row\">\n <span class=\"filename\">{{a.fileName}}</span>\n <span class=\"divider\"></span>\n <button mat-icon-button class=\"options\" [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'Options' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <mat-menu #menu>\n @if (!a.failed) {\n @if (canEdit(a) && !a.failed) {\n @if (!a.checkedOut) {\n <button mat-menu-item (click)=\"checkOut(a)\">{{\"CheckOut\" | translate}}</button>\n @if (multiple) {\n <button mat-menu-item (click)=\"open()\">{{\"Add\" | translate}}</button>\n }\n }\n @if (a.checkedOut) {\n <button mat-menu-item (click)=\"checkIn(a)\">{{\"CheckIn\" | translate}}</button>\n }\n }\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"download(a)\">{{\"Download\" | translate}}</button>\n @if (a.hasPreview) {\n <button mat-menu-item (click)=\"apreview(a)\"><mat-icon>landscape</mat-icon> {{\"Preview\" | translate}}</button>\n }\n @if (hasVersions(a)) {\n <mat-divider></mat-divider>\n @for (v of getVersions(a); track v) {\n <button mat-menu-item (click)=\"previewOrDownload(v)\">{{v.time | amCalendar}}</button>\n }\n }\n @if (canEdit(a)) {\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"discard(a)\">{{\"Discard\" | translate}}</button>\n }\n }\n @if (a.failed) {\n <button mat-menu-item (click)=\"cancel(a)\">{{\"Cancel\" | translate}}</button>\n }\n </mat-menu>\n </div>\n }\n}\n<input type=\"file\" #input\n [accept]=accept [multiple]=multiple (change)='_change($event)' style=\"display: none\" />\n", styles: [":host{display:flex}.attachment-item{height:80px;position:relative;display:inline-flex}.attachment-item img{cursor:zoom-in}.attachment-item .file-overlay{position:relative;height:inherit}.attachment-item .file-overlay .filename{font-size:x-small;cursor:pointer;background:#fff6;align-self:flex-end}.attachment-item .file-overlay:hover .filename{background:#fff;opacity:.5}\n"] }]
375
374
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MailboxService }, { type: i2.DomSanitizer }, { type: i3.AttachmentInfo }, { type: i4.TranslateService }, { type: i5.SessionService }, { type: i6.PromptService }, { type: i7.NgControl, decorators: [{
376
375
  type: Optional
377
376
  }, {
@@ -417,4 +416,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
417
416
  type: HostBinding,
418
417
  args: ['attr.aria-describedby']
419
418
  }] } });
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFTLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBbUIsY0FBYyxFQUFrQixjQUFjLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWxILE1BQU0sZUFBZSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBUWhHLE1BQU0sT0FDRSxTQUFTO2FBQ0EsV0FBTSxHQUFHLENBQUMsQUFBSixDQUFLO0lBSTFCLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElB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RyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2MsTUFBTTtzQkFBekIsU0FBUzt1QkFBQyxPQUFPO2dCQTJIbEIsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNekMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFlaEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQ3ZCLEtBQUs7c0JBQWpCLEtBQUs7Z0JBT08sV0FBVztzQkFBdkIsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVFnQyxXQUFXO3NCQUFoRCxXQUFXO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi9pbmZvL2F0dGFjaG1lbnQtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEV4dHJhLCBET0NVTUVOVF9NT0RFTCwgTWFpbGJveFNlcnZpY2UsIHJlcG9ydFByb2dyZXNzLCBVcGxvYWRFdmVudCB9IGZyb20gJy4uL21haWxib3guc2VydmljZSc7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnQsIFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgRVhURU5USU9OX0lDT05TID0geyAneGxzeCc6ICdleGNlbCcsICdkb2N4JzogJ3dvcmQnLCAncHB0eCc6ICdwb3dlcnBvaW50JywgJ3BkZic6ICdwZGYnIH07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2ZpbGUuaW5wdXQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2ZpbGUuaW5wdXQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdmaWxlLWRyb3BhYmxlJyB9LFxyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWZpbGUtdXBsb2FkJ1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBGaWxlSW5wdXQgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPG51bWJlciB8IG51bWJlcltdPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBIb3N0QmluZGluZygpIHJlYWRvbmx5IGlkID0gYHR5cGUtZmlsZS11cGxvYWQtJHtGaWxlSW5wdXQubmV4dElkKyt9YDtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XHJcbiAgcHVibGljIGdldCBtdWx0aXBsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG11bHRpcGxlKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGFjY2VwdCA9IG51bGw7XHJcbiAgQElucHV0KCkgaWNvbiA9ICdwdWJsaXNoJztcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIF9pbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBpdGVtcyA9IFtdIGFzIEF0dGFjaG1lbnRFeHRyYVtdO1xyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGFueTtcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9vbkNoYW5nZTogYW55O1xyXG4gIHByaXZhdGUgX29uVG91Y2hlZDogYW55O1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBudW1iZXJbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kcmFnRHJvcCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IG5ldyBTdWJqZWN0PEZpbGVbXT4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Ryb3BhYmxlRWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgX21haWxib3g6IE1haWxib3hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIF9hdHRhY2htZW50SW5mbzogQXR0YWNobWVudEluZm8sXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UX01PREVMKSBwcml2YXRlIF9tb2RlbDogUmVjaXBpZW50TW9kZWw8YW55PixcclxuICApIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuICBoYXNWZXJzaW9ucyhpdGVtOiBBdHRhY2htZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCkgIT09IG51bGw7XHJcbiAgfVxyXG4gIGdldFZlcnNpb25zKGl0ZW06IEF0dGFjaG1lbnQpOiBBdHRhY2htZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbHRlcihhID0+IGEuZmlsZU5hbWUgPT09IGl0ZW0uZmlsZU5hbWUgJiYgYS5pZCAhPT0gaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgbG9jYXRpb24uaHJlZiA9IHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgaXRlbS5pZCk7XHJcbiAgICAoaXRlbSBhcyBBdHRhY2htZW50RXh0cmEpLnZpZXdlZCA9IG5ldyBEYXRlKCk7XHJcbiAgfVxyXG4gIHByZXZpZXdPckRvd25sb2FkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgaWYgKEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhpdGVtLmNvbnRlbnRUeXBlKSlcclxuICAgICAgdGhpcy5hcHJldmlldyhpdGVtKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICB9XHJcbiAgY2FuRWRpdChpdGVtOiBBdHRhY2htZW50RXh0cmEpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fbW9kZWwuY29tcGxldGVkICYmIGl0ZW0udXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkICYmICFpdGVtLmRlbGV0ZWQ7XHJcbiAgfVxyXG4gIGFwcmV2aWV3KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fYXR0YWNobWVudEluZm8ucHJldmlldyh0aGlzLl9tb2RlbCwgaXRlbS5pZCk7XHJcbiAgfVxyXG4gIGNhbmNlbChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnJlbW92ZShpdGVtKTtcclxuICB9XHJcbiAgY2hlY2tJbihpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IGFjY2VwdCA9IGl0ZW0uaXNJbWFnZSA/ICdpbWFnZS8qJyA6XHJcbiAgICAgICcuJyArIEF0dGFjaG1lbnRJbmZvLmZpbGVFeHQoaXRlbS5maWxlTmFtZSkgKyAnLCcgKyBpdGVtLmNvbnRlbnRUeXBlO1xyXG4gICAgdGhpcy5fcHJvbXB0KHsgbXVsdGlwbGU6IGZhbHNlLCBhY2NlcHQgfSkudGhlbihmaWxlcyA9PiB7XHJcbiAgICAgIHRoaXMuX21haWxib3guY2hlY2tJbih0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCwgZmlsZXNbMF0pLlxyXG4gICAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW0uY2hlY2tlZE91dDtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBhKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICh0aGlzLnZhbHVlIGFzIG51bWJlcltdKS5pbmRleE9mKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgIC8vIHJlcGxhY2UgdmFsdWUgd2l0aCBuZXcgaWRcclxuICAgICAgICAgICAgICAodGhpcy52YWx1ZSBhcyBudW1iZXJbXSkuc3BsaWNlKGluZGV4LCAxLCBhLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGEuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbicsIGl0ZW0uZmlsZU5hbWUpKTtcclxuICAgICAgICAgIH0sIGVycm9yOiBlID0+IHRoaXMuX2hhbmRsZUVycm9yKGUpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICApXHJcbiAgfVxyXG4gIGNoZWNrT3V0KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fbWFpbGJveC5jaGVja091dCh0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwudmVyc2lvbiwgaXRlbS5pZCkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkT3V0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgZGlzY2FyZChpdGVtOiBBdHRhY2htZW50RXh0cmEpIHtcclxuICAgIGNvbnN0IHRhc2sgPSAoKSA9PlxyXG4gICAgICB0aGlzLl9tYWlsYm94LnJlbW92ZWF0dGFjaG1lbnQodGhpcy5fbW9kZWwuaWQsIGl0ZW0uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5yZW1vdmUoaXRlbSk7XHJcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLmxlbmd0aCA/IHRoaXMuaXRlbXMubWFwKGkgPT4gaS5pZCkgOiBudWxsIDogbnVsbDtcclxuICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgYWl0ZW0gPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBhaXRlbS5kZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICB9LCBlcnJvcjogZSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSlcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5fbW9kZWwuZHJhZnQpXHJcbiAgICAgIHRhc2soKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fc2IuYXNrKCdEZWxldGVGaWxlQXNrJywgJ0RlbGV0ZUZpbGUnLCB7IGNvbG9yOiAnd2FybicgfSkuc3Vic2NyaWJlKG9rID0+XHJcbiAgICAgICAgb2sgJiYgdGFzaygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwMTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA0MDk6IC8vIHZlcnNpb24gY2hhbmdlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGhpcy5fc2IuZXJyb3IoJ1ZlcnNpb25FcnInLCB0aGlzLl9tb2RlbC5udW1iZXIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlIDQwNjogLy8gdmFsaWRhdGlvbiBleGNlcHRpb25cclxuICAgICAgICB0aGlzLl9zYi5lcnJvclN0cmluZyhyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZHJvcGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5zdWJzY3JpYmUob2sgPT4ge1xyXG4gICAgICBpZiAob2spIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdkcmFnJyk7XHJcbiAgICAgIGVsc2UgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWcnKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCF0aGlzLl9wbGFjZWhvbGRlcikgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEcmFnRmlsZScpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpkcm9wJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVEb2N1bWVudERyb3AoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZHJhZ0Ryb3AubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgJiYgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICAvLyB0byBhcnJheVxyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xyXG4gICAgY29uc3QgZmlsZXMgPSBbXSBhcyBGaWxlW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcclxuICAgICAgZmlsZXMucHVzaChmaWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwbG9hZChmaWxlcyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX2RyYWdEcm9wLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5fZHJhZ0Ryb3AubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgd3JpdGVWYWx1ZSh2YWw6IG51bWJlciB8IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICB0aGlzLml0ZW1zID1cclxuICAgICAgICB2YWwubWFwKGkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSBpKTtcclxuICAgICAgICAgIHJldHVybiBhdHRhY2htZW50ID8gdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KSA6IG51bGw7XHJcbiAgICAgICAgfSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGF0dGFjaG1lbnQgPSB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gdmFsKTtcclxuICAgICAgdGhpcy5pdGVtcyA9IGF0dGFjaG1lbnQgPyBbdGhpcy5fY3JlYXRlSXRlbShhdHRhY2htZW50KV0gOiBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbiAgQElucHV0KCkgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bWJlcltdIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbDogbnVtYmVyIHwgbnVtYmVyW10pIHtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWwpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcclxuICB9XHJcbiAgc2V0IHBsYWNlaG9sZGVyKHBsaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgZm9jdXNlZDogYm9vbGVhbjtcclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5fdmFsdWU7IH1cclxuICBzaG91bGRMYWJlbEZsb2F0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuICBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGVycm9yU3RhdGUgPSBmYWxzZTtcclxuICBjb250cm9sVHlwZT86IHN0cmluZyA9ICdiaXpkb2MtZmlsZS11cGxvYWQnO1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcbiAgb25Db250YWluZXJDbGljaygpOiB2b2lkIHtcclxuICB9XHJcbiAgb3BlbigpIHtcclxuICAgIHRoaXMuX3Byb21wdCgpLnRoZW4oXHJcbiAgICAgIHRoaXMuX3VwbG9hZC5iaW5kKHRoaXMpKVxyXG4gIH1cclxuICBwcml2YXRlIF9wcm9tcHQob3B0aW9ucz86IHsgbXVsdGlwbGU6IGJvb2xlYW4sIGFjY2VwdD86IHN0cmluZyB9KTogUHJvbWlzZTxGaWxlW10+IHtcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmFjY2VwdClcclxuICAgICAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LmFjY2VwdCA9IG9wdGlvbnMuYWNjZXB0O1xyXG4gICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUVsZW1lbnQubXVsdGlwbGUgPSBvcHRpb25zLm11bHRpcGxlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3BlbmRpbmcpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZ0XHJcbiAgICovXHJcbiAgX2NoYW5nZShldnQ6IElucHV0RXZlbnQpIHtcclxuICAgIHRoaXMuX29uVG91Y2hlZCAmJiB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGFyciA9IFtdIGFzIEZpbGVbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGUgPSBmaWxlcy5pdGVtKGkpO1xyXG4gICAgICBhcnIucHVzaChmaWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcubmV4dChhcnIpO1xyXG4gICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY3JlYXRlSXRlbShhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XHJcbiAgICBjb25zdCBmaWxlRXh0ID0gQXR0YWNobWVudEluZm8uZmlsZUV4dChhdHRhY2htZW50LmZpbGVOYW1lKSxcclxuICAgICAgaGFzUHJldmlldyA9IEF0dGFjaG1lbnRJbmZvLmV4aXN0cyhhdHRhY2htZW50LmNvbnRlbnRUeXBlKSxcclxuICAgICAgaXNJbWFnZSA9IGhhc1ByZXZpZXcgJiYgQXR0YWNobWVudEluZm8uaXNJbWFnZShhdHRhY2htZW50LmNvbnRlbnRUeXBlKSxcclxuICAgICAgdXJsID0gaXNJbWFnZSA/IHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG4gICAgICAgIHRoaXMuX21haWxib3guZm9ybWF0RG93bmxvYWRVcmwodGhpcy5fbW9kZWwuZG9jdW1lbnRJZCwgYXR0YWNobWVudC5pZCkpIDogbnVsbDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmF0dGFjaG1lbnQsXHJcbiAgICAgIGhhc1ByZXZpZXcsXHJcbiAgICAgIGlzSW1hZ2UsXHJcbiAgICAgIGZpbGVFeHQsXHJcbiAgICAgIHVybCxcclxuICAgICAgaWNvbjogRVhURU5USU9OX0lDT05TW2ZpbGVFeHRdLFxyXG4gICAgICBjaGVja2VkT3V0OlxyXG4gICAgICAgIGF0dGFjaG1lbnQuY2hlY2tlZE91dCAmJlxyXG4gICAgICAgIGF0dGFjaG1lbnQuaG9sZGluZ0lkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkXHJcbiAgICB9IGFzIEF0dGFjaG1lbnRFeHRyYTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGZpbGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBsb2FkKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGVzID0gW10gYXMgT2JzZXJ2YWJsZTxhbnk+W107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmaWxlID0gZmlsZXNbaV0sXHJcbiAgICAgICAgaXRlbSA9IHRoaXMuaXRlbXMuZmluZChpID0+IGZpbGUubmFtZSA9PT0gaS5maWxlTmFtZSk7XHJcbiAgICAgIC8vIGV4aXN0c1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIC8vIGlzIGNoZWNrZWQgb3V0XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hlY2tlZE91dCkge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaW5cclxuICAgICAgICAgIGxldCBvYnNlcnZhYmxlID0gdGhpcy5fbWFpbGJveC5jaGVja0luKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLCBpdGVtLmlkLCBmaWxlKS5cclxuICAgICAgICAgICAgcGlwZShcclxuICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzcyhpdGVtKSwgY2F0Y2hFcnJvcihlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9KSwgdGFwKChhOiBBdHRhY2htZW50IHwgZmFsc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtLmNoZWNrZWRPdXQ7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgaWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5pdGVtcy5tYXAoaSA9PiBpLmlkKSA6IGEuaWQ7XHJcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgYSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKG9ic2VydmFibGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNhbkVkaXQoaXRlbSkpIHtcclxuICAgICAgICAgIC8vIGV4aXN0aW5nIGl0ZW0sIG92ZXJyaWRlXHJcbiAgICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudXBsb2FkKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC5mb3JtSWQsIHRoaXMuX21vZGVsLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGZpbGUsIHsgaXNQcml2YXRlOiB0cnVlIH0pLlxyXG4gICAgICAgICAgICBwaXBlKHJlcG9ydFByb2dyZXNzKGl0ZW0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5pdGVtcy5tYXAoaSA9PiBpLmlkKSA6IGEuaWQ7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgLyogbm8gdG9hc3QgKi9cclxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiBvZihmYWxzZSkpKTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRPRE8gYWRkIHBlbmRpbmdcclxuICAgICAgICAvL3RoaXMuaXRlbXMucHVzaCh0aGlzLl9jcmVhdGVJdGVtKGEpKTtcclxuICAgICAgICAvLyB1cGxvYWQgbmV3XHJcbiAgICAgICAgbGV0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LnVwbG9hZCh0aGlzLl9tb2RlbC5pZCwgdGhpcy5fbW9kZWwuZm9ybUlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLFxyXG4gICAgICAgICAgZmlsZSwgeyBpc1ByaXZhdGU6IHRydWUgfSkuXHJcbiAgICAgICAgICBwaXBlKC8qVE9ETyByZXBvcnRQcm9ncmVzcyhpdGVtKSwgKi9jYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5wdXNoKGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLl9jcmVhdGVJdGVtKGEpKTtcclxuICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAvKiBubyB0b2FzdCAqL1xyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiBvZihmYWxzZSkpKTtcclxuICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKG9ic2VydmFibGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JrSm9pbihvYnNlcnZhYmxlcykuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAvLyBmaWx0ZXIgbm9uIGZhbHNlXHJcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gZS5maWx0ZXIoZSA9PiBlKSBhcyBBdHRhY2htZW50W107XHJcbiAgICAgIC8vIGFueVxyXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGggJiZcclxuICAgICAgICB0aGlzLl9zYi50b2FzdChcclxuICAgICAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDEgP1xyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdDaGVja2VkSW5OJywgYXR0YWNobWVudHMubGVuZ3RoKSA6XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbicsIGF0dGFjaG1lbnRzWzBdLmZpbGVOYW1lKVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5fcGVuZGluZy5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiIWl0ZW1zLmxlbmd0aDsgZWxzZSBwcmV2aWV3XCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cImZpbGxlZFwiPnt7aWNvbn19PC9tYXQtaWNvbj5cclxuICA8c3BhbiBjbGFzcz1cIm1hdC1oM1wiPnt7cGxhY2Vob2xkZXJ9fTwvc3Bhbj5cclxuPC9idXR0b24+XHJcbjxpbnB1dCB0eXBlPVwiZmlsZVwiICNpbnB1dFxyXG4gICAgICAgW2FjY2VwdF09YWNjZXB0IFttdWx0aXBsZV09bXVsdGlwbGUgKGNoYW5nZSk9J19jaGFuZ2UoJGV2ZW50KScgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgLz5cclxuPG5nLXRlbXBsYXRlICNwcmV2aWV3PlxyXG4gIDxkaXYgKm5nRm9yPSdsZXQgYSBvZiBpdGVtcycgY2xhc3M9XCJhdHRhY2htZW50LWl0ZW1cIlxyXG4gICAgICAgW2NsYXNzLmRlbGV0ZWRdPVwiYS5kZWxldGVkXCIgW2NsYXNzLmZhaWxlZF09XCJhLmZhaWxlZFwiXHJcbiAgICAgICBbcHJvZ3Jlc3NJbmRpY2F0b3JdPVwiYS5wcm9ncmVzc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbGUtcHJldmlld1wiPlxyXG4gICAgICA8aW1nICpuZ0lmPVwiYS5pc0ltYWdlXCIgW3NyY109XCJhLnVybFwiIChjbGljayk9XCJhcHJldmlldyhhKVwiIGhlaWdodD1cIjgwXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiYS5oYXNQcmV2aWV3ICYmICFhLmlzSW1hZ2VcIiBbYml6ZG9jVG9vbHRpcF09XCInUHJldmlldyd8dHJhbnNsYXRlXCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCIgW25nU3dpdGNoXT1cImEuaWNvbiAhPT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCIgW3N2Z0ljb25dPVwiYS5pY29uXCIgW2lubGluZV09XCJmYWxzZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+ZmluZF9pbl9wYWdlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFhLmhhc1ByZXZpZXcgJiYgYS5pY29uXCIgW3N2Z0ljb25dPVwiYS5pY29uXCIgW2lubGluZV09XCJmYWxzZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLW92ZXJsYXkgcm93XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZW5hbWVcIj57e2EuZmlsZU5hbWV9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1tZW51ICNtZW51PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkVkaXQoYSkgJiYgIWEuZmFpbGVkXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWEuY2hlY2tlZE91dFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrT3V0KGEpXCI+e3tcIkNoZWNrT3V0XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJtdWx0aXBsZVwiIChjbGljayk9XCJvcGVuKClcIj57e1wiQWRkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrSW4oYSlcIiAqbmdJZj1cImEuY2hlY2tlZE91dFwiPnt7XCJDaGVja0luXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZG93bmxvYWQoYSlcIj57e1wiRG93bmxvYWRcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiYS5oYXNQcmV2aWV3XCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCI+PG1hdC1pY29uPmxhbmRzY2FwZTwvbWF0LWljb24+IHt7XCJQcmV2aWV3XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNWZXJzaW9ucyhhKVwiPlxyXG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IHYgb2YgZ2V0VmVyc2lvbnMoYSlcIiAoY2xpY2spPVwicHJldmlld09yRG93bmxvYWQodilcIj57e3YudGltZSB8ICBhbUNhbGVuZGFyfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuRWRpdChhKVwiPlxyXG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImRpc2NhcmQoYSlcIj57e1wiRGlzY2FyZFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2FuY2VsKGEpXCIgKm5nSWY9XCJhLmZhaWxlZFwiPnt7XCJDYW5jZWxcIiB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9pbnB1dHMvZmlsZS5pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk5SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFTLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBbUIsY0FBYyxFQUFrQixjQUFjLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNbEgsTUFBTSxlQUFlLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFRaEcsTUFBTSxPQUNFLFNBQVM7YUFDQSxXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFJMUIsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFD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LElBQUk7c0JBQVosS0FBSztnQkFDYyxNQUFNO3NCQUF6QixTQUFTO3VCQUFDLE9BQU87Z0JBMkhsQixrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU16QyxVQUFVO3NCQURULFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWVoQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1yQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1yQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDdkIsS0FBSztzQkFBakIsS0FBSztnQkFPTyxXQUFXO3NCQUF2QixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBUWdDLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0NvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAsIGZpcnN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50SW5mbyB9IGZyb20gJy4uL2luZm8vYXR0YWNobWVudC1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RXh0cmEsIERPQ1VNRU5UX01PREVMLCBNYWlsYm94U2VydmljZSwgcmVwb3J0UHJvZ3Jlc3MsIFVwbG9hZEV2ZW50IH0gZnJvbSAnLi4vbWFpbGJveC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudCwgUmVjaXBpZW50TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2xhdGUuc2VydmljZSc7XHJcblxyXG5jb25zdCBFWFRFTlRJT05fSUNPTlMgPSB7ICd4bHN4JzogJ2V4Y2VsJywgJ2RvY3gnOiAnd29yZCcsICdwcHR4JzogJ3Bvd2VycG9pbnQnLCAncGRmJzogJ3BkZicgfTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnZmlsZS5pbnB1dC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnZmlsZS5pbnB1dC5zY3NzJ10sXHJcbiAgaG9zdDogeyBjbGFzczogJ2ZpbGUtZHJvcGFibGUnIH0sXHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZmlsZS11cGxvYWQnXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEZpbGVJbnB1dCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8bnVtYmVyIHwgbnVtYmVyW10+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgQEhvc3RCaW5kaW5nKCkgcmVhZG9ubHkgaWQgPSBgdHlwZS1maWxlLXVwbG9hZC0ke0ZpbGVJbnB1dC5uZXh0SWQrK31gO1xyXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IG11bHRpcGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbXVsdGlwbGUodmFsdWUpIHtcclxuICAgIHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgQElucHV0KCkgYWNjZXB0ID0gbnVsbDtcclxuICBASW5wdXQoKSBpY29uID0gJ3B1Ymxpc2gnO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgX2lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGl0ZW1zID0gW10gYXMgQXR0YWNobWVudEV4dHJhW107XHJcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBwcml2YXRlIF9yZXF1aXJlZDogYW55O1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnk7XHJcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciB8IG51bWJlcltdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RyYWdEcm9wID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nID0gbmV3IFN1YmplY3Q8RmlsZVtdPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZHJvcGFibGVFbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGJveDogTWFpbGJveFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgX2F0dGFjaG1lbnRJbmZvOiBBdHRhY2htZW50SW5mbyxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBJbmplY3QoRE9DVU1FTlRfTU9ERUwpIHByaXZhdGUgX21vZGVsOiBSZWNpcGllbnRNb2RlbDxhbnk+LFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGhhc1ZlcnNpb25zKGl0ZW06IEF0dGFjaG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlbC5hdHRhY2htZW50cy5maW5kKGEgPT4gYS5maWxlTmFtZSA9PT0gaXRlbS5maWxlTmFtZSAmJiBhLmlkICE9PSBpdGVtLmlkKSAhPT0gbnVsbDtcclxuICB9XHJcbiAgZ2V0VmVyc2lvbnMoaXRlbTogQXR0YWNobWVudCk6IEF0dGFjaG1lbnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5maWxlTmFtZSA9PT0gaXRlbS5maWxlTmFtZSAmJiBhLmlkICE9PSBpdGVtLmlkKTtcclxuICB9XHJcbiAgZG93bmxvYWQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5fbWFpbGJveC5mb3JtYXREb3dubG9hZFVybCh0aGlzLl9tb2RlbC5kb2N1bWVudElkLCBpdGVtLmlkKTtcclxuICAgIChpdGVtIGFzIEF0dGFjaG1lbnRFeHRyYSkudmlld2VkID0gbmV3IERhdGUoKTtcclxuICB9XHJcbiAgcHJldmlld09yRG93bmxvYWQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICBpZiAoQXR0YWNobWVudEluZm8uZXhpc3RzKGl0ZW0uY29udGVudFR5cGUpKVxyXG4gICAgICB0aGlzLmFwcmV2aWV3KGl0ZW0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gIH1cclxuICBjYW5FZGl0KGl0ZW06IEF0dGFjaG1lbnRFeHRyYSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9tb2RlbC5jb21wbGV0ZWQgJiYgaXRlbS51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQgJiYgIWl0ZW0uZGVsZXRlZDtcclxuICB9XHJcbiAgYXByZXZpZXcoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICB0aGlzLl9hdHRhY2htZW50SW5mby5wcmV2aWV3KHRoaXMuX21vZGVsLCBpdGVtLmlkKTtcclxuICB9XHJcbiAgY2FuY2VsKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgdGhpcy5fbW9kZWwuYXR0YWNobWVudHMucmVtb3ZlKGl0ZW0pO1xyXG4gIH1cclxuICBjaGVja0luKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgY29uc3QgYWNjZXB0ID0gaXRlbS5pc0ltYWdlID8gJ2ltYWdlLyonIDpcclxuICAgICAgJy4nICsgQXR0YWNobWVudEluZm8uZmlsZUV4dChpdGVtLmZpbGVOYW1lKSArICcsJyArIGl0ZW0uY29udGVudFR5cGU7XHJcbiAgICB0aGlzLl9wcm9tcHQoeyBtdWx0aXBsZTogZmFsc2UsIGFjY2VwdCB9KS50aGVuKGZpbGVzID0+IHtcclxuICAgICAgdGhpcy5fbWFpbGJveC5jaGVja0luKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLCBpdGVtLmlkLCBmaWxlc1swXSkuXHJcbiAgICAgICAgc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGEgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgaXRlbS5jaGVja2VkT3V0O1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIGEpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMudmFsdWUgYXMgbnVtYmVyW10pLmluZGV4T2YoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgLy8gcmVwbGFjZSB2YWx1ZSB3aXRoIG5ldyBpZFxyXG4gICAgICAgICAgICAgICh0aGlzLnZhbHVlIGFzIG51bWJlcltdKS5zcGxpY2UoaW5kZXgsIDEsIGEuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gYS5pZDtcclxuICAgICAgICAgICAgdGhpcy5fc2IudG9hc3QodGhpcy5fdHJhbnNsYXRlLmdldCgnQ2hlY2tlZEluJywgaXRlbS5maWxlTmFtZSkpO1xyXG4gICAgICAgICAgfSwgZXJyb3I6IGUgPT4gdGhpcy5faGFuZGxlRXJyb3IoZSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIClcclxuICB9XHJcbiAgY2hlY2tPdXQoaXRlbTogQXR0YWNobWVudEV4dHJhKSB7XHJcbiAgICB0aGlzLl9tYWlsYm94LmNoZWNrT3V0KHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC52ZXJzaW9uLCBpdGVtLmlkKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpdGVtLmNoZWNrZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBkaXNjYXJkKGl0ZW06IEF0dGFjaG1lbnRFeHRyYSkge1xyXG4gICAgY29uc3QgdGFzayA9ICgpID0+XHJcbiAgICAgIHRoaXMuX21haWxib3gucmVtb3ZlYXR0YWNobWVudCh0aGlzLl9tb2RlbC5pZCwgaXRlbS5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnJlbW92ZShpdGVtKTtcclxuICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IHRoaXMuaXRlbXMubGVuZ3RoID8gdGhpcy5pdGVtcy5tYXAoaSA9PiBpLmlkKSA6IG51bGwgOiBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgICBjb25zdCBhaXRlbSA9IHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgIGFpdGVtLmRlbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sIGVycm9yOiBlID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFcnJvcihlKVxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLl9tb2RlbC5kcmFmdClcclxuICAgICAgdGFzaygpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9zYi5hc2soJ0RlbGV0ZUZpbGVBc2snLCAnRGVsZXRlRmlsZScsIHsgY29sb3I6ICd3YXJuJyB9KS5zdWJzY3JpYmUob2sgPT5cclxuICAgICAgICBvayAmJiB0YXNrKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9oYW5kbGVFcnJvcihyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgNDAxOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQwOTogLy8gdmVyc2lvbiBjaGFuZ2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aGlzLl9zYi5lcnJvcignVmVyc2lvbkVycicsIHRoaXMuX21vZGVsLm51bWJlcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgNDA2OiAvLyB2YWxpZGF0aW9uIGV4Y2VwdGlvblxyXG4gICAgICAgIHRoaXMuX3NiLmVycm9yU3RyaW5nKHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl9zYi5lcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9kcm9wYWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuX2RyYWdEcm9wLnN1YnNjcmliZShvayA9PiB7XHJcbiAgICAgIGlmIChvaykgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2RyYWcnKTtcclxuICAgICAgZWxzZSBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZycpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuX3BsYWNlaG9sZGVyKSB0aGlzLl9wbGFjZWhvbGRlciA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0RyYWdGaWxlJyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmRyb3AnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZURvY3VtZW50RHJvcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLl9kcmFnRHJvcC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuX29uVG91Y2hlZCAmJiB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIC8vIHRvIGFycmF5XHJcbiAgICBjb25zdCB7IGl0ZW1zIH0gPSBldmVudC5kYXRhVHJhbnNmZXI7XHJcbiAgICBjb25zdCBmaWxlcyA9IFtdIGFzIEZpbGVbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGl0ZW1zW2ldLmdldEFzRmlsZSgpO1xyXG4gICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBsb2FkKGZpbGVzKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2VudGVyJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVFbnRlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5fZHJhZ0Ryb3AubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5fZHJhZ0Ryb3AubmV4dChmYWxzZSk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9kcmFnRHJvcC5uZXh0KHRydWUpO1xyXG4gIH1cclxuICB3cml0ZVZhbHVlKHZhbDogbnVtYmVyIHwgbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGlmICghdmFsKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgIHRoaXMuaXRlbXMgPVxyXG4gICAgICAgIHZhbC5tYXAoaSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5fbW9kZWwuYXR0YWNobWVudHMuZmluZChhID0+IGEuaWQgPT09IGkpO1xyXG4gICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnQgPyB0aGlzLl9jcmVhdGVJdGVtKGF0dGFjaG1lbnQpIDogbnVsbDtcclxuICAgICAgICB9KS5maWx0ZXIoYSA9PiBhKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgYXR0YWNobWVudCA9IHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLmZpbmQoYSA9PiBhLmlkID09PSB2YWwpO1xyXG4gICAgICB0aGlzLml0ZW1zID0gYXR0YWNobWVudCA/IFt0aGlzLl9jcmVhdGVJdGVtKGF0dGFjaG1lbnQpXSA6IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuICBASW5wdXQoKSBnZXQgdmFsdWUoKTogbnVtYmVyIHwgbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuICBzZXQgdmFsdWUodmFsOiBudW1iZXIgfCBudW1iZXJbXSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xyXG4gIH1cclxuICBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gcGxoO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuICBmb2N1c2VkOiBib29sZWFuO1xyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLl92YWx1ZTsgfVxyXG4gIHNob3VsZExhYmVsRmxvYXQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG4gIHNldCByZXF1aXJlZChyZXE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlcSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcbiAgZXJyb3JTdGF0ZSA9IGZhbHNlO1xyXG4gIGNvbnRyb2xUeXBlPzogc3RyaW5nID0gJ2JpemRvYy1maWxlLXVwbG9hZCc7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuICBvbkNvbnRhaW5lckNsaWNrKCk6IHZvaWQge1xyXG4gIH1cclxuICBvcGVuKCkge1xyXG4gICAgdGhpcy5fcHJvbXB0KCkudGhlbihcclxuICAgICAgdGhpcy5fdXBsb2FkLmJpbmQodGhpcykpXHJcbiAgfVxyXG4gIHByaXZhdGUgX3Byb21wdChvcHRpb25zPzogeyBtdWx0aXBsZTogYm9vbGVhbiwgYWNjZXB0Pzogc3RyaW5nIH0pOiBQcm9taXNlPEZpbGVbXT4ge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMuYWNjZXB0KVxyXG4gICAgICAgIHRoaXMuX2lucHV0Lm5hdGl2ZUVsZW1lbnQuYWNjZXB0ID0gb3B0aW9ucy5hY2NlcHQ7XHJcbiAgICAgIGlmIChvcHRpb25zLm11bHRpcGxlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5faW5wdXQubmF0aXZlRWxlbWVudC5tdWx0aXBsZSA9IG9wdGlvbnMubXVsdGlwbGU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5fcGVuZGluZyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBldnRcclxuICAgKi9cclxuICBfY2hhbmdlKGV2dDogSW5wdXRFdmVudCkge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkICYmIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgY29uc3QgeyBmaWxlcyB9ID0gZXZ0LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgYXJyID0gW10gYXMgRmlsZVtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZmlsZSA9IGZpbGVzLml0ZW0oaSk7XHJcbiAgICAgIGFyci5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5uZXh0KGFycik7XHJcbiAgICB0aGlzLl9pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVJdGVtKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcclxuICAgIGNvbnN0IGZpbGVFeHQgPSBBdHRhY2htZW50SW5mby5maWxlRXh0KGF0dGFjaG1lbnQuZmlsZU5hbWUpLFxyXG4gICAgICBoYXNQcmV2aWV3ID0gQXR0YWNobWVudEluZm8uZXhpc3RzKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICBpc0ltYWdlID0gaGFzUHJldmlldyAmJiBBdHRhY2htZW50SW5mby5pc0ltYWdlKGF0dGFjaG1lbnQuY29udGVudFR5cGUpLFxyXG4gICAgICB1cmwgPSBpc0ltYWdlID8gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXHJcbiAgICAgICAgdGhpcy5fbWFpbGJveC5mb3JtYXREb3dubG9hZFVybCh0aGlzLl9tb2RlbC5kb2N1bWVudElkLCBhdHRhY2htZW50LmlkKSkgOiBudWxsO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uYXR0YWNobWVudCxcclxuICAgICAgaGFzUHJldmlldyxcclxuICAgICAgaXNJbWFnZSxcclxuICAgICAgZmlsZUV4dCxcclxuICAgICAgdXJsLFxyXG4gICAgICBpY29uOiBFWFRFTlRJT05fSUNPTlNbZmlsZUV4dF0sXHJcbiAgICAgIGNoZWNrZWRPdXQ6XHJcbiAgICAgICAgYXR0YWNobWVudC5jaGVja2VkT3V0ICYmXHJcbiAgICAgICAgYXR0YWNobWVudC5ob2xkaW5nSWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWRcclxuICAgIH0gYXMgQXR0YWNobWVudEV4dHJhO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZmlsZXNcclxuICAgKi9cclxuICBwcml2YXRlIF91cGxvYWQoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBbXSBhcyBPYnNlcnZhYmxlPGFueT5bXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGUgPSBmaWxlc1tpXSxcclxuICAgICAgICBpdGVtID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gZmlsZS5uYW1lID09PSBpLmZpbGVOYW1lKTtcclxuICAgICAgLy8gZXhpc3RzXHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgLy8gaXMgY2hlY2tlZCBvdXRcclxuICAgICAgICBpZiAoaXRlbS5jaGVja2VkT3V0KSB7XHJcbiAgICAgICAgICAvLyBjaGVjayBpblxyXG4gICAgICAgICAgbGV0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LmNoZWNrSW4odGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLnZlcnNpb24sIGl0ZW0uaWQsIGZpbGUpLlxyXG4gICAgICAgICAgICBwaXBlKFxyXG4gICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzKGl0ZW0pLCBjYXRjaEVycm9yKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH0pLCB0YXAoKGE6IEF0dGFjaG1lbnQgfCBmYWxzZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGEpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uY2hlY2tlZE91dDtcclxuICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBpZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihpdGVtLCBhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UgJiYgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY2FuRWRpdChpdGVtKSkge1xyXG4gICAgICAgICAgLy8gZXhpc3RpbmcgaXRlbSwgb3ZlcnJpZGVcclxuICAgICAgICAgIGxldCBvYnNlcnZhYmxlID0gdGhpcy5fbWFpbGJveC51cGxvYWQodGhpcy5fbW9kZWwuaWQsIHRoaXMuX21vZGVsLmZvcm1JZCwgdGhpcy5fbW9kZWwudmVyc2lvbixcclxuICAgICAgICAgICAgZmlsZSwgeyBpc1ByaXZhdGU6IHRydWUgfSkuXHJcbiAgICAgICAgICAgIHBpcGUocmVwb3J0UHJvZ3Jlc3MoaXRlbSksIGNhdGNoRXJyb3IoZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgfSksIHRhcCgoYTogQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubXVsdGlwbGUgPyB0aGlzLml0ZW1zLm1hcChpID0+IGkuaWQpIDogYS5pZDtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgYSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSAmJiB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAvKiBubyB0b2FzdCAqL1xyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IG9mKGZhbHNlKSkpO1xyXG4gICAgICAgICAgb2JzZXJ2YWJsZXMucHVzaChvYnNlcnZhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVE9ETyBhZGQgcGVuZGluZ1xyXG4gICAgICAgIC8vdGhpcy5pdGVtcy5wdXNoKHRoaXMuX2NyZWF0ZUl0ZW0oYSkpO1xyXG4gICAgICAgIC8vIHVwbG9hZCBuZXdcclxuICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudXBsb2FkKHRoaXMuX21vZGVsLmlkLCB0aGlzLl9tb2RlbC5mb3JtSWQsIHRoaXMuX21vZGVsLnZlcnNpb24sXHJcbiAgICAgICAgICBmaWxlLCB7IGlzUHJpdmF0ZTogdHJ1ZSB9KS5cclxuICAgICAgICAgIHBpcGUoLypUT0RPIHJlcG9ydFByb2dyZXNzKGl0ZW0pLCAqL2NhdGNoRXJyb3IoZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICAgICAgfSksIHRhcCgoYTogQXR0YWNobWVudCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX21vZGVsLmF0dGFjaG1lbnRzLnB1c2goYSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHRoaXMuX2NyZWF0ZUl0ZW0oYSkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IHRoaXMuaXRlbXMubWFwKGkgPT4gaS5pZCkgOiBhLmlkO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlICYmIHRoaXMuX29uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC8qIG5vIHRvYXN0ICovXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IG9mKGZhbHNlKSkpO1xyXG4gICAgICAgIG9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcmtKb2luKG9ic2VydmFibGVzKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgIC8vIGZpbHRlciBub24gZmFsc2VcclxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBlLmZpbHRlcihlID0+IGUpIGFzIEF0dGFjaG1lbnRbXTtcclxuICAgICAgLy8gYW55XHJcbiAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCAmJlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KFxyXG4gICAgICAgICAgYXR0YWNobWVudHMubGVuZ3RoID4gMSA/XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0NoZWNrZWRJbk4nLCBhdHRhY2htZW50cy5sZW5ndGgpIDpcclxuICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmdldCgnQ2hlY2tlZEluJywgYXR0YWNobWVudHNbMF0uZmlsZU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RyYWdEcm9wLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9wZW5kaW5nLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvcGVuKClcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJmaWxsZWRcIj57e2ljb259fTwvbWF0LWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXQtaDNcIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxufSBAZWxzZSB7XG4gIEBmb3IgKGEgb2YgaXRlbXM7IHRyYWNrIGEpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudC1pdGVtXCJcbiAgICAgIFtjbGFzcy5kZWxldGVkXT1cImEuZGVsZXRlZFwiIFtjbGFzcy5mYWlsZWRdPVwiYS5mYWlsZWRcIlxuICAgICAgW3Byb2dyZXNzSW5kaWNhdG9yXT1cImEucHJvZ3Jlc3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXByZXZpZXdcIj5cbiAgICAgICAgQGlmIChhLmlzSW1hZ2UpIHtcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiYS51cmxcIiAoY2xpY2spPVwiYXByZXZpZXcoYSlcIiBoZWlnaHQ9XCI4MFwiPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoYS5oYXNQcmV2aWV3ICYmICFhLmlzSW1hZ2UpIHtcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbYml6ZG9jVG9vbHRpcF09XCInUHJldmlldyd8dHJhbnNsYXRlXCIgKGNsaWNrKT1cImFwcmV2aWV3KGEpXCI+XG4gICAgICAgICAgICBAc3dpdGNoIChhLmljb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBAY2FzZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCJhLmljb25cIiBbaW5saW5lXT1cImZhbHNlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmZpbmRfaW5fcGFnZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFhLmhhc1ByZXZpZXcgJiYgYS5pY29uKSB7XG4gICAgICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImEuaWNvblwiIFtpbmxpbmVdPVwiZmFsc2VcIj48L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLW92ZXJsYXkgcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZW5hbWVcIj57e2EuZmlsZU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm9wdGlvbnNcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1tZW51ICNtZW51PlxuICAgICAgICBAaWYgKCFhLmZhaWxlZCkge1xuICAgICAgICAgIEBpZiAoY2FuRWRpdChhKSAmJiAhYS5mYWlsZWQpIHtcbiAgICAgICAgICAgIEBpZiAoIWEuY2hlY2tlZE91dCkge1xuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrT3V0KGEpXCI+e3tcIkNoZWNrT3V0XCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICBAaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuKClcIj57e1wiQWRkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGEuY2hlY2tlZE91dCkge1xuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoZWNrSW4oYSlcIj57e1wiQ2hlY2tJblwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkb3dubG9hZChhKVwiPnt7XCJEb3dubG9hZFwiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKGEuaGFzUHJldmlldykge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhcHJldmlldyhhKVwiPjxtYXQtaWNvbj5sYW5kc2NhcGU8L21hdC1pY29uPiB7e1wiUHJldmlld1wiIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChoYXNWZXJzaW9ucyhhKSkge1xuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICBAZm9yICh2IG9mIGdldFZlcnNpb25zKGEpOyB0cmFjayB2KSB7XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicHJldmlld09yRG93bmxvYWQodilcIj57e3YudGltZSB8ICBhbUNhbGVuZGFyfX08L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChjYW5FZGl0KGEpKSB7XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZGlzY2FyZChhKVwiPnt7XCJEaXNjYXJkXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGEuZmFpbGVkKSB7XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjYW5jZWwoYSlcIj57e1wiQ2FuY2VsXCIgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1tZW51PlxuICAgIDwvZGl2PlxuICB9XG59XG48aW5wdXQgdHlwZT1cImZpbGVcIiAjaW5wdXRcbiAgW2FjY2VwdF09YWNjZXB0IFttdWx0aXBsZV09bXVsdGlwbGUgKGNoYW5nZSk9J19jaGFuZ2UoJGV2ZW50KScgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgLz5cbiJdfQ==