ng-miam 3.2.2 → 3.4.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 (120) hide show
  1. package/bundles/ng-miam.umd.js +7452 -5975
  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/abstract-recipe-card.component.js +1 -1
  6. package/esm2015/lib/_components/icon/icon.component.js +65 -6
  7. package/esm2015/lib/_components/recipe-filters/recipe-filters.component.js +94 -40
  8. package/esm2015/lib/_components/recipe-type-chooser/recipe-type-chooser.component.js +23 -30
  9. package/esm2015/lib/_components/text-input/text-input.component.js +6 -4
  10. package/esm2015/lib/_models/article.js +43 -0
  11. package/esm2015/lib/_models/basket.js +2 -2
  12. package/esm2015/lib/_models/groceries-entry.js +23 -2
  13. package/esm2015/lib/_models/groceries-list.js +5 -2
  14. package/esm2015/lib/_models/index.js +4 -1
  15. package/esm2015/lib/_models/package.js +14 -3
  16. package/esm2015/lib/_models/recipe.js +4 -1
  17. package/esm2015/lib/_models/user.js +10 -1
  18. package/esm2015/lib/_services/analytics.service.js +7 -1
  19. package/esm2015/lib/_services/articles.service.js +21 -0
  20. package/esm2015/lib/_services/baskets.service.js +7 -3
  21. package/esm2015/lib/_services/context.service.js +15 -1
  22. package/esm2015/lib/_services/groceries-lists.service.js +23 -6
  23. package/esm2015/lib/_services/index.js +3 -1
  24. package/esm2015/lib/_services/ingredients.service.js +2 -2
  25. package/esm2015/lib/_services/interceptor.service.js +2 -3
  26. package/esm2015/lib/_services/package.service.js +32 -9
  27. package/esm2015/lib/_services/recipe-events.service.js +2 -2
  28. package/esm2015/lib/_services/recipe-likes.service.js +6 -2
  29. package/esm2015/lib/_services/recipe-share.service.js +2 -2
  30. package/esm2015/lib/_services/recipes.service.js +2 -2
  31. package/esm2015/lib/_services/suppliers.service.js +2 -2
  32. package/esm2015/lib/_services/toastr.service.js +52 -0
  33. package/esm2015/lib/_services/user.service.js +64 -21
  34. package/esm2015/lib/_types/icon.enum.js +22 -18
  35. package/esm2015/lib/_web-components/{basket-preview-block → basket-preview/basket-preview-block}/basket-preview-block.component.js +15 -15
  36. package/esm2015/lib/_web-components/{basket-preview-disabled → basket-preview/basket-preview-disabled}/basket-preview-disabled.component.js +3 -3
  37. package/esm2015/lib/_web-components/{basket-preview-line → basket-preview/basket-preview-line}/basket-preview-line.component.js +22 -19
  38. package/esm2015/lib/_web-components/basket-preview/basket-preview.module.js +78 -0
  39. package/esm2015/lib/_web-components/basket-preview/index.js +7 -0
  40. package/esm2015/lib/_web-components/{replace-item → basket-preview/replace-item}/replace-item.component.js +8 -8
  41. package/esm2015/lib/_web-components/catalog-article-card/catalog-article-card.component.js +71 -0
  42. package/esm2015/lib/_web-components/catalog-category/catalog-category.component.js +134 -92
  43. package/esm2015/lib/_web-components/catalog-header/catalog-header.component.js +51 -34
  44. package/esm2015/lib/_web-components/catalog-list/catalog-list.component.js +106 -61
  45. package/esm2015/lib/_web-components/catalog-recipe-card/catalog-recipe-card.component.js +65 -52
  46. package/esm2015/lib/_web-components/drawer/drawer.component.js +1 -1
  47. package/esm2015/lib/_web-components/favorite-page/favorite-page.component.js +8 -6
  48. package/esm2015/lib/_web-components/index.js +5 -6
  49. package/esm2015/lib/_web-components/list-scan/basket-preview/basket-preview.component.js +145 -0
  50. package/esm2015/lib/_web-components/list-scan/index.js +3 -0
  51. package/esm2015/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.js +150 -0
  52. package/esm2015/lib/_web-components/list-scan/list-scan.component.js +87 -0
  53. package/esm2015/lib/_web-components/list-scan/list-scan.module.js +60 -0
  54. package/esm2015/lib/_web-components/list-scan/overlay-button/overlay-button.component.js +104 -0
  55. package/esm2015/lib/_web-components/loader/index.js +3 -0
  56. package/esm2015/lib/_web-components/loader/loader.module.js +39 -0
  57. package/esm2015/lib/_web-components/personal-recipes/personal-recipes.component.js +7 -5
  58. package/esm2015/lib/_web-components/recipe-card/recipe-card.component.js +73 -58
  59. package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +152 -92
  60. package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +307 -270
  61. package/esm2015/lib/_web-components/recipe-modal/recipe-modal.component.js +1 -1
  62. package/esm2015/lib/_web-components/recipe-stepper/recipe-stepper.component.js +1 -1
  63. package/esm2015/lib/_web-components/recipes-history/recipes-history.component.js +1 -1
  64. package/esm2015/lib/_web-components/suggestion-card/suggestion-card.component.js +3 -6
  65. package/esm2015/lib/_web-components/web-components.module.js +35 -65
  66. package/esm2015/lib/environments/environment.js +6 -0
  67. package/esm2015/lib/ng-miam.module.js +4 -4
  68. package/fesm2015/ng-miam.js +6540 -5287
  69. package/fesm2015/ng-miam.js.map +1 -1
  70. package/lib/_components/abstracts/abstract-recipe-card.component.d.ts +1 -1
  71. package/lib/_components/recipe-filters/recipe-filters.component.d.ts +14 -4
  72. package/lib/_components/recipe-type-chooser/recipe-type-chooser.component.d.ts +2 -2
  73. package/lib/_components/text-input/text-input.component.d.ts +2 -1
  74. package/lib/_models/article.d.ts +23 -0
  75. package/lib/_models/basket.d.ts +1 -2
  76. package/lib/_models/groceries-entry.d.ts +8 -1
  77. package/lib/_models/groceries-list.d.ts +4 -3
  78. package/lib/_models/index.d.ts +3 -0
  79. package/lib/_models/package.d.ts +10 -3
  80. package/lib/_models/recipe.d.ts +1 -0
  81. package/lib/_models/user.d.ts +16 -1
  82. package/lib/_services/articles.service.d.ts +10 -0
  83. package/lib/_services/context.service.d.ts +12 -6
  84. package/lib/_services/groceries-lists.service.d.ts +4 -1
  85. package/lib/_services/index.d.ts +2 -0
  86. package/lib/_services/package.service.d.ts +6 -1
  87. package/lib/_services/toastr.service.d.ts +10 -0
  88. package/lib/_services/user.service.d.ts +12 -6
  89. package/lib/_types/icon.enum.d.ts +21 -17
  90. package/lib/_web-components/{basket-preview-block → basket-preview/basket-preview-block}/basket-preview-block.component.d.ts +6 -6
  91. package/lib/_web-components/{basket-preview-disabled → basket-preview/basket-preview-disabled}/basket-preview-disabled.component.d.ts +2 -2
  92. package/lib/_web-components/{basket-preview-line → basket-preview/basket-preview-line}/basket-preview-line.component.d.ts +7 -7
  93. package/lib/_web-components/basket-preview/basket-preview.module.d.ts +16 -0
  94. package/lib/_web-components/basket-preview/index.d.ts +5 -0
  95. package/lib/_web-components/{replace-item → basket-preview/replace-item}/replace-item.component.d.ts +5 -5
  96. package/lib/_web-components/catalog-article-card/catalog-article-card.component.d.ts +8 -0
  97. package/lib/_web-components/catalog-category/catalog-category.component.d.ts +12 -7
  98. package/lib/_web-components/catalog-header/catalog-header.component.d.ts +5 -2
  99. package/lib/_web-components/catalog-list/catalog-list.component.d.ts +13 -6
  100. package/lib/_web-components/catalog-recipe-card/catalog-recipe-card.component.d.ts +1 -0
  101. package/lib/_web-components/favorite-page/favorite-page.component.d.ts +0 -1
  102. package/lib/_web-components/index.d.ts +4 -5
  103. package/lib/_web-components/list-scan/basket-preview/basket-preview.component.d.ts +25 -0
  104. package/lib/_web-components/list-scan/index.d.ts +2 -0
  105. package/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.d.ts +22 -0
  106. package/lib/_web-components/list-scan/list-scan.component.d.ts +17 -0
  107. package/lib/_web-components/list-scan/list-scan.module.d.ts +16 -0
  108. package/lib/_web-components/list-scan/overlay-button/overlay-button.component.d.ts +19 -0
  109. package/lib/_web-components/loader/index.d.ts +2 -0
  110. package/lib/_web-components/loader/loader.module.d.ts +10 -0
  111. package/lib/_web-components/personal-recipes/personal-recipes.component.d.ts +0 -1
  112. package/lib/_web-components/recipe-card/recipe-card.component.d.ts +1 -0
  113. package/lib/_web-components/recipe-catalog/recipe-catalog.component.d.ts +13 -4
  114. package/lib/_web-components/recipe-details/recipe-details.component.d.ts +8 -3
  115. package/lib/_web-components/suggestion-card/suggestion-card.component.d.ts +0 -1
  116. package/lib/_web-components/web-components.module.d.ts +38 -65
  117. package/lib/{environment.d.ts → environments/environment.d.ts} +1 -1
  118. package/miam-style.css +1 -1
  119. package/package.json +1 -1
  120. package/esm2015/lib/environment.js +0 -8
@@ -1,10 +1,10 @@
1
1
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ChangeDetectorRef, ElementRef, ViewChildren, QueryList } from '@angular/core';
2
- import { skipWhile, take } from 'rxjs/operators';
2
+ import { skipWhile, switchMap, take, tap } from 'rxjs/operators';
3
3
  import { CatalogCategoryComponent } from '../catalog-category/catalog-category.component';
4
- import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService } from '../../_services';
4
+ import { RecipeTypeService, SponsorService, PackageService, SuppliersService, RecipesService, UserService } from '../../_services';
5
5
  import { Icon } from '../../_types/icon.enum';
6
6
  import { CatalogHeaderComponent } from '../catalog-header/catalog-header.component';
7
- import { forkJoin } from 'rxjs';
7
+ import { combineLatest, forkJoin } from 'rxjs';
8
8
  import { MediaMatcher } from '@angular/cdk/layout';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "../../_services";
@@ -18,94 +18,115 @@ import * as i8 from "../../_components/icon/icon.component";
18
18
  import * as i9 from "../recipe-stepper/recipe-stepper.component";
19
19
  const _c0 = ["miamCatalogTopAnchor"];
20
20
  function RecipeCatalogComponent_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
21
- const _r9 = i0.ɵɵgetCurrentView();
22
- i0.ɵɵelementStart(0, "div", 11);
23
- i0.ɵɵelementStart(1, "ng-miam-catalog-list", 12);
24
- i0.ɵɵlistener("retrievedRecipes", function RecipeCatalogComponent_div_2_div_4_Template_ng_miam_catalog_list_retrievedRecipes_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.changeHeaderImage($event); })("filterRemoved", function RecipeCatalogComponent_div_2_div_4_Template_ng_miam_catalog_list_filterRemoved_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r10 = i0.ɵɵnextContext(2); return ctx_r10.removeFilter($event); })("recipeActionTriggered", function RecipeCatalogComponent_div_2_div_4_Template_ng_miam_catalog_list_recipeActionTriggered_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r11 = i0.ɵɵnextContext(2); return ctx_r11.manageRecipeAction($event); });
21
+ const _r10 = i0.ɵɵgetCurrentView();
22
+ i0.ɵɵelementStart(0, "div", 12);
23
+ i0.ɵɵelementStart(1, "span");
24
+ i0.ɵɵtext(2, "Une petite question : Avez-vous des enfants ?");
25
+ i0.ɵɵelementEnd();
26
+ i0.ɵɵelementStart(3, "div", 13);
27
+ i0.ɵɵelementStart(4, "button", 14);
28
+ i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return ctx_r9.setUserPreference("has_children", true); });
29
+ i0.ɵɵtext(5, "Oui");
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵelementStart(6, "button", 14);
32
+ i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r10); const ctx_r11 = i0.ɵɵnextContext(2); return ctx_r11.setUserPreference("has_children", false); });
33
+ i0.ɵɵtext(7, "Non");
34
+ i0.ɵɵelementEnd();
35
+ i0.ɵɵelementEnd();
36
+ i0.ɵɵelementEnd();
37
+ } }
38
+ function RecipeCatalogComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
39
+ const _r13 = i0.ɵɵgetCurrentView();
40
+ i0.ɵɵelementStart(0, "div", 15);
41
+ i0.ɵɵelementStart(1, "ng-miam-catalog-list", 16);
42
+ i0.ɵɵlistener("retrievedRecipes", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_retrievedRecipes_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.changeHeaderImage($event); })("filterRemoved", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_filterRemoved_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(2); return ctx_r14.removeFilter($event); })("recipeActionTriggered", function RecipeCatalogComponent_div_2_div_5_Template_ng_miam_catalog_list_recipeActionTriggered_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(2); return ctx_r15.manageRecipeAction($event); });
25
43
  i0.ɵɵelementEnd();
26
44
  i0.ɵɵelementEnd();
27
45
  } if (rf & 2) {
28
- const ctx_r4 = i0.ɵɵnextContext(2);
46
+ const ctx_r5 = i0.ɵɵnextContext(2);
29
47
  i0.ɵɵadvance(1);
30
- i0.ɵɵproperty("filters", ctx_r4.filters)("randomMode", true);
48
+ i0.ɵɵproperty("filters", ctx_r5.filters)("randomMode", true);
31
49
  } }
32
- function RecipeCatalogComponent_div_2_ng_template_5_div_0_ng_miam_catalog_category_1_Template(rf, ctx) { if (rf & 1) {
33
- const _r16 = i0.ɵɵgetCurrentView();
34
- i0.ɵɵelementStart(0, "ng-miam-catalog-category", 16);
35
- i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_5_div_0_ng_miam_catalog_category_1_Template_ng_miam_catalog_category_displayList_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(4); return ctx_r15.categoryTitleClicked($event); });
50
+ function RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template(rf, ctx) { if (rf & 1) {
51
+ const _r20 = i0.ɵɵgetCurrentView();
52
+ i0.ɵɵelementStart(0, "ng-miam-catalog-category", 20);
53
+ i0.ɵɵlistener("displayList", function RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template_ng_miam_catalog_category_displayList_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(4); return ctx_r19.categoryTitleClicked($event); });
36
54
  i0.ɵɵelementEnd();
37
55
  } if (rf & 2) {
38
- const category_r14 = ctx.$implicit;
39
- i0.ɵɵproperty("title", category_r14.title)("filters", category_r14.filters);
56
+ const category_r18 = ctx.$implicit;
57
+ i0.ɵɵproperty("title", category_r18.title)("filters", category_r18.filters);
40
58
  } }
41
- function RecipeCatalogComponent_div_2_ng_template_5_div_0_Template(rf, ctx) { if (rf & 1) {
42
- i0.ɵɵelementStart(0, "div", 14);
43
- i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_5_div_0_ng_miam_catalog_category_1_Template, 1, 2, "ng-miam-catalog-category", 15);
59
+ function RecipeCatalogComponent_div_2_ng_template_6_div_0_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelementStart(0, "div", 18);
61
+ i0.ɵɵtemplate(1, RecipeCatalogComponent_div_2_ng_template_6_div_0_ng_miam_catalog_category_1_Template, 1, 2, "ng-miam-catalog-category", 19);
44
62
  i0.ɵɵelementEnd();
45
63
  } if (rf & 2) {
46
- const ctx_r12 = i0.ɵɵnextContext(3);
64
+ const ctx_r16 = i0.ɵɵnextContext(3);
47
65
  i0.ɵɵadvance(1);
48
- i0.ɵɵproperty("ngForOf", ctx_r12.categories);
66
+ i0.ɵɵproperty("ngForOf", ctx_r16.categories);
49
67
  } }
50
- function RecipeCatalogComponent_div_2_ng_template_5_Template(rf, ctx) { if (rf & 1) {
51
- i0.ɵɵtemplate(0, RecipeCatalogComponent_div_2_ng_template_5_div_0_Template, 2, 1, "div", 13);
68
+ function RecipeCatalogComponent_div_2_ng_template_6_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵtemplate(0, RecipeCatalogComponent_div_2_ng_template_6_div_0_Template, 2, 1, "div", 17);
52
70
  } if (rf & 2) {
53
- const ctx_r6 = i0.ɵɵnextContext(2);
54
- i0.ɵɵproperty("ngIf", ctx_r6.categories.length > 0);
71
+ const ctx_r7 = i0.ɵɵnextContext(2);
72
+ i0.ɵɵproperty("ngIf", ctx_r7.categories.length > 0);
55
73
  } }
56
- function RecipeCatalogComponent_div_2_div_7_Template(rf, ctx) { if (rf & 1) {
57
- const _r18 = i0.ɵɵgetCurrentView();
58
- i0.ɵɵelementStart(0, "div", 17);
59
- i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_7_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(2); return ctx_r17.returnToTop(); });
60
- i0.ɵɵelement(1, "ng-miam-icon", 18);
74
+ function RecipeCatalogComponent_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
75
+ const _r22 = i0.ɵɵgetCurrentView();
76
+ i0.ɵɵelementStart(0, "div", 21);
77
+ i0.ɵɵlistener("click", function RecipeCatalogComponent_div_2_div_8_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r21 = i0.ɵɵnextContext(2); return ctx_r21.returnToTop(); });
78
+ i0.ɵɵelement(1, "ng-miam-icon", 22);
61
79
  i0.ɵɵelementEnd();
62
80
  } if (rf & 2) {
63
- const ctx_r7 = i0.ɵɵnextContext(2);
81
+ const ctx_r8 = i0.ɵɵnextContext(2);
64
82
  i0.ɵɵadvance(1);
65
- i0.ɵɵproperty("iconName", ctx_r7.icon.ChevronDown);
83
+ i0.ɵɵproperty("iconName", ctx_r8.icon.ChevronDown);
66
84
  } }
67
85
  const _c1 = function (a0) { return { "filter-collapsed": a0 }; };
68
86
  function RecipeCatalogComponent_div_2_Template(rf, ctx) { if (rf & 1) {
69
- const _r20 = i0.ɵɵgetCurrentView();
87
+ const _r24 = i0.ɵɵgetCurrentView();
70
88
  i0.ɵɵelementStart(0, "div", 4);
71
- i0.ɵɵlistener("scroll", function RecipeCatalogComponent_div_2_Template_div_scroll_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return ctx_r19.displayReturnTopButton(); }, false, i0.ɵɵresolveWindow);
89
+ i0.ɵɵlistener("scroll", function RecipeCatalogComponent_div_2_Template_div_scroll_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.displayReturnTopButton(); }, false, i0.ɵɵresolveWindow);
72
90
  i0.ɵɵelementStart(1, "ng-miam-recipe-filters", 5);
73
- i0.ɵɵlistener("filterReset", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterReset_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r21 = i0.ɵɵnextContext(); return ctx_r21.resetFilters(); })("filterChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterChanged_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r22 = i0.ɵɵnextContext(); return ctx_r22.updateFilters($event); })("filterCollapsed", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterCollapsed_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.onFilterCollapsed(); });
91
+ i0.ɵɵlistener("filterReset", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterReset_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r25 = i0.ɵɵnextContext(); return ctx_r25.resetFilters(); })("filterChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterChanged_1_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.updateFilters($event); })("filterCollapsed", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_filterCollapsed_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r27 = i0.ɵɵnextContext(); return ctx_r27.onFilterCollapsed(); })("preferencesChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_recipe_filters_preferencesChanged_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r28 = i0.ɵɵnextContext(); return ctx_r28.reloadPackages(); });
74
92
  i0.ɵɵelementEnd();
75
93
  i0.ɵɵelementStart(2, "div", 6);
76
94
  i0.ɵɵelementStart(3, "ng-miam-catalog-header", 7);
77
- i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r24 = i0.ɵɵnextContext(); return ctx_r24.returnToHomePage(); })("searchStringChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_searchStringChanged_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r25 = i0.ɵɵnextContext(); return ctx_r25.updateSearch($event); });
95
+ i0.ɵɵlistener("returnButtonPressed", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_returnButtonPressed_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r29 = i0.ɵɵnextContext(); return ctx_r29.returnToHomePage(); })("searchStringChanged", function RecipeCatalogComponent_div_2_Template_ng_miam_catalog_header_searchStringChanged_3_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r30 = i0.ɵɵnextContext(); return ctx_r30.updateSearch($event); });
78
96
  i0.ɵɵelementEnd();
79
- i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_4_Template, 2, 2, "div", 8);
80
- i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_ng_template_5_Template, 1, 1, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor);
81
- i0.ɵɵtemplate(7, RecipeCatalogComponent_div_2_div_7_Template, 2, 1, "div", 10);
97
+ i0.ɵɵtemplate(4, RecipeCatalogComponent_div_2_div_4_Template, 8, 0, "div", 8);
98
+ i0.ɵɵtemplate(5, RecipeCatalogComponent_div_2_div_5_Template, 2, 2, "div", 9);
99
+ i0.ɵɵtemplate(6, RecipeCatalogComponent_div_2_ng_template_6_Template, 1, 1, "ng-template", null, 10, i0.ɵɵtemplateRefExtractor);
100
+ i0.ɵɵtemplate(8, RecipeCatalogComponent_div_2_div_8_Template, 2, 1, "div", 11);
82
101
  i0.ɵɵelementEnd();
83
102
  i0.ɵɵelementEnd();
84
103
  } if (rf & 2) {
85
- const _r5 = i0.ɵɵreference(6);
104
+ const _r6 = i0.ɵɵreference(7);
86
105
  const ctx_r1 = i0.ɵɵnextContext();
87
106
  i0.ɵɵadvance(1);
88
107
  i0.ɵɵproperty("filters", ctx_r1.filters)("mobileFixed", ctx_r1.returnTopButtonShouldBeDisplayed)("filterToRemove", ctx_r1.filterToRemove);
89
108
  i0.ɵɵadvance(1);
90
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(10, _c1, ctx_r1.isFilterCollapsed));
109
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1, ctx_r1.isFilterCollapsed));
91
110
  i0.ɵɵadvance(1);
92
111
  i0.ɵɵproperty("displayReturnButton", !ctx_r1.displayHomePage)("forcedRecipe", ctx_r1.recipeInHeader)("title", ctx_r1.displayHomePage ? ctx_r1.homePageTitle : ctx_r1.filters.additionalFilters && ctx_r1.filters.additionalFilters.title !== "" ? ctx_r1.filters.additionalFilters.title : ctx_r1.titleInResearchMode);
93
112
  i0.ɵɵadvance(1);
94
- i0.ɵɵproperty("ngIf", !ctx_r1.displayHomePage)("ngIfElse", _r5);
113
+ i0.ɵɵproperty("ngIf", ctx_r1.showUserFeedback);
114
+ i0.ɵɵadvance(1);
115
+ i0.ɵɵproperty("ngIf", !ctx_r1.displayHomePage)("ngIfElse", _r6);
95
116
  i0.ɵɵadvance(3);
96
117
  i0.ɵɵproperty("ngIf", ctx_r1.returnTopButtonShouldBeDisplayed);
97
118
  } }
98
119
  function RecipeCatalogComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
99
- const _r27 = i0.ɵɵgetCurrentView();
100
- i0.ɵɵelementStart(0, "ng-miam-recipe-stepper", 19);
101
- i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(); return ctx_r26.leaveCreatePage(); })("canceled", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_canceled_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r28 = i0.ɵɵnextContext(); return ctx_r28.leaveCreatePage(); });
120
+ const _r32 = i0.ɵɵgetCurrentView();
121
+ i0.ɵɵelementStart(0, "ng-miam-recipe-stepper", 23);
122
+ i0.ɵɵlistener("recipeChange", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_recipeChange_0_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(); return ctx_r31.leaveCreatePage(); })("canceled", function RecipeCatalogComponent_ng_template_3_Template_ng_miam_recipe_stepper_canceled_0_listener() { i0.ɵɵrestoreView(_r32); const ctx_r33 = i0.ɵɵnextContext(); return ctx_r33.leaveCreatePage(); });
102
123
  i0.ɵɵelementEnd();
103
124
  } if (rf & 2) {
104
125
  const ctx_r3 = i0.ɵɵnextContext();
105
126
  i0.ɵɵproperty("recipe", ctx_r3.recipeToUpdate);
106
127
  } }
107
128
  export class RecipeCatalogComponent {
108
- constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher) {
129
+ constructor(cdr, recipeTypesService, sponsorService, supplierService, packageService, recipesService, mediaMatcher, usersService) {
109
130
  this.cdr = cdr;
110
131
  this.recipeTypesService = recipeTypesService;
111
132
  this.sponsorService = sponsorService;
@@ -113,6 +134,7 @@ export class RecipeCatalogComponent {
113
134
  this.packageService = packageService;
114
135
  this.recipesService = recipesService;
115
136
  this.mediaMatcher = mediaMatcher;
137
+ this.usersService = usersService;
116
138
  this.homePageTitle = 'Qu\'est-ce qui vous ferait plaisir ?';
117
139
  this.titleInResearchMode = 'Résultats de recherche';
118
140
  this.displayHomePage = true;
@@ -123,35 +145,39 @@ export class RecipeCatalogComponent {
123
145
  this.creatingRecipe = false;
124
146
  this.isMobile = false;
125
147
  this.listIsEmpty = false;
148
+ this.showUserFeedback = false;
149
+ this.subscriptions = [];
126
150
  this.isMobile = mediaMatcher.matchMedia('(max-width: 1022px)').matches;
127
151
  this.isFilterCollapsed = this.isMobile;
128
152
  }
129
153
  ngOnInit() {
130
154
  this.resetFilters();
131
- forkJoin([
132
- this.recipeTypesService.getTypes().pipe(skipWhile(types => types.length === 0),
133
- // recipeTypesService.getTypes() comes from a behavior subject, it does not emit the complete() function
134
- // you absolutly need a take(1) or call complete yourself to trigger the forkjoin subscribe
135
- take(1)),
136
- this.supplierService.supplier$.asObservable().pipe(skipWhile(supp => supp === undefined || supp == null), take(1))
137
- ]).subscribe((res) => {
138
- const supplier = res[1];
139
- this.packageService.categories_for([supplier.id]).pipe(skipWhile(packages => packages.is_loading)).subscribe((packages) => {
140
- this.initCategories(packages);
141
- this.selectCategoryFromUrl();
142
- this.cdr.detectChanges();
143
- });
144
- });
155
+ this.subscriptions = [
156
+ forkJoin([
157
+ this.recipeTypesService.getTypes().pipe(skipWhile(types => types.length === 0),
158
+ // recipeTypesService.getTypes() comes from a behavior subject, it does not emit the complete() function
159
+ // you absolutly need a take(1) or call complete yourself to trigger the forkjoin subscribe
160
+ take(1)),
161
+ this.supplierService.supplier$.asObservable().pipe(skipWhile(supp => supp === undefined || supp == null), take(1))
162
+ ]).pipe(switchMap(res => {
163
+ this.supplierId = res[1].id;
164
+ return this.loadPackages();
165
+ })).subscribe(),
166
+ this.assessShowUserFeedback()
167
+ ];
145
168
  }
146
169
  ngAfterViewInit() {
147
170
  this.cdr.detectChanges();
148
171
  }
172
+ ngOnDestroy() {
173
+ this.subscriptions.forEach(s => s.unsubscribe());
174
+ }
149
175
  initCategories(packages) {
150
- this.categories.push({
151
- key: 'suggestions',
152
- title: 'Suggestions de la semaine',
153
- filters: { suggested: true }
154
- });
176
+ this.categories = [{
177
+ key: 'suggestions',
178
+ title: 'Suggestions de la semaine',
179
+ filters: { suggested: true }
180
+ }];
155
181
  packages.data.forEach(categoryPackage => {
156
182
  this.categories.push({
157
183
  key: categoryPackage.title,
@@ -159,34 +185,43 @@ export class RecipeCatalogComponent {
159
185
  filters: { packages: categoryPackage.id }
160
186
  });
161
187
  });
162
- this.categories.push({
163
- key: 'entrees',
164
- title: 'Entrées',
165
- filters: { recipe_type_id: this.recipeTypesService.getTypeByName('entrée').id }
166
- });
167
- this.categories.push({
168
- key: 'plats',
169
- title: 'Plats',
170
- filters: { recipe_type_id: this.recipeTypesService.getTypeByName('plat principal').id }
171
- });
172
- this.categories.push({
173
- key: 'desserts',
174
- title: 'Desserts',
175
- filters: { recipe_type_id: this.recipeTypesService.getTypeByName('dessert').id }
176
- });
188
+ const startersType = this.recipeTypesService.getTypeByName('entrée');
189
+ if (startersType) {
190
+ this.categories.push({
191
+ key: 'entrees',
192
+ title: 'Entrées',
193
+ filters: { recipe_type_id: startersType.id }
194
+ });
195
+ }
196
+ const mainType = this.recipeTypesService.getTypeByName('plat principal');
197
+ if (mainType) {
198
+ this.categories.push({
199
+ key: 'plats',
200
+ title: 'Plats',
201
+ filters: { recipe_type_id: mainType.id }
202
+ });
203
+ }
204
+ const dessertType = this.recipeTypesService.getTypeByName('dessert');
205
+ if (dessertType) {
206
+ this.categories.push({
207
+ key: 'desserts',
208
+ title: 'Desserts',
209
+ filters: { recipe_type_id: dessertType.id }
210
+ });
211
+ }
177
212
  }
178
213
  selectCategoryFromUrl() {
179
214
  const paramsString = window.location.search;
180
215
  const paramsArray = new URLSearchParams(paramsString);
181
- const selected_category_key = paramsArray.get('catalogCategory');
182
- if (!selected_category_key) {
216
+ const selectedCategoryKey = paramsArray.get('catalogCategory');
217
+ if (!selectedCategoryKey) {
183
218
  return;
184
219
  }
185
- const selected_category = this.categories.find((cat) => cat.key === selected_category_key);
186
- if (!selected_category) {
220
+ const selectedCategory = this.categories.find((cat) => cat.key === selectedCategoryKey);
221
+ if (!selectedCategory) {
187
222
  return;
188
223
  }
189
- this.categoryTitleClicked(selected_category);
224
+ this.categoryTitleClicked(selectedCategory);
190
225
  }
191
226
  // Used on load to build the filters attribute, and on click on the link to reset the filters
192
227
  resetFilters() {
@@ -325,9 +360,9 @@ export class RecipeCatalogComponent {
325
360
  }
326
361
  case 'DELETE': {
327
362
  if (((_a = event.recipe) === null || _a === void 0 ? void 0 : _a.id) && ((_b = event.recipe.relationships['recipe-provider']) === null || _b === void 0 ? void 0 : _b.data.id) === 'personal') {
328
- this.recipesService.delete(event.recipe.id).subscribe(() => {
363
+ this.subscriptions.push(this.recipesService.delete(event.recipe.id).subscribe(() => {
329
364
  this.reloadList();
330
- });
365
+ }));
331
366
  }
332
367
  break;
333
368
  }
@@ -337,8 +372,33 @@ export class RecipeCatalogComponent {
337
372
  this.listIsEmpty = recipes.length === 0;
338
373
  this.cdr.detectChanges();
339
374
  }
375
+ setUserPreference(pref, state) {
376
+ this.subscriptions.push(this.usersService.setPreference(pref, state).pipe(switchMap(() => this.loadPackages())).subscribe());
377
+ }
378
+ reloadPackages() {
379
+ this.subscriptions.push(this.loadPackages().subscribe());
380
+ }
381
+ loadPackages() {
382
+ return this.packageService.categories_for([this.supplierId]).pipe(skipWhile(packages => packages.is_loading), tap((packages) => {
383
+ this.initCategories(packages);
384
+ this.selectCategoryFromUrl();
385
+ this.cdr.detectChanges();
386
+ }));
387
+ }
388
+ // Show feedback block only if user is logged and the children preference is unknown
389
+ assessShowUserFeedback() {
390
+ return combineLatest([
391
+ this.usersService.isLogged$,
392
+ this.usersService.preferenceDefined('has_children')
393
+ ]).subscribe(results => {
394
+ const logged = results[0];
395
+ const preferenceDefined = results[1];
396
+ this.showUserFeedback = logged && !preferenceDefined;
397
+ this.cdr.detectChanges();
398
+ });
399
+ }
340
400
  }
341
- 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)); };
401
+ 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)); };
342
402
  RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogComponent, selectors: [["ng-miam-recipe-catalog"]], viewQuery: function RecipeCatalogComponent_Query(rf, ctx) { if (rf & 1) {
343
403
  i0.ɵɵviewQuery(CatalogHeaderComponent, true);
344
404
  i0.ɵɵviewQuery(_c0, true);
@@ -348,15 +408,15 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
348
408
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.catalogHeader = _t.first);
349
409
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.topAnchor = _t.first);
350
410
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.categoriesComp = _t);
351
- } }, decls: 5, vars: 2, consts: [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 3, "scroll", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog", 3, "scroll"], [3, "filters", "mobileFixed", "filterToRemove", "filterReset", "filterChanged", "filterCollapsed"], [1, "miam-recipe-catalog__content", 3, "ngClass"], [3, "displayReturnButton", "forcedRecipe", "title", "returnButtonPressed", "searchStringChanged"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], ["categoriesComponents", ""], ["class", "miam-recipe-catalog__returnTop", 3, "click", 4, "ngIf"], [1, "miam-recipe-catalog__list"], [3, "filters", "randomMode", "retrievedRecipes", "filterRemoved", "recipeActionTriggered"], ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [3, "title", "filters", "displayList", 4, "ngFor", "ngForOf"], [3, "title", "filters", "displayList"], [1, "miam-recipe-catalog__returnTop", 3, "click"], ["height", "32", "width", "32", "primaryColor", "var(--m-color-white)", 3, "iconName"], [3, "recipe", "recipeChange", "canceled"]], template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
411
+ } }, decls: 5, vars: 2, consts: [[1, "miam-catalog-anchor"], ["miamCatalogTopAnchor", ""], ["class", "miam-recipe-catalog", 3, "scroll", 4, "ngIf", "ngIfElse"], ["creationPage", ""], [1, "miam-recipe-catalog", 3, "scroll"], [3, "filters", "mobileFixed", "filterToRemove", "filterReset", "filterChanged", "filterCollapsed", "preferencesChanged"], [1, "miam-recipe-catalog__content", 3, "ngClass"], [3, "displayReturnButton", "forcedRecipe", "title", "returnButtonPressed", "searchStringChanged"], ["class", "miam-recipe-catalog__content__user-feedback", 4, "ngIf"], ["class", "miam-recipe-catalog__list", 4, "ngIf", "ngIfElse"], ["categoriesComponents", ""], ["class", "miam-recipe-catalog__returnTop", 3, "click", 4, "ngIf"], [1, "miam-recipe-catalog__content__user-feedback"], [1, "miam-recipe-catalog__content__user-feedback__actions"], [1, "m-button-grey", 3, "click"], [1, "miam-recipe-catalog__list"], [3, "filters", "randomMode", "retrievedRecipes", "filterRemoved", "recipeActionTriggered"], ["class", "miam-recipe-catalog__categories", 4, "ngIf"], [1, "miam-recipe-catalog__categories"], [3, "title", "filters", "displayList", 4, "ngFor", "ngForOf"], [3, "title", "filters", "displayList"], [1, "miam-recipe-catalog__returnTop", 3, "click"], ["height", "32", "width", "32", "primaryColor", "var(--m-color-white)", 3, "iconName"], [3, "recipe", "recipeChange", "canceled"]], template: function RecipeCatalogComponent_Template(rf, ctx) { if (rf & 1) {
352
412
  i0.ɵɵelement(0, "div", 0, 1);
353
- i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_Template, 8, 12, "div", 2);
413
+ i0.ɵɵtemplate(2, RecipeCatalogComponent_div_2_Template, 9, 13, "div", 2);
354
414
  i0.ɵɵtemplate(3, RecipeCatalogComponent_ng_template_3_Template, 1, 1, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
355
415
  } if (rf & 2) {
356
416
  const _r2 = i0.ɵɵreference(4);
357
417
  i0.ɵɵadvance(2);
358
418
  i0.ɵɵproperty("ngIf", !ctx.creatingRecipe)("ngIfElse", _r2);
359
- } }, directives: [i3.NgIf, i4.RecipeFiltersComponent, i3.NgClass, i5.CatalogHeaderComponent, i6.CatalogListComponent, i3.NgForOf, i7.CatalogCategoryComponent, i8.IconComponent, i9.RecipeStepperComponent], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content{width:calc(100% - 216px)}.miam-recipe-catalog .miam-recipe-catalog__content.filter-collapsed{overflow-x:hidden;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__returnTop{-webkit-tap-highlight-color:transparent;background-color:var(--m-color-primary);border-radius:var(--m-border-radius-circle);bottom:24px;box-shadow:0 2px 10px -4px var(--m-color-grey-text-dark);cursor:pointer;padding:8px;position:fixed;right:56px;transform:rotate(-180deg);z-index:var(--m-z-index-position-absolute-high)}@media (max-width:1022px){.miam-recipe-catalog{max-width:100vw}.miam-recipe-catalog .miam-recipe-catalog__returnTop{bottom:72px;right:24px}.miam-recipe-catalog .miam-recipe-catalog__content{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories,.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:16px}.miam-recipe-catalog .miam-recipe-catalog__content:not(.filter-collapsed){display:none}}"], encapsulation: 2, changeDetection: 0 });
419
+ } }, directives: [i3.NgIf, i4.RecipeFiltersComponent, i3.NgClass, i5.CatalogHeaderComponent, i6.CatalogListComponent, i3.NgForOf, i7.CatalogCategoryComponent, i8.IconComponent, i9.RecipeStepperComponent], styles: [".miam-recipe-catalog{display:flex;justify-content:space-between;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content{width:calc(100% - 216px)}.miam-recipe-catalog .miam-recipe-catalog__content.filter-collapsed{overflow-x:hidden;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback{align-items:center;background-color:var(--m-color-secondary);color:#fff;display:flex;font-size:18px;font-weight:700;justify-content:center;padding:8px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback>span{margin-right:16px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback .miam-recipe-catalog__content__user-feedback__actions{display:flex}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback .miam-recipe-catalog__content__user-feedback__actions>.m-button-grey{margin-left:4px;min-width:80px;padding:12px 16px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories{display:flex;flex-direction:column;margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:40px;width:100%}.miam-recipe-catalog .miam-recipe-catalog__returnTop{-webkit-tap-highlight-color:transparent;background-color:var(--m-color-primary);border-radius:var(--m-border-radius-circle);bottom:24px;box-shadow:0 2px 10px -4px var(--m-color-grey-text-dark);cursor:pointer;padding:8px;position:fixed;right:56px;transform:rotate(-180deg);z-index:var(--m-z-index-position-absolute-high)}@media (max-width:1022px){.miam-recipe-catalog{max-width:100vw}.miam-recipe-catalog .miam-recipe-catalog__returnTop{bottom:72px;right:24px}.miam-recipe-catalog .miam-recipe-catalog__content{width:100%}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__content__user-feedback{margin-top:55px}.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__categories,.miam-recipe-catalog .miam-recipe-catalog__content .miam-recipe-catalog__list{margin-top:60px}.miam-recipe-catalog .miam-recipe-catalog__content:not(.filter-collapsed){display:none}}"], encapsulation: 2, changeDetection: 0 });
360
420
  /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(RecipeCatalogComponent, [{
361
421
  type: Component,
362
422
  args: [{
@@ -366,7 +426,7 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
366
426
  encapsulation: ViewEncapsulation.None,
367
427
  changeDetection: ChangeDetectionStrategy.OnPush
368
428
  }]
369
- }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.RecipeTypeService }, { type: i1.SponsorService }, { type: i1.SuppliersService }, { type: i1.PackageService }, { type: i1.RecipesService }, { type: i2.MediaMatcher }]; }, { catalogHeader: [{
429
+ }], 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 }]; }, { catalogHeader: [{
370
430
  type: ViewChild,
371
431
  args: [CatalogHeaderComponent]
372
432
  }], topAnchor: [{
@@ -376,4 +436,4 @@ RecipeCatalogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: RecipeCatalogCompo
376
436
  type: ViewChildren,
377
437
  args: [CatalogCategoryComponent]
378
438
  }] }); })();
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztJQ1cvQywrQkFDRTtJQUFBLGdEQU11QjtJQUhyQix3UEFBOEMsa09BQUEsd1BBQUE7SUFHaEQsaUJBQXVCO0lBQ3pCLGlCQUFNOzs7SUFORixlQUFtQjtJQUFuQix3Q0FBbUIsb0JBQUE7Ozs7SUFVbkIsb0RBSzJCO0lBRHpCLGlTQUE0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RUFBRSxDQUFDO0lBQzNCLENBQUM7OzRGQXpRVSxzQkFBc0I7MkRBQXRCLHNCQUFzQjt1QkFDdEIsc0JBQXNCOzt1QkFHbkIsd0JBQXdCOzs7Ozs7O1FDeEJ4Qyw0QkFBNkQ7UUFDN0Qsd0VBQ0U7UUE2Q0Ysd0hBQ0U7OztRQS9DRyxlQUF5QztRQUF6QywwQ0FBeUMsaUJBQUE7O2tERG1CakMsc0JBQXNCO2NBUGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxXQUFXLEVBQUUsaUNBQWlDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO3FQQUVvQyxhQUFhO2tCQUEvQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNFLFNBQVM7a0JBQTNDLFNBQVM7bUJBQUMsc0JBQXNCO1lBRVEsY0FBYztrQkFBdEQsWUFBWTttQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2F0YWxvZ0NhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vY2F0YWxvZy1jYXRlZ29yeS9jYXRhbG9nLWNhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNpcGUgfSBmcm9tICcuLi8uLi9fbW9kZWxzJztcbmltcG9ydCB7IFJlY2lwZVR5cGVTZXJ2aWNlLCBTcG9uc29yU2VydmljZSwgUGFja2FnZVNlcnZpY2UsIFN1cHBsaWVyc1NlcnZpY2UsIFJlY2lwZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZWRpYU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1taWFtLXJlY2lwZS1jYXRhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlY2lwZS1jYXRhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmVjaXBlQ2F0YWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoQ2F0YWxvZ0hlYWRlckNvbXBvbmVudCkgY2F0YWxvZ0hlYWRlcjogQ2F0YWxvZ0hlYWRlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnbWlhbUNhdGFsb2dUb3BBbmNob3InKSB0b3BBbmNob3I6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZHJlbihDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQpICBjYXRlZ29yaWVzQ29tcCE6IFF1ZXJ5TGlzdDxDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQ+O1xuXG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaG9tZVBhZ2VUaXRsZSA9ICdRdVxcJ2VzdC1jZSBxdWkgdm91cyBmZXJhaXQgcGxhaXNpciA/JztcbiAgdGl0bGVJblJlc2VhcmNoTW9kZSA9ICdSw6lzdWx0YXRzIGRlIHJlY2hlcmNoZSc7XG4gIGRpc3BsYXlIb21lUGFnZSA9IHRydWU7XG4gIGlzRmlsdGVyQ29sbGFwc2VkID0gZmFsc2U7XG4gIHJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkID0gZmFsc2U7XG4gIGljb24gPSBJY29uO1xuICBjYXRlZ29yaWVzID0gW107XG4gIHJlY2lwZUluSGVhZGVyOiBSZWNpcGU7XG4gIGNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gIHJlY2lwZVRvVXBkYXRlOiBSZWNpcGU7XG4gIGZpbHRlclRvUmVtb3ZlOiBzdHJpbmc7XG4gIGlzTW9iaWxlID0gZmFsc2U7XG4gIGxpc3RJc0VtcHR5ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlY2lwZVR5cGVzU2VydmljZTogUmVjaXBlVHlwZVNlcnZpY2UsXG4gICAgcHVibGljIHNwb25zb3JTZXJ2aWNlOiBTcG9uc29yU2VydmljZSxcbiAgICBwdWJsaWMgc3VwcGxpZXJTZXJ2aWNlOiBTdXBwbGllcnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBwYWNrYWdlU2VydmljZTogUGFja2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHVibGljIG1lZGlhTWF0Y2hlcjogTWVkaWFNYXRjaGVyKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IG1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiAxMDIycHgpJykubWF0Y2hlcztcbiAgICB0aGlzLmlzRmlsdGVyQ29sbGFwc2VkID0gdGhpcy5pc01vYmlsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG5cbiAgICBmb3JrSm9pbihbXG4gICAgICB0aGlzLnJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlcygpLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSh0eXBlcyA9PiB0eXBlcy5sZW5ndGggPT09IDApLFxuICAgICAgICAvLyByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZXMoKSBjb21lcyBmcm9tIGEgYmVoYXZpb3Igc3ViamVjdCwgaXQgZG9lcyBub3QgZW1pdCB0aGUgY29tcGxldGUoKSBmdW5jdGlvblxuICAgICAgICAvLyB5b3UgYWJzb2x1dGx5IG5lZWQgYSB0YWtlKDEpIG9yIGNhbGwgY29tcGxldGUgeW91cnNlbGYgdG8gdHJpZ2dlciB0aGUgZm9ya2pvaW4gc3Vic2NyaWJlXG4gICAgICAgIHRha2UoMSlcbiAgICAgICksXG4gICAgICB0aGlzLnN1cHBsaWVyU2VydmljZS5zdXBwbGllciQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKHN1cHAgPT4gc3VwcCA9PT0gdW5kZWZpbmVkIHx8IHN1cHAgPT0gbnVsbCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICBdKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgY29uc3Qgc3VwcGxpZXIgPSByZXNbMV07XG4gICAgICB0aGlzLnBhY2thZ2VTZXJ2aWNlLmNhdGVnb3JpZXNfZm9yKFtzdXBwbGllci5pZF0pLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZShwYWNrYWdlcyA9PiBwYWNrYWdlcy5pc19sb2FkaW5nKVxuICAgICAgKS5zdWJzY3JpYmUoKHBhY2thZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdENhdGVnb3JpZXMocGFja2FnZXMpO1xuICAgICAgICB0aGlzLnNlbGVjdENhdGVnb3J5RnJvbVVybCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGluaXRDYXRlZ29yaWVzKHBhY2thZ2VzKSB7XG4gICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAga2V5OiAnc3VnZ2VzdGlvbnMnLFxuICAgICAgdGl0bGU6ICdTdWdnZXN0aW9ucyBkZSBsYSBzZW1haW5lJyxcbiAgICAgIGZpbHRlcnM6IHsgc3VnZ2VzdGVkOiB0cnVlIH1cbiAgICB9KTtcbiAgICBwYWNrYWdlcy5kYXRhLmZvckVhY2goY2F0ZWdvcnlQYWNrYWdlID0+IHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAga2V5OiBjYXRlZ29yeVBhY2thZ2UudGl0bGUsXG4gICAgICAgIHRpdGxlOiBjYXRlZ29yeVBhY2thZ2UudGl0bGUsXG4gICAgICAgIGZpbHRlcnM6IHsgcGFja2FnZXM6IGNhdGVnb3J5UGFja2FnZS5pZCB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICBrZXk6ICdlbnRyZWVzJyxcbiAgICAgIHRpdGxlOiAnRW50csOpZXMnLFxuICAgICAgZmlsdGVyczogeyByZWNpcGVfdHlwZV9pZDogdGhpcy5yZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZUJ5TmFtZSgnZW50csOpZScpLmlkIH1cbiAgICB9KTtcbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICBrZXk6ICdwbGF0cycsXG4gICAgICB0aXRsZTogJ1BsYXRzJyxcbiAgICAgIGZpbHRlcnM6IHsgcmVjaXBlX3R5cGVfaWQ6IHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVCeU5hbWUoJ3BsYXQgcHJpbmNpcGFsJykuaWQgfVxuICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgIGtleTogJ2Rlc3NlcnRzJyxcbiAgICAgIHRpdGxlOiAnRGVzc2VydHMnLFxuICAgICAgZmlsdGVyczogeyByZWNpcGVfdHlwZV9pZDogdGhpcy5yZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZUJ5TmFtZSgnZGVzc2VydCcpLmlkIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdENhdGVnb3J5RnJvbVVybCgpIHtcbiAgICBjb25zdCBwYXJhbXNTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgIGNvbnN0IHBhcmFtc0FycmF5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXNTdHJpbmcpO1xuICAgIGNvbnN0IHNlbGVjdGVkX2NhdGVnb3J5X2tleSA9IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5Jyk7XG4gICAgaWYgKCFzZWxlY3RlZF9jYXRlZ29yeV9rZXkpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZF9jYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHNlbGVjdGVkX2NhdGVnb3J5X2tleSk7XG4gICAgaWYgKCFzZWxlY3RlZF9jYXRlZ29yeSl7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlUaXRsZUNsaWNrZWQoc2VsZWN0ZWRfY2F0ZWdvcnkpO1xuICB9XG5cbiAgLy8gVXNlZCBvbiBsb2FkIHRvIGJ1aWxkIHRoZSBmaWx0ZXJzIGF0dHJpYnV0ZSwgYW5kIG9uIGNsaWNrIG9uIHRoZSBsaW5rIHRvIHJlc2V0IHRoZSBmaWx0ZXJzXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSB7XG4gICAgICAvLyB0eXBlOiBbXG4gICAgICAvLyAgIHtuYW1lOiByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZSgxKS5pZCwgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRW50csOpZXMnfSxcbiAgICAgIC8vICAge25hbWU6IHJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlKDIpLmlkLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdQbGF0cyd9LFxuICAgICAgLy8gICB7bmFtZTogcmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGUoMykuaWQsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ0Rlc3NlcnRzJ31cbiAgICAgIC8vIF0sXG4gICAgICBkaWZmaWN1bHR5OiBbXG4gICAgICAgIHtuYW1lOiAnMScsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ0ZhY2lsZSd9LFxuICAgICAgICB7bmFtZTogJzInLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdNb3llbm5lJ30sXG4gICAgICAgIHtuYW1lOiAnMycsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ0RpZmZpY2lsZSd9XG4gICAgICBdLFxuICAgICAgY29zdDogW1xuICAgICAgICB7bmFtZTogJzAtNScsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ0JhcyAo4omIIOKJpCA14oKsKSd9LFxuICAgICAgICB7bmFtZTogJzUtMTAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdNb3llbiAo4omIIDUtMTDigqwpICd9LFxuICAgICAgICB7bmFtZTogJzEwLTEwMDAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICfDiWxldsOpICjiiYgg4omlIDEw4oKsKSAnfVxuICAgICAgICAvLyB3ZSBzZXQgYSBsaW1pdCBhdCAxMDAw4oKsIG1heCwgaWYgYSByZWNpcGUgY29zdCBtb3JlIHNob3VsZCBiZSBub24gc2Vuc2UgYW55d2F5XG4gICAgICBdLFxuICAgICAgdGltZTogW1xuICAgICAgICB7bmFtZTogJzE1JywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnMTVtJ30sXG4gICAgICAgIHtuYW1lOiAnMzAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICczMG0nfSxcbiAgICAgICAge25hbWU6ICc2MCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJzFoJ30sXG4gICAgICAgIHtuYW1lOiAnMTIwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnMmgnfVxuICAgICAgXSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmNhdGFsb2dIZWFkZXIpIHsgdGhpcy5jYXRhbG9nSGVhZGVyLnJlc2V0U2VhcmNoU3RyaW5nKCk7IH1cbiAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5kaXNwbGF5SG9tZVBhZ2UpeyB0aGlzLnJldHVyblRvSG9tZVBhZ2UoKTsgfVxuICB9XG5cbiAgdXBkYXRlU2VhcmNoKHNlYXJjaDogc3RyaW5nKSB7XG4gICAgaWYgKHNlYXJjaCAhPT0gdGhpcy5maWx0ZXJzLnNlYXJjaCkge1xuICAgICAgdGhpcy5maWx0ZXJzLnNlYXJjaCA9IHNlYXJjaDtcbiAgICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcnMoZmlsdGVyczogUmVjaXBlRmlsdGVycykge1xuICAgIHRoaXMuZmlsdGVycyA9IHsgLi4uZmlsdGVycyB9OyAvLyBOZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgbmdPbkNoYW5nZXNcbiAgICB0aGlzLmZpbHRlclRvUmVtb3ZlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGlzdElzRW1wdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbG9hZExpc3QoKTtcbiAgfVxuXG4gIHJlbG9hZExpc3QoKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgbm9yIHNlYXJjaCwgcmV0dXJuIHRvIGhvbWUgcGFnZVxuICAgIGlmICh0aGlzLmFyZUZpbHRlcnNFbXB0eSgpKSB7IHRoaXMucmV0dXJuVG9Ib21lUGFnZSgpOyB9XG4gICAgZWxzZSB7IC8vIFJlbG9hZCB0aGUgbGlzdFxuICAgICAgdGhpcy5maWx0ZXJzID0geyAuLi50aGlzLmZpbHRlcnMgfTsgLy8gTmVjZXNzYXJ5IHRvIHRyaWdnZXIgdGhlIG5nT25DaGFuZ2VzXG4gICAgICB0aGlzLmRpc3BsYXlIb21lUGFnZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGNhdGVnb3J5VGl0bGVDbGlja2VkKGV2ZW50OiB7dGl0bGU6IHN0cmluZywgZmlsdGVyczogYW55fSkge1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgICB0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMgPSB7IGZpbHRlcnM6IGV2ZW50LmZpbHRlcnMsIHRpdGxlOiBldmVudC50aXRsZSB9O1xuICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICB9XG5cbiAgYXJlRmlsdGVyc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRmllbGRFbXB0eSh0aGlzLmZpbHRlcnMuZGlmZmljdWx0eSkgJiYgdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmNvc3QpICYmIHRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy50aW1lKVxuICAgICAgJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCA9PT0gJycgJiYgIXRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycz8uZmlsdGVycztcbiAgfVxuXG4gIGlzRmllbGRFbXB0eShmaWx0ZXI6IFJlY2lwZUZpbHRlcltdKSB7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbHRlcikge1xuICAgICAgaWYgKGYudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXJUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlclRvUmVtb3ZlID0gZmlsdGVyVGV4dDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZXR1cm5Ub1RvcCgpIHtcbiAgICBpZiAodGhpcy50b3BBbmNob3IpIHtcbiAgICAgIHRoaXMudG9wQW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBkaXNwbGF5UmV0dXJuVG9wQnV0dG9uKCkge1xuICAgIHRoaXMucmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWQgPSB0aGlzLnRvcEFuY2hvci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA8IC00MDA7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY2hhbmdlSGVhZGVySW1hZ2UocmVjaXBlczogUmVjaXBlW10pIHtcbiAgICBpZiAocmVjaXBlcy5sZW5ndGggPiAwICYmIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycz8uZmlsdGVycyAmJiAhdGhpcy5yZWNpcGVJbkhlYWRlcikge1xuICAgICAgdGhpcy5yZWNpcGVJbkhlYWRlciA9IHJlY2lwZXNbMF07XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuVG9Ib21lUGFnZSgpIHtcbiAgICB0aGlzLmRpc3BsYXlIb21lUGFnZSA9IHRydWU7XG4gICAgdGhpcy5yZWNpcGVJbkhlYWRlciA9IHVuZGVmaW5lZDsgLy8gRG9uJ3QgZm9yY2UgYSByZWNpcGUgaW4gaGVhZGVyIG9uIGhvbWVQYWdlXG4gICAgdGhpcy5yZXNldEZpbHRlcnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkZpbHRlckNvbGxhcHNlZCgpIHtcbiAgICB0aGlzLmlzRmlsdGVyQ29sbGFwc2VkID0gIXRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHRvIHRyaWdnZXIgYWZ0ZXIgdGhlIGRldGVjdENoYW5nZXMgYmVjYXVzZSB3ZSBuZWVkIHRvIGFscmVhZCBoYXZlIHRoZSBkaXNwbGF5IGNoYW5nZSB0byB1cGRhdGUgY2FyZHNcbiAgICB0aGlzLmNhdGVnb3JpZXNDb21wLmZvckVhY2goIGNhdCA9PiB7XG4gICAgICBjYXQudXBkYXRlV2lkdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdvVG9DcmVhdGVQYWdlKHJlY2lwZSA9IG51bGwpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZVRvVXBkYXRlID0gcmVjaXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gIH1cblxuICBsZWF2ZUNyZWF0ZVBhZ2UoKSB7XG4gICAgdGhpcy5jcmVhdGluZ1JlY2lwZSA9IGZhbHNlO1xuICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIG1hbmFnZVJlY2lwZUFjdGlvbihldmVudDoge2FjdGlvbjogc3RyaW5nLCByZWNpcGU6IFJlY2lwZX0pIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmFjdGlvbikge1xuICAgICAgY2FzZSAnQ1JFQVRFJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICB0aGlzLmdvVG9DcmVhdGVQYWdlKGV2ZW50LnJlY2lwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdERUxFVEUnOiB7XG4gICAgICAgIGlmIChldmVudC5yZWNpcGU/LmlkICYmIGV2ZW50LnJlY2lwZS5yZWxhdGlvbnNoaXBzWydyZWNpcGUtcHJvdmlkZXInXT8uZGF0YS5pZCA9PT0gJ3BlcnNvbmFsJykge1xuICAgICAgICAgIHRoaXMucmVjaXBlc1NlcnZpY2UuZGVsZXRlKGV2ZW50LnJlY2lwZS5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTGlzdEVtcHR5KHJlY2lwZXM6IFJlY2lwZVtdKSB7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IHJlY2lwZXMubGVuZ3RoID09PSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiAjbWlhbUNhdGFsb2dUb3BBbmNob3IgY2xhc3M9XCJtaWFtLWNhdGFsb2ctYW5jaG9yXCI+PC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWNyZWF0aW5nUmVjaXBlIGVsc2UgY3JlYXRpb25QYWdlXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nXCIgKHdpbmRvdzpzY3JvbGwpPVwiZGlzcGxheVJldHVyblRvcEJ1dHRvbigpXCI+XG4gIDxuZy1taWFtLXJlY2lwZS1maWx0ZXJzXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgW21vYmlsZUZpeGVkXT1cInJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkXCJcbiAgICBbZmlsdGVyVG9SZW1vdmVdPVwiZmlsdGVyVG9SZW1vdmVcIlxuICAgIChmaWx0ZXJSZXNldCk9XCJyZXNldEZpbHRlcnMoKVwiXG4gICAgKGZpbHRlckNoYW5nZWQpPVwidXBkYXRlRmlsdGVycygkZXZlbnQpXCJcbiAgICAoZmlsdGVyQ29sbGFwc2VkKT1cIm9uRmlsdGVyQ29sbGFwc2VkKClcIj5cbiAgPC9uZy1taWFtLXJlY2lwZS1maWx0ZXJzPlxuXG4gIDxkaXYgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jb250ZW50XCIgW25nQ2xhc3NdPVwieydmaWx0ZXItY29sbGFwc2VkJzogaXNGaWx0ZXJDb2xsYXBzZWR9XCI+XG4gICAgPG5nLW1pYW0tY2F0YWxvZy1oZWFkZXIgXG4gICAgICBbZGlzcGxheVJldHVybkJ1dHRvbl09XCIhZGlzcGxheUhvbWVQYWdlXCJcbiAgICAgIFtmb3JjZWRSZWNpcGVdPVwicmVjaXBlSW5IZWFkZXJcIlxuICAgICAgW3RpdGxlXT1cImRpc3BsYXlIb21lUGFnZSA/IGhvbWVQYWdlVGl0bGUgOiBcbiAgICAgICAgKGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMgJiYgZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSAhPT0gJycgPyBmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlIDogdGl0bGVJblJlc2VhcmNoTW9kZSlcIlxuICAgICAgKHJldHVybkJ1dHRvblByZXNzZWQpPVwicmV0dXJuVG9Ib21lUGFnZSgpXCJcbiAgICAgIChzZWFyY2hTdHJpbmdDaGFuZ2VkKT1cInVwZGF0ZVNlYXJjaCgkZXZlbnQpXCI+XG4gICAgPC9uZy1taWFtLWNhdGFsb2ctaGVhZGVyPlxuXG4gICAgPGRpdiAqbmdJZj1cIiFkaXNwbGF5SG9tZVBhZ2UgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPG5nLW1pYW0tY2F0YWxvZy1saXN0XG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgICAgICBbcmFuZG9tTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgKHJldHJpZXZlZFJlY2lwZXMpPVwiY2hhbmdlSGVhZGVySW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc0NvbXBvbmVudHM+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2F0ZWdvcmllcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jYXRlZ29yaWVzXCI+XG4gICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnkgXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIiBcbiAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIiBcbiAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWRcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3JldHVyblRvcFwiIChjbGljayk9XCJyZXR1cm5Ub1RvcCgpXCI+XG4gICAgICA8bmctbWlhbS1pY29uIGhlaWdodD0nMzInIHdpZHRoPSczMicgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci13aGl0ZSlcIiBbaWNvbk5hbWVdPVwiaWNvbi5DaGV2cm9uRG93blwiPjwvbmctbWlhbS1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjcmVhdGlvblBhZ2U+XG4gIDxuZy1taWFtLXJlY2lwZS1zdGVwcGVyIFtyZWNpcGVdPVwicmVjaXBlVG9VcGRhdGVcIiAocmVjaXBlQ2hhbmdlKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCIgKGNhbmNlbGVkKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCI+PC9uZy1taWFtLXJlY2lwZS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9idWlsZHMvbWlhbS9uZy1taWFtLXNkay9wcm9qZWN0cy9uZy1taWFtL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9fd2ViLWNvbXBvbmVudHMvcmVjaXBlLWNhdGFsb2cvcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUIsaUJBQWlCLEVBQVUsVUFBVSxFQUM3SCxZQUFZLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBTyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkksT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDYy9DLCtCQUNFO0lBQUEsNEJBQU07SUFBQSw2REFBNkM7SUFBQSxpQkFBTztJQUMxRCwrQkFDRTtJQUFBLGtDQUFnRjtJQUFsRCxvTUFBMkIsY0FBYyxFQUFFLElBQUksS0FBRTtJQUFDLG1CQUFHO0lBQUEsaUJBQVM7SUFDNUYsa0NBQWlGO0lBQW5ELHNNQUEyQixjQUFjLEVBQUUsS0FBSyxLQUFFO0lBQUMsbUJBQUc7SUFBQSxpQkFBUztJQUMvRixpQkFBTTtJQUNSLGlCQUFNOzs7O0lBRU4sK0JBQ0U7SUFBQSxnREFNdUI7SUFIckIsMlBBQThDLG1PQUFBLHlQQUFBO0lBR2hELGlCQUF1QjtJQUN6QixpQkFBTTs7O0lBTkYsZUFBbUI7SUFBbkIsd0NBQW1CLG9CQUFBOzs7O0lBVW5CLG9EQUsyQjtJQUR6QixpU0FBNEM7SUFDOUMsaUJBQTJCOzs7SUFIekIsMENBQXdCLGlDQUFBOzs7SUFINUIsK0JBQ0U7SUFBQSw0SUFLQTtJQUNGLGlCQUFNOzs7SUFMRixlQUFtQztJQUFuQyw0Q0FBbUM7OztJQUZ2Qyw0RkFDRTs7O0lBREcsbURBQTZCOzs7O0lBVXBDLCtCQUNFO0lBRG1GLGtNQUF1QjtJQUMxRyxtQ0FBc0g7SUFDeEgsaUJBQU07OztJQURxRSxlQUE2QjtJQUE3QixrREFBNkI7Ozs7O0lBckQ1Ryw4QkFFRTtJQUZ5RSxtT0FBMEM7SUFFbkgsaURBU3lCO0lBTHZCLDJOQUE4QiwrTkFBQSwyTkFBQSw4TkFBQTtJQUtoQyxpQkFBeUI7SUFFekIsOEJBQ0U7SUFBQSxpREFPeUI7SUFGdkIsK09BQTBDLDBPQUFBO0lBRTVDLGlCQUF5QjtJQUV6Qiw2RUFDRTtJQU9GLDZFQUNFO0lBU0YsK0hBQ0U7SUFVRiw4RUFDRTtJQUVKLGlCQUFNO0lBQ1IsaUJBQU07Ozs7SUFyREYsZUFBbUI7SUFBbkIsd0NBQW1CLHdEQUFBLHlDQUFBO0lBVXFCLGVBQW1EO0lBQW5ELCtFQUFtRDtJQUV6RixlQUF3QztJQUF4Qyw2REFBd0MsdUNBQUEsa05BQUE7SUFRZSxlQUF3QjtJQUF4Qiw4Q0FBd0I7SUFRNUUsZUFBa0Q7SUFBbEQsOENBQWtELGlCQUFBO0lBcUJsRCxlQUF3QztJQUF4Qyw4REFBd0M7Ozs7SUFNL0Msa0RBQTZJO0lBQTNGLHdPQUFrQyxtTkFBQTtJQUFnQyxpQkFBeUI7OztJQUFySCw4Q0FBeUI7O0FEdENuRCxNQUFNLE9BQU8sc0JBQXNCO0lBd0JqQyxZQUNTLEdBQXNCLEVBQ3RCLGtCQUFxQyxFQUNyQyxjQUE4QixFQUM5QixlQUFpQyxFQUNqQyxjQUE4QixFQUM3QixjQUE4QixFQUMvQixZQUEwQixFQUMxQixZQUF5QjtRQVB6QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQTFCbEMsa0JBQWEsR0FBRyxzQ0FBc0MsQ0FBQztRQUN2RCx3QkFBbUIsR0FBRyx3QkFBd0IsQ0FBQztRQUMvQyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUNBQWdDLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQWF6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixRQUFRLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLHdHQUF3RztnQkFDeEcsMkZBQTJGO2dCQUMzRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFDckQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0YsQ0FBQyxDQUFDLElBQUksQ0FDTCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQVE7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO2dCQUNqQixHQUFHLEVBQUUsYUFBYTtnQkFDbEIsS0FBSyxFQUFFLDJCQUEyQjtnQkFDbEMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTthQUM3QixDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbkIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLO2dCQUMxQixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7Z0JBQzVCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFO2FBQzFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRSxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbkIsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO2FBQzdDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pFLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEdBQUcsRUFBRSxPQUFPO2dCQUNaLEtBQUssRUFBRSxPQUFPO2dCQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO2FBQ3pDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNuQixHQUFHLEVBQUUsVUFBVTtnQkFDZixLQUFLLEVBQUUsVUFBVTtnQkFDakIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsRUFBQztZQUN2QixPQUFPO1NBQ1I7UUFDRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLG1CQUFtQixDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGdCQUFnQixFQUFDO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsWUFBWTtRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixVQUFVO1lBQ1YsNkVBQTZFO1lBQzdFLDJFQUEyRTtZQUMzRSw2RUFBNkU7WUFDN0UsS0FBSztZQUNMLFVBQVUsRUFBRTtnQkFDVixFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDO2dCQUN6QyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDO2dCQUMxQyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDO2FBQzdDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUM7Z0JBQ2pELEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBQztnQkFDdEQsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFDO2dCQUN6RCxnRkFBZ0Y7YUFDakY7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQztnQkFDdkMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQztnQkFDdkMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQztnQkFDdEMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQzthQUN4QztTQUNGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FBRTtRQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUM7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUFFO0lBQ3hELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFzQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxxQkFBUSxPQUFPLENBQUUsQ0FBQyxDQUFDLHVDQUF1QztRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVO1FBQ1IsMERBQTBEO1FBQzFELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FBRTthQUNuRCxFQUFFLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsT0FBTyxxQkFBUSxJQUFJLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyx1Q0FBdUM7WUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFvQztRQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxlQUFlOztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2VBQzVILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLDBDQUFFLE9BQU8sQ0FBQSxDQUFDO0lBQzlFLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBc0I7UUFDakMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNYLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDM0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBaUI7O1FBQ2pDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsMENBQUUsT0FBTyxDQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pGLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyw2Q0FBNkM7UUFDOUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLHVHQUF1RztRQUN2RyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBRSxHQUFHLENBQUMsRUFBRTtZQUNqQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBdUM7O1FBQ3hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTthQUNQO1lBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsTUFBTTthQUNQO1lBRUQsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDYixJQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sMENBQUUsRUFBRSxLQUFJLE9BQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsMENBQUUsSUFBSSxDQUFDLEVBQUUsTUFBSyxVQUFVLEVBQUU7b0JBQzdGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztpQkFDSDtnQkFDRCxNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBaUI7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDL0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUFDLFNBQVMsRUFBRSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQzFDLEdBQUcsQ0FBQyxDQUFDLFFBQXFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxvRkFBb0Y7SUFDNUUsc0JBQXNCO1FBQzVCLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztTQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzRGQXBVVSxzQkFBc0I7MkRBQXRCLHNCQUFzQjt1QkFDdEIsc0JBQXNCOzt1QkFFbkIsd0JBQXdCOzs7Ozs7O1FDeEJ4Qyw0QkFBNkQ7UUFDN0Qsd0VBRUU7UUF1REYsd0hBQ0U7OztRQTFERyxlQUF5QztRQUF6QywwQ0FBeUMsaUJBQUE7O2tERG9CakMsc0JBQXNCO2NBUGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxXQUFXLEVBQUUsaUNBQWlDO2dCQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDOUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOytRQUVvQyxhQUFhO2tCQUEvQyxTQUFTO21CQUFDLHNCQUFzQjtZQUNFLFNBQVM7a0JBQTNDLFNBQVM7bUJBQUMsc0JBQXNCO1lBQ1EsY0FBYztrQkFBdEQsWUFBWTttQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25Jbml0LCBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXRhbG9nQ2F0ZWdvcnlDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWNhdGVnb3J5L2NhdGFsb2ctY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY2lwZSB9IGZyb20gJy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHsgUmVjaXBlVHlwZVNlcnZpY2UsIFNwb25zb3JTZXJ2aWNlLCBQYWNrYWdlU2VydmljZSwgU3VwcGxpZXJzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IENhdGFsb2dIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jYXRhbG9nLWhlYWRlci9jYXRhbG9nLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVjaXBlRmlsdGVyLCBSZWNpcGVGaWx0ZXJzIH0gZnJvbSAnLi4vLi4vX3R5cGVzL3JlY2lwZS1maWx0ZXJzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRG9jdW1lbnRDb2xsZWN0aW9uIH0gZnJvbSAnbmd4LWpzb25hcGknO1xuaW1wb3J0IHsgUGFja2FnZSB9IGZyb20gJy4uLy4uL19tb2RlbHMvcGFja2FnZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tcmVjaXBlLWNhdGFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjaXBlLWNhdGFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWNpcGUtY2F0YWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSZWNpcGVDYXRhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENhdGFsb2dIZWFkZXJDb21wb25lbnQpIGNhdGFsb2dIZWFkZXI6IENhdGFsb2dIZWFkZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ21pYW1DYXRhbG9nVG9wQW5jaG9yJykgdG9wQW5jaG9yOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudCkgIGNhdGVnb3JpZXNDb21wITogUXVlcnlMaXN0PENhdGFsb2dDYXRlZ29yeUNvbXBvbmVudD47XG5cbiAgZmlsdGVyczogUmVjaXBlRmlsdGVycztcbiAgaG9tZVBhZ2VUaXRsZSA9ICdRdVxcJ2VzdC1jZSBxdWkgdm91cyBmZXJhaXQgcGxhaXNpciA/JztcbiAgdGl0bGVJblJlc2VhcmNoTW9kZSA9ICdSw6lzdWx0YXRzIGRlIHJlY2hlcmNoZSc7XG4gIGRpc3BsYXlIb21lUGFnZSA9IHRydWU7XG4gIGlzRmlsdGVyQ29sbGFwc2VkID0gZmFsc2U7XG4gIHJldHVyblRvcEJ1dHRvblNob3VsZEJlRGlzcGxheWVkID0gZmFsc2U7XG4gIGljb24gPSBJY29uO1xuICBjYXRlZ29yaWVzID0gW107XG4gIHJlY2lwZUluSGVhZGVyOiBSZWNpcGU7XG4gIGNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gIHJlY2lwZVRvVXBkYXRlOiBSZWNpcGU7XG4gIGZpbHRlclRvUmVtb3ZlOiBzdHJpbmc7XG4gIGlzTW9iaWxlID0gZmFsc2U7XG4gIGxpc3RJc0VtcHR5ID0gZmFsc2U7XG4gIHNob3dVc2VyRmVlZGJhY2sgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgc3VwcGxpZXJJZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcmVjaXBlVHlwZXNTZXJ2aWNlOiBSZWNpcGVUeXBlU2VydmljZSxcbiAgICBwdWJsaWMgc3BvbnNvclNlcnZpY2U6IFNwb25zb3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBzdXBwbGllclNlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHVibGljIHBhY2thZ2VTZXJ2aWNlOiBQYWNrYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwdWJsaWMgbWVkaWFNYXRjaGVyOiBNZWRpYU1hdGNoZXIsXG4gICAgcHVibGljIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IG1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiAxMDIycHgpJykubWF0Y2hlcztcbiAgICB0aGlzLmlzRmlsdGVyQ29sbGFwc2VkID0gdGhpcy5pc01vYmlsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXG4gICAgICBmb3JrSm9pbihbXG4gICAgICAgIHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVzKCkucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUodHlwZXMgPT4gdHlwZXMubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICAvLyByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZXMoKSBjb21lcyBmcm9tIGEgYmVoYXZpb3Igc3ViamVjdCwgaXQgZG9lcyBub3QgZW1pdCB0aGUgY29tcGxldGUoKSBmdW5jdGlvblxuICAgICAgICAgIC8vIHlvdSBhYnNvbHV0bHkgbmVlZCBhIHRha2UoMSkgb3IgY2FsbCBjb21wbGV0ZSB5b3Vyc2VsZiB0byB0cmlnZ2VyIHRoZSBmb3Jram9pbiBzdWJzY3JpYmVcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc3VwcGxpZXJTZXJ2aWNlLnN1cHBsaWVyJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgIHNraXBXaGlsZShzdXBwID0+IHN1cHAgPT09IHVuZGVmaW5lZCB8fCBzdXBwID09IG51bGwpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5zdXBwbGllcklkID0gcmVzWzFdLmlkO1xuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKSxcbiAgICAgIHRoaXMuYXNzZXNzU2hvd1VzZXJGZWVkYmFjaygpXG4gICAgXTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBpbml0Q2F0ZWdvcmllcyhwYWNrYWdlcykge1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IFt7XG4gICAgICBrZXk6ICdzdWdnZXN0aW9ucycsXG4gICAgICB0aXRsZTogJ1N1Z2dlc3Rpb25zIGRlIGxhIHNlbWFpbmUnLFxuICAgICAgZmlsdGVyczogeyBzdWdnZXN0ZWQ6IHRydWUgfVxuICAgIH1dO1xuICAgIHBhY2thZ2VzLmRhdGEuZm9yRWFjaChjYXRlZ29yeVBhY2thZ2UgPT4ge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICBrZXk6IGNhdGVnb3J5UGFja2FnZS50aXRsZSxcbiAgICAgICAgdGl0bGU6IGNhdGVnb3J5UGFja2FnZS50aXRsZSxcbiAgICAgICAgZmlsdGVyczogeyBwYWNrYWdlczogY2F0ZWdvcnlQYWNrYWdlLmlkIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhcnRlcnNUeXBlID0gdGhpcy5yZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZUJ5TmFtZSgnZW50csOpZScpO1xuICAgIGlmIChzdGFydGVyc1R5cGUpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAga2V5OiAnZW50cmVlcycsXG4gICAgICAgIHRpdGxlOiAnRW50csOpZXMnLFxuICAgICAgICBmaWx0ZXJzOiB7IHJlY2lwZV90eXBlX2lkOiBzdGFydGVyc1R5cGUuaWQgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFpblR5cGUgPSB0aGlzLnJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlQnlOYW1lKCdwbGF0IHByaW5jaXBhbCcpO1xuICAgIGlmIChtYWluVHlwZSkge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICBrZXk6ICdwbGF0cycsXG4gICAgICAgIHRpdGxlOiAnUGxhdHMnLFxuICAgICAgICBmaWx0ZXJzOiB7IHJlY2lwZV90eXBlX2lkOiBtYWluVHlwZS5pZCB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXNzZXJ0VHlwZSA9IHRoaXMucmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGVCeU5hbWUoJ2Rlc3NlcnQnKTtcbiAgICBpZiAoZGVzc2VydFR5cGUpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKHtcbiAgICAgICAga2V5OiAnZGVzc2VydHMnLFxuICAgICAgICB0aXRsZTogJ0Rlc3NlcnRzJyxcbiAgICAgICAgZmlsdGVyczogeyByZWNpcGVfdHlwZV9pZDogZGVzc2VydFR5cGUuaWQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCkge1xuICAgIGNvbnN0IHBhcmFtc1N0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgY29uc3QgcGFyYW1zQXJyYXkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtc1N0cmluZyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeUtleSA9IHBhcmFtc0FycmF5LmdldCgnY2F0YWxvZ0NhdGVnb3J5Jyk7XG4gICAgaWYgKCFzZWxlY3RlZENhdGVnb3J5S2V5KXtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5rZXkgPT09IHNlbGVjdGVkQ2F0ZWdvcnlLZXkpO1xuICAgIGlmICghc2VsZWN0ZWRDYXRlZ29yeSl7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlUaXRsZUNsaWNrZWQoc2VsZWN0ZWRDYXRlZ29yeSk7XG4gIH1cblxuICAvLyBVc2VkIG9uIGxvYWQgdG8gYnVpbGQgdGhlIGZpbHRlcnMgYXR0cmlidXRlLCBhbmQgb24gY2xpY2sgb24gdGhlIGxpbmsgdG8gcmVzZXQgdGhlIGZpbHRlcnNcbiAgcmVzZXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVycyA9IHtcbiAgICAgIC8vIHR5cGU6IFtcbiAgICAgIC8vICAge25hbWU6IHJlY2lwZVR5cGVzU2VydmljZS5nZXRUeXBlKDEpLmlkLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICdFbnRyw6llcyd9LFxuICAgICAgLy8gICB7bmFtZTogcmVjaXBlVHlwZXNTZXJ2aWNlLmdldFR5cGUoMikuaWQsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ1BsYXRzJ30sXG4gICAgICAvLyAgIHtuYW1lOiByZWNpcGVUeXBlc1NlcnZpY2UuZ2V0VHlwZSgzKS5pZCwgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRGVzc2VydHMnfVxuICAgICAgLy8gXSxcbiAgICAgIGRpZmZpY3VsdHk6IFtcbiAgICAgICAge25hbWU6ICcxJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRmFjaWxlJ30sXG4gICAgICAgIHtuYW1lOiAnMicsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ01veWVubmUnfSxcbiAgICAgICAge25hbWU6ICczJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnRGlmZmljaWxlJ31cbiAgICAgIF0sXG4gICAgICBjb3N0OiBbXG4gICAgICAgIHtuYW1lOiAnMC01JywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnQmFzICjiiYgg4omkIDXigqwpJ30sXG4gICAgICAgIHtuYW1lOiAnNS0xMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ01veWVuICjiiYggNS0xMOKCrCkgJ30sXG4gICAgICAgIHtuYW1lOiAnMTAtMTAwMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJ8OJbGV2w6kgKOKJiCDiiaUgMTDigqwpICd9XG4gICAgICAgIC8vIHdlIHNldCBhIGxpbWl0IGF0IDEwMDDigqwgbWF4LCBpZiBhIHJlY2lwZSBjb3N0IG1vcmUgc2hvdWxkIGJlIG5vbiBzZW5zZSBhbnl3YXlcbiAgICAgIF0sXG4gICAgICB0aW1lOiBbXG4gICAgICAgIHtuYW1lOiAnMTUnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICcxNW0nfSxcbiAgICAgICAge25hbWU6ICczMCcsIHZhbHVlOiBmYWxzZSwgdGV4dDogJzMwbSd9LFxuICAgICAgICB7bmFtZTogJzYwJywgdmFsdWU6IGZhbHNlLCB0ZXh0OiAnMWgnfSxcbiAgICAgICAge25hbWU6ICcxMjAnLCB2YWx1ZTogZmFsc2UsIHRleHQ6ICcyaCd9XG4gICAgICBdLFxuICAgIH07XG4gICAgaWYgKHRoaXMuY2F0YWxvZ0hlYWRlcikgeyB0aGlzLmNhdGFsb2dIZWFkZXIucmVzZXRTZWFyY2hTdHJpbmcoKTsgfVxuICAgIHRoaXMuZmlsdGVycy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLmxpc3RJc0VtcHR5ID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmRpc3BsYXlIb21lUGFnZSl7IHRoaXMucmV0dXJuVG9Ib21lUGFnZSgpOyB9XG4gIH1cblxuICB1cGRhdGVTZWFyY2goc2VhcmNoOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VhcmNoICE9PSB0aGlzLmZpbHRlcnMuc2VhcmNoKSB7XG4gICAgICB0aGlzLmZpbHRlcnMuc2VhcmNoID0gc2VhcmNoO1xuICAgICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVycyhmaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzKSB7XG4gICAgdGhpcy5maWx0ZXJzID0geyAuLi5maWx0ZXJzIH07IC8vIE5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoZSBuZ09uQ2hhbmdlc1xuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnJldHVyblRvVG9wKCk7XG4gICAgfVxuICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICB9XG5cbiAgcmVsb2FkTGlzdCgpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZmlsdGVycyBub3Igc2VhcmNoLCByZXR1cm4gdG8gaG9tZSBwYWdlXG4gICAgaWYgKHRoaXMuYXJlRmlsdGVyc0VtcHR5KCkpIHsgdGhpcy5yZXR1cm5Ub0hvbWVQYWdlKCk7IH1cbiAgICBlbHNlIHsgLy8gUmVsb2FkIHRoZSBsaXN0XG4gICAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycyB9OyAvLyBOZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgbmdPbkNoYW5nZXNcbiAgICAgIHRoaXMuZGlzcGxheUhvbWVQYWdlID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2F0ZWdvcnlUaXRsZUNsaWNrZWQoZXZlbnQ6IHt0aXRsZTogc3RyaW5nLCBmaWx0ZXJzOiBhbnl9KSB7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICAgIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyA9IHsgZmlsdGVyczogZXZlbnQuZmlsdGVycywgdGl0bGU6IGV2ZW50LnRpdGxlIH07XG4gICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gIH1cblxuICBhcmVGaWx0ZXJzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy5kaWZmaWN1bHR5KSAmJiB0aGlzLmlzRmllbGRFbXB0eSh0aGlzLmZpbHRlcnMuY29zdCkgJiYgdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLnRpbWUpXG4gICAgICAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoID09PSAnJyAmJiAhdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzO1xuICB9XG5cbiAgaXNGaWVsZEVtcHR5KGZpbHRlcjogUmVjaXBlRmlsdGVyW10pIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZmlsdGVyKSB7XG4gICAgICBpZiAoZi52YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlclRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyVG9SZW1vdmUgPSBmaWx0ZXJUZXh0O1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJldHVyblRvVG9wKCkge1xuICAgIGlmICh0aGlzLnRvcEFuY2hvcikge1xuICAgICAgdGhpcy50b3BBbmNob3IubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BsYXlSZXR1cm5Ub3BCdXR0b24oKSB7XG4gICAgdGhpcy5yZXR1cm5Ub3BCdXR0b25TaG91bGRCZURpc3BsYXllZCA9IHRoaXMudG9wQW5jaG9yLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIDwgLTQwMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjaGFuZ2VIZWFkZXJJbWFnZShyZWNpcGVzOiBSZWNpcGVbXSkge1xuICAgIGlmIChyZWNpcGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzICYmICF0aGlzLnJlY2lwZUluSGVhZGVyKSB7XG4gICAgICB0aGlzLnJlY2lwZUluSGVhZGVyID0gcmVjaXBlc1swXTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5Ub0hvbWVQYWdlKCkge1xuICAgIHRoaXMuZGlzcGxheUhvbWVQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2lwZUluSGVhZGVyID0gdW5kZWZpbmVkOyAvLyBEb24ndCBmb3JjZSBhIHJlY2lwZSBpbiBoZWFkZXIgb24gaG9tZVBhZ2VcbiAgICB0aGlzLnJlc2V0RmlsdGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ29sbGFwc2VkKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJDb2xsYXBzZWQgPSAhdGhpcy5pc0ZpbHRlckNvbGxhcHNlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdG8gdHJpZ2dlciBhZnRlciB0aGUgZGV0ZWN0Q2hhbmdlcyBiZWNhdXNlIHdlIG5lZWQgdG8gYWxyZWFkIGhhdmUgdGhlIGRpc3BsYXkgY2hhbmdlIHRvIHVwZGF0ZSBjYXJkc1xuICAgIHRoaXMuY2F0ZWdvcmllc0NvbXAuZm9yRWFjaCggY2F0ID0+IHtcbiAgICAgIGNhdC51cGRhdGVXaWR0aCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ29Ub0NyZWF0ZVBhZ2UocmVjaXBlID0gbnVsbCkge1xuICAgIHRoaXMuY3JlYXRpbmdSZWNpcGUgPSB0cnVlO1xuICAgIHRoaXMucmVjaXBlVG9VcGRhdGUgPSByZWNpcGU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmV0dXJuVG9Ub3AoKTtcbiAgfVxuXG4gIGxlYXZlQ3JlYXRlUGFnZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nUmVjaXBlID0gZmFsc2U7XG4gICAgdGhpcy5yZWxvYWRMaXN0KCk7XG4gICAgdGhpcy5yZXR1cm5Ub1RvcCgpO1xuICB9XG5cbiAgbWFuYWdlUmVjaXBlQWN0aW9uKGV2ZW50OiB7YWN0aW9uOiBzdHJpbmcsIHJlY2lwZTogUmVjaXBlfSkge1xuICAgIHN3aXRjaCAoZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0VESVQnOiB7XG4gICAgICAgIHRoaXMuZ29Ub0NyZWF0ZVBhZ2UoZXZlbnQucmVjaXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlY2lwZT8uaWQgJiYgZXZlbnQucmVjaXBlLnJlbGF0aW9uc2hpcHNbJ3JlY2lwZS1wcm92aWRlciddPy5kYXRhLmlkID09PSAncGVyc29uYWwnKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRlbGV0ZShldmVudC5yZWNpcGUuaWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkTGlzdCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTGlzdEVtcHR5KHJlY2lwZXM6IFJlY2lwZVtdKSB7XG4gICAgdGhpcy5saXN0SXNFbXB0eSA9IHJlY2lwZXMubGVuZ3RoID09PSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldFVzZXJQcmVmZXJlbmNlKHByZWYsIHN0YXRlKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5zZXRQcmVmZXJlbmNlKHByZWYsIHN0YXRlKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkUGFja2FnZXMoKSlcbiAgICAgICkuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcmVsb2FkUGFja2FnZXMoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmxvYWRQYWNrYWdlcygpLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhY2thZ2VzKCk6IE9ic2VydmFibGU8RG9jdW1lbnRDb2xsZWN0aW9uPFBhY2thZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZVNlcnZpY2UuY2F0ZWdvcmllc19mb3IoW3RoaXMuc3VwcGxpZXJJZF0pLnBpcGUoXG4gICAgICBza2lwV2hpbGUocGFja2FnZXMgPT4gcGFja2FnZXMuaXNfbG9hZGluZyksXG4gICAgICB0YXAoKHBhY2thZ2VzOiBEb2N1bWVudENvbGxlY3Rpb248UGFja2FnZT4pID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q2F0ZWdvcmllcyhwYWNrYWdlcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnlGcm9tVXJsKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNob3cgZmVlZGJhY2sgYmxvY2sgb25seSBpZiB1c2VyIGlzIGxvZ2dlZCBhbmQgdGhlIGNoaWxkcmVuIHByZWZlcmVuY2UgaXMgdW5rbm93blxuICBwcml2YXRlIGFzc2Vzc1Nob3dVc2VyRmVlZGJhY2soKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5pc0xvZ2dlZCQsXG4gICAgICB0aGlzLnVzZXJzU2VydmljZS5wcmVmZXJlbmNlRGVmaW5lZCgnaGFzX2NoaWxkcmVuJylcbiAgICBdKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICBjb25zdCBsb2dnZWQgPSByZXN1bHRzWzBdO1xuICAgICAgY29uc3QgcHJlZmVyZW5jZURlZmluZWQgPSByZXN1bHRzWzFdO1xuICAgICAgdGhpcy5zaG93VXNlckZlZWRiYWNrID0gbG9nZ2VkICYmICFwcmVmZXJlbmNlRGVmaW5lZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiAjbWlhbUNhdGFsb2dUb3BBbmNob3IgY2xhc3M9XCJtaWFtLWNhdGFsb2ctYW5jaG9yXCI+PC9kaXY+XG48ZGl2ICpuZ0lmPVwiIWNyZWF0aW5nUmVjaXBlIGVsc2UgY3JlYXRpb25QYWdlXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nXCIgKHdpbmRvdzpzY3JvbGwpPVwiZGlzcGxheVJldHVyblRvcEJ1dHRvbigpXCI+XG5cbiAgPG5nLW1pYW0tcmVjaXBlLWZpbHRlcnNcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgICBbbW9iaWxlRml4ZWRdPVwicmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWRcIlxuICAgIFtmaWx0ZXJUb1JlbW92ZV09XCJmaWx0ZXJUb1JlbW92ZVwiXG4gICAgKGZpbHRlclJlc2V0KT1cInJlc2V0RmlsdGVycygpXCJcbiAgICAoZmlsdGVyQ2hhbmdlZCk9XCJ1cGRhdGVGaWx0ZXJzKCRldmVudClcIlxuICAgIChmaWx0ZXJDb2xsYXBzZWQpPVwib25GaWx0ZXJDb2xsYXBzZWQoKVwiXG4gICAgKHByZWZlcmVuY2VzQ2hhbmdlZCk9XCJyZWxvYWRQYWNrYWdlcygpXCJcbiAgPlxuICA8L25nLW1pYW0tcmVjaXBlLWZpbHRlcnM+XG5cbiAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7J2ZpbHRlci1jb2xsYXBzZWQnOiBpc0ZpbHRlckNvbGxhcHNlZH1cIj5cbiAgICA8bmctbWlhbS1jYXRhbG9nLWhlYWRlciBcbiAgICAgIFtkaXNwbGF5UmV0dXJuQnV0dG9uXT1cIiFkaXNwbGF5SG9tZVBhZ2VcIlxuICAgICAgW2ZvcmNlZFJlY2lwZV09XCJyZWNpcGVJbkhlYWRlclwiXG4gICAgICBbdGl0bGVdPVwiZGlzcGxheUhvbWVQYWdlID8gaG9tZVBhZ2VUaXRsZSA6IFxuICAgICAgICAoZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycyAmJiBmaWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlICE9PSAnJyA/IGZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMudGl0bGUgOiB0aXRsZUluUmVzZWFyY2hNb2RlKVwiXG4gICAgICAocmV0dXJuQnV0dG9uUHJlc3NlZCk9XCJyZXR1cm5Ub0hvbWVQYWdlKClcIlxuICAgICAgKHNlYXJjaFN0cmluZ0NoYW5nZWQpPVwidXBkYXRlU2VhcmNoKCRldmVudClcIj5cbiAgICA8L25nLW1pYW0tY2F0YWxvZy1oZWFkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fY29udGVudF9fdXNlci1mZWVkYmFja1wiICpuZ0lmPVwic2hvd1VzZXJGZWVkYmFja1wiPlxuICAgICAgPHNwYW4+VW5lIHBldGl0ZSBxdWVzdGlvbiA6IEF2ZXotdm91cyBkZXMgZW5mYW50cyA/PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX2NvbnRlbnRfX3VzZXItZmVlZGJhY2tfX2FjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tYnV0dG9uLWdyZXlcIiAoY2xpY2spPVwic2V0VXNlclByZWZlcmVuY2UoJ2hhc19jaGlsZHJlbicsIHRydWUpXCI+T3VpPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtLWJ1dHRvbi1ncmV5XCIgKGNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlKCdoYXNfY2hpbGRyZW4nLCBmYWxzZSlcIj5Ob248L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFkaXNwbGF5SG9tZVBhZ2UgZWxzZSBjYXRlZ29yaWVzQ29tcG9uZW50c1wiIGNsYXNzPVwibWlhbS1yZWNpcGUtY2F0YWxvZ19fbGlzdFwiPlxuICAgICAgPG5nLW1pYW0tY2F0YWxvZy1saXN0XG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxuICAgICAgICBbcmFuZG9tTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgKHJldHJpZXZlZFJlY2lwZXMpPVwiY2hhbmdlSGVhZGVySW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgIChmaWx0ZXJSZW1vdmVkKT1cInJlbW92ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlY2lwZUFjdGlvblRyaWdnZXJlZCk9XCJtYW5hZ2VSZWNpcGVBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgPC9uZy1taWFtLWNhdGFsb2ctbGlzdD5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc0NvbXBvbmVudHM+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2F0ZWdvcmllcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtaWFtLXJlY2lwZS1jYXRhbG9nX19jYXRlZ29yaWVzXCI+XG4gICAgICAgIDxuZy1taWFtLWNhdGFsb2ctY2F0ZWdvcnkgXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIiBcbiAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkudGl0bGVcIlxuICAgICAgICAgIFtmaWx0ZXJzXT1cImNhdGVnb3J5LmZpbHRlcnNcIiBcbiAgICAgICAgICAoZGlzcGxheUxpc3QpPVwiY2F0ZWdvcnlUaXRsZUNsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLW1pYW0tY2F0YWxvZy1jYXRlZ29yeT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2ICpuZ0lmPVwicmV0dXJuVG9wQnV0dG9uU2hvdWxkQmVEaXNwbGF5ZWRcIiBjbGFzcz1cIm1pYW0tcmVjaXBlLWNhdGFsb2dfX3JldHVyblRvcFwiIChjbGljayk9XCJyZXR1cm5Ub1RvcCgpXCI+XG4gICAgICA8bmctbWlhbS1pY29uIGhlaWdodD0nMzInIHdpZHRoPSczMicgcHJpbWFyeUNvbG9yPVwidmFyKC0tbS1jb2xvci13aGl0ZSlcIiBbaWNvbk5hbWVdPVwiaWNvbi5DaGV2cm9uRG93blwiPjwvbmctbWlhbS1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjcmVhdGlvblBhZ2U+XG4gIDxuZy1taWFtLXJlY2lwZS1zdGVwcGVyIFtyZWNpcGVdPVwicmVjaXBlVG9VcGRhdGVcIiAocmVjaXBlQ2hhbmdlKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCIgKGNhbmNlbGVkKT1cImxlYXZlQ3JlYXRlUGFnZSgpXCI+PC9uZy1taWFtLXJlY2lwZS1zdGVwcGVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=