@snabcentr/client-ui 4.4.3 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/snabcentr-client-ui.mjs +3730 -3948
 - package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
 - package/index.d.ts +4466 -3
 - package/package.json +1 -3
 - package/release_notes.tmp +1 -10
 - package/styles/tailwind/tailwind.scss +5 -177
 - package/accordion/index.d.ts +0 -3
 - package/accordion/sc-accordion-content.directive.d.ts +0 -9
 - package/accordion/sc-accordion.component.d.ts +0 -56
 - package/accordion/sc-accordion.module.d.ts +0 -15
 - package/auth/enums/auth-method.d.ts +0 -13
 - package/auth/index.d.ts +0 -8
 - package/auth/interfaces/api-error-response.d.ts +0 -13
 - package/auth/interfaces/index.d.ts +0 -3
 - package/auth/interfaces/sc-bank-account-form-group.d.ts +0 -11
 - package/auth/interfaces/sc-contact-form-group.d.ts +0 -10
 - package/auth/sc-auth.module.d.ts +0 -26
 - package/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.d.ts +0 -39
 - package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +0 -41
 - package/auth/sc-sign-in-form/sc-sign-in-form.component.d.ts +0 -53
 - package/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.d.ts +0 -106
 - package/auth/sign-up-form/sc-sign-up-form.component.d.ts +0 -161
 - package/banner/index.d.ts +0 -2
 - package/banner/sc-banner.component.d.ts +0 -88
 - package/banner/sc-banner.module.d.ts +0 -18
 - package/brands-list/index.d.ts +0 -2
 - package/brands-list/sc-brands-list.component.d.ts +0 -15
 - package/brands-list/sc-brands-list.module.d.ts +0 -12
 - package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +0 -102
 - package/cart/add-or-editing-cart-item-dialog/index.d.ts +0 -2
 - package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +0 -48
 - package/cart/cart-item/sc-cart-item.component.d.ts +0 -25
 - package/cart/index.d.ts +0 -3
 - package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +0 -62
 - package/catalog/category-card/sc-category-card.component.d.ts +0 -76
 - package/catalog/cost-with-discount/cost-with-discount.component.d.ts +0 -23
 - package/catalog/download-price-list/sc-download-price-list.component.d.ts +0 -38
 - package/catalog/hover-image-carousel/sc-hover-image-carousel.component.d.ts +0 -48
 - package/catalog/index.d.ts +0 -12
 - package/catalog/input-quantity/sc-input-quantity.component.d.ts +0 -82
 - package/catalog/notify-when-in-stock-dialog/index.d.ts +0 -2
 - package/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.d.ts +0 -90
 - package/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.d.ts +0 -22
 - package/catalog/price-card/sc-price-card.component.d.ts +0 -18
 - package/catalog/price-card-inline/sc-price-card-inline.component.d.ts +0 -10
 - package/catalog/price-history/sc-price-history.component.d.ts +0 -88
 - package/catalog/price-list-pagination/sc-price-list-pagination.component.d.ts +0 -40
 - package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +0 -47
 - package/catalog/sc-catalog.module.d.ts +0 -29
 - package/catalog/sc-favorite-button/sc-favorite-button.component.d.ts +0 -25
 - package/contacts/add-contact-dialog/sc-add-contact-dialog.component.d.ts +0 -49
 - package/contacts/contacts-accordion/sc-contacts-accordion.component.d.ts +0 -23
 - package/contacts/index.d.ts +0 -7
 - package/contacts/manager-card/sc-manager-card.component.d.ts +0 -22
 - package/contacts/manager-card-push/sc-manager-card-push.component.d.ts +0 -18
 - package/contacts/new-contact-form/sc-new-contact-form.component.d.ts +0 -28
 - package/contacts/sc-contacts.module.d.ts +0 -28
 - package/contacts/tokens/index.d.ts +0 -2
 - package/contacts/tokens/sc-manager-qr-handler.token.d.ts +0 -6
 - package/contacts/tokens/sc-show-help-notification-in-phone-input.token.d.ts +0 -5
 - package/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.d.ts +0 -49
 - package/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.d.ts +0 -161
 - package/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.d.ts +0 -62
 - package/contragents/contragents-accordion/sc-contragents-accordion.component.d.ts +0 -49
 - package/contragents/index.d.ts +0 -7
 - package/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.d.ts +0 -64
 - package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +0 -125
 - package/contragents/sc-contragents.module.d.ts +0 -27
 - package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -141
 - package/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.d.ts +0 -50
 - package/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.d.ts +0 -49
 - package/delivery-address/index.d.ts +0 -4
 - package/delivery-address/sc-delivery-address.module.d.ts +0 -26
 - package/dialogs/index.d.ts +0 -1
 - package/dialogs/sc-resource-preview/sc-resource-preview.component.d.ts +0 -42
 - package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +0 -136
 - package/directives/index.d.ts +0 -7
 - package/directives/links/index.d.ts +0 -4
 - package/directives/links/sc-email-link.directive.d.ts +0 -25
 - package/directives/links/sc-link-location.d.ts +0 -5
 - package/directives/links/sc-links.d.ts +0 -7
 - package/directives/links/sc-tel-link.directive.d.ts +0 -40
 - package/directives/next-input-focus/sc-next-input-focus.directive.d.ts +0 -18
 - package/directives/next-input-focus/sc-next-input-focus.module.d.ts +0 -10
 - package/directives/sc-date-value-transformer.directive.d.ts +0 -8
 - package/directives/select-on-focusin/sc-select-on-focusin.directive.d.ts +0 -14
 - package/directives/terminal-link/sc-terminal-link.directive.d.ts +0 -34
 - package/error-handler/consts/error-change-handler.providers.d.ts +0 -5
 - package/error-handler/error-block-status/error-block-status.component.d.ts +0 -37
 - package/error-handler/index.d.ts +0 -4
 - package/error-handler/interfaces/i-block-error.d.ts +0 -17
 - package/error-handler/sc-error-handler.component.d.ts +0 -40
 - package/esm2022/accordion/index.mjs +0 -4
 - package/esm2022/accordion/sc-accordion-content.directive.mjs +0 -17
 - package/esm2022/accordion/sc-accordion.component.mjs +0 -92
 - package/esm2022/accordion/sc-accordion.module.mjs +0 -26
 - package/esm2022/auth/enums/auth-method.mjs +0 -15
 - package/esm2022/auth/index.mjs +0 -9
 - package/esm2022/auth/interfaces/api-error-response.mjs +0 -2
 - package/esm2022/auth/interfaces/index.mjs +0 -4
 - package/esm2022/auth/interfaces/sc-bank-account-form-group.mjs +0 -2
 - package/esm2022/auth/interfaces/sc-contact-form-group.mjs +0 -2
 - package/esm2022/auth/sc-auth.module.mjs +0 -99
 - package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +0 -87
 - package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +0 -86
 - package/esm2022/auth/sc-sign-in-form/sc-sign-in-form.component.mjs +0 -89
 - package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +0 -187
 - package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +0 -333
 - package/esm2022/banner/index.mjs +0 -3
 - package/esm2022/banner/sc-banner.component.mjs +0 -143
 - package/esm2022/banner/sc-banner.module.mjs +0 -30
 - package/esm2022/brands-list/index.mjs +0 -3
 - package/esm2022/brands-list/sc-brands-list.component.mjs +0 -24
 - package/esm2022/brands-list/sc-brands-list.module.mjs +0 -22
 - package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +0 -233
 - package/esm2022/cart/add-or-editing-cart-item-dialog/index.mjs +0 -3
 - package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +0 -74
 - package/esm2022/cart/cart-item/sc-cart-item.component.mjs +0 -74
 - package/esm2022/cart/index.mjs +0 -4
 - package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +0 -110
 - package/esm2022/catalog/category-card/sc-category-card.component.mjs +0 -102
 - package/esm2022/catalog/cost-with-discount/cost-with-discount.component.mjs +0 -38
 - package/esm2022/catalog/download-price-list/sc-download-price-list.component.mjs +0 -56
 - package/esm2022/catalog/hover-image-carousel/sc-hover-image-carousel.component.mjs +0 -76
 - package/esm2022/catalog/index.mjs +0 -13
 - package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +0 -177
 - package/esm2022/catalog/notify-when-in-stock-dialog/index.mjs +0 -3
 - package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +0 -173
 - package/esm2022/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.mjs +0 -35
 - package/esm2022/catalog/price-card/sc-price-card.component.mjs +0 -52
 - package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +0 -56
 - package/esm2022/catalog/price-history/sc-price-history.component.mjs +0 -140
 - package/esm2022/catalog/price-list-pagination/sc-price-list-pagination.component.mjs +0 -65
 - package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +0 -54
 - package/esm2022/catalog/sc-catalog.module.mjs +0 -125
 - package/esm2022/catalog/sc-favorite-button/sc-favorite-button.component.mjs +0 -42
 - package/esm2022/contacts/add-contact-dialog/sc-add-contact-dialog.component.mjs +0 -91
 - package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +0 -38
 - package/esm2022/contacts/index.mjs +0 -8
 - package/esm2022/contacts/manager-card/sc-manager-card.component.mjs +0 -58
 - package/esm2022/contacts/manager-card-push/sc-manager-card-push.component.mjs +0 -28
 - package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +0 -37
 - package/esm2022/contacts/sc-contacts.module.mjs +0 -92
 - package/esm2022/contacts/tokens/index.mjs +0 -3
 - package/esm2022/contacts/tokens/sc-manager-qr-handler.token.mjs +0 -24
 - package/esm2022/contacts/tokens/sc-show-help-notification-in-phone-input.token.mjs +0 -7
 - package/esm2022/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.mjs +0 -81
 - package/esm2022/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +0 -278
 - package/esm2022/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.mjs +0 -75
 - package/esm2022/contragents/contragents-accordion/sc-contragents-accordion.component.mjs +0 -69
 - package/esm2022/contragents/index.mjs +0 -8
 - package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +0 -72
 - package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +0 -242
 - package/esm2022/contragents/sc-contragents.module.mjs +0 -118
 - package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +0 -250
 - package/esm2022/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.mjs +0 -60
 - package/esm2022/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.mjs +0 -69
 - package/esm2022/delivery-address/index.mjs +0 -5
 - package/esm2022/delivery-address/sc-delivery-address.module.mjs +0 -99
 - package/esm2022/dialogs/index.mjs +0 -2
 - package/esm2022/dialogs/sc-resource-preview/sc-resource-preview.component.mjs +0 -68
 - package/esm2022/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +0 -170
 - package/esm2022/directives/index.mjs +0 -8
 - package/esm2022/directives/links/index.mjs +0 -5
 - package/esm2022/directives/links/sc-email-link.directive.mjs +0 -49
 - package/esm2022/directives/links/sc-link-location.mjs +0 -2
 - package/esm2022/directives/links/sc-links.mjs +0 -8
 - package/esm2022/directives/links/sc-tel-link.directive.mjs +0 -79
 - package/esm2022/directives/next-input-focus/sc-next-input-focus.directive.mjs +0 -43
 - package/esm2022/directives/next-input-focus/sc-next-input-focus.module.mjs +0 -19
 - package/esm2022/directives/sc-date-value-transformer.directive.mjs +0 -30
 - package/esm2022/directives/select-on-focusin/sc-select-on-focusin.directive.mjs +0 -31
 - package/esm2022/directives/terminal-link/sc-terminal-link.directive.mjs +0 -69
 - package/esm2022/error-handler/consts/error-change-handler.providers.mjs +0 -8
 - package/esm2022/error-handler/error-block-status/error-block-status.component.mjs +0 -76
 - package/esm2022/error-handler/index.mjs +0 -5
 - package/esm2022/error-handler/interfaces/i-block-error.mjs +0 -2
 - package/esm2022/error-handler/sc-error-handler.component.mjs +0 -58
 - package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +0 -344
 - package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +0 -32
 - package/esm2022/feedback/index.mjs +0 -4
 - package/esm2022/feedback/interfaces/index.mjs +0 -2
 - package/esm2022/feedback/interfaces/sc-feedback-form-config.mjs +0 -2
 - package/esm2022/files/directives/index.mjs +0 -3
 - package/esm2022/files/directives/tree-top.directive.mjs +0 -63
 - package/esm2022/files/directives/tree.directive.mjs +0 -47
 - package/esm2022/files/file-tree-item/file-tree-item.component.mjs +0 -18
 - package/esm2022/files/files-and-documents/files-and-documents.component.mjs +0 -61
 - package/esm2022/files/files-and-documents.module.mjs +0 -28
 - package/esm2022/files/index.mjs +0 -6
 - package/esm2022/files/interfaces/tree-node.mjs +0 -2
 - package/esm2022/files/services/index.mjs +0 -3
 - package/esm2022/files/services/tree-icon.service.mjs +0 -49
 - package/esm2022/files/services/tree-loader.service.mjs +0 -62
 - package/esm2022/form-fields/addresses-selection-field/sc-addresses-selection-field.component.mjs +0 -155
 - package/esm2022/form-fields/form-fields.module.mjs +0 -69
 - package/esm2022/form-fields/index.mjs +0 -4
 - package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +0 -175
 - package/esm2022/helpers/index.mjs +0 -2
 - package/esm2022/helpers/sc-px-converter.mjs +0 -27
 - package/esm2022/icons/index.mjs +0 -2
 - package/esm2022/icons/sc-client-ui-icons-name.mjs +0 -99
 - package/esm2022/loader/index.mjs +0 -2
 - package/esm2022/loader/sc-i-loader.mjs +0 -2
 - package/esm2022/masks/index.mjs +0 -8
 - package/esm2022/masks/sc-account-number-mask.mjs +0 -7
 - package/esm2022/masks/sc-bic-mask.mjs +0 -7
 - package/esm2022/masks/sc-correspondent-account-mask.mjs +0 -7
 - package/esm2022/masks/sc-inn-mask.mjs +0 -13
 - package/esm2022/masks/sc-kpp-mask.mjs +0 -7
 - package/esm2022/masks/sc-okpo-mask.mjs +0 -13
 - package/esm2022/masks/sc-phone-verification-code-mask.mjs +0 -7
 - package/esm2022/models/i-sc-image.mjs +0 -2
 - package/esm2022/models/index.mjs +0 -2
 - package/esm2022/news/index.mjs +0 -4
 - package/esm2022/news/news-card/sc-news-card.component.mjs +0 -34
 - package/esm2022/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +0 -31
 - package/esm2022/news/sc-news.module.mjs +0 -26
 - package/esm2022/order/index.mjs +0 -4
 - package/esm2022/order/order-item-mobile/sc-order-item-mobile.component.mjs +0 -60
 - package/esm2022/order/sc-order.module.mjs +0 -53
 - package/esm2022/order/sc-payment-status/sc-payment-status.component.mjs +0 -35
 - package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +0 -28
 - package/esm2022/pages/frequently-asked-questions/sc-page-size-options.mjs +0 -6
 - package/esm2022/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.mjs +0 -59
 - package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +0 -106
 - package/esm2022/pages/index.mjs +0 -7
 - package/esm2022/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.mjs +0 -46
 - package/esm2022/pages/privacy-policy/sc-privacy-policy.component.mjs +0 -30
 - package/esm2022/pages/public-offer/sc-public-offer.component.mjs +0 -50
 - package/esm2022/pipes/index.mjs +0 -3
 - package/esm2022/pipes/sc-format-date.mjs +0 -33
 - package/esm2022/pipes/sc-phone-format.mjs +0 -44
 - package/esm2022/profile/index.mjs +0 -3
 - package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +0 -175
 - package/esm2022/profile/sc-profile.module.mjs +0 -76
 - package/esm2022/providers/date-value-transformer/index.mjs +0 -4
 - package/esm2022/providers/date-value-transformer/sc-date-value-transformer-types.mjs +0 -2
 - package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-end-time.mjs +0 -26
 - package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-start-time.mjs +0 -37
 - package/esm2022/providers/index.mjs +0 -12
 - package/esm2022/providers/sc-allow-select-terminated.mjs +0 -6
 - package/esm2022/providers/sc-country-ids.mjs +0 -6
 - package/esm2022/providers/sc-date-formatter.mjs +0 -12
 - package/esm2022/providers/sc-date-value-transformer.mjs +0 -12
 - package/esm2022/providers/sc-help-notification-close.mjs +0 -7
 - package/esm2022/providers/sc-help-notification-limit.mjs +0 -6
 - package/esm2022/providers/sc-max-files-in-form-input.mjs +0 -6
 - package/esm2022/providers/sc-notify-when-in-stock-required-fields.mjs +0 -6
 - package/esm2022/providers/sc-page-size-options.mjs +0 -6
 - package/esm2022/providers/sc-user-providers.mjs +0 -33
 - package/esm2022/providers/sc-verification-code-timeout.mjs +0 -6
 - package/esm2022/public-api.mjs +0 -35
 - package/esm2022/qrcode/index.mjs +0 -3
 - package/esm2022/qrcode/qrcode-dialog/sc-qrcode-dialog.component.mjs +0 -58
 - package/esm2022/qrcode/sc-qrcode.module.mjs +0 -25
 - package/esm2022/samples/index.mjs +0 -5
 - package/esm2022/samples/interfaces/index.mjs +0 -3
 - package/esm2022/samples/interfaces/sc-i-preview-sample.mjs +0 -2
 - package/esm2022/samples/interfaces/sc-preview-mosquito-config.mjs +0 -2
 - package/esm2022/samples/preview-sample/sc-preview-sample.component.mjs +0 -42
 - package/esm2022/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.mjs +0 -63
 - package/esm2022/samples/sc-sample.module.mjs +0 -68
 - package/esm2022/services/index.mjs +0 -2
 - package/esm2022/services/sc-help-notification.service.mjs +0 -90
 - package/esm2022/share-button/index.mjs +0 -3
 - package/esm2022/share-button/sc-share-button.component.mjs +0 -35
 - package/esm2022/share-button/sc-share-button.module.mjs +0 -22
 - package/esm2022/snabcentr-client-ui.mjs +0 -5
 - package/esm2022/user/index.mjs +0 -6
 - package/esm2022/user/reset-user-password/sc-reset-user-password.component.mjs +0 -75
 - package/esm2022/user/sc-user.module.mjs +0 -89
 - package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +0 -122
 - package/esm2022/user/user-managers/sc-user-managers.component.mjs +0 -42
 - package/esm2022/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.mjs +0 -106
 - package/esm2022/validators/index.mjs +0 -7
 - package/esm2022/validators/sc-at-least-one-required-validator.mjs +0 -25
 - package/esm2022/validators/sc-bic-validator.mjs +0 -10
 - package/esm2022/validators/sc-correspondent-account-validator.mjs +0 -10
 - package/esm2022/validators/sc-password-confirm-matching-validator.mjs +0 -17
 - package/esm2022/validators/sc-phone-validator.mjs +0 -14
 - package/esm2022/validators/step-validator.mjs +0 -18
 - package/esm2022/verification/index.mjs +0 -4
 - package/esm2022/verification/providers/index.mjs +0 -3
 - package/esm2022/verification/providers/sc-phone-approve-code-sender.provider.mjs +0 -12
 - package/esm2022/verification/providers/sc-phone-approve-code-sender.token.mjs +0 -7
 - package/esm2022/verification/sc-verification.module.mjs +0 -88
 - package/esm2022/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +0 -277
 - package/feedback/feedback-form/sc-feedback-form.component.d.ts +0 -163
 - package/feedback/gratitude/sc-gratitude.component.d.ts +0 -20
 - package/feedback/index.d.ts +0 -3
 - package/feedback/interfaces/index.d.ts +0 -1
 - package/feedback/interfaces/sc-feedback-form-config.d.ts +0 -23
 - package/files/directives/index.d.ts +0 -2
 - package/files/directives/tree-top.directive.d.ts +0 -33
 - package/files/directives/tree.directive.d.ts +0 -35
 - package/files/file-tree-item/file-tree-item.component.d.ts +0 -9
 - package/files/files-and-documents/files-and-documents.component.d.ts +0 -27
 - package/files/files-and-documents.module.d.ts +0 -17
 - package/files/index.d.ts +0 -5
 - package/files/interfaces/tree-node.d.ts +0 -29
 - package/files/services/index.d.ts +0 -2
 - package/files/services/tree-icon.service.d.ts +0 -23
 - package/files/services/tree-loader.service.d.ts +0 -43
 - package/form-fields/addresses-selection-field/sc-addresses-selection-field.component.d.ts +0 -78
 - package/form-fields/form-fields.module.d.ts +0 -19
 - package/form-fields/index.d.ts +0 -3
 - package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +0 -73
 - package/helpers/index.d.ts +0 -1
 - package/helpers/sc-px-converter.d.ts +0 -15
 - package/icons/index.d.ts +0 -1
 - package/icons/sc-client-ui-icons-name.d.ts +0 -4
 - package/loader/index.d.ts +0 -1
 - package/loader/sc-i-loader.d.ts +0 -9
 - package/masks/index.d.ts +0 -7
 - package/masks/sc-account-number-mask.d.ts +0 -5
 - package/masks/sc-bic-mask.d.ts +0 -5
 - package/masks/sc-correspondent-account-mask.d.ts +0 -5
 - package/masks/sc-inn-mask.d.ts +0 -9
 - package/masks/sc-kpp-mask.d.ts +0 -5
 - package/masks/sc-okpo-mask.d.ts +0 -9
 - package/masks/sc-phone-verification-code-mask.d.ts +0 -5
 - package/models/i-sc-image.d.ts +0 -17
 - package/models/index.d.ts +0 -1
 - package/news/index.d.ts +0 -3
 - package/news/news-card/sc-news-card.component.d.ts +0 -22
 - package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +0 -16
 - package/news/sc-news.module.d.ts +0 -16
 - package/order/index.d.ts +0 -3
 - package/order/order-item-mobile/sc-order-item-mobile.component.d.ts +0 -39
 - package/order/sc-order.module.d.ts +0 -19
 - package/order/sc-payment-status/sc-payment-status.component.d.ts +0 -25
 - package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +0 -18
 - package/pages/frequently-asked-questions/sc-page-size-options.d.ts +0 -5
 - package/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.d.ts +0 -28
 - package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +0 -79
 - package/pages/index.d.ts +0 -6
 - package/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.d.ts +0 -17
 - package/pages/privacy-policy/sc-privacy-policy.component.d.ts +0 -17
 - package/pages/public-offer/sc-public-offer.component.d.ts +0 -22
 - package/pipes/index.d.ts +0 -2
 - package/pipes/sc-format-date.d.ts +0 -20
 - package/pipes/sc-phone-format.d.ts +0 -21
 - package/profile/index.d.ts +0 -2
 - package/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.d.ts +0 -126
 - package/profile/sc-profile.module.d.ts +0 -24
 - package/providers/date-value-transformer/index.d.ts +0 -3
 - package/providers/date-value-transformer/sc-date-value-transformer-types.d.ts +0 -9
 - package/providers/date-value-transformer/sc-date-value-transformer-with-end-time.d.ts +0 -16
 - package/providers/date-value-transformer/sc-date-value-transformer-with-start-time.d.ts +0 -22
 - package/providers/index.d.ts +0 -11
 - package/providers/sc-allow-select-terminated.d.ts +0 -5
 - package/providers/sc-country-ids.d.ts +0 -5
 - package/providers/sc-date-formatter.d.ts +0 -6
 - package/providers/sc-date-value-transformer.d.ts +0 -5
 - package/providers/sc-help-notification-close.d.ts +0 -6
 - package/providers/sc-help-notification-limit.d.ts +0 -5
 - package/providers/sc-max-files-in-form-input.d.ts +0 -5
 - package/providers/sc-notify-when-in-stock-required-fields.d.ts +0 -5
 - package/providers/sc-page-size-options.d.ts +0 -5
 - package/providers/sc-user-providers.d.ts +0 -21
 - package/providers/sc-verification-code-timeout.d.ts +0 -5
 - package/public-api.d.ts +0 -31
 - package/qrcode/index.d.ts +0 -2
 - package/qrcode/qrcode-dialog/sc-qrcode-dialog.component.d.ts +0 -37
 - package/qrcode/sc-qrcode.module.d.ts +0 -14
 - package/samples/index.d.ts +0 -4
 - package/samples/interfaces/index.d.ts +0 -2
 - package/samples/interfaces/sc-i-preview-sample.d.ts +0 -56
 - package/samples/interfaces/sc-preview-mosquito-config.d.ts +0 -62
 - package/samples/preview-sample/sc-preview-sample.component.d.ts +0 -30
 - package/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.d.ts +0 -50
 - package/samples/sc-sample.module.d.ts +0 -19
 - package/services/index.d.ts +0 -1
 - package/services/sc-help-notification.service.d.ts +0 -64
 - package/share-button/index.d.ts +0 -2
 - package/share-button/sc-share-button.component.d.ts +0 -22
 - package/share-button/sc-share-button.module.d.ts +0 -12
 - package/user/index.d.ts +0 -5
 - package/user/reset-user-password/sc-reset-user-password.component.d.ts +0 -46
 - package/user/sc-user.module.d.ts +0 -25
 - package/user/update-user-info-dialog/sc-update-user-info-dialog.component.d.ts +0 -63
 - package/user/user-managers/sc-user-managers.component.d.ts +0 -26
 - package/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.d.ts +0 -53
 - package/validators/index.d.ts +0 -6
 - package/validators/sc-at-least-one-required-validator.d.ts +0 -10
 - package/validators/sc-bic-validator.d.ts +0 -8
 - package/validators/sc-correspondent-account-validator.d.ts +0 -8
 - package/validators/sc-password-confirm-matching-validator.d.ts +0 -8
 - package/validators/sc-phone-validator.d.ts +0 -5
 - package/validators/step-validator.d.ts +0 -8
 - package/verification/index.d.ts +0 -3
 - package/verification/providers/index.d.ts +0 -2
 - package/verification/providers/sc-phone-approve-code-sender.provider.d.ts +0 -6
 - package/verification/providers/sc-phone-approve-code-sender.token.d.ts +0 -7
 - package/verification/sc-verification.module.d.ts +0 -21
 - package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +0 -149
 
| 
         @@ -1,333 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /* eslint-disable lodash/prefer-lodash-method,@typescript-eslint/no-unnecessary-condition,class-methods-use-this,@typescript-eslint/no-explicit-any,@typescript-eslint/unbound-method,no-restricted-syntax */
         
     | 
| 
       2 
     | 
    
         
            -
            import { HttpErrorResponse } from '@angular/common/http';
         
     | 
| 
       3 
     | 
    
         
            -
            import { ChangeDetectionStrategy, Component, output } from '@angular/core';
         
     | 
| 
       4 
     | 
    
         
            -
            import { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
         
     | 
| 
       5 
     | 
    
         
            -
            import { FormControl, FormGroup, Validators } from '@angular/forms';
         
     | 
| 
       6 
     | 
    
         
            -
            import { ScISuggestionType, ScOpfList, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
         
     | 
| 
       7 
     | 
    
         
            -
            import { tuiIsFalsy } from '@taiga-ui/cdk';
         
     | 
| 
       8 
     | 
    
         
            -
            import { tuiDropdownOptionsProvider } from '@taiga-ui/core';
         
     | 
| 
       9 
     | 
    
         
            -
            import { catchError, distinctUntilChanged, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
         
     | 
| 
       10 
     | 
    
         
            -
            import { scBicValidator, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator } from '../../validators';
         
     | 
| 
       11 
     | 
    
         
            -
            import { phoneValidator } from '../../validators/sc-phone-validator';
         
     | 
| 
       12 
     | 
    
         
            -
            import * as i0 from "@angular/core";
         
     | 
| 
       13 
     | 
    
         
            -
            import * as i1 from "@snabcentr/client-core";
         
     | 
| 
       14 
     | 
    
         
            -
            import * as i2 from "@angular/common";
         
     | 
| 
       15 
     | 
    
         
            -
            import * as i3 from "@angular/forms";
         
     | 
| 
       16 
     | 
    
         
            -
            import * as i4 from "@taiga-ui/legacy";
         
     | 
| 
       17 
     | 
    
         
            -
            import * as i5 from "@taiga-ui/legacy/components/primitive-textfield";
         
     | 
| 
       18 
     | 
    
         
            -
            import * as i6 from "@taiga-ui/core";
         
     | 
| 
       19 
     | 
    
         
            -
            import * as i7 from "@taiga-ui/cdk";
         
     | 
| 
       20 
     | 
    
         
            -
            import * as i8 from "../../verification/verification-phone-check-form/sc-verification-phone-check-form.component";
         
     | 
| 
       21 
     | 
    
         
            -
            import * as i9 from "../../form-fields/addresses-selection-field/sc-addresses-selection-field.component";
         
     | 
| 
       22 
     | 
    
         
            -
            import * as i10 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
         
     | 
| 
       23 
     | 
    
         
            -
            import * as i11 from "@taiga-ui/core/components/data-list";
         
     | 
| 
       24 
     | 
    
         
            -
            import * as i12 from "@taiga-ui/kit";
         
     | 
| 
       25 
     | 
    
         
            -
            import * as i13 from "../../contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component";
         
     | 
| 
       26 
     | 
    
         
            -
            import * as i14 from "../../contragents/new-contragent-form/sc-new-contragent-form.component";
         
     | 
| 
       27 
     | 
    
         
            -
            import * as i15 from "../../contacts/new-contact-form/sc-new-contact-form.component";
         
     | 
| 
       28 
     | 
    
         
            -
            /**
         
     | 
| 
       29 
     | 
    
         
            -
             * Компонент формы регистрация пользователя.
         
     | 
| 
       30 
     | 
    
         
            -
             */
         
     | 
| 
       31 
     | 
    
         
            -
            export class ScSignUpFormComponent {
         
     | 
| 
       32 
     | 
    
         
            -
                /**
         
     | 
| 
       33 
     | 
    
         
            -
                 * Инициализирует экземпляр класса {@link ScSignUpFormComponent}.
         
     | 
| 
       34 
     | 
    
         
            -
                 *
         
     | 
| 
       35 
     | 
    
         
            -
                 * @param userService Сервис данных о пользователе.
         
     | 
| 
       36 
     | 
    
         
            -
                 * @param authService Сервис аутентификации.
         
     | 
| 
       37 
     | 
    
         
            -
                 * @param referencesService Сервис справочников.
         
     | 
| 
       38 
     | 
    
         
            -
                 * @param convertersService Сервис конвертации данных.
         
     | 
| 
       39 
     | 
    
         
            -
                 * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
         
     | 
| 
       40 
     | 
    
         
            -
                 */
         
     | 
| 
       41 
     | 
    
         
            -
                constructor(userService, authService, referencesService, convertersService, userMetrikaService) {
         
     | 
| 
       42 
     | 
    
         
            -
                    this.userService = userService;
         
     | 
| 
       43 
     | 
    
         
            -
                    this.authService = authService;
         
     | 
| 
       44 
     | 
    
         
            -
                    this.referencesService = referencesService;
         
     | 
| 
       45 
     | 
    
         
            -
                    this.convertersService = convertersService;
         
     | 
| 
       46 
     | 
    
         
            -
                    this.userMetrikaService = userMetrikaService;
         
     | 
| 
       47 
     | 
    
         
            -
                    /**
         
     | 
| 
       48 
     | 
    
         
            -
                     * Поле ввода организационно-правовых форм.
         
     | 
| 
       49 
     | 
    
         
            -
                     */
         
     | 
| 
       50 
     | 
    
         
            -
                    this.opfControl = new FormControl('individual', Validators.required);
         
     | 
| 
       51 
     | 
    
         
            -
                    /**
         
     | 
| 
       52 
     | 
    
         
            -
                     * Группа полей ввода для формы регистрации.
         
     | 
| 
       53 
     | 
    
         
            -
                     */
         
     | 
| 
       54 
     | 
    
         
            -
                    this.form = new FormGroup({
         
     | 
| 
       55 
     | 
    
         
            -
                        name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
         
     | 
| 
       56 
     | 
    
         
            -
                        email: new FormControl(null, [Validators.required, Validators.email]),
         
     | 
| 
       57 
     | 
    
         
            -
                        phone: new FormControl(null, [Validators.required, phoneValidator()]),
         
     | 
| 
       58 
     | 
    
         
            -
                        verificationCode: new FormControl(null, [Validators.required, Validators.minLength(6)]),
         
     | 
| 
       59 
     | 
    
         
            -
                        cityId: new FormControl(null, Validators.required),
         
     | 
| 
       60 
     | 
    
         
            -
                        password: new FormControl(null, [Validators.required, Validators.minLength(8)]),
         
     | 
| 
       61 
     | 
    
         
            -
                        passwordConfirm: new FormControl(null, [Validators.required, Validators.minLength(8)]),
         
     | 
| 
       62 
     | 
    
         
            -
                        getNews: new FormControl(false),
         
     | 
| 
       63 
     | 
    
         
            -
                        acceptRules: new FormControl(false, Validators.requiredTrue),
         
     | 
| 
       64 
     | 
    
         
            -
                        contragent: new FormGroup({}),
         
     | 
| 
       65 
     | 
    
         
            -
                    }, {
         
     | 
| 
       66 
     | 
    
         
            -
                        validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm'),
         
     | 
| 
       67 
     | 
    
         
            -
                    });
         
     | 
| 
       68 
     | 
    
         
            -
                    /**
         
     | 
| 
       69 
     | 
    
         
            -
                     * Перечисление типов подсказок.
         
     | 
| 
       70 
     | 
    
         
            -
                     */
         
     | 
| 
       71 
     | 
    
         
            -
                    this.suggestionType = ScISuggestionType;
         
     | 
| 
       72 
     | 
    
         
            -
                    /**
         
     | 
| 
       73 
     | 
    
         
            -
                     * Перечисление организационно-правовых форм.
         
     | 
| 
       74 
     | 
    
         
            -
                     */
         
     | 
| 
       75 
     | 
    
         
            -
                    this.opfListEnum = ScOpfList;
         
     | 
| 
       76 
     | 
    
         
            -
                    /**
         
     | 
| 
       77 
     | 
    
         
            -
                     * {@link Subject} события отправки формы.
         
     | 
| 
       78 
     | 
    
         
            -
                     */
         
     | 
| 
       79 
     | 
    
         
            -
                    this.onSubmit = new Subject();
         
     | 
| 
       80 
     | 
    
         
            -
                    /**
         
     | 
| 
       81 
     | 
    
         
            -
                     * {@link Observable} запроса данных регистрации.
         
     | 
| 
       82 
     | 
    
         
            -
                     */
         
     | 
| 
       83 
     | 
    
         
            -
                    this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), tap((value) => {
         
     | 
| 
       84 
     | 
    
         
            -
                        this.createBaseContragent(value);
         
     | 
| 
       85 
     | 
    
         
            -
                    }), switchMap((value) => this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
         
     | 
| 
       86 
     | 
    
         
            -
                        if (error instanceof HttpErrorResponse) {
         
     | 
| 
       87 
     | 
    
         
            -
                            const { errors, message } = error.error;
         
     | 
| 
       88 
     | 
    
         
            -
                            for (const key in errors) {
         
     | 
| 
       89 
     | 
    
         
            -
                                if (Object.hasOwn(errors, key)) {
         
     | 
| 
       90 
     | 
    
         
            -
                                    // eslint-disable-next-line security/detect-object-injection
         
     | 
| 
       91 
     | 
    
         
            -
                                    this.form.get(key)?.setErrors({ serverResponse: errors[key] });
         
     | 
| 
       92 
     | 
    
         
            -
                                }
         
     | 
| 
       93 
     | 
    
         
            -
                            }
         
     | 
| 
       94 
     | 
    
         
            -
                            if (!errors && message) {
         
     | 
| 
       95 
     | 
    
         
            -
                                this.form.setErrors({ serverResponse: [message] });
         
     | 
| 
       96 
     | 
    
         
            -
                            }
         
     | 
| 
       97 
     | 
    
         
            -
                            this.stepIndex = this.steps.findIndex((_, index) => !this.canNextStep(index));
         
     | 
| 
       98 
     | 
    
         
            -
                        }
         
     | 
| 
       99 
     | 
    
         
            -
                        return of({});
         
     | 
| 
       100 
     | 
    
         
            -
                    }), startWith(null))), share());
         
     | 
| 
       101 
     | 
    
         
            -
                    /**
         
     | 
| 
       102 
     | 
    
         
            -
                     * Индекс этапа.
         
     | 
| 
       103 
     | 
    
         
            -
                     */
         
     | 
| 
       104 
     | 
    
         
            -
                    this.stepIndex = 0;
         
     | 
| 
       105 
     | 
    
         
            -
                    /**
         
     | 
| 
       106 
     | 
    
         
            -
                     * {@link Observable} изменения состояния загрузки данных.
         
     | 
| 
       107 
     | 
    
         
            -
                     */
         
     | 
| 
       108 
     | 
    
         
            -
                    this.loading$ = this.request$.pipe(map(tuiIsFalsy));
         
     | 
| 
       109 
     | 
    
         
            -
                    /**
         
     | 
| 
       110 
     | 
    
         
            -
                     * Сигнал события аутентификации после успешной регистрации.
         
     | 
| 
       111 
     | 
    
         
            -
                     */
         
     | 
| 
       112 
     | 
    
         
            -
                    this.successAuth = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));
         
     | 
| 
       113 
     | 
    
         
            -
                    /**
         
     | 
| 
       114 
     | 
    
         
            -
                     * Сигнал нажатия на "Договор оферты".
         
     | 
| 
       115 
     | 
    
         
            -
                     */
         
     | 
| 
       116 
     | 
    
         
            -
                    this.clickOfferEvent = output();
         
     | 
| 
       117 
     | 
    
         
            -
                    /**
         
     | 
| 
       118 
     | 
    
         
            -
                     * Список этапов регистрации.
         
     | 
| 
       119 
     | 
    
         
            -
                     */
         
     | 
| 
       120 
     | 
    
         
            -
                    this.steps = ['Данные о клиенте', 'Общие данные контрагента', 'Контакты пользователя', 'Банковские реквизиты пользователя'];
         
     | 
| 
       121 
     | 
    
         
            -
                    this.opfControl.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed()).subscribe(() => {
         
     | 
| 
       122 
     | 
    
         
            -
                        this.form.patchValue({ name: null });
         
     | 
| 
       123 
     | 
    
         
            -
                        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
         
     | 
| 
       124 
     | 
    
         
            -
                        this.form.get('contragent')?.reset({ salesDirectionId: this.form.get('contragent')?.get('salesDirectionId')?.value ?? null });
         
     | 
| 
       125 
     | 
    
         
            -
                    });
         
     | 
| 
       126 
     | 
    
         
            -
                }
         
     | 
| 
       127 
     | 
    
         
            -
                /**
         
     | 
| 
       128 
     | 
    
         
            -
                 * Список групп полей банковских реквизитов.
         
     | 
| 
       129 
     | 
    
         
            -
                 */
         
     | 
| 
       130 
     | 
    
         
            -
                get bankAccounts() {
         
     | 
| 
       131 
     | 
    
         
            -
                    return this.form.controls.contragent.get('bankAccounts');
         
     | 
| 
       132 
     | 
    
         
            -
                }
         
     | 
| 
       133 
     | 
    
         
            -
                /**
         
     | 
| 
       134 
     | 
    
         
            -
                 * Список групп полей контактных лиц.
         
     | 
| 
       135 
     | 
    
         
            -
                 */
         
     | 
| 
       136 
     | 
    
         
            -
                get contacts() {
         
     | 
| 
       137 
     | 
    
         
            -
                    return this.form.controls.contragent.get('contacts');
         
     | 
| 
       138 
     | 
    
         
            -
                }
         
     | 
| 
       139 
     | 
    
         
            -
                /** @inheritDoc */
         
     | 
| 
       140 
     | 
    
         
            -
                ngOnInit() {
         
     | 
| 
       141 
     | 
    
         
            -
                    this.form.removeControl('contragent');
         
     | 
| 
       142 
     | 
    
         
            -
                    this.userMetrikaService.emitUserMetrikaEvent({
         
     | 
| 
       143 
     | 
    
         
            -
                        target: ScUserMetrikaGoalsEnum.signUpShow,
         
     | 
| 
       144 
     | 
    
         
            -
                    });
         
     | 
| 
       145 
     | 
    
         
            -
                }
         
     | 
| 
       146 
     | 
    
         
            -
                /**
         
     | 
| 
       147 
     | 
    
         
            -
                 * Проверяет, может ли пользователь перейти к следующему шагу регистрации.
         
     | 
| 
       148 
     | 
    
         
            -
                 * При проверке каждого этапа регистрации последовательно проверяется корректность заполнения данных на предыдущих этапах.
         
     | 
| 
       149 
     | 
    
         
            -
                 *
         
     | 
| 
       150 
     | 
    
         
            -
                 * @param index Индекс этапа для которого нужно проверить валидность.
         
     | 
| 
       151 
     | 
    
         
            -
                 * @returns Выводит значение `boolean` на основании {@link index}.
         
     | 
| 
       152 
     | 
    
         
            -
                 */
         
     | 
| 
       153 
     | 
    
         
            -
                // eslint-disable-next-line sonarjs/cognitive-complexity
         
     | 
| 
       154 
     | 
    
         
            -
                canNextStep(index) {
         
     | 
| 
       155 
     | 
    
         
            -
                    const { controls } = this.form;
         
     | 
| 
       156 
     | 
    
         
            -
                    // Проверяем валидность данных пользователя.
         
     | 
| 
       157 
     | 
    
         
            -
                    for (const key in controls) {
         
     | 
| 
       158 
     | 
    
         
            -
                        if (Object.prototype.hasOwnProperty.call(controls, key) && key !== 'contragent' && controls[key].invalid) {
         
     | 
| 
       159 
     | 
    
         
            -
                            return false;
         
     | 
| 
       160 
     | 
    
         
            -
                        }
         
     | 
| 
       161 
     | 
    
         
            -
                    }
         
     | 
| 
       162 
     | 
    
         
            -
                    // Для этапа 0 просто возвращаем true, так как данные пользователя проверены.
         
     | 
| 
       163 
     | 
    
         
            -
                    if (index === 0) {
         
     | 
| 
       164 
     | 
    
         
            -
                        return true;
         
     | 
| 
       165 
     | 
    
         
            -
                    }
         
     | 
| 
       166 
     | 
    
         
            -
                    // Проверяем валидность полей контрагента.
         
     | 
| 
       167 
     | 
    
         
            -
                    const contragentControls = controls.contragent.controls;
         
     | 
| 
       168 
     | 
    
         
            -
                    if (contragentControls) {
         
     | 
| 
       169 
     | 
    
         
            -
                        for (const key in contragentControls) {
         
     | 
| 
       170 
     | 
    
         
            -
                            if (Object.prototype.hasOwnProperty.call(contragentControls, key) && key !== 'bankAccounts' && key !== 'contacts') {
         
     | 
| 
       171 
     | 
    
         
            -
                                // eslint-disable-next-line security/detect-object-injection
         
     | 
| 
       172 
     | 
    
         
            -
                                const control = contragentControls[key];
         
     | 
| 
       173 
     | 
    
         
            -
                                if (!Array.isArray(control.value) && control.invalid) {
         
     | 
| 
       174 
     | 
    
         
            -
                                    return false;
         
     | 
| 
       175 
     | 
    
         
            -
                                }
         
     | 
| 
       176 
     | 
    
         
            -
                            }
         
     | 
| 
       177 
     | 
    
         
            -
                        }
         
     | 
| 
       178 
     | 
    
         
            -
                    }
         
     | 
| 
       179 
     | 
    
         
            -
                    // Для этапа 1 возвращаем true, если все поля контрагента валидны.
         
     | 
| 
       180 
     | 
    
         
            -
                    if (index === 1) {
         
     | 
| 
       181 
     | 
    
         
            -
                        return true;
         
     | 
| 
       182 
     | 
    
         
            -
                    }
         
     | 
| 
       183 
     | 
    
         
            -
                    // Проверяем список контактов внутри контрагента.
         
     | 
| 
       184 
     | 
    
         
            -
                    if (contragentControls['contacts'].invalid) {
         
     | 
| 
       185 
     | 
    
         
            -
                        return false;
         
     | 
| 
       186 
     | 
    
         
            -
                    }
         
     | 
| 
       187 
     | 
    
         
            -
                    // Для этапа 2 возвращаем true, если список контактов внутри контрагента валидный.
         
     | 
| 
       188 
     | 
    
         
            -
                    if (index === 2) {
         
     | 
| 
       189 
     | 
    
         
            -
                        return true;
         
     | 
| 
       190 
     | 
    
         
            -
                    }
         
     | 
| 
       191 
     | 
    
         
            -
                    // Проверяем список банковских реквизитов внутри контрагента.
         
     | 
| 
       192 
     | 
    
         
            -
                    return contragentControls['bankAccounts'].valid ?? false;
         
     | 
| 
       193 
     | 
    
         
            -
                }
         
     | 
| 
       194 
     | 
    
         
            -
                /**
         
     | 
| 
       195 
     | 
    
         
            -
                 * Выполняет навигацию по форме регистрации.
         
     | 
| 
       196 
     | 
    
         
            -
                 *
         
     | 
| 
       197 
     | 
    
         
            -
                 * @param delta Значение, на которое необходимо выполнить навигацию.
         
     | 
| 
       198 
     | 
    
         
            -
                 */
         
     | 
| 
       199 
     | 
    
         
            -
                navigate(delta) {
         
     | 
| 
       200 
     | 
    
         
            -
                    this.stepIndex = (this.stepIndex + delta) % 4;
         
     | 
| 
       201 
     | 
    
         
            -
                }
         
     | 
| 
       202 
     | 
    
         
            -
                /**
         
     | 
| 
       203 
     | 
    
         
            -
                 * Создаёт базового контрагента для клиента физического лица.
         
     | 
| 
       204 
     | 
    
         
            -
                 *
         
     | 
| 
       205 
     | 
    
         
            -
                 * @param formValue Значение формы при регистрации
         
     | 
| 
       206 
     | 
    
         
            -
                 */
         
     | 
| 
       207 
     | 
    
         
            -
                createBaseContragent(formValue) {
         
     | 
| 
       208 
     | 
    
         
            -
                    if (this.form.invalid || this.opfControl.value !== 'individual') {
         
     | 
| 
       209 
     | 
    
         
            -
                        return;
         
     | 
| 
       210 
     | 
    
         
            -
                    }
         
     | 
| 
       211 
     | 
    
         
            -
                    // eslint-disable-next-line no-param-reassign
         
     | 
| 
       212 
     | 
    
         
            -
                    formValue.contragent = {
         
     | 
| 
       213 
     | 
    
         
            -
                        name: this.form.controls.name.value,
         
     | 
| 
       214 
     | 
    
         
            -
                        opf: 'individual',
         
     | 
| 
       215 
     | 
    
         
            -
                        salesDirectionId: 1,
         
     | 
| 
       216 
     | 
    
         
            -
                        contacts: [
         
     | 
| 
       217 
     | 
    
         
            -
                            {
         
     | 
| 
       218 
     | 
    
         
            -
                                name: this.form.controls.name.value,
         
     | 
| 
       219 
     | 
    
         
            -
                                phone: this.form.controls.phone.value,
         
     | 
| 
       220 
     | 
    
         
            -
                                email: this.form.controls.email.value,
         
     | 
| 
       221 
     | 
    
         
            -
                            },
         
     | 
| 
       222 
     | 
    
         
            -
                        ],
         
     | 
| 
       223 
     | 
    
         
            -
                    };
         
     | 
| 
       224 
     | 
    
         
            -
                }
         
     | 
| 
       225 
     | 
    
         
            -
                /**
         
     | 
| 
       226 
     | 
    
         
            -
                 * Возвращает {@link Observable} список организационно-правовых форм.
         
     | 
| 
       227 
     | 
    
         
            -
                 */
         
     | 
| 
       228 
     | 
    
         
            -
                getOpf$() {
         
     | 
| 
       229 
     | 
    
         
            -
                    return this.referencesService.opf$;
         
     | 
| 
       230 
     | 
    
         
            -
                }
         
     | 
| 
       231 
     | 
    
         
            -
                /**
         
     | 
| 
       232 
     | 
    
         
            -
                 * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.
         
     | 
| 
       233 
     | 
    
         
            -
                 *
         
     | 
| 
       234 
     | 
    
         
            -
                 * @param slug Символьное обозначение (slug).
         
     | 
| 
       235 
     | 
    
         
            -
                 */
         
     | 
| 
       236 
     | 
    
         
            -
                getOpfBySlug$(slug) {
         
     | 
| 
       237 
     | 
    
         
            -
                    return this.referencesService.getOpfBySlug$(slug);
         
     | 
| 
       238 
     | 
    
         
            -
                }
         
     | 
| 
       239 
     | 
    
         
            -
                /**
         
     | 
| 
       240 
     | 
    
         
            -
                 * Создаёт группу полей банковских реквизитов.
         
     | 
| 
       241 
     | 
    
         
            -
                 */
         
     | 
| 
       242 
     | 
    
         
            -
                createBankAccountGroup() {
         
     | 
| 
       243 
     | 
    
         
            -
                    return new FormGroup({
         
     | 
| 
       244 
     | 
    
         
            -
                        bankName: new FormControl(null, Validators.required),
         
     | 
| 
       245 
     | 
    
         
            -
                        bic: new FormControl(null, [Validators.required, Validators.minLength(9), scBicValidator]),
         
     | 
| 
       246 
     | 
    
         
            -
                        accountNumber: new FormControl(null, [Validators.required, Validators.minLength(20)]),
         
     | 
| 
       247 
     | 
    
         
            -
                        correspondentAccount: new FormControl(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),
         
     | 
| 
       248 
     | 
    
         
            -
                        currencyId: new FormControl(null, Validators.required),
         
     | 
| 
       249 
     | 
    
         
            -
                    });
         
     | 
| 
       250 
     | 
    
         
            -
                }
         
     | 
| 
       251 
     | 
    
         
            -
                /**
         
     | 
| 
       252 
     | 
    
         
            -
                 * Добавляет Банковские реквизиты.
         
     | 
| 
       253 
     | 
    
         
            -
                 */
         
     | 
| 
       254 
     | 
    
         
            -
                addBankAccountGroup() {
         
     | 
| 
       255 
     | 
    
         
            -
                    this.bankAccounts.push(this.createBankAccountGroup());
         
     | 
| 
       256 
     | 
    
         
            -
                }
         
     | 
| 
       257 
     | 
    
         
            -
                /**
         
     | 
| 
       258 
     | 
    
         
            -
                 * Удаляет банковские реквизиты.
         
     | 
| 
       259 
     | 
    
         
            -
                 *
         
     | 
| 
       260 
     | 
    
         
            -
                 * @param index Индекс банковских реквизитов.
         
     | 
| 
       261 
     | 
    
         
            -
                 */
         
     | 
| 
       262 
     | 
    
         
            -
                removeBankAccountGroup(index) {
         
     | 
| 
       263 
     | 
    
         
            -
                    this.bankAccounts.removeAt(index);
         
     | 
| 
       264 
     | 
    
         
            -
                }
         
     | 
| 
       265 
     | 
    
         
            -
                /**
         
     | 
| 
       266 
     | 
    
         
            -
                 * Создаёт группу полей контактного лица.
         
     | 
| 
       267 
     | 
    
         
            -
                 */
         
     | 
| 
       268 
     | 
    
         
            -
                createContactGroup() {
         
     | 
| 
       269 
     | 
    
         
            -
                    return new FormGroup({
         
     | 
| 
       270 
     | 
    
         
            -
                        name: new FormControl(null, Validators.required),
         
     | 
| 
       271 
     | 
    
         
            -
                        phone: new FormControl(null, [Validators.required, phoneValidator()]),
         
     | 
| 
       272 
     | 
    
         
            -
                        email: new FormControl(null, Validators.email),
         
     | 
| 
       273 
     | 
    
         
            -
                        position: new FormControl(null, Validators.required),
         
     | 
| 
       274 
     | 
    
         
            -
                    });
         
     | 
| 
       275 
     | 
    
         
            -
                }
         
     | 
| 
       276 
     | 
    
         
            -
                /**
         
     | 
| 
       277 
     | 
    
         
            -
                 * Обработчик выбора адреса доставки.
         
     | 
| 
       278 
     | 
    
         
            -
                 *
         
     | 
| 
       279 
     | 
    
         
            -
                 * @param suggestion Объект подсказки ареса.
         
     | 
| 
       280 
     | 
    
         
            -
                 */
         
     | 
| 
       281 
     | 
    
         
            -
                onSelectedOrganization(suggestion) {
         
     | 
| 
       282 
     | 
    
         
            -
                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
         
     | 
| 
       283 
     | 
    
         
            -
                    if (this.form.controls.contragent && 'inn' in suggestion && !('bic' in suggestion)) {
         
     | 
| 
       284 
     | 
    
         
            -
                        if (suggestion.opf && suggestion.opf.slug !== this.opfControl.value) {
         
     | 
| 
       285 
     | 
    
         
            -
                            this.opfControl.patchValue(suggestion.opf.slug, { emitEvent: false });
         
     | 
| 
       286 
     | 
    
         
            -
                            this.form.controls.contragent.patchValue({
         
     | 
| 
       287 
     | 
    
         
            -
                                opf: suggestion.opf.slug,
         
     | 
| 
       288 
     | 
    
         
            -
                            });
         
     | 
| 
       289 
     | 
    
         
            -
                        }
         
     | 
| 
       290 
     | 
    
         
            -
                        this.form.controls.contragent.patchValue({
         
     | 
| 
       291 
     | 
    
         
            -
                            name: suggestion.name,
         
     | 
| 
       292 
     | 
    
         
            -
                            inn: suggestion.inn,
         
     | 
| 
       293 
     | 
    
         
            -
                            kpp: suggestion.kpp ?? null,
         
     | 
| 
       294 
     | 
    
         
            -
                            okpo: suggestion.okpo ?? null,
         
     | 
| 
       295 
     | 
    
         
            -
                            directorName: suggestion.directorName ?? null,
         
     | 
| 
       296 
     | 
    
         
            -
                            directorPosition: suggestion.directorPosition ?? null,
         
     | 
| 
       297 
     | 
    
         
            -
                            legalAddress: suggestion.legalAddress ?? null,
         
     | 
| 
       298 
     | 
    
         
            -
                            postalAddress: suggestion.postalAddress ?? null,
         
     | 
| 
       299 
     | 
    
         
            -
                            actualAddress: suggestion.actualAddress ?? null,
         
     | 
| 
       300 
     | 
    
         
            -
                        });
         
     | 
| 
       301 
     | 
    
         
            -
                        this.form.controls.contragent.markAllAsTouched();
         
     | 
| 
       302 
     | 
    
         
            -
                        this.form.get(['contragent', 'contacts'])?.markAsUntouched();
         
     | 
| 
       303 
     | 
    
         
            -
                        this.form.get(['contragent', 'bankAccounts'])?.markAsUntouched();
         
     | 
| 
       304 
     | 
    
         
            -
                    }
         
     | 
| 
       305 
     | 
    
         
            -
                }
         
     | 
| 
       306 
     | 
    
         
            -
                /**
         
     | 
| 
       307 
     | 
    
         
            -
                 * Добавляет контактное лицо контрагента.
         
     | 
| 
       308 
     | 
    
         
            -
                 */
         
     | 
| 
       309 
     | 
    
         
            -
                addContactGroup() {
         
     | 
| 
       310 
     | 
    
         
            -
                    this.contacts.push(this.createContactGroup());
         
     | 
| 
       311 
     | 
    
         
            -
                }
         
     | 
| 
       312 
     | 
    
         
            -
                /**
         
     | 
| 
       313 
     | 
    
         
            -
                 * Удаляет контактное лицо контрагента.
         
     | 
| 
       314 
     | 
    
         
            -
                 *
         
     | 
| 
       315 
     | 
    
         
            -
                 * @param index Индекс контактного лица.
         
     | 
| 
       316 
     | 
    
         
            -
                 */
         
     | 
| 
       317 
     | 
    
         
            -
                removeContactGroup(index) {
         
     | 
| 
       318 
     | 
    
         
            -
                    this.contacts.removeAt(index);
         
     | 
| 
       319 
     | 
    
         
            -
                }
         
     | 
| 
       320 
     | 
    
         
            -
                /**
         
     | 
| 
       321 
     | 
    
         
            -
                 * Обрабатывает событие нажатия на "Договор оферты".
         
     | 
| 
       322 
     | 
    
         
            -
                 */
         
     | 
| 
       323 
     | 
    
         
            -
                onClickOffer() {
         
     | 
| 
       324 
     | 
    
         
            -
                    this.clickOfferEvent.emit();
         
     | 
| 
       325 
     | 
    
         
            -
                }
         
     | 
| 
       326 
     | 
    
         
            -
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScSignUpFormComponent, deps: [{ token: i1.ScUserService }, { token: i1.ScAuthService }, { token: i1.ScReferencesService }, { token: i1.ScConvertersService }, { token: i1.ScUserMetrikaService }], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
       327 
     | 
    
         
            -
                static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ScSignUpFormComponent, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth", clickOfferEvent: "clickOfferEvent" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "<form\n    *ngIf=\"opfControl.value as selectOpf\"\n    [formGroup]=\"form\"\n    (ngSubmit)=\"onSubmit.next()\"\n    class=\"flex flex-col gap-5\"\n>\n    <ng-container *tuiLet=\"opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n        <tui-stepper\n            *ngIf=\"!isIndividual && form.controls.contragent\"\n            [(activeItemIndex)]=\"stepIndex\"\n        >\n            <button\n                *tuiRepeatTimes=\"let index of 4\"\n                [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n                [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n                type=\"button\"\n                tuiStep\n            >\n                {{ steps[index] }}\n            </button>\n        </tui-stepper>\n        <div\n            [class.!hidden]=\"stepIndex !== 0\"\n            class=\"flex flex-col gap-3\"\n        >\n            <label tuiLabel>\n                \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n                <tui-select\n                    [formControl]=\"opfControl\"\n                    [valueContent]=\"opfContent\"\n                >\n                    \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n                    <tui-data-list *tuiDataList>\n                        <button\n                            *ngFor=\"let item of getOpf$() | async; let index = index\"\n                            tuiOption\n                            [value]=\"item.slug\"\n                        >\n                            {{ item.name }}\n                        </button>\n                    </tui-data-list>\n                </tui-select>\n                <ng-template\n                    #opfContent\n                    let-data\n                >\n                    <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n                </ng-template>\n            </label>\n\n            @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n            <label tuiLabel>\n                {{ nameLabel }}\n                <tui-input formControlName=\"name\">\n                    @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n                        {{ nameLabel }}\n                        <sc-suggestion-field\n                            *tuiDataList\n                            [type]=\"suggestionType.fio\"\n                        />\n                    } @else {\n                        \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n                        @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n                            <sc-suggestion-field\n                                *tuiDataList\n                                [type]=\"suggestionType.organization\"\n                                (selectedClick)=\"onSelectedOrganization($event)\"\n                            />\n                        }\n                    }\n                </tui-input>\n                <tui-error\n                    formControlName=\"name\"\n                    [error]=\"[] | tuiFieldError | async\"\n                />\n            </label>\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n                <label tuiLabel>\n                    \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n                    <tui-input formControlName=\"email\">\n                        \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n                        <sc-suggestion-field\n                            *tuiDataList\n                            [type]=\"suggestionType.email\"\n                        />\n                    </tui-input>\n                    <tui-error\n                        formControlName=\"email\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n            </div>\n\n            <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <label tuiLabel>\n                    \u041F\u0430\u0440\u043E\u043B\u044C\n                    <tui-input-password formControlName=\"password\">\n                        \u041F\u0430\u0440\u043E\u043B\u044C\n                        <input\n                            tuiTextfieldLegacy\n                            autocomplete=\"new-password\"\n                        />\n                    </tui-input-password>\n                    <tui-error\n                        formControlName=\"password\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n                <label tuiLabel>\n                    \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n                    <tui-input-password formControlName=\"passwordConfirm\">\n                        \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n                        <input\n                            tuiTextfieldLegacy\n                            autocomplete=\"new-password\"\n                        />\n                    </tui-input-password>\n                    <tui-error\n                        formControlName=\"passwordConfirm\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n            </div>\n            <tui-error\n                [error]=\"[] | tuiFieldError | async\"\n                class=\"self-center\"\n            />\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <label tuiLabel>\n                    <input\n                        tuiCheckbox\n                        type=\"checkbox\"\n                        formControlName=\"getNews\"\n                    />\n                    \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n                </label>\n                <label tuiLabel>\n                    <input\n                        tuiCheckbox\n                        type=\"checkbox\"\n                        required=\"true\"\n                        formControlName=\"acceptRules\"\n                    />\n                    <div>\n                        <span>\n                            \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n                            <a\n                                tuiLink\n                                [pseudo]=\"true\"\n                                (click)=\"$event.preventDefault(); onClickOffer()\"\n                            >\n                                \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n                            </a>\n                            .\n                        </span>\n                        <span class=\"text-tui-negative\">*</span>\n                        <tui-error\n                            formControlName=\"acceptRules\"\n                            [error]=\"[] | tuiFieldError | async\"\n                        />\n                    </div>\n                </label>\n            </div>\n        </div>\n        @if (!isIndividual) {\n            <sc-new-contragent-form\n                [opfControl]=\"opfControl\"\n                [class.!hidden]=\"stepIndex !== 1\"\n            />\n\n            <div [class.!hidden]=\"stepIndex !== 2\">\n                <div\n                    *ngIf=\"contacts\"\n                    class=\"flex flex-col gap-5 pb-1\"\n                >\n                    <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n                    <div\n                        *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n                        class=\"flex flex-col gap-3\"\n                    >\n                        <div class=\"flex h-10 items-center justify-between\">\n                            <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n                            <button\n                                *ngIf=\"count - 1\"\n                                tuiIconButton\n                                appearance=\"secondary\"\n                                (click)=\"removeContactGroup(index)\"\n                                iconStart=\"@tui.trash-2\"\n                            ></button>\n                        </div>\n                        <sc-new-contact-form [form]=\"contact\" />\n                        <hr\n                            *ngIf=\"!last\"\n                            class=\"h-px w-full bg-tui-base-04\"\n                        />\n                    </div>\n                    <button\n                        tuiButton\n                        iconStart=\"@tui.plus\"\n                        appearance=\"secondary\"\n                        (click)=\"addContactGroup()\"\n                        type=\"button\"\n                        class=\"self-center\"\n                    >\n                        \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n                    </button>\n                </div>\n            </div>\n\n            <div [class.!hidden]=\"stepIndex !== 3\">\n                <div\n                    *ngIf=\"bankAccounts\"\n                    class=\"flex flex-col gap-5 pb-1\"\n                >\n                    <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n                    <div\n                        *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n                        class=\"flex flex-col gap-3\"\n                    >\n                        <div class=\"flex h-12 items-center justify-between\">\n                            <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n                            <button\n                                *ngIf=\"count - 1\"\n                                tuiIconButton\n                                appearance=\"secondary\"\n                                (click)=\"removeBankAccountGroup(index)\"\n                                iconStart=\"@tui.trash-2\"\n                            ></button>\n                        </div>\n                        <sc-new-contragent-bank-account-form\n                            *ngIf=\"opfControl.value as selectOpf\"\n                            [opf]=\"selectOpf\"\n                            [form]=\"bankAccount\"\n                        />\n                        <hr\n                            *ngIf=\"!last\"\n                            class=\"h-px w-full bg-tui-base-04\"\n                        />\n                    </div>\n                    <button\n                        tuiButton\n                        iconStart=\"@tui.plus\"\n                        appearance=\"secondary\"\n                        (click)=\"addBankAccountGroup()\"\n                        type=\"button\"\n                        class=\"self-center\"\n                    >\n                        \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n                    </button>\n                </div>\n            </div>\n        }\n        <div class=\"flex justify-center gap-2\">\n            <button\n                *ngIf=\"stepIndex > 0\"\n                tuiButton\n                appearance=\"secondary\"\n                type=\"button\"\n                (click)=\"navigate(-1)\"\n            >\n                \u041D\u0430\u0437\u0430\u0434\n            </button>\n            <button\n                *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n                tuiButton\n                [disabled]=\"form.invalid\"\n                [loading]=\"!!(loading$ | async)\"\n                class=\"self-center\"\n            >\n                \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n            </button>\n            <ng-template #nextIndexBtn>\n                <button\n                    tuiButton\n                    type=\"button\"\n                    [disabled]=\"!canNextStep(stepIndex)\"\n                    (click)=\"navigate(1)\"\n                >\n                    \u0414\u0430\u043B\u0435\u0435\n                </button>\n            </ng-template>\n        </div>\n    </ng-container>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TuiInputPasswordComponent, selector: "tui-input-password" }, { kind: "directive", type: i4.TuiInputPasswordDirective, selector: "tui-input-password" }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "input[tuiTextfieldLegacy], textarea[tuiTextfieldLegacy]" }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "directive", type: i6.TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: i6.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i6.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i6.TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i8.ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: i9.ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: i10.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i11.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i11.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i11.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "component", type: i12.TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "component", type: i4.TuiSelectComponent, selector: "tui-select", inputs: ["stringify", "identityMatcher", "valueContent"] }, { kind: "directive", type: i4.TuiSelectDirective, selector: "tui-select" }, { kind: "component", type: i13.ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form", "opf"] }, { kind: "component", type: i14.ScNewContragentFormComponent, selector: "sc-new-contragent-form", inputs: ["opfControl"] }, { kind: "component", type: i15.ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "component", type: i12.TuiStepperComponent, selector: "tui-stepper, nav[tuiStepper]", inputs: ["activeItemIndex", "orientation"], outputs: ["activeItemIndexChange"] }, { kind: "component", type: i12.TuiStep, selector: "button[tuiStep], a[tuiStep]:not([routerLink]), a[tuiStep][routerLink][routerLinkActive]", inputs: ["stepState", "icon"] }, { kind: "directive", type: i7.TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }, { kind: "component", type: i12.TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i12.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
         
     | 
| 
       328 
     | 
    
         
            -
            }
         
     | 
| 
       329 
     | 
    
         
            -
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScSignUpFormComponent, decorators: [{
         
     | 
| 
       330 
     | 
    
         
            -
                        type: Component,
         
     | 
| 
       331 
     | 
    
         
            -
                        args: [{ selector: 'sc-sign-up-form', providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n    *ngIf=\"opfControl.value as selectOpf\"\n    [formGroup]=\"form\"\n    (ngSubmit)=\"onSubmit.next()\"\n    class=\"flex flex-col gap-5\"\n>\n    <ng-container *tuiLet=\"opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n        <tui-stepper\n            *ngIf=\"!isIndividual && form.controls.contragent\"\n            [(activeItemIndex)]=\"stepIndex\"\n        >\n            <button\n                *tuiRepeatTimes=\"let index of 4\"\n                [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n                [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n                type=\"button\"\n                tuiStep\n            >\n                {{ steps[index] }}\n            </button>\n        </tui-stepper>\n        <div\n            [class.!hidden]=\"stepIndex !== 0\"\n            class=\"flex flex-col gap-3\"\n        >\n            <label tuiLabel>\n                \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n                <tui-select\n                    [formControl]=\"opfControl\"\n                    [valueContent]=\"opfContent\"\n                >\n                    \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n                    <tui-data-list *tuiDataList>\n                        <button\n                            *ngFor=\"let item of getOpf$() | async; let index = index\"\n                            tuiOption\n                            [value]=\"item.slug\"\n                        >\n                            {{ item.name }}\n                        </button>\n                    </tui-data-list>\n                </tui-select>\n                <ng-template\n                    #opfContent\n                    let-data\n                >\n                    <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n                </ng-template>\n            </label>\n\n            @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n            <label tuiLabel>\n                {{ nameLabel }}\n                <tui-input formControlName=\"name\">\n                    @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n                        {{ nameLabel }}\n                        <sc-suggestion-field\n                            *tuiDataList\n                            [type]=\"suggestionType.fio\"\n                        />\n                    } @else {\n                        \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n                        @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n                            <sc-suggestion-field\n                                *tuiDataList\n                                [type]=\"suggestionType.organization\"\n                                (selectedClick)=\"onSelectedOrganization($event)\"\n                            />\n                        }\n                    }\n                </tui-input>\n                <tui-error\n                    formControlName=\"name\"\n                    [error]=\"[] | tuiFieldError | async\"\n                />\n            </label>\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n                <label tuiLabel>\n                    \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n                    <tui-input formControlName=\"email\">\n                        \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n                        <sc-suggestion-field\n                            *tuiDataList\n                            [type]=\"suggestionType.email\"\n                        />\n                    </tui-input>\n                    <tui-error\n                        formControlName=\"email\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n            </div>\n\n            <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <label tuiLabel>\n                    \u041F\u0430\u0440\u043E\u043B\u044C\n                    <tui-input-password formControlName=\"password\">\n                        \u041F\u0430\u0440\u043E\u043B\u044C\n                        <input\n                            tuiTextfieldLegacy\n                            autocomplete=\"new-password\"\n                        />\n                    </tui-input-password>\n                    <tui-error\n                        formControlName=\"password\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n                <label tuiLabel>\n                    \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n                    <tui-input-password formControlName=\"passwordConfirm\">\n                        \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n                        <input\n                            tuiTextfieldLegacy\n                            autocomplete=\"new-password\"\n                        />\n                    </tui-input-password>\n                    <tui-error\n                        formControlName=\"passwordConfirm\"\n                        [error]=\"[] | tuiFieldError | async\"\n                    />\n                </label>\n            </div>\n            <tui-error\n                [error]=\"[] | tuiFieldError | async\"\n                class=\"self-center\"\n            />\n\n            <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n                <label tuiLabel>\n                    <input\n                        tuiCheckbox\n                        type=\"checkbox\"\n                        formControlName=\"getNews\"\n                    />\n                    \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n                </label>\n                <label tuiLabel>\n                    <input\n                        tuiCheckbox\n                        type=\"checkbox\"\n                        required=\"true\"\n                        formControlName=\"acceptRules\"\n                    />\n                    <div>\n                        <span>\n                            \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n                            <a\n                                tuiLink\n                                [pseudo]=\"true\"\n                                (click)=\"$event.preventDefault(); onClickOffer()\"\n                            >\n                                \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n                            </a>\n                            .\n                        </span>\n                        <span class=\"text-tui-negative\">*</span>\n                        <tui-error\n                            formControlName=\"acceptRules\"\n                            [error]=\"[] | tuiFieldError | async\"\n                        />\n                    </div>\n                </label>\n            </div>\n        </div>\n        @if (!isIndividual) {\n            <sc-new-contragent-form\n                [opfControl]=\"opfControl\"\n                [class.!hidden]=\"stepIndex !== 1\"\n            />\n\n            <div [class.!hidden]=\"stepIndex !== 2\">\n                <div\n                    *ngIf=\"contacts\"\n                    class=\"flex flex-col gap-5 pb-1\"\n                >\n                    <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n                    <div\n                        *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n                        class=\"flex flex-col gap-3\"\n                    >\n                        <div class=\"flex h-10 items-center justify-between\">\n                            <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n                            <button\n                                *ngIf=\"count - 1\"\n                                tuiIconButton\n                                appearance=\"secondary\"\n                                (click)=\"removeContactGroup(index)\"\n                                iconStart=\"@tui.trash-2\"\n                            ></button>\n                        </div>\n                        <sc-new-contact-form [form]=\"contact\" />\n                        <hr\n                            *ngIf=\"!last\"\n                            class=\"h-px w-full bg-tui-base-04\"\n                        />\n                    </div>\n                    <button\n                        tuiButton\n                        iconStart=\"@tui.plus\"\n                        appearance=\"secondary\"\n                        (click)=\"addContactGroup()\"\n                        type=\"button\"\n                        class=\"self-center\"\n                    >\n                        \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n                    </button>\n                </div>\n            </div>\n\n            <div [class.!hidden]=\"stepIndex !== 3\">\n                <div\n                    *ngIf=\"bankAccounts\"\n                    class=\"flex flex-col gap-5 pb-1\"\n                >\n                    <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n                    <div\n                        *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n                        class=\"flex flex-col gap-3\"\n                    >\n                        <div class=\"flex h-12 items-center justify-between\">\n                            <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n                            <button\n                                *ngIf=\"count - 1\"\n                                tuiIconButton\n                                appearance=\"secondary\"\n                                (click)=\"removeBankAccountGroup(index)\"\n                                iconStart=\"@tui.trash-2\"\n                            ></button>\n                        </div>\n                        <sc-new-contragent-bank-account-form\n                            *ngIf=\"opfControl.value as selectOpf\"\n                            [opf]=\"selectOpf\"\n                            [form]=\"bankAccount\"\n                        />\n                        <hr\n                            *ngIf=\"!last\"\n                            class=\"h-px w-full bg-tui-base-04\"\n                        />\n                    </div>\n                    <button\n                        tuiButton\n                        iconStart=\"@tui.plus\"\n                        appearance=\"secondary\"\n                        (click)=\"addBankAccountGroup()\"\n                        type=\"button\"\n                        class=\"self-center\"\n                    >\n                        \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n                    </button>\n                </div>\n            </div>\n        }\n        <div class=\"flex justify-center gap-2\">\n            <button\n                *ngIf=\"stepIndex > 0\"\n                tuiButton\n                appearance=\"secondary\"\n                type=\"button\"\n                (click)=\"navigate(-1)\"\n            >\n                \u041D\u0430\u0437\u0430\u0434\n            </button>\n            <button\n                *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n                tuiButton\n                [disabled]=\"form.invalid\"\n                [loading]=\"!!(loading$ | async)\"\n                class=\"self-center\"\n            >\n                \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n            </button>\n            <ng-template #nextIndexBtn>\n                <button\n                    tuiButton\n                    type=\"button\"\n                    [disabled]=\"!canNextStep(stepIndex)\"\n                    (click)=\"navigate(1)\"\n                >\n                    \u0414\u0430\u043B\u0435\u0435\n                </button>\n            </ng-template>\n        </div>\n    </ng-container>\n</form>\n" }]
         
     | 
| 
       332 
     | 
    
         
            -
                    }], ctorParameters: () => [{ type: i1.ScUserService }, { type: i1.ScAuthService }, { type: i1.ScReferencesService }, { type: i1.ScConvertersService }, { type: i1.ScUserMetrikaService }] });
         
     | 
| 
       333 
     | 
    
         
            -
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi11cC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NpZ24tdXAtZm9ybS9zYy1zaWduLXVwLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2F1dGgvc2lnbi11cC1mb3JtL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2TUFBNk07QUFFN00sT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RGLE9BQU8sRUFBYSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFLSCxpQkFBaUIsRUFFakIsU0FBUyxFQUlULHNCQUFzQixHQUd6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxjQUFjLEVBQUUsK0JBQStCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNB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RUFBRSxlQUFlLEVBQUUsQ0FBQztRQUNyRSxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQUMsS0FBYTtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOytHQS9WUSxxQkFBcUI7bUdBQXJCLHFCQUFxQiw0S0FKbkIsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLDBCQ25DcEUsMGtiQWlTQTs7NEZEMVBhLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDSSxpQkFBaUIsYUFFaEIsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQzFELEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxtQkFDaEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGxvZGFzaC9wcmVmZXItbG9kYXNoLW1ldGhvZCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uLGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMsQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSxAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2Qsbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgT3V0cHV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBJQXV0aFRva2VuLFxuICAgIFNjQXV0aFNlcnZpY2UsXG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0lSZWZlcmVuY2VzVHlwZXMsXG4gICAgU2NJU3VnZ2VzdGlvblR5cGUsXG4gICAgU2NJVXNlck9uRGF0YUNyZWF0ZSxcbiAgICBTY09wZkxpc3QsXG4gICAgU2NSZWZlcmVuY2VzU2VydmljZSxcbiAgICBTY1N1Z2dlc3Rpb24sXG4gICAgU2NVc2VyLFxuICAgIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sXG4gICAgU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG4gICAgU2NVc2VyU2VydmljZSxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyB0dWlJc0ZhbHN5IH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyB0dWlEcm9wZG93bk9wdGlvbnNQcm92aWRlciB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHNjQmljVmFsaWRhdG9yLCBzY0NvcnJlc3BvbmRlbnRBY2NvdW50VmFsaWRhdG9yLCBzY1Bhc3N3b3JkQ29uZmlybU1hdGNoaW5nVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBwaG9uZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvc2MtcGhvbmUtdmFsaWRhdG9yJztcbmltcG9ydCB7IEFwaUVycm9yUmVzcG9uc2UsIFNjQmFua0FjY291bnRGb3JtR3JvdXAsIFNjQ29udGFjdEZvcm1Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRhNC+0YDQvNGLINGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLXNpZ24tdXAtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbdHVpRHJvcGRvd25PcHRpb25zUHJvdmlkZXIoeyBsaW1pdFdpZHRoOiAnZml4ZWQnIH0pXSxcbiAgICBob3N0OiB7IG5nU2tpcEh5ZHJhdGlvbjogJ3RydWUnIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2lnblVwRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0J/QvtC70LUg0LLQstC+0LTQsCDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstGL0YUg0YTQvtGA0LwuXG4gICAgICovXG4gICAgcHVibGljIG9wZkNvbnRyb2w6IEZvcm1Db250cm9sPGtleW9mIHR5cGVvZiBTY09wZkxpc3QgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxrZXlvZiB0eXBlb2YgU2NPcGZMaXN0PignaW5kaXZpZHVhbCcsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQtNC70Y8g0YTQvtGA0LzRiyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKV0pLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgcGhvbmVWYWxpZGF0b3IoKV0pLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uQ29kZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0pLFxuICAgICAgICAgICAgY2l0eUlkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwYXNzd29yZDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pLFxuICAgICAgICAgICAgcGFzc3dvcmRDb25maXJtOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpXSksXG4gICAgICAgICAgICBnZXROZXdzOiBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UpLFxuICAgICAgICAgICAgYWNjZXB0UnVsZXM6IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPihmYWxzZSwgVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpLFxuICAgICAgICAgICAgY29udHJhZ2VudDogbmV3IEZvcm1Hcm91cDxhbnk+KHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogc2NQYXNzd29yZENvbmZpcm1NYXRjaGluZ1ZhbGlkYXRvcigncGFzc3dvcmQnLCAncGFzc3dvcmRDb25maXJtJyksXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INGC0LjQv9C+0LIg0L/QvtC00YHQutCw0LfQvtC6LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdWdnZXN0aW9uVHlwZTogdHlwZW9mIFNjSVN1Z2dlc3Rpb25UeXBlID0gU2NJU3VnZ2VzdGlvblR5cGU7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0L7RgNCz0LDQvdC40LfQsNGG0LjQvtC90L3Qvi3Qv9GA0LDQstC+0LLRi9GFINGE0L7RgNC8LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvcGZMaXN0RW51bTogdHlwZW9mIFNjT3BmTGlzdCA9IFNjT3BmTGlzdDtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3QkID0gdGhpcy5vblN1Ym1pdC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lVc2VyT25EYXRhQ3JlYXRlKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVCYXNlQ29udHJhZ2VudCh2YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zaWduVXAkKHRoaXMuY29udmVydGVyc1NlcnZpY2UucmVtb3ZlTnVsbFJlY3Vyc2l2ZSh2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzLCBtZXNzYWdlIH0gPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihlcnJvcnMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcnMgJiYgbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KChfLCBpbmRleCkgPT4gIXRoaXMuY2FuTmV4dFN0ZXAoaW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBJQXV0aFRva2VuKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LTQtdC60YEg0Y3RgtCw0L/QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RlcEluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCh0dWlJc0ZhbHN5KSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0YHQvtCx0YvRgtC40Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0YHQu9C1INGD0YHQv9C10YjQvdC+0Lkg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VjY2Vzc0F1dGg6IE91dHB1dFJlZjxTY1VzZXI+ID0gb3V0cHV0RnJvbU9ic2VydmFibGUodGhpcy51c2VyU2VydmljZS5nZXRVc2VyQ2hhbmdlJCgpLnBpcGUoZmlsdGVyKCh1c2VyKSA9PiAhdXNlci5pc0d1ZXN0KSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQuNCz0L3QsNC7INC90LDQttCw0YLQuNGPINC90LAgXCLQlNC+0LPQvtCy0L7RgCDQvtGE0LXRgNGC0YtcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xpY2tPZmZlckV2ZW50OiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0Y3RgtCw0L/QvtCyINGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RlcHM6IHN0cmluZ1tdID0gWyfQlNCw0L3QvdGL0LUg0L4g0LrQu9C40LXQvdGC0LUnLCAn0J7QsdGJ0LjQtSDQtNCw0L3QvdGL0LUg0LrQvtC90YLRgNCw0LPQtdC90YLQsCcsICfQmtC+0L3RgtCw0LrRgtGLINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjycsICfQkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0Ysg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJ107XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjU2lnblVwRm9ybUNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlclNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LDQvdC90YvRhSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICogQHBhcmFtIGF1dGhTZXJ2aWNlINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VzU2VydmljZSDQodC10YDQstC40YEg0YHQv9GA0LDQstC+0YfQvdC40LrQvtCyLlxuICAgICAqIEBwYXJhbSBjb252ZXJ0ZXJzU2VydmljZSDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICogQHBhcmFtIHVzZXJNZXRyaWthU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclNlcnZpY2U6IFNjVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IFNjQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmZXJlbmNlc1NlcnZpY2U6IFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLm9wZkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IG5hbWU6IG51bGwgfSk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjb250cmFnZW50Jyk/LnJlc2V0KHsgc2FsZXNEaXJlY3Rpb25JZDogdGhpcy5mb3JtLmdldCgnY29udHJhZ2VudCcpPy5nZXQoJ3NhbGVzRGlyZWN0aW9uSWQnKT8udmFsdWUgPz8gbnVsbCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INCz0YDRg9C/0L8g0L/QvtC70LXQuSDQsdCw0L3QutC+0LLRgdC60LjRhSDRgNC10LrQstC40LfQuNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGJhbmtBY2NvdW50cygpOiBGb3JtQXJyYXk8UmV0dXJuVHlwZTxTY1NpZ25VcEZvcm1Db21wb25lbnRbJ2NyZWF0ZUJhbmtBY2NvdW50R3JvdXAnXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmdldCgnYmFua0FjY291bnRzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQs9GA0YPQv9C/INC/0L7Qu9C10Lkg0LrQvtC90YLQsNC60YLQvdGL0YUg0LvQuNGGLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGFjdHMoKTogRm9ybUFycmF5PFJldHVyblR5cGU8U2NTaWduVXBGb3JtQ29tcG9uZW50WydjcmVhdGVDb250YWN0R3JvdXAnXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LmdldCgnY29udGFjdHMnKSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkucmVtb3ZlQ29udHJvbCgnY29udHJhZ2VudCcpO1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uc2lnblVwU2hvdyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQtdGA0Y/QtdGCLCDQvNC+0LbQtdGCINC70Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINC/0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINGI0LDQs9GDINGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICog0J/RgNC4INC/0YDQvtCy0LXRgNC60LUg0LrQsNC20LTQvtCz0L4g0Y3RgtCw0L/QsCDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QviDQv9GA0L7QstC10YDRj9C10YLRgdGPINC60L7RgNGA0LXQutGC0L3QvtGB0YLRjCDQt9Cw0L/QvtC70L3QtdC90LjRjyDQtNCw0L3QvdGL0YUg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjRhSDRjdGC0LDQv9Cw0YUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXgg0JjQvdC00LXQutGBINGN0YLQsNC/0LAg0LTQu9GPINC60L7RgtC+0YDQvtCz0L4g0L3Rg9C20L3QviDQv9GA0L7QstC10YDQuNGC0Ywg0LLQsNC70LjQtNC90L7RgdGC0YwuXG4gICAgICogQHJldHVybnMg0JLRi9Cy0L7QtNC40YIg0LfQvdCw0YfQtdC90LjQtSBgYm9vbGVhbmAg0L3QsCDQvtGB0L3QvtCy0LDQvdC40Lgge0BsaW5rIGluZGV4fS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eVxuICAgIHB1YmxpYyBjYW5OZXh0U3RlcChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgY29udHJvbHMgfSA9IHRoaXMuZm9ybTtcblxuICAgICAgICAvLyDQn9GA0L7QstC10YDRj9C10Lwg0LLQsNC70LjQtNC90L7RgdGC0Ywg0LTQsNC90L3Ri9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbHMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udHJvbHMsIGtleSkgJiYga2V5ICE9PSAnY29udHJhZ2VudCcgJiYgY29udHJvbHNba2V5IGFzIGtleW9mIHR5cGVvZiB0aGlzLmZvcm0uY29udHJvbHNdLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQlNC70Y8g0Y3RgtCw0L/QsCAwINC/0YDQvtGB0YLQviDQstC+0LfQstGA0LDRidCw0LXQvCB0cnVlLCDRgtCw0Log0LrQsNC6INC00LDQvdC90YvQtSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0L/RgNC+0LLQtdGA0LXQvdGLLlxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INCy0LDQu9C40LTQvdC+0YHRgtGMINC/0L7Qu9C10Lkg0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgICAgY29uc3QgY29udHJhZ2VudENvbnRyb2xzID0gY29udHJvbHMuY29udHJhZ2VudC5jb250cm9scztcblxuICAgICAgICBpZiAoY29udHJhZ2VudENvbnRyb2xzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cmFnZW50Q29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRyYWdlbnRDb250cm9scywga2V5KSAmJiBrZXkgIT09ICdiYW5rQWNjb3VudHMnICYmIGtleSAhPT0gJ2NvbnRhY3RzJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGNvbnRyYWdlbnRDb250cm9sc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSkgJiYgY29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQlNC70Y8g0Y3RgtCw0L/QsCAxINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8IHRydWUsINC10YHQu9C4INCy0YHQtSDQv9C+0LvRjyDQutC+0L3RgtGA0LDQs9C10L3RgtCwINCy0LDQu9C40LTQvdGLLlxuICAgICAgICBpZiAoaW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INGB0L/QuNGB0L7QuiDQutC+0L3RgtCw0LrRgtC+0LIg0LLQvdGD0YLRgNC4INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICAgIGlmIChjb250cmFnZW50Q29udHJvbHNbJ2NvbnRhY3RzJ10uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0JTQu9GPINGN0YLQsNC/0LAgMiDQstC+0LfQstGA0LDRidCw0LXQvCB0cnVlLCDQtdGB0LvQuCDRgdC/0LjRgdC+0Log0LrQvtC90YLQsNC60YLQvtCyINCy0L3Rg9GC0YDQuCDQutC+0L3RgtGA0LDQs9C10L3RgtCwINCy0LDQu9C40LTQvdGL0LkuXG4gICAgICAgIGlmIChpbmRleCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDRj9C10Lwg0YHQv9C40YHQvtC6INCx0LDQvdC60L7QstGB0LrQuNGFINGA0LXQutCy0LjQt9C40YLQvtCyINCy0L3Rg9GC0YDQuCDQutC+0L3RgtGA0LDQs9C10L3RgtCwLlxuICAgICAgICByZXR1cm4gY29udHJhZ2VudENvbnRyb2xzWydiYW5rQWNjb3VudHMnXS52YWxpZCA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0L3QsNCy0LjQs9Cw0YbQuNGOINC/0L4g0YTQvtGA0LzQtSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbHRhINCX0L3QsNGH0LXQvdC40LUsINC90LAg0LrQvtGC0L7RgNC+0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LLRi9C/0L7Qu9C90LjRgtGMINC90LDQstC40LPQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmF2aWdhdGUoZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0ZXBJbmRleCA9ICh0aGlzLnN0ZXBJbmRleCArIGRlbHRhKSAlIDQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LHQsNC30L7QstC+0LPQviDQutC+0L3RgtGA0LDQs9C10L3RgtCwINC00LvRjyDQutC70LjQtdC90YLQsCDRhNC40LfQuNGH0LXRgdC60L7Qs9C+INC70LjRhtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcm1WYWx1ZSDQl9C90LDRh9C10L3QuNC1INGE0L7RgNC80Ysg0L/RgNC4INGA0LXQs9C40YHRgtGA0LDRhtC40LhcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUJhc2VDb250cmFnZW50KGZvcm1WYWx1ZTogU2NTaWduVXBGb3JtQ29tcG9uZW50Wydmb3JtJ11bJ3ZhbHVlJ10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkIHx8IHRoaXMub3BmQ29udHJvbC52YWx1ZSAhPT0gJ2luZGl2aWR1YWwnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgZm9ybVZhbHVlLmNvbnRyYWdlbnQgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmZvcm0uY29udHJvbHMubmFtZS52YWx1ZSxcbiAgICAgICAgICAgIG9wZjogJ2luZGl2aWR1YWwnLFxuICAgICAgICAgICAgc2FsZXNEaXJlY3Rpb25JZDogMSxcbiAgICAgICAgICAgIGNvbnRhY3RzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmZvcm0uY29udHJvbHMubmFtZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHRoaXMuZm9ybS5jb250cm9scy5waG9uZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRoaXMuZm9ybS5jb250cm9scy5lbWFpbC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQvtC6INC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0YvRhSDRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T3BmJCgpOiBPYnNlcnZhYmxlPEFycmF5PFNjSVJlZmVyZW5jZXNUeXBlczxTY09wZkxpc3QsIHR5cGVvZiBTY09wZkxpc3Q+Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzU2VydmljZS5vcGYkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstC+0Lkg0YTQvtGA0LzRiywg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC5INGB0LjQvNCy0L7Qu9GM0L3QvtC80YMg0L7QsdC+0LfQvdCw0YfQtdC90LjRjiAoc2x1Zykg0L3QsCDQstGF0L7QtNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNsdWcg0KHQuNC80LLQvtC70YzQvdC+0LUg0L7QsdC+0LfQvdCw0YfQtdC90LjQtSAoc2x1ZykuXG4gICAgICovXG4gICAgcHVibGljIGdldE9wZkJ5U2x1ZyQoc2x1Zzoga2V5b2YgdHlwZW9mIFNjT3BmTGlzdCk6IE9ic2VydmFibGU8U2NJUmVmZXJlbmNlc1R5cGVzPFNjT3BmTGlzdCwgdHlwZW9mIFNjT3BmTGlzdD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlc1NlcnZpY2UuZ2V0T3BmQnlTbHVnJChzbHVnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQs9GA0YPQv9C/0YMg0L/QvtC70LXQuSDQsdCw0L3QutC+0LLRgdC60LjRhSDRgNC10LrQstC40LfQuNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUJhbmtBY2NvdW50R3JvdXAoKTogU2NCYW5rQWNjb3VudEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGJhbmtOYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBiaWM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOSksIHNjQmljVmFsaWRhdG9yXSksXG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIwKV0pLFxuICAgICAgICAgICAgY29ycmVzcG9uZGVudEFjY291bnQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMjApLCBzY0NvcnJlc3BvbmRlbnRBY2NvdW50VmFsaWRhdG9yXSksXG4gICAgICAgICAgICBjdXJyZW5jeUlkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCU0L7QsdCw0LLQu9GP0LXRgiDQkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0YsuXG4gICAgICovXG4gICAgcHVibGljIGFkZEJhbmtBY2NvdW50R3JvdXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFua0FjY291bnRzLnB1c2godGhpcy5jcmVhdGVCYW5rQWNjb3VudEdyb3VwKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINCx0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCDQmNC90LTQtdC60YEg0LHQsNC90LrQvtCy0YHQutC40YUg0YDQtdC60LLQuNC30LjRgtC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUJhbmtBY2NvdW50R3JvdXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmJhbmtBY2NvdW50cy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LPRgNGD0L/Qv9GDINC/0L7Qu9C10Lkg0LrQvtC90YLQsNC60YLQvdC+0LPQviDQu9C40YbQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQ29udGFjdEdyb3VwKCk6IFNjQ29udGFjdEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHBob25lVmFsaWRhdG9yKCldKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5lbWFpbCksXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQstGL0LHQvtGA0LAg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiDQntCx0YrQtdC60YIg0L/QvtC00YHQutCw0LfQutC4INCw0YDQtdGB0LAuXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0ZWRPcmdhbml6YXRpb24oc3VnZ2VzdGlvbjogU2NTdWdnZXN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudCAmJiAnaW5uJyBpbiBzdWdnZXN0aW9uICYmICEoJ2JpYycgaW4gc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uLm9wZiAmJiBzdWdnZXN0aW9uLm9wZi5zbHVnICE9PSB0aGlzLm9wZkNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZkNvbnRyb2wucGF0Y2hWYWx1ZShzdWdnZXN0aW9uLm9wZi5zbHVnIGFzIGtleW9mIHR5cGVvZiBTY09wZkxpc3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgb3BmOiBzdWdnZXN0aW9uLm9wZi5zbHVnIGFzIGtleW9mIHR5cGVvZiBTY09wZkxpc3QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpbm46IHN1Z2dlc3Rpb24uaW5uLFxuICAgICAgICAgICAgICAgIGtwcDogc3VnZ2VzdGlvbi5rcHAgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBva3BvOiBzdWdnZXN0aW9uLm9rcG8gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBkaXJlY3Rvck5hbWU6IHN1Z2dlc3Rpb24uZGlyZWN0b3JOYW1lID8/IG51bGwsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3JQb3NpdGlvbjogc3VnZ2VzdGlvbi5kaXJlY3RvclBvc2l0aW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgbGVnYWxBZGRyZXNzOiBzdWdnZXN0aW9uLmxlZ2FsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHBvc3RhbEFkZHJlc3M6IHN1Z2dlc3Rpb24ucG9zdGFsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGFjdHVhbEFkZHJlc3M6IHN1Z2dlc3Rpb24uYWN0dWFsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoWydjb250cmFnZW50JywgJ2NvbnRhY3RzJ10pPy5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoWydjb250cmFnZW50JywgJ2JhbmtBY2NvdW50cyddKT8ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQlNC+0LHQsNCy0LvRj9C10YIg0LrQvtC90YLQsNC60YLQvdC+0LUg0LvQuNGG0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ29udGFjdEdyb3VwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhY3RzLnB1c2godGhpcy5jcmVhdGVDb250YWN0R3JvdXAoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0LrQvtC90YLQsNC60YLQvdC+0LUg0LvQuNGG0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCDQmNC90LTQtdC60YEg0LrQvtC90YLQsNC60YLQvdC+0LPQviDQu9C40YbQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlQ29udGFjdEdyb3VwKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWN0cy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCINGB0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAgXCLQlNC+0LPQvtCy0L7RgCDQvtGE0LXRgNGC0YtcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DbGlja09mZmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsaWNrT2ZmZXJFdmVudC5lbWl0KCk7XG4gICAgfVxufVxuIiwiPGZvcm1cbiAgICAqbmdJZj1cIm9wZkNvbnRyb2wudmFsdWUgYXMgc2VsZWN0T3BmXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdC5uZXh0KClcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqdHVpTGV0PVwib3BmTGlzdEVudW1bc2VsZWN0T3BmXSA9PT0gb3BmTGlzdEVudW0uaW5kaXZpZHVhbCBhcyBpc0luZGl2aWR1YWxcIj5cbiAgICAgICAgPHR1aS1zdGVwcGVyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0luZGl2aWR1YWwgJiYgZm9ybS5jb250cm9scy5jb250cmFnZW50XCJcbiAgICAgICAgICAgIFsoYWN0aXZlSXRlbUluZGV4KV09XCJzdGVwSW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKnR1aVJlcGVhdFRpbWVzPVwibGV0IGluZGV4IG9mIDRcIlxuICAgICAgICAgICAgICAgIFtzdGVwU3RhdGVdPVwiaW5kZXggJiYgIWNhbk5leHRTdGVwKGluZGV4KSA/ICdlcnJvcicgOiAncGFzcydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImluZGV4ICYmICFjYW5OZXh0U3RlcChpbmRleCAtIDEpID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0dWlTdGVwXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgc3RlcHNbaW5kZXhdIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC90dWktc3RlcHBlcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICDQotC40L8g0LrQu9C40LXQvdGC0LBcbiAgICAgICAgICAgICAgICA8dHVpLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib3BmQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwib3BmQ29udGVudFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQotC40L8g0LrQu9C40LXQvdGC0LBcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE9wZiQoKSB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uc2x1Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktZGF0YS1saXN0PlxuICAgICAgICAgICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgI29wZkNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgbGV0LWRhdGFcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgKGdldE9wZkJ5U2x1ZyQoZGF0YSkgfCBhc3luYyk/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgQGxldCBuYW1lTGFiZWwgPSBvcGZMaXN0RW51bVtzZWxlY3RPcGZdID09PSBvcGZMaXN0RW51bS5pbmRpdmlkdWFsID8gJ9CkLtCYLtCeLicgOiAn0J3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4JztcbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICB7eyBuYW1lTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChvcGZMaXN0RW51bVtzZWxlY3RPcGZdID09PSBvcGZMaXN0RW51bS5pbmRpdmlkdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBuYW1lTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAg0J3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wZkxpc3RFbnVtW3NlbGVjdE9wZl0gIT09IG9wZkxpc3RFbnVtLm5vbl9yZXNpZGVudF9sZWdhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5vcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDbGljayk9XCJvblNlbGVjdGVkT3JnYW5pemF0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBpdGVtcy1zdGFydCBnYXAtNSBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgICAgIDxzYy12ZXJpZmljYXRpb24tcGhvbmUtY2hlY2stZm9ybSBbc2hvdWxkQmVCdXN5XT1cImZhbHNlXCIgLz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNjLWFkZHJlc3Nlcy1zZWxlY3Rpb24tZmllbGQgW2NhblNlbGVjdENvdW50cnldPVwib3BmTGlzdEVudW1bc2VsZWN0T3BmXSA9PT0gb3BmTGlzdEVudW0ubm9uX3Jlc2lkZW50X2xlZ2FsXCIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgaXRlbXMtc3RhcnQgZ2FwLTUgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCf0LDRgNC+0LvRjFxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICDQn9Cw0YDQvtC70YxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAg0J/QvtCy0YLQvtGAINC/0LDRgNC+0LvRj1xuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAg0J/QvtCy0YLQvtGAINC/0LDRgNC+0LvRj1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkTGVnYWN5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0LXBhc3N3b3JkPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZENvbmZpcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGl0ZW1zLXN0YXJ0IGdhcC01IHNtOmdyaWQtY29scy0yXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2V0TmV3c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgINCvINGF0L7Rh9GDINC/0L7Qu9GD0YfQsNGC0Ywg0YDQsNGB0YHRi9C70LrRgyDQodC90LDQsdGG0LXQvdGC0YAg0L4g0YHQutC40LTQutCw0YUg0Lgg0L3QvtCy0L7RgdGC0Y/RhSDQv9C+INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLQtS5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhY2NlcHRSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQoNC10LPQuNGB0YLRgNC40YDRg9GP0YHRjCDQvdCwINGB0LDQudGC0LUsINGPINGB0L7Qs9C70LDRiNCw0Y7RgdGMINGBXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG9uQ2xpY2tPZmZlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCU0L7Qs9C+0LLQvtGA0L7QvCDQvtGE0LXRgNGC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXR1aS1uZWdhdGl2ZVwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXB0UnVsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCFpc0luZGl2aWR1YWwpIHtcbiAgICAgICAgICAgIDxzYy1uZXctY29udHJhZ2VudC1mb3JtXG4gICAgICAgICAgICAgICAgW29wZkNvbnRyb2xdPVwib3BmQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAxXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLiFoaWRkZW5dPVwic3RlcEluZGV4ICE9PSAyXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRhY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01IHBiLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0Ys8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250YWN0IG9mIGNvbnRhY3RzLmNvbnRyb2xzOyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGNvdW50ID0gY291bnQ7IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+IOKElnt7IGluZGV4ICsgMSB9fTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvdW50IC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDb250YWN0R3JvdXAoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1uZXctY29udGFjdC1mb3JtIFtmb3JtXT1cImNvbnRhY3RcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy10dWktYmFzZS0wNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29udGFjdEdyb3VwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjCDQutC+0L3RgtCw0LrRglxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gM1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJiYW5rQWNjb3VudHNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTUgcGItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgZm9udC1ib2xkXCI+0JHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYmFua0FjY291bnQgb2YgYmFua0FjY291bnRzLmNvbnRyb2xzOyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGNvdW50ID0gY291bnQ7IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTEyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZFwiPtCR0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRiyDihJZ7eyBpbmRleCArIDEgfX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb3VudCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQmFua0FjY291bnRHcm91cChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNjLW5ldy1jb250cmFnZW50LWJhbmstYWNjb3VudC1mb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcGZDb250cm9sLnZhbHVlIGFzIHNlbGVjdE9wZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZl09XCJzZWxlY3RPcGZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImJhbmtBY2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtcHggdy1mdWxsIGJnLXR1aS1iYXNlLTA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkucGx1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRCYW5rQWNjb3VudEdyb3VwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjCDQsdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0YtcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RlcEluZGV4ID4gMFwiXG4gICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlKC0xKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0J3QsNC30LDQtFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc0luZGl2aWR1YWwgfHwgKHN0ZXBJbmRleCA9PT0gMiAmJiAhZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzWydiYW5rQWNjb3VudHMnXSkgfHwgc3RlcEluZGV4ID09PSAzOyBlbHNlIG5leHRJbmRleEJ0blwiXG4gICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCX0LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGM0YHRj1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25leHRJbmRleEJ0bj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5OZXh0U3RlcChzdGVwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlKDEpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCU0LDQu9C10LVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9mb3JtPlxuIl19
         
     | 
    
        package/esm2022/banner/index.mjs
    DELETED
    
    | 
         @@ -1,3 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            export * from './sc-banner.component';
         
     | 
| 
       2 
     | 
    
         
            -
            export * from './sc-banner.module';
         
     | 
| 
       3 
     | 
    
         
            -
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYmFubmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtYmFubmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWJhbm5lci5tb2R1bGUnO1xuIl19
         
     |