ng-miam 6.4.13 → 7.0.0

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 (208) hide show
  1. package/bundles/ng-miam.umd.js +8539 -10855
  2. package/bundles/ng-miam.umd.js.map +1 -1
  3. package/bundles/ng-miam.umd.min.js +2 -2
  4. package/bundles/ng-miam.umd.min.js.map +1 -1
  5. package/esm2015/lib/_components/abstracts/event-tracer.component.js +3 -2
  6. package/esm2015/lib/_components/accordion/accordion.component.js +75 -0
  7. package/esm2015/lib/_components/components.module.js +27 -21
  8. package/esm2015/lib/_components/counter-input/counter-input.component.js +86 -76
  9. package/esm2015/lib/_components/icon/icon.component.js +1 -1
  10. package/esm2015/lib/_components/index.js +5 -5
  11. package/esm2015/lib/_components/like-button/like-button.component.js +1 -1
  12. package/esm2015/lib/_components/list-input/list-input.component.js +5 -5
  13. package/esm2015/lib/_components/loader/loader.component.js +1 -1
  14. package/esm2015/lib/_components/meals-planner-link/meals-planner-link.component.js +3 -3
  15. package/esm2015/lib/_components/modal/modal.component.js +155 -137
  16. package/esm2015/lib/_components/product-card/product-card.component.js +333 -0
  17. package/esm2015/lib/_components/products-picker/products-picker.component.js +155 -0
  18. package/esm2015/lib/_components/progress-tracker/progress-tracker.component.js +1 -1
  19. package/esm2015/lib/_components/recipe-filters/recipe-filters.component.js +166 -217
  20. package/esm2015/lib/_components/recipe-pricing/recipe-pricing.component.js +55 -35
  21. package/esm2015/lib/_components/slider-tabs/slider-tabs.component.js +84 -0
  22. package/esm2015/lib/_components/sponsor-blocks/sponsor-image-and-text-block/sponsor-image-and-text-block.component.js +1 -1
  23. package/esm2015/lib/_components/sponsor-blocks/sponsor-text-and-image-block/sponsor-text-and-image-block.component.js +1 -1
  24. package/esm2015/lib/_components/tabs/tabs.component.js +48 -88
  25. package/esm2015/lib/_components/toaster/toaster.component.js +48 -84
  26. package/esm2015/lib/_components/tooltipable-content/tooltipable-content.component.js +1 -1
  27. package/esm2015/lib/_models/basket-entry.js +33 -49
  28. package/esm2015/lib/_models/basket-preview-line.js +5 -5
  29. package/esm2015/lib/_models/basket.js +15 -12
  30. package/esm2015/lib/_models/item.js +2 -2
  31. package/esm2015/lib/_models/recipe.js +2 -15
  32. package/esm2015/lib/_models/user.js +1 -1
  33. package/esm2015/lib/_services/analytics.service.js +24 -5
  34. package/esm2015/lib/_services/baskets-synchronizing/baskets-comparator.service.js +1 -10
  35. package/esm2015/lib/_services/baskets-synchronizing/baskets-synchronizer.service.js +15 -15
  36. package/esm2015/lib/_services/baskets.service.js +478 -60
  37. package/esm2015/lib/_services/context.service.js +22 -35
  38. package/esm2015/lib/_services/index.js +3 -5
  39. package/esm2015/lib/_services/interceptor.service.js +2 -2
  40. package/esm2015/lib/_services/items.service.js +27 -4
  41. package/esm2015/lib/_services/recipe-details.service.js +198 -0
  42. package/esm2015/lib/_services/recipe-likes.service.js +1 -1
  43. package/esm2015/lib/_services/recipes.service.js +24 -53
  44. package/esm2015/lib/_services/scrolling.service.js +17 -0
  45. package/esm2015/lib/_services/toaster.service.js +4 -5
  46. package/esm2015/lib/_services/user.service.js +2 -2
  47. package/esm2015/lib/_types/basket-action-type.enum.js +11 -0
  48. package/esm2015/lib/_types/basket-action.js +2 -0
  49. package/esm2015/lib/_types/basket-stats.js +2 -0
  50. package/esm2015/lib/_types/builded/miam-interface.js +1 -1
  51. package/esm2015/lib/_types/event-trace.js +5 -0
  52. package/esm2015/lib/_types/items-comparator.js +1 -10
  53. package/esm2015/lib/_types/recipe-filters.js +1 -1
  54. package/esm2015/lib/_types/toaster.js +1 -1
  55. package/esm2015/lib/_utils/directives/index.js +2 -1
  56. package/esm2015/lib/_utils/directives/reach-top.directive.js +33 -0
  57. package/esm2015/lib/_utils/pipes/readable-float-number/readable-float-number.pipe.js +8 -2
  58. package/esm2015/lib/_utils/utils.module.js +12 -8
  59. package/esm2015/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.js +140 -118
  60. package/esm2015/lib/_web-components/basket-preview/basket-preview-disabled/basket-preview-disabled.component.js +2 -2
  61. package/esm2015/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.js +125 -444
  62. package/esm2015/lib/_web-components/basket-preview/replace-item/replace-item.component.js +211 -108
  63. package/esm2015/lib/_web-components/index.js +1 -4
  64. package/esm2015/lib/_web-components/list-scan/basket-preview/basket-preview.component.js +11 -14
  65. package/esm2015/lib/_web-components/list-scan/files-inputs/files-inputs.component.js +13 -13
  66. package/esm2015/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.js +6 -6
  67. package/esm2015/lib/_web-components/list-scan/list-scan.component.js +10 -10
  68. package/esm2015/lib/_web-components/list-scan/overlay-button/overlay-button.component.js +23 -11
  69. package/esm2015/lib/_web-components/meals-planner/meals-planner-basket-confirmation/meals-planner-basket-confirmation.component.js +1 -1
  70. package/esm2015/lib/_web-components/meals-planner/meals-planner-catalog/meals-planner-catalog.component.js +1 -1
  71. package/esm2015/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.js +7 -7
  72. package/esm2015/lib/_web-components/meals-planner/meals-planner-result/meals-planner-result.component.js +5 -5
  73. package/esm2015/lib/_web-components/meals-planner/meals-planner.component.js +16 -20
  74. package/esm2015/lib/_web-components/planner-side-menu/planner-side-menu.component.js +4 -53
  75. package/esm2015/lib/_web-components/recipe-cards/add-recipe-card/add-recipe-card.component.js +1 -1
  76. package/esm2015/lib/_web-components/recipe-cards/index.js +1 -3
  77. package/esm2015/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.js +326 -404
  78. package/esm2015/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.js +50 -146
  79. package/esm2015/lib/_web-components/recipe-cards/recipe-cards.module.js +3 -15
  80. package/esm2015/lib/_web-components/recipe-catalog/catalog-article-card/catalog-article-card.component.js +1 -1
  81. package/esm2015/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.js +35 -29
  82. package/esm2015/lib/_web-components/recipe-catalog/catalog-header/catalog-header.component.js +1 -1
  83. package/esm2015/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.js +27 -31
  84. package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +98 -100
  85. package/esm2015/lib/_web-components/recipe-creation/recipe-form/recipe-form.component.js +2 -2
  86. package/esm2015/lib/_web-components/recipe-creation/recipe-stepper/recipe-stepper.component.js +7 -7
  87. package/esm2015/lib/_web-components/recipe-creation/tags-creator/tags-creator.component.js +4 -4
  88. package/esm2015/lib/_web-components/recipe-creation/tags-selector/tags-selector.component.js +8 -8
  89. package/esm2015/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.js +7 -3
  90. package/esm2015/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.js +57 -358
  91. package/esm2015/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.js +59 -122
  92. package/esm2015/lib/_web-components/recipe-details/recipe-details-steps/recipe-details-steps.component.js +51 -72
  93. package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +313 -363
  94. package/esm2015/lib/_web-components/recipe-details/recipe-details.module.js +8 -4
  95. package/esm2015/lib/_web-components/recipe-details/sponsor-storytelling/sponsor-storytelling.component.js +1 -1
  96. package/esm2015/lib/_web-components/recipe-helper/recipe-helper.component.js +89 -113
  97. package/esm2015/lib/_web-components/recipe-modal/recipe-modal.component.js +78 -69
  98. package/esm2015/lib/_web-components/recipe-tags/recipe-tags.component.js +5 -5
  99. package/esm2015/lib/_web-components/toaster-stack/toaster-stack.component.js +8 -4
  100. package/esm2015/lib/_web-components/web-components.module.js +3 -19
  101. package/esm2015/lib/ng-miam.module.js +5 -7
  102. package/fesm2015/ng-miam.js +5165 -6973
  103. package/fesm2015/ng-miam.js.map +1 -1
  104. package/lib/_components/abstracts/event-tracer.component.d.ts +2 -1
  105. package/lib/_components/accordion/accordion.component.d.ts +23 -0
  106. package/lib/_components/components.module.d.ts +38 -36
  107. package/lib/_components/counter-input/counter-input.component.d.ts +12 -14
  108. package/lib/_components/index.d.ts +4 -4
  109. package/lib/_components/modal/modal.component.d.ts +18 -18
  110. package/lib/_components/product-card/product-card.component.d.ts +40 -0
  111. package/lib/_components/products-picker/products-picker.component.d.ts +17 -0
  112. package/lib/_components/recipe-pricing/recipe-pricing.component.d.ts +12 -8
  113. package/lib/_components/slider-tabs/slider-tabs.component.d.ts +16 -0
  114. package/lib/_components/tabs/tabs.component.d.ts +11 -11
  115. package/lib/_components/toaster/toaster.component.d.ts +4 -2
  116. package/lib/_models/basket-entry.d.ts +16 -20
  117. package/lib/_models/basket-preview-line.d.ts +1 -0
  118. package/lib/_models/basket.d.ts +12 -5
  119. package/lib/_models/item.d.ts +1 -1
  120. package/lib/_models/recipe.d.ts +0 -5
  121. package/lib/_models/user.d.ts +0 -1
  122. package/lib/_services/analytics.service.d.ts +8 -22
  123. package/lib/_services/baskets-synchronizing/baskets-comparator.service.d.ts +0 -5
  124. package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts +3 -6
  125. package/lib/_services/baskets.service.d.ts +137 -18
  126. package/lib/_services/context.service.d.ts +2 -4
  127. package/lib/_services/index.d.ts +2 -4
  128. package/lib/_services/items.service.d.ts +9 -2
  129. package/lib/_services/recipe-details.service.d.ts +84 -0
  130. package/lib/_services/recipe-likes.service.d.ts +2 -1
  131. package/lib/_services/recipes.service.d.ts +10 -14
  132. package/lib/_services/scrolling.service.d.ts +8 -0
  133. package/lib/_services/toaster.service.d.ts +1 -1
  134. package/lib/_types/basket-action-type.enum.d.ts +9 -0
  135. package/lib/_types/basket-action.d.ts +14 -0
  136. package/lib/_types/basket-stats.d.ts +5 -0
  137. package/lib/_types/builded/miam-interface.d.ts +16 -25
  138. package/lib/_types/event-trace.d.ts +22 -0
  139. package/lib/_types/items-comparator.d.ts +0 -5
  140. package/lib/_types/recipe-filters.d.ts +0 -2
  141. package/lib/_types/toaster.d.ts +1 -1
  142. package/lib/_utils/directives/index.d.ts +1 -0
  143. package/lib/_utils/directives/reach-top.directive.d.ts +13 -0
  144. package/lib/_utils/pipes/readable-float-number/readable-float-number.pipe.d.ts +1 -1
  145. package/lib/_utils/utils.module.d.ts +2 -2
  146. package/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.d.ts +9 -8
  147. package/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.d.ts +11 -9
  148. package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts +27 -20
  149. package/lib/_web-components/index.d.ts +0 -3
  150. package/lib/_web-components/list-scan/basket-preview/basket-preview.component.d.ts +1 -2
  151. package/lib/_web-components/list-scan/files-inputs/files-inputs.component.d.ts +6 -5
  152. package/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.d.ts +3 -3
  153. package/lib/_web-components/list-scan/list-scan.component.d.ts +3 -3
  154. package/lib/_web-components/list-scan/overlay-button/overlay-button.component.d.ts +8 -6
  155. package/lib/_web-components/meals-planner/meals-planner.component.d.ts +2 -3
  156. package/lib/_web-components/recipe-cards/index.d.ts +0 -2
  157. package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts +58 -17
  158. package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts +5 -12
  159. package/lib/_web-components/recipe-cards/recipe-cards.module.d.ts +7 -9
  160. package/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.d.ts +8 -6
  161. package/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.d.ts +7 -4
  162. package/lib/_web-components/recipe-catalog/recipe-catalog.component.d.ts +2 -3
  163. package/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.d.ts +5 -2
  164. package/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.d.ts +6 -18
  165. package/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.d.ts +6 -13
  166. package/lib/_web-components/recipe-details/recipe-details-steps/recipe-details-steps.component.d.ts +2 -10
  167. package/lib/_web-components/recipe-details/recipe-details.component.d.ts +29 -36
  168. package/lib/_web-components/recipe-details/recipe-details.module.d.ts +2 -1
  169. package/lib/_web-components/recipe-helper/recipe-helper.component.d.ts +2 -6
  170. package/lib/_web-components/recipe-modal/recipe-modal.component.d.ts +11 -9
  171. package/lib/_web-components/toaster-stack/toaster-stack.component.d.ts +5 -2
  172. package/lib/_web-components/web-components.module.d.ts +23 -29
  173. package/miam-style.css +1 -1
  174. package/package.json +1 -1
  175. package/esm2015/lib/_components/abstracts/abstract-recipe-card.component.js +0 -130
  176. package/esm2015/lib/_components/skeleton/skeleton.component.js +0 -70
  177. package/esm2015/lib/_components/tabs/tab-body.component.js +0 -30
  178. package/esm2015/lib/_components/tabs/tab-item.component.js +0 -36
  179. package/esm2015/lib/_components/tabs/tab-label.component.js +0 -30
  180. package/esm2015/lib/_models/groceries-entry.js +0 -42
  181. package/esm2015/lib/_models/groceries-list.js +0 -36
  182. package/esm2015/lib/_services/counter.service.js +0 -20
  183. package/esm2015/lib/_services/groceries-entries.service.js +0 -21
  184. package/esm2015/lib/_services/groceries-lists.service.js +0 -240
  185. package/esm2015/lib/_services/recipe-events.service.js +0 -63
  186. package/esm2015/lib/_types/skeleton.enum.js +0 -7
  187. package/esm2015/lib/_web-components/drawer/drawer.component.js +0 -273
  188. package/esm2015/lib/_web-components/pos-card/pos-card.component.js +0 -207
  189. package/esm2015/lib/_web-components/pos-selection/pos-selection.component.js +0 -283
  190. package/esm2015/lib/_web-components/recipe-cards/catalog-recipe-card/catalog-recipe-card.component.js +0 -632
  191. package/esm2015/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.js +0 -144
  192. package/lib/_components/abstracts/abstract-recipe-card.component.d.ts +0 -49
  193. package/lib/_components/skeleton/skeleton.component.d.ts +0 -11
  194. package/lib/_components/tabs/tab-body.component.d.ts +0 -8
  195. package/lib/_components/tabs/tab-item.component.d.ts +0 -11
  196. package/lib/_components/tabs/tab-label.component.d.ts +0 -8
  197. package/lib/_models/groceries-entry.d.ts +0 -20
  198. package/lib/_models/groceries-list.d.ts +0 -30
  199. package/lib/_services/counter.service.d.ts +0 -10
  200. package/lib/_services/groceries-entries.service.d.ts +0 -10
  201. package/lib/_services/groceries-lists.service.d.ts +0 -68
  202. package/lib/_services/recipe-events.service.d.ts +0 -23
  203. package/lib/_types/skeleton.enum.d.ts +0 -5
  204. package/lib/_web-components/drawer/drawer.component.d.ts +0 -37
  205. package/lib/_web-components/pos-card/pos-card.component.d.ts +0 -24
  206. package/lib/_web-components/pos-selection/pos-selection.component.d.ts +0 -38
  207. package/lib/_web-components/recipe-cards/catalog-recipe-card/catalog-recipe-card.component.d.ts +0 -49
  208. package/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.d.ts +0 -42
@@ -1,7 +1,7 @@
1
1
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ChangeDetectorRef, ElementRef, ViewChildren, QueryList, Input } from '@angular/core';
2
2
  import { map, skipWhile, switchMap, take, tap } from 'rxjs/operators';
3
3
  import { CatalogCategoryComponent } from './catalog-category/catalog-category.component';
4
- import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService, UserService, GroceriesListsService, BasketsService, ContextService, CatalogSettingsService } from '../../_services';
4
+ import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService, UserService, BasketsService, ContextService, CatalogSettingsService } from '../../_services';
5
5
  import { Icon } from '../../_types/icon.enum';
6
6
  import { CatalogHeaderComponent } from './catalog-header/catalog-header.component';
7
7
  import { RecipeFilters } from '../../_types/recipe-filters';
@@ -47,75 +47,76 @@ function RecipeCatalogComponent_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
47
47
  i0.ɵɵadvance(3);
48
48
  i0.ɵɵproperty("iconName", ctx_r4.icon.ChevronDown);
49
49
  } }
50
- function RecipeCatalogComponent_div_2_div_5_div_3_Template(rf, ctx) { if (rf & 1) {
51
- i0.ɵɵelementStart(0, "div", 23);
52
- i0.ɵɵelementStart(1, "span");
53
- i0.ɵɵi18n(2, 24);
54
- i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(3, "span");
56
- i0.ɵɵtext(4);
57
- i0.ɵɵelementEnd();
50
+ function RecipeCatalogComponent_div_2_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵelementStart(0, "span");
52
+ i0.ɵɵi18n(1, 22);
58
53
  i0.ɵɵelementEnd();
59
- } if (rf & 2) {
60
- const ctx_r10 = i0.ɵɵnextContext(3);
61
- i0.ɵɵadvance(4);
62
- i0.ɵɵtextInterpolate(ctx_r10.filters.search);
63
54
  } }
64
55
  function RecipeCatalogComponent_div_2_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
65
56
  i0.ɵɵelementStart(0, "span");
66
- i0.ɵɵi18n(1, 25);
57
+ i0.ɵɵtext(1);
67
58
  i0.ɵɵelementEnd();
59
+ } if (rf & 2) {
60
+ const ctx_r11 = i0.ɵɵnextContext(3);
61
+ i0.ɵɵadvance(1);
62
+ i0.ɵɵtextInterpolate(ctx_r11.filters.search);
68
63
  } }
69
64
  function RecipeCatalogComponent_div_2_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
70
65
  i0.ɵɵelementStart(0, "span");
71
- i0.ɵɵi18n(1, 26);
66
+ i0.ɵɵi18n(1, 23);
72
67
  i0.ɵɵelementEnd();
73
68
  } }
74
69
  function RecipeCatalogComponent_div_2_div_5_span_6_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵelementStart(0, "span");
71
+ i0.ɵɵi18n(1, 24);
72
+ i0.ɵɵelementEnd();
73
+ } }
74
+ function RecipeCatalogComponent_div_2_div_5_span_7_Template(rf, ctx) { if (rf & 1) {
75
75
  i0.ɵɵelementStart(0, "span");
76
76
  i0.ɵɵtext(1);
77
77
  i0.ɵɵelementEnd();
78
78
  } if (rf & 2) {
79
- const ctx_r13 = i0.ɵɵnextContext(3);
79
+ const ctx_r14 = i0.ɵɵnextContext(3);
80
80
  i0.ɵɵadvance(1);
81
- i0.ɵɵtextInterpolate(ctx_r13.filters.additionalFilters.title);
81
+ i0.ɵɵtextInterpolate(ctx_r14.filters.additionalFilters.title);
82
82
  } }
83
- function RecipeCatalogComponent_div_2_div_5_span_7_Template(rf, ctx) { if (rf & 1) {
83
+ function RecipeCatalogComponent_div_2_div_5_span_8_Template(rf, ctx) { if (rf & 1) {
84
84
  i0.ɵɵelementStart(0, "span");
85
- i0.ɵɵi18n(1, 27);
85
+ i0.ɵɵi18n(1, 25);
86
86
  i0.ɵɵelementEnd();
87
87
  } }
88
- function RecipeCatalogComponent_div_2_div_5_div_8_Template(rf, ctx) { if (rf & 1) {
89
- const _r17 = i0.ɵɵgetCurrentView();
90
- i0.ɵɵelementStart(0, "div", 28);
91
- i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_5_div_8_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(3); return ctx_r16.manageRecipeAction({ action: "CREATE", recipe: null }); });
92
- i0.ɵɵelement(1, "ng-miam-icon", 29);
88
+ function RecipeCatalogComponent_div_2_div_5_div_9_Template(rf, ctx) { if (rf & 1) {
89
+ const _r18 = i0.ɵɵgetCurrentView();
90
+ i0.ɵɵelementStart(0, "div", 26);
91
+ i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_5_div_9_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(3); return ctx_r17.manageRecipeAction({ action: "CREATE", recipe: null }); });
92
+ i0.ɵɵelement(1, "ng-miam-icon", 27);
93
93
  i0.ɵɵelementStart(2, "span");
94
- i0.ɵɵi18n(3, 30);
94
+ i0.ɵɵi18n(3, 28);
95
95
  i0.ɵɵelementEnd();
96
96
  i0.ɵɵelementEnd();
97
97
  } if (rf & 2) {
98
- const ctx_r15 = i0.ɵɵnextContext(3);
98
+ const ctx_r16 = i0.ɵɵnextContext(3);
99
99
  i0.ɵɵadvance(1);
100
- i0.ɵɵproperty("iconName", ctx_r15.icon.Plus);
100
+ i0.ɵɵproperty("iconName", ctx_r16.icon.Plus);
101
101
  } }
102
102
  function RecipeCatalogComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
103
- const _r19 = i0.ɵɵgetCurrentView();
103
+ const _r20 = i0.ɵɵgetCurrentView();
104
104
  i0.ɵɵelementStart(0, "div", 16);
105
105
  i0.ɵɵelementStart(1, "div", 17);
106
106
  i0.ɵɵelementStart(2, "ng-miam-icon", 18);
107
- i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_icon_click_2_listener() { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(2); return ctx_r18.returnToHomePage(); });
107
+ i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_icon_click_2_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(2); return ctx_r19.returnToHomePage(); });
108
108
  i0.ɵɵelementEnd();
109
- i0.ɵɵtemplate(3, RecipeCatalogComponent_div_2_div_5_div_3_Template, 5, 1, "div", 19);
110
- i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_5_span_4_Template, 2, 0, "span", 20);
111
- i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_span_5_Template, 2, 0, "span", 20);
112
- i0.ɵɵtemplate(6, RecipeCatalogComponent_div_2_div_5_span_6_Template, 2, 1, "span", 20);
113
- i0.ɵɵtemplate(7, RecipeCatalogComponent_div_2_div_5_span_7_Template, 2, 0, "span", 20);
109
+ i0.ɵɵtemplate(3, RecipeCatalogComponent_div_2_div_5_span_3_Template, 2, 0, "span", 19);
110
+ i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_5_span_4_Template, 2, 1, "span", 19);
111
+ i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_span_5_Template, 2, 0, "span", 19);
112
+ i0.ɵɵtemplate(6, RecipeCatalogComponent_div_2_div_5_span_6_Template, 2, 0, "span", 19);
113
+ i0.ɵɵtemplate(7, RecipeCatalogComponent_div_2_div_5_span_7_Template, 2, 1, "span", 19);
114
+ i0.ɵɵtemplate(8, RecipeCatalogComponent_div_2_div_5_span_8_Template, 2, 0, "span", 19);
114
115
  i0.ɵɵelementEnd();
115
- i0.ɵɵtemplate(8, RecipeCatalogComponent_div_2_div_5_div_8_Template, 4, 1, "div", 21);
116
- i0.ɵɵpipe(9, "async");
117
- i0.ɵɵelementStart(10, "ng-miam-catalog-list", 22);
118
- i0.ɵɵlistener("filterRemoved", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_filterRemoved_10_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r20 = i0.ɵɵnextContext(2); return ctx_r20.removeFilter($event); })("recipeActionTriggered", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_recipeActionTriggered_10_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r21 = i0.ɵɵnextContext(2); return ctx_r21.manageRecipeAction($event); });
116
+ i0.ɵɵtemplate(9, RecipeCatalogComponent_div_2_div_5_div_9_Template, 4, 1, "div", 20);
117
+ i0.ɵɵpipe(10, "async");
118
+ i0.ɵɵelementStart(11, "ng-miam-catalog-list", 21);
119
+ i0.ɵɵlistener("filterRemoved", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_filterRemoved_11_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r21 = i0.ɵɵnextContext(2); return ctx_r21.removeFilter($event); })("recipeActionTriggered", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_recipeActionTriggered_11_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r22 = i0.ɵɵnextContext(2); return ctx_r22.manageRecipeAction($event); });
119
120
  i0.ɵɵelementEnd();
120
121
  i0.ɵɵelementEnd();
121
122
  } if (rf & 2) {
@@ -125,6 +126,8 @@ function RecipeCatalogComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
125
126
  i0.ɵɵadvance(1);
126
127
  i0.ɵɵproperty("ngIf", ctx_r5.isSearchPage());
127
128
  i0.ɵɵadvance(1);
129
+ i0.ɵɵproperty("ngIf", ctx_r5.isSearchPage());
130
+ i0.ɵɵadvance(1);
128
131
  i0.ɵɵproperty("ngIf", ctx_r5.isFavoritesPage());
129
132
  i0.ɵɵadvance(1);
130
133
  i0.ɵɵproperty("ngIf", ctx_r5.isPersonalPage());
@@ -133,87 +136,87 @@ function RecipeCatalogComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
133
136
  i0.ɵɵadvance(1);
134
137
  i0.ɵɵproperty("ngIf", ctx_r5.isDefaultPage());
135
138
  i0.ɵɵadvance(1);
136
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(9, 10, ctx_r5.canDisplayCreationButton()));
139
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(10, 11, ctx_r5.canDisplayCreationButton()));
137
140
  i0.ɵɵadvance(2);
138
141
  i0.ɵɵproperty("filters", ctx_r5.filters)("originTrace", ctx_r5.eventTrace())("displayPricing", ctx_r5.displayPricing);
139
142
  } }
140
143
  function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
141
- const _r30 = i0.ɵɵgetCurrentView();
144
+ const _r31 = i0.ɵɵgetCurrentView();
142
145
  i0.ɵɵelementContainerStart(0);
143
- i0.ɵɵelementStart(1, "ng-miam-catalog-category", 36);
144
- i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_container_1_Template_ng_miam_catalog_category_displayList_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r29 = i0.ɵɵnextContext(5); return ctx_r29.categoryTitleClicked($event); });
146
+ i0.ɵɵelementStart(1, "ng-miam-catalog-category", 34);
147
+ i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_container_1_Template_ng_miam_catalog_category_displayList_1_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(5); return ctx_r30.categoryTitleClicked($event); });
145
148
  i0.ɵɵelementEnd();
146
149
  i0.ɵɵelementContainerEnd();
147
150
  } if (rf & 2) {
148
- const category_r24 = i0.ɵɵnextContext().$implicit;
149
- const ctx_r26 = i0.ɵɵnextContext(4);
151
+ const category_r25 = i0.ɵɵnextContext().$implicit;
152
+ const ctx_r27 = i0.ɵɵnextContext(4);
150
153
  i0.ɵɵadvance(1);
151
- i0.ɵɵproperty("title", category_r24.title)("subtitle", category_r24.subtitle)("filters", category_r24.filters)("displayPricing", ctx_r26.displayPricing)("originTrace", ctx_r26.eventTrace());
154
+ i0.ɵɵproperty("title", category_r25.title)("subtitle", category_r25.subtitle)("filters", category_r25.filters)("displayPricing", ctx_r27.displayPricing)("originTrace", ctx_r27.eventTrace());
152
155
  } }
153
156
  function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_ng_miam_meals_planner_link_1_Template(rf, ctx) { if (rf & 1) {
154
157
  i0.ɵɵelement(0, "ng-miam-meals-planner-link");
155
158
  } }
156
159
  function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
157
- const _r34 = i0.ɵɵgetCurrentView();
158
- i0.ɵɵelementStart(0, "div", 37);
159
- i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_ng_miam_meals_planner_link_1_Template, 1, 0, "ng-miam-meals-planner-link", 20);
160
+ const _r35 = i0.ɵɵgetCurrentView();
161
+ i0.ɵɵelementStart(0, "div", 35);
162
+ i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_ng_miam_meals_planner_link_1_Template, 1, 0, "ng-miam-meals-planner-link", 19);
160
163
  i0.ɵɵpipe(2, "async");
161
- i0.ɵɵelementStart(3, "ng-miam-catalog-category", 36);
162
- i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_Template_ng_miam_catalog_category_displayList_3_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r33 = i0.ɵɵnextContext(5); return ctx_r33.categoryTitleClicked($event); });
164
+ i0.ɵɵelementStart(3, "ng-miam-catalog-category", 34);
165
+ i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_Template_ng_miam_catalog_category_displayList_3_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r34 = i0.ɵɵnextContext(5); return ctx_r34.categoryTitleClicked($event); });
163
166
  i0.ɵɵelementEnd();
164
167
  i0.ɵɵelementEnd();
165
- i0.ɵɵelementStart(4, "div", 38);
166
- i0.ɵɵelement(5, "ng-miam-explain-banner", 39);
168
+ i0.ɵɵelementStart(4, "div", 36);
169
+ i0.ɵɵelement(5, "ng-miam-explain-banner", 37);
167
170
  i0.ɵɵelementEnd();
168
171
  } if (rf & 2) {
169
- const category_r24 = i0.ɵɵnextContext().$implicit;
170
- const ctx_r28 = i0.ɵɵnextContext(4);
172
+ const category_r25 = i0.ɵɵnextContext().$implicit;
173
+ const ctx_r29 = i0.ɵɵnextContext(4);
171
174
  i0.ɵɵadvance(1);
172
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 7, ctx_r28.contextService.enableMealsPlanner$));
175
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 7, ctx_r29.contextService.enableMealsPlanner$));
173
176
  i0.ɵɵadvance(2);
174
- i0.ɵɵproperty("title", category_r24.title)("subtitle", category_r24.subtitle)("filters", category_r24.filters)("displayPricing", ctx_r28.displayPricing)("originTrace", ctx_r28.eventTrace());
177
+ i0.ɵɵproperty("title", category_r25.title)("subtitle", category_r25.subtitle)("filters", category_r25.filters)("displayPricing", ctx_r29.displayPricing)("originTrace", ctx_r29.eventTrace());
175
178
  i0.ɵɵadvance(2);
176
- i0.ɵɵproperty("catalogSetting", ctx_r28.catalogSetting);
179
+ i0.ɵɵproperty("catalogSetting", ctx_r29.catalogSetting);
177
180
  } }
178
181
  function RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
179
182
  i0.ɵɵelementContainerStart(0);
180
- i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_container_1_Template, 2, 5, "ng-container", 34);
181
- i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_Template, 6, 9, "ng-template", null, 35, i0.ɵɵtemplateRefExtractor);
183
+ i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_container_1_Template, 2, 5, "ng-container", 32);
184
+ i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_ng_template_2_Template, 6, 9, "ng-template", null, 33, i0.ɵɵtemplateRefExtractor);
182
185
  i0.ɵɵelementContainerEnd();
183
186
  } if (rf & 2) {
184
- const i_r25 = ctx.index;
185
- const _r27 = i0.ɵɵreference(3);
187
+ const i_r26 = ctx.index;
188
+ const _r28 = i0.ɵɵreference(3);
186
189
  i0.ɵɵadvance(1);
187
- i0.ɵɵproperty("ngIf", i_r25 !== 0)("ngIfElse", _r27);
190
+ i0.ɵɵproperty("ngIf", i_r26 !== 0)("ngIfElse", _r28);
188
191
  } }
189
192
  function RecipeCatalogComponent_div_2_ng_template_7_div_0_Template(rf, ctx) { if (rf & 1) {
190
- i0.ɵɵelementStart(0, "div", 32);
191
- i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_Template, 4, 2, "ng-container", 33);
193
+ i0.ɵɵelementStart(0, "div", 30);
194
+ i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_7_div_0_ng_container_1_Template, 4, 2, "ng-container", 31);
192
195
  i0.ɵɵelementEnd();
193
196
  } if (rf & 2) {
194
- const ctx_r22 = i0.ɵɵnextContext(3);
197
+ const ctx_r23 = i0.ɵɵnextContext(3);
195
198
  i0.ɵɵadvance(1);
196
- i0.ɵɵproperty("ngForOf", ctx_r22.categories);
199
+ i0.ɵɵproperty("ngForOf", ctx_r23.categories);
197
200
  } }
198
201
  function RecipeCatalogComponent_div_2_ng_template_7_Template(rf, ctx) { if (rf & 1) {
199
- i0.ɵɵtemplate(0, RecipeCatalogComponent_div_2_ng_template_7_div_0_Template, 2, 1, "div", 31);
202
+ i0.ɵɵtemplate(0, RecipeCatalogComponent_div_2_ng_template_7_div_0_Template, 2, 1, "div", 29);
200
203
  } if (rf & 2) {
201
204
  const ctx_r7 = i0.ɵɵnextContext(2);
202
205
  i0.ɵɵproperty("ngIf", ctx_r7.categories.length > 0);
203
206
  } }
204
207
  function RecipeCatalogComponent_div_2_Template(rf, ctx) { if (rf & 1) {
205
- const _r37 = i0.ɵɵgetCurrentView();
208
+ const _r38 = i0.ɵɵgetCurrentView();
206
209
  i0.ɵɵelementStart(0, "div", 4);
207
210
  i0.ɵɵelementStart(1, "div", 5);
208
211
  i0.ɵɵelementStart(2, "ng-miam-catalog-header", 6);
209
- i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_2_listener() { i0.ɵɵrestoreView(_r37); const ctx_r36 = i0.ɵɵnextContext(); return ctx_r36.returnToHomePage(); })("filterButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_filterButtonPressed_2_listener() { i0.ɵɵrestoreView(_r37); const ctx_r38 = i0.ɵɵnextContext(); return ctx_r38.onFilterCollapsed(); })("searchStringChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_searchStringChanged_2_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r39 = i0.ɵɵnextContext(); return ctx_r39.updateSearch($event); })("personalButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_personalButtonPressed_2_listener() { i0.ɵɵrestoreView(_r37); const ctx_r40 = i0.ɵɵnextContext(); return ctx_r40.setPersonalFilter(); })("favoritesButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_favoritesButtonPressed_2_listener() { i0.ɵɵrestoreView(_r37); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.setFavoritesFilter(); });
212
+ i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_2_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(); return ctx_r37.returnToHomePage(); })("filterButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_filterButtonPressed_2_listener() { i0.ɵɵrestoreView(_r38); const ctx_r39 = i0.ɵɵnextContext(); return ctx_r39.onFilterCollapsed(); })("searchStringChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_searchStringChanged_2_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r40 = i0.ɵɵnextContext(); return ctx_r40.updateSearch($event); })("personalButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_personalButtonPressed_2_listener() { i0.ɵɵrestoreView(_r38); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.setPersonalFilter(); })("favoritesButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_favoritesButtonPressed_2_listener() { i0.ɵɵrestoreView(_r38); const ctx_r42 = i0.ɵɵnextContext(); return ctx_r42.setFavoritesFilter(); });
210
213
  i0.ɵɵpipe(3, "async");
211
214
  i0.ɵɵelementEnd();
212
215
  i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_4_Template, 8, 3, "div", 7);
213
- i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_Template, 11, 12, "div", 8);
216
+ i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_Template, 12, 13, "div", 8);
214
217
  i0.ɵɵelementEnd();
215
218
  i0.ɵɵelementStart(6, "ng-miam-recipe-filters", 9);
216
- i0.ɵɵlistener("filterChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterChanged_6_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r42 = i0.ɵɵnextContext(); return ctx_r42.updateFilters($event); })("filterCollapsed", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterCollapsed_6_listener() { i0.ɵɵrestoreView(_r37); const ctx_r43 = i0.ɵɵnextContext(); return ctx_r43.onFilterCollapsed(); })("preferencesChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_preferencesChanged_6_listener() { i0.ɵɵrestoreView(_r37); const ctx_r44 = i0.ɵɵnextContext(); return ctx_r44.reloadPackages(); });
219
+ i0.ɵɵlistener("filterChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterChanged_6_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r43 = i0.ɵɵnextContext(); return ctx_r43.updateFilters($event); })("filterCollapsed", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterCollapsed_6_listener() { i0.ɵɵrestoreView(_r38); const ctx_r44 = i0.ɵɵnextContext(); return ctx_r44.onFilterCollapsed(); })("preferencesChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_preferencesChanged_6_listener() { i0.ɵɵrestoreView(_r38); const ctx_r45 = i0.ɵɵnextContext(); return ctx_r45.reloadPackages(); });
217
220
  i0.ɵɵelementEnd();
218
221
  i0.ɵɵtemplate(7, RecipeCatalogComponent_div_2_ng_template_7_Template, 1, 1, "ng-template", null, 10, i0.ɵɵtemplateRefExtractor);
219
222
  i0.ɵɵelementEnd();
@@ -230,22 +233,22 @@ function RecipeCatalogComponent_div_2_Template(rf, ctx) { if (rf & 1) {
230
233
  i0.ɵɵproperty("filters", ctx_r1.filters)("isFilterCollapsed", ctx_r1.isFilterCollapsed)("filterToRemove", ctx_r1.filterToRemove)("position", ctx_r1.filtersPosition)("originTrace", ctx_r1.eventTrace());
231
234
  } }
232
235
  function RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template(rf, ctx) { if (rf & 1) {
233
- const _r47 = i0.ɵɵgetCurrentView();
234
- i0.ɵɵelementStart(0, "ng-miam-recipe-stepper", 41);
235
- i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r46 = i0.ɵɵnextContext(2); return ctx_r46.leaveCreatePage(); })("canceled", function RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template_ng_miam_recipe_stepper_canceled_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r48 = i0.ɵɵnextContext(2); return ctx_r48.leaveCreatePage(); });
236
+ const _r48 = i0.ɵɵgetCurrentView();
237
+ i0.ɵɵelementStart(0, "ng-miam-recipe-stepper", 39);
238
+ i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(_r48); const ctx_r47 = i0.ɵɵnextContext(2); return ctx_r47.leaveCreatePage(); })("canceled", function RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template_ng_miam_recipe_stepper_canceled_0_listener() { i0.ɵɵrestoreView(_r48); const ctx_r49 = i0.ɵɵnextContext(2); return ctx_r49.leaveCreatePage(); });
236
239
  i0.ɵɵelementEnd();
237
240
  } if (rf & 2) {
238
- const ctx_r45 = i0.ɵɵnextContext(2);
239
- i0.ɵɵproperty("recipeToUpdate", ctx_r45.recipeToUpdate)("originTrace", ctx_r45.eventTrace());
241
+ const ctx_r46 = i0.ɵɵnextContext(2);
242
+ i0.ɵɵproperty("recipeToUpdate", ctx_r46.recipeToUpdate)("originTrace", ctx_r46.eventTrace());
240
243
  } }
241
244
  function RecipeCatalogComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
242
- i0.ɵɵtemplate(0, RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template, 1, 2, "ng-miam-recipe-stepper", 40);
245
+ i0.ɵɵtemplate(0, RecipeCatalogComponent_ng_template_3_ng_miam_recipe_stepper_0_Template, 1, 2, "ng-miam-recipe-stepper", 38);
243
246
  } if (rf & 2) {
244
247
  const ctx_r3 = i0.ɵɵnextContext();
245
248
  i0.ɵɵproperty("ngIf", ctx_r3.catalogSettingHasLoaded);
246
249
  } }
247
250
  export class RecipeCatalogComponent extends EventTracerComponent {
248
- constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher, usersService, catalogSettingService, analyticsService, groceriesListService, basketsService, contextService) {
251
+ constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher, usersService, catalogSettingService, analyticsService, basketsService, contextService) {
249
252
  super(analyticsService);
250
253
  this.cdr = cdr;
251
254
  this.recipeTypesService = recipeTypesService;
@@ -257,13 +260,12 @@ export class RecipeCatalogComponent extends EventTracerComponent {
257
260
  this.usersService = usersService;
258
261
  this.catalogSettingService = catalogSettingService;
259
262
  this.analyticsService = analyticsService;
260
- this.groceriesListService = groceriesListService;
261
263
  this.basketsService = basketsService;
262
264
  this.contextService = contextService;
263
265
  this.headerPictureUrl = 'https://storage.googleapis.com/assets.miam.tech/generic/images/default-catalog-picture.png';
264
266
  this.initialRoute = '';
265
267
  this.filtersPosition = 'left';
266
- this.displayPricing = false;
268
+ this.displayPricing = true;
267
269
  this.isFilterCollapsed = true;
268
270
  this.icon = Icon;
269
271
  this.categories = [];
@@ -280,19 +282,15 @@ export class RecipeCatalogComponent extends EventTracerComponent {
280
282
  ngOnInit() {
281
283
  this.pageview();
282
284
  this.initFilters();
283
- this.subscriptions = [
284
- this.supplierService.supplier$.asObservable().pipe(skipWhile(supp => supp === undefined || supp == null), take(1), switchMap(supplier => {
285
- this.supplierId = supplier.id;
286
- this.initCatalogHeader(supplier);
287
- return this.loadPackages();
288
- })).subscribe(),
289
- this.basketsService.basketStats$.pipe(skipWhile(bs => !bs)).subscribe(bs => {
290
- this.recipeCount = bs.recipesCount;
291
- this.totalPrice = bs.totalPrice;
292
- this.cdr.detectChanges();
293
- }),
294
- this.assessShowUserFeedback()
295
- ];
285
+ this.subscriptions.push(this.supplierService.supplier$.asObservable().pipe(skipWhile(supp => supp === undefined || supp == null), take(1), switchMap(supplier => {
286
+ this.supplierId = supplier.id;
287
+ this.initCatalogHeader(supplier);
288
+ return this.loadPackages();
289
+ })).subscribe(), this.basketsService.basketStats$.pipe(skipWhile(bs => !bs)).subscribe(bs => {
290
+ this.recipeCount = bs.recipesCount;
291
+ this.totalPrice = bs.totalPrice;
292
+ this.cdr.detectChanges();
293
+ }), this.assessShowUserFeedback());
296
294
  this.setDirectAccess();
297
295
  }
298
296
  ngAfterViewInit() {
@@ -325,11 +323,11 @@ export class RecipeCatalogComponent extends EventTracerComponent {
325
323
  var _a, _b, _c;
326
324
  if ((_a = supplier.relationships['catalog-setting']) === null || _a === void 0 ? void 0 : _a.data) {
327
325
  const id = (_c = (_b = supplier.relationships['catalog-setting']) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.id;
328
- this.catalogSettingService.get(id).pipe(skipWhile(c => c.is_loading), take(1), tap(catalog => {
326
+ this.subscriptions.push(this.catalogSettingService.get(id).pipe(skipWhile(c => c.is_loading), take(1), tap(catalog => {
329
327
  this.catalogSetting = catalog;
330
328
  this.catalogSettingHasLoaded = true;
331
329
  this.cdr.detectChanges();
332
- })).subscribe();
330
+ })).subscribe());
333
331
  }
334
332
  }
335
333
  // Used on load to build the filters attribute, and on click on the link to reset the filters
@@ -540,7 +538,7 @@ export class RecipeCatalogComponent extends EventTracerComponent {
540
538
  }
541
539
  }
542
540
  }
543
- RecipeCatalogComponent.ɵfac = function RecipeCatalogComponent_Factory(t) { return new (t || RecipeCatalogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.RecipeTypeService), i0.ɵɵdirectiveInject(i1.SponsorService), i0.ɵɵdirectiveInject(i1.SuppliersService), i0.ɵɵdirectiveInject(i1.PackageService), i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i2.MediaMatcher), i0.ɵɵdirectiveInject(i1.UserService), i0.ɵɵdirectiveInject(i1.CatalogSettingsService), i0.ɵɵdirectiveInject(i3.AnalyticsService), i0.ɵɵdirectiveInject(i1.GroceriesListsService), i0.ɵɵdirectiveInject(i1.BasketsService), i0.ɵɵdirectiveInject(i1.ContextService)); };
541
+ RecipeCatalogComponent.ɵfac = function RecipeCatalogComponent_Factory(t) { return new (t || RecipeCatalogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.RecipeTypeService), i0.ɵɵdirectiveInject(i1.SponsorService), i0.ɵɵdirectiveInject(i1.SuppliersService), i0.ɵɵdirectiveInject(i1.PackageService), i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i2.MediaMatcher), i0.ɵɵdirectiveInject(i1.UserService), i0.ɵɵdirectiveInject(i1.CatalogSettingsService), i0.ɵɵdirectiveInject(i3.AnalyticsService), i0.ɵɵdirectiveInject(i1.BasketsService), i0.ɵɵdirectiveInject(i1.ContextService)); };
544
542
  RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogComponent, selectors: [["ng-miam-recipe-catalog"]], viewQuery: function RecipeCatalogComponent_Query(rf, ctx) { if (rf & 1) {
545
543
  i0.ɵɵviewQuery(CatalogHeaderComponent, true);
546
544
  i0.ɵɵviewQuery(_c0, true);
@@ -586,7 +584,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
586
584
  }
587
585
  else {
588
586
  i18n_11 = $localize `:␟3b0b12b85604af610c07cfbd5d4f74662b9a881a␟1931799427977453728:Ajouter une idée repas`;
589
- } return [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog"], [1, "miam-recipe-catalog__content"], [3, "home", "searchTerm", "additionalFiltersTitle", "homeLabel", "pictureUrl", "catalogSetting", "favoritesButtonHidden", "personalButtonHidden", "filterBadgeCount", "returnButtonPressed", "filterButtonPressed", "searchStringChanged", "personalButtonPressed", "favoritesButtonPressed"], ["class", "miam-recipe-catalog__content__myMeal__button", 3, "click", 4, "ngIf"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], [3, "filters", "isFilterCollapsed", "filterToRemove", "position", "originTrace", "filterChanged", "filterCollapsed", "preferencesChanged"], ["categoriesComponents", ""], [1, "miam-recipe-catalog__content__myMeal__button", 3, "click"], ["primaryColor", "var(--m-color-white)", 1, "miam-recipe-catalog__myMeal__first__icon", 3, "iconName"], [1, "miam-recipe-catalog__myMeal__button__text"], i18n_1, ["primaryColor", "var(--m-color-white)", 1, "miam-recipe-catalog__myMeal__second__icon", 3, "iconName"], [1, "miam-recipe-catalog__list"], [1, "miam-recipe-catalog__content__title"], ["width", "24", "height", "24", 3, "iconName", "click"], ["class", "miam-recipe-catalog__content__title__search__text", 4, "ngIf"], [4, "ngIf"], ["class", "miam-recipe-catalog__list__create___button", 3, "click", 4, "ngIf"], [3, "filters", "originTrace", "displayPricing", "filterRemoved", "recipeActionTriggered"], [1, "miam-recipe-catalog__content__title__search__text"], i18n_3, i18n_5, i18n_7, i18n_9, [1, "miam-recipe-catalog__list__create___button", 3, "click"], ["width", "24", "height", "24", "primaryColor", "var(--m-color-primary)", 3, "iconName"], i18n_11, ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [4, "ngFor", "ngForOf"], [4, "ngIf", "ngIfElse"], ["firstCategory", ""], [3, "title", "subtitle", "filters", "displayPricing", "originTrace", "displayList"], [1, "miam-recipe-catalog__first-category"], [1, "miam-recipe-catalog__explain_banner"], [3, "catalogSetting"], [3, "recipeToUpdate", "originTrace", "recipeChange", "canceled", 4, "ngIf"], [3, "recipeToUpdate", "originTrace", "recipeChange", "canceled"]]; }, template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
587
+ } return [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog"], [1, "miam-recipe-catalog__content"], [3, "home", "searchTerm", "additionalFiltersTitle", "homeLabel", "pictureUrl", "catalogSetting", "favoritesButtonHidden", "personalButtonHidden", "filterBadgeCount", "returnButtonPressed", "filterButtonPressed", "searchStringChanged", "personalButtonPressed", "favoritesButtonPressed"], ["class", "miam-recipe-catalog__content__myMeal__button", 3, "click", 4, "ngIf"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], [3, "filters", "isFilterCollapsed", "filterToRemove", "position", "originTrace", "filterChanged", "filterCollapsed", "preferencesChanged"], ["categoriesComponents", ""], [1, "miam-recipe-catalog__content__myMeal__button", 3, "click"], ["primaryColor", "var(--m-color-white)", 1, "miam-recipe-catalog__myMeal__first__icon", 3, "iconName"], [1, "miam-recipe-catalog__myMeal__button__text"], i18n_1, ["primaryColor", "var(--m-color-white)", 1, "miam-recipe-catalog__myMeal__second__icon", 3, "iconName"], [1, "miam-recipe-catalog__list"], [1, "miam-recipe-catalog__content__title"], ["width", "24", "height", "24", 3, "iconName", "click"], [4, "ngIf"], ["class", "miam-recipe-catalog__list__create___button", 3, "click", 4, "ngIf"], [3, "filters", "originTrace", "displayPricing", "filterRemoved", "recipeActionTriggered"], i18n_3, i18n_5, i18n_7, i18n_9, [1, "miam-recipe-catalog__list__create___button", 3, "click"], ["width", "24", "height", "24", "primaryColor", "var(--m-color-primary)", 3, "iconName"], i18n_11, ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [4, "ngFor", "ngForOf"], [4, "ngIf", "ngIfElse"], ["firstCategory", ""], [3, "title", "subtitle", "filters", "displayPricing", "originTrace", "displayList"], [1, "miam-recipe-catalog__first-category"], [1, "miam-recipe-catalog__explain_banner"], [3, "catalogSetting"], [3, "recipeToUpdate", "originTrace", "recipeChange", "canceled", 4, "ngIf"], [3, "recipeToUpdate", "originTrace", "recipeChange", "canceled"]]; }, template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
590
588
  i0.ɵɵelement(0, "div", 0, 1);
591
589
  i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_Template, 9, 19, "div", 2);
592
590
  i0.ɵɵtemplate(3, RecipeCatalogComponent_ng_template_3_Template, 1, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
@@ -594,7 +592,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
594
592
  const _r2 = i0.ɵɵreference(4);
595
593
  i0.ɵɵadvance(2);
596
594
  i0.ɵɵproperty("ngIf", !ctx.creatingRecipe && ctx.catalogSettingHasLoaded)("ngIfElse", _r2);
597
- } }, directives: [i4.NgIf, i5.CatalogHeaderComponent, i6.RecipeFiltersComponent, i7.IconComponent, i8.CatalogListComponent, i4.NgForOf, i9.CatalogCategoryComponent, i10.ExplainBannerComponent, i11.MealsPlannerLinkComponent, i12.RecipeStepperComponent], pipes: [i4.AsyncPipe], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between}.miam-recipe-catalog,.miam-recipe-catalog .miam-recipe-catalog__content{position:relative;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title{align-items:center;display:flex;font-size:24px;font-weight:700;gap:6px;line-height:34px;margin-bottom:24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title .miam-recipe-catalog__content__title__search__text{display:flex;flex-wrap:wrap;gap:6px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon{cursor:pointer;margin-right:14px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon .icon-container{transform:rotate(90deg)}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;padding:48px 24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-end;display:flex;flex-direction:row;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 22px 40px 0}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__explain_banner{margin-bottom:40px}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{padding:48px 0 48px 24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-start;flex-direction:column}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-catalog-category{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 24px 24px 0;width:calc(100% - 24px)}}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{padding:24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list .miam-recipe-catalog__list__create___button{align-items:center;border:1px solid var(--miam-color-primary);border-radius:20px;color:var(--miam-color-primary);cursor:pointer;display:flex;margin-bottom:24px;padding:4px 8px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{align-items:center;background:var(--m-color-primary);border-radius:0 0 20px 20px;cursor:pointer;display:flex;height:50px;justify-content:space-around;left:unset;position:absolute;right:50px;width:200px}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__button__text{color:var(--m-color-white);font-weight:700}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__second__icon{transform:rotate(-90deg)}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{border-radius:20px 20px 0 0;bottom:0;left:8px;position:fixed;right:8px;width:auto;z-index:2}}"], encapsulation: 2, changeDetection: 0 });
595
+ } }, directives: [i4.NgIf, i5.CatalogHeaderComponent, i6.RecipeFiltersComponent, i7.IconComponent, i8.CatalogListComponent, i4.NgForOf, i9.CatalogCategoryComponent, i10.ExplainBannerComponent, i11.MealsPlannerLinkComponent, i12.RecipeStepperComponent], pipes: [i4.AsyncPipe], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between}.miam-recipe-catalog,.miam-recipe-catalog .miam-recipe-catalog__content{position:relative;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title{align-items:center;display:flex;font-size:24px;font-weight:700;line-height:34px;margin-bottom:24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon{cursor:pointer;margin-right:20px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title ng-miam-icon .icon-container{transform:rotate(90deg)}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__title span:last-child{margin-left:6px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{box-sizing:border-box;display:flex;flex-direction:column;padding:48px 24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-end;display:flex;flex-direction:row;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 0 40px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__explain_banner{margin-bottom:40px}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{padding:48px 0 48px 24px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category{align-items:flex-start;flex-direction:column}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-catalog-category{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories .miam-recipe-catalog__first-category ng-miam-meals-planner-link{margin:0 24px 24px 0;width:calc(100% - 24px)}}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{padding:24px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list .miam-recipe-catalog__list__create___button{align-items:center;border:1px solid var(--miam-color-primary);border-radius:20px;color:var(--miam-color-primary);cursor:pointer;display:flex;margin-bottom:24px;padding:4px 8px;width:-moz-fit-content;width:fit-content}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{align-items:center;background:var(--m-color-primary);border-radius:0 0 20px 20px;cursor:pointer;display:flex;height:50px;justify-content:space-around;left:unset;position:absolute;right:50px;width:200px}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__button__text{color:var(--m-color-white);font-weight:700}.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button .miam-recipe-catalog__myMeal__second__icon{transform:rotate(-90deg)}@media (max-width:1023px){.miam-recipe-catalog .miam-recipe-catalog__content__myMeal__button{border-radius:20px 20px 0 0;bottom:0;left:8px;position:fixed;right:8px;width:auto;z-index:2}}.miam-recipe-catalog ng-miam-recipe-card .miam-recipe-card{height:var(--m-catalog-card-height);margin:calc(var(--m-catalog-cards-spacing)/2);width:var(--m-catalog-card-width)}"], encapsulation: 2, changeDetection: 0 });
598
596
  /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RecipeCatalogComponent, [{
599
597
  type: Component,
600
598
  args: [{
@@ -604,7 +602,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
604
602
  encapsulation: ViewEncapsulation.None,
605
603
  changeDetection: ChangeDetectionStrategy.OnPush
606
604
  }]
607
- }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.RecipeTypeService }, { type: i1.SponsorService }, { type: i1.SuppliersService }, { type: i1.PackageService }, { type: i1.RecipesService }, { type: i2.MediaMatcher }, { type: i1.UserService }, { type: i1.CatalogSettingsService }, { type: i3.AnalyticsService }, { type: i1.GroceriesListsService }, { type: i1.BasketsService }, { type: i1.ContextService }]; }, { catalogHeader: [{
605
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.RecipeTypeService }, { type: i1.SponsorService }, { type: i1.SuppliersService }, { type: i1.PackageService }, { type: i1.RecipesService }, { type: i2.MediaMatcher }, { type: i1.UserService }, { type: i1.CatalogSettingsService }, { type: i3.AnalyticsService }, { type: i1.BasketsService }, { type: i1.ContextService }]; }, { catalogHeader: [{
608
606
  type: ViewChild,
609
607
  args: [CatalogHeaderComponent]
610
608
  }], topAnchor: [{
@@ -626,4 +624,4 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
626
624
  }], customFilters: [{
627
625
  type: Input
628
626
  }] }); })();
629
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQzlILGNBQWMsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQs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RSxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDOzs0RkF2V1Usc0JBQXNCOzJEQUF0QixzQkFBc0I7dUJBQ3RCLHNCQUFzQjs7dUJBRW5CLHdCQUF3Qjs7Ozs7Ozs7Ozs7aUJDWHBCLFVBQUEsdUVBQUs7Ozs7OztpQkE0QkosVUFBQSxtRkFBa0I7Ozs7OztpQkFFTSxVQUFBLCtFQUFlOzs7Ozs7aUJBQ2hCLFVBQUEsaUZBQWdCOzs7Ozs7aUJBRWpCLFVBQUEsZ0ZBQWU7Ozs7OztrQkFLdkMsVUFBQSx1RkFBc0I7O1FBN0R6Qyw0QkFBNkQ7UUFDN0Qsd0VBQ0U7UUF3SEYsd0hBQ0U7OztRQTFIRyxlQUFvRTtRQUFwRSx5RUFBb0UsaUJBQUE7O2tERDhCNUQsc0JBQXNCO2NBUGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxXQUFXLEVBQUUsaUNBQWlDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO2liQUVvQyxhQUFhO2tCQUEvQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNFLFNBQVM7a0JBQTNDLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ1EsY0FBYztrQkFBdEQsWUFBWTttQkFBQyx3QkFBd0I7WUFFN0IsZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBza2lwV2hpbGUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi9jYXRhbG9nLWNhdGVnb3J5L2NhdGFsb2ctY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IENhdGFsb2dTZXR0aW5nLCBSZWNpcGUsIFN1cHBsaWVyIH0gZnJvbSAnLi4vLi4vX21vZGVscyc7XG5pbXBvcnQgeyBSZWNpcGVUeXBlU2VydmljZSwgU3BvbnNvclNlcnZpY2UsIFBhY2thZ2VTZXJ2aWNlLCBTdXBwbGllcnNTZXJ2aWNlLCBSZWNpcGVzU2VydmljZSwgVXNlclNlcnZpY2UsIEdyb2Nlcmllc0xpc3RzU2VydmljZSxcbiAgQmFza2V0c1NlcnZpY2UsIENvbnRleHRTZXJ2aWNlLCBDYXRhbG9nU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NhdGFsb2ctaGVhZGVyL2NhdGFsb2ctaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQWRkaXRpb25uYWxGaWx0ZXJzLCBSZWNpcGVGaWx0ZXIsIFJlY2lwZUZpbHRlcnMgfSBmcm9tICcuLi8uLi9fdHlwZXMvcmVjaXBlLWZpbHRlcnMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ25neC1qc29uYXBpJztcbmltcG9ydCB7IFBhY2thZ2UgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3BhY2thZ2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIENhdGVnb3J5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogc3RyaW5nIH07IHRpdGxlOiBzdHJpbmcgfX07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tcmVjaXBlLWNhdGFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSZWNpcGVDYXRhbG9nQ29tcG9uZW50IGV4dGVuZHMgRXZlbnRUcmFjZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ2F0YWxvZ0hlYWRlckNvbXBvbmVudCkgY2F0YWxvZ0hlYWRlcjogQ2F0YWxvZ0hlYWRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlhbUNhdGFsb2dUb3BBbmNob3InKSB0b3BBbmNob3I6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgaGVhZGVyUGljdHVyZVVybCA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9kZWZhdWx0LWNhdGFsb2ctcGljdHVyZS5wbmcnO1xuICBASW5wdXQoKSBpbml0aWFsUm91dGUgPSAnJztcbiAgQElucHV0KCkgZmlsdGVyc1Bvc2l0aW9uID0gJ2xlZnQnO1xuICBASW5wdXQoKSBob21lTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY3VzdG9tRmlsdGVyczogeyBkaWZmaWN1bHR5PzogUmVjaXBlRmlsdGVyW107IGNvc3Q/OiBSZWNpcGVGaWx0ZXJbXTsgdGltZT86IFJlY2lwZUZpbHRlcltdIH07XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaXNGaWx0ZXJDb2xsYXBzZWQgPSB0cnVlO1xuICBpY29uID0gSWNvbjtcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuICBjcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICByZWNpcGVUb1VwZGF0ZTogUmVjaXBlO1xuICBmaWx0ZXJUb1JlbW92ZTogc3RyaW5nO1xuICBpc01vYmlsZSA9IGZhbHNlO1xuICBzaG93VXNlckZlZWRiYWNrID0gZmFsc2U7XG4gIHJlY2lwZUNvdW50ID0gMDtcbiAgdG90YWxQcmljZSA9IDA7XG4gIGlzTXlNZWFsQ2xvc2UgPSB0cnVlO1xuICBjYXRhbG9nU2V0dGluZzogQ2F0YWxvZ1NldHRpbmc7XG4gIGNhdGFsb2dTZXR0aW5nSGFzTG9hZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHN1cHBsaWVySWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlY2lwZVR5cGVzU2VydmljZTogUmVjaXBlVHlwZVNlcnZpY2UsXG4gICAgcHVibGljIHNwb25zb3JTZXJ2aWNlOiBTcG9uc29yU2VydmljZSxcbiAgICBwdWJsaWMgc3VwcGxpZXJTZXJ2aWNlOiBTdXBwbGllcnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBwYWNrYWdlU2VydmljZTogUGFja2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHVibGljIG1lZGlhTWF0Y2hlcjogTWVkaWFNYXRjaGVyLFxuICAgIHB1YmxpYyB1c2Vyc1NlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjYXRhbG9nU2V0dGluZ1NlcnZpY2U6IENhdGFsb2dTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHVibGljIGdyb2Nlcmllc0xpc3RTZXJ2aWNlOiBHcm9jZXJpZXNMaXN0c1NlcnZpY2UsXG4gICAgcHVibGljIGJhc2tldHNTZXJ2aWNlOiBCYXNrZXRzU2VydmljZSxcbiAgICBwdWJsaWMgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLmlzTW9iaWxlID0gbWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDEwMjJweCknKS5tYXRjaGVzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdldmlldygpO1xuICAgIHRoaXMuaW5pdEZpbHRlcnMoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBza2lwV2hpbGUoc3VwcCA9PiBzdXBwID09PSB1bmRlZmluZWQgfHwgc3VwcCA9PSBudWxsKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKHN1cHBsaWVyID0+IHtcbiAgICAgICAgICB0aGlzLnN1cHBsaWVySWQgPSBzdXBwbGllci5pZDtcbiAgICAgICAgICB0aGlzLmluaXRDYXRhbG9nSGVhZGVyKHN1cHBsaWVyKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkUGFja2FnZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCksXG4gICAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLmJhc2tldFN0YXRzJC5waXBlKHNraXBXaGlsZShicyA9PiAhYnMpKS5zdWJzY3JpYmUoYnMgPT4ge1xuICAgICAgICB0aGlzLnJlY2lwZUNvdW50ID0gYnMucmVjaXBlc0NvdW50O1xuICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSBicy50b3RhbFByaWNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuYXNzZXNzU2hvd1VzZXJGZWVkYmFjaygpXG4gICAgXTtcblxuICAgIHRoaXMuc2V0RGlyZWN0QWNjZXNzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5vcGVuRmVhdHVyZXNGcm9tVVJMKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHsgcmV0dXJuICdtaWFtL3JlY2lwZXMnOyB9XG5cbiAgb3BlbkZlYXR1cmVzRnJvbVVSTCgpIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnb3BlbkJhc2tldCcpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMudG9nZ2xlTXlNZWFsRHJhd2VyKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ3BlcnNvbmFsQ2F0YWxvZycpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2V0UGVyc29uYWxGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgY29zdCA9IHBhcmFtc0FycmF5LmdldCgnY29zdCcpPy5zcGxpdCgnLCcpO1xuICAgIGlmIChjb3N0Py5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuc2V0UHJpY2VGaWx0ZXJzKGNvc3QpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlIb21lUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIC8vIGluaXQgdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBhbmQgdGhlIHRleHQgZm9yIHRoZSBjYXRhbG9nIGhlYWRlciwgdXNpbmcgdGhlIGNhdGFsb2cgc2V0dGluZyBvZiB0aGUgc3VwcGxpZXJcbiAgaW5pdENhdGFsb2dIZWFkZXIoc3VwcGxpZXI6IFN1cHBsaWVyKSB7XG4gICAgaWYgKHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhKSB7XG4gICAgICBjb25zdCBpZCA9IHN1cHBsaWVyLnJlbGF0aW9uc2hpcHNbJ2NhdGFsb2ctc2V0dGluZyddPy5kYXRhPy5pZDtcbiAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdTZXJ2aWNlLmdldChpZCkucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKGMgPT4gYy5pc19sb2FkaW5nKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKGNhdGFsb2cgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmcgPSBjYXRhbG9nO1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlZCBvbiBsb2FkIHRvIGJ1aWxkIHRoZSBmaWx0ZXJzIGF0dHJpYnV0ZSwgYW5kIG9uIGNsaWNrIG9uIHRoZSBsaW5rIHRvIHJlc2V0IHRoZSBmaWx0ZXJzXG4gIGluaXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKFxuICAgICAge1xuICAgICAgICBkaWZmaWN1bHR5OiB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpZmZpY3VsdHlMZXZlbHMubWFwKGYgPT4gKHsgbmFtZTogZi52YWx1ZS50b1N0cmluZygpLCB0ZXh0OiBmLmxhYmVsLCB2YWx1ZTogZmFsc2UgfSkpLFxuICAgICAgICBjb3N0OiBbXG4gICAgICAgICAge25hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZX0sXG4gICAgICAgICAge25hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlfVxuICAgICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgICAgXSxcbiAgICAgICAgdGltZTogW1xuICAgICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMzAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlfVxuXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmN1c3RvbUZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB0aGlzLmN1c3RvbUZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXRhbG9nSGVhZGVyKSB7IHRoaXMuY2F0YWxvZ0hlYWRlci5yZXNldFNlYXJjaFN0cmluZygpOyB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzLmNvcHkoKTsgLy8gbmVjZXNzYXJ5IHRvIHRyaWdnZXIgY2hpbGQgY29tcG9uZW50IGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgeyBzZWFyY2ggfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nOyBmaWx0ZXJzOiBJQWRkaXRpb25uYWxGaWx0ZXJzfSkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogZXZlbnQuZmlsdGVycywgdGl0bGU6IGV2ZW50LnRpdGxlIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRGYXZvcml0ZXNGaWx0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczoge1xuICAgICAgICBmaWx0ZXJzOiB7IGxpa2VkOiB0cnVlIH0sXG4gICAgICAgIHRpdGxlOiAnTWVzIGlkw6llcyByZXBhcydcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRQZXJzb25hbEZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgcGVyc29uYWw6IHRydWUsIGFjdGl2ZTogJ3RydWUsZmFsc2UnIH0sXG4gICAgICAgIHRpdGxlOiAnTW9uIGNhcm5ldCBwZXJzbydcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRQcmljZUZpbHRlcnMoY29zdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgY29tcHV0ZWRfY29zdDogY29zdFswXSArICcsZ3QsJyArIGNvc3RbMV0gKyAnLGx0JywgcmVjaXBlX3R5cGVfaWQ6ICdtYWluLWRpc2gnIH0sXG4gICAgICAgIHRpdGxlOiBgUmVjZXR0ZXMgw6AgbW9pbnMgZGUgJHtjb3N0WzFdfeKCrGBcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyVGV4dDogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGZ1bmN0aW9uIGlzIGJyb2tlbiwgdXNlIGhhcyBiZWVuIGNvbW1lbnRhdGVkLCByZXBhaXIgaXQgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGFnYWluJyk7XG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IGZpbHRlclRleHQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0dXJuVG9Ub3AoKSB7XG4gICAgaWYgKHRoaXMudG9wQW5jaG9yKSB7XG4gICAgICB0aGlzLnRvcEFuY2hvci5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuVG9Ib21lUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgLy8gZWl0aGVyIHlvdSBoYXZlIGZpbHRlcnMgZWl0aGVyIHlvdSBhcmUgb24gaG9tZSBwYWdlLiBUaGF0IG1lYW4gaWYgeW91IGdvIG9uIGhvbWUgcGFnZSB5b3UgZG9uJ3Qgd2FudCBBTlkgZmlsdGVyXG4gICAgdGhpcy5pbml0RmlsdGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnb1RvQ3JlYXRlUGFnZShyZWNpcGU6IFJlY2lwZSA9IG51bGwpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZVRvVXBkYXRlID0gcmVjaXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBsZWF2ZUNyZWF0ZVBhZ2UoKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBtYW5hZ2VSZWNpcGVBY3Rpb24oZXZlbnQ6IHthY3Rpb246IHN0cmluZzsgcmVjaXBlOiBSZWNpcGV9KSB7XG4gICAgc3dpdGNoIChldmVudC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ0NSRUFURSc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnRURJVCc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZShldmVudC5yZWNpcGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnREVMRVRFJzoge1xuICAgICAgICBpZiAoZXZlbnQucmVjaXBlPy5pZCAmJiBldmVudC5yZWNpcGUucmVsYXRpb25zaGlwc1sncmVjaXBlLXByb3ZpZGVyJ10/LmRhdGEuaWQgPT09ICdwZXJzb25hbCcpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucmVjaXBlc1NlcnZpY2UuZGVsZXRlKGV2ZW50LnJlY2lwZS5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnByb3BzKCksIHsgcmVjaXBlSWQ6IGV2ZW50LnJlY2lwZS5pZCB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zZW5kRXZlbnQodGhpcy5hbmFseXRpY3NTZXJ2aWNlLkVWRU5UX1BFUlNPTkFMX1JFQ0lQRV9ERUxFVEUpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFja2FnZXMoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmxvYWRQYWNrYWdlcygpLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIGlzU2VhcmNoUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoLmxlbmd0aCA+IDA7XG4gIH1cblxuICBpc0Zhdm9yaXRlc1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlID09PSAnTWVzIGlkw6llcyByZXBhcyc7XG4gIH1cblxuICBpc1BlcnNvbmFsUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGUgPT09ICdNb24gY2FybmV0IHBlcnNvJztcbiAgfVxuXG4gIGlzQ2F0ZWdvcnlQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiAhdGhpcy5pc0Zhdm9yaXRlc1BhZ2UoKSAmJiAhdGhpcy5pc1BlcnNvbmFsUGFnZSgpICYmXG4gICAgICB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZT8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzRGVmYXVsdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmICF0aGlzLmlzRmF2b3JpdGVzUGFnZSgpICYmICF0aGlzLmlzUGVyc29uYWxQYWdlKCkgJiYgIXRoaXMuaXNDYXRlZ29yeVBhZ2UoKTtcbiAgfVxuXG4gIGNhbkRpc3BsYXlDcmVhdGlvbkJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBtYXAoaXNMb2dnZWQgPT4gaXNMb2dnZWQgJiYgdGhpcy5pc1BlcnNvbmFsUGFnZSgpKVxuICAgICk7XG4gIH1cblxuICB0b2dnbGVNeU1lYWxEcmF3ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNpcGVzU2VydmljZS5vcGVuQmFza2V0KHRoaXMuZXZlbnRUcmFjZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhY2thZ2VzKCk6IE9ic2VydmFibGU8RG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZVNlcnZpY2UuY2F0ZWdvcmllc19mb3IoW3RoaXMuc3VwcGxpZXJJZF0pLnBpcGUoXG4gICAgICBza2lwV2hpbGUocGFja2FnZXMgPT4gcGFja2FnZXMuaXNfbG9hZGluZyksXG4gICAgICB0YXAoKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q2F0ZWdvcmllcyhwYWNrYWdlcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENhdGVnb3JpZXMocGFja2FnZXM6IERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPik6IHZvaWQge1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHBhY2thZ2VzLmRhdGEubWFwKGNhdGVnb3J5UGFja2FnZSA9PiAoe1xuICAgICAga2V5OiBjYXRlZ29yeVBhY2thZ2UudGl0bGUudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpBLVowLTkgLV0vLCAnJykucmVwbGFjZSgvXFxzL2csICctJyksXG4gICAgICB0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLFxuICAgICAgc3VidGl0bGU6IGNhdGVnb3J5UGFja2FnZS5zdWJ0aXRsZSxcbiAgICAgIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH0sIHRpdGxlOiAnJyB9IH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhdGVnb3J5RnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykgPT09ICdmYXZvcml0ZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykpO1xuICAgIGlmIChzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yeVRpdGxlQ2xpY2tlZCh7IHRpdGxlOiBzZWxlY3RlZENhdGVnb3J5LnRpdGxlLCBmaWx0ZXJzOiBzZWxlY3RlZENhdGVnb3J5LmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuZmlsdGVycyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGZlZWRiYWNrIGJsb2NrIG9ubHkgaWYgdXNlciBpcyBsb2dnZWQgYW5kIHRoZSBjaGlsZHJlbiBwcmVmZXJlbmNlIGlzIHVua25vd25cbiAgcHJpdmF0ZSBhc3Nlc3NTaG93VXNlckZlZWRiYWNrKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZURlZmluZWQoJ2hhc19jaGlsZHJlbicpLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZXNBY3RpdmF0ZWQkXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgbG9nZ2VkID0gcmVzdWx0c1swXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VEZWZpbmVkID0gcmVzdWx0c1sxXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzQWN0aXZhdGVkID0gcmVzdWx0c1syXTtcbiAgICAgIHRoaXMuc2hvd1VzZXJGZWVkYmFjayA9IGxvZ2dlZCAmJiAhcHJlZmVyZW5jZURlZmluZWQgJiYgcHJlZmVyZW5jZXNBY3RpdmF0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpcmVjdEFjY2Vzcygpe1xuICAgIGlmICh0aGlzLmluaXRpYWxSb3V0ZSAhPT0gJycpe1xuICAgICAgc3dpdGNoICh0aGlzLmluaXRpYWxSb3V0ZSl7XG4gICAgICAgIGNhc2UgJ21lcy1yZXBhcyc6XG4gICAgICAgICAgdGhpcy50b2dnbGVNeU1lYWxEcmF3ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWVzLXJlY2V0dGVzLXBlcnNvbm5lbGxlcyc6XG4gICAgICAgICAgdGhpcy5zZXRQZXJzb25hbEZpbHRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWNldHRlcy1mYXZvcml0ZXMnOlxuICAgICAgICAgIHRoaXMuc2V0RmF2b3JpdGVzRmlsdGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVW51c2VkIGZvciBub3cuLi5cbiAgLy8gc2V0VXNlclByZWZlcmVuY2UocHJlZiwgc3RhdGUpIHtcbiAgLy8gICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgLy8gICAgIHRoaXMudXNlcnNTZXJ2aWNlLnNldFByZWZlcmVuY2UocHJlZiwgc3RhdGUpLnBpcGUoXG4gIC8vICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRQYWNrYWdlcygpKVxuICAvLyAgICAgKS5zdWJzY3JpYmUoKVxuICAvLyAgICk7XG4gIC8vICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGNsb3NlTW9kYWwoKSB7XG4gIC8vICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gIXRoaXMuc2hvd1VzZXJGZWVkYmFjaztcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cbn1cbiIsIjxkaXYgI21pYW1DYXRhbG9nVG9wQW5jaG9yIGNsYXNzPVwibWlhbS1jYXRhbG9nLWFuY2hvclwiPjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFjcmVhdGluZ1JlY2lwZSAmJiBjYXRhbG9nU2V0dGluZ0hhc0xvYWRlZCBlbHNlIGNyZWF0aW9uUGFnZVwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ1wiPlxuICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudFwiPlxuICAgIDxuZy1taWFtLWNhdGFsb2ctaGVhZGVyXG4gICAgICBbaG9tZV09XCJkaXNwbGF5SG9tZVBhZ2VcIlxuICAgICAgW3NlYXJjaFRlcm1dPVwiZmlsdGVycz8uc2VhcmNoXCJcbiAgICAgIFthZGRpdGlvbmFsRmlsdGVyc1RpdGxlXT1cImZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZVwiXG4gICAgICBbaG9tZUxhYmVsXT1cImhvbWVMYWJlbFwiXG4gICAgICBbcGljdHVyZVVybF09XCJkaXNwbGF5SG9tZVBhZ2UoKSA/IGhlYWRlclBpY3R1cmVVcmwgOiBudWxsXCJcbiAgICAgIFtjYXRhbG9nU2V0dGluZ109XCJjYXRhbG9nU2V0dGluZ1wiXG4gICAgICBbZmF2b3JpdGVzQnV0dG9uSGlkZGVuXT1cImlzRmF2b3JpdGVzUGFnZSgpXCJcbiAgICAgIFtwZXJzb25hbEJ1dHRvbkhpZGRlbl09XCIhKGNvbnRleHRTZXJ2aWNlLmVuYWJsZVBlcnNvbmFsUmVjaXBlcyQgfCBhc3luYylcIlxuICAgICAgW2ZpbHRlckJhZGdlQ291bnRdPVwiZmlsdGVycy5zZWxlY3RhYmxlRmlsdGVyc0NvdW50KClcIlxuICAgICAgKHJldHVybkJ1dHRvblByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCJcbiAgICAgIChmaWx0ZXJCdXR0b25QcmVzc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgICAgKHNlYXJjaFN0cmluZ0NoYW5nZWQpPVwidXBkYXRlU2VhcmNoKCRldmVudClcIlxuICAgICAgKHBlcnNvbmFsQnV0dG9uUHJlc3NlZCk9XCJzZXRQZXJzb25hbEZpbHRlcigpXCJcbiAgICAgIChmYXZvcml0ZXNCdXR0b25QcmVzc2VkKT1cInNldEZhdm9yaXRlc0ZpbHRlcigpXCI+XG4gICAgPC9uZy1taWFtLWNhdGFsb2ctaGVhZGVyPlxuICAgIDxkaXYgKm5nSWY9XCJyZWNpcGVDb3VudCA+IDBcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX215TWVhbF9fYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU15TWVhbERyYXdlcigpXCIgPlxuICAgICAgPG5nLW1pYW0taWNvbiBbaWNvbk5hbWVdPVwiaWNvbi5DYXJ0XCIgcHJpbWFyeUNvbG9yPSd2YXIoLS1tLWNvbG9yLXdoaXRlKScgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2ZpcnN0X19pY29uXCIgPjwvbmctbWlhbS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX2J1dHRvbl9fdGV4dFwiPlxuICAgICAgICA8c3Bhbj57e3JlY2lwZUNvdW50fX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGkxOG4+IHJlcGFzPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPG5nLW1pYW0taWNvbiAgW2ljb25OYW1lXT1cImljb24uQ2hldnJvbkRvd25cIiBwcmltYXJ5Q29sb3I9J3ZhcigtLW0tY29sb3Itd2hpdGUpJyBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX215TWVhbF9fc2Vjb25kX19pY29uXCI+PC9uZy1taWFtLWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVzZXIgZmVlZGJhY2sgYmFubmVyICh1bnVzZWQgZm9yIG5vdyAvIG1heWJlIHJlYWN0aXZhdGVkIGxhdGVyKSAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19tb2RhbFwiICpuZ0lmPVwic2hvd1VzZXJGZWVkYmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2ljb24tY3Jvc3NcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgW2ljb25OYW1lXT1cImljb24uQ3Jvc3NcIiBbd2lkdGhdPVwiMzBcIiBbaGVpZ2h0XT1cIjMwXCIgcHJpbWFyeUNvbG9yPVwibm9uZVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlBvdXIgbWlldXggdm91cyBjb25uYcOudHJlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX3F1ZXN0aW9uXCI+XG4gICAgICAgICAgICA8c3Bhbj5BdmV6LXZvdXMgbCdoYWJpdHVkZSBkZSBjdWlzaW5lciBwb3VyIG91IGF2ZWMgZGVzIGVuZmFudHMgPzwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibS1mZWVkYmFjay1idXR0b25cIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIGZhbHNlKVwiPk5vbjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWZlZWRiYWNrLWJ1dHRvblwiIChjbGljayk9XCJzZXRVc2VyUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJywgdHJ1ZSlcIj5PdWk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIENhdGFsb2cgcGFnZSBjb250ZW50IHdoZW4gZmlsdGVycyBhcHBsaWVkIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhZGlzcGxheUhvbWVQYWdlKCkgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3RpdGxlXCI+XG4gICAgICAgIDxuZy1taWFtLWljb24gW2ljb25OYW1lXT1cImljb24uQXJyb3dEb3duXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgKGNsaWNrKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdGl0bGVfX3NlYXJjaF9fdGV4dFwiICpuZ0lmPVwiaXNTZWFyY2hQYWdlKClcIj5cbiAgICAgICAgICA8c3BhbiBpMThuPlZvdHJlIHJlY2hlcmNoZSA6IDwvc3Bhbj48c3Bhbj57eyBmaWx0ZXJzLnNlYXJjaCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNGYXZvcml0ZXNQYWdlKClcIiBpMThuPk1lcyBpZMOpZXMgcmVwYXM8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNQZXJzb25hbFBhZ2UoKVwiIGkxOG4+TW9uIGNhcm5ldCBwZXJzbzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0NhdGVnb3J5UGFnZSgpXCI+e3sgZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0RlZmF1bHRQYWdlKClcIiBpMThuPlZvdHJlIHPDqWxlY3Rpb248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19saXN0X19jcmVhdGVfX19idXR0b25cIiAqbmdJZj1cImNhbkRpc3BsYXlDcmVhdGlvbkJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgKGNsaWNrKT1cIm1hbmFnZVJlY2lwZUFjdGlvbih7YWN0aW9uOiAnQ1JFQVRFJywgcmVjaXBlOiBudWxsfSlcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBbaWNvbk5hbWVdPVwiaWNvbi5QbHVzXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci1wcmltYXJ5KVwiPjwvbmctbWlhbS1pY29uPlxuICAgICAgICA8c3BhbiBpMThuPkFqb3V0ZXIgdW5lIGlkw6llIHJlcGFzPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1taWFtLWNhdGFsb2ctbGlzdFxuICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICAgICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgICAgIFtkaXNwbGF5UHJpY2luZ109XCJkaXNwbGF5UHJpY2luZ1wiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLW1pYW0tcmVjaXBlLWZpbHRlcnNcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbaXNGaWx0ZXJDb2xsYXBzZWRdPVwiaXNGaWx0ZXJDb2xsYXBzZWRcIlxuICAgIFtmaWx0ZXJUb1JlbW92ZV09XCJmaWx0ZXJUb1JlbW92ZVwiXG4gICAgW3Bvc2l0aW9uXT1cImZpbHRlcnNQb3NpdGlvblwiXG4gICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgKGZpbHRlckNoYW5nZWQpPVwidXBkYXRlRmlsdGVycygkZXZlbnQpXCJcbiAgICAoZmlsdGVyQ29sbGFwc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIlxuICAgIChwcmVmZXJlbmNlc0NoYW5nZWQpPVwicmVsb2FkUGFja2FnZXMoKVwiXG4gID5cbiAgPC9uZy1taWFtLXJlY2lwZS1maWx0ZXJzPlxuICA8IS0tIENhdGFsb2cgaG9tZSBwYWdlIGNvbnRlbnQgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc0NvbXBvbmVudHM+XG4gICAgPGRpdiAqbmdJZj1cImNhdGVnb3JpZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY2F0ZWdvcmllc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcyBsZXQgaSA9IGluZGV4XCIgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSAhPT0gMCBlbHNlIGZpcnN0Q2F0ZWdvcnlcIj5cbiAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5XG4gICAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cImNhdGVnb3J5LnN1YnRpdGxlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgW2Rpc3BsYXlQcmljaW5nXT1cImRpc3BsYXlQcmljaW5nXCJcbiAgICAgICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlyc3RDYXRlZ29yeT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fZmlyc3QtY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxuZy1taWFtLW1lYWxzLXBsYW5uZXItbGluayAqbmdJZj1cImNvbnRleHRTZXJ2aWNlLmVuYWJsZU1lYWxzUGxhbm5lciQgfCBhc3luY1wiPjwvbmctbWlhbS1tZWFscy1wbGFubmVyLWxpbms+XG4gICAgICAgICAgICA8bmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5XG4gICAgICAgICAgICAgIFt0aXRsZV09XCJjYXRlZ29yeS50aXRsZVwiXG4gICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJjYXRlZ29yeS5zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgICAgICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19leHBsYWluX2Jhbm5lclwiPlxuICAgICAgICAgICAgPG5nLW1pYW0tZXhwbGFpbi1iYW5uZXIgW2NhdGFsb2dTZXR0aW5nXT1cImNhdGFsb2dTZXR0aW5nXCI+PC9uZy1taWFtLWV4cGxhaW4tYmFubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjcmVhdGlvblBhZ2U+XG4gIDxuZy1taWFtLXJlY2lwZS1zdGVwcGVyXG4gICAgKm5nSWY9XCJjYXRhbG9nU2V0dGluZ0hhc0xvYWRlZFwiXG4gICAgW3JlY2lwZVRvVXBkYXRlXT1cInJlY2lwZVRvVXBkYXRlXCJcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAocmVjaXBlQ2hhbmdlKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCJcbiAgICAoY2FuY2VsZWQpPVwibGVhdmVDcmVhdGVQYWdlKClcIj5cbiAgPC9uZy1taWFtLXJlY2lwZS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQ3ZHLGNBQWMsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFxQyxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGdC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QUUsQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLG9CQUFvQjtvQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzFCLE1BQU07YUFDVDtTQUNGO0lBQ0gsQ0FBQzs7NEZBeFdVLHNCQUFzQjsyREFBdEIsc0JBQXNCO3VCQUN0QixzQkFBc0I7O3VCQUVuQix3QkFBd0I7Ozs7Ozs7Ozs7O2lCQ1hwQixVQUFBLHVFQUFLOzs7Ozs7aUJBMkJpQixVQUFBLG1GQUFrQjs7Ozs7O2lCQUNmLFVBQUEsK0VBQWU7Ozs7OztpQkFDaEIsVUFBQSxpRkFBZ0I7Ozs7OztpQkFFakIsVUFBQSxnRkFBZTs7Ozs7O2tCQUt2QyxVQUFBLHVGQUFzQjs7UUEzRHpDLDRCQUE2RDtRQUM3RCx3RUFDRTtRQXNIRix3SEFDRTs7O1FBeEhHLGVBQW9FO1FBQXBFLHlFQUFvRSxpQkFBQTs7a0REOEI1RCxzQkFBc0I7Y0FQbEMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLFdBQVcsRUFBRSxpQ0FBaUM7Z0JBQzlDLFNBQVMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2dCQUM5QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7NllBRW9DLGFBQWE7a0JBQS9DLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ0UsU0FBUztrQkFBM0MsU0FBUzttQkFBQyxzQkFBc0I7WUFDUSxjQUFjO2tCQUF0RCxZQUFZO21CQUFDLHdCQUF3QjtZQUU3QixnQkFBZ0I7a0JBQXhCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkluaXQsIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQgfSBmcm9tICcuL2NhdGFsb2ctY2F0ZWdvcnkvY2F0YWxvZy1jYXRlZ29yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2F0YWxvZ1NldHRpbmcsIFJlY2lwZSwgU3VwcGxpZXIgfSBmcm9tICcuLi8uLi9fbW9kZWxzJztcbmltcG9ydCB7IFJlY2lwZVR5cGVTZXJ2aWNlLCBTcG9uc29yU2VydmljZSwgUGFja2FnZVNlcnZpY2UsIFN1cHBsaWVyc1NlcnZpY2UsIFJlY2lwZXNTZXJ2aWNlLCBVc2VyU2VydmljZSxcbiAgQmFza2V0c1NlcnZpY2UsIENvbnRleHRTZXJ2aWNlLCBDYXRhbG9nU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NhdGFsb2ctaGVhZGVyL2NhdGFsb2ctaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQWRkaXRpb25uYWxGaWx0ZXJzLCBSZWNpcGVGaWx0ZXIsIFJlY2lwZUZpbHRlcnMgfSBmcm9tICcuLi8uLi9fdHlwZXMvcmVjaXBlLWZpbHRlcnMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ25neC1qc29uYXBpJztcbmltcG9ydCB7IFBhY2thZ2UgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3BhY2thZ2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIENhdGVnb3J5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogc3RyaW5nIH07IHRpdGxlOiBzdHJpbmcgfX07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tcmVjaXBlLWNhdGFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSZWNpcGVDYXRhbG9nQ29tcG9uZW50IGV4dGVuZHMgRXZlbnRUcmFjZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ2F0YWxvZ0hlYWRlckNvbXBvbmVudCkgY2F0YWxvZ0hlYWRlcjogQ2F0YWxvZ0hlYWRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlhbUNhdGFsb2dUb3BBbmNob3InKSB0b3BBbmNob3I6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgaGVhZGVyUGljdHVyZVVybCA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9kZWZhdWx0LWNhdGFsb2ctcGljdHVyZS5wbmcnO1xuICBASW5wdXQoKSBpbml0aWFsUm91dGUgPSAnJztcbiAgQElucHV0KCkgZmlsdGVyc1Bvc2l0aW9uID0gJ2xlZnQnO1xuICBASW5wdXQoKSBob21lTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBjdXN0b21GaWx0ZXJzOiB7IGRpZmZpY3VsdHk/OiBSZWNpcGVGaWx0ZXJbXTsgY29zdD86IFJlY2lwZUZpbHRlcltdOyB0aW1lPzogUmVjaXBlRmlsdGVyW10gfTtcblxuICBmaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzO1xuICBpc0ZpbHRlckNvbGxhcHNlZCA9IHRydWU7XG4gIGljb24gPSBJY29uO1xuICBjYXRlZ29yaWVzOiBDYXRlZ29yeVtdID0gW107XG4gIGNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gIHJlY2lwZVRvVXBkYXRlOiBSZWNpcGU7XG4gIGZpbHRlclRvUmVtb3ZlOiBzdHJpbmc7XG4gIGlzTW9iaWxlID0gZmFsc2U7XG4gIHNob3dVc2VyRmVlZGJhY2sgPSBmYWxzZTtcbiAgcmVjaXBlQ291bnQgPSAwO1xuICB0b3RhbFByaWNlID0gMDtcbiAgaXNNeU1lYWxDbG9zZSA9IHRydWU7XG4gIGNhdGFsb2dTZXR0aW5nOiBDYXRhbG9nU2V0dGluZztcbiAgY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgc3VwcGxpZXJJZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcmVjaXBlVHlwZXNTZXJ2aWNlOiBSZWNpcGVUeXBlU2VydmljZSxcbiAgICBwdWJsaWMgc3BvbnNvclNlcnZpY2U6IFNwb25zb3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBzdXBwbGllclNlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHVibGljIHBhY2thZ2VTZXJ2aWNlOiBQYWNrYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwdWJsaWMgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICAgcHVibGljIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHVibGljIGNhdGFsb2dTZXR0aW5nU2VydmljZTogQ2F0YWxvZ1NldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICBwdWJsaWMgYmFza2V0c1NlcnZpY2U6IEJhc2tldHNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGFuYWx5dGljc1NlcnZpY2UpO1xuICAgIHRoaXMuaXNNb2JpbGUgPSBtZWRpYU1hdGNoZXIubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogMTAyMnB4KScpLm1hdGNoZXM7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgdGhpcy5pbml0RmlsdGVycygpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnN1cHBsaWVyU2VydmljZS5zdXBwbGllciQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKHN1cHAgPT4gc3VwcCA9PT0gdW5kZWZpbmVkIHx8IHN1cHAgPT0gbnVsbCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChzdXBwbGllciA9PiB7XG4gICAgICAgICAgdGhpcy5zdXBwbGllcklkID0gc3VwcGxpZXIuaWQ7XG4gICAgICAgICAgdGhpcy5pbml0Q2F0YWxvZ0hlYWRlcihzdXBwbGllcik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFBhY2thZ2VzKCk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpLFxuICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5iYXNrZXRTdGF0cyQucGlwZShza2lwV2hpbGUoYnMgPT4gIWJzKSkuc3Vic2NyaWJlKGJzID0+IHtcbiAgICAgICAgdGhpcy5yZWNpcGVDb3VudCA9IGJzLnJlY2lwZXNDb3VudDtcbiAgICAgICAgdGhpcy50b3RhbFByaWNlID0gYnMudG90YWxQcmljZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSksXG4gICAgICB0aGlzLmFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKVxuICAgICk7XG5cbiAgICB0aGlzLnNldERpcmVjdEFjY2VzcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMub3BlbkZlYXR1cmVzRnJvbVVSTCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGN1cnJlbnRQYXRoKCk6IHN0cmluZyB7IHJldHVybiAnbWlhbS9yZWNpcGVzJzsgfVxuXG4gIG9wZW5GZWF0dXJlc0Zyb21VUkwoKSB7XG4gICAgY29uc3QgcGFyYW1zQXJyYXkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGlmIChwYXJhbXNBcnJheS5nZXQoJ29wZW5CYXNrZXQnKSA9PT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLnRvZ2dsZU15TWVhbERyYXdlcigpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zQXJyYXkuZ2V0KCdwZXJzb25hbENhdGFsb2cnKSA9PT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLnNldFBlcnNvbmFsRmlsdGVyKCk7XG4gICAgfVxuICAgIGNvbnN0IGNvc3QgPSBwYXJhbXNBcnJheS5nZXQoJ2Nvc3QnKT8uc3BsaXQoJywnKTtcbiAgICBpZiAoY29zdD8ubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aGlzLnNldFByaWNlRmlsdGVycyhjb3N0KTtcbiAgICB9XG4gIH1cblxuICBkaXNwbGF5SG9tZVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5pc0VtcHR5KCk7XG4gIH1cblxuICAvLyBpbml0IHRoZSB2YWx1ZSBvZiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0IGZvciB0aGUgY2F0YWxvZyBoZWFkZXIsIHVzaW5nIHRoZSBjYXRhbG9nIHNldHRpbmcgb2YgdGhlIHN1cHBsaWVyXG4gIGluaXRDYXRhbG9nSGVhZGVyKHN1cHBsaWVyOiBTdXBwbGllcikge1xuICAgIGlmIChzdXBwbGllci5yZWxhdGlvbnNoaXBzWydjYXRhbG9nLXNldHRpbmcnXT8uZGF0YSkge1xuICAgICAgY29uc3QgaWQgPSBzdXBwbGllci5yZWxhdGlvbnNoaXBzWydjYXRhbG9nLXNldHRpbmcnXT8uZGF0YT8uaWQ7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5jYXRhbG9nU2V0dGluZ1NlcnZpY2UuZ2V0KGlkKS5waXBlKFxuICAgICAgICAgIHNraXBXaGlsZShjID0+IGMuaXNfbG9hZGluZyksXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICB0YXAoY2F0YWxvZyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhdGFsb2dTZXR0aW5nID0gY2F0YWxvZztcbiAgICAgICAgICAgIHRoaXMuY2F0YWxvZ1NldHRpbmdIYXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlZCBvbiBsb2FkIHRvIGJ1aWxkIHRoZSBmaWx0ZXJzIGF0dHJpYnV0ZSwgYW5kIG9uIGNsaWNrIG9uIHRoZSBsaW5rIHRvIHJlc2V0IHRoZSBmaWx0ZXJzXG4gIGluaXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKFxuICAgICAge1xuICAgICAgICBkaWZmaWN1bHR5OiB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpZmZpY3VsdHlMZXZlbHMubWFwKGYgPT4gKHsgbmFtZTogZi52YWx1ZS50b1N0cmluZygpLCB0ZXh0OiBmLmxhYmVsLCB2YWx1ZTogZmFsc2UgfSkpLFxuICAgICAgICBjb3N0OiBbXG4gICAgICAgICAge25hbWU6ICcwLTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZX0sXG4gICAgICAgICAge25hbWU6ICcxMC0xMDAwJywgdmFsdWU6IGZhbHNlfVxuICAgICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgICAgXSxcbiAgICAgICAgdGltZTogW1xuICAgICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMzAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnNjAnLCB2YWx1ZTogZmFsc2V9LFxuICAgICAgICAgIHtuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlfVxuXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApO1xuICAgIGlmICh0aGlzLmN1c3RvbUZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB0aGlzLmN1c3RvbUZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXRhbG9nSGVhZGVyKSB7IHRoaXMuY2F0YWxvZ0hlYWRlci5yZXNldFNlYXJjaFN0cmluZygpOyB9XG4gICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJzKGZpbHRlcnM6IFJlY2lwZUZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzLmNvcHkoKTsgLy8gbmVjZXNzYXJ5IHRvIHRyaWdnZXIgY2hpbGQgY29tcG9uZW50IGNoYW5nZVxuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgIGlmIChzZWFyY2ggIT09IHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywgeyBzZWFyY2ggfSk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nOyBmaWx0ZXJzOiBJQWRkaXRpb25uYWxGaWx0ZXJzfSkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVycywge1xuICAgICAgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogZXZlbnQuZmlsdGVycywgdGl0bGU6IGV2ZW50LnRpdGxlIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRGYXZvcml0ZXNGaWx0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5hc3NpZ24odGhpcy5maWx0ZXJzLCB7XG4gICAgICBhZGRpdGlvbmFsRmlsdGVyczoge1xuICAgICAgICBmaWx0ZXJzOiB7IGxpa2VkOiB0cnVlIH0sXG4gICAgICAgIHRpdGxlOiAnTWVzIGlkw6llcyByZXBhcydcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRQZXJzb25hbEZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgcGVyc29uYWw6IHRydWUsIGFjdGl2ZTogJ3RydWUsZmFsc2UnIH0sXG4gICAgICAgIHRpdGxlOiAnTW9uIGNhcm5ldCBwZXJzbydcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICBzZXRQcmljZUZpbHRlcnMoY29zdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnMsIHtcbiAgICAgIGFkZGl0aW9uYWxGaWx0ZXJzOiB7XG4gICAgICAgIGZpbHRlcnM6IHsgY29tcHV0ZWRfY29zdDogY29zdFswXSArICcsZ3QsJyArIGNvc3RbMV0gKyAnLGx0JywgcmVjaXBlX3R5cGVfaWQ6ICdtYWluLWRpc2gnIH0sXG4gICAgICAgIHRpdGxlOiBgUmVjZXR0ZXMgw6AgbW9pbnMgZGUgJHtjb3N0WzFdfeKCrGBcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoZmlsdGVycyk7XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoZmlsdGVyVGV4dDogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGZ1bmN0aW9uIGlzIGJyb2tlbiwgdXNlIGhhcyBiZWVuIGNvbW1lbnRhdGVkLCByZXBhaXIgaXQgaWYgeW91IHdhbnQgdG8gdXNlIGl0IGFnYWluJyk7XG4gICAgdGhpcy5maWx0ZXJUb1JlbW92ZSA9IGZpbHRlclRleHQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0dXJuVG9Ub3AoKSB7XG4gICAgaWYgKHRoaXMudG9wQW5jaG9yKSB7XG4gICAgICB0aGlzLnRvcEFuY2hvci5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuVG9Ib21lUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgLy8gZWl0aGVyIHlvdSBoYXZlIGZpbHRlcnMgZWl0aGVyIHlvdSBhcmUgb24gaG9tZSBwYWdlLiBUaGF0IG1lYW4gaWYgeW91IGdvIG9uIGhvbWUgcGFnZSB5b3UgZG9uJ3Qgd2FudCBBTlkgZmlsdGVyXG4gICAgdGhpcy5pbml0RmlsdGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnb1RvQ3JlYXRlUGFnZShyZWNpcGU6IFJlY2lwZSA9IG51bGwpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZVRvVXBkYXRlID0gcmVjaXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBsZWF2ZUNyZWF0ZVBhZ2UoKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBtYW5hZ2VSZWNpcGVBY3Rpb24oZXZlbnQ6IHthY3Rpb246IHN0cmluZzsgcmVjaXBlOiBSZWNpcGV9KSB7XG4gICAgc3dpdGNoIChldmVudC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ0NSRUFURSc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnRURJVCc6IHtcbiAgICAgICAgdGhpcy5nb1RvQ3JlYXRlUGFnZShldmVudC5yZWNpcGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnREVMRVRFJzoge1xuICAgICAgICBpZiAoZXZlbnQucmVjaXBlPy5pZCAmJiBldmVudC5yZWNpcGUucmVsYXRpb25zaGlwc1sncmVjaXBlLXByb3ZpZGVyJ10/LmRhdGEuaWQgPT09ICdwZXJzb25hbCcpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucmVjaXBlc1NlcnZpY2UuZGVsZXRlKGV2ZW50LnJlY2lwZS5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnByb3BzKCksIHsgcmVjaXBlSWQ6IGV2ZW50LnJlY2lwZS5pZCB9KTtcbiAgICAgICAgICAgICAgdGhpcy5zZW5kRXZlbnQodGhpcy5hbmFseXRpY3NTZXJ2aWNlLkVWRU5UX1BFUlNPTkFMX1JFQ0lQRV9ERUxFVEUpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFja2FnZXMoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmxvYWRQYWNrYWdlcygpLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIGlzU2VhcmNoUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoLmxlbmd0aCA+IDA7XG4gIH1cblxuICBpc0Zhdm9yaXRlc1BhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmIHRoaXMuZmlsdGVycz8uYWRkaXRpb25hbEZpbHRlcnM/LnRpdGxlID09PSAnTWVzIGlkw6llcyByZXBhcyc7XG4gIH1cblxuICBpc1BlcnNvbmFsUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzcGxheUhvbWVQYWdlKCkgJiYgIXRoaXMuaXNTZWFyY2hQYWdlKCkgJiYgdGhpcy5maWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGUgPT09ICdNb24gY2FybmV0IHBlcnNvJztcbiAgfVxuXG4gIGlzQ2F0ZWdvcnlQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5SG9tZVBhZ2UoKSAmJiAhdGhpcy5pc1NlYXJjaFBhZ2UoKSAmJiAhdGhpcy5pc0Zhdm9yaXRlc1BhZ2UoKSAmJiAhdGhpcy5pc1BlcnNvbmFsUGFnZSgpICYmXG4gICAgICB0aGlzLmZpbHRlcnM/LmFkZGl0aW9uYWxGaWx0ZXJzPy50aXRsZT8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzRGVmYXVsdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmRpc3BsYXlIb21lUGFnZSgpICYmICF0aGlzLmlzU2VhcmNoUGFnZSgpICYmICF0aGlzLmlzRmF2b3JpdGVzUGFnZSgpICYmICF0aGlzLmlzUGVyc29uYWxQYWdlKCkgJiYgIXRoaXMuaXNDYXRlZ29yeVBhZ2UoKTtcbiAgfVxuXG4gIGNhbkRpc3BsYXlDcmVhdGlvbkJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBtYXAoaXNMb2dnZWQgPT4gaXNMb2dnZWQgJiYgdGhpcy5pc1BlcnNvbmFsUGFnZSgpKVxuICAgICk7XG4gIH1cblxuICB0b2dnbGVNeU1lYWxEcmF3ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNpcGVzU2VydmljZS5vcGVuQmFza2V0KHRoaXMuZXZlbnRUcmFjZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhY2thZ2VzKCk6IE9ic2VydmFibGU8RG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZVNlcnZpY2UuY2F0ZWdvcmllc19mb3IoW3RoaXMuc3VwcGxpZXJJZF0pLnBpcGUoXG4gICAgICBza2lwV2hpbGUocGFja2FnZXMgPT4gcGFja2FnZXMuaXNfbG9hZGluZyksXG4gICAgICB0YXAoKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q2F0ZWdvcmllcyhwYWNrYWdlcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENhdGVnb3JpZXMocGFja2FnZXM6IERvY3VtZW50Q29sbGVjdGlvbjxQYWNrYWdlPik6IHZvaWQge1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHBhY2thZ2VzLmRhdGEubWFwKGNhdGVnb3J5UGFja2FnZSA9PiAoe1xuICAgICAga2V5OiBjYXRlZ29yeVBhY2thZ2UudGl0bGUudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpBLVowLTkgLV0vLCAnJykucmVwbGFjZSgvXFxzL2csICctJyksXG4gICAgICB0aXRsZTogY2F0ZWdvcnlQYWNrYWdlLnRpdGxlLFxuICAgICAgc3VidGl0bGU6IGNhdGVnb3J5UGFja2FnZS5zdWJ0aXRsZSxcbiAgICAgIGZpbHRlcnM6IHsgYWRkaXRpb25hbEZpbHRlcnM6IHsgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH0sIHRpdGxlOiAnJyB9IH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhdGVnb3J5RnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXNBcnJheSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykgPT09ICdmYXZvcml0ZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRGYXZvcml0ZXNGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5JykpO1xuICAgIGlmIChzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yeVRpdGxlQ2xpY2tlZCh7IHRpdGxlOiBzZWxlY3RlZENhdGVnb3J5LnRpdGxlLCBmaWx0ZXJzOiBzZWxlY3RlZENhdGVnb3J5LmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuZmlsdGVycyB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGZlZWRiYWNrIGJsb2NrIG9ubHkgaWYgdXNlciBpcyBsb2dnZWQgYW5kIHRoZSBjaGlsZHJlbiBwcmVmZXJlbmNlIGlzIHVua25vd25cbiAgcHJpdmF0ZSBhc3Nlc3NTaG93VXNlckZlZWRiYWNrKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZURlZmluZWQoJ2hhc19jaGlsZHJlbicpLFxuICAgICAgdGhpcy51c2Vyc1NlcnZpY2UucHJlZmVyZW5jZXNBY3RpdmF0ZWQkXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgY29uc3QgbG9nZ2VkID0gcmVzdWx0c1swXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VEZWZpbmVkID0gcmVzdWx0c1sxXTtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzQWN0aXZhdGVkID0gcmVzdWx0c1syXTtcbiAgICAgIHRoaXMuc2hvd1VzZXJGZWVkYmFjayA9IGxvZ2dlZCAmJiAhcHJlZmVyZW5jZURlZmluZWQgJiYgcHJlZmVyZW5jZXNBY3RpdmF0ZWQ7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpcmVjdEFjY2Vzcygpe1xuICAgIGlmICh0aGlzLmluaXRpYWxSb3V0ZSAhPT0gJycpe1xuICAgICAgc3dpdGNoICh0aGlzLmluaXRpYWxSb3V0ZSl7XG4gICAgICAgIGNhc2UgJ21lcy1yZXBhcyc6XG4gICAgICAgICAgdGhpcy50b2dnbGVNeU1lYWxEcmF3ZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWVzLXJlY2V0dGVzLXBlcnNvbm5lbGxlcyc6XG4gICAgICAgICAgdGhpcy5zZXRQZXJzb25hbEZpbHRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZWNldHRlcy1mYXZvcml0ZXMnOlxuICAgICAgICAgIHRoaXMuc2V0RmF2b3JpdGVzRmlsdGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVW51c2VkIGZvciBub3cuLi5cbiAgLy8gc2V0VXNlclByZWZlcmVuY2UocHJlZiwgc3RhdGUpIHtcbiAgLy8gICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgLy8gICAgIHRoaXMudXNlcnNTZXJ2aWNlLnNldFByZWZlcmVuY2UocHJlZiwgc3RhdGUpLnBpcGUoXG4gIC8vICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRQYWNrYWdlcygpKVxuICAvLyAgICAgKS5zdWJzY3JpYmUoKVxuICAvLyAgICk7XG4gIC8vICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGNsb3NlTW9kYWwoKSB7XG4gIC8vICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gIXRoaXMuc2hvd1VzZXJGZWVkYmFjaztcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cbn1cbiIsIjxkaXYgI21pYW1DYXRhbG9nVG9wQW5jaG9yIGNsYXNzPVwibWlhbS1jYXRhbG9nLWFuY2hvclwiPjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFjcmVhdGluZ1JlY2lwZSAmJiBjYXRhbG9nU2V0dGluZ0hhc0xvYWRlZCBlbHNlIGNyZWF0aW9uUGFnZVwiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ1wiPlxuICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudFwiPlxuICAgIDxuZy1taWFtLWNhdGFsb2ctaGVhZGVyIFxuICAgICAgW2hvbWVdPVwiZGlzcGxheUhvbWVQYWdlXCJcbiAgICAgIFtzZWFyY2hUZXJtXT1cImZpbHRlcnM/LnNlYXJjaFwiXG4gICAgICBbYWRkaXRpb25hbEZpbHRlcnNUaXRsZV09XCJmaWx0ZXJzPy5hZGRpdGlvbmFsRmlsdGVycz8udGl0bGVcIlxuICAgICAgW2hvbWVMYWJlbF09XCJob21lTGFiZWxcIlxuICAgICAgW3BpY3R1cmVVcmxdPVwiZGlzcGxheUhvbWVQYWdlKCkgPyBoZWFkZXJQaWN0dXJlVXJsIDogbnVsbFwiXG4gICAgICBbY2F0YWxvZ1NldHRpbmddPVwiY2F0YWxvZ1NldHRpbmdcIlxuICAgICAgW2Zhdm9yaXRlc0J1dHRvbkhpZGRlbl09XCJpc0Zhdm9yaXRlc1BhZ2UoKVwiXG4gICAgICBbcGVyc29uYWxCdXR0b25IaWRkZW5dPVwiIShjb250ZXh0U2VydmljZS5lbmFibGVQZXJzb25hbFJlY2lwZXMkIHwgYXN5bmMpXCJcbiAgICAgIFtmaWx0ZXJCYWRnZUNvdW50XT1cImZpbHRlcnMuc2VsZWN0YWJsZUZpbHRlcnNDb3VudCgpXCJcbiAgICAgIChyZXR1cm5CdXR0b25QcmVzc2VkKT1cInJldHVyblRvSG9tZVBhZ2UoKVwiXG4gICAgICAoZmlsdGVyQnV0dG9uUHJlc3NlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCJcbiAgICAgIChzZWFyY2hTdHJpbmdDaGFuZ2VkKT1cInVwZGF0ZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIChwZXJzb25hbEJ1dHRvblByZXNzZWQpPVwic2V0UGVyc29uYWxGaWx0ZXIoKVwiXG4gICAgICAoZmF2b3JpdGVzQnV0dG9uUHJlc3NlZCk9XCJzZXRGYXZvcml0ZXNGaWx0ZXIoKVwiPlxuICAgIDwvbmctbWlhbS1jYXRhbG9nLWhlYWRlcj5cbiAgICA8ZGl2ICpuZ0lmPVwicmVjaXBlQ291bnQgPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X19teU1lYWxfX2J1dHRvblwiIChjbGljayk9XCJ0b2dnbGVNeU1lYWxEcmF3ZXIoKVwiID5cbiAgICAgIDxuZy1taWFtLWljb24gW2ljb25OYW1lXT1cImljb24uQ2FydFwiIHByaW1hcnlDb2xvcj0ndmFyKC0tbS1jb2xvci13aGl0ZSknIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbXlNZWFsX19maXJzdF9faWNvblwiID48L25nLW1pYW0taWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbXlNZWFsX19idXR0b25fX3RleHRcIj5cbiAgICAgICAgPHNwYW4+e3tyZWNpcGVDb3VudH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBpMThuPiByZXBhczwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy1taWFtLWljb24gIFtpY29uTmFtZV09XCJpY29uLkNoZXZyb25Eb3duXCIgcHJpbWFyeUNvbG9yPSd2YXIoLS1tLWNvbG9yLXdoaXRlKScgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19teU1lYWxfX3NlY29uZF9faWNvblwiPjwvbmctbWlhbS1pY29uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVc2VyIGZlZWRiYWNrIGJhbm5lciAodW51c2VkIGZvciBub3cgLyBtYXliZSByZWFjdGl2YXRlZCBsYXRlcikgLS0+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fbW9kYWxcIiAqbmdJZj1cInNob3dVc2VyRmVlZGJhY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrXCI+XG4gICAgICAgIDxuZy1taWFtLWljb24gY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19pY29uLWNyb3NzXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiIFtpY29uTmFtZV09XCJpY29uLkNyb3NzXCIgW3dpZHRoXT1cIjMwXCIgW2hlaWdodF09XCIzMFwiIHByaW1hcnlDb2xvcj1cIm5vbmVcIj48L25nLW1pYW0taWNvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICA8c3Bhbj5Qb3VyIG1pZXV4IHZvdXMgY29ubmHDrnRyZTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50X191c2VyLWZlZWRiYWNrX19xdWVzdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4+QXZlei12b3VzIGwnaGFiaXR1ZGUgZGUgY3Vpc2luZXIgcG91ciBvdSBhdmVjIGRlcyBlbmZhbnRzID88L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja19fYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWZlZWRiYWNrLWJ1dHRvblwiIChjbGljayk9XCJzZXRVc2VyUHJlZmVyZW5jZSgnaGFzX2NoaWxkcmVuJywgZmFsc2UpXCI+Tm9uPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tZmVlZGJhY2stYnV0dG9uXCIgKGNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nLCB0cnVlKVwiPk91aTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gQ2F0YWxvZyBwYWdlIGNvbnRlbnQgd2hlbiBmaWx0ZXJzIGFwcGxpZWQgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFkaXNwbGF5SG9tZVBhZ2UoKSBlbHNlIGNhdGVnb3JpZXNDb21wb25lbnRzXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdGl0bGVcIj5cbiAgICAgICAgPG5nLW1pYW0taWNvbiBbaWNvbk5hbWVdPVwiaWNvbi5BcnJvd0Rvd25cIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiAoY2xpY2spPVwicmV0dXJuVG9Ib21lUGFnZSgpXCI+PC9uZy1taWFtLWljb24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTZWFyY2hQYWdlKClcIiBpMThuPlZvdHJlIHJlY2hlcmNoZSA6IDwvc3Bhbj48c3BhbiAqbmdJZj1cImlzU2VhcmNoUGFnZSgpXCI+e3sgZmlsdGVycy5zZWFyY2ggfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNGYXZvcml0ZXNQYWdlKClcIiBpMThuPk1lcyBpZMOpZXMgcmVwYXM8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNQZXJzb25hbFBhZ2UoKVwiIGkxOG4+TW9uIGNhcm5ldCBwZXJzbzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0NhdGVnb3J5UGFnZSgpXCI+e3sgZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0RlZmF1bHRQYWdlKClcIiBpMThuPlZvdHJlIHPDqWxlY3Rpb248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19saXN0X19jcmVhdGVfX19idXR0b25cIiAqbmdJZj1cImNhbkRpc3BsYXlDcmVhdGlvbkJ1dHRvbigpIHwgYXN5bmNcIiBcbiAgICAgIChjbGljayk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oe2FjdGlvbjogJ0NSRUFURScsIHJlY2lwZTogbnVsbH0pXCI+XG4gICAgICAgIDxuZy1taWFtLWljb24gW2ljb25OYW1lXT1cImljb24uUGx1c1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHByaW1hcnlDb2xvcj1cInZhcigtLW0tY29sb3ItcHJpbWFyeSlcIj48L25nLW1pYW0taWNvbj5cbiAgICAgICAgPHNwYW4gaTE4bj5Bam91dGVyIHVuZSBpZMOpZSByZXBhczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctbWlhbS1jYXRhbG9nLWxpc3RcbiAgICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgICAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgICAgICAoZmlsdGVyUmVtb3ZlZCk9XCJyZW1vdmVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgIChyZWNpcGVBY3Rpb25UcmlnZ2VyZWQpPVwibWFuYWdlUmVjaXBlQWN0aW9uKCRldmVudClcIj5cbiAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWxpc3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1taWFtLXJlY2lwZS1maWx0ZXJzXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW2lzRmlsdGVyQ29sbGFwc2VkXT1cImlzRmlsdGVyQ29sbGFwc2VkXCJcbiAgICBbZmlsdGVyVG9SZW1vdmVdPVwiZmlsdGVyVG9SZW1vdmVcIlxuICAgIFtwb3NpdGlvbl09XCJmaWx0ZXJzUG9zaXRpb25cIlxuICAgIFtvcmlnaW5UcmFjZV09XCJldmVudFRyYWNlKClcIlxuICAgIChmaWx0ZXJDaGFuZ2VkKT1cInVwZGF0ZUZpbHRlcnMoJGV2ZW50KVwiXG4gICAgKGZpbHRlckNvbGxhcHNlZCk9XCJvbkZpbHRlckNvbGxhcHNlZCgpXCJcbiAgICAocHJlZmVyZW5jZXNDaGFuZ2VkKT1cInJlbG9hZFBhY2thZ2VzKClcIlxuICA+XG4gIDwvbmctbWlhbS1yZWNpcGUtZmlsdGVycz5cbiAgPCEtLSBDYXRhbG9nIGhvbWUgcGFnZSBjb250ZW50IC0tPlxuICA8bmctdGVtcGxhdGUgI2NhdGVnb3JpZXNDb21wb25lbnRzPlxuICAgIDxkaXYgKm5nSWY9XCJjYXRlZ29yaWVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NhdGVnb3JpZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMgbGV0IGkgPSBpbmRleFwiID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgIT09IDAgZWxzZSBmaXJzdENhdGVnb3J5XCI+XG4gICAgICAgICAgPG5nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeSBcbiAgICAgICAgICAgIFt0aXRsZV09XCJjYXRlZ29yeS50aXRsZVwiXG4gICAgICAgICAgICBbc3VidGl0bGVdPVwiY2F0ZWdvcnkuc3VidGl0bGVcIlxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiY2F0ZWdvcnkuZmlsdGVyc1wiXG4gICAgICAgICAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgICAgICAgICAgW29yaWdpblRyYWNlXT1cImV2ZW50VHJhY2UoKVwiXG4gICAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctbWlhbS1jYXRhbG9nLWNhdGVnb3J5PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaXJzdENhdGVnb3J5PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19maXJzdC1jYXRlZ29yeVwiPlxuICAgICAgICAgICAgPG5nLW1pYW0tbWVhbHMtcGxhbm5lci1saW5rICpuZ0lmPVwiY29udGV4dFNlcnZpY2UuZW5hYmxlTWVhbHNQbGFubmVyJCB8IGFzeW5jXCI+PC9uZy1taWFtLW1lYWxzLXBsYW5uZXItbGluaz5cbiAgICAgICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnkgXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJjYXRlZ29yeS50aXRsZVwiXG4gICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCJjYXRlZ29yeS5zdWJ0aXRsZVwiXG4gICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIlxuICAgICAgICAgICAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgICAgICAgICAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAgICAgICAgICAgKGRpc3BsYXlMaXN0KT1cImNhdGVnb3J5VGl0bGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19leHBsYWluX2Jhbm5lclwiPlxuICAgICAgICAgICAgPG5nLW1pYW0tZXhwbGFpbi1iYW5uZXIgW2NhdGFsb2dTZXR0aW5nXT1cImNhdGFsb2dTZXR0aW5nXCI+PC9uZy1taWFtLWV4cGxhaW4tYmFubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjcmVhdGlvblBhZ2U+XG4gIDxuZy1taWFtLXJlY2lwZS1zdGVwcGVyXG4gICAgKm5nSWY9XCJjYXRhbG9nU2V0dGluZ0hhc0xvYWRlZFwiXG4gICAgW3JlY2lwZVRvVXBkYXRlXT1cInJlY2lwZVRvVXBkYXRlXCJcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICAocmVjaXBlQ2hhbmdlKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCJcbiAgICAoY2FuY2VsZWQpPVwibGVhdmVDcmVhdGVQYWdlKClcIj5cbiAgPC9uZy1taWFtLXJlY2lwZS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=