@eui/ecl 17.3.0 → 18.0.0-next.1
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.
- package/assets/i18n-ecl/bg.json +1 -0
- package/assets/i18n-ecl/cs.json +1 -1
- package/assets/i18n-ecl/da.json +1 -0
- package/assets/i18n-ecl/de.json +1 -0
- package/assets/i18n-ecl/el.json +1 -0
- package/assets/i18n-ecl/en.json +1 -0
- package/assets/i18n-ecl/es.json +1 -0
- package/assets/i18n-ecl/et.json +1 -0
- package/assets/i18n-ecl/fi.json +1 -0
- package/assets/i18n-ecl/fr.json +1 -0
- package/assets/i18n-ecl/ga.json +1 -0
- package/assets/i18n-ecl/hr.json +1 -0
- package/assets/i18n-ecl/hu.json +1 -0
- package/assets/i18n-ecl/it.json +1 -0
- package/assets/i18n-ecl/lt.json +1 -0
- package/assets/i18n-ecl/lv.json +1 -0
- package/assets/i18n-ecl/mt.json +1 -0
- package/assets/i18n-ecl/nl.json +1 -0
- package/assets/i18n-ecl/pl.json +1 -0
- package/assets/i18n-ecl/pt.json +1 -0
- package/assets/i18n-ecl/ro.json +1 -0
- package/assets/i18n-ecl/sk.json +1 -0
- package/assets/i18n-ecl/sl.json +1 -0
- package/assets/i18n-ecl/sv.json +1 -0
- package/docs/components/EclAccordionComponent.html +192 -89
- package/docs/components/EclAccordionItemComponent.html +117 -94
- package/docs/components/EclAppComponent.html +2 -2
- package/docs/components/EclBannerComponent.html +148 -46
- package/docs/components/EclBlockquoteComponent.html +3 -178
- package/docs/components/EclBreadcrumbComponent.html +146 -8
- package/docs/components/EclBreadcrumbSegmentComponent.html +58 -23
- package/docs/components/EclButtonComponent.html +27 -3
- package/docs/components/EclCardBodyComponent.html +2 -2
- package/docs/components/EclCardComponent.html +156 -2
- package/docs/components/EclCarouselComponent.html +90 -86
- package/docs/components/EclCarouselItemComponent.html +38 -3
- package/docs/components/EclCategoryFilterComponent.html +27 -2
- package/docs/components/EclCategoryFilterItemComponent.html +23 -31
- package/docs/components/EclCategoryFilterListComponent.html +61 -2
- package/docs/components/EclCheckboxHelpComponent.html +2 -2
- package/docs/components/EclCheckboxLabelComponent.html +2 -2
- package/docs/components/EclContentBlockComponent.html +2 -2
- package/docs/components/EclContentItemComponent.html +140 -16
- package/docs/components/EclDateBlockComponent.html +3 -3
- package/docs/components/EclDescriptionListDefinitionComponent.html +5 -5
- package/docs/components/EclExpandableComponent.html +9 -4
- package/docs/components/EclFactFiguresComponent.html +2 -2
- package/docs/components/EclFactFiguresDescriptionComponent.html +2 -2
- package/docs/components/EclFactFiguresItemComponent.html +2 -2
- package/docs/components/EclFactFiguresTitleComponent.html +2 -2
- package/docs/components/EclFactFiguresValueComponent.html +2 -2
- package/docs/components/EclFactFiguresViewAllComponent.html +2 -2
- package/docs/components/EclFeaturedComponent.html +2 -2
- package/docs/components/EclFeaturedItemComponent.html +2 -2
- package/docs/components/EclFeaturedItemDescriptionComponent.html +2 -2
- package/docs/components/EclFileComponent.html +2 -2
- package/docs/components/EclFileItemComponent.html +2 -2
- package/docs/components/EclFileItemsComponent.html +2 -2
- package/docs/components/EclFileTaxonomyComponent.html +2 -2
- package/docs/components/EclFormGroupComponent.html +2 -2
- package/docs/components/EclFormLabelComponent.html +2 -2
- package/docs/components/EclGalleryComponent.html +2 -2
- package/docs/components/EclGalleryFooterComponent.html +2 -2
- package/docs/components/EclGalleryItemComponent.html +2 -2
- package/docs/components/EclIconComponent.html +2 -2
- package/docs/components/EclInpageNavigationComponent.html +2 -2
- package/docs/components/EclInpageNavigationItemComponent.html +2 -2
- package/docs/components/EclListIllustrationComponent.html +2 -2
- package/docs/components/EclListIllustrationImageComponent.html +2 -2
- package/docs/components/EclListIllustrationItemComponent.html +2 -2
- package/docs/components/EclMediaContainerComponent.html +2 -2
- package/docs/components/EclMenuComponent.html +3 -3
- package/docs/components/EclMenuItemComponent.html +2 -2
- package/docs/components/EclMenuMegaComponent.html +2 -2
- package/docs/components/EclMenuMegaItemComponent.html +2 -2
- package/docs/components/EclMessageComponent.html +2 -2
- package/docs/components/EclModalBodyComponent.html +2 -2
- package/docs/components/EclModalComponent.html +2 -2
- package/docs/components/EclModalFooterComponent.html +2 -2
- package/docs/components/EclModalHeaderComponent.html +2 -2
- package/docs/components/EclMultiselectComponent.html +2 -2
- package/docs/components/EclMultiselectDropdownComponent.html +2 -2
- package/docs/components/EclMultiselectInputComponent.html +2 -2
- package/docs/components/EclMultiselectOptgroupComponent.html +2 -2
- package/docs/components/EclMultiselectOptionComponent.html +2 -2
- package/docs/components/EclNavigationListComponent.html +2 -2
- package/docs/components/EclNavigationListImageComponent.html +2 -2
- package/docs/components/EclNavigationListItemComponent.html +2 -2
- package/docs/components/EclNewsTickerComponent.html +2 -2
- package/docs/components/EclNewsTickerItemComponent.html +2 -2
- package/docs/components/EclPageHeaderComponent.html +2 -2
- package/docs/components/EclPageHeaderDescriptionContainerComponent.html +2 -2
- package/docs/components/EclPaginationComponent.html +2 -2
- package/docs/components/EclPaginationItemComponent.html +2 -2
- package/docs/components/EclPopoverComponent.html +2 -2
- package/docs/components/EclRadioHelpComponent.html +2 -2
- package/docs/components/EclRadioLabelComponent.html +2 -2
- package/docs/components/EclRangeValueComponent.html +2 -2
- package/docs/components/EclRatingFieldComponent.html +2 -2
- package/docs/components/EclSearchFormComponent.html +3 -3
- package/docs/components/EclSelectContainerComponent.html +2 -2
- package/docs/components/EclSiteFooterComponent.html +2 -2
- package/docs/components/EclSiteFooterFixedContentECComponent.html +2 -2
- package/docs/components/EclSiteFooterFixedContentEUComponent.html +2 -2
- package/docs/components/EclSiteHeaderActionComponent.html +2 -2
- package/docs/components/EclSiteHeaderBannerTopComponent.html +2 -2
- package/docs/components/EclSiteHeaderComponent.html +2 -2
- package/docs/components/EclSiteHeaderEnvironmentComponent.html +2 -2
- package/docs/components/EclSiteHeaderLanguageComponent.html +2 -2
- package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +2 -2
- package/docs/components/EclSiteHeaderLoginComponent.html +2 -2
- package/docs/components/EclSiteHeaderMessageComponent.html +2 -2
- package/docs/components/EclSiteHeaderSearchComponent.html +2 -2
- package/docs/components/EclSocialMediaFollowComponent.html +2 -2
- package/docs/components/EclSocialMediaFollowItemComponent.html +2 -2
- package/docs/components/EclSocialMediaShareComponent.html +2 -2
- package/docs/components/EclSocialMediaShareItemComponent.html +2 -2
- package/docs/components/EclSpinnerComponent.html +2 -2
- package/docs/components/EclStickyContainerComponent.html +2 -2
- package/docs/components/EclTabComponent.html +2 -2
- package/docs/components/EclTabLabelComponent.html +2 -2
- package/docs/components/EclTabMoreComponent.html +2 -2
- package/docs/components/EclTableSortButtonComponent.html +2 -2
- package/docs/components/EclTabsComponent.html +2 -2
- package/docs/components/EclTagComponent.html +2 -2
- package/docs/components/EclTimelineComponent.html +2 -2
- package/docs/components/EclTimelineItemComponent.html +2 -2
- package/docs/components/EclTimelineItemTogglerComponent.html +2 -2
- package/docs/dependencies.html +19 -33
- package/docs/directives/ECLBaseDirective.html +4 -78
- package/docs/directives/EclBannerImageDirective.html +69 -0
- package/docs/directives/EclCardImageDirective.html +86 -0
- package/docs/directives/EclContentBlockTitleDirective.html +52 -0
- package/docs/directives/EclContentItemImageDirective.html +86 -0
- package/docs/directives/EclContentItemPictureDirective.html +1 -1
- package/docs/directives/EclDescriptionListDefinitionListDirective.html +492 -0
- package/docs/directives/EclDescriptionListDirective.html +1 -1
- package/docs/directives/EclUnorderedListDirective.html +5 -5
- package/docs/index.html +2 -2
- package/docs/js/menu-wc.js +27 -27
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +2 -1
- package/esm2022/lib/components/ecl-accordion/ecl-accordion-item.component.mjs +33 -25
- package/esm2022/lib/components/ecl-accordion/ecl-accordion.component.mjs +67 -9
- package/esm2022/lib/components/ecl-accordion/ecl-accordion.module.mjs +5 -5
- package/esm2022/lib/components/ecl-app/ecl-app.component.mjs +4 -4
- package/esm2022/lib/components/ecl-app/ecl-app.module.mjs +5 -5
- package/esm2022/lib/components/ecl-banner/ecl-banner-credit.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-banner/ecl-banner-description.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-banner/ecl-banner-picture.directive.mjs +11 -10
- package/esm2022/lib/components/ecl-banner/ecl-banner-title.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-banner/ecl-banner.component.mjs +66 -33
- package/esm2022/lib/components/ecl-banner/ecl-banner.module.mjs +5 -5
- package/esm2022/lib/components/ecl-base.directive.mjs +8 -13
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote-picture.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.component.mjs +6 -29
- package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.module.mjs +5 -5
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.mjs +18 -23
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.mjs +87 -36
- package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.mjs +7 -6
- package/esm2022/lib/components/ecl-button/ecl-button-label.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-button/ecl-button.component.mjs +13 -15
- package/esm2022/lib/components/ecl-button/ecl-button.module.mjs +5 -5
- package/esm2022/lib/components/ecl-card/ecl-card-body.component.mjs +4 -4
- package/esm2022/lib/components/ecl-card/ecl-card-picture.directive.mjs +12 -9
- package/esm2022/lib/components/ecl-card/ecl-card.component.mjs +38 -10
- package/esm2022/lib/components/ecl-card/ecl-card.module.mjs +6 -7
- package/esm2022/lib/components/ecl-card/index.mjs +1 -2
- package/esm2022/lib/components/ecl-carousel/ecl-carousel-item.component.mjs +16 -17
- package/esm2022/lib/components/ecl-carousel/ecl-carousel.component.mjs +112 -42
- package/esm2022/lib/components/ecl-carousel/ecl-carousel.module.mjs +5 -5
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.mjs +34 -8
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.mjs +9 -9
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.mjs +8 -5
- package/esm2022/lib/components/ecl-category-filter/ecl-category-filter.module.mjs +5 -5
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-help.component.mjs +4 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-input.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-label.component.mjs +4 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.module.mjs +5 -5
- package/esm2022/lib/components/ecl-content-block/ecl-content-block-elements.directive.mjs +57 -53
- package/esm2022/lib/components/ecl-content-block/ecl-content-block.component.mjs +4 -4
- package/esm2022/lib/components/ecl-content-block/ecl-content-block.module.mjs +5 -5
- package/esm2022/lib/components/ecl-content-item/ecl-content-item-image.directive.mjs +12 -8
- package/esm2022/lib/components/ecl-content-item/ecl-content-item.component.mjs +38 -15
- package/esm2022/lib/components/ecl-content-item/ecl-content-item.module.mjs +5 -5
- package/esm2022/lib/components/ecl-date-block/ecl-date-block.component.mjs +4 -4
- package/esm2022/lib/components/ecl-date-block/ecl-date-block.module.mjs +5 -5
- package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.module.mjs +5 -5
- package/esm2022/lib/components/ecl-expandable/ecl-expandable.component.mjs +18 -22
- package/esm2022/lib/components/ecl-expandable/ecl-expandable.module.mjs +5 -5
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-description.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-title.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-value.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-view-all.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.component.mjs +4 -4
- package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.module.mjs +5 -5
- package/esm2022/lib/components/ecl-featured/ecl-featured-item-description.component.mjs +4 -4
- package/esm2022/lib/components/ecl-featured/ecl-featured-item-link.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-featured/ecl-featured-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-featured/ecl-featured.component.mjs +4 -4
- package/esm2022/lib/components/ecl-featured/ecl-featured.module.mjs +5 -5
- package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.module.mjs +5 -5
- package/esm2022/lib/components/ecl-file/ecl-file-download.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file-items/ecl-file-items.component.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file-picture.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-file/ecl-file-taxonomy/ecl-file-taxonomy.component.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file.component.mjs +4 -4
- package/esm2022/lib/components/ecl-file/ecl-file.module.mjs +5 -5
- package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.module.mjs +5 -5
- package/esm2022/lib/components/ecl-form-group/ecl-form-group.component.mjs +4 -4
- package/esm2022/lib/components/ecl-form-group/ecl-form-group.module.mjs +5 -5
- package/esm2022/lib/components/ecl-form-label/ecl-form-label.component.mjs +4 -4
- package/esm2022/lib/components/ecl-form-label/ecl-form-label.module.mjs +5 -5
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-footer.component.mjs +4 -4
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-gallery/ecl-gallery-media.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-gallery/ecl-gallery.component.mjs +4 -4
- package/esm2022/lib/components/ecl-gallery/ecl-gallery.module.mjs +5 -5
- package/esm2022/lib/components/ecl-help-block/ecl-help-block.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-help-block/ecl-help-block.module.mjs +5 -5
- package/esm2022/lib/components/ecl-icon/ecl-icon.component.mjs +4 -4
- package/esm2022/lib/components/ecl-icon/ecl-icon.module.mjs +5 -5
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.component.mjs +4 -4
- package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.module.mjs +5 -5
- package/esm2022/lib/components/ecl-label/ecl-label.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-label/ecl-label.module.mjs +5 -5
- package/esm2022/lib/components/ecl-link/ecl-link-label.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-link/ecl-link.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-link/ecl-link.module.mjs +5 -5
- package/esm2022/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.mjs +8 -9
- package/esm2022/lib/components/ecl-list/ecl-description-list-definition-item.directive.mjs +21 -4
- package/esm2022/lib/components/ecl-list/ecl-list.directive.mjs +31 -44
- package/esm2022/lib/components/ecl-list/ecl-list.module.mjs +11 -8
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-icon.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-image/ecl-list-illustration-image.component.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.component.mjs +4 -4
- package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.module.mjs +5 -5
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-iframe.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-item.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-media-container/ecl-media-container-picture.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-media-container/ecl-media-container.component.mjs +4 -4
- package/esm2022/lib/components/ecl-media-container/ecl-media-container.module.mjs +5 -5
- package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu.component.mjs +5 -5
- package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.mjs +4 -4
- package/esm2022/lib/components/ecl-menu/ecl-menu.module.mjs +5 -5
- package/esm2022/lib/components/ecl-message/ecl-message-title.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-message/ecl-message.component.mjs +4 -4
- package/esm2022/lib/components/ecl-message/ecl-message.module.mjs +5 -5
- package/esm2022/lib/components/ecl-modal/ecl-modal-body-fixed.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-body.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-close.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-footer.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-header.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal-trigger.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal.component.mjs +4 -4
- package/esm2022/lib/components/ecl-modal/ecl-modal.module.mjs +5 -5
- package/esm2022/lib/components/ecl-multiselect/boldText.pipe.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.mjs +5 -5
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-optgroup/ecl-multiselect-optgroup.component.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.component.mjs +4 -4
- package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.module.mjs +5 -5
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-image/ecl-navigation-list-image.component.mjs +4 -4
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-picture.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.component.mjs +4 -4
- package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.module.mjs +5 -5
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.component.mjs +4 -4
- package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.module.mjs +5 -5
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-background.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-description.directive.mjs +10 -10
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-meta.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-page-header/ecl-page-header-title.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/ecl-page-header.component.mjs +4 -4
- package/esm2022/lib/components/ecl-page-header/ecl-page-header.module.mjs +5 -5
- package/esm2022/lib/components/ecl-pagination/ecl-pagination-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-pagination/ecl-pagination.component.mjs +4 -4
- package/esm2022/lib/components/ecl-pagination/ecl-pagination.module.mjs +5 -5
- package/esm2022/lib/components/ecl-popover/ecl-popover-content.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-popover/ecl-popover-list.directive.mjs +10 -10
- package/esm2022/lib/components/ecl-popover/ecl-popover-toggle.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-popover/ecl-popover.component.mjs +4 -4
- package/esm2022/lib/components/ecl-popover/ecl-popover.module.mjs +5 -5
- package/esm2022/lib/components/ecl-radio/ecl-radio-help.component.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio-input.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio-label.component.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-radio/ecl-radio.module.mjs +5 -5
- package/esm2022/lib/components/ecl-range/ecl-range-value.component.mjs +4 -4
- package/esm2022/lib/components/ecl-range/ecl-range.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-range/ecl-range.module.mjs +5 -5
- package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.component.mjs +4 -4
- package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.module.mjs +5 -5
- package/esm2022/lib/components/ecl-search-form/ecl-search-form.component.mjs +5 -5
- package/esm2022/lib/components/ecl-search-form/ecl-search-form.module.mjs +5 -5
- package/esm2022/lib/components/ecl-select/ecl-select-container.component.mjs +4 -4
- package/esm2022/lib/components/ecl-select/ecl-select.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-select/ecl-select.module.mjs +5 -5
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ec/ecl-site-footer-fixed-content.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-column.directive.mjs +10 -10
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-description.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-link.directive.mjs +16 -16
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-list.directive.mjs +16 -16
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-section.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-title.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/eu/ecl-site-footer-fixed-content.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.module.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/action/ecl-site-header-action.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/banner-top/ecl-site-header-banner-top.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/cta/ecl-site-header-cta.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/ecl-site-header-environment/ecl-site-header-environment.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/ecl-site-header.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/ecl-site-header.module.mjs +5 -5
- package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login-details.directive.mjs +7 -7
- package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/message/ecl-site-header-message.component.mjs +4 -4
- package/esm2022/lib/components/ecl-site-header/search/ecl-site-header-search.component.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-link.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.component.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.module.mjs +5 -5
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-link.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.component.mjs +4 -4
- package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.module.mjs +5 -5
- package/esm2022/lib/components/ecl-spinner/ecl-spinner-label.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-spinner/ecl-spinner.component.mjs +4 -4
- package/esm2022/lib/components/ecl-spinner/ecl-spinner.module.mjs +5 -5
- package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.component.mjs +4 -4
- package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.module.mjs +5 -5
- package/esm2022/lib/components/ecl-table/ecl-table-sort-button.component.mjs +4 -4
- package/esm2022/lib/components/ecl-table/ecl-table.directive.mjs +25 -25
- package/esm2022/lib/components/ecl-table/ecl-table.module.mjs +5 -5
- package/esm2022/lib/components/ecl-tabs/ecl-tab-label.component.mjs +4 -4
- package/esm2022/lib/components/ecl-tabs/ecl-tab-more.component.mjs +4 -4
- package/esm2022/lib/components/ecl-tabs/ecl-tab.component.mjs +4 -4
- package/esm2022/lib/components/ecl-tabs/ecl-tabs.component.mjs +4 -4
- package/esm2022/lib/components/ecl-tabs/ecl-tabs.module.mjs +5 -5
- package/esm2022/lib/components/ecl-tag/ecl-tag.component.mjs +4 -4
- package/esm2022/lib/components/ecl-tag/ecl-tag.module.mjs +5 -5
- package/esm2022/lib/components/ecl-text-area/ecl-text-area.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-text-area/ecl-text-area.module.mjs +5 -5
- package/esm2022/lib/components/ecl-text-input/ecl-text-input.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-text-input/ecl-text-input.module.mjs +5 -5
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-label.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-title.directive.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-toggler.component.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline-item.component.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline.component.mjs +4 -4
- package/esm2022/lib/components/ecl-timeline/ecl-timeline.module.mjs +5 -5
- package/esm2022/lib/components/index.mjs +2 -1
- package/esm2022/lib/services/ecl-default-language.service.mjs +4 -4
- package/esm2022/lib/services/ecl-rtl.service.mjs +4 -4
- package/esm2022/lib/services/ecl-theme.service.mjs +4 -4
- package/esm2022/lib/shared/ecl-all.module.mjs +5 -5
- package/esm2022/lib/utils/directives/ecl-click-outside/ecl-click-outside.directive.mjs +4 -4
- package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.directive.mjs +4 -4
- package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.module.mjs +5 -5
- package/fesm2022/eui-ecl.mjs +20398 -13600
- package/fesm2022/eui-ecl.mjs.map +7 -1
- package/lib/components/ecl-accordion/ecl-accordion-item.component.d.ts +12 -5
- package/lib/components/ecl-accordion/ecl-accordion-item.component.d.ts.map +1 -1
- package/lib/components/ecl-accordion/ecl-accordion.component.d.ts +18 -2
- package/lib/components/ecl-accordion/ecl-accordion.component.d.ts.map +1 -1
- package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts +3 -0
- package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts.map +1 -1
- package/lib/components/ecl-banner/ecl-banner.component.d.ts +21 -13
- package/lib/components/ecl-banner/ecl-banner.component.d.ts.map +1 -1
- package/lib/components/ecl-base.directive.d.ts +3 -5
- package/lib/components/ecl-base.directive.d.ts.map +1 -1
- package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts +1 -22
- package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts.map +1 -1
- package/lib/components/ecl-blockquote/ecl-blockquote.module.d.ts.map +1 -1
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.d.ts +5 -2
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.d.ts.map +1 -1
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts +22 -6
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts.map +1 -1
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.d.ts +4 -3
- package/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.d.ts.map +1 -1
- package/lib/components/ecl-button/ecl-button.component.d.ts +5 -3
- package/lib/components/ecl-button/ecl-button.component.d.ts.map +1 -1
- package/lib/components/ecl-card/ecl-card-picture.directive.d.ts +3 -0
- package/lib/components/ecl-card/ecl-card-picture.directive.d.ts.map +1 -1
- package/lib/components/ecl-card/ecl-card.component.d.ts +12 -2
- package/lib/components/ecl-card/ecl-card.component.d.ts.map +1 -1
- package/lib/components/ecl-card/ecl-card.module.d.ts +6 -7
- package/lib/components/ecl-card/ecl-card.module.d.ts.map +1 -1
- package/lib/components/ecl-card/index.d.ts +0 -1
- package/lib/components/ecl-card/index.d.ts.map +1 -1
- package/lib/components/ecl-carousel/ecl-carousel-item.component.d.ts +6 -3
- package/lib/components/ecl-carousel/ecl-carousel-item.component.d.ts.map +1 -1
- package/lib/components/ecl-carousel/ecl-carousel.component.d.ts +21 -11
- package/lib/components/ecl-carousel/ecl-carousel.component.d.ts.map +1 -1
- package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts +6 -3
- package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts.map +1 -1
- package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts +2 -2
- package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts.map +1 -1
- package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts +1 -0
- package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts.map +1 -1
- package/lib/components/ecl-content-block/ecl-content-block-elements.directive.d.ts +3 -1
- package/lib/components/ecl-content-block/ecl-content-block-elements.directive.d.ts.map +1 -1
- package/lib/components/ecl-content-item/ecl-content-item-image.directive.d.ts +4 -1
- package/lib/components/ecl-content-item/ecl-content-item-image.directive.d.ts.map +1 -1
- package/lib/components/ecl-content-item/ecl-content-item.component.d.ts +11 -4
- package/lib/components/ecl-content-item/ecl-content-item.component.d.ts.map +1 -1
- package/lib/components/ecl-date-block/ecl-date-block.component.d.ts +1 -1
- package/lib/components/ecl-date-block/ecl-date-block.component.d.ts.map +1 -1
- package/lib/components/ecl-expandable/ecl-expandable.component.d.ts +4 -3
- package/lib/components/ecl-expandable/ecl-expandable.component.d.ts.map +1 -1
- package/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.d.ts.map +1 -1
- package/lib/components/ecl-file/ecl-file.component.d.ts.map +1 -1
- package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts +1 -1
- package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts.map +1 -1
- package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts +5 -0
- package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts.map +1 -1
- package/lib/components/ecl-list/ecl-list.directive.d.ts +8 -4
- package/lib/components/ecl-list/ecl-list.directive.d.ts.map +1 -1
- package/lib/components/ecl-list/ecl-list.module.d.ts +1 -1
- package/lib/components/ecl-list/ecl-list.module.d.ts.map +1 -1
- package/lib/components/ecl-modal/ecl-modal-body.component.d.ts.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/docs/components/EclCardImageComponent.html +0 -567
- package/esm2022/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.mjs +0 -30
- package/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.d.ts +0 -14
- package/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.d.ts.map +0 -1
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, forwardRef, } from '@angular/core';
|
|
3
|
-
import { coerceBoolean, coerceElement, coerceNumber } from '@eui/base';
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, booleanAttribute, forwardRef, numberAttribute, } from '@angular/core';
|
|
4
2
|
import { Subject, interval, switchMap, takeUntil } from 'rxjs';
|
|
5
3
|
import { KeyCode } from '../../utils';
|
|
6
4
|
import { ECLBaseDirective } from '../ecl-base.directive';
|
|
@@ -9,10 +7,9 @@ import { EclSlideEvent } from './ecl-carousel.event';
|
|
|
9
7
|
import * as i0 from "@angular/core";
|
|
10
8
|
import * as i1 from "@angular/cdk/layout";
|
|
11
9
|
import * as i2 from "../../services/ecl-rtl.service";
|
|
12
|
-
import * as i3 from "
|
|
13
|
-
import * as i4 from "
|
|
14
|
-
import * as i5 from "
|
|
15
|
-
import * as i6 from "@ngx-translate/core";
|
|
10
|
+
import * as i3 from "../ecl-icon/ecl-icon.component";
|
|
11
|
+
import * as i4 from "./ecl-carousel-item.component";
|
|
12
|
+
import * as i5 from "@ngx-translate/core";
|
|
16
13
|
export class EclCarouselComponent extends ECLBaseDirective {
|
|
17
14
|
constructor(cdkBreakpointObserver, cd, renderer2, eclRtlService) {
|
|
18
15
|
super();
|
|
@@ -20,19 +17,20 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
20
17
|
this.cd = cd;
|
|
21
18
|
this.renderer2 = renderer2;
|
|
22
19
|
this.eclRtlService = eclRtlService;
|
|
23
|
-
|
|
20
|
+
this.ariaLabel = 'Carousel description here';
|
|
21
|
+
this.ariaRoleDescription = 'carousel';
|
|
24
22
|
this.isAutoplay = true;
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
23
|
this.playInterval = 5000;
|
|
27
24
|
this.slide = new EventEmitter();
|
|
25
|
+
this.isButtonNavVisible = false;
|
|
28
26
|
this.isPlaying = false;
|
|
29
27
|
this.isPausedForced = false;
|
|
30
28
|
this.isRtl = false;
|
|
29
|
+
this.transitionDuration = 0.4;
|
|
31
30
|
this.isTabletBreakpoint = false;
|
|
32
31
|
this.isDesktopBreakpoint = false;
|
|
33
32
|
this.isLargeDesktopBreakpoint = false;
|
|
34
33
|
this.isMobileBreakpoint = false;
|
|
35
|
-
this.transitionDuration = 0.4;
|
|
36
34
|
this.playSubject = new Subject();
|
|
37
35
|
this.stopSubject = new Subject();
|
|
38
36
|
this.destroy$ = new Subject();
|
|
@@ -46,12 +44,15 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
46
44
|
this.handleRtlChangeState();
|
|
47
45
|
}
|
|
48
46
|
ngAfterContentInit() {
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
this.initializeSlider();
|
|
49
|
+
this.isButtonDisplay();
|
|
50
|
+
});
|
|
51
51
|
}
|
|
52
52
|
ngAfterViewInit() {
|
|
53
53
|
this.observeElementSizeChanges();
|
|
54
54
|
this.cd.detectChanges();
|
|
55
|
+
setTimeout(() => this.observeBreakpointChanges(), 200);
|
|
55
56
|
}
|
|
56
57
|
ngOnDestroy() {
|
|
57
58
|
this.destroy$.next(true);
|
|
@@ -118,7 +119,7 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
118
119
|
return button.nativeElement.style.display === '';
|
|
119
120
|
}
|
|
120
121
|
showButton(button) {
|
|
121
|
-
button.nativeElement
|
|
122
|
+
this.renderer2.setStyle(button.nativeElement, 'display', '');
|
|
122
123
|
}
|
|
123
124
|
focusOnButton(button) {
|
|
124
125
|
if (!button) {
|
|
@@ -171,13 +172,13 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
171
172
|
return currentIndex - 1;
|
|
172
173
|
}
|
|
173
174
|
getCarouselSlidesWidth() {
|
|
174
|
-
return this.carouselContainerElement?.offsetWidth * this.getAllSlidesCount();
|
|
175
|
+
return this.carouselContainerElement?.nativeElement.offsetWidth * this.getAllSlidesCount();
|
|
175
176
|
}
|
|
176
177
|
getCarouselSlidesOffsetLeft() {
|
|
177
|
-
return -1 * this.carouselContainerElement?.offsetWidth * this.getCurrentItemIndex();
|
|
178
|
+
return -1 * this.carouselContainerElement?.nativeElement.offsetWidth * this.getCurrentItemIndex();
|
|
178
179
|
}
|
|
179
180
|
getCarouselSlidesOffsetRight() {
|
|
180
|
-
return -1 * this.carouselContainerElement?.offsetWidth * this.getCurrentItemIndex();
|
|
181
|
+
return -1 * this.carouselContainerElement?.nativeElement.offsetWidth * this.getCurrentItemIndex();
|
|
181
182
|
}
|
|
182
183
|
handleRtlChangeState() {
|
|
183
184
|
this.eclRtlService.currentRtlState$.pipe(takeUntil(this.destroy$)).subscribe((rtlState) => {
|
|
@@ -222,7 +223,7 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
222
223
|
this.lastHiddenItem.el.nativeElement.innerHTML = this.getFirstContentChild();
|
|
223
224
|
this.lastHiddenItem.isCurrent = false;
|
|
224
225
|
this.slideWidth = this.slides.first.width;
|
|
225
|
-
this.unsubscribeListener = this.renderer2.listen(this.slidesContainer, 'transitionend', () => this.checkIndex());
|
|
226
|
+
this.unsubscribeListener = this.renderer2.listen(this.slidesContainer.nativeElement, 'transitionend', () => this.checkIndex());
|
|
226
227
|
}
|
|
227
228
|
checkIndex() {
|
|
228
229
|
if (this.getCurrentItemIndex() === this.getAllSlidesCount() - 1) {
|
|
@@ -408,55 +409,121 @@ export class EclCarouselComponent extends ECLBaseDirective {
|
|
|
408
409
|
observeBreakpointChanges() {
|
|
409
410
|
this.cdkBreakpointObserver
|
|
410
411
|
.observe([
|
|
411
|
-
'(
|
|
412
|
+
'(max-width: 768px)',
|
|
413
|
+
'(max-width: 997px)',
|
|
414
|
+
'(min-width: 998px)',
|
|
412
415
|
'(min-width: 1140px) and (max-width: 1260px)',
|
|
413
416
|
'(min-width: 1140px)',
|
|
414
417
|
])
|
|
415
418
|
.pipe(takeUntil(this.destroy$))
|
|
416
419
|
.subscribe((result) => {
|
|
417
|
-
this.
|
|
420
|
+
this.isMobileBreakpoint = result.breakpoints['(max-width: 768px)'];
|
|
421
|
+
this.isTabletBreakpoint = result.breakpoints['(min-width: 998px)'];
|
|
418
422
|
this.isDesktopBreakpoint = result.breakpoints['(min-width: 1140px) and (max-width: 1260px)'];
|
|
419
423
|
this.isLargeDesktopBreakpoint = result.breakpoints['(min-width: 1140px)'];
|
|
420
|
-
if (
|
|
424
|
+
if (result.breakpoints['(max-width: 997px)']) {
|
|
425
|
+
setTimeout(() => this.resetHeight(), 200);
|
|
426
|
+
}
|
|
427
|
+
if (this.isMobileBreakpoint) {
|
|
421
428
|
this.stopPlaying();
|
|
422
429
|
}
|
|
430
|
+
if (this.isTabletBreakpoint) {
|
|
431
|
+
setTimeout(() => this.checkBannerHeights(), 200);
|
|
432
|
+
}
|
|
433
|
+
if (this.isLargeDesktopBreakpoint) {
|
|
434
|
+
this.isButtonDisplay();
|
|
435
|
+
}
|
|
423
436
|
});
|
|
424
437
|
}
|
|
425
438
|
observeElementSizeChanges() {
|
|
426
439
|
new ResizeObserver(() => {
|
|
427
440
|
this.cd.detectChanges();
|
|
428
|
-
}).observe(this.carouselContainerElement);
|
|
441
|
+
}).observe(this.carouselContainerElement.nativeElement);
|
|
429
442
|
}
|
|
430
|
-
|
|
431
|
-
|
|
443
|
+
isButtonDisplay() {
|
|
444
|
+
this.isButtonNavVisible = true;
|
|
445
|
+
if (this.getSlidesCount() <= 1) {
|
|
446
|
+
this.isButtonNavVisible = false;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
checkBannerHeights() {
|
|
450
|
+
const heightValues = this.slides.map((slide) => {
|
|
451
|
+
const height = slide.banner?.el.nativeElement.offsetHeight;
|
|
452
|
+
console.log('height', height);
|
|
453
|
+
if (height === 'auto') {
|
|
454
|
+
return 0;
|
|
455
|
+
}
|
|
456
|
+
if (Number.isNaN(height) || height === 100) {
|
|
457
|
+
return 1;
|
|
458
|
+
}
|
|
459
|
+
return height;
|
|
460
|
+
});
|
|
461
|
+
const elementHeights = heightValues.filter((height) => height !== undefined);
|
|
462
|
+
const tallestElementHeight = Math.max(...elementHeights);
|
|
463
|
+
if (tallestElementHeight > 0) {
|
|
464
|
+
this.slides.forEach((slide) => {
|
|
465
|
+
const banner = slide.banner;
|
|
466
|
+
if (banner) {
|
|
467
|
+
const bannerImage = banner.eclBannerImage;
|
|
468
|
+
this.renderer2.setStyle(banner.el.nativeElement, 'height', `${tallestElementHeight}px`);
|
|
469
|
+
if (bannerImage) {
|
|
470
|
+
this.renderer2.setStyle(bannerImage.el.nativeElement, 'aspectRatio', 'auto');
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
this.resetHiddenItems();
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
resetHeight() {
|
|
478
|
+
this.getAllSlidesArray().forEach((slide) => {
|
|
479
|
+
const banner = slide.banner;
|
|
480
|
+
if (banner) {
|
|
481
|
+
const bannerImage = slide.banner.eclBannerImage;
|
|
482
|
+
this.renderer2.setStyle(banner.el.nativeElement, 'height', '');
|
|
483
|
+
if (bannerImage) {
|
|
484
|
+
this.renderer2.setStyle(bannerImage.el.nativeElement, 'aspectRatio', '');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
});
|
|
488
|
+
this.resetHiddenItems();
|
|
489
|
+
}
|
|
490
|
+
resetHiddenItems() {
|
|
491
|
+
if (this.hasControls()) {
|
|
492
|
+
this.firstHiddenItem.el.nativeElement.innerHTML = this.getLastContentChild();
|
|
493
|
+
this.lastHiddenItem.el.nativeElement.innerHTML = this.getFirstContentChild();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponent, deps: [{ token: i1.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.EclRtlService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
497
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0-next.1", type: EclCarouselComponent, selector: "ecl-carousel", inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaRoleDescription: "ariaRoleDescription", isAutoplay: ["isAutoplay", "isAutoplay", booleanAttribute], playInterval: ["playInterval", "playInterval", numberAttribute] }, outputs: { slide: "slide" }, host: { properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-roledescription": "this.ariaRoleDescription", "class": "this.cssClasses" } }, queries: [{ propertyName: "slides", predicate: i0.forwardRef(() => EclCarouselItemComponent) }], viewQueries: [{ propertyName: "carouselContainerElement", first: true, predicate: ["carouselContainer"], descendants: true }, { propertyName: "playButton", first: true, predicate: ["playButton"], descendants: true }, { propertyName: "pauseButton", first: true, predicate: ["pauseButton"], descendants: true }, { propertyName: "prevButton", first: true, predicate: ["prevButton"], descendants: true }, { propertyName: "nextButton", first: true, predicate: ["nextButton"], descendants: true }, { propertyName: "firstHiddenItem", first: true, predicate: ["firstHiddenItem"], descendants: true }, { propertyName: "lastHiddenItem", first: true, predicate: ["lastHiddenItem"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "navigationButtons", predicate: ["currButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n\n </div>\n</div>\n@if(isButtonNavVisible) {\n<button #prevButton class=\"ecl-button ecl-button--ghost ecl-carousel__prev ecl-button--icon-only\" type=\"button\"\n (click)=\"onPreviousSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n</button>\n}\n\n@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--ghost ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--ghost ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-button ecl-button--ghost ecl-carousel__navigation-item\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n@if(isButtonNavVisible) {\n<button #nextButton class=\"ecl-button ecl-button--ghost ecl-carousel__next ecl-button--icon-only\" type=\"button\"\n (click)=\"onNextSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n\n</button>\n}", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"], dependencies: [{ kind: "component", type: i3.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: i4.EclCarouselItemComponent, selector: "ecl-carousel-item", inputs: ["id", "isCurrent"], outputs: ["slideClick"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
|
|
432
498
|
}
|
|
433
|
-
|
|
434
|
-
coerceBoolean
|
|
435
|
-
], EclCarouselComponent.prototype, "isAutoplay", void 0);
|
|
436
|
-
__decorate([
|
|
437
|
-
coerceNumber
|
|
438
|
-
], EclCarouselComponent.prototype, "playInterval", void 0);
|
|
439
|
-
__decorate([
|
|
440
|
-
coerceElement
|
|
441
|
-
], EclCarouselComponent.prototype, "carouselContainerElement", void 0);
|
|
442
|
-
__decorate([
|
|
443
|
-
coerceElement
|
|
444
|
-
], EclCarouselComponent.prototype, "slidesContainer", void 0);
|
|
445
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: EclCarouselComponent, decorators: [{
|
|
499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponent, decorators: [{
|
|
446
500
|
type: Component,
|
|
447
|
-
args: [{ selector: 'ecl-carousel', template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer
|
|
448
|
-
}], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.EclRtlService }], propDecorators: {
|
|
501
|
+
args: [{ selector: 'ecl-carousel', template: "<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n\n </div>\n</div>\n@if(isButtonNavVisible) {\n<button #prevButton class=\"ecl-button ecl-button--ghost ecl-carousel__prev ecl-button--icon-only\" type=\"button\"\n (click)=\"onPreviousSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-270\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n</button>\n}\n\n@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--ghost ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--ghost ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\">\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\"\n class=\"ecl-button ecl-button--ghost ecl-carousel__navigation-item\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n@if(isButtonNavVisible) {\n<button #nextButton class=\"ecl-button ecl-button--ghost ecl-carousel__next ecl-button--icon-only\" type=\"button\"\n (click)=\"onNextSlideClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.NEXT-SLIDES' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"m\" transform=\"rotate-90\" class=\"ecl-button__icon\"> </ecl-icon>\n </span>\n\n</button>\n}", styles: [":host{display:block}.ecl-carousel__container{width:100%}.ecl-carousel__slides{transition-duration:.4s}\n"] }]
|
|
502
|
+
}], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.EclRtlService }], propDecorators: { ariaLabel: [{
|
|
503
|
+
type: HostBinding,
|
|
504
|
+
args: ['attr.aria-label']
|
|
505
|
+
}, {
|
|
506
|
+
type: Input,
|
|
507
|
+
args: ['aria-label']
|
|
508
|
+
}], ariaRoleDescription: [{
|
|
509
|
+
type: HostBinding,
|
|
510
|
+
args: ['attr.aria-roledescription']
|
|
511
|
+
}, {
|
|
449
512
|
type: Input
|
|
513
|
+
}], isAutoplay: [{
|
|
514
|
+
type: Input,
|
|
515
|
+
args: [{ transform: booleanAttribute }]
|
|
450
516
|
}], playInterval: [{
|
|
451
|
-
type: Input
|
|
517
|
+
type: Input,
|
|
518
|
+
args: [{ transform: numberAttribute }]
|
|
519
|
+
}], slide: [{
|
|
520
|
+
type: Output
|
|
452
521
|
}], carouselContainerElement: [{
|
|
453
522
|
type: ViewChild,
|
|
454
523
|
args: ['carouselContainer']
|
|
455
524
|
}], slides: [{
|
|
456
525
|
type: ContentChildren,
|
|
457
526
|
args: [forwardRef(() => EclCarouselItemComponent)]
|
|
458
|
-
}], slide: [{
|
|
459
|
-
type: Output
|
|
460
527
|
}], navigationButtons: [{
|
|
461
528
|
type: ViewChildren,
|
|
462
529
|
args: ['currButton']
|
|
@@ -469,6 +536,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
469
536
|
}], prevButton: [{
|
|
470
537
|
type: ViewChild,
|
|
471
538
|
args: ['prevButton']
|
|
539
|
+
}], nextButton: [{
|
|
540
|
+
type: ViewChild,
|
|
541
|
+
args: ['nextButton']
|
|
472
542
|
}], firstHiddenItem: [{
|
|
473
543
|
type: ViewChild,
|
|
474
544
|
args: ['firstHiddenItem']
|
|
@@ -482,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
482
552
|
type: HostBinding,
|
|
483
553
|
args: ['class']
|
|
484
554
|
}] } });
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBSUgsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBdUJyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBbUN0RCxZQUNZLHFCQUF5QyxFQUN6QyxFQUFxQixFQUNyQixTQUFvQixFQUNwQixhQUE0QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxBLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBb0I7UUFDekMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixrQkFBYSxHQUFiLGFB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NEI7SUFBdkIsYUFBYTt3REFBMkM7QUFFbEM7SUFBdEIsWUFBWTswREFBNEM7QUFFVjtJQUE5QyxhQUFhO3NFQUF1RTtBQVV4QztJQUE1QyxhQUFhOzZEQUE4RDsyRkFoQm5FLG9CQUFvQjtrQkFwQmhDLFNBQVM7K0JBQ0ksY0FBYzsyS0FxQkEsVUFBVTtzQkFBbEIsS0FBSztnQkFFRSxZQUFZO3NCQUFwQixLQUFLO2dCQUUyQix3QkFBd0I7c0JBQXZELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNnQixNQUFNO3NCQUFsRSxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDakQsS0FBSztzQkFBZCxNQUFNO2dCQUNxQixpQkFBaUI7c0JBQTVDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0csV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNDLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDTyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFa0IsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBNkJ2QyxVQUFVO3NCQURiLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuLCBjb2VyY2VFbGVtZW50LCBjb2VyY2VOdW1iZXIgfSBmcm9tICdAZXVpL2Jhc2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgaW50ZXJ2YWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRUNMQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2VjbC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2VjbC1jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xTbGlkZUV2ZW50IH0gZnJvbSAnLi9lY2wtY2Fyb3VzZWwuZXZlbnQnO1xuaW1wb3J0IHsgRWNsUnRsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VjbC1ydGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZWNsLWNhcm91c2VsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiBUT0RPOiByZW1vdmUgYnkgaW1wbGVtZW50aW5nIGZ1bGwgRUNMIHNwZWNzICovXG4gICAgICAgICAgICAuZWNsLWNhcm91c2VsX19jb250YWluZXIge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZWNsLWNhcm91c2VsX19zbGlkZXMge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsQ2Fyb3VzZWxDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQGNvZXJjZUJvb2xlYW4gQElucHV0KCkgaXNBdXRvcGxheTogYm9vbGVhbiB8IGFueSA9IHRydWU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBAY29lcmNlTnVtYmVyIEBJbnB1dCgpIHBsYXlJbnRlcnZhbDogbnVtYmVyIHwgYW55ID0gNTAwMDtcblxuICAgIEBjb2VyY2VFbGVtZW50IEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY2Fyb3VzZWxDb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50KSkgc2xpZGVzOiBRdWVyeUxpc3Q8RWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50PjtcbiAgICBAT3V0cHV0KCkgc2xpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPEVjbFNsaWRlRXZlbnQ+KCk7XG4gICAgQFZpZXdDaGlsZHJlbignY3VyckJ1dHRvbicpIG5hdmlnYXRpb25CdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gICAgQFZpZXdDaGlsZCgncGxheUJ1dHRvbicpIHBsYXlCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncGF1c2VCdXR0b24nKSBwYXVzZUJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdwcmV2QnV0dG9uJykgcHJldkJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmaXJzdEhpZGRlbkl0ZW0nKSBmaXJzdEhpZGRlbkl0ZW06IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdsYXN0SGlkZGVuSXRlbScpIGxhc3RIaWRkZW5JdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBAY29lcmNlRWxlbWVudCBAVmlld0NoaWxkKCdzbGlkZXNDb250YWluZXInKSBzbGlkZXNDb250YWluZXI6IEVsZW1lbnQgfCBhbnk7XG5cbiAgICBwdWJsaWMgaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgcHVibGljIGlzUGF1c2VkRm9yY2VkID0gZmFsc2U7XG4gICAgcHVibGljIGlzUnRsID0gZmFsc2U7XG4gICAgcHVibGljIGlzVGFibGV0QnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rlc2t0b3BCcmVha3BvaW50ID0gZmFsc2U7XG4gICAgcHVibGljIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc01vYmlsZUJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBzbGlkZVdpZHRoOiBudW1iZXI7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuXG4gICAgcHJpdmF0ZSBwbGF5U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBzdG9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUSU1FT1VUX0lOVEVSVkFMID0gNDAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RrQnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVjbFJ0bFNlcnZpY2U6IEVjbFJ0bFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtY2Fyb3VzZWwnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QXV0b3BsYXkoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlQnJlYWtwb2ludENoYW5nZXMoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRpYWxpemVTbGlkZXIoKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVFbGVtZW50U2l6ZUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy51bnN1YnNjcmliZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICB0aGlzLnNob3dCdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBhdXNlQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhdXNlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uKHRoaXMucGxheUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgIH1cblxuICAgIG9uRmlyc3RDYXJvdXNlbEVsZW1lbnRQcmVzcyhlKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUtleWJvYXJkUHJlc3MoZSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5rZXkgPT09IEtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoW0tleUNvZGUuVEFCXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5nZXQoMCksIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCgwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQbGF5aW5nICYmIFtLZXlDb2RlLkFSUk9XX1JJR0hUXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTmF2QnRuS2V5Ym9hcmRQcmVzcyhlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleUNvZGUuQVJST1dfUklHSFQpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkJ1dHRvbkFycm93TGVmdChlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJyc7XG4gICAgfVxuXG4gICAgc2hvd0J1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGZvY3VzT25CdXR0b24oYnV0dG9uOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGlmICghYnV0dG9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvblNsaWRlQ29udHJvbENsaWNrKHNsaWRlOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUoc2xpZGUsIHRydWUpO1xuICAgIH1cblxuICAgIG9uTmV4dFNsaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKHRydWUpO1xuICAgIH1cblxuICAgIG9uUHJldmlvdXNTbGlkZUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzU2xpZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25TbGlkZUhvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhdXNlUGxheWluZygpO1xuICAgIH1cblxuICAgIG9uU2xpZGVIb3Zlcm91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcEJ1dHRvblByZXNzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bWVQbGF5aW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTdG9wQnV0dG9uUHJlc3NlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQYXVzZWRGb3JjZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGFkZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Rlc2t0b3BCcmVha3BvaW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDb250cm9scygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRTbGlkZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXg6IG51bWJlcjtcblxuICAgICAgICB0aGlzLmdldEFsbFNsaWRlc0FycmF5KCkuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzQ3VycmVudCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudEluZGV4IC0gMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2Fyb3VzZWxTbGlkZXNXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRBbGxTbGlkZXNDb3VudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXJvdXNlbFNsaWRlc09mZnNldExlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lY2xSdGxTZXJ2aWNlLmN1cnJlbnRSdGxTdGF0ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocnRsU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNSdGwgPSBydGxTdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QXV0b3BsYXkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0JCA9IHRoaXMucGxheVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIGNvbnN0IHN0b3AkID0gdGhpcy5zdG9wU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICBzdGFydCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCkucGlwZSh0YWtlVW50aWwoc3RvcCQpKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50SXRlbUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICB0aGlzLmdldEFsbFNsaWRlc0FycmF5KCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNDdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVNsaWRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRTbGlkZShpdGVtLCBpZHgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5oYXNDb250cm9scygpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRIaWRkZW5JdGVtcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOb1NsaWRlU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5maXJzdCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0F1dG9wbGF5ICYmIHRoaXMuaXNUYWJsZXRCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEhpZGRlbkl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpcnN0SGlkZGVuSXRlbS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZ2V0TGFzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB0aGlzLmZpcnN0SGlkZGVuSXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYXN0SGlkZGVuSXRlbS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZ2V0Rmlyc3RDb250ZW50Q2hpbGQoKTtcbiAgICAgICAgdGhpcy5sYXN0SGlkZGVuSXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbGlkZVdpZHRoID0gdGhpcy5zbGlkZXMuZmlyc3Qud2lkdGg7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnNsaWRlc0NvbnRhaW5lciwgJ3RyYW5zaXRpb25lbmQnLCAoKSA9PiB0aGlzLmNoZWNrSW5kZXgoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0luZGV4KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCkgPT09IHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNsaWRlcy5maXJzdDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShpdGVtLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNsaWRlcy5sYXN0O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFzdENvbnRlbnRDaGlsZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpID4gMCA/IHRoaXMuc2xpZGVzLmdldCh0aGlzLmdldFNsaWRlc0NvdW50KCkgLSAxKS5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA6ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rmlyc3RDb250ZW50Q2hpbGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDAgPyB0aGlzLnNsaWRlcy5nZXQoMCkuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTbGlkZShpdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQsIGlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uaW5kZXggPSBpZHg7XG4gICAgICAgIGl0ZW0uYXJpYUxhYmVsID0gYHNsaWRlICR7aWR4ICsgMX0gb2YgJHt0aGlzLmdldFNsaWRlc0NvdW50KCl9YDtcbiAgICAgICAgaXRlbS53aWR0aCA9IDEwMCAvIHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvVG9OZXh0U2xpZGUoaXNMb29wOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLmdldE5leHRTbGlkZShpc0xvb3ApLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvVG9QcmV2aW91c1NsaWRlKGlzTG9vcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUodGhpcy5nZXRQcmV2aW91c1NsaWRlKGlzTG9vcCksIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWN0aXZhdGVTbGlkZShzbGlkZTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCB3aXRoVHJhbnNpdGlvbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAod2l0aFRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzbGlkZS5pc0N1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aXRoVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zbGlkZS5uZXh0KG5ldyBFY2xTbGlkZUV2ZW50KHRoaXMuc2xpZGVzLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGFzdEJ1dHRvbihpbmRleCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBidXR0b25zTGlzdCA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnM7XG4gICAgICAgIHJldHVybiBpbmRleCArIDEgPj0gYnV0dG9uc0xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaXJzdEJ1dHRvbihpbmRleCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaW5kZXggPD0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzUGF1c2VkRm9yY2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGxheVN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcFBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYXVzZWRGb3JjZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhdXNlUGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN1bWVQbGF5aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucGxheVN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dFNsaWRlKGlzTG9vcDogYm9vbGVhbik6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IHNsaWRlc0NvdW50ID0gdGhpcy5nZXRTbGlkZXNDb3VudCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSBzbGlkZXNDb3VudCAtIDEpIHtcbiAgICAgICAgICAgIGlmIChpc0xvb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpW3RoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKSAtMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sYXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmdldChjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsU2xpZGVzQXJyYXkoKTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gWy4uLlt0aGlzLmZpcnN0SGlkZGVuSXRlbV0sIC4uLnRoaXMuc2xpZGVzLnRvQXJyYXkoKSwgLi4uW3RoaXMubGFzdEhpZGRlbkl0ZW1dXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXZpb3VzU2xpZGUoaXNMb29wOiBib29sZWFuKTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgaWYoaXNMb29wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmZpcnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmdldChjdXJyZW50SW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2xpZGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbFNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGggKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vU2xpZGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNsaWRlcy5zb21lKChpdGVtKSA9PiBpdGVtLmlzQ3VycmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGxheUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGF1c2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QcmV2aW91c1NsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25UYWIoZSwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMYXN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNCdXR0b25WaXNpYmxlKHRoaXMucHJldkJ1dHRvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wcmV2QnV0dG9uKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKGJ1dHRvbik7XG4gICAgICAgICAgICB9LCB0aGlzLlRJTUVPVVRfSU5URVJWQUwpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25BcnJvd1JpZ2h0KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICB9LCB0aGlzLlRJTUVPVVRfSU5URVJWQUwpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk5hdmlnYXRpb25CdXR0b25BcnJvd0xlZnQoZTogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0QnV0dG9uKGluZGV4KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGxheUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucGF1c2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QcmV2aW91c1NsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZUJyZWFrcG9pbnRDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka0JyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoW1xuICAgICAgICAgICAgICAgICcobWluLXdpZHRoOiA3NjhweCknLFxuICAgICAgICAgICAgICAgICcobWluLXdpZHRoOiAxMTQwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjYwcHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogMTE0MHB4KScsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RhYmxldEJyZWFrcG9pbnQgPSByZXN1bHQuYnJlYWtwb2ludHNbJyhtaW4td2lkdGg6IDc2OHB4KSddO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXNrdG9wQnJlYWtwb2ludCA9IHJlc3VsdC5icmVha3BvaW50c1snKG1pbi13aWR0aDogMTE0MHB4KSBhbmQgKG1heC13aWR0aDogMTI2MHB4KSddO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMYXJnZURlc2t0b3BCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWluLXdpZHRoOiAxMTQwcHgpJ107XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNUYWJsZXRCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmVFbGVtZW50U2l6ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkub2JzZXJ2ZSh0aGlzLmNhcm91c2VsQ29udGFpbmVyRWxlbWVudCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY2Fyb3VzZWxDb250YWluZXIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRhaW5lclwiIFtjbGFzcy5lY2wtY2Fyb3VzZWwtY29udGFpbmVyLS1wYWRkZWRdPVwiaXNQYWRkZWQoKVwiPlxuICAgIDxkaXYgI3NsaWRlc0NvbnRhaW5lclxuICAgICAgICAoa2V5dXApPVwib25GaXJzdENhcm91c2VsRWxlbWVudFByZXNzKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImVjbC1jYXJvdXNlbF9fc2xpZGVzXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldENhcm91c2VsU2xpZGVzV2lkdGgoKVwiXG4gICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIiFpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0TGVmdCgpIDogbnVsbFwiXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKSA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudHJhbnNpdGlvbi1kdXJhdGlvbi5zXT1cInRyYW5zaXRpb25EdXJhdGlvblwiXG4gICAgICAgIChtb3VzZW92ZXIpPVwib25TbGlkZUhvdmVyKClcIlxuICAgICAgICAobW91c2VvdXQpPVwib25TbGlkZUhvdmVyb3V0KClcIj5cbiAgICAgICAgPGVjbC1jYXJvdXNlbC1pdGVtICNmaXJzdEhpZGRlbkl0ZW0gKm5nSWY9XCJoYXNDb250cm9scygpXCIgW3N0eWxlLndpZHRoLiVdPVwic2xpZGVXaWR0aFwiPjwvZWNsLWNhcm91c2VsLWl0ZW0+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGVjbC1jYXJvdXNlbC1pdGVtICNsYXN0SGlkZGVuSXRlbSAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBbc3R5bGUud2lkdGguJV09XCJzbGlkZVdpZHRoXCI+PC9lY2wtY2Fyb3VzZWwtaXRlbT5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJoYXNDb250cm9scygpICYmIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19wcmV2XCIgKGNsaWNrKT1cIm9uUHJldmlvdXNTbGlkZUNsaWNrKClcIj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS0yNzBcIiBpc0ludmVydGVkIGNsYXNzPVwiZWNsLWNhcm91c2VsX19pY29uLWRlZmF1bHRcIj4gPC9lY2wtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5QUkVWLVNMSURFUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQ29udHJvbHMoKSAmJiBpc0xhcmdlRGVza3RvcEJyZWFrcG9pbnRcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmV4dFwiIChjbGljayk9XCJvbk5leHRTbGlkZUNsaWNrKClcIj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWNsLXUtc3Itb25seVwiPnt7ICdlY2wuY2Fyb3VzZWwuTkVYVC1TTElERVMnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fY29udHJvbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZWNsLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWNsLWNhcm91c2VsX19hdXRvcGxheVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNwbGF5QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX3BsYXlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlzUGxheWluZyA/ICdub25lJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBsYXlDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwbGF5XCIgc2l6ZT1cImxcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9faWNvbi1kZWZhdWx0XCIgaXNJbnZlcnRlZD4gPC9lY2wtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZWNsLWljb24gaWNvbj1cInBsYXktZmlsbGVkXCIgc2l6ZT1cImxcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9faWNvbi1hY3RpdmVcIiBpc0ludmVydGVkPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5BVVRPUExBWScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNwYXVzZUJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWNsLWNhcm91c2VsX19wYXVzZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiaXNQbGF5aW5nID8gJycgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUGxheUtleWJvYXJkUHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUGF1c2VDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZVwiIHNpemU9XCJsXCIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiIGlzSW52ZXJ0ZWQ+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZS1maWxsZWRcIiBzaXplPVwibFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19pY29uLWFjdGl2ZVwiIGlzSW52ZXJ0ZWQ+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVjbC11LXNyLW9ubHlcIj57eyAnZWNsLmNhcm91c2VsLlBBVVNFJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX25hdmlnYXRpb25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc2xpZGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAjY3VyckJ1dHRvblxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpID09PSBnZXRDdXJyZW50U2xpZGVJbmRleCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmF2aWdhdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TbGlkZUNvbnRyb2xDbGljayhzbGlkZSlcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTmF2QnRuS2V5Ym9hcmRQcmVzcygkZXZlbnQsIGkpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5HTy1UTy1TTElERScgfCB0cmFuc2xhdGUgfX0ge3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xhcmdlRGVza3RvcEJyZWFrcG9pbnRcIiAjcHJldkJ1dHRvbiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fcHJldlwiIChjbGljayk9XCJvblByZXZpb3VzU2xpZGVDbGljaygpXCI+XG4gICAgICAgICAgICA8ZWNsLWljb24gaWNvbj1cImNvcm5lci1hcnJvd1wiIHNpemU9XCJtXCIgdHJhbnNmb3JtPVwicm90YXRlLTI3MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtdS1zci1vbmx5XCI+e3sgJ2VjbC5jYXJvdXNlbC5QUkVWLVNMSURFUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX3BhZ2luYXRpb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWNhcm91c2VsX19jdXJyZW50XCI+e3sgZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICB7eyAnZWNsLmNvbW1vbi5PRicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWNhcm91c2VsX19tYXhcIj57eyBzbGlkZXMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludFwiIGNsYXNzPVwiZWNsLWNhcm91c2VsX19uZXh0XCIgKGNsaWNrKT1cIm9uTmV4dFNsaWRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGlzSW52ZXJ0ZWQgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2ljb24tZGVmYXVsdFwiPiA8L2VjbC1pY29uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVjbC11LXNyLW9ubHlcIj57eyAnZWNsLmNhcm91c2VsLk5FWFQtU0xJREVTJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
555
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFJSCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBc0JyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBc0N0RCxZQUNZLHFCQUF5QyxFQUN6QyxFQUFxQixFQUNyQixTQUFvQixFQUNwQixhQUE0QjtRQUVwQyxLQUFLLEVBQUUsQ0FBQztRQUxBLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBb0I7UUFDekMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXhDYSxjQUFTLEdBQWtCLDJCQUEyQixDQUFDO1FBQ3pELHdCQUFtQixHQUFrQixVQUFVLENBQUM7UUFFM0QsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNuQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNqRCxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFhN0MsdUJBQWtCLEdBQUUsS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVyQix1QkFBa0IsR0FBRyxHQUFHLENBQUM7UUFFakIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qiw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbEMsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNDLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQVN4QyxDQUFDO0lBRUQsSUFDSSxVQUFVO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3JDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRTtZQUNELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvRTtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxDQUFnQixFQUFFLEtBQWE7UUFDakQsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4QzthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPO0lBQ1gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFrQjtRQUM5QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFrQjtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCO1FBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUErQjtRQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRU0sUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFTSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsSUFBSSxZQUFvQixDQUFDO1FBRXpCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN4QixZQUFZLEdBQUcsR0FBRyxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxDQUFDLENBQUM7U0FDWjthQUFNLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLHNCQUFzQjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9GLENBQUM7SUFFTSwyQkFBMkI7UUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0RyxDQUFDO0lBRU0sNEJBQTRCO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdEcsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEYsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFOUMsTUFBTTthQUNELElBQUksQ0FDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDbkUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDbEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRDtZQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN2QjtTQUNKO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbEgsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUE4QixFQUFFLEdBQVc7UUFDekQsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFlO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBZTtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQStCLEVBQUUsY0FBdUI7UUFDMUUsSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztTQUNqQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRjtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBSztRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFlO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxJQUFJLFlBQVksSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksTUFBTSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEU7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzthQUMzQjtTQUNKO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBZTtRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVqRCxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDbkIsSUFBRyxNQUFNLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVCO1NBQ0o7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO1NBQzVCO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsQ0FBZ0IsRUFBRSxLQUFhO1FBQ2pFLE1BQU0sTUFBTSxHQUFlLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNuRixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDeEM7U0FDSjthQUFNO1lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUFlLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDN0I7UUFDRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLENBQUMsRUFBRSxLQUFLO1FBQ2xDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7YUFBTTtZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsQ0FBZ0I7UUFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sMkJBQTJCLENBQUMsQ0FBZ0IsRUFBRSxLQUFhO1FBQy9ELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4QztTQUNKO2FBQU07WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUI7YUFDckIsT0FBTyxDQUFDO1lBQ0wsb0JBQW9CO1lBQ3BCLG9CQUFvQjtZQUNwQixvQkFBb0I7WUFDcEIsNkNBQTZDO1lBQzdDLHFCQUFxQjtTQUN4QixDQUFDO2FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMxRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3QztZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7WUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUU7WUFDMUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7WUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDeEMsT0FBTyxDQUFDLENBQUM7YUFDWjtZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFBO1FBQzNFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksTUFBTSxFQUFFO29CQUNSLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixJQUFJLENBQUMsQ0FBQTtvQkFDdkYsSUFBSSxXQUFXLEVBQUU7d0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FCQUNoRjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDOUQsSUFBSSxXQUFXLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUMzRTthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUNoRjtJQUNMLENBQUM7d0lBOWlCUSxvQkFBb0I7NEhBQXBCLG9CQUFvQixtS0FLVCxnQkFBZ0Isa0RBQ2hCLGVBQWUseVBBSUQsd0JBQXdCLG82QkM1RDlELGd5SEFrRkM7O2tHRGhDWSxvQkFBb0I7a0JBcEJoQyxTQUFTOytCQUNJLGNBQWM7MktBcUI2QixTQUFTO3NCQUE3RCxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQUcsS0FBSzt1QkFBQyxZQUFZO2dCQUNBLG1CQUFtQjtzQkFBckUsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUFHLEtBQUs7Z0JBRVIsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDQyxZQUFZO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFDM0IsS0FBSztzQkFBZCxNQUFNO2dCQUV5Qix3QkFBd0I7c0JBQXZELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUMrQixNQUFNO3NCQUFsRSxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDL0IsaUJBQWlCO3NCQUE1QyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0QsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNHLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDQyxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNPLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNDLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNHLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQThCeEIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0BldWkvYmFzZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBpbnRlcnZhbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVjbFJ0bFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lY2wtcnRsLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVDTEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9lY2wtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9lY2wtY2Fyb3VzZWwtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWNsU2xpZGVFdmVudCB9IGZyb20gJy4vZWNsLWNhcm91c2VsLmV2ZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlY2wtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lY2wtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qIFRPRE86IHJlbW92ZSBieSBpbXBsZW1lbnRpbmcgZnVsbCBFQ0wgc3BlY3MgKi9cbiAgICAgICAgICAgIC5lY2wtY2Fyb3VzZWxfX2NvbnRhaW5lciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5lY2wtY2Fyb3VzZWxfX3NsaWRlcyB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFY2xDYXJvdXNlbENvbXBvbmVudCBleHRlbmRzIEVDTEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpIEBJbnB1dCgnYXJpYS1sYWJlbCcpIGFyaWFMYWJlbDogc3RyaW5nIHwgbnVsbCA9ICdDYXJvdXNlbCBkZXNjcmlwdGlvbiBoZXJlJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBASW5wdXQoKSBhcmlhUm9sZURlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsID0gJ2Nhcm91c2VsJztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0F1dG9wbGF5ID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBwbGF5SW50ZXJ2YWwgPSA1MDAwO1xuICAgIEBPdXRwdXQoKSBzbGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWNsU2xpZGVFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY2Fyb3VzZWxDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQpKSBzbGlkZXM6IFF1ZXJ5TGlzdDxFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2N1cnJCdXR0b24nKSBuYXZpZ2F0aW9uQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ3BsYXlCdXR0b24nKSBwbGF5QnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3BhdXNlQnV0dG9uJykgcGF1c2VCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicpIHByZXZCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnbmV4dEJ1dHRvbicpIG5leHRCdXR0b246IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZmlyc3RIaWRkZW5JdGVtJykgZmlyc3RIaWRkZW5JdGVtOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbGFzdEhpZGRlbkl0ZW0nKSBsYXN0SGlkZGVuSXRlbTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlc0NvbnRhaW5lcicpIHNsaWRlc0NvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBpc0J1dHRvbk5hdlZpc2libGU9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1BsYXlpbmcgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNQYXVzZWRGb3JjZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNSdGwgPSBmYWxzZTtcbiAgICBzbGlkZVdpZHRoOiBudW1iZXI7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gMC40O1xuXG4gICAgcHJpdmF0ZSBpc1RhYmxldEJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVza3RvcEJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNNb2JpbGVCcmVha3BvaW50ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwbGF5U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBzdG9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUSU1FT1VUX0lOVEVSVkFMID0gNDAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RrQnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVjbFJ0bFNlcnZpY2U6IEVjbFJ0bFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtY2Fyb3VzZWwnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QXV0b3BsYXkoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSdGxDaGFuZ2VTdGF0ZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTbGlkZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNwbGF5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlRWxlbWVudFNpemVDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub2JzZXJ2ZUJyZWFrcG9pbnRDaGFuZ2VzKCksIDIwMCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy51bnN1YnNjcmliZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICB0aGlzLnNob3dCdXR0b24odGhpcy5wYXVzZUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBhdXNlQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhdXNlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uKHRoaXMucGxheUJ1dHRvbik7XG4gICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLnBsYXlCdXR0b24pO1xuICAgIH1cblxuICAgIG9uRmlyc3RDYXJvdXNlbEVsZW1lbnRQcmVzcyhlKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheUtleWJvYXJkUHJlc3MoZSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5rZXkgPT09IEtleUNvZGUuVEFCICYmIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoW0tleUNvZGUuVEFCXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZSh0aGlzLnNsaWRlcy5nZXQoMCksIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCgwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQbGF5aW5nICYmIFtLZXlDb2RlLkFSUk9XX1JJR0hUXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbih0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTmF2QnRuS2V5Ym9hcmRQcmVzcyhlOiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIgJiYgZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25CdXR0b25UYWJBbmRTaGlmdChlLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IEtleUNvZGUuQVJST1dfUklHSFQpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gS2V5Q29kZS5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkJ1dHRvbkFycm93TGVmdChlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnV0dG9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJyc7XG4gICAgfVxuXG4gICAgc2hvd0J1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUoYnV0dG9uLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJycpXG4gICAgfVxuXG4gICAgZm9jdXNPbkJ1dHRvbihidXR0b246IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFidXR0b24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uU2xpZGVDb250cm9sQ2xpY2soc2xpZGU6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShzbGlkZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25OZXh0U2xpZGVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9wUGxheWluZygpO1xuICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25QcmV2aW91c1NsaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZSh0cnVlKTtcbiAgICB9XG5cbiAgICBvblNsaWRlSG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGF1c2VQbGF5aW5nKCk7XG4gICAgfVxuXG4gICAgb25TbGlkZUhvdmVyb3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wQnV0dG9uUHJlc3NlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VtZVBsYXlpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc1N0b3BCdXR0b25QcmVzc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1BhdXNlZEZvcmNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQYWRkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGVza3RvcEJyZWFrcG9pbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NvbnRyb2xzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTbGlkZXNDb3VudCgpID4gMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFNsaWRlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleDogbnVtYmVyO1xuXG4gICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNDdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gdGhpcy5nZXRBbGxTbGlkZXNDb3VudCgpIC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNsaWRlc0NvdW50KCkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXggLSAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDYXJvdXNlbFNsaWRlc1dpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsQ29udGFpbmVyRWxlbWVudD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAqIHRoaXMuZ2V0QWxsU2xpZGVzQ291bnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2Fyb3VzZWxTbGlkZXNPZmZzZXRMZWZ0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtMSAqIHRoaXMuY2Fyb3VzZWxDb250YWluZXJFbGVtZW50Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy5nZXRDdXJyZW50SXRlbUluZGV4KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIC0xICogdGhpcy5jYXJvdXNlbENvbnRhaW5lckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLmdldEN1cnJlbnRJdGVtSW5kZXgoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJ0bENoYW5nZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVjbFJ0bFNlcnZpY2UuY3VycmVudFJ0bFN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChydGxTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1J0bCA9IHJ0bFN0YXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRBdXRvcGxheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnQkID0gdGhpcy5wbGF5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgY29uc3Qgc3RvcCQgPSB0aGlzLnN0b3BTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgICAgIHN0YXJ0JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKHRoaXMucGxheUludGVydmFsKS5waXBlKHRha2VVbnRpbChzdG9wJCkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9OZXh0U2xpZGUodHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRJdGVtSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5pc0N1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU2xpZGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNsaWRlKGl0ZW0sIGlkeCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEhpZGRlbkl0ZW1zKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vU2xpZGVTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKHRoaXMuc2xpZGVzLmZpcnN0LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXV0b3BsYXkgJiYgdGhpcy5pc1RhYmxldEJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UGxheWluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0SGlkZGVuSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRMYXN0Q29udGVudENoaWxkKCk7XG4gICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRGaXJzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmlzQ3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNsaWRlV2lkdGggPSB0aGlzLnNsaWRlcy5maXJzdC53aWR0aDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlcjIubGlzdGVuKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uZW5kJywgKCkgPT4gdGhpcy5jaGVja0luZGV4KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJbmRleCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0Q3VycmVudEl0ZW1JbmRleCgpID09PSB0aGlzLmdldEFsbFNsaWRlc0NvdW50KCkgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbGlkZXMuZmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUoaXRlbSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0Q3VycmVudEl0ZW1JbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbGlkZXMubGFzdDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTbGlkZShpdGVtLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhc3RDb250ZW50Q2hpbGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVzQ291bnQoKSA+IDAgPyB0aGlzLnNsaWRlcy5nZXQodGhpcy5nZXRTbGlkZXNDb3VudCgpIC0gMSkuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgOiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpcnN0Q29udGVudENoaWxkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNsaWRlc0NvdW50KCkgPiAwID8gdGhpcy5zbGlkZXMuZ2V0KDApLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MIDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2xpZGUoaXRlbTogRWNsQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCBpZHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpdGVtLmluZGV4ID0gaWR4O1xuICAgICAgICBpdGVtLmFyaWFMYWJlbCA9IGBzbGlkZSAke2lkeCArIDF9IG9mICR7dGhpcy5nZXRTbGlkZXNDb3VudCgpfWA7XG4gICAgICAgIGl0ZW0ud2lkdGggPSAxMDAgLyB0aGlzLmdldEFsbFNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvTmV4dFNsaWRlKGlzTG9vcDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2xpZGUodGhpcy5nZXROZXh0U2xpZGUoaXNMb29wKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvUHJldmlvdXNTbGlkZShpc0xvb3A6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVNsaWRlKHRoaXMuZ2V0UHJldmlvdXNTbGlkZShpc0xvb3ApLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlU2xpZGUoc2xpZGU6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCwgd2l0aFRyYW5zaXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHdpdGhUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbiA9IDAuNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2xpZGUuaXNDdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2l0aFRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGUubmV4dChuZXcgRWNsU2xpZGVFdmVudCh0aGlzLnNsaWRlcy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhc3RCdXR0b24oaW5kZXgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYnV0dG9uc0xpc3QgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zO1xuICAgICAgICByZXR1cm4gaW5kZXggKyAxID49IGJ1dHRvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlyc3RCdXR0b24oaW5kZXgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGluZGV4IDw9IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1BhdXNlZEZvcmNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBsYXlTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3BQbGF5aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGF1c2VkRm9yY2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXVzZVBsYXlpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcFN1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdW1lUGxheWluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnBsYXlTdWJqZWN0Lm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRTbGlkZShpc0xvb3A6IGJvb2xlYW4pOiBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQge1xuICAgICAgICBjb25zdCBzbGlkZXNDb3VudCA9IHRoaXMuZ2V0U2xpZGVzQ291bnQoKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gc2xpZGVzQ291bnQgLSAxKSB7XG4gICAgICAgICAgICBpZiAoaXNMb29wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsU2xpZGVzQXJyYXkoKVt0aGlzLmdldEFsbFNsaWRlc0NvdW50KCkgLTFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXMubGFzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5nZXQoY3VycmVudEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbFNsaWRlc0FycmF5KCk6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi5bdGhpcy5maXJzdEhpZGRlbkl0ZW1dLCAuLi50aGlzLnNsaWRlcy50b0FycmF5KCksIC4uLlt0aGlzLmxhc3RIaWRkZW5JdGVtXV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmV2aW91c1NsaWRlKGlzTG9vcDogYm9vbGVhbik6IEVjbENhcm91c2VsSXRlbUNvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKTtcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIGlmKGlzTG9vcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFsbFNsaWRlc0FycmF5KClbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5maXJzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5nZXQoY3VycmVudEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxTbGlkZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5oYXNDb250cm9scygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXMubGVuZ3RoICsgMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGhcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNOb1NsaWRlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zbGlkZXMuc29tZSgoaXRlbSkgPT4gaXRlbS5pc0N1cnJlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uVGFiQW5kU2hpZnQoZTogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BQbGF5aW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wbGF5QnV0dG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucGF1c2VCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgICAgIH0sIHRoaXMuVElNRU9VVF9JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uVGFiKGUsIGluZGV4KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTGFzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQnV0dG9uVmlzaWJsZSh0aGlzLnByZXZCdXR0b24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucHJldkJ1dHRvbik7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b246IEVsZW1lbnRSZWYgPSB0aGlzLm5hdmlnYXRpb25CdXR0b25zLmdldCh0aGlzLmdldEN1cnJlbnRTbGlkZUluZGV4KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPbkJ1dHRvbihidXR0b24pO1xuICAgICAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dSaWdodChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nb1RvTmV4dFNsaWRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbjogRWxlbWVudFJlZiA9IHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMuZ2V0KHRoaXMuZ2V0Q3VycmVudFNsaWRlSW5kZXgoKSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgfSwgdGhpcy5USU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25OYXZpZ2F0aW9uQnV0dG9uQXJyb3dMZWZ0KGU6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdEJ1dHRvbihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXlCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24odGhpcy5wbGF5QnV0dG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uQnV0dG9uKHRoaXMucGF1c2VCdXR0b24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUHJldmlvdXNTbGlkZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uOiBFbGVtZW50UmVmID0gdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucy5nZXQodGhpcy5nZXRDdXJyZW50U2xpZGVJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT25CdXR0b24oYnV0dG9uKTtcbiAgICAgICAgICAgIH0sIHRoaXMuVElNRU9VVF9JTlRFUlZBTCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9ic2VydmVCcmVha3BvaW50Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtCcmVha3BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgIC5vYnNlcnZlKFtcbiAgICAgICAgICAgICAgICAnKG1heC13aWR0aDogNzY4cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1heC13aWR0aDogOTk3cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogOTk4cHgpJyxcbiAgICAgICAgICAgICAgICAnKG1pbi13aWR0aDogMTE0MHB4KSBhbmQgKG1heC13aWR0aDogMTI2MHB4KScsXG4gICAgICAgICAgICAgICAgJyhtaW4td2lkdGg6IDExNDBweCknLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2JpbGVCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWF4LXdpZHRoOiA3NjhweCknXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFibGV0QnJlYWtwb2ludCA9IHJlc3VsdC5icmVha3BvaW50c1snKG1pbi13aWR0aDogOTk4cHgpJ107XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc2t0b3BCcmVha3BvaW50ID0gcmVzdWx0LmJyZWFrcG9pbnRzWycobWluLXdpZHRoOiAxMTQwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjYwcHgpJ107XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xhcmdlRGVza3RvcEJyZWFrcG9pbnQgPSByZXN1bHQuYnJlYWtwb2ludHNbJyhtaW4td2lkdGg6IDExNDBweCknXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmJyZWFrcG9pbnRzWycobWF4LXdpZHRoOiA5OTdweCknXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXRIZWlnaHQoKSwgMjAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcFBsYXlpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RhYmxldEJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrQmFubmVySGVpZ2h0cygpLCAyMDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGFyZ2VEZXNrdG9wQnJlYWtwb2ludCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQnV0dG9uRGlzcGxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZUVsZW1lbnRTaXplQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KS5vYnNlcnZlKHRoaXMuY2Fyb3VzZWxDb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNCdXR0b25EaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQnV0dG9uTmF2VmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmdldFNsaWRlc0NvdW50KCkgPD0gMSkge1xuICAgICAgICAgICAgdGhpcy5pc0J1dHRvbk5hdlZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tCYW5uZXJIZWlnaHRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWlnaHRWYWx1ZXMgPSB0aGlzLnNsaWRlcy5tYXAoKHNsaWRlKT0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHNsaWRlLmJhbm5lcj8uZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgICAgIGlmIChoZWlnaHQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihoZWlnaHQpIHx8IGhlaWdodCA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbGVtZW50SGVpZ2h0cyA9IGhlaWdodFZhbHVlcy5maWx0ZXIoKGhlaWdodCk9PiBoZWlnaHQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgY29uc3QgdGFsbGVzdEVsZW1lbnRIZWlnaHQgPSBNYXRoLm1heCguLi5lbGVtZW50SGVpZ2h0cyk7XG4gICAgICAgIGlmICh0YWxsZXN0RWxlbWVudEhlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKHNsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFubmVyID0gc2xpZGUuYmFubmVyO1xuICAgICAgICAgICAgICAgIGlmIChiYW5uZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFubmVySW1hZ2UgPSBiYW5uZXIuZWNsQmFubmVySW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGJhbm5lci5lbC5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7dGFsbGVzdEVsZW1lbnRIZWlnaHR9cHhgKVxuICAgICAgICAgICAgICAgICAgICBpZiAoYmFubmVySW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGJhbm5lckltYWdlLmVsLm5hdGl2ZUVsZW1lbnQsICdhc3BlY3RSYXRpbycsICdhdXRvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRIaWRkZW5JdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRBbGxTbGlkZXNBcnJheSgpLmZvckVhY2goKHNsaWRlKT0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhbm5lciA9IHNsaWRlLmJhbm5lcjtcbiAgICAgICAgICAgIGlmIChiYW5uZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYW5uZXJJbWFnZSA9IHNsaWRlLmJhbm5lci5lY2xCYW5uZXJJbWFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShiYW5uZXIuZWwubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsICcnKVxuICAgICAgICAgICAgICAgIGlmIChiYW5uZXJJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShiYW5uZXJJbWFnZS5lbC5uYXRpdmVFbGVtZW50LCAnYXNwZWN0UmF0aW8nLCAnJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2V0SGlkZGVuSXRlbXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0SGlkZGVuSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbnRyb2xzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRMYXN0Q29udGVudENoaWxkKCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RIaWRkZW5JdGVtLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5nZXRGaXJzdENvbnRlbnRDaGlsZCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiAjY2Fyb3VzZWxDb250YWluZXIgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRhaW5lclwiIFtjbGFzcy5lY2wtY2Fyb3VzZWwtY29udGFpbmVyLS1wYWRkZWRdPVwiaXNQYWRkZWQoKVwiPlxuICAgIDxkaXYgI3NsaWRlc0NvbnRhaW5lciAoa2V5dXApPVwib25GaXJzdENhcm91c2VsRWxlbWVudFByZXNzKCRldmVudClcIiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fc2xpZGVzXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdldENhcm91c2VsU2xpZGVzV2lkdGgoKVwiIFtzdHlsZS5sZWZ0LnB4XT1cIiFpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0TGVmdCgpIDogbnVsbFwiXG4gICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJpc1J0bCA/IGdldENhcm91c2VsU2xpZGVzT2Zmc2V0UmlnaHQoKSA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudHJhbnNpdGlvbi1kdXJhdGlvbi5zXT1cInRyYW5zaXRpb25EdXJhdGlvblwiIChtb3VzZW92ZXIpPVwib25TbGlkZUhvdmVyKClcIiAobW91c2VvdXQpPVwib25TbGlkZUhvdmVyb3V0KClcIj5cblxuICAgICAgICBAaWYoaGFzQ29udHJvbHMoKSl7XG4gICAgICAgIDxlY2wtY2Fyb3VzZWwtaXRlbSAjZmlyc3RIaWRkZW5JdGVtIFtzdHlsZS53aWR0aC4lXT1cInNsaWRlV2lkdGhcIj48L2VjbC1jYXJvdXNlbC1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgICBAaWYoaGFzQ29udHJvbHMoKSl7XG4gICAgICAgIDxlY2wtY2Fyb3VzZWwtaXRlbSAjbGFzdEhpZGRlbkl0ZW0gW3N0eWxlLndpZHRoLiVdPVwic2xpZGVXaWR0aFwiPjwvZWNsLWNhcm91c2VsLWl0ZW0+XG4gICAgICAgIH1cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5AaWYoaXNCdXR0b25OYXZWaXNpYmxlKSB7XG48YnV0dG9uICNwcmV2QnV0dG9uIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX3ByZXYgZWNsLWJ1dHRvbi0taWNvbi1vbmx5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uUHJldmlvdXNTbGlkZUNsaWNrKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cImVjbC1idXR0b25fX2NvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVjbC1idXR0b25fX2xhYmVsXCI+XG4gICAgICAgICAgICB7eyAnZWNsLmNhcm91c2VsLk5FWFQtU0xJREVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxlY2wtaWNvbiBpY29uPVwiY29ybmVyLWFycm93XCIgc2l6ZT1cIm1cIiB0cmFuc2Zvcm09XCJyb3RhdGUtMjcwXCIgY2xhc3M9XCJlY2wtYnV0dG9uX19pY29uXCI+IDwvZWNsLWljb24+XG4gICAgPC9zcGFuPlxuPC9idXR0b24+XG59XG5cbkBpZihoYXNDb250cm9scygpKXtcbjxkaXYgY2xhc3M9XCJlY2wtY2Fyb3VzZWxfX2NvbnRyb2xzXCI+XG4gICAgPGRpdiBjbGFzcz1cImVjbC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fYXV0b3BsYXlcIj5cbiAgICAgICAgICAgIDxidXR0b24gI3BsYXlCdXR0b24gY2xhc3M9XCJlY2wtYnV0dG9uIGVjbC1idXR0b24tLWdob3N0IGVjbC1jYXJvdXNlbF9fcGxheSBlY2wtYnV0dG9uLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuZGlzcGxheV09XCJpc1BsYXlpbmcgPyAnbm9uZScgOiAnZmxleCdcIiAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBsYXlDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtYnV0dG9uX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlY2wtYnV0dG9uX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2VjbC5jYXJvdXNlbC5QTEFZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxlY2wtaWNvbiBpY29uPVwicGxheS1vdXRsaW5lXCIgc2l6ZT1cIm1cIiBjbGFzcz1cImVjbC1idXR0b25fX2ljb24gZWNsLWNhcm91c2VsX19pY29uLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9lY2wtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uICNwYXVzZUJ1dHRvbiBjbGFzcz1cImVjbC1idXR0b24gZWNsLWJ1dHRvbi0tZ2hvc3QgZWNsLWNhcm91c2VsX19wYXVzZSBlY2wtYnV0dG9uLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuZGlzcGxheV09XCJpc1BsYXlpbmcgPyAnZmxleCcgOiAnbm9uZSdcIiAoa2V5ZG93bik9XCJvblBsYXlLZXlib2FyZFByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblBhdXNlQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdlY2wuY2Fyb3VzZWwuUEFVU0UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGVjbC1pY29uIGljb249XCJwYXVzZVwiIHNpemU9XCJtXCIgY2xhc3M9XCJlY2wtYnV0dG9uX19pY29uIGVjbC1jYXJvdXNlbF9faWNvbi1kZWZhdWx0XCI+IDwvZWNsLWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVjbC1jYXJvdXNlbF9fbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgQGZvciAoc2xpZGUgb2Ygc2xpZGVzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgc2xpZGUpIHtcbiAgICAgICAgICAgIDxidXR0b24gI2N1cnJCdXR0b24gW2F0dHIuYXJpYS1jdXJyZW50XT1cImkgPT09IGdldEN1cnJlbnRTbGlkZUluZGV4KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX25hdmlnYXRpb24taXRlbVwiIChjbGljayk9XCJvblNsaWRlQ29udHJvbENsaWNrKHNsaWRlKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25OYXZCdG5LZXlib2FyZFByZXNzKCRldmVudCwgaSlcIj5cbiAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG59XG5AaWYoaXNCdXR0b25OYXZWaXNpYmxlKSB7XG48YnV0dG9uICNuZXh0QnV0dG9uIGNsYXNzPVwiZWNsLWJ1dHRvbiBlY2wtYnV0dG9uLS1naG9zdCBlY2wtY2Fyb3VzZWxfX25leHQgZWNsLWJ1dHRvbi0taWNvbi1vbmx5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uTmV4dFNsaWRlQ2xpY2soKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZWNsLWJ1dHRvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgIHt7ICdlY2wuY2Fyb3VzZWwuTkVYVC1TTElERVMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGVjbC1pY29uIGljb249XCJjb3JuZXItYXJyb3dcIiBzaXplPVwibVwiIHRyYW5zZm9ybT1cInJvdGF0ZS05MFwiIGNsYXNzPVwiZWNsLWJ1dHRvbl9faWNvblwiPiA8L2VjbC1pY29uPlxuICAgIDwvc3Bhbj5cblxuPC9idXR0b24+XG59Il19
|
|
@@ -7,11 +7,11 @@ import { EclCarouselComponent } from './ecl-carousel.component';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
const COMPONENTS = [EclCarouselComponent, EclCarouselItemComponent];
|
|
9
9
|
export class EclCarouselComponentModule {
|
|
10
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
11
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
12
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
10
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, declarations: [EclCarouselComponent, EclCarouselItemComponent], imports: [CommonModule, EclIconComponentModule, TranslateModule], exports: [EclCarouselComponent, EclCarouselItemComponent] }); }
|
|
12
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, imports: [CommonModule, EclIconComponentModule, TranslateModule] }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.1", ngImport: i0, type: EclCarouselComponentModule, decorators: [{
|
|
15
15
|
type: NgModule,
|
|
16
16
|
args: [{
|
|
17
17
|
imports: [CommonModule, EclIconComponentModule, TranslateModule],
|
|
@@ -19,4 +19,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
19
19
|
declarations: [...COMPONENTS],
|
|
20
20
|
}]
|
|
21
21
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLWNhcm91c2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtY2Fyb3VzZWwvZWNsLWNhcm91c2VsLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWhFLE1BQU0sVUFBVSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQU9wRSxNQUFNLE9BQU8sMEJBQTBCO3dJQUExQiwwQkFBMEI7eUlBQTFCLDBCQUEwQixpQkFQbkIsb0JBQW9CLEVBQUUsd0JBQXdCLGFBR3BELFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLGFBSC9DLG9CQUFvQixFQUFFLHdCQUF3Qjt5SUFPckQsMEJBQTBCLFlBSnpCLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlOztrR0FJdEQsMEJBQTBCO2tCQUx0QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN4QixZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uL2VjbC1pY29uL2VjbC1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2VjbC1jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4vZWNsLWNhcm91c2VsLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVFMgPSBbRWNsQ2Fyb3VzZWxDb21wb25lbnQsIEVjbENhcm91c2VsSXRlbUNvbXBvbmVudF07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRWNsSWNvbkNvbXBvbmVudE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UU10sXG4gICAgZGVjbGFyYXRpb25zOiBbLi4uQ09NUE9ORU5UU10sXG59KVxuZXhwb3J0IGNsYXNzIEVjbENhcm91c2VsQ29tcG9uZW50TW9kdWxlIHt9XG4iXX0=
|