@vendure/admin-ui 2.0.0-next.2 → 2.0.0-next.21
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/catalog/catalog.module.d.ts +15 -11
- package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
- package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
- package/catalog/components/collection-contents/collection-contents.component.d.ts +10 -2
- package/catalog/components/collection-detail/collection-detail.component.d.ts +13 -4
- package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
- package/catalog/components/collection-list/collection-list.component.d.ts +9 -5
- package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +14 -6
- package/catalog/components/collection-tree/collection-tree.component.d.ts +4 -1
- package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
- package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
- package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -3
- package/catalog/components/option-value-input/option-value-input.component.d.ts +21 -9
- package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
- package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
- package/catalog/components/product-list/product-list.component.d.ts +4 -2
- package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +22 -12
- package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
- package/catalog/public_api.d.ts +6 -1
- package/core/common/component-registry-types.d.ts +1 -1
- package/core/common/generated-types.d.ts +3184 -195
- package/core/common/utilities/bulk-action-utils.d.ts +19 -0
- package/core/common/utilities/configurable-operation-utils.d.ts +7 -2
- package/core/common/utilities/selection-manager.d.ts +30 -0
- package/core/common/version.d.ts +1 -1
- package/core/components/app-shell/app-shell.component.d.ts +1 -0
- package/core/data/definitions/collection-definitions.d.ts +4 -0
- package/core/data/definitions/facet-definitions.d.ts +3 -0
- package/core/data/definitions/order-definitions.d.ts +14 -0
- package/core/data/definitions/product-definitions.d.ts +2 -0
- package/core/data/providers/collection-data.service.d.ts +7 -0
- package/core/data/providers/facet-data.service.d.ts +3 -0
- package/core/data/providers/order-data.service.d.ts +18 -0
- package/core/data/providers/product-data.service.d.ts +2 -0
- package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
- package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
- package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
- package/core/providers/local-storage/local-storage.service.d.ts +1 -0
- package/core/providers/modal/modal.types.d.ts +2 -0
- package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
- package/core/public_api.d.ts +24 -1
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +27 -3
- package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
- package/core/shared/components/configurable-input/configurable-input.component.d.ts +8 -3
- package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +6 -2
- package/core/shared/components/data-table/data-table.component.d.ts +29 -7
- package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
- package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +3 -2
- package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +38 -0
- package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
- package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +24 -0
- package/core/shared/components/radio-card/radio-card.component.d.ts +22 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
- package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
- package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
- package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
- package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
- package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
- package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
- package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
- package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
- package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
- package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
- package/core/shared/components/select-toggle/select-toggle.component.d.ts +2 -1
- package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
- package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +28 -0
- package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +2 -0
- package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +23 -0
- package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +5 -1
- package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
- package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +10 -2
- package/core/shared/pipes/custom-field-description.pipe.d.ts +11 -0
- package/core/shared/pipes/custom-field-label.pipe.d.ts +4 -10
- package/core/shared/shared.module.d.ts +68 -57
- package/customer/components/customer-group-list/customer-group-list.component.d.ts +6 -4
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
- package/esm2020/catalog/catalog.module.mjs +31 -10
- package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +1 -1
- package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
- package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
- package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
- package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
- package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +61 -13
- package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +70 -32
- package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
- package/esm2020/catalog/components/collection-list/collection-list.component.mjs +46 -12
- package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
- package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +36 -10
- package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +9 -4
- package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
- package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
- package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
- package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +12 -4
- package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +70 -11
- package/esm2020/catalog/components/product-detail/product-detail.component.mjs +36 -24
- package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
- package/esm2020/catalog/components/product-list/product-list.component.mjs +13 -9
- package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +130 -19
- package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
- package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
- package/esm2020/catalog/public_api.mjs +7 -2
- package/esm2020/core/app.component.module.mjs +1 -1
- package/esm2020/core/common/base-detail.component.mjs +1 -1
- package/esm2020/core/common/component-registry-types.mjs +1 -1
- package/esm2020/core/common/deactivate-aware.mjs +1 -1
- package/esm2020/core/common/generated-types.mjs +31 -1
- package/esm2020/core/common/introspection-result.mjs +296 -189
- package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
- package/esm2020/core/common/utilities/configurable-operation-utils.mjs +37 -10
- package/esm2020/core/common/utilities/selection-manager.mjs +96 -0
- package/esm2020/core/common/version.mjs +2 -2
- package/esm2020/core/components/app-shell/app-shell.component.mjs +6 -5
- package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
- package/esm2020/core/components/main-nav/main-nav.component.mjs +3 -3
- package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
- package/esm2020/core/core.module.mjs +1 -1
- package/esm2020/core/data/definitions/collection-definitions.mjs +47 -1
- package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
- package/esm2020/core/data/definitions/order-definitions.mjs +583 -455
- package/esm2020/core/data/definitions/product-definitions.mjs +23 -1
- package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
- package/esm2020/core/data/providers/collection-data.service.mjs +20 -2
- package/esm2020/core/data/providers/customer-data.service.mjs +6 -1
- package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
- package/esm2020/core/data/providers/order-data.service.mjs +43 -2
- package/esm2020/core/data/providers/product-data.service.mjs +10 -2
- package/esm2020/core/data/providers/promotion-data.service.mjs +1 -1
- package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +8 -1
- package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
- package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
- package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
- package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +1 -4
- package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
- package/esm2020/core/providers/modal/modal.service.mjs +2 -1
- package/esm2020/core/providers/modal/modal.types.mjs +1 -1
- package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
- package/esm2020/core/public_api.mjs +25 -2
- package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +7 -15
- package/esm2020/core/shared/components/address-form/address-form.component.mjs +3 -3
- package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +34 -51
- package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
- package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
- package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
- package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +22 -10
- package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +18 -10
- package/esm2020/core/shared/components/data-table/data-table.component.mjs +64 -14
- package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
- package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +26 -23
- package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
- package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
- package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +13 -6
- package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +3 -3
- package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
- package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
- package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
- package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +1 -1
- package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +2 -1
- package/esm2020/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +135 -0
- package/esm2020/core/shared/components/product-search-input/product-search-input.component.mjs +108 -0
- package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
- package/esm2020/core/shared/components/radio-card/radio-card-fieldset.component.mjs +54 -0
- package/esm2020/core/shared/components/radio-card/radio-card.component.mjs +53 -0
- package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +136 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +47 -18
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
- package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
- package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +22 -10
- package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +6 -3
- package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
- package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
- package/esm2020/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.mjs +45 -0
- package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
- package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +12 -3
- package/esm2020/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +48 -0
- package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +7 -1
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +11 -9
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
- package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +21 -11
- package/esm2020/core/shared/pipes/custom-field-description.pipe.mjs +30 -0
- package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +7 -19
- package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +10 -2
- package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +2 -1
- package/esm2020/core/shared/shared.module.mjs +49 -5
- package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
- package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
- package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +33 -18
- package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
- package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
- package/esm2020/customer/components/customer-list/customer-list.component.mjs +3 -3
- package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +2 -2
- package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +2 -2
- package/esm2020/dashboard/dashboard.module.mjs +6 -2
- package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
- package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +2 -2
- package/esm2020/login/components/login/login.component.mjs +3 -3
- package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
- package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
- package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
- package/esm2020/order/components/coupon-code-selector/coupon-code-selector.component.mjs +42 -0
- package/esm2020/order/components/draft-order-detail/draft-order-detail.component.mjs +187 -0
- package/esm2020/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +59 -0
- package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -3
- package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
- package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +8 -17
- package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +8 -22
- package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +30 -6
- package/esm2020/order/components/order-detail/order-detail.component.mjs +80 -40
- package/esm2020/order/components/order-editor/order-editor.component.mjs +15 -14
- package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +1 -1
- package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
- package/esm2020/order/components/order-list/order-list.component.mjs +40 -17
- package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
- package/esm2020/order/components/order-table/order-table.component.mjs +29 -6
- package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
- package/esm2020/order/components/select-address-dialog/select-address-dialog.component.mjs +89 -0
- package/esm2020/order/components/select-address-dialog/select-address-dialog.graphql.mjs +14 -0
- package/esm2020/order/components/select-customer-dialog/select-customer-dialog.component.mjs +59 -0
- package/esm2020/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.mjs +31 -0
- package/esm2020/order/order.module.mjs +20 -2
- package/esm2020/order/order.routes.mjs +23 -4
- package/esm2020/order/providers/routing/order-resolver.mjs +29 -11
- package/esm2020/order/providers/routing/order.guard.mjs +37 -0
- package/esm2020/order/public_api.mjs +9 -1
- package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
- package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
- package/esm2020/settings/components/country-list/country-list.component.mjs +3 -3
- package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
- package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
- package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +1 -1
- package/esm2020/settings/components/profile/profile.component.mjs +3 -3
- package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
- package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +4 -2
- package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
- package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
- package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +2 -2
- package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
- package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
- package/esm2020/system/components/health-check/health-check.component.mjs +2 -2
- package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
- package/fesm2015/vendure-admin-ui-catalog.mjs +1206 -228
- package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-core.mjs +9451 -7332
- package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-customer.mjs +36 -23
- package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-dashboard.mjs +11 -7
- package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-login.mjs +2 -2
- package/fesm2015/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-marketing.mjs +3 -3
- package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-order.mjs +1184 -599
- package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-settings.mjs +21 -19
- package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2015/vendure-admin-ui-system.mjs +3 -3
- package/fesm2020/vendure-admin-ui-catalog.mjs +1190 -230
- package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-core.mjs +9539 -7437
- package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-customer.mjs +36 -23
- package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-dashboard.mjs +11 -7
- package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-login.mjs +2 -2
- package/fesm2020/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-marketing.mjs +3 -3
- package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-order.mjs +1194 -614
- package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-settings.mjs +21 -19
- package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2020/vendure-admin-ui-system.mjs +3 -3
- package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +21 -0
- package/order/components/draft-order-detail/draft-order-detail.component.d.ts +52 -0
- package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +24 -0
- package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +4 -2
- package/order/components/order-editor/order-editor.component.d.ts +1 -6
- package/order/components/order-list/order-list.component.d.ts +2 -0
- package/order/components/order-table/order-table.component.d.ts +12 -2
- package/order/components/select-address-dialog/select-address-dialog.component.d.ts +27 -0
- package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
- package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +25 -0
- package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +19 -0
- package/order/order.module.d.ts +9 -3
- package/order/providers/routing/order-resolver.d.ts +8 -3
- package/order/providers/routing/order.guard.d.ts +12 -0
- package/order/public_api.d.ts +8 -0
- package/package.json +13 -12
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
- package/static/i18n-messages/cs.json +50 -3
- package/static/i18n-messages/de.json +53 -3
- package/static/i18n-messages/en.json +55 -8
- package/static/i18n-messages/es.json +50 -3
- package/static/i18n-messages/fr.json +50 -3
- package/static/i18n-messages/it.json +50 -3
- package/static/i18n-messages/pl.json +50 -3
- package/static/i18n-messages/pt_BR.json +50 -3
- package/static/i18n-messages/pt_PT.json +50 -3
- package/static/i18n-messages/ru.json +50 -3
- package/static/i18n-messages/uk.json +50 -3
- package/static/i18n-messages/zh_Hans.json +50 -3
- package/static/i18n-messages/zh_Hant.json +50 -3
- package/static/styles/_variables.scss +4 -0
- package/static/styles/global/_forms.scss +8 -7
- package/static/styles/global/_overrides.scss +11 -1
- package/static/styles/global/_sass-overrides.scss +3 -0
- package/static/styles/global/_utilities.scss +14 -0
- package/static/styles/styles.scss +1 -0
- package/static/styles/theme/default.scss +13 -1
- package/static/styles/ui-extension-theme.scss +1 -0
- package/static/theme.min.css +1 -1
- package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
- package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +0 -107
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs
CHANGED
|
@@ -73,6 +73,12 @@ export class ProductVariantsListComponent {
|
|
|
73
73
|
}
|
|
74
74
|
return '';
|
|
75
75
|
}
|
|
76
|
+
getStockOnHandMinValue(variant) {
|
|
77
|
+
const effectiveOutOfStockThreshold = variant.get('useGlobalOutOfStockThreshold')?.value
|
|
78
|
+
? this.globalOutOfStockThreshold
|
|
79
|
+
: variant.get('outOfStockThreshold')?.value;
|
|
80
|
+
return effectiveOutOfStockThreshold;
|
|
81
|
+
}
|
|
76
82
|
getSaleableStockLevel(variant) {
|
|
77
83
|
const effectiveOutOfStockThreshold = variant.useGlobalOutOfStockThreshold
|
|
78
84
|
? this.globalOutOfStockThreshold
|
|
@@ -183,10 +189,10 @@ export class ProductVariantsListComponent {
|
|
|
183
189
|
}
|
|
184
190
|
}
|
|
185
191
|
ProductVariantsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProductVariantsListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ModalService }, { token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
186
|
-
ProductVariantsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ProductVariantsListComponent, selector: "vdr-product-variants-list", inputs: { formArray: ["productVariantsFormArray", "formArray"], variants: "variants", paginationConfig: "paginationConfig", channelPriceIncludesTax: "channelPriceIncludesTax", taxCategories: "taxCategories", facets: "facets", optionGroups: "optionGroups", customFields: "customFields", customOptionFields: "customOptionFields", activeLanguage: "activeLanguage", pendingAssetChanges: "pendingAssetChanges" }, outputs: { assignToChannel: "assignToChannel", removeFromChannel: "removeFromChannel", assetChange: "assetChange", selectionChange: "selectionChange", selectFacetValueClick: "selectFacetValueClick", updateProductOption: "updateProductOption" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"variants-list\">\r\n <div\r\n class=\"variant-container card\"\r\n *ngFor=\"\r\n let variant of variants | paginate: paginationConfig || { itemsPerPage: 10, currentPage: 1 };\r\n trackBy: trackById;\r\n let i = index\r\n \"\r\n [class.disabled]=\"!formGroupMap.get(variant.id)?.get('enabled')?.value\"\r\n >\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <div class=\"card-block header-row\">\r\n <div class=\"details\">\r\n <vdr-title-input class=\"sku\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n <vdr-title-input class=\"name\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n </div>\r\n <div class=\"right-controls\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermission\">\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"variant-body\">\r\n <div class=\"assets\">\r\n <vdr-assets\r\n [compact]=\"true\"\r\n [assets]=\"pendingAssetChanges[variant.id]?.assets || variant.assets\"\r\n [featuredAsset]=\"\r\n pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset\r\n \"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"onAssetChange(variant.id, $event)\"\r\n ></vdr-assets>\r\n </div>\r\n <div class=\"variant-form-inputs\">\r\n <div class=\"standard-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <div class=\"tax-category\">\r\n <clr-select-container\r\n *vdrIfPermissions=\"updatePermission; else taxCategoryLabel\"\r\n >\r\n <label>{{ 'catalog.tax-category' | translate }}</label>\r\n <select clrSelect name=\"options\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <ng-template #taxCategoryLabel>\r\n <label class=\"clr-control-label\">{{\r\n 'catalog.tax-category' | translate\r\n }}</label>\r\n <div class=\"tax-category-label\">\r\n {{ getTaxCategoryName(formGroup) }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"price\">\r\n <clr-input-container>\r\n <label>{{ 'catalog.price' | translate }}</label>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </div>\r\n <vdr-variant-price-detail\r\n [price]=\"formGroup.get('price')!.value\"\r\n [currencyCode]=\"variant.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax\"\r\n [taxCategoryId]=\"formGroup.get('taxCategoryId')!.value\"\r\n ></vdr-variant-price-detail>\r\n </div>\r\n <div class=\"variant-form-input-row\">\r\n <clr-select-container *vdrIfPermissions=\"updatePermission\">\r\n <label\r\n >{{ 'catalog.track-inventory' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.track-inventory-tooltip' | translate\"\r\n ></vdr-help-tooltip>\r\n </label>\r\n <select clrSelect name=\"options\" formControlName=\"trackInventory\">\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <clr-input-container>\r\n <label\r\n >{{ 'catalog.stock-on-hand' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-on-hand-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <input\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n clrInput\r\n type=\"number\"\r\n min=\"0\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"inventoryIsNotTracked(formGroup)\"\r\n />\r\n </clr-input-container>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-allocated' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-allocated-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ variant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-saleable' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-saleable-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ getSaleableStockLevel(variant) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"variant-form-input-row\">\r\n <div\r\n class=\"out-of-stock-threshold-wrapper\"\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n >\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.out-of-stock-threshold' | translate\r\n }}<vdr-help-tooltip\r\n [content]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"flex\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n [formControl]=\"formGroup.get('outOfStockThreshold')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"\r\n formGroup.get('useGlobalOutOfStockThreshold')?.value !==\r\n false || inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n </clr-input-container>\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermission | hasPermission) ||\r\n inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"custom-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"formGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"options-facets\">\r\n <vdr-entity-info [entity]=\"variant\"></vdr-entity-info>\r\n <div *ngIf=\"variant.options.length\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort: 'groupId'\"\r\n [colorFrom]=\"optionGroupName(option.groupId)\"\r\n [invert]=\"true\"\r\n (iconClick)=\"editOption(option)\"\r\n [icon]=\"(updatePermission | hasPermission) && 'pencil'\"\r\n >\r\n <span class=\"option-group-name\">{{ optionGroupName(option.groupId) }}</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n <a [routerLink]=\"['./', 'options']\" class=\"btn btn-link btn-sm\"\r\n >{{ 'catalog.edit-options' | translate }}...</a\r\n >\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of existingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of pendingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"selectFacetValueClick.emit([variant.id])\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *vdrIfMultichannel>\r\n <div class=\"card-block\" *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of variant.channels\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n [title]=\"'catalog.remove-from-channel' | translate\"\r\n (iconClick)=\"\r\n removeFromChannel.emit({ channelId: channel.id, variant: variant })\r\n \"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel.emit(variant)\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".with-selected{display:flex;min-height:52px;align-items:center;border:1px solid var(--color-component-border-100);border-radius:3px;padding:6px 18px}.with-selected vdr-select-toggle{margin-right:12px}.with-selected>label{margin-right:12px}.variant-container{transition:background-color .2s;min-height:330px}.variant-container.disabled{background-color:var(--color-component-bg-200)}.variant-container .header-row{display:flex;align-items:center;flex-wrap:wrap}.variant-container .variant-body{display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-body{flex-direction:row}}.variant-container .details{display:flex;flex-direction:column;flex:1;margin-right:12px}@media screen and (min-width: 768px){.variant-container .details{flex-direction:row;height:36px}}.variant-container .details .name{flex:1}.variant-container .details .name ::ng-deep .clr-control-container{width:100%}.variant-container .details .name ::ng-deep .clr-control-container input.clr-input{min-width:100%}.variant-container .details .sku{width:160px;margin-right:20px;flex:0}.variant-container .details ::ng-deep .name input{min-width:300px}.variant-container .right-controls{display:flex}.variant-container .tax-category-label{margin-top:3px}.variant-container .variant-form-inputs{flex:1;display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-form-inputs{flex-direction:row}}.variant-container .variant-form-input-row{display:flex;flex-wrap:wrap}@media screen and (min-width: 768px){.variant-container .variant-form-input-row{margin:0 6px 8px 24px}}.variant-container .variant-form-input-row>*{margin-right:24px;margin-bottom:24px}.variant-container .track-inventory-toggle{margin-top:22px}.variant-container .clr-form-control{margin-top:0}.variant-container .facets{display:flex;flex-wrap:wrap;align-items:center}.variant-container .pricing{display:flex}.variant-container .pricing>div{margin-right:12px}.variant-container .option-group-name{color:var(--color-text-200);text-transform:uppercase;font-size:10px;margin-right:3px;height:11px}.variant-container .options-facets{display:flex;color:var(--color-grey-400)}.variant-container ::ng-deep .clr-control-container{width:100%}.channel-assignment{justify-content:flex-end}.channel-assignment .btn{margin:6px 12px 6px 0}.out-of-stock-threshold-wrapper{display:flex;flex-direction:column}.out-of-stock-threshold-wrapper clr-toggle-wrapper{margin-left:24px}.inventory-untracked{opacity:.5}\n"], components: [{ type: i1.TitleInputComponent, selector: "vdr-title-input", inputs: ["readonly"] }, { type: i2.ClrInputContainer, selector: "clr-input-container" }, { type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i3.AssetsComponent, selector: "vdr-assets", inputs: ["assets", "featuredAsset", "compact", "updatePermissions"], outputs: ["change"] }, { type: i2.ClrSelectContainer, selector: "clr-select-container" }, { type: i1.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { type: i4.VariantPriceDetailComponent, selector: "vdr-variant-price-detail", inputs: ["priceIncludesTax", "price", "currencyCode", "taxCategoryId"] }, { type: i1.HelpTooltipComponent, selector: "vdr-help-tooltip", inputs: ["content", "position"] }, { type: i1.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i1.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { type: i1.ChannelBadgeComponent, selector: "vdr-channel-badge", inputs: ["channelCode"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.ClrInput, selector: "[clrInput]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i2.ClrSelect, selector: "[clrSelect]" }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i7.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i2.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.IfMultichannelDirective, selector: "[vdrIfMultichannel]", inputs: ["vdrIfMultichannelElse"] }, { type: i1.IfDefaultChannelActiveDirective, selector: "[vdrIfDefaultChannelActive]", inputs: ["vdrIfMultichannelElse"] }], pipes: { "paginate": i8.PaginatePipe, "hasPermission": i1.HasPermissionPipe, "translate": i9.TranslatePipe, "sort": i1.SortPipe, "channelCodeToLabel": i1.ChannelLabelPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
192
|
+
ProductVariantsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ProductVariantsListComponent, selector: "vdr-product-variants-list", inputs: { formArray: ["productVariantsFormArray", "formArray"], variants: "variants", paginationConfig: "paginationConfig", channelPriceIncludesTax: "channelPriceIncludesTax", taxCategories: "taxCategories", facets: "facets", optionGroups: "optionGroups", customFields: "customFields", customOptionFields: "customOptionFields", activeLanguage: "activeLanguage", pendingAssetChanges: "pendingAssetChanges" }, outputs: { assignToChannel: "assignToChannel", removeFromChannel: "removeFromChannel", assetChange: "assetChange", selectionChange: "selectionChange", selectFacetValueClick: "selectFacetValueClick", updateProductOption: "updateProductOption" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"variants-list\">\r\n <div\r\n class=\"variant-container card\"\r\n *ngFor=\"\r\n let variant of variants | paginate: paginationConfig || { itemsPerPage: 10, currentPage: 1 };\r\n trackBy: trackById;\r\n let i = index\r\n \"\r\n [class.disabled]=\"!formGroupMap.get(variant.id)?.get('enabled')?.value\"\r\n >\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <div class=\"card-block header-row\">\r\n <div class=\"details\">\r\n <vdr-title-input class=\"sku\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n <vdr-title-input class=\"name\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n </div>\r\n <div class=\"right-controls\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermission\">\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"variant-body\">\r\n <div class=\"assets\">\r\n <vdr-assets\r\n [compact]=\"true\"\r\n [assets]=\"pendingAssetChanges[variant.id]?.assets || variant.assets\"\r\n [featuredAsset]=\"\r\n pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset\r\n \"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"onAssetChange(variant.id, $event)\"\r\n ></vdr-assets>\r\n </div>\r\n <div class=\"variant-form-inputs\">\r\n <div class=\"standard-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <div class=\"tax-category\">\r\n <clr-select-container\r\n *vdrIfPermissions=\"updatePermission; else taxCategoryLabel\"\r\n >\r\n <label>{{ 'catalog.tax-category' | translate }}</label>\r\n <select clrSelect name=\"options\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <ng-template #taxCategoryLabel>\r\n <label class=\"clr-control-label\">{{\r\n 'catalog.tax-category' | translate\r\n }}</label>\r\n <div class=\"tax-category-label\">\r\n {{ getTaxCategoryName(formGroup) }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"price\">\r\n <clr-input-container>\r\n <label>{{ 'catalog.price' | translate }}</label>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </div>\r\n <vdr-variant-price-detail\r\n [price]=\"formGroup.get('price')!.value\"\r\n [currencyCode]=\"variant.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax\"\r\n [taxCategoryId]=\"formGroup.get('taxCategoryId')!.value\"\r\n ></vdr-variant-price-detail>\r\n </div>\r\n <div class=\"variant-form-input-row\">\r\n <clr-select-container *vdrIfPermissions=\"updatePermission\">\r\n <label\r\n >{{ 'catalog.track-inventory' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.track-inventory-tooltip' | translate\"\r\n ></vdr-help-tooltip>\r\n </label>\r\n <select clrSelect name=\"options\" formControlName=\"trackInventory\">\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <clr-input-container>\r\n <label\r\n >{{ 'catalog.stock-on-hand' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-on-hand-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <input\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n clrInput\r\n type=\"number\"\r\n [min]=\"getStockOnHandMinValue(formGroup)\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"inventoryIsNotTracked(formGroup)\"\r\n />\r\n </clr-input-container>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-allocated' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-allocated-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ variant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-saleable' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-saleable-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ getSaleableStockLevel(variant) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"variant-form-input-row\">\r\n <div\r\n class=\"out-of-stock-threshold-wrapper\"\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n >\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.out-of-stock-threshold' | translate\r\n }}<vdr-help-tooltip\r\n [content]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"flex\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n [formControl]=\"formGroup.get('outOfStockThreshold')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"\r\n formGroup.get('useGlobalOutOfStockThreshold')?.value !==\r\n false || inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n </clr-input-container>\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermission | hasPermission) ||\r\n inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"custom-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"formGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"options-facets\">\r\n <vdr-entity-info [entity]=\"variant\"></vdr-entity-info>\r\n <div *ngIf=\"variant.options.length\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort: 'groupId'\"\r\n [colorFrom]=\"optionGroupName(option.groupId)\"\r\n [invert]=\"true\"\r\n (iconClick)=\"editOption(option)\"\r\n [icon]=\"(updatePermission | hasPermission) && 'pencil'\"\r\n >\r\n <span class=\"option-group-name\">{{ optionGroupName(option.groupId) }}</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n <a [routerLink]=\"['./', 'options']\" class=\"btn btn-link btn-sm\"\r\n >{{ 'catalog.edit-options' | translate }}...</a\r\n >\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of existingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of pendingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"selectFacetValueClick.emit([variant.id])\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *vdrIfMultichannel>\r\n <div class=\"card-block\" *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of variant.channels\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n [title]=\"'catalog.remove-from-channel' | translate: { channelCode: channel.code }\"\r\n (iconClick)=\"\r\n removeFromChannel.emit({ channelId: channel.id, variant: variant })\r\n \"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel.emit(variant)\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".with-selected{display:flex;min-height:52px;align-items:center;border:1px solid var(--color-component-border-100);border-radius:3px;padding:6px 18px}.with-selected vdr-select-toggle{margin-right:12px}.with-selected>label{margin-right:12px}.variant-container{transition:background-color .2s;min-height:330px}.variant-container.disabled{background-color:var(--color-component-bg-200)}.variant-container .header-row{display:flex;align-items:center;flex-wrap:wrap}.variant-container .variant-body{display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-body{flex-direction:row}}.variant-container .details{display:flex;flex-direction:column;flex:1;margin-right:12px}@media screen and (min-width: 768px){.variant-container .details{flex-direction:row;height:36px}}.variant-container .details .name{flex:1}.variant-container .details .name ::ng-deep .clr-control-container{width:100%}.variant-container .details .name ::ng-deep .clr-control-container input.clr-input{min-width:100%}.variant-container .details .sku{width:160px;margin-right:20px;flex:0}.variant-container .details ::ng-deep .name input{min-width:300px}.variant-container .right-controls{display:flex}.variant-container .tax-category-label{margin-top:3px}.variant-container .variant-form-inputs{flex:1;display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-form-inputs{flex-direction:row}}.variant-container .variant-form-input-row{display:flex;flex-wrap:wrap}@media screen and (min-width: 768px){.variant-container .variant-form-input-row{margin:0 6px 8px 24px}}.variant-container .variant-form-input-row>*{margin-right:24px;margin-bottom:24px}.variant-container .track-inventory-toggle{margin-top:22px}.variant-container .clr-form-control{margin-top:0}.variant-container .facets{display:flex;flex-wrap:wrap;align-items:center}.variant-container .pricing{display:flex}.variant-container .pricing>div{margin-right:12px}.variant-container .option-group-name{color:var(--color-text-200);text-transform:uppercase;font-size:10px;margin-right:3px;height:11px}.variant-container .options-facets{display:flex;color:var(--color-grey-400)}.variant-container ::ng-deep .clr-control-container{width:100%}.channel-assignment{justify-content:flex-end;flex-wrap:wrap;max-height:110px;overflow-y:auto}.channel-assignment .btn{margin:6px 12px 6px 0}.out-of-stock-threshold-wrapper{display:flex;flex-direction:column}.out-of-stock-threshold-wrapper clr-toggle-wrapper{margin-left:24px}.inventory-untracked{opacity:.5}\n"], components: [{ type: i1.TitleInputComponent, selector: "vdr-title-input", inputs: ["readonly"] }, { type: i2.ClrInputContainer, selector: "clr-input-container" }, { type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i3.AssetsComponent, selector: "vdr-assets", inputs: ["assets", "featuredAsset", "compact", "updatePermissions"], outputs: ["change"] }, { type: i2.ClrSelectContainer, selector: "clr-select-container" }, { type: i1.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { type: i4.VariantPriceDetailComponent, selector: "vdr-variant-price-detail", inputs: ["priceIncludesTax", "price", "currencyCode", "taxCategoryId"] }, { type: i1.HelpTooltipComponent, selector: "vdr-help-tooltip", inputs: ["content", "position"] }, { type: i1.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i1.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { type: i1.ChannelBadgeComponent, selector: "vdr-channel-badge", inputs: ["channelCode"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.ClrInput, selector: "[clrInput]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i2.ClrSelect, selector: "[clrSelect]" }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i1.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i7.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i2.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.IfMultichannelDirective, selector: "[vdrIfMultichannel]", inputs: ["vdrIfMultichannelElse"] }, { type: i1.IfDefaultChannelActiveDirective, selector: "[vdrIfDefaultChannelActive]", inputs: ["vdrIfMultichannelElse"] }], pipes: { "paginate": i8.PaginatePipe, "hasPermission": i1.HasPermissionPipe, "translate": i9.TranslatePipe, "sort": i1.SortPipe, "channelCodeToLabel": i1.ChannelLabelPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
187
193
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProductVariantsListComponent, decorators: [{
|
|
188
194
|
type: Component,
|
|
189
|
-
args: [{ selector: 'vdr-product-variants-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"variants-list\">\r\n <div\r\n class=\"variant-container card\"\r\n *ngFor=\"\r\n let variant of variants | paginate: paginationConfig || { itemsPerPage: 10, currentPage: 1 };\r\n trackBy: trackById;\r\n let i = index\r\n \"\r\n [class.disabled]=\"!formGroupMap.get(variant.id)?.get('enabled')?.value\"\r\n >\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <div class=\"card-block header-row\">\r\n <div class=\"details\">\r\n <vdr-title-input class=\"sku\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n <vdr-title-input class=\"name\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n </div>\r\n <div class=\"right-controls\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermission\">\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"variant-body\">\r\n <div class=\"assets\">\r\n <vdr-assets\r\n [compact]=\"true\"\r\n [assets]=\"pendingAssetChanges[variant.id]?.assets || variant.assets\"\r\n [featuredAsset]=\"\r\n pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset\r\n \"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"onAssetChange(variant.id, $event)\"\r\n ></vdr-assets>\r\n </div>\r\n <div class=\"variant-form-inputs\">\r\n <div class=\"standard-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <div class=\"tax-category\">\r\n <clr-select-container\r\n *vdrIfPermissions=\"updatePermission; else taxCategoryLabel\"\r\n >\r\n <label>{{ 'catalog.tax-category' | translate }}</label>\r\n <select clrSelect name=\"options\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <ng-template #taxCategoryLabel>\r\n <label class=\"clr-control-label\">{{\r\n 'catalog.tax-category' | translate\r\n }}</label>\r\n <div class=\"tax-category-label\">\r\n {{ getTaxCategoryName(formGroup) }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"price\">\r\n <clr-input-container>\r\n <label>{{ 'catalog.price' | translate }}</label>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </div>\r\n <vdr-variant-price-detail\r\n [price]=\"formGroup.get('price')!.value\"\r\n [currencyCode]=\"variant.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax\"\r\n [taxCategoryId]=\"formGroup.get('taxCategoryId')!.value\"\r\n ></vdr-variant-price-detail>\r\n </div>\r\n <div class=\"variant-form-input-row\">\r\n <clr-select-container *vdrIfPermissions=\"updatePermission\">\r\n <label\r\n >{{ 'catalog.track-inventory' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.track-inventory-tooltip' | translate\"\r\n ></vdr-help-tooltip>\r\n </label>\r\n <select clrSelect name=\"options\" formControlName=\"trackInventory\">\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <clr-input-container>\r\n <label\r\n >{{ 'catalog.stock-on-hand' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-on-hand-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <input\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n clrInput\r\n type=\"number\"\r\n min=\"0\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"inventoryIsNotTracked(formGroup)\"\r\n />\r\n </clr-input-container>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-allocated' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-allocated-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ variant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-saleable' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-saleable-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ getSaleableStockLevel(variant) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"variant-form-input-row\">\r\n <div\r\n class=\"out-of-stock-threshold-wrapper\"\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n >\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.out-of-stock-threshold' | translate\r\n }}<vdr-help-tooltip\r\n [content]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"flex\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n [formControl]=\"formGroup.get('outOfStockThreshold')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"\r\n formGroup.get('useGlobalOutOfStockThreshold')?.value !==\r\n false || inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n </clr-input-container>\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermission | hasPermission) ||\r\n inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"custom-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"formGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"options-facets\">\r\n <vdr-entity-info [entity]=\"variant\"></vdr-entity-info>\r\n <div *ngIf=\"variant.options.length\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort: 'groupId'\"\r\n [colorFrom]=\"optionGroupName(option.groupId)\"\r\n [invert]=\"true\"\r\n (iconClick)=\"editOption(option)\"\r\n [icon]=\"(updatePermission | hasPermission) && 'pencil'\"\r\n >\r\n <span class=\"option-group-name\">{{ optionGroupName(option.groupId) }}</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n <a [routerLink]=\"['./', 'options']\" class=\"btn btn-link btn-sm\"\r\n >{{ 'catalog.edit-options' | translate }}...</a\r\n >\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of existingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of pendingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"selectFacetValueClick.emit([variant.id])\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *vdrIfMultichannel>\r\n <div class=\"card-block\" *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of variant.channels\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n [title]=\"'catalog.remove-from-channel' | translate\"\r\n (iconClick)=\"\r\n removeFromChannel.emit({ channelId: channel.id, variant: variant })\r\n \"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel.emit(variant)\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".with-selected{display:flex;min-height:52px;align-items:center;border:1px solid var(--color-component-border-100);border-radius:3px;padding:6px 18px}.with-selected vdr-select-toggle{margin-right:12px}.with-selected>label{margin-right:12px}.variant-container{transition:background-color .2s;min-height:330px}.variant-container.disabled{background-color:var(--color-component-bg-200)}.variant-container .header-row{display:flex;align-items:center;flex-wrap:wrap}.variant-container .variant-body{display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-body{flex-direction:row}}.variant-container .details{display:flex;flex-direction:column;flex:1;margin-right:12px}@media screen and (min-width: 768px){.variant-container .details{flex-direction:row;height:36px}}.variant-container .details .name{flex:1}.variant-container .details .name ::ng-deep .clr-control-container{width:100%}.variant-container .details .name ::ng-deep .clr-control-container input.clr-input{min-width:100%}.variant-container .details .sku{width:160px;margin-right:20px;flex:0}.variant-container .details ::ng-deep .name input{min-width:300px}.variant-container .right-controls{display:flex}.variant-container .tax-category-label{margin-top:3px}.variant-container .variant-form-inputs{flex:1;display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-form-inputs{flex-direction:row}}.variant-container .variant-form-input-row{display:flex;flex-wrap:wrap}@media screen and (min-width: 768px){.variant-container .variant-form-input-row{margin:0 6px 8px 24px}}.variant-container .variant-form-input-row>*{margin-right:24px;margin-bottom:24px}.variant-container .track-inventory-toggle{margin-top:22px}.variant-container .clr-form-control{margin-top:0}.variant-container .facets{display:flex;flex-wrap:wrap;align-items:center}.variant-container .pricing{display:flex}.variant-container .pricing>div{margin-right:12px}.variant-container .option-group-name{color:var(--color-text-200);text-transform:uppercase;font-size:10px;margin-right:3px;height:11px}.variant-container .options-facets{display:flex;color:var(--color-grey-400)}.variant-container ::ng-deep .clr-control-container{width:100%}.channel-assignment{justify-content:flex-end}.channel-assignment .btn{margin:6px 12px 6px 0}.out-of-stock-threshold-wrapper{display:flex;flex-direction:column}.out-of-stock-threshold-wrapper clr-toggle-wrapper{margin-left:24px}.inventory-untracked{opacity:.5}\n"] }]
|
|
195
|
+
args: [{ selector: 'vdr-product-variants-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"variants-list\">\r\n <div\r\n class=\"variant-container card\"\r\n *ngFor=\"\r\n let variant of variants | paginate: paginationConfig || { itemsPerPage: 10, currentPage: 1 };\r\n trackBy: trackById;\r\n let i = index\r\n \"\r\n [class.disabled]=\"!formGroupMap.get(variant.id)?.get('enabled')?.value\"\r\n >\r\n <ng-container *ngIf=\"formGroupMap.get(variant.id) as formGroup\" [formGroup]=\"formGroup\">\r\n <div class=\"card-block header-row\">\r\n <div class=\"details\">\r\n <vdr-title-input class=\"sku\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'catalog.sku' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n <vdr-title-input class=\"name\" [readonly]=\"!(updatePermission | hasPermission)\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [placeholder]=\"'common.name' | translate\"\r\n />\r\n </clr-input-container>\r\n </vdr-title-input>\r\n </div>\r\n <div class=\"right-controls\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"updatePermission\">\r\n <input type=\"checkbox\" clrToggle name=\"enabled\" formControlName=\"enabled\" />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"variant-body\">\r\n <div class=\"assets\">\r\n <vdr-assets\r\n [compact]=\"true\"\r\n [assets]=\"pendingAssetChanges[variant.id]?.assets || variant.assets\"\r\n [featuredAsset]=\"\r\n pendingAssetChanges[variant.id]?.featuredAsset || variant.featuredAsset\r\n \"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"onAssetChange(variant.id, $event)\"\r\n ></vdr-assets>\r\n </div>\r\n <div class=\"variant-form-inputs\">\r\n <div class=\"standard-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <div class=\"tax-category\">\r\n <clr-select-container\r\n *vdrIfPermissions=\"updatePermission; else taxCategoryLabel\"\r\n >\r\n <label>{{ 'catalog.tax-category' | translate }}</label>\r\n <select clrSelect name=\"options\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <ng-template #taxCategoryLabel>\r\n <label class=\"clr-control-label\">{{\r\n 'catalog.tax-category' | translate\r\n }}</label>\r\n <div class=\"tax-category-label\">\r\n {{ getTaxCategoryName(formGroup) }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"price\">\r\n <clr-input-container>\r\n <label>{{ 'catalog.price' | translate }}</label>\r\n <vdr-currency-input\r\n *ngIf=\"!channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n <vdr-currency-input\r\n *ngIf=\"channelPriceIncludesTax\"\r\n clrInput\r\n [currencyCode]=\"variant.currencyCode\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"priceWithTax\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n </div>\r\n <vdr-variant-price-detail\r\n [price]=\"formGroup.get('price')!.value\"\r\n [currencyCode]=\"variant.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax\"\r\n [taxCategoryId]=\"formGroup.get('taxCategoryId')!.value\"\r\n ></vdr-variant-price-detail>\r\n </div>\r\n <div class=\"variant-form-input-row\">\r\n <clr-select-container *vdrIfPermissions=\"updatePermission\">\r\n <label\r\n >{{ 'catalog.track-inventory' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.track-inventory-tooltip' | translate\"\r\n ></vdr-help-tooltip>\r\n </label>\r\n <select clrSelect name=\"options\" formControlName=\"trackInventory\">\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n <clr-input-container>\r\n <label\r\n >{{ 'catalog.stock-on-hand' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-on-hand-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <input\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n clrInput\r\n type=\"number\"\r\n [min]=\"getStockOnHandMinValue(formGroup)\"\r\n step=\"1\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"inventoryIsNotTracked(formGroup)\"\r\n />\r\n </clr-input-container>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-allocated' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-allocated-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ variant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\">\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.stock-saleable' | translate }}\r\n <vdr-help-tooltip\r\n [content]=\"'catalog.stock-saleable-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"value\">\r\n {{ getSaleableStockLevel(variant) }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"variant-form-input-row\">\r\n <div\r\n class=\"out-of-stock-threshold-wrapper\"\r\n [class.inventory-untracked]=\"inventoryIsNotTracked(formGroup)\"\r\n >\r\n <label class=\"clr-control-label\"\r\n >{{ 'catalog.out-of-stock-threshold' | translate\r\n }}<vdr-help-tooltip\r\n [content]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n ></vdr-help-tooltip\r\n ></label>\r\n <div class=\"flex\">\r\n <clr-input-container>\r\n <input\r\n clrInput\r\n type=\"number\"\r\n [formControl]=\"formGroup.get('outOfStockThreshold')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [vdrDisabled]=\"\r\n formGroup.get('useGlobalOutOfStockThreshold')?.value !==\r\n false || inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n </clr-input-container>\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermission | hasPermission) ||\r\n inventoryIsNotTracked(formGroup)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"custom-fields\">\r\n <div class=\"variant-form-input-row\">\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"formGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"options-facets\">\r\n <vdr-entity-info [entity]=\"variant\"></vdr-entity-info>\r\n <div *ngIf=\"variant.options.length\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort: 'groupId'\"\r\n [colorFrom]=\"optionGroupName(option.groupId)\"\r\n [invert]=\"true\"\r\n (iconClick)=\"editOption(option)\"\r\n [icon]=\"(updatePermission | hasPermission) && 'pencil'\"\r\n >\r\n <span class=\"option-group-name\">{{ optionGroupName(option.groupId) }}</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n <a [routerLink]=\"['./', 'options']\" class=\"btn btn-link btn-sm\"\r\n >{{ 'catalog.edit-options' | translate }}...</a\r\n >\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of existingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of pendingFacetValues(variant)\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermission | hasPermission\"\r\n (remove)=\"removeFacetValue(variant, facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"selectFacetValueClick.emit([variant.id])\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *vdrIfMultichannel>\r\n <div class=\"card-block\" *vdrIfDefaultChannelActive>\r\n <div class=\"flex channel-assignment\">\r\n <ng-container *ngFor=\"let channel of variant.channels\">\r\n <vdr-chip\r\n *ngIf=\"!isDefaultChannel(channel.code)\"\r\n icon=\"times-circle\"\r\n [title]=\"'catalog.remove-from-channel' | translate: { channelCode: channel.code }\"\r\n (iconClick)=\"\r\n removeFromChannel.emit({ channelId: channel.id, variant: variant })\r\n \"\r\n >\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel }}\r\n </vdr-chip>\r\n </ng-container>\r\n <button class=\"btn btn-sm\" (click)=\"assignToChannel.emit(variant)\">\r\n <clr-icon shape=\"layers\"></clr-icon>\r\n {{ 'catalog.assign-to-channel' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".with-selected{display:flex;min-height:52px;align-items:center;border:1px solid var(--color-component-border-100);border-radius:3px;padding:6px 18px}.with-selected vdr-select-toggle{margin-right:12px}.with-selected>label{margin-right:12px}.variant-container{transition:background-color .2s;min-height:330px}.variant-container.disabled{background-color:var(--color-component-bg-200)}.variant-container .header-row{display:flex;align-items:center;flex-wrap:wrap}.variant-container .variant-body{display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-body{flex-direction:row}}.variant-container .details{display:flex;flex-direction:column;flex:1;margin-right:12px}@media screen and (min-width: 768px){.variant-container .details{flex-direction:row;height:36px}}.variant-container .details .name{flex:1}.variant-container .details .name ::ng-deep .clr-control-container{width:100%}.variant-container .details .name ::ng-deep .clr-control-container input.clr-input{min-width:100%}.variant-container .details .sku{width:160px;margin-right:20px;flex:0}.variant-container .details ::ng-deep .name input{min-width:300px}.variant-container .right-controls{display:flex}.variant-container .tax-category-label{margin-top:3px}.variant-container .variant-form-inputs{flex:1;display:flex;flex-direction:column}@media screen and (min-width: 768px){.variant-container .variant-form-inputs{flex-direction:row}}.variant-container .variant-form-input-row{display:flex;flex-wrap:wrap}@media screen and (min-width: 768px){.variant-container .variant-form-input-row{margin:0 6px 8px 24px}}.variant-container .variant-form-input-row>*{margin-right:24px;margin-bottom:24px}.variant-container .track-inventory-toggle{margin-top:22px}.variant-container .clr-form-control{margin-top:0}.variant-container .facets{display:flex;flex-wrap:wrap;align-items:center}.variant-container .pricing{display:flex}.variant-container .pricing>div{margin-right:12px}.variant-container .option-group-name{color:var(--color-text-200);text-transform:uppercase;font-size:10px;margin-right:3px;height:11px}.variant-container .options-facets{display:flex;color:var(--color-grey-400)}.variant-container ::ng-deep .clr-control-container{width:100%}.channel-assignment{justify-content:flex-end;flex-wrap:wrap;max-height:110px;overflow-y:auto}.channel-assignment .btn{margin:6px 12px 6px 0}.out-of-stock-threshold-wrapper{display:flex;flex-direction:column}.out-of-stock-threshold-wrapper clr-toggle-wrapper{margin-left:24px}.inventory-untracked{opacity:.5}\n"] }]
|
|
190
196
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ModalService }, { type: i1.DataService }]; }, propDecorators: { formArray: [{
|
|
191
197
|
type: Input,
|
|
192
198
|
args: ['productVariantsFormArray']
|
|
@@ -223,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
|
|
|
223
229
|
}], updateProductOption: [{
|
|
224
230
|
type: Output
|
|
225
231
|
}] } });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnRzLWxpc3QvcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnRzLWxpc3QvcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFLSCxrQkFBa0IsRUFDbEIsVUFBVSxFQUdWLFVBQVUsR0FNYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7O0FBWTVILE1BQU0sT0FBTyw0QkFBNEI7SUE4QnJDLFlBQ1ksY0FBaUMsRUFDakMsWUFBMEIsRUFDMUIsV0FBd0I7UUFGeEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBckIxQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBQzdELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUcxQyxD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QWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUlHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIEZhY2V0VmFsdWVGcmFnbWVudCxcclxuICAgIEZhY2V0V2l0aFZhbHVlc0ZyYWdtZW50LFxyXG4gICAgZmxhdHRlbkZhY2V0VmFsdWVzLFxyXG4gICAgR2xvYmFsRmxhZyxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQcm9kdWN0RGV0YWlsRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0VmFyaWFudEZyYWdtZW50LFxyXG4gICAgVGF4Q2F0ZWdvcnksXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQ0hBTk5FTF9DT0RFIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXNzZXRDaGFuZ2UgfSBmcm9tICcuLi9hc3NldHMvYXNzZXRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25Db25maWcsIFNlbGVjdGVkQXNzZXRzLCBWYXJpYW50Rm9ybVZhbHVlIH0gZnJvbSAnLi4vcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwudHlwZXMnO1xyXG5pbXBvcnQgeyBVcGRhdGVQcm9kdWN0T3B0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBkYXRlLXByb2R1Y3Qtb3B0aW9uLWRpYWxvZy91cGRhdGUtcHJvZHVjdC1vcHRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhbnRBc3NldENoYW5nZSBleHRlbmRzIEFzc2V0Q2hhbmdlIHtcclxuICAgIHZhcmlhbnRJZDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb2R1Y3QtdmFyaWFudHMtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtdmFyaWFudHMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0VmFyaWFudHNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoJ3Byb2R1Y3RWYXJpYW50c0Zvcm1BcnJheScpIGZvcm1BcnJheTogRm9ybUFycmF5O1xyXG4gICAgQElucHV0KCkgdmFyaWFudHM6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnRbXTtcclxuICAgIEBJbnB1dCgpIHBhZ2luYXRpb25Db25maWc6IFBhZ2luYXRpb25Db25maWc7XHJcbiAgICBASW5wdXQoKSBjaGFubmVsUHJpY2VJbmNsdWRlc1RheDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHRheENhdGVnb3JpZXM6IFRheENhdGVnb3J5W107XHJcbiAgICBASW5wdXQoKSBmYWNldHM6IEZhY2V0V2l0aFZhbHVlc0ZyYWdtZW50W107XHJcbiAgICBASW5wdXQoKSBvcHRpb25Hcm91cHM6IFByb2R1Y3REZXRhaWxGcmFnbWVudFsnb3B0aW9uR3JvdXBzJ107XHJcbiAgICBASW5wdXQoKSBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBASW5wdXQoKSBjdXN0b21PcHRpb25GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBASW5wdXQoKSBhY3RpdmVMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlO1xyXG4gICAgQElucHV0KCkgcGVuZGluZ0Fzc2V0Q2hhbmdlczogeyBbdmFyaWFudElkOiBzdHJpbmddOiBTZWxlY3RlZEFzc2V0cyB9O1xyXG4gICAgQE91dHB1dCgpIGFzc2lnblRvQ2hhbm5lbCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdFZhcmlhbnRGcmFnbWVudD4oKTtcclxuICAgIEBPdXRwdXQoKSByZW1vdmVGcm9tQ2hhbm5lbCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgICAgIGNoYW5uZWxJZDogc3RyaW5nO1xyXG4gICAgICAgIHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQ7XHJcbiAgICB9PigpO1xyXG4gICAgQE91dHB1dCgpIGFzc2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxWYXJpYW50QXNzZXRDaGFuZ2U+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcclxuICAgIEBPdXRwdXQoKSBzZWxlY3RGYWNldFZhbHVlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xyXG4gICAgQE91dHB1dCgpIHVwZGF0ZVByb2R1Y3RPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCAmIHsgYXV0b1VwZGF0ZTogYm9vbGVhbiB9PigpO1xyXG4gICAgc2VsZWN0ZWRWYXJpYW50SWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9ybUdyb3VwTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZvcm1Hcm91cD4oKTtcclxuICAgIEdsb2JhbEZsYWcgPSBHbG9iYWxGbGFnO1xyXG4gICAgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW47XHJcbiAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBudW1iZXI7XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcclxuICAgIHByaXZhdGUgZmFjZXRWYWx1ZXM6IEZhY2V0VmFsdWVGcmFnbWVudFtdO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3MuZ2V0R2xvYmFsU2V0dGluZ3MoJ2NhY2hlLWZpcnN0Jykuc2luZ2xlJC5zdWJzY3JpYmUoKHsgZ2xvYmFsU2V0dGluZ3MgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbFRyYWNrSW52ZW50b3J5ID0gZ2xvYmFsU2V0dGluZ3MudHJhY2tJbnZlbnRvcnk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCA9IGdsb2JhbFNldHRpbmdzLm91dE9mU3RvY2tUaHJlc2hvbGQ7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUFycmF5LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHZhbHVlLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUdyb3VwTWFwKCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmJ1aWxkRm9ybUdyb3VwTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGlmICgnZmFjZXRzJyBpbiBjaGFuZ2VzICYmICEhY2hhbmdlc1snZmFjZXRzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMgPSBmbGF0dGVuRmFjZXRWYWx1ZXModGhpcy5mYWNldHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNEZWZhdWx0Q2hhbm5lbChjaGFubmVsQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGNoYW5uZWxDb2RlID09PSBERUZBVUxUX0NIQU5ORUxfQ09ERTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogUHJvZHVjdFZhcmlhbnRGcmFnbWVudCkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIGludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrSW52ZW50b3J5ID0gZm9ybUdyb3VwLmdldCgndHJhY2tJbnZlbnRvcnknKT8udmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuRkFMU0UgfHxcclxuICAgICAgICAgICAgKHRyYWNrSW52ZW50b3J5ID09PSBHbG9iYWxGbGFnLklOSEVSSVQgJiYgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9PT0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYXhDYXRlZ29yeU5hbWUoZ3JvdXA6IEZvcm1Hcm91cCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChbJ3RheENhdGVnb3J5SWQnXSk7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy50YXhDYXRlZ29yaWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy50YXhDYXRlZ29yaWVzLmZpbmQodCA9PiB0LmlkID09PSBjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubmFtZSA6ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2FsZWFibGVTdG9ja0xldmVsKHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVPdXRPZlN0b2NrVGhyZXNob2xkID0gdmFyaWFudC51c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXHJcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXHJcbiAgICAgICAgICAgIDogdmFyaWFudC5vdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrT25IYW5kIC0gdmFyaWFudC5zdG9ja0FsbG9jYXRlZCAtIGVmZmVjdGl2ZU91dE9mU3RvY2tUaHJlc2hvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXJlQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy52YXJpYW50cyAmJiB0aGlzLnNlbGVjdGVkVmFyaWFudElkcy5sZW5ndGggPT09IHRoaXMudmFyaWFudHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXNzZXRDaGFuZ2UodmFyaWFudElkOiBzdHJpbmcsIGV2ZW50OiBBc3NldENoYW5nZSkge1xyXG4gICAgICAgIHRoaXMuYXNzZXRDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgIHZhcmlhbnRJZCxcclxuICAgICAgICAgICAgLi4uZXZlbnQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhcmlhbnRzLmZpbmRJbmRleCh2ID0+IHYuaWQgPT09IHZhcmlhbnRJZCk7XHJcbiAgICAgICAgdGhpcy5mb3JtQXJyYXkuYXQoaW5kZXgpLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2VsZWN0QWxsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFyZUFsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMgPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudElkcyA9IHRoaXMudmFyaWFudHMubWFwKHYgPT4gdi5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdFZhcmlhbnQodmFyaWFudElkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRWYXJpYW50SWRzLmluZGV4T2YodmFyaWFudElkKTtcclxuICAgICAgICBpZiAoLTEgPCBpbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudElkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYXJpYW50SWRzLnB1c2godmFyaWFudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFyaWFudElkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9uR3JvdXBOYW1lKG9wdGlvbkdyb3VwSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLm9wdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gb3B0aW9uR3JvdXBJZCk7XHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID1cclxuICAgICAgICAgICAgICAgIGdyb3VwPy50cmFuc2xhdGlvbnMuZmluZCh0ID0+IHQubGFuZ3VhZ2VDb2RlID09PSB0aGlzLmFjdGl2ZUxhbmd1YWdlKSA/P1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAudHJhbnNsYXRpb25zWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb24ubmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3B0aW9uTmFtZShvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID1cclxuICAgICAgICAgICAgb3B0aW9uLnRyYW5zbGF0aW9ucy5maW5kKHQgPT4gdC5sYW5ndWFnZUNvZGUgPT09IHRoaXMuYWN0aXZlTGFuZ3VhZ2UpID8/IG9wdGlvbi50cmFuc2xhdGlvbnNbMF07XHJcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGVuZGluZ0ZhY2V0VmFsdWVzKHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5mYWNldHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZHMgPSB0aGlzLmdldEZhY2V0VmFsdWVJZHModmFyaWFudC5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRGYWNldFZhbHVlSWRzID0gdmFyaWFudC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybUZhY2V0VmFsdWVJZHNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiAhdmFyaWFudEZhY2V0VmFsdWVJZHMuaW5jbHVkZXMoeCkpXHJcbiAgICAgICAgICAgICAgICAubWFwKGlkID0+IHRoaXMuZmFjZXRWYWx1ZXMuZmluZChmdiA9PiBmdi5pZCA9PT0gaWQpKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RpbmdGYWNldFZhbHVlcyh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZHMgPSB0aGlzLmdldEZhY2V0VmFsdWVJZHModmFyaWFudC5pZCk7XHJcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gWy4uLmZvcm1GYWNldFZhbHVlSWRzXS5maWx0ZXIoeCA9PlxyXG4gICAgICAgICAgICB2YXJpYW50LmZhY2V0VmFsdWVzLm1hcChmdiA9PiBmdi5pZCkuaW5jbHVkZXMoeCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIC5tYXAoaWQgPT4gdmFyaWFudC5mYWNldFZhbHVlcy5maW5kKGZ2ID0+IGZ2LmlkID09PSBpZCkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYWNldFZhbHVlKHZhcmlhbnQ6IFByb2R1Y3RWYXJpYW50RnJhZ21lbnQsIGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBNYXAuZ2V0KHZhcmlhbnQuaWQpO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSAoZm9ybUdyb3VwLnZhbHVlIGFzIFZhcmlhbnRGb3JtVmFsdWUpLmZhY2V0VmFsdWVJZHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgICAgZmFjZXRWYWx1ZUlkczogbmV3VmFsdWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3JtR3JvdXAubWFya0FzRGlydHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYXJpYW50U2VsZWN0ZWQodmFyaWFudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gLTEgPCB0aGlzLnNlbGVjdGVkVmFyaWFudElkcy5pbmRleE9mKHZhcmlhbnRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdE9wdGlvbihvcHRpb246IFByb2R1Y3RWYXJpYW50RnJhZ21lbnRbJ29wdGlvbnMnXVtudW1iZXJdKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoVXBkYXRlUHJvZHVjdE9wdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcclxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RPcHRpb246IG9wdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVMYW5ndWFnZTogdGhpcy5hY3RpdmVMYW5ndWFnZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuY3VzdG9tT3B0aW9uRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvZHVjdE9wdGlvbi5lbWl0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRGb3JtR3JvdXBNYXAoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBNYXAuY2xlYXIoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xHcm91cCBvZiB0aGlzLmZvcm1BcnJheS5jb250cm9scykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cE1hcC5zZXQoY29udHJvbEdyb3VwLnZhbHVlLmlkLCBjb250cm9sR3JvdXAgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZhY2V0VmFsdWVJZHMoaWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCBmb3JtVmFsdWU6IFZhcmlhbnRGb3JtVmFsdWUgPSB0aGlzLmZvcm1Hcm91cE1hcC5nZXQoaWQpPy52YWx1ZTtcclxuICAgICAgICByZXR1cm4gZm9ybVZhbHVlLmZhY2V0VmFsdWVJZHM7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInZhcmlhbnRzLWxpc3RcIj5cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInZhcmlhbnQtY29udGFpbmVyIGNhcmRcIlxyXG4gICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICBsZXQgdmFyaWFudCBvZiB2YXJpYW50cyB8IHBhZ2luYXRlOiBwYWdpbmF0aW9uQ29uZmlnIHx8IHsgaXRlbXNQZXJQYWdlOiAxMCwgY3VycmVudFBhZ2U6IDEgfTtcclxuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkO1xyXG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgICAgXCJcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWZvcm1Hcm91cE1hcC5nZXQodmFyaWFudC5pZCk/LmdldCgnZW5hYmxlZCcpPy52YWx1ZVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cE1hcC5nZXQodmFyaWFudC5pZCkgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLXRpdGxlLWlucHV0IGNsYXNzPVwic2t1XCIgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xySW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInY2F0YWxvZy5za3UnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci10aXRsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLXRpdGxlLWlucHV0IGNsYXNzPVwibmFtZVwiIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLXRpdGxlLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xyVG9nZ2xlIG5hbWU9XCJlbmFibGVkXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY29tbW9uLmVuYWJsZWQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItYXNzZXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwicGVuZGluZ0Fzc2V0Q2hhbmdlc1t2YXJpYW50LmlkXT8uYXNzZXRzIHx8IHZhcmlhbnQuYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdBc3NldENoYW5nZXNbdmFyaWFudC5pZF0/LmZlYXR1cmVkQXNzZXQgfHwgdmFyaWFudC5mZWF0dXJlZEFzc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VwZGF0ZVBlcm1pc3Npb25zXT1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkFzc2V0Q2hhbmdlKHZhcmlhbnQuaWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItYXNzZXRzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWZvcm0taW5wdXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGFuZGFyZC1maWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWZvcm0taW5wdXQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRheC1jYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLXNlbGVjdC1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvbjsgZWxzZSB0YXhDYXRlZ29yeUxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLnRheC1jYXRlZ29yeScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbHJTZWxlY3QgbmFtZT1cIm9wdGlvbnNcIiBmb3JtQ29udHJvbE5hbWU9XCJ0YXhDYXRlZ29yeUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGF4Q2F0ZWdvcnkgb2YgdGF4Q2F0ZWdvcmllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0YXhDYXRlZ29yeS5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0YXhDYXRlZ29yeS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItc2VsZWN0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0YXhDYXRlZ29yeUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2xyLWNvbnRyb2wtbGFiZWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLnRheC1jYXRlZ29yeScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXgtY2F0ZWdvcnktbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRUYXhDYXRlZ29yeU5hbWUoZm9ybUdyb3VwKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLnByaWNlJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJ2YXJpYW50LmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGFubmVsUHJpY2VJbmNsdWRlc1RheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xySW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cInZhcmlhbnQuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlV2l0aFRheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXZhcmlhbnQtcHJpY2UtZGV0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmljZV09XCJmb3JtR3JvdXAuZ2V0KCdwcmljZScpIS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwidmFyaWFudC5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VJbmNsdWRlc1RheF09XCJjaGFubmVsUHJpY2VJbmNsdWRlc1RheFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXhDYXRlZ29yeUlkXT1cImZvcm1Hcm91cC5nZXQoJ3RheENhdGVnb3J5SWQnKSEudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci12YXJpYW50LXByaWNlLWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhcmlhbnQtZm9ybS1pbnB1dC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLXNlbGVjdC1jb250YWluZXIgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1oZWxwLXRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xyU2VsZWN0IG5hbWU9XCJvcHRpb25zXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJhY2tJbnZlbnRvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuVFJVRVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS10cnVlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLkZBTFNFXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LWZhbHNlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLklOSEVSSVRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktaW5oZXJpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1zZWxlY3QtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnY2F0YWxvZy5zdG9jay1vbi1oYW5kJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oZWxwLXRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCInY2F0YWxvZy5zdG9jay1vbi1oYW5kLXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1oZWxwLXRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmludmVudG9yeS11bnRyYWNrZWRdPVwiaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xySW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdG9ja09uSGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cImludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaW52ZW50b3J5LXVudHJhY2tlZF09XCJpbnZlbnRvcnlJc05vdFRyYWNrZWQoZm9ybUdyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjbHItY29udHJvbC1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2NhdGFsb2cuc3RvY2stYWxsb2NhdGVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oZWxwLXRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCInY2F0YWxvZy5zdG9jay1hbGxvY2F0ZWQtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYW50LnN0b2NrQWxsb2NhdGVkIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmludmVudG9yeS11bnRyYWNrZWRdPVwiaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2xyLWNvbnRyb2wtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnN0b2NrLXNhbGVhYmxlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oZWxwLXRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCInY2F0YWxvZy5zdG9jay1zYWxlYWJsZS10b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFNhbGVhYmxlU3RvY2tMZXZlbCh2YXJpYW50KSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWZvcm0taW5wdXQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm91dC1vZi1zdG9jay10aHJlc2hvbGQtd3JhcHBlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZlbnRvcnktdW50cmFja2VkXT1cImludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNsci1jb250cm9sLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnY2F0YWxvZy5vdXQtb2Ytc3RvY2stdGhyZXNob2xkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08dmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIidjYXRhbG9nLm91dC1vZi1zdG9jay10aHJlc2hvbGQtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoJ291dE9mU3RvY2tUaHJlc2hvbGQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3VzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQnKT8udmFsdWUgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgfHwgaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItaW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlbnRvcnlJc05vdFRyYWNrZWQoZm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnY2F0YWxvZy51c2UtZ2xvYmFsLXZhbHVlJyB8IHRyYW5zbGF0ZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pPC9sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1maWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWZvcm0taW5wdXQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdFZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImZvcm1Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1mYWNldHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwidmFyaWFudFwiPjwvdmRyLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYW50Lm9wdGlvbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZhcmlhbnQub3B0aW9ucyB8IHNvcnQ6ICdncm91cElkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yRnJvbV09XCJvcHRpb25Hcm91cE5hbWUob3B0aW9uLmdyb3VwSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW52ZXJ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xpY2spPVwiZWRpdE9wdGlvbihvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCIodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pICYmICdwZW5jaWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1ncm91cC1uYW1lXCI+e3sgb3B0aW9uR3JvdXBOYW1lKG9wdGlvbi5ncm91cElkKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25OYW1lKG9wdGlvbikgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy4vJywgJ29wdGlvbnMnXVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLmVkaXQtb3B0aW9ucycgfCB0cmFuc2xhdGUgfX0uLi48L2FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc3BhY2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhY2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZhY2V0LXZhbHVlLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYWNldFZhbHVlIG9mIGV4aXN0aW5nRmFjZXRWYWx1ZXModmFyaWFudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZhY2V0VmFsdWVdPVwiZmFjZXRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmFjZXRWYWx1ZSh2YXJpYW50LCBmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1mYWNldC12YWx1ZS1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZhY2V0LXZhbHVlLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYWNldFZhbHVlIG9mIHBlbmRpbmdGYWNldFZhbHVlcyh2YXJpYW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmFjZXRWYWx1ZV09XCJmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGYWNldFZhbHVlKHZhcmlhbnQsIGZhY2V0VmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZhY2V0LXZhbHVlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RmFjZXRWYWx1ZUNsaWNrLmVtaXQoW3ZhcmlhbnQuaWRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLWZhY2V0cycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnZkcklmTXVsdGljaGFubmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIiAqdmRySWZEZWZhdWx0Q2hhbm5lbEFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjaGFubmVsLWFzc2lnbm1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hhbm5lbCBvZiB2YXJpYW50LmNoYW5uZWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWwuY29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0aW1lcy1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY2F0YWxvZy5yZW1vdmUtZnJvbS1jaGFubmVsJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljb25DbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbUNoYW5uZWwuZW1pdCh7IGNoYW5uZWxJZDogY2hhbm5lbC5pZCwgdmFyaWFudDogdmFyaWFudCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGFubmVsLWJhZGdlIFtjaGFubmVsQ29kZV09XCJjaGFubmVsLmNvZGVcIj48L3Zkci1jaGFubmVsLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoYW5uZWwuY29kZSB8IGNoYW5uZWxDb2RlVG9MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgKGNsaWNrKT1cImFzc2lnblRvQ2hhbm5lbC5lbWl0KHZhcmlhbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJsYXllcnNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYXNzaWduLXRvLWNoYW5uZWwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnRzLWxpc3QvcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnRzLWxpc3QvcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFLSCxrQkFBa0IsRUFDbEIsVUFBVSxFQUdWLFVBQVUsR0FNYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7O0FBWTVILE1BQU0sT0FBTyw0QkFBNEI7SUE4QnJDLFlBQ1ksY0FBaUMsRUFDakMsWUFBMEIsRUFDMUIsV0FBd0I7UUFGeEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBckIxQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBQzdELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUcxQyxDQUFDO1FBQ0ssZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUNyRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDL0MsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNyRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBc0QsQ0FBQztRQUN2Ryx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFDbEMsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUM1QyxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBR2YscUJBQWdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQVE5RSxDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDaEcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFDMUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXBHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7YUFDdEIsSUFBSSxDQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDMUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLG9CQUFvQixFQUFFLENBQ3pCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNULENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBbUI7UUFDaEMsT0FBTyxXQUFXLEtBQUssb0JBQW9CLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBNEI7UUFDakQsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFvQjtRQUN0QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzlELE9BQU8sQ0FDSCxjQUFjLEtBQUssVUFBVSxDQUFDLEtBQUs7WUFDbkMsQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxDQUFDLENBQ2pGLENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBZ0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25FLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDbEM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFrQjtRQUNyQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRSxLQUFLO1lBQ25GLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCO1lBQ2hDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2hELE9BQU8sNEJBQTRCLENBQUM7SUFDeEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQStCO1FBQ2pELE1BQU0sNEJBQTRCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QjtZQUNyRSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QjtZQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLDRCQUE0QixDQUFDO0lBQ3ZGLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBaUIsRUFBRSxLQUFrQjtRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNsQixTQUFTO1lBQ1QsR0FBRyxLQUFLO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztTQUNoQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQWlCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxlQUFlLENBQUMsYUFBcUI7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxXQUFXLEdBQ2IsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3JFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUE2QjtRQUNwQyxNQUFNLFdBQVcsR0FDYixNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUErQjtRQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRSxPQUFPLGlCQUFpQjtpQkFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDcEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBK0I7UUFDL0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNuRCxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ25ELENBQUM7UUFDRixPQUFPLFlBQVk7YUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDdkQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQStCLEVBQUUsWUFBb0I7UUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksU0FBUyxFQUFFO1lBQ1gsTUFBTSxRQUFRLEdBQUksU0FBUyxDQUFDLEtBQTBCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDdkUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUM1QixDQUFDO1lBQ0YsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDakIsYUFBYSxFQUFFLFFBQVE7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQWlCO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWlEO1FBQ3hELElBQUksQ0FBQyxZQUFZO2FBQ1osYUFBYSxDQUFDLGtDQUFrQyxFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFO2dCQUNKLGFBQWEsRUFBRSxNQUFNO2dCQUNyQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCO2FBQ3hDO1NBQ0osQ0FBQzthQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUF5QixDQUFDLENBQUM7U0FDM0U7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxFQUFVO1FBQy9CLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDckUsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQ25DLENBQUM7O3lIQWxPUSw0QkFBNEI7NkdBQTVCLDRCQUE0QixtdUJDaER6Qyx5MmxCQThTQTsyRkQ5UGEsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNJLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTs2SkFHWixTQUFTO3NCQUEzQyxLQUFLO3VCQUFDLDBCQUEwQjtnQkFDeEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBSUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRmFjZXRWYWx1ZUZyYWdtZW50LFxyXG4gICAgRmFjZXRXaXRoVmFsdWVzRnJhZ21lbnQsXHJcbiAgICBmbGF0dGVuRmFjZXRWYWx1ZXMsXHJcbiAgICBHbG9iYWxGbGFnLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFByb2R1Y3REZXRhaWxGcmFnbWVudCxcclxuICAgIFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgIFByb2R1Y3RWYXJpYW50RnJhZ21lbnQsXHJcbiAgICBUYXhDYXRlZ29yeSxcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgREVGQVVMVF9DSEFOTkVMX0NPREUgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBBc3NldENoYW5nZSB9IGZyb20gJy4uL2Fzc2V0cy9hc3NldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbmZpZywgU2VsZWN0ZWRBc3NldHMsIFZhcmlhbnRGb3JtVmFsdWUgfSBmcm9tICcuLi9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC50eXBlcyc7XHJcbmltcG9ydCB7IFVwZGF0ZVByb2R1Y3RPcHRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi91cGRhdGUtcHJvZHVjdC1vcHRpb24tZGlhbG9nL3VwZGF0ZS1wcm9kdWN0LW9wdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFudEFzc2V0Q2hhbmdlIGV4dGVuZHMgQXNzZXRDaGFuZ2Uge1xyXG4gICAgdmFyaWFudElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC12YXJpYW50cy1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXZhcmlhbnRzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC12YXJpYW50cy1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RWYXJpYW50c0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgncHJvZHVjdFZhcmlhbnRzRm9ybUFycmF5JykgZm9ybUFycmF5OiBGb3JtQXJyYXk7XHJcbiAgICBASW5wdXQoKSB2YXJpYW50czogUHJvZHVjdFZhcmlhbnRGcmFnbWVudFtdO1xyXG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkNvbmZpZzogUGFnaW5hdGlvbkNvbmZpZztcclxuICAgIEBJbnB1dCgpIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGF4Q2F0ZWdvcmllczogVGF4Q2F0ZWdvcnlbXTtcclxuICAgIEBJbnB1dCgpIGZhY2V0czogRmFjZXRXaXRoVmFsdWVzRnJhZ21lbnRbXTtcclxuICAgIEBJbnB1dCgpIG9wdGlvbkdyb3VwczogUHJvZHVjdERldGFpbEZyYWdtZW50WydvcHRpb25Hcm91cHMnXTtcclxuICAgIEBJbnB1dCgpIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIEBJbnB1dCgpIGN1c3RvbU9wdGlvbkZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIEBJbnB1dCgpIGFjdGl2ZUxhbmd1YWdlOiBMYW5ndWFnZUNvZGU7XHJcbiAgICBASW5wdXQoKSBwZW5kaW5nQXNzZXRDaGFuZ2VzOiB7IFt2YXJpYW50SWQ6IHN0cmluZ106IFNlbGVjdGVkQXNzZXRzIH07XHJcbiAgICBAT3V0cHV0KCkgYXNzaWduVG9DaGFubmVsID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0VmFyaWFudEZyYWdtZW50PigpO1xyXG4gICAgQE91dHB1dCgpIHJlbW92ZUZyb21DaGFubmVsID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICAgICAgY2hhbm5lbElkOiBzdHJpbmc7XHJcbiAgICAgICAgdmFyaWFudDogUHJvZHVjdFZhcmlhbnRGcmFnbWVudDtcclxuICAgIH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgYXNzZXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZhcmlhbnRBc3NldENoYW5nZT4oKTtcclxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdEZhY2V0VmFsdWVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcbiAgICBAT3V0cHV0KCkgdXBkYXRlUHJvZHVjdE9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8VXBkYXRlUHJvZHVjdE9wdGlvbklucHV0ICYgeyBhdXRvVXBkYXRlOiBib29sZWFuIH0+KCk7XHJcbiAgICBzZWxlY3RlZFZhcmlhbnRJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3JtR3JvdXBNYXAgPSBuZXcgTWFwPHN0cmluZywgRm9ybUdyb3VwPigpO1xyXG4gICAgR2xvYmFsRmxhZyA9IEdsb2JhbEZsYWc7XHJcbiAgICBnbG9iYWxUcmFja0ludmVudG9yeTogYm9vbGVhbjtcclxuICAgIGdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQ6IG51bWJlcjtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG4gICAgcHJpdmF0ZSBmYWNldFZhbHVlczogRmFjZXRWYWx1ZUZyYWdtZW50W107XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5zZXR0aW5ncy5nZXRHbG9iYWxTZXR0aW5ncygnY2FjaGUtZmlyc3QnKS5zaW5nbGUkLnN1YnNjcmliZSgoeyBnbG9iYWxTZXR0aW5ncyB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsVHJhY2tJbnZlbnRvcnkgPSBnbG9iYWxTZXR0aW5ncy50cmFja0ludmVudG9yeTtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkID0gZ2xvYmFsU2V0dGluZ3Mub3V0T2ZTdG9ja1RocmVzaG9sZDtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUFycmF5LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQXJyYXkudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4gdmFsdWUubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtR3JvdXBNYXAoKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVpbGRGb3JtR3JvdXBNYXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKCdmYWNldHMnIGluIGNoYW5nZXMgJiYgISFjaGFuZ2VzWydmYWNldHMnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mYWNldFZhbHVlcyA9IGZsYXR0ZW5GYWNldFZhbHVlcyh0aGlzLmZhY2V0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0RlZmF1bHRDaGFubmVsKGNoYW5uZWxDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gY2hhbm5lbENvZGUgPT09IERFRkFVTFRfQ0hBTk5FTF9DT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tJbnZlbnRvcnkgPSBmb3JtR3JvdXAuZ2V0KCd0cmFja0ludmVudG9yeScpPy52YWx1ZTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0cmFja0ludmVudG9yeSA9PT0gR2xvYmFsRmxhZy5GQUxTRSB8fFxyXG4gICAgICAgICAgICAodHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuSU5IRVJJVCAmJiB0aGlzLmdsb2JhbFRyYWNrSW52ZW50b3J5ID09PSBmYWxzZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRheENhdGVnb3J5TmFtZShncm91cDogRm9ybUdyb3VwKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KFsndGF4Q2F0ZWdvcnlJZCddKTtcclxuICAgICAgICBpZiAoY29udHJvbCAmJiB0aGlzLnRheENhdGVnb3JpZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnRheENhdGVnb3JpZXMuZmluZCh0ID0+IHQuaWQgPT09IGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5uYW1lIDogJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdG9ja09uSGFuZE1pblZhbHVlKHZhcmlhbnQ6IEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZU91dE9mU3RvY2tUaHJlc2hvbGQgPSB2YXJpYW50LmdldCgndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcpPy52YWx1ZVxyXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFxyXG4gICAgICAgICAgICA6IHZhcmlhbnQuZ2V0KCdvdXRPZlN0b2NrVGhyZXNob2xkJyk/LnZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlZmZlY3RpdmVPdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNhbGVhYmxlU3RvY2tMZXZlbCh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlT3V0T2ZTdG9ja1RocmVzaG9sZCA9IHZhcmlhbnQudXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFxyXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFxyXG4gICAgICAgICAgICA6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZDtcclxuICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9ja09uSGFuZCAtIHZhcmlhbnQuc3RvY2tBbGxvY2F0ZWQgLSBlZmZlY3RpdmVPdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGFyZUFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMudmFyaWFudHMgJiYgdGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMubGVuZ3RoID09PSB0aGlzLnZhcmlhbnRzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBvbkFzc2V0Q2hhbmdlKHZhcmlhbnRJZDogc3RyaW5nLCBldmVudDogQXNzZXRDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICB2YXJpYW50SWQsXHJcbiAgICAgICAgICAgIC4uLmV2ZW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YXJpYW50cy5maW5kSW5kZXgodiA9PiB2LmlkID09PSB2YXJpYW50SWQpO1xyXG4gICAgICAgIHRoaXMuZm9ybUFycmF5LmF0KGluZGV4KS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEFsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hcmVBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYXJpYW50SWRzID0gW107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMgPSB0aGlzLnZhcmlhbnRzLm1hcCh2ID0+IHYuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYXJpYW50SWRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RWYXJpYW50KHZhcmlhbnRJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkVmFyaWFudElkcy5pbmRleE9mKHZhcmlhbnRJZCk7XHJcbiAgICAgICAgaWYgKC0xIDwgaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudElkcy5wdXNoKHZhcmlhbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbkdyb3VwTmFtZShvcHRpb25Hcm91cElkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5vcHRpb25Hcm91cHMuZmluZChnID0+IGcuaWQgPT09IG9wdGlvbkdyb3VwSWQpO1xyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XHJcbiAgICAgICAgICAgICAgICBncm91cD8udHJhbnNsYXRpb25zLmZpbmQodCA9PiB0Lmxhbmd1YWdlQ29kZSA9PT0gdGhpcy5hY3RpdmVMYW5ndWFnZSkgPz9cclxuICAgICAgICAgICAgICAgIGdyb3VwLnRyYW5zbGF0aW9uc1swXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbk5hbWUob3B0aW9uOiBQcm9kdWN0T3B0aW9uRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XHJcbiAgICAgICAgICAgIG9wdGlvbi50cmFuc2xhdGlvbnMuZmluZCh0ID0+IHQubGFuZ3VhZ2VDb2RlID09PSB0aGlzLmFjdGl2ZUxhbmd1YWdlKSA/PyBvcHRpb24udHJhbnNsYXRpb25zWzBdO1xyXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGlvbi5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHBlbmRpbmdGYWNldFZhbHVlcyh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmFjZXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GYWNldFZhbHVlSWRzID0gdGhpcy5nZXRGYWNldFZhbHVlSWRzKHZhcmlhbnQuaWQpO1xyXG4gICAgICAgICAgICBjb25zdCB2YXJpYW50RmFjZXRWYWx1ZUlkcyA9IHZhcmlhbnQuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1GYWNldFZhbHVlSWRzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4gIXZhcmlhbnRGYWNldFZhbHVlSWRzLmluY2x1ZGVzKHgpKVxyXG4gICAgICAgICAgICAgICAgLm1hcChpZCA9PiB0aGlzLmZhY2V0VmFsdWVzLmZpbmQoZnYgPT4gZnYuaWQgPT09IGlkKSlcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4aXN0aW5nRmFjZXRWYWx1ZXModmFyaWFudDogUHJvZHVjdFZhcmlhbnRGcmFnbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1GYWNldFZhbHVlSWRzID0gdGhpcy5nZXRGYWNldFZhbHVlSWRzKHZhcmlhbnQuaWQpO1xyXG4gICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IFsuLi5mb3JtRmFjZXRWYWx1ZUlkc10uZmlsdGVyKHggPT5cclxuICAgICAgICAgICAgdmFyaWFudC5mYWNldFZhbHVlcy5tYXAoZnYgPT4gZnYuaWQpLmluY2x1ZGVzKHgpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblxyXG4gICAgICAgICAgICAubWFwKGlkID0+IHZhcmlhbnQuZmFjZXRWYWx1ZXMuZmluZChmdiA9PiBmdi5pZCA9PT0gaWQpKVxyXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRmFjZXRWYWx1ZSh2YXJpYW50OiBQcm9kdWN0VmFyaWFudEZyYWdtZW50LCBmYWNldFZhbHVlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwTWFwLmdldCh2YXJpYW50LmlkKTtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gKGZvcm1Hcm91cC52YWx1ZSBhcyBWYXJpYW50Rm9ybVZhbHVlKS5mYWNldFZhbHVlSWRzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIGlkID0+IGlkICE9PSBmYWNldFZhbHVlSWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZm9ybUdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzVmFyaWFudFNlbGVjdGVkKHZhcmlhbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIC0xIDwgdGhpcy5zZWxlY3RlZFZhcmlhbnRJZHMuaW5kZXhPZih2YXJpYW50SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXRPcHRpb24ob3B0aW9uOiBQcm9kdWN0VmFyaWFudEZyYWdtZW50WydvcHRpb25zJ11bbnVtYmVyXSkge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KFVwZGF0ZVByb2R1Y3RPcHRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICdtZCcsXHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0T3B0aW9uOiBvcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlTGFuZ3VhZ2U6IHRoaXMuYWN0aXZlTGFuZ3VhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmN1c3RvbU9wdGlvbkZpZWxkcyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2R1Y3RPcHRpb24uZW1pdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRm9ybUdyb3VwTWFwKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sR3JvdXAgb2YgdGhpcy5mb3JtQXJyYXkuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBNYXAuc2V0KGNvbnRyb2xHcm91cC52YWx1ZS5pZCwgY29udHJvbEdyb3VwIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGYWNldFZhbHVlSWRzKGlkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlOiBWYXJpYW50Rm9ybVZhbHVlID0gdGhpcy5mb3JtR3JvdXBNYXAuZ2V0KGlkKT8udmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZS5mYWNldFZhbHVlSWRzO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ2YXJpYW50cy1saXN0XCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ2YXJpYW50LWNvbnRhaW5lciBjYXJkXCJcclxuICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgbGV0IHZhcmlhbnQgb2YgdmFyaWFudHMgfCBwYWdpbmF0ZTogcGFnaW5hdGlvbkNvbmZpZyB8fCB7IGl0ZW1zUGVyUGFnZTogMTAsIGN1cnJlbnRQYWdlOiAxIH07XHJcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZDtcclxuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFmb3JtR3JvdXBNYXAuZ2V0KHZhcmlhbnQuaWQpPy5nZXQoJ2VuYWJsZWQnKT8udmFsdWVcIlxyXG4gICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtR3JvdXBNYXAuZ2V0KHZhcmlhbnQuaWQpIGFzIGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIGhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci10aXRsZS1pbnB1dCBjbGFzcz1cInNrdVwiIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NhdGFsb2cuc2t1JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItdGl0bGUtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci10aXRsZS1pbnB1dCBjbGFzcz1cIm5hbWVcIiBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci10aXRsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlciAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsclRvZ2dsZSBuYW1lPVwiZW5hYmxlZFwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFyaWFudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXNzZXRzXT1cInBlbmRpbmdBc3NldENoYW5nZXNbdmFyaWFudC5pZF0/LmFzc2V0cyB8fCB2YXJpYW50LmFzc2V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmVhdHVyZWRBc3NldF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nQXNzZXRDaGFuZ2VzW3ZhcmlhbnQuaWRdPy5mZWF0dXJlZEFzc2V0IHx8IHZhcmlhbnQuZmVhdHVyZWRBc3NldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cGRhdGVQZXJtaXNzaW9uc109XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Bc3NldENoYW5nZSh2YXJpYW50LmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWFzc2V0cz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFyaWFudC1mb3JtLWlucHV0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhbmRhcmQtZmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFyaWFudC1mb3JtLWlucHV0LXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXgtY2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1zZWxlY3QtY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb247IGVsc2UgdGF4Q2F0ZWdvcnlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy50YXgtY2F0ZWdvcnknIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xyU2VsZWN0IG5hbWU9XCJvcHRpb25zXCIgZm9ybUNvbnRyb2xOYW1lPVwidGF4Q2F0ZWdvcnlJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRheENhdGVnb3J5IG9mIHRheENhdGVnb3JpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGF4Q2F0ZWdvcnkuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGF4Q2F0ZWdvcnkubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLXNlbGVjdC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGF4Q2F0ZWdvcnlMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNsci1jb250cm9sLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy50YXgtY2F0ZWdvcnknIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGF4LWNhdGVnb3J5LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0VGF4Q2F0ZWdvcnlOYW1lKGZvcm1Hcm91cCkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5wcmljZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNoYW5uZWxQcmljZUluY2x1ZGVzVGF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwidmFyaWFudC5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJpY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWN1cnJlbmN5LWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJ2YXJpYW50LmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVdpdGhUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWN1cnJlbmN5LWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci12YXJpYW50LXByaWNlLWRldGFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VdPVwiZm9ybUdyb3VwLmdldCgncHJpY2UnKSEudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cInZhcmlhbnQuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGF4Q2F0ZWdvcnlJZF09XCJmb3JtR3JvdXAuZ2V0KCd0YXhDYXRlZ29yeUlkJykhLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdmFyaWFudC1wcmljZS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YXJpYW50LWZvcm0taW5wdXQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1zZWxlY3QtY29udGFpbmVyICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnknIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIidjYXRhbG9nLnRyYWNrLWludmVudG9yeS10b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaGVscC10b29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsclNlbGVjdCBuYW1lPVwib3B0aW9uc1wiIGZvcm1Db250cm9sTmFtZT1cInRyYWNrSW52ZW50b3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLlRSVUVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktdHJ1ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiR2xvYmFsRmxhZy5GQUxTRVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS1mYWxzZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiR2xvYmFsRmxhZy5JTkhFUklUXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LWluaGVyaXQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItc2VsZWN0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2NhdGFsb2cuc3RvY2stb24taGFuZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiJ2NhdGFsb2cuc3RvY2stb24taGFuZC10b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZlbnRvcnktdW50cmFja2VkXT1cImludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0U3RvY2tPbkhhbmRNaW5WYWx1ZShmb3JtR3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0b2NrT25IYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5pbnZlbnRvcnktdW50cmFja2VkXT1cImludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNsci1jb250cm9sLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnY2F0YWxvZy5zdG9jay1hbGxvY2F0ZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIidjYXRhbG9nLnN0b2NrLWFsbG9jYXRlZC10b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhbnQuc3RvY2tBbGxvY2F0ZWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaW52ZW50b3J5LXVudHJhY2tlZF09XCJpbnZlbnRvcnlJc05vdFRyYWNrZWQoZm9ybUdyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjbHItY29udHJvbC1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2NhdGFsb2cuc3RvY2stc2FsZWFibGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWhlbHAtdG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIidjYXRhbG9nLnN0b2NrLXNhbGVhYmxlLXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1oZWxwLXRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U2FsZWFibGVTdG9ja0xldmVsKHZhcmlhbnQpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhcmlhbnQtZm9ybS1pbnB1dC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3V0LW9mLXN0b2NrLXRocmVzaG9sZC13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmludmVudG9yeS11bnRyYWNrZWRdPVwiaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2xyLWNvbnRyb2wtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLm91dC1vZi1zdG9jay10aHJlc2hvbGQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTx2ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiJ2NhdGFsb2cub3V0LW9mLXN0b2NrLXRocmVzaG9sZC10b29sdGlwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaGVscC10b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscklucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldCgnb3V0T2ZTdG9ja1RocmVzaG9sZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcpPy52YWx1ZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSB8fCBpbnZlbnRvcnlJc05vdFRyYWNrZWQoZm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1pbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVudG9yeUlzTm90VHJhY2tlZChmb3JtR3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnVzZS1nbG9iYWwtdmFsdWUnIHwgdHJhbnNsYXRlIH19ICh7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk8L2xhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhcmlhbnQtZm9ybS1pbnB1dC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0VmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZm9ybUdyb3VwLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zLWZhY2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZW50aXR5LWluZm8gW2VudGl0eV09XCJ2YXJpYW50XCI+PC92ZHItZW50aXR5LWluZm8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhcmlhbnQub3B0aW9ucy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmFyaWFudC5vcHRpb25zIHwgc29ydDogJ2dyb3VwSWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JGcm9tXT1cIm9wdGlvbkdyb3VwTmFtZShvcHRpb24uZ3JvdXBJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZlcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljb25DbGljayk9XCJlZGl0T3B0aW9uKG9wdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIih1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbikgJiYgJ3BlbmNpbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWdyb3VwLW5hbWVcIj57eyBvcHRpb25Hcm91cE5hbWUob3B0aW9uLmdyb3VwSWQpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbk5hbWUob3B0aW9uKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCAnb3B0aW9ucyddXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2NhdGFsb2cuZWRpdC1vcHRpb25zJyB8IHRyYW5zbGF0ZSB9fS4uLjwvYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmFjZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZmFjZXQtdmFsdWUtY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZhY2V0VmFsdWUgb2YgZXhpc3RpbmdGYWNldFZhbHVlcyh2YXJpYW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmFjZXRWYWx1ZV09XCJmYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGYWNldFZhbHVlKHZhcmlhbnQsIGZhY2V0VmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZhY2V0LXZhbHVlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZmFjZXQtdmFsdWUtY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZhY2V0VmFsdWUgb2YgcGVuZGluZ0ZhY2V0VmFsdWVzKHZhcmlhbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmYWNldFZhbHVlXT1cImZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZhY2V0VmFsdWUodmFyaWFudCwgZmFjZXRWYWx1ZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZmFjZXQtdmFsdWUtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGYWNldFZhbHVlQ2xpY2suZW1pdChbdmFyaWFudC5pZF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtZmFjZXRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqdmRySWZNdWx0aWNoYW5uZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiICp2ZHJJZkRlZmF1bHRDaGFubmVsQWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNoYW5uZWwtYXNzaWdubWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGFubmVsIG9mIHZhcmlhbnQuY2hhbm5lbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRGVmYXVsdENoYW5uZWwoY2hhbm5lbC5jb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRpbWVzLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjYXRhbG9nLnJlbW92ZS1mcm9tLWNoYW5uZWwnIHwgdHJhbnNsYXRlOiB7IGNoYW5uZWxDb2RlOiBjaGFubmVsLmNvZGUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljb25DbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbUNoYW5uZWwuZW1pdCh7IGNoYW5uZWxJZDogY2hhbm5lbC5pZCwgdmFyaWFudDogdmFyaWFudCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGFubmVsLWJhZGdlIFtjaGFubmVsQ29kZV09XCJjaGFubmVsLmNvZGVcIj48L3Zkci1jaGFubmVsLWJhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoYW5uZWwuY29kZSB8IGNoYW5uZWxDb2RlVG9MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgKGNsaWNrKT1cImFzc2lnblRvQ2hhbm5lbC5lbWl0KHZhcmlhbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJsYXllcnNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYXNzaWduLXRvLWNoYW5uZWwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -14,6 +14,7 @@ export class CollectionResolver extends BaseEntityResolver {
|
|
|
14
14
|
name: '',
|
|
15
15
|
slug: '',
|
|
16
16
|
isPrivate: false,
|
|
17
|
+
breadcrumbs: [],
|
|
17
18
|
description: '',
|
|
18
19
|
featuredAsset: null,
|
|
19
20
|
assets: [],
|
|
@@ -33,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
|
|
|
33
34
|
providedIn: 'root',
|
|
34
35
|
}]
|
|
35
36
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvcHJvdmlkZXJzL3JvdXRpbmcvY29sbGVjdGlvbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxrQkFBa0IsRUFHbEIsb0JBQW9CLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFLaEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGtCQUFzQztJQUMxRSxZQUFZLE1BQWMsRUFBRSxXQUF3QjtRQUNoRCxLQUFLLENBQ0QsTUFBTSxFQUNOO1lBQ0ksVUFBVSxFQUFFLFlBQTRCO1lBQ3hDLEVBQUUsRUFBRSxFQUFFO1lBQ04sU0FBUyxFQUFFLEVBQUU7WUFDYixTQUFTLEVBQUUsRUFBRTtZQUNiLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtZQUNwQyxJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEtBQUs7WUFDaEIsV0FBVyxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsRUFBRTtZQUNmLGFBQWEsRUFBRSxJQUFJO1lBQ25CLE1BQU0sRUFBRSxFQUFFO1lBQ1YsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsRUFBUztZQUNqQixRQUFRLEVBQUUsSUFBSTtTQUNqQixFQUNELEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwRixDQUFDO0lBQ04sQ0FBQzs7K0dBekJRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQmFzZUVudGl0eVJlc29sdmVyLFxyXG4gICAgQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBnZXREZWZhdWx0VWlMYW5ndWFnZSxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvbHZlciBleHRlbmRzIEJhc2VFbnRpdHlSZXNvbHZlcjxDb2xsZWN0aW9uRnJhZ21lbnQ+IHtcclxuICAgIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihcclxuICAgICAgICAgICAgcm91dGVyLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiAnQ29sbGVjdGlvbicgYXMgJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiAnJyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IGdldERlZmF1bHRVaUxhbmd1YWdlKCksXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzOiBbXSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVkQXNzZXQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIGluaGVyaXRGaWx0ZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpZCA9PiBkYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb24oaWQpLm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbiksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|