@fundamental-ngx/core 0.44.0-rc.3 → 0.44.0-rc.4

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 (156) hide show
  1. package/avatar/avatar.component.d.ts +0 -1
  2. package/bar/directives/bar-element.directive.d.ts +6 -3
  3. package/carousel/carousel.component.d.ts +8 -2
  4. package/date-picker/date-picker.component.d.ts +30 -9
  5. package/datetime-picker/datetime-picker.component.d.ts +28 -10
  6. package/dialog/dialog-footer-button/dialog-footer-button.component.d.ts +2 -0
  7. package/dialog/directives/dialog-decisive-button.directive.d.ts +2 -0
  8. package/dialog/utils/dialog-config.class.d.ts +1 -1
  9. package/esm2022/action-bar/action-bar.component.mjs +10 -3
  10. package/esm2022/alert/alert-service/alert.service.mjs +12 -3
  11. package/esm2022/alert/alert-utils/alert-config.mjs +11 -3
  12. package/esm2022/alert/alert-utils/alert-container.component.mjs +11 -3
  13. package/esm2022/alert/alert-utils/alert-ref.mjs +11 -3
  14. package/esm2022/alert/alert.component.mjs +17 -3
  15. package/esm2022/alert/alert.module.mjs +11 -3
  16. package/esm2022/avatar/avatar.component.mjs +2 -2
  17. package/esm2022/bar/directives/bar-element.directive.mjs +15 -7
  18. package/esm2022/carousel/carousel.component.mjs +34 -5
  19. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  20. package/esm2022/date-picker/date-picker.component.mjs +103 -10
  21. package/esm2022/datetime-picker/datetime-picker.component.mjs +78 -8
  22. package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +8 -3
  23. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +1 -1
  24. package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +6 -2
  25. package/esm2022/dialog/utils/dialog-config.class.mjs +1 -1
  26. package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +23 -1
  27. package/esm2022/form/form-label/form-label.component.mjs +21 -5
  28. package/esm2022/list/list-item/list-item.component.mjs +36 -1
  29. package/esm2022/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  30. package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +6 -2
  31. package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +8 -3
  32. package/esm2022/message-box/message-box-header/message-box-header.component.mjs +1 -1
  33. package/esm2022/message-strip/message-strip.component.mjs +12 -1
  34. package/esm2022/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  35. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  36. package/esm2022/pagination/pagination.component.mjs +140 -2
  37. package/esm2022/popover/base/base-popover.class.mjs +25 -1
  38. package/esm2022/popover/popover.component.mjs +28 -17
  39. package/esm2022/product-switch/product-switch/product-switch.component.mjs +11 -1
  40. package/esm2022/quick-view/quick-view-title/quick-view-title.component.mjs +1 -1
  41. package/esm2022/select/select.component.mjs +17 -10
  42. package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +12 -1
  43. package/esm2022/side-navigation/side-navigation.component.mjs +12 -3
  44. package/esm2022/slider/slider.component.mjs +83 -13
  45. package/esm2022/split-button/split-button.component.mjs +20 -1
  46. package/esm2022/splitter/splitter-pagination/splitter-pagination.component.mjs +9 -2
  47. package/esm2022/splitter/splitter.component.mjs +16 -5
  48. package/esm2022/step-input/step-input.component.mjs +46 -24
  49. package/esm2022/switch/switch.component.mjs +25 -3
  50. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +11 -1
  51. package/esm2022/tabs/tab-list.component.mjs +16 -5
  52. package/esm2022/text/text.component.mjs +23 -1
  53. package/esm2022/time/i18n/time-i18n.mjs +2 -2
  54. package/esm2022/token/token.component.mjs +25 -3
  55. package/esm2022/toolbar/toolbar.component.mjs +11 -3
  56. package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +67 -1
  57. package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +12 -1
  58. package/feed-list-item/components/item/feed-list-item.component.d.ts +8 -2
  59. package/fesm2022/fundamental-ngx-core-action-bar.mjs +9 -2
  60. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-alert.mjs +58 -13
  62. package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  64. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -6
  66. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-core-carousel.mjs +32 -3
  68. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  70. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-core-date-picker.mjs +102 -9
  72. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +77 -7
  74. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-core-dialog.mjs +13 -4
  76. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -0
  78. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-core-form.mjs +20 -4
  80. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-core-list.mjs +35 -0
  82. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-menu.mjs +1 -1
  84. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-message-box.mjs +13 -4
  86. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-message-strip.mjs +11 -0
  88. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -1
  90. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  92. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-pagination.mjs +139 -1
  94. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-popover.mjs +51 -16
  96. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-product-switch.mjs +10 -0
  98. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-quick-view.mjs +1 -1
  100. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-select.mjs +16 -9
  102. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-shellbar.mjs +11 -0
  104. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +11 -2
  106. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-slider.mjs +82 -12
  108. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-split-button.mjs +19 -0
  110. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-splitter.mjs +23 -5
  112. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-step-input.mjs +45 -23
  114. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-switch.mjs +24 -2
  116. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-tabs.mjs +25 -4
  118. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-text.mjs +22 -0
  120. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-time.mjs +1 -1
  122. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-token.mjs +24 -2
  124. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-toolbar.mjs +10 -2
  126. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +77 -0
  128. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  129. package/form/form-label/form-label.component.d.ts +8 -2
  130. package/fundamental-ngx-core-v0.44.0-rc.4.tgz +0 -0
  131. package/list/list-item/list-item.component.d.ts +16 -4
  132. package/message-box/directives/message-box-decisive-button.directive.d.ts +2 -0
  133. package/message-box/message-box-footer-button/message-box-footer-button.component.d.ts +2 -0
  134. package/message-strip/message-strip.component.d.ts +4 -1
  135. package/package.json +3 -3
  136. package/pagination/pagination.component.d.ts +44 -11
  137. package/popover/base/base-popover.class.d.ts +12 -3
  138. package/popover/popover.component.d.ts +8 -5
  139. package/product-switch/product-switch/product-switch.component.d.ts +4 -1
  140. package/schematics/add-dependencies/index.js +4 -4
  141. package/select/select.component.d.ts +9 -6
  142. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +6 -3
  143. package/slider/slider.component.d.ts +13 -4
  144. package/split-button/split-button.component.d.ts +8 -2
  145. package/splitter/splitter.component.d.ts +5 -2
  146. package/step-input/step-input.component.d.ts +12 -6
  147. package/switch/switch.component.d.ts +10 -4
  148. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +4 -1
  149. package/tabs/tab-list.component.d.ts +6 -3
  150. package/text/text.component.d.ts +8 -2
  151. package/time/i18n/time-i18n.d.ts +2 -2
  152. package/token/token.component.d.ts +8 -2
  153. package/toolbar/toolbar.component.d.ts +4 -1
  154. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  155. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +6 -3
  156. package/fundamental-ngx-core-v0.44.0-rc.3.tgz +0 -0
@@ -72,7 +72,7 @@ export class MultiInputMobileComponent extends MobileModeBase {
72
72
  });
73
73
  }
74
74
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MultiInputMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: MULTI_INPUT_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MultiInputMobileComponent, selector: "fd-multi-input-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n [mobile]=\"true\"\n *ngIf=\"mobileConfig?.hasCloseButton\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element class=\"custom-multi-input-mobile-control-element\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n <fd-bar-element class=\"custom-multi-input-select-all-bar-element\">\n <button\n fd-button\n glyph=\"multiselect-all\"\n [fdType]=\"allItemsSelected ? 'emphasized' : 'transparent'\"\n (click)=\"selectAll(allItemsSelected)\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", styles: [".custom-multi-input-select-all-bar-element{min-width:2.25rem}.custom-multi-input-mobile-control-element{width:calc(100% - 2.25rem)}.custom-multi-input-mobile-control-element .fd-multi-input-input-group-custom{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "component", type: i3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i4.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: MultiInputMobileComponent, selector: "fd-multi-input-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n [mobile]=\"true\"\n *ngIf=\"mobileConfig?.hasCloseButton\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element class=\"custom-multi-input-mobile-control-element\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n <fd-bar-element class=\"custom-multi-input-select-all-bar-element\">\n <button\n fd-button\n glyph=\"multiselect-all\"\n [fdType]=\"allItemsSelected ? 'emphasized' : 'transparent'\"\n (click)=\"selectAll(allItemsSelected)\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", styles: [".custom-multi-input-select-all-bar-element{min-width:2.25rem}.custom-multi-input-mobile-control-element{width:calc(100% - 2.25rem)}.custom-multi-input-mobile-control-element .fd-multi-input-input-group-custom{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["isTitle", "fullWidth"] }, { kind: "component", type: i2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "component", type: i3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i4.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
76
76
  }
77
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MultiInputMobileComponent, decorators: [{
78
78
  type: Component,
@@ -55,6 +55,18 @@ export class PaginationComponent {
55
55
  get itemsPerPage() {
56
56
  return this._itemsPerPage;
57
57
  }
58
+ /**
59
+ * @deprecated use i18n capabilities instead
60
+ * Label for options for items per page.
61
+ * This property is mainly provided to support reading in the right language for screen reader.
62
+ */
63
+ set itemsPerPageLabel(value) {
64
+ console.warn("Property itemsPerPageLabel is deprecated. Use i18n capabilities 'corePagination.itemsPerPageLabel' key instead.");
65
+ this._itemsPerPageLabel = value;
66
+ }
67
+ get itemsPerPageLabel() {
68
+ return this._itemsPerPageLabel;
69
+ }
58
70
  /** Represents the options for items per page. */
59
71
  set itemsPerPageOptions(value) {
60
72
  this._itemsPerPageOptions = coerceArray(value)
@@ -67,6 +79,131 @@ export class PaginationComponent {
67
79
  get itemsPerPageOptions() {
68
80
  return this._itemsPerPageOptions;
69
81
  }
82
+ /**
83
+ * @deprecated use i18n capabilities instead
84
+ * Label for the 'first' page button.
85
+ * This property is mainly provided to support reading in the right language for screen reader.
86
+ */
87
+ set firstLabel(value) {
88
+ console.warn("Property firstLabel is deprecated. Use i18n capabilities 'corePagination.firstLabel' key instead.");
89
+ this._firstLabel = value;
90
+ }
91
+ get firstLabel() {
92
+ return this._firstLabel;
93
+ }
94
+ /**
95
+ * @deprecated use i18n capabilities instead
96
+ * Label for the 'previous' page button.
97
+ * This property is mainly provided to support reading in the right language for screen reader.
98
+ */
99
+ set previousLabel(value) {
100
+ console.warn("Property previousLabel is deprecated. Use i18n capabilities 'corePagination.previousLabel' key instead.");
101
+ this._previousLabel = value;
102
+ }
103
+ get previousLabel() {
104
+ return this._previousLabel;
105
+ }
106
+ /**
107
+ * @deprecated use i18n capabilities instead
108
+ * Label for the 'next' page button.
109
+ * This property is mainly provided to support reading in the right language for screen reader.
110
+ */
111
+ set nextLabel(value) {
112
+ console.warn("Property nextLabel is deprecated. Use i18n capabilities 'corePagination.nextLabel' key instead.");
113
+ this._nextLabel = value;
114
+ }
115
+ get nextLabel() {
116
+ return this._nextLabel;
117
+ }
118
+ /**
119
+ * @deprecated use i18n capabilities instead
120
+ * Label for the 'last' page button.
121
+ * This property is mainly provided to support reading in the right language for screen reader.
122
+ */
123
+ set lastLabel(value) {
124
+ console.warn("Property lastLabel is deprecated. Use i18n capabilities 'corePagination.lastLabel' key instead.");
125
+ this._lastLabel = value;
126
+ }
127
+ get lastLabel() {
128
+ return this._lastLabel;
129
+ }
130
+ /**
131
+ * @deprecated use i18n capabilities instead
132
+ * Aria label for the navigation element
133
+ * This property is mainly provided to support reading in the right language for screen reader.
134
+ */
135
+ set ariaLabel(value) {
136
+ console.warn("Property ariaLabel is deprecated. Use i18n capabilities 'corePagination.ariaLabel' key instead.");
137
+ this._ariaLabel = value;
138
+ }
139
+ get ariaLabel() {
140
+ return this._ariaLabel;
141
+ }
142
+ /**
143
+ * @deprecated use i18n capabilities instead
144
+ * Label for the 'Page ' page button. Page number passed as function parameter.
145
+ * This property is mainly provided to support reading in the right language for screen reader.
146
+ */
147
+ set pageLabel(value) {
148
+ console.warn("Property pageLabel is deprecated. Use i18n capabilities 'corePagination.pageLabel' key instead.");
149
+ this._pageLabel = value;
150
+ }
151
+ get pageLabel() {
152
+ return this._pageLabel;
153
+ }
154
+ /**
155
+ * @deprecated use i18n capabilities instead
156
+ * Function to create current page aria label, current page passed as a parameter of the function
157
+ * This property is mainly provided to support reading in the right language for screen reader.
158
+ */
159
+ set currentPageAriaLabel(value) {
160
+ console.warn("Property currentPageAriaLabel is deprecated. Use i18n capabilities 'corePagination.currentPageAriaLabel' key instead.");
161
+ this._currentPageAriaLabel = value;
162
+ }
163
+ get currentPageAriaLabel() {
164
+ return this._currentPageAriaLabel;
165
+ }
166
+ /**
167
+ * @deprecated use i18n capabilities instead
168
+ * Page label to be shown before current page input in mobile mode.
169
+ * In conjuction with @pageLabelAfterInputMobile generates the label for the input.
170
+ * Example: 'Page' + input + pageLabelAfterInputMobile
171
+ * This property is mainly provided to support i18n.
172
+ */
173
+ // eslint-disable-next-line @typescript-eslint/member-ordering
174
+ set labelBeforeInputMobile(value) {
175
+ console.warn("Property labelBeforeInputMobile is deprecated. Use i18n capabilities 'corePagination.labelBeforeInputMobile' key instead.");
176
+ this._labelBeforeInputMobile = value;
177
+ }
178
+ get labelBeforeInputMobile() {
179
+ return this._labelBeforeInputMobile;
180
+ }
181
+ /**
182
+ * @deprecated use i18n capabilities instead
183
+ * Page label to be shown after current page input in mobile mode. Pages count passed as the function parameter.
184
+ * In conjuction with @pageLabelBeforeInputMobile generates the label for the input.
185
+ * Example: pageLabelBeforeInputMobile + input + 'of 500'.
186
+ * This property is mainly provided to support i18n.
187
+ */
188
+ set labelAfterInputMobile(value) {
189
+ console.warn("Property labelAfterInputMobile is deprecated. Use i18n capabilities 'corePagination.labelAfterInputMobile' key instead.");
190
+ this._labelAfterInputMobile = value;
191
+ }
192
+ get labelAfterInputMobile() {
193
+ return this._labelAfterInputMobile;
194
+ }
195
+ /**
196
+ * @deprecated use i18n capabilities instead
197
+ * Current page input aria label, parameters passed to the function (currentPage: number, pagesCount: number).
198
+ * This property is mainly provided to support reading in the right language for screen reader.
199
+ */
200
+ set inputAriaLabel(value) {
201
+ console.warn("Property inputAriaLabel is deprecated. Use i18n capabilities 'corePagination.inputAriaLabel' key instead.");
202
+ this._inputAriaLabel = value;
203
+ }
204
+ get inputAriaLabel() {
205
+ return this._inputAriaLabel;
206
+ }
70
207
  /**
71
208
  * Retrieves an object that represents
72
209
  * the total number of items, the current page, and the number of items per page.
@@ -221,6 +358,7 @@ export class PaginationComponent {
221
358
  }
222
359
  /** @deprecated, use {@link paginationObject} getter instead */
223
360
  getPaginationObject() {
361
+ console.warn('PaginationComponent: getPaginationObject() is deprecated, use paginationObject getter instead');
224
362
  return this.paginationObject;
225
363
  }
226
364
  /** @hidden */
@@ -288,7 +426,7 @@ export class PaginationComponent {
288
426
  this._liveAnnouncer.announce(label);
289
427
  }
290
428
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PaginationComponent, deps: [{ token: i1.PaginationService }, { token: i0.ChangeDetectorRef }, { token: i2.LiveAnnouncer }, { token: FD_LANGUAGE }, { token: i3.RtlService, optional: true }, { token: i4.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
291
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: PaginationComponent, selector: "fd-pagination", inputs: { id: "id", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate", firstLabel: "firstLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", lastLabel: "lastLabel", ariaLabel: "ariaLabel", pageLabel: "pageLabel", currentPageAriaLabel: "currentPageAriaLabel", labelBeforeInputMobile: "labelBeforeInputMobile", labelAfterInputMobile: "labelAfterInputMobile", inputAriaLabel: "inputAriaLabel" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"ariaLabel || ('corePagination.ariaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"firstLabel || ('corePagination.firstLabel' | fdTranslate)\"\n [title]=\"firstLabel || ('corePagination.firstLabel' | fdTranslate)\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"previousLabel || ('corePagination.previousLabel' | fdTranslate)\"\n [title]=\"previousLabel || ('corePagination.previousLabel' | fdTranslate)\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n [title]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel\n ? pageLabel(currentPage)\n : ('corePagination.pageLabel' | fdTranslate : { pageNumber: currentPage })\n \"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n labelBeforeInputMobile\n ? labelBeforeInputMobile + ':'\n : ('corePagination.labelBeforeInputMobile' | fdTranslate)\n }}\n </label>\n\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"\n inputAriaLabel\n ? inputAriaLabel(currentPage, _totalPages)\n : ('corePagination.inputAriaLabel'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages })\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n labelAfterInputMobile\n ? labelAfterInputMobile(_lastPage)\n : ('corePagination.labelAfterInputMobile'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages })\n }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n [title]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"nextLabel || ('corePagination.nextLabel' | fdTranslate)\"\n [title]=\"nextLabel || ('corePagination.nextLabel' | fdTranslate)\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"lastLabel || ('corePagination.lastLabel' | fdTranslate)\"\n [title]=\"lastLabel || ('corePagination.lastLabel' | fdTranslate)\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate : _currentShowing }}\n </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ itemsPerPageLabel ? itemsPerPageLabel + ':' : ('corePagination.itemsPerPageLabel' | fdTranslate) }}\n </label>\n\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n <li fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</li>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *//*!\n.fd-pagination\n*/.fd-pagination{--fdPaginationMoreWidth:2.25rem;-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0 1rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0 auto;padding:0}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:2rem}.fd-pagination .fd-pagination__button,.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__link,.fd-pagination__more{margin-left:.125rem;margin-right:.125rem}.fd-pagination .fd-pagination__input{--fdInput_Field_Margin:.125rem;--fdInput_Field_Compact_Margin:.125rem;-moz-appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;align-self:center;flex-shrink:0}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:calc(var(--sapButton_BorderCornerRadius) - var(--sapContent_FocusWidth));bottom:var(--fdButton_Outline_Offset);content:\"\";display:block;left:var(--fdButton_Outline_Offset);position:absolute;right:var(--fdButton_Outline_Offset);top:var(--fdButton_Outline_Offset)}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.SelectComponent, selector: "fd-select", inputs: ["controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "extendedBodyTemplate", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: i7.OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i9.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "directive", type: i3.OnlyDigitsDirective, selector: "[fdkOnlyDigits], [fdOnlyDigits], [fd-only-digits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "directive", type: i3.FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem], [fd-focus-key-manager-item], [fdFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "directive", type: i3.FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList], [fd-focus-key-manager-list], [fdFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "pipe", type: i10.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
429
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: PaginationComponent, selector: "fd-pagination", inputs: { id: "id", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate", firstLabel: "firstLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", lastLabel: "lastLabel", ariaLabel: "ariaLabel", pageLabel: "pageLabel", currentPageAriaLabel: "currentPageAriaLabel", labelBeforeInputMobile: "labelBeforeInputMobile", labelAfterInputMobile: "labelAfterInputMobile", inputAriaLabel: "inputAriaLabel" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"ariaLabel || ('corePagination.ariaLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"firstLabel || ('corePagination.firstLabel' | fdTranslate)\"\n [title]=\"firstLabel || ('corePagination.firstLabel' | fdTranslate)\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"previousLabel || ('corePagination.previousLabel' | fdTranslate)\"\n [title]=\"previousLabel || ('corePagination.previousLabel' | fdTranslate)\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n [title]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel\n ? pageLabel(currentPage)\n : ('corePagination.pageLabel' | fdTranslate : { pageNumber: currentPage })\n \"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n labelBeforeInputMobile\n ? labelBeforeInputMobile + ':'\n : ('corePagination.labelBeforeInputMobile' | fdTranslate)\n }}\n </label>\n\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"\n inputAriaLabel\n ? inputAriaLabel(currentPage, _totalPages)\n : ('corePagination.inputAriaLabel'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages })\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n labelAfterInputMobile\n ? labelAfterInputMobile(_lastPage)\n : ('corePagination.labelAfterInputMobile'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages })\n }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n [title]=\"\n pageLabel ? pageLabel(page) : ('corePagination.pageLabel' | fdTranslate : { pageNumber: page })\n \"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"nextLabel || ('corePagination.nextLabel' | fdTranslate)\"\n [title]=\"nextLabel || ('corePagination.nextLabel' | fdTranslate)\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"lastLabel || ('corePagination.lastLabel' | fdTranslate)\"\n [title]=\"lastLabel || ('corePagination.lastLabel' | fdTranslate)\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate : _currentShowing }}\n </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ itemsPerPageLabel ? itemsPerPageLabel + ':' : ('corePagination.itemsPerPageLabel' | fdTranslate) }}\n </label>\n\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n <li fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</li>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *//*!\n.fd-pagination\n*/.fd-pagination{--fdPaginationMoreWidth:2.25rem;-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0 1rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0 auto;padding:0}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:2rem}.fd-pagination .fd-pagination__button,.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__link,.fd-pagination__more{margin-left:.125rem;margin-right:.125rem}.fd-pagination .fd-pagination__input{--fdInput_Field_Margin:.125rem;--fdInput_Field_Compact_Margin:.125rem;-moz-appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;align-self:center;flex-shrink:0}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:calc(var(--sapButton_BorderCornerRadius) - var(--sapContent_FocusWidth));bottom:var(--fdButton_Outline_Offset);content:\"\";display:block;left:var(--fdButton_Outline_Offset);position:absolute;right:var(--fdButton_Outline_Offset);top:var(--fdButton_Outline_Offset)}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: i7.OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i9.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "directive", type: i3.OnlyDigitsDirective, selector: "[fdkOnlyDigits], [fdOnlyDigits], [fd-only-digits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "directive", type: i3.FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem], [fd-focus-key-manager-item], [fdFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "directive", type: i3.FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList], [fd-focus-key-manager-list], [fdFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "pipe", type: i10.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
292
430
  }
293
431
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PaginationComponent, decorators: [{
294
432
  type: Component,
@@ -359,4 +497,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
359
497
  }], itemsPerPageChange: [{
360
498
  type: Output
361
499
  }] } });
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdoRSxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUU1QixVQUFVLEVBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQWMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFFaEgsa0VBQWtFO0FBQ2xFLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBVWxDLElBQUksa0JBQWtCLEdBQUcsQ0FB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QUFLO2dCQVNOLGFBQWE7c0JBRFosS0FBSztnQkFTTixTQUFTO3NCQURSLEtBQUs7Z0JBU04sU0FBUztzQkFEUixLQUFLO2dCQVNOLFNBQVM7c0JBRFIsS0FBSztnQkFTTixTQUFTO3NCQURSLEtBQUs7Z0JBU04sb0JBQW9CO3NCQURuQixLQUFLO2dCQVlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFXTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBU04sY0FBYztzQkFEYixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VBcnJheSwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICAgIEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUsXG4gICAgRm9jdXNLZXlNYW5hZ2VyTGlzdERpcmVjdGl2ZSxcbiAgICBOdWxsYWJsZSxcbiAgICBSdGxTZXJ2aWNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZkTGFuZ3VhZ2UsIEZEX0xBTkdVQUdFLCBUcmFuc2xhdGlvblJlc29sdmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcblxuLyoqIENvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG5jb25zdCBERUZBVUxUX0lURU1TX1BFUl9QQUdFID0gMTA7XG5cbmludGVyZmFjZSBDdXJyZW50U2hvd2luZyB7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHRvOiBudW1iZXI7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIC8qKiBAZGVwcmVjYXRlZCBoYXMgYmVlbiByZW5hbWVkIHRvIFwidG90YWxDb3VudFwiICovXG4gICAgb2Y6IG51bWJlcjtcbn1cblxubGV0IHBhZ2luYXRpb25VbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogVGhlIGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSBuYXZpZ2F0aW9uIGJldHdlZW4gcGFnZWQgaW5mb3JtYXRpb24uXG4gKiBgYGBodG1sXG4gKiA8ZmQtcGFnaW5hdGlvblxuICogICAgICAgICAgW3RvdGFsSXRlbXNdPVwiNTBcIlxuICogICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCIxMFwiXG4gKiAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiM1wiPlxuICogPC9mZC1wYWdpbmF0aW9uPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcGFnaW5hdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1BhZ2luYXRpb25TZXJ2aWNlLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCldLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC1wYWdpbmF0aW9uJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1wYWdpbmF0aW9uLS1tb2JpbGVdJzogJ21vYmlsZScsXG4gICAgICAgICdbY2xhc3MuZmQtcGFnaW5hdGlvbi0tc2hvcnRdJzogJ19sYXN0UGFnZSA8PSA5J1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZvY3VzS2V5TWFuYWdlckxpc3REaXJlY3RpdmUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzS2V5TWFuYWdlckxpc3Q6IEZvY3VzS2V5TWFuYWdlckxpc3REaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oRm9jdXNLZXlNYW5hZ2VySXRlbURpcmVjdGl2ZSlcbiAgICByZWFkb25seSBfZm9jdXNLZXlNYW5hZ2VySXRlbXM6IFF1ZXJ5TGlzdDxGb2N1c0tleU1hbmFnZXJJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncGFnZUlucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHJlYWRvbmx5IF9wYWdlSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjdXJyZW50UGFnZUVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSBfY3VycmVudFBhZ2VFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIElkIGZvciB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQuIElmIG9taXR0ZWQsIGEgdW5pcXVlIG9uZSBpcyBnZW5lcmF0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLXBhZ2luYXRpb24tJyArIHBhZ2luYXRpb25VbmlxdWVJZCsrO1xuXG4gICAgLyoqIFdoZXRoZXIgY29tcG9uZW50IHNob3VsZCBiZSBzaG93biBpbiB0aGUgbW9iaWxlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbW9iaWxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbW9iaWxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vYmlsZTtcbiAgICB9XG5cbiAgICAvKiogUmVwcmVzZW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG90YWxJdGVtczogbnVtYmVyO1xuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY3VycmVudFBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50UGFnZSA9IE1hdGguZmxvb3IoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDEpKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZTtcbiAgICB9XG5cbiAgICAvKiogUmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5mbG9vcihjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgREVGQVVMVF9JVEVNU19QRVJfUEFHRSkpO1xuXG4gICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IE1hdGgubWF4KHZhbHVlLCAxKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUgc2hvdyByYW5nZSBvZiBpdGVtIGJ5IGN1cnJlbnQgcGFnZSBvZiBpdGVtcy5cbiAgICAgKiBJdCBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gYGl0ZW1zUGVyUGFnZU9wdGlvbnNgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbXNQZXJQYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciBvcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2VPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zID0gY29lcmNlQXJyYXk8bnVtYmVyPih2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IGNvZXJjZU51bWJlclByb3BlcnR5KHYsIDApKVxuICAgICAgICAgICAgLm1hcCgodikgPT4gTWF0aC5mbG9vcih2KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYgPiAwKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1zUGVyUGFnZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5VG90YWxJdGVtcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgc2hvdyByYW5nZSBvZiBpdGVtIGJ5IGN1cnJlbnQgcGFnZSBvZiBpdGVtcy5cbiAgICAgKiBEZWZhdWx0IHZpZXc6IFNob3dpbmcge3sgZnJvbSB9fS17eyB0byB9fSBvZiB7eyBvZiB9fVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVRleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHRoZSAnZmlyc3QnIHBhZ2UgYnV0dG9uLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaXJzdExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciB0aGUgJ3ByZXZpb3VzJyBwYWdlIGJ1dHRvbi5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3IgdGhlICduZXh0JyBwYWdlIGJ1dHRvbi5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV4dExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciB0aGUgJ2xhc3QnIHBhZ2UgYnV0dG9uLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsYXN0TGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQXJpYSBsYWJlbCBmb3IgdGhlIG5hdmlnYXRpb24gZWxlbWVudFxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHRoZSAnUGFnZSAnIHBhZ2UgYnV0dG9uLiBQYWdlIG51bWJlciBwYXNzZWQgYXMgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwYWdlTGFiZWw6IE51bGxhYmxlPChwYWdlOiBudW1iZXIpID0+IHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBjdXJyZW50IHBhZ2UgYXJpYSBsYWJlbCwgY3VycmVudCBwYWdlIHBhc3NlZCBhcyBhIHBhcmFtZXRlciBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudFBhZ2VBcmlhTGFiZWw6IE51bGxhYmxlPChjdXJyZW50UGFnZTogbnVtYmVyKSA9PiBzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBQYWdlIGxhYmVsIHRvIGJlIHNob3duIGJlZm9yZSBjdXJyZW50IHBhZ2UgaW5wdXQgaW4gbW9iaWxlIG1vZGUuXG4gICAgICogSW4gY29uanVjdGlvbiB3aXRoIEBwYWdlTGFiZWxBZnRlcklucHV0TW9iaWxlIGdlbmVyYXRlcyB0aGUgbGFiZWwgZm9yIHRoZSBpbnB1dC5cbiAgICAgKiBFeGFtcGxlOiAnUGFnZScgKyBpbnB1dCArIHBhZ2VMYWJlbEFmdGVySW5wdXRNb2JpbGVcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IGkxOG4uXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICBASW5wdXQoKVxuICAgIGxhYmVsQmVmb3JlSW5wdXRNb2JpbGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogUGFnZSBsYWJlbCB0byBiZSBzaG93biBhZnRlciBjdXJyZW50IHBhZ2UgaW5wdXQgaW4gbW9iaWxlIG1vZGUuIFBhZ2VzIGNvdW50IHBhc3NlZCBhcyB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICAgICAqIEluIGNvbmp1Y3Rpb24gd2l0aCBAcGFnZUxhYmVsQmVmb3JlSW5wdXRNb2JpbGUgZ2VuZXJhdGVzIHRoZSBsYWJlbCBmb3IgdGhlIGlucHV0LlxuICAgICAqIEV4YW1wbGU6IHBhZ2VMYWJlbEJlZm9yZUlucHV0TW9iaWxlICsgaW5wdXQgKyAnb2YgNTAwJy5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IGkxOG4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsYWJlbEFmdGVySW5wdXRNb2JpbGU6IE51bGxhYmxlPChwYWdlc0NvdW50OiBudW1iZXIpID0+IHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIEN1cnJlbnQgcGFnZSBpbnB1dCBhcmlhIGxhYmVsLCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gKGN1cnJlbnRQYWdlOiBudW1iZXIsIHBhZ2VzQ291bnQ6IG51bWJlcikuXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBtYWlubHkgcHJvdmlkZWQgdG8gc3VwcG9ydCByZWFkaW5nIGluIHRoZSByaWdodCBsYW5ndWFnZSBmb3Igc2NyZWVuIHJlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0QXJpYUxhYmVsOiBOdWxsYWJsZTwoY3VycmVudFBhZ2U6IG51bWJlciwgcGFnZXNDb3VudDogbnVtYmVyKSA9PiBzdHJpbmc+O1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcGFnZSBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VDaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpdGVtcyBwZXIgcGFnZSBvcHRpb24gaXMgY2hhbmdlZC4qL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wYWdlc0JlZm9yZUN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXNBZnRlckN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHNcbiAgICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLCB0aGUgY3VycmVudCBwYWdlLCBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICAgKi9cbiAgICBnZXQgcGFnaW5hdGlvbk9iamVjdCgpOiBQYWdpbmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLml0ZW1zUGVyUGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sYXN0UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFRvdGFsUGFnZXModGhpcy5wYWdpbmF0aW9uT2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RvdGFsUGFnZXNFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnX190b3RhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX21vcmVFbGVtZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UubW9yZUVsZW1lbnRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50U2hvd2luZzogQ3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgICBvZjogMCxcbiAgICAgICAgdG90YWxDb3VudDogMFxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gREVGQVVMVF9JVEVNU19QRVJfUEFHRTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2l0ZW1zUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UGFnZSA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcz8uY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBjaGFuZ2VzLmN1cnJlbnRQYWdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVmcmVzaFBhZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fcnRsU2VydmljZT8ucnRsLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoUGFnZXMoKSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNraXBJdGVtUHJlZGljYXRlKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXkgPT09ICdub25lJyB8fFxuICAgICAgICAgICAgaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9PT0gJ3RydWUnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgcGFnZS5cbiAgICAgKiBAcGFyYW0gcGFnZSBUaGUgcGFnZSB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IChvcHRpb25hbCkuXG4gICAgICovXG4gICAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlID4gdGhpcy5fbGFzdFBhZ2UgfHwgcGFnZSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3RhcnQuZW1pdChwYWdlKTtcblxuICAgICAgICB0aGlzLl9hbm5vdW5jZVBhZ2UocGFnZSk7XG4gICAgfVxuXG4gICAgLyoqIE5hdmlnYXRlcyB0byB0aGUgZmlyc3QgcGFnZSAqL1xuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgcHJldmlvdXMgcGFnZS5cbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBwYWdlLlxuICAgICAqL1xuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcbiAgICB9XG5cbiAgICAvKiogTmF2aWdhdGVzIHRvIHRoZSBsYXN0IHBhZ2UgKi9cbiAgICBnb1RvTGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5fbGFzdFBhZ2UpO1xuICAgIH1cblxuICAgIC8qKiBAZGVwcmVjYXRlZCwgdXNlIHtAbGluayBwYWdpbmF0aW9uT2JqZWN0fSBnZXR0ZXIgaW5zdGVhZCAqL1xuICAgIGdldFBhZ2luYXRpb25PYmplY3QoKTogUGFnaW5hdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25PYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DaGFuZ2VQZXJQYWdlID0gKGV2ZW50OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBldmVudDtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zUGVyUGFnZSk7XG5cbiAgICAgICAgdGhpcy5fcmVmcmVzaFBhZ2VzKCk7XG5cbiAgICAgICAgY29uc3QgbWF4UGFnZSA9IHRoaXMuX3BhZ2VzW3RoaXMuX3BhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IG1heFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNoYW5nZVN0YXJ0LmVtaXQobWF4UGFnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmVzdG9yZUlucHV0VmFsdWUobW9kZWw6IE5nTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW9kZWwucmVzZXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucGFnaW5hdGlvbk9iamVjdDtcblxuICAgICAgICB0aGlzLl9wYWdlcyA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0UGFnZXMocGFnaW5hdGlvbik7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuX3BhZ2VzLmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICAgICAgdGhpcy5fcGFnZXNCZWZvcmVDdXJyZW50ID0gdGhpcy5fcGFnZXMuc2xpY2UoMCwgY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgIHRoaXMuX3BhZ2VzQWZ0ZXJDdXJyZW50ID0gdGhpcy5fcGFnZXMuc2xpY2UoY3VycmVudFBhZ2VJbmRleCArIDEpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlID8/IERFRkFVTFRfSVRFTVNfUEVSX1BBR0U7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgICAgICBmcm9tOiB0aGlzLmN1cnJlbnRQYWdlIC0gMSA9PT0gMCA/IDEgOiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlICsgMSxcbiAgICAgICAgICAgIHRvOiBNYXRoLm1pbigodGhpcy5jdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlICsgaXRlbXNQZXJQYWdlLCB0aGlzLnRvdGFsSXRlbXMpLFxuICAgICAgICAgICAgb2Y6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHRoaXMudG90YWxJdGVtc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgY3VycmVudCBwYWdlIGxpbmsvaW5wdXQgdXNpbmcgRm9jdXNLZXlNYW5hZ2VyXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzQ3VycmVudFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlTmF0aXZlRWxlbWVudCA9XG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2N1cnJlbnRQYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5ID09PSAnbm9uZSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3BhZ2VJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5fY3VycmVudFBhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9mb2N1c0tleU1hbmFnZXJJdGVtc1xuICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbS5uYXRpdmVFbGVtZW50ID09PSBjdXJyZW50UGFnZU5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlckxpc3QuZm9jdXNJdGVtKGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHBhZ2Ugc2l6ZSBvcHRpb25zIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuIEluY2x1ZGVzIG1ha2luZyBzdXJlIHRoYXRcbiAgICAgKiB0aGUgcGFnZSBzaXplIGlzIGFuIG9wdGlvbiBhbmQgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBubyBwYWdlIHNpemUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgZmlyc3QgcGFnZSBzaXplIG9wdGlvbiBvciB0aGUgZGVmYXVsdCBwYWdlIHNpemUuXG4gICAgICAgIGlmICghdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHRoaXMuaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPyB0aGlzLml0ZW1zUGVyUGFnZU9wdGlvbnNbMF0gOiBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zID0gdGhpcy5pdGVtc1BlclBhZ2VPcHRpb25zPy5zbGljZSgpID8/IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKHRoaXMuaXRlbXNQZXJQYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5pdGVtc1BlclBhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfYW5ub3VuY2VQYWdlKHBhZ2U6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgbGFiZWw6IHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsID0gdGhpcy5jdXJyZW50UGFnZUFyaWFMYWJlbChwYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9sYW5ndWFnZSk7XG4gICAgICAgICAgICBsYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShsYW5nLCAnY29yZVBhZ2luYXRpb24uY3VycmVudFBhZ2VBcmlhTGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgcGFnZU51bWJlcjogcGFnZSxcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiB0aGlzLnRvdGFsSXRlbXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UobGFiZWwpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbEl0ZW1zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlXCIgKm5nSWY9XCJpdGVtc1BlclBhZ2VUZW1wbGF0ZSB8fCBpdGVtc1BlclBhZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPCEtLSBub3RlLCB0aGF0IHdlJ3JlIGNoZWNraW5nIGZvciB0aGUgbGVuZ3RoIG9mIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBidXQgdXNpbmcgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgYXMgXCJwYWdlT3B0aW9uc1wiIC0tPlxuICAgICAgICA8IS0tIHRoZXNlIDIgY2FuIGJlIGRpZmZlcmVudCwgYXMgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgbWF5IGFsc28gaW5jbHVkZSBcIml0ZW1zUGVyUGFnZVwiIGlmIGl0J3Mgbm90IGluY2x1ZGVkIGluIG9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1zUGVyUGFnZVRlbXBsYXRlIHx8IHBlclBhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb25TZWxlY3Q6IF9vbkNoYW5nZVBlclBhZ2UsIHBhZ2VPcHRpb25zOiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmF2XG4gICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckxpc3RcbiAgICAgICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgW3NraXBQcmVkaWNhdGVdPVwic2tpcEl0ZW1QcmVkaWNhdGVcIlxuICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX25hdlwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24uYXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkaXNwbGF5VG90YWxJdGVtcyA/IF90b3RhbFBhZ2VzRWxlbWVudElkIDogbnVsbFwiXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtcyA+PSBpdGVtc1BlclBhZ2VcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLXJld2luZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaXJzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJmaXJzdExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24uZmlyc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImZpcnN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5maXJzdExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvbiBmZC1wYWdpbmF0aW9uX19idXR0b24tLW1vYmlsZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlyc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9GaXJzdFBhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub0ZpcnN0UGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLWxlZnQtYXJyb3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNMYWJlbCB8fCAoJ2NvcmVQYWdpbmF0aW9uLnByZXZpb3VzTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJwcmV2aW91c0xhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ucHJldmlvdXNMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8IS0tIER1cGxpY2F0ZWQgdG8gcHJlc2VydmUgdGhlIGl0ZW1zIG9yZGVyIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIF9wYWdlc0JlZm9yZUN1cnJlbnRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInBhZ2UgIT09IF9tb3JlRWxlbWVudFZhbHVlOyBlbHNlIG1vcmVcIlxuICAgICAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsID8gcGFnZUxhYmVsKHBhZ2UpIDogKCdjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsID8gcGFnZUxhYmVsKHBhZ2UpIDogKCdjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fbGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZ29Ub1BhZ2UocGFnZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgI2N1cnJlbnRQYWdlRWxlbWVudFxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHBhZ2VMYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IHBhZ2VMYWJlbChjdXJyZW50UGFnZSlcbiAgICAgICAgICAgICAgICAgICAgOiAoJ2NvcmVQYWdpbmF0aW9uLnBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UgfSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmsgaXMtYWN0aXZlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2UgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBsYWJlbEJlZm9yZUlucHV0TW9iaWxlXG4gICAgICAgICAgICAgICAgICAgID8gbGFiZWxCZWZvcmVJbnB1dE1vYmlsZSArICc6J1xuICAgICAgICAgICAgICAgICAgICA6ICgnY29yZVBhZ2luYXRpb24ubGFiZWxCZWZvcmVJbnB1dE1vYmlsZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjcGFnZUlucHV0RWxlbWVudFxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICBmZGtPbmx5RGlnaXRzXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgc2l6ZT1cIjFcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIFttYXhdPVwiX2xhc3RQYWdlXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJjdXJyZW50UGFnZU1vZGVsLmludmFsaWQgPyAnZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2lucHV0XCJcbiAgICAgICAgICAgICNjdXJyZW50UGFnZU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50UGFnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGlucHV0QXJpYUxhYmVsXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRBcmlhTGFiZWwoY3VycmVudFBhZ2UsIF90b3RhbFBhZ2VzKVxuICAgICAgICAgICAgICAgICAgICA6ICgnY29yZVBhZ2luYXRpb24uaW5wdXRBcmlhTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsIHRvdGFsQ291bnQ6IF90b3RhbFBhZ2VzIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2VNb2RlbC52YWx1ZSlcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2VNb2RlbC52YWx1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiX3Jlc3RvcmVJbnB1dFZhbHVlKGN1cnJlbnRQYWdlTW9kZWwpXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xhYmVsXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZVxuICAgICAgICAgICAgICAgICAgICA/IGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZShfbGFzdFBhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogKCdjb3JlUGFnaW5hdGlvbi5sYWJlbEFmdGVySW5wdXRNb2JpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsIHRvdGFsQ291bnQ6IF90b3RhbFBhZ2VzIH0pXG4gICAgICAgICAgICB9fVxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDwhLS0gRHVwbGljYXRlZCB0byBwcmVzZXJ2ZSB0aGUgaXRlbXMgb3JkZXIgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgX3BhZ2VzQWZ0ZXJDdXJyZW50XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlICE9PSBfbW9yZUVsZW1lbnRWYWx1ZTsgZWxzZSBtb3JlXCJcbiAgICAgICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VMYWJlbCA/IHBhZ2VMYWJlbChwYWdlKSA6ICgnY29yZVBhZ2luYXRpb24ucGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBwYWdlIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VMYWJlbCA/IHBhZ2VMYWJlbChwYWdlKSA6ICgnY29yZVBhZ2luYXRpb24ucGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBwYWdlIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmtcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdlKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub1BhZ2UocGFnZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibmV4dExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ubmV4dExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwibmV4dExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ubmV4dExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cIm5leHRQYWdlKClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLWZvcndhcmRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJsYXN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5sYXN0TGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJsYXN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5sYXN0TGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fYnV0dG9uIGZkLXBhZ2luYXRpb25fX2J1dHRvbi0tbW9iaWxlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNMYXN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0xhc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9MYXN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJnb1RvTGFzdFBhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L25hdj5cblxuICAgIDxzcGFuICpuZ0lmPVwiZGlzcGxheVRvdGFsSXRlbXNcIiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3RvdGFsXCIgW2F0dHIuaWRdPVwiX3RvdGFsUGFnZXNFbGVtZW50SWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlzcGxheVRleHRUZW1wbGF0ZSB8fCB0b3RhbFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzaG93aW5nOiBfY3VycmVudFNob3dpbmcgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNtb3JlPlxuICAgIDxzcGFuIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fbW9yZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGFyaWEtbGFiZWw9XCIuLi5cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0b3RhbCBsZXQtc2hvd2luZz1cInNob3dpbmdcIj5cbiAgICA8c3BhbiBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fdG90YWwtbGFiZWxcIj5cbiAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLnRvdGFsUmVzdWx0c0xhYmVsJyB8IGZkVHJhbnNsYXRlIDogX2N1cnJlbnRTaG93aW5nIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwZXJQYWdlIGxldC1wYWdlT3B0aW9ucz1cInBhZ2VPcHRpb25zXCI+XG4gICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19wZXItcGFnZS1sYWJlbFwiPlxuICAgICAgICB7eyBpdGVtc1BlclBhZ2VMYWJlbCA/IGl0ZW1zUGVyUGFnZUxhYmVsICsgJzonIDogKCdjb3JlUGFnaW5hdGlvbi5pdGVtc1BlclBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICA8L2xhYmVsPlxuXG4gICAgPGZkLXNlbGVjdCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlLXNlbGVjdFwiIFt2YWx1ZV09XCJpdGVtc1BlclBhZ2VcIiAodmFsdWVDaGFuZ2UpPVwiX29uQ2hhbmdlUGVyUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgIDxsaSBmZC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwYWdlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L2xpPlxuICAgIDwvZmQtc2VsZWN0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
500
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdoRSxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUU1QixVQUFVLEVBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFjLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFFaEgsa0VBQWtFO0FBQ2xFLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBVWxDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTNCOzs7Ozs7Ozs7R0FTRztBQWVILE1BQU0sT0FBTyxtQkFBbUI7SUFxQjVCLDREQUE0RDtJQUM1RCxJQUNJLE1BQU0sQ0FBQyxLQUFtQjtRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQU1ELDBDQUEwQztJQUMxQyxJQUNJLFdBQVcsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFDSSxZQUFZLENBQUMsS0FBYTtRQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBU0Q7Ozs7T0FJRztJQUNILElBQ0ksaUJBQWlCLENBQUMsS0FBYTtRQUMvQixPQUFPLENBQUMsSUFBSSxDQUNSLGlIQUFpSCxDQUNwSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQUtELGlEQUFpRDtJQUNqRCxJQUNJLG1CQUFtQixDQUFDLEtBQWU7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBUyxLQUFLLENBQUM7YUFDakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFhRDs7OztPQUlHO0lBQ0gsSUFDSSxVQUFVLENBQUMsS0FBYTtRQUN4QixPQUFPLENBQUMsSUFBSSxDQUNSLG1HQUFtRyxDQUN0RyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILElBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FDUix5R0FBeUcsQ0FDNUcsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxJQUNJLFNBQVMsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUdBQWlHLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFLRDs7OztPQUlHO0lBQ0gsSUFDSSxTQUFTLENBQUMsS0FBYTtRQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILElBQ0ksU0FBUyxDQUFDLEtBQWE7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxpR0FBaUcsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxJQUNJLFNBQVMsQ0FBQyxLQUF5QztRQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILElBQ0ksb0JBQW9CLENBQUMsS0FBZ0Q7UUFDckUsT0FBTyxDQUFDLElBQUksQ0FDUix1SEFBdUgsQ0FDMUgsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RDLENBQUM7SUFLRDs7Ozs7O09BTUc7SUFDSCw4REFBOEQ7SUFDOUQsSUFDSSxzQkFBc0IsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQ1IsMkhBQTJILENBQzlILENBQUM7UUFDRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN4QyxDQUFDO0lBS0Q7Ozs7OztPQU1HO0lBQ0gsSUFDSSxxQkFBcUIsQ0FBQyxLQUErQztRQUNyRSxPQUFPLENBQUMsSUFBSSxDQUNSLHlIQUF5SCxDQUM1SCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDdkMsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxJQUNJLGNBQWMsQ0FBQyxLQUFvRTtRQUNuRixPQUFPLENBQUMsSUFBSSxDQUNSLDJHQUEyRyxDQUM5RyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBc0JEOzs7T0FHRztJQUNILElBQUksZ0JBQWdCO1FBQ2hCLE9BQU87WUFDSCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNsQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFDbkQsQ0FBQztJQStCRCxjQUFjO0lBQ2QsSUFBWSxNQUFNO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUNxQixpQkFBb0MsRUFDcEMsSUFBdUIsRUFDdkIsY0FBNkIsRUFDUixTQUFpQyxFQUMxQyxXQUF1QixFQUMzQyx1QkFBK0M7UUFMdkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUNSLGNBQVMsR0FBVCxTQUFTLENBQXdCO1FBQzFDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQzNDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFyWTVELDhFQUE4RTtRQUU5RSxPQUFFLEdBQVcsZ0JBQWdCLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQStFckQsb0RBQW9EO1FBRXBELHNCQUFpQixHQUFHLElBQUksQ0FBQztRQThNekIsOENBQThDO1FBRTlDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUU3QywwREFBMEQ7UUFFMUQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVoRCxjQUFjO1FBQ2QsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQWtEdEIsY0FBYztRQUNkLG9CQUFlLEdBQW1CO1lBQzlCLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsQ0FBQztZQUNMLFVBQVUsRUFBRSxDQUFDO1NBQ2hCLENBQUM7UUFFRixjQUFjO1FBQ2QsOEJBQXlCLEdBQWEsRUFBRSxDQUFDO1FBRXpDLGNBQWM7UUFDTixrQkFBYSxHQUFXLHNCQUFzQixDQUFDO1FBRXZELGNBQWM7UUFDTixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBS3hCLGNBQWM7UUFDTixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUV6QixjQUFjO1FBQ04sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVDLGNBQWM7UUFDTix5QkFBb0IsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFzR3pELGNBQWM7UUFDZCxxQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBUSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RDO1FBQ0wsQ0FBQyxDQUFDO0lBbEdDLENBQUM7SUFFSixjQUFjO0lBQ2QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRTtZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDeEI7YUFBTTtZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDL0UsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7YUFDakM7U0FDSjtRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCLENBQUMsSUFBUztRQUN2QixPQUFPLENBQ0gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNO1lBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLE1BQU0sQ0FDekQsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNuQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxhQUFhO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxZQUFZO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxtQkFBbUI7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLCtGQUErRixDQUFDLENBQUM7UUFDOUcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQWVELGNBQWM7SUFDZCxrQkFBa0IsQ0FBQyxLQUFjO1FBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLElBQUksc0JBQXNCLENBQUM7UUFFdkUsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQztZQUNoRixFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ25GLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDOUIsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3JCLE1BQU0sd0JBQXdCLEdBQzFCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTTtZQUN2RSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWE7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7UUFFakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQjthQUNuQyxPQUFPLEVBQUU7YUFDVCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssd0JBQXdCLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSywrQkFBK0I7UUFDbkMsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztTQUMvRztRQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXpFLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxRDtRQUVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztJQUNOLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBWTtRQUNwQyxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLHFDQUFxQyxFQUFFO2dCQUNuRixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs4R0F6a0JRLG1CQUFtQixpSEFvWmhCLFdBQVc7a0dBcFpkLG1CQUFtQixxN0JBWGpCLENBQUMsaUJBQWlCLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxnRkFhdEQsNEJBQTRCLG1JQVFBLFVBQVUsb0hBSVIsVUFBVSx3REFSckMsNEJBQTRCLHFFQ2hGOUMsNC9SQXVOQTs7MkZEN0lhLG1CQUFtQjtrQkFkL0IsU0FBUzsrQkFDSSxlQUFlLGFBRWQsQ0FBQyxpQkFBaUIsRUFBRSwrQkFBK0IsRUFBRSxDQUFDLFFBQzNEO3dCQUNGLEtBQUssRUFBRSxlQUFlO3dCQUN0QiwrQkFBK0IsRUFBRSxRQUFRO3dCQUN6Qyw4QkFBOEIsRUFBRSxnQkFBZ0I7cUJBQ25ELGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBRXBCLHVCQUF1QixDQUFDLE1BQU0sdUJBQzFCLElBQUk7OzBCQXNacEIsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTtpRkFsWkosb0JBQW9CO3NCQUQ1QixTQUFTO3VCQUFDLDRCQUE0QjtnQkFLOUIscUJBQXFCO3NCQUQ3QixZQUFZO3VCQUFDLDRCQUE0QjtnQkFLakMsaUJBQWlCO3NCQUR6QixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLMUMsbUJBQW1CO3NCQUQzQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLckQsRUFBRTtzQkFERCxLQUFLO2dCQUtGLE1BQU07c0JBRFQsS0FBSztnQkFVTixVQUFVO3NCQURULEtBQUs7Z0JBS0YsV0FBVztzQkFEZCxLQUFLO2dCQVVGLFlBQVk7c0JBRGYsS0FBSztnQkFpQk4sb0JBQW9CO3NCQURuQixLQUFLO2dCQVNGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFpQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWdCTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBUU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFxQkYsYUFBYTtzQkFEaEIsS0FBSztnQkFxQkYsU0FBUztzQkFEWixLQUFLO2dCQW1CRixTQUFTO3NCQURaLEtBQUs7Z0JBbUJGLFNBQVM7c0JBRFosS0FBSztnQkFtQkYsU0FBUztzQkFEWixLQUFLO2dCQW1CRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBd0JGLHNCQUFzQjtzQkFEekIsS0FBSztnQkF1QkYscUJBQXFCO3NCQUR4QixLQUFLO2dCQXFCRixjQUFjO3NCQURqQixLQUFLO2dCQWlCTixlQUFlO3NCQURkLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQXJyYXksIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgICBGb2N1c0tleU1hbmFnZXJJdGVtRGlyZWN0aXZlLFxuICAgIEZvY3VzS2V5TWFuYWdlckxpc3REaXJlY3RpdmUsXG4gICAgTnVsbGFibGUsXG4gICAgUnRsU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICcuL3BhZ2luYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3BhZ2luYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbi8qKiBDb25zdGFudCByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLiAqL1xuY29uc3QgREVGQVVMVF9JVEVNU19QRVJfUEFHRSA9IDEwO1xuXG5pbnRlcmZhY2UgQ3VycmVudFNob3dpbmcge1xuICAgIGZyb206IG51bWJlcjtcbiAgICB0bzogbnVtYmVyO1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaGFzIGJlZW4gcmVuYW1lZCB0byBcInRvdGFsQ291bnRcIiAqL1xuICAgIG9mOiBudW1iZXI7XG59XG5cbmxldCBwYWdpbmF0aW9uVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgbmF2aWdhdGlvbiBiZXR3ZWVuIHBhZ2VkIGluZm9ybWF0aW9uLlxuICogYGBgaHRtbFxuICogPGZkLXBhZ2luYXRpb25cbiAqICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cIjUwXCJcbiAqICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiMTBcIlxuICogICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIjNcIj5cbiAqIDwvZmQtcGFnaW5hdGlvbj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXBhZ2luYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtQYWdpbmF0aW9uU2VydmljZSwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtcGFnaW5hdGlvbicsXG4gICAgICAgICdbY2xhc3MuZmQtcGFnaW5hdGlvbi0tbW9iaWxlXSc6ICdtb2JpbGUnLFxuICAgICAgICAnW2NsYXNzLmZkLXBhZ2luYXRpb24tLXNob3J0XSc6ICdfbGFzdFBhZ2UgPD0gOSdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlKVxuICAgIHJlYWRvbmx5IF9mb2N1c0tleU1hbmFnZXJMaXN0OiBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzS2V5TWFuYWdlckl0ZW1zOiBRdWVyeUxpc3Q8Rm9jdXNLZXlNYW5hZ2VySXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BhZ2VJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSBfcGFnZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY3VycmVudFBhZ2VFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgX2N1cnJlbnRQYWdlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBJZCBmb3IgdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LiBJZiBvbWl0dGVkLCBhIHVuaXF1ZSBvbmUgaXMgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZC1wYWdpbmF0aW9uLScgKyBwYWdpbmF0aW9uVW5pcXVlSWQrKztcblxuICAgIC8qKiBXaGV0aGVyIGNvbXBvbmVudCBzaG91bGQgYmUgc2hvd24gaW4gdGhlIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1vYmlsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX21vYmlsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2JpbGU7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcblxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBNYXRoLmZsb29yKGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAxKSk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIERFRkFVTFRfSVRFTVNfUEVSX1BBR0UpKTtcblxuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBNYXRoLm1heCh2YWx1ZSwgMSk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlIHNob3cgcmFuZ2Ugb2YgaXRlbSBieSBjdXJyZW50IHBhZ2Ugb2YgaXRlbXMuXG4gICAgICogSXQgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGBpdGVtc1BlclBhZ2VPcHRpb25zYCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zUGVyUGFnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3Igb3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBtYWlubHkgcHJvdmlkZWQgdG8gc3VwcG9ydCByZWFkaW5nIGluIHRoZSByaWdodCBsYW5ndWFnZSBmb3Igc2NyZWVuIHJlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2VMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgaXRlbXNQZXJQYWdlTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5pdGVtc1BlclBhZ2VMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaXRlbXNQZXJQYWdlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZUxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2VPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zID0gY29lcmNlQXJyYXk8bnVtYmVyPih2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoKHYpID0+IGNvZXJjZU51bWJlclByb3BlcnR5KHYsIDApKVxuICAgICAgICAgICAgLm1hcCgodikgPT4gTWF0aC5mbG9vcih2KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYgPiAwKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1zUGVyUGFnZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5VG90YWxJdGVtcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgc2hvdyByYW5nZSBvZiBpdGVtIGJ5IGN1cnJlbnQgcGFnZSBvZiBpdGVtcy5cbiAgICAgKiBEZWZhdWx0IHZpZXc6IFNob3dpbmcge3sgZnJvbSB9fS17eyB0byB9fSBvZiB7eyBvZiB9fVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVRleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHRoZSAnZmlyc3QnIHBhZ2UgYnV0dG9uLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmlyc3RMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgZmlyc3RMYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVQYWdpbmF0aW9uLmZpcnN0TGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ZpcnN0TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpcnN0TGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHRoZSAncHJldmlvdXMnIHBhZ2UgYnV0dG9uLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJldmlvdXNMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgcHJldmlvdXNMYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVQYWdpbmF0aW9uLnByZXZpb3VzTGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcHJldmlvdXNMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHRoZSAnbmV4dCcgcGFnZSBidXR0b24uXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBtYWlubHkgcHJvdmlkZWQgdG8gc3VwcG9ydCByZWFkaW5nIGluIHRoZSByaWdodCBsYW5ndWFnZSBmb3Igc2NyZWVuIHJlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuZXh0TGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJQcm9wZXJ0eSBuZXh0TGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5uZXh0TGFiZWwnIGtleSBpbnN0ZWFkLlwiKTtcbiAgICAgICAgdGhpcy5fbmV4dExhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG5leHRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmV4dExhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmV4dExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciB0aGUgJ2xhc3QnIHBhZ2UgYnV0dG9uLlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbGFzdExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiUHJvcGVydHkgbGFzdExhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZVBhZ2luYXRpb24ubGFzdExhYmVsJyBrZXkgaW5zdGVhZC5cIik7XG4gICAgICAgIHRoaXMuX2xhc3RMYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBsYXN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBBcmlhIGxhYmVsIGZvciB0aGUgbmF2aWdhdGlvbiBlbGVtZW50XG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBtYWlubHkgcHJvdmlkZWQgdG8gc3VwcG9ydCByZWFkaW5nIGluIHRoZSByaWdodCBsYW5ndWFnZSBmb3Igc2NyZWVuIHJlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJQcm9wZXJ0eSBhcmlhTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5hcmlhTGFiZWwnIGtleSBpbnN0ZWFkLlwiKTtcbiAgICAgICAgdGhpcy5fYXJpYUxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXJpYUxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciB0aGUgJ1BhZ2UgJyBwYWdlIGJ1dHRvbi4gUGFnZSBudW1iZXIgcGFzc2VkIGFzIGZ1bmN0aW9uIHBhcmFtZXRlci5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHBhZ2VMYWJlbCh2YWx1ZTogTnVsbGFibGU8KHBhZ2U6IG51bWJlcikgPT4gc3RyaW5nPikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJQcm9wZXJ0eSBwYWdlTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIGtleSBpbnN0ZWFkLlwiKTtcbiAgICAgICAgdGhpcy5fcGFnZUxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHBhZ2VMYWJlbCgpOiBOdWxsYWJsZTwocGFnZTogbnVtYmVyKSA9PiBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhZ2VMYWJlbDogTnVsbGFibGU8KHBhZ2U6IG51bWJlcikgPT4gc3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogRnVuY3Rpb24gdG8gY3JlYXRlIGN1cnJlbnQgcGFnZSBhcmlhIGxhYmVsLCBjdXJyZW50IHBhZ2UgcGFzc2VkIGFzIGEgcGFyYW1ldGVyIG9mIHRoZSBmdW5jdGlvblxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVhZGluZyBpbiB0aGUgcmlnaHQgbGFuZ3VhZ2UgZm9yIHNjcmVlbiByZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY3VycmVudFBhZ2VBcmlhTGFiZWwodmFsdWU6IE51bGxhYmxlPChjdXJyZW50UGFnZTogbnVtYmVyKSA9PiBzdHJpbmc+KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgY3VycmVudFBhZ2VBcmlhTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5jdXJyZW50UGFnZUFyaWFMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhZ2VBcmlhTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudFBhZ2VBcmlhTGFiZWwoKTogTnVsbGFibGU8KGN1cnJlbnRQYWdlOiBudW1iZXIpID0+IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2VBcmlhTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UGFnZUFyaWFMYWJlbDogTnVsbGFibGU8KGN1cnJlbnRQYWdlOiBudW1iZXIpID0+IHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFBhZ2UgbGFiZWwgdG8gYmUgc2hvd24gYmVmb3JlIGN1cnJlbnQgcGFnZSBpbnB1dCBpbiBtb2JpbGUgbW9kZS5cbiAgICAgKiBJbiBjb25qdWN0aW9uIHdpdGggQHBhZ2VMYWJlbEFmdGVySW5wdXRNb2JpbGUgZ2VuZXJhdGVzIHRoZSBsYWJlbCBmb3IgdGhlIGlucHV0LlxuICAgICAqIEV4YW1wbGU6ICdQYWdlJyArIGlucHV0ICsgcGFnZUxhYmVsQWZ0ZXJJbnB1dE1vYmlsZVxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgbWFpbmx5IHByb3ZpZGVkIHRvIHN1cHBvcnQgaTE4bi5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQmVmb3JlSW5wdXRNb2JpbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlByb3BlcnR5IGxhYmVsQmVmb3JlSW5wdXRNb2JpbGUgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5sYWJlbEJlZm9yZUlucHV0TW9iaWxlJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9sYWJlbEJlZm9yZUlucHV0TW9iaWxlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQmVmb3JlSW5wdXRNb2JpbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQmVmb3JlSW5wdXRNb2JpbGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbEJlZm9yZUlucHV0TW9iaWxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFBhZ2UgbGFiZWwgdG8gYmUgc2hvd24gYWZ0ZXIgY3VycmVudCBwYWdlIGlucHV0IGluIG1vYmlsZSBtb2RlLiBQYWdlcyBjb3VudCBwYXNzZWQgYXMgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlci5cbiAgICAgKiBJbiBjb25qdWN0aW9uIHdpdGggQHBhZ2VMYWJlbEJlZm9yZUlucHV0TW9iaWxlIGdlbmVyYXRlcyB0aGUgbGFiZWwgZm9yIHRoZSBpbnB1dC5cbiAgICAgKiBFeGFtcGxlOiBwYWdlTGFiZWxCZWZvcmVJbnB1dE1vYmlsZSArIGlucHV0ICsgJ29mIDUwMCcuXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBtYWlubHkgcHJvdmlkZWQgdG8gc3VwcG9ydCBpMThuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZSh2YWx1ZTogTnVsbGFibGU8KHBhZ2VzQ291bnQ6IG51bWJlcikgPT4gc3RyaW5nPikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlByb3BlcnR5IGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZSBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVQYWdpbmF0aW9uLmxhYmVsQWZ0ZXJJbnB1dE1vYmlsZScga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbGFiZWxBZnRlcklucHV0TW9iaWxlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZSgpOiBOdWxsYWJsZTwocGFnZXNDb3VudDogbnVtYmVyKSA9PiBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQWZ0ZXJJbnB1dE1vYmlsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhYmVsQWZ0ZXJJbnB1dE1vYmlsZTogTnVsbGFibGU8KHBhZ2VzQ291bnQ6IG51bWJlcikgPT4gc3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogQ3VycmVudCBwYWdlIGlucHV0IGFyaWEgbGFiZWwsIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiAoY3VycmVudFBhZ2U6IG51bWJlciwgcGFnZXNDb3VudDogbnVtYmVyKS5cbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG1haW5seSBwcm92aWRlZCB0byBzdXBwb3J0IHJlYWRpbmcgaW4gdGhlIHJpZ2h0IGxhbmd1YWdlIGZvciBzY3JlZW4gcmVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlucHV0QXJpYUxhYmVsKHZhbHVlOiBOdWxsYWJsZTwoY3VycmVudFBhZ2U6IG51bWJlciwgcGFnZXNDb3VudDogbnVtYmVyKSA9PiBzdHJpbmc+KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiUHJvcGVydHkgaW5wdXRBcmlhTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlUGFnaW5hdGlvbi5pbnB1dEFyaWFMYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faW5wdXRBcmlhTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaW5wdXRBcmlhTGFiZWwoKTogTnVsbGFibGU8KGN1cnJlbnRQYWdlOiBudW1iZXIsIHBhZ2VzQ291bnQ6IG51bWJlcikgPT4gc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dEFyaWFMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lucHV0QXJpYUxhYmVsOiBOdWxsYWJsZTwoY3VycmVudFBhZ2U6IG51bWJlciwgcGFnZXNDb3VudDogbnVtYmVyKSA9PiBzdHJpbmc+O1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcGFnZSBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VDaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpdGVtcyBwZXIgcGFnZSBvcHRpb24gaXMgY2hhbmdlZC4qL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wYWdlc0JlZm9yZUN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXNBZnRlckN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHNcbiAgICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLCB0aGUgY3VycmVudCBwYWdlLCBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICAgKi9cbiAgICBnZXQgcGFnaW5hdGlvbk9iamVjdCgpOiBQYWdpbmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLml0ZW1zUGVyUGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sYXN0UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFRvdGFsUGFnZXModGhpcy5wYWdpbmF0aW9uT2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RvdGFsUGFnZXNFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnX190b3RhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX21vcmVFbGVtZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UubW9yZUVsZW1lbnRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50U2hvd2luZzogQ3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgICBvZjogMCxcbiAgICAgICAgdG90YWxDb3VudDogMFxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gREVGQVVMVF9JVEVNU19QRVJfUEFHRTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2l0ZW1zUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UGFnZSA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcz8uY3VycmVudFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBjaGFuZ2VzLmN1cnJlbnRQYWdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2UgfHwgdGhpcy5jdXJyZW50UGFnZSA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0VG90YWxQYWdlcyh0aGlzLnBhZ2luYXRpb25PYmplY3QpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVmcmVzaFBhZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fcnRsU2VydmljZT8ucnRsLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoUGFnZXMoKSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNraXBJdGVtUHJlZGljYXRlKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXkgPT09ICdub25lJyB8fFxuICAgICAgICAgICAgaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9PT0gJ3RydWUnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgcGFnZS5cbiAgICAgKiBAcGFyYW0gcGFnZSBUaGUgcGFnZSB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IChvcHRpb25hbCkuXG4gICAgICovXG4gICAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlID4gdGhpcy5fbGFzdFBhZ2UgfHwgcGFnZSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3RhcnQuZW1pdChwYWdlKTtcblxuICAgICAgICB0aGlzLl9hbm5vdW5jZVBhZ2UocGFnZSk7XG4gICAgfVxuXG4gICAgLyoqIE5hdmlnYXRlcyB0byB0aGUgZmlyc3QgcGFnZSAqL1xuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgcHJldmlvdXMgcGFnZS5cbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBwYWdlLlxuICAgICAqL1xuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcbiAgICB9XG5cbiAgICAvKiogTmF2aWdhdGVzIHRvIHRoZSBsYXN0IHBhZ2UgKi9cbiAgICBnb1RvTGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5fbGFzdFBhZ2UpO1xuICAgIH1cblxuICAgIC8qKiBAZGVwcmVjYXRlZCwgdXNlIHtAbGluayBwYWdpbmF0aW9uT2JqZWN0fSBnZXR0ZXIgaW5zdGVhZCAqL1xuICAgIGdldFBhZ2luYXRpb25PYmplY3QoKTogUGFnaW5hdGlvbiB7XG4gICAgICAgIGNvbnNvbGUud2FybignUGFnaW5hdGlvbkNvbXBvbmVudDogZ2V0UGFnaW5hdGlvbk9iamVjdCgpIGlzIGRlcHJlY2F0ZWQsIHVzZSBwYWdpbmF0aW9uT2JqZWN0IGdldHRlciBpbnN0ZWFkJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25PYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DaGFuZ2VQZXJQYWdlID0gKGV2ZW50OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBldmVudDtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zUGVyUGFnZSk7XG5cbiAgICAgICAgdGhpcy5fcmVmcmVzaFBhZ2VzKCk7XG5cbiAgICAgICAgY29uc3QgbWF4UGFnZSA9IHRoaXMuX3BhZ2VzW3RoaXMuX3BhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IG1heFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNoYW5nZVN0YXJ0LmVtaXQobWF4UGFnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmVzdG9yZUlucHV0VmFsdWUobW9kZWw6IE5nTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW9kZWwucmVzZXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucGFnaW5hdGlvbk9iamVjdDtcblxuICAgICAgICB0aGlzLl9wYWdlcyA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0UGFnZXMocGFnaW5hdGlvbik7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuX3BhZ2VzLmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICAgICAgdGhpcy5fcGFnZXNCZWZvcmVDdXJyZW50ID0gdGhpcy5fcGFnZXMuc2xpY2UoMCwgY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgIHRoaXMuX3BhZ2VzQWZ0ZXJDdXJyZW50ID0gdGhpcy5fcGFnZXMuc2xpY2UoY3VycmVudFBhZ2VJbmRleCArIDEpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlID8/IERFRkFVTFRfSVRFTVNfUEVSX1BBR0U7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgICAgICBmcm9tOiB0aGlzLmN1cnJlbnRQYWdlIC0gMSA9PT0gMCA/IDEgOiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlICsgMSxcbiAgICAgICAgICAgIHRvOiBNYXRoLm1pbigodGhpcy5jdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlICsgaXRlbXNQZXJQYWdlLCB0aGlzLnRvdGFsSXRlbXMpLFxuICAgICAgICAgICAgb2Y6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHRoaXMudG90YWxJdGVtc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgY3VycmVudCBwYWdlIGxpbmsvaW5wdXQgdXNpbmcgRm9jdXNLZXlNYW5hZ2VyXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzQ3VycmVudFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlTmF0aXZlRWxlbWVudCA9XG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2N1cnJlbnRQYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5ID09PSAnbm9uZSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3BhZ2VJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5fY3VycmVudFBhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9mb2N1c0tleU1hbmFnZXJJdGVtc1xuICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbS5uYXRpdmVFbGVtZW50ID09PSBjdXJyZW50UGFnZU5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlckxpc3QuZm9jdXNJdGVtKGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHBhZ2Ugc2l6ZSBvcHRpb25zIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuIEluY2x1ZGVzIG1ha2luZyBzdXJlIHRoYXRcbiAgICAgKiB0aGUgcGFnZSBzaXplIGlzIGFuIG9wdGlvbiBhbmQgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBubyBwYWdlIHNpemUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgZmlyc3QgcGFnZSBzaXplIG9wdGlvbiBvciB0aGUgZGVmYXVsdCBwYWdlIHNpemUuXG4gICAgICAgIGlmICghdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHRoaXMuaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPyB0aGlzLml0ZW1zUGVyUGFnZU9wdGlvbnNbMF0gOiBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zID0gdGhpcy5pdGVtc1BlclBhZ2VPcHRpb25zPy5zbGljZSgpID8/IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKHRoaXMuaXRlbXNQZXJQYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5pdGVtc1BlclBhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfYW5ub3VuY2VQYWdlKHBhZ2U6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgbGFiZWw6IHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsID0gdGhpcy5jdXJyZW50UGFnZUFyaWFMYWJlbChwYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9sYW5ndWFnZSk7XG4gICAgICAgICAgICBsYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShsYW5nLCAnY29yZVBhZ2luYXRpb24uY3VycmVudFBhZ2VBcmlhTGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgcGFnZU51bWJlcjogcGFnZSxcbiAgICAgICAgICAgICAgICB0b3RhbENvdW50OiB0aGlzLnRvdGFsSXRlbXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UobGFiZWwpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbEl0ZW1zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlXCIgKm5nSWY9XCJpdGVtc1BlclBhZ2VUZW1wbGF0ZSB8fCBpdGVtc1BlclBhZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPCEtLSBub3RlLCB0aGF0IHdlJ3JlIGNoZWNraW5nIGZvciB0aGUgbGVuZ3RoIG9mIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBidXQgdXNpbmcgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgYXMgXCJwYWdlT3B0aW9uc1wiIC0tPlxuICAgICAgICA8IS0tIHRoZXNlIDIgY2FuIGJlIGRpZmZlcmVudCwgYXMgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgbWF5IGFsc28gaW5jbHVkZSBcIml0ZW1zUGVyUGFnZVwiIGlmIGl0J3Mgbm90IGluY2x1ZGVkIGluIG9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1zUGVyUGFnZVRlbXBsYXRlIHx8IHBlclBhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb25TZWxlY3Q6IF9vbkNoYW5nZVBlclBhZ2UsIHBhZ2VPcHRpb25zOiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmF2XG4gICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckxpc3RcbiAgICAgICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgW3NraXBQcmVkaWNhdGVdPVwic2tpcEl0ZW1QcmVkaWNhdGVcIlxuICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX25hdlwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24uYXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkaXNwbGF5VG90YWxJdGVtcyA/IF90b3RhbFBhZ2VzRWxlbWVudElkIDogbnVsbFwiXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtcyA+PSBpdGVtc1BlclBhZ2VcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLXJld2luZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaXJzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJmaXJzdExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24uZmlyc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImZpcnN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5maXJzdExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvbiBmZC1wYWdpbmF0aW9uX19idXR0b24tLW1vYmlsZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlyc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9GaXJzdFBhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub0ZpcnN0UGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLWxlZnQtYXJyb3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNMYWJlbCB8fCAoJ2NvcmVQYWdpbmF0aW9uLnByZXZpb3VzTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJwcmV2aW91c0xhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ucHJldmlvdXNMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8IS0tIER1cGxpY2F0ZWQgdG8gcHJlc2VydmUgdGhlIGl0ZW1zIG9yZGVyIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIF9wYWdlc0JlZm9yZUN1cnJlbnRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInBhZ2UgIT09IF9tb3JlRWxlbWVudFZhbHVlOyBlbHNlIG1vcmVcIlxuICAgICAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsID8gcGFnZUxhYmVsKHBhZ2UpIDogKCdjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsID8gcGFnZUxhYmVsKHBhZ2UpIDogKCdjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fbGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZ29Ub1BhZ2UocGFnZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgI2N1cnJlbnRQYWdlRWxlbWVudFxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIHBhZ2VMYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IHBhZ2VMYWJlbChjdXJyZW50UGFnZSlcbiAgICAgICAgICAgICAgICAgICAgOiAoJ2NvcmVQYWdpbmF0aW9uLnBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UgfSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmsgaXMtYWN0aXZlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2UgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBsYWJlbEJlZm9yZUlucHV0TW9iaWxlXG4gICAgICAgICAgICAgICAgICAgID8gbGFiZWxCZWZvcmVJbnB1dE1vYmlsZSArICc6J1xuICAgICAgICAgICAgICAgICAgICA6ICgnY29yZVBhZ2luYXRpb24ubGFiZWxCZWZvcmVJbnB1dE1vYmlsZScgfCBmZFRyYW5zbGF0ZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjcGFnZUlucHV0RWxlbWVudFxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICBmZGtPbmx5RGlnaXRzXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgc2l6ZT1cIjFcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIFttYXhdPVwiX2xhc3RQYWdlXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJjdXJyZW50UGFnZU1vZGVsLmludmFsaWQgPyAnZXJyb3InIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2lucHV0XCJcbiAgICAgICAgICAgICNjdXJyZW50UGFnZU1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50UGFnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGlucHV0QXJpYUxhYmVsXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXRBcmlhTGFiZWwoY3VycmVudFBhZ2UsIF90b3RhbFBhZ2VzKVxuICAgICAgICAgICAgICAgICAgICA6ICgnY29yZVBhZ2luYXRpb24uaW5wdXRBcmlhTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsIHRvdGFsQ291bnQ6IF90b3RhbFBhZ2VzIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2VNb2RlbC52YWx1ZSlcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2VNb2RlbC52YWx1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiX3Jlc3RvcmVJbnB1dFZhbHVlKGN1cnJlbnRQYWdlTW9kZWwpXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xhYmVsXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZVxuICAgICAgICAgICAgICAgICAgICA/IGxhYmVsQWZ0ZXJJbnB1dE1vYmlsZShfbGFzdFBhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogKCdjb3JlUGFnaW5hdGlvbi5sYWJlbEFmdGVySW5wdXRNb2JpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UsIHRvdGFsQ291bnQ6IF90b3RhbFBhZ2VzIH0pXG4gICAgICAgICAgICB9fVxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDwhLS0gRHVwbGljYXRlZCB0byBwcmVzZXJ2ZSB0aGUgaXRlbXMgb3JkZXIgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgX3BhZ2VzQWZ0ZXJDdXJyZW50XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlICE9PSBfbW9yZUVsZW1lbnRWYWx1ZTsgZWxzZSBtb3JlXCJcbiAgICAgICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VMYWJlbCA/IHBhZ2VMYWJlbChwYWdlKSA6ICgnY29yZVBhZ2luYXRpb24ucGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBwYWdlIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VMYWJlbCA/IHBhZ2VMYWJlbChwYWdlKSA6ICgnY29yZVBhZ2luYXRpb24ucGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBwYWdlIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmtcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdlKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub1BhZ2UocGFnZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibmV4dExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ubmV4dExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwibmV4dExhYmVsIHx8ICgnY29yZVBhZ2luYXRpb24ubmV4dExhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cIm5leHRQYWdlKClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLWZvcndhcmRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJsYXN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5sYXN0TGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJsYXN0TGFiZWwgfHwgKCdjb3JlUGFnaW5hdGlvbi5sYXN0TGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fYnV0dG9uIGZkLXBhZ2luYXRpb25fX2J1dHRvbi0tbW9iaWxlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNMYXN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0xhc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImdvVG9MYXN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJnb1RvTGFzdFBhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L25hdj5cblxuICAgIDxzcGFuICpuZ0lmPVwiZGlzcGxheVRvdGFsSXRlbXNcIiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3RvdGFsXCIgW2F0dHIuaWRdPVwiX3RvdGFsUGFnZXNFbGVtZW50SWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlzcGxheVRleHRUZW1wbGF0ZSB8fCB0b3RhbFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzaG93aW5nOiBfY3VycmVudFNob3dpbmcgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNtb3JlPlxuICAgIDxzcGFuIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fbW9yZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGFyaWEtbGFiZWw9XCIuLi5cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0b3RhbCBsZXQtc2hvd2luZz1cInNob3dpbmdcIj5cbiAgICA8c3BhbiBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fdG90YWwtbGFiZWxcIj5cbiAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLnRvdGFsUmVzdWx0c0xhYmVsJyB8IGZkVHJhbnNsYXRlIDogX2N1cnJlbnRTaG93aW5nIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwZXJQYWdlIGxldC1wYWdlT3B0aW9ucz1cInBhZ2VPcHRpb25zXCI+XG4gICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19wZXItcGFnZS1sYWJlbFwiPlxuICAgICAgICB7eyBpdGVtc1BlclBhZ2VMYWJlbCA/IGl0ZW1zUGVyUGFnZUxhYmVsICsgJzonIDogKCdjb3JlUGFnaW5hdGlvbi5pdGVtc1BlclBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICA8L2xhYmVsPlxuXG4gICAgPGZkLXNlbGVjdCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlLXNlbGVjdFwiIFt2YWx1ZV09XCJpdGVtc1BlclBhZ2VcIiAodmFsdWVDaGFuZ2UpPVwiX29uQ2hhbmdlUGVyUGFnZSgkZXZlbnQpXCI+XG4gICAgICAgIDxsaSBmZC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwYWdlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L2xpPlxuICAgIDwvZmQtc2VsZWN0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==