@colijnit/transaction 12.1.14 → 12.1.17
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/bundles/colijnit-transaction.umd.js +3904 -1215
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +129 -86
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +130 -87
- package/esm2015/lib/assets/dictionary/text.properties.js +98 -2
- package/esm2015/lib/component/avatar/avatar.component.js +64 -0
- package/esm2015/lib/component/avatar/avatar.module.js +21 -0
- package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +11 -1
- package/esm2015/lib/component/checkout/checkout.component.js +9 -8
- package/esm2015/lib/component/checkout/checkout.module.js +3 -3
- package/esm2015/lib/component/core/base/components/transaction-header-block/transaction-header-block.component.js +38 -0
- package/esm2015/lib/component/core/base/components/transaction-header-block/transaction-header-block.module.js +19 -0
- package/esm2015/lib/component/core/base/transaction-grid-base.component.js +53 -0
- package/esm2015/lib/component/core/core.module.js +3 -6
- package/esm2015/lib/component/core/icon/icon.component.js +1 -1
- package/esm2015/lib/component/core/relation/customer-groups.component.js +3 -3
- package/esm2015/lib/component/core/stock-status-indicator/stock-status-indicator.component.js +1 -1
- package/esm2015/lib/component/payment/payment.component.js +112 -30
- package/esm2015/lib/component/payment/payment.module.js +7 -3
- package/esm2015/lib/component/payment-tile/payment-tile.component.js +4 -2
- package/esm2015/lib/component/relation-address/relation-address.component.js +3 -3
- package/esm2015/lib/component/shopping-cart/shopping-cart.component.js +7 -2
- package/esm2015/lib/component/transaction/transaction.component.js +41 -39
- package/esm2015/lib/component/transaction/transaction.module.js +15 -9
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar-button/transaction-button-bar-button.component.js +29 -0
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar.component.js +54 -0
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar.module.js +28 -0
- package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.js +2 -2
- package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.module.js +2 -2
- package/esm2015/lib/component/transaction-grid/transaction-base-grid/transaction-base-grid.component.js +52 -0
- package/esm2015/lib/component/transaction-grid/transaction-base-grid/transaction-base-grid.module.js +28 -0
- package/esm2015/lib/component/transaction-grid/transaction-grid/transaction-grid.component.js +85 -0
- package/esm2015/lib/component/transaction-grid/transaction-grid/transaction-grid.module.js +19 -0
- package/esm2015/lib/component/transaction-grid/transaction-history-grid/transaction-history-grid.component.js +64 -0
- package/esm2015/lib/component/transaction-grid/transaction-history-grid/transaction-history-grid.module.js +28 -0
- package/esm2015/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.component.js +76 -0
- package/esm2015/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.module.js +30 -0
- package/esm2015/lib/component/transaction-grid/transaction-order-confirmation-grid/transaction-order-confirmation-grid.component.js +51 -0
- package/esm2015/lib/component/transaction-grid/transaction-order-confirmation-grid/transaction-order-confirmation-grid.module.js +29 -0
- package/esm2015/lib/component/transaction-grid/transaction-received-goods-grid/transaction-received-goods-grid.component.js +156 -0
- package/esm2015/lib/component/transaction-grid/transaction-received-goods-grid/transaction-received-goods-grid.module.js +30 -0
- package/esm2015/lib/component/transaction-header/transaction-header/transaction-header.component.js +40 -0
- package/esm2015/lib/component/transaction-header/transaction-header/transaction-header.module.js +29 -0
- package/esm2015/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.component.js +75 -0
- package/esm2015/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.module.js +28 -0
- package/esm2015/lib/component/transaction-header/transaction-header-order/transaction-header-order.component.js +41 -0
- package/esm2015/lib/component/transaction-header/transaction-header-order/transaction-header-order.module.js +26 -0
- package/esm2015/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.component.js +58 -0
- package/esm2015/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.module.js +28 -0
- package/esm2015/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.component.js +36 -0
- package/esm2015/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.module.js +21 -0
- package/esm2015/lib/component/transaction-header/transaction-header.component.js +6 -11
- package/esm2015/lib/component/transaction-header/transaction-header.module.js +8 -6
- package/esm2015/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.js +16 -3
- package/esm2015/lib/component/transaction-line/transaction-line.component.js +26 -29
- package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.js +37 -33
- package/esm2015/lib/component/transaction-line-side-panel/transaction-line-side-panel.module.js +6 -4
- package/esm2015/lib/component/transaction-line-side-panel-purchase/transaction-line-side-panel-purchase.component.js +87 -0
- package/esm2015/lib/component/transaction-line-side-panel-purchase/transaction-line-side-panel-purchase.module.js +31 -0
- package/esm2015/lib/component/transaction-lines/transaction-lines.component.js +8 -5
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.component.js +72 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.module.js +33 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.component.js +28 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.module.js +25 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.js +23 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.module.js +23 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-received-goods/transaction-quick-access-received-goods.component.js +65 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-received-goods/transaction-quick-access-received-goods.module.js +25 -0
- package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.js +138 -18
- package/esm2015/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.module.js +6 -2
- package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.js +57 -11
- package/esm2015/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.module.js +7 -4
- package/esm2015/lib/component/transaction-search/service/filter-request.service.js +117 -0
- package/esm2015/lib/component/transaction-search/service/transaction-search.service.js +33 -0
- package/esm2015/lib/component/transaction-search/transaction-filter/transaction-filter.component.js +87 -0
- package/esm2015/lib/component/transaction-search/transaction-filter/transaction-filter.module.js +34 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-categories/transaction-filter-categories.component.js +42 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-categories/transaction-filter-categories.module.js +19 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-article/transaction-filter-content-article.component.js +120 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-article/transaction-filter-content-article.module.js +25 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-logistics/transaction-filter-content-logistics.component.js +242 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-logistics/transaction-filter-content-logistics.module.js +28 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-order/transaction-filter-content-order.component.js +240 -0
- package/esm2015/lib/component/transaction-search/transaction-filter-content-order/transaction-filter-content-order.module.js +30 -0
- package/esm2015/lib/component/transaction-search/transaction-search-result/transaction-search-result.component.js +62 -0
- package/esm2015/lib/component/transaction-search/transaction-search-result/transaction-search-result.module.js +30 -0
- package/esm2015/lib/component/transaction-search/transaction-search.component.js +55 -0
- package/esm2015/lib/component/transaction-search/transaction-search.module.js +25 -0
- package/esm2015/lib/component/transaction-search/transaction-tile/transaction-tile.component.js +77 -0
- package/esm2015/lib/component/transaction-search/transaction-tile/transaction-tile.module.js +28 -0
- package/esm2015/lib/component/transaction-search-grid/transaction-search-grid.component.js +86 -0
- package/esm2015/lib/component/transaction-search-grid/transaction-search-grid.module.js +26 -0
- package/esm2015/lib/component/view-mode-buttons/view-mode-buttons.component.js +61 -0
- package/esm2015/lib/component/view-mode-buttons/view-mode-buttons.module.js +23 -0
- package/esm2015/lib/enum/content-view-mode.enum.js +2 -1
- package/esm2015/lib/enum/icon.enum.js +18 -1
- package/esm2015/lib/enum/position-grid-row.enum.js +6 -0
- package/esm2015/lib/enum/status-type.enum.js +3 -1
- package/esm2015/lib/enum/transaction-type-category.enum.js +16 -0
- package/esm2015/lib/model/filter-item.viewmodel.js +9 -0
- package/esm2015/lib/model/filter-viewmodel.js +11 -0
- package/esm2015/lib/model/icon-svg.js +18 -1
- package/esm2015/lib/model/payment.viewmodel.js +6 -0
- package/esm2015/lib/model/received-goods-view-model.js +11 -0
- package/esm2015/lib/model/transaction-bar-button.js +3 -0
- package/esm2015/lib/service/article-connector.service.js +60 -0
- package/esm2015/lib/service/article.service.js +25 -0
- package/esm2015/lib/service/collection-cache.service.js +38 -0
- package/esm2015/lib/service/options.service.js +3 -1
- package/esm2015/lib/service/payment.service.js +51 -0
- package/esm2015/lib/service/pending-reason.service.js +5 -5
- package/esm2015/lib/service/shared-connector.service.js +53 -0
- package/esm2015/lib/service/shared.service.js +38 -0
- package/esm2015/lib/service/transaction-connector.service.js +1050 -0
- package/esm2015/lib/service/transaction-event.service.js +29 -0
- package/esm2015/lib/service/transaction-image.service.js +53 -0
- package/esm2015/lib/service/transaction-mapping.service.js +85 -0
- package/esm2015/lib/service/transaction.service.js +97 -117
- package/esm2015/public_api.js +15 -9
- package/fesm2015/colijnit-transaction.js +4861 -1690
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/{seller-information/seller-information.component.d.ts → avatar/avatar.component.d.ts} +5 -3
- package/lib/component/avatar/avatar.module.d.ts +2 -0
- package/lib/component/{seller-information → avatar}/style/_layout.scss +5 -5
- package/lib/component/avatar/style/_material-definition.scss +2 -0
- package/lib/component/avatar/style/_theme.scss +7 -0
- package/lib/component/{order-confirmation-grid → avatar}/style/material.scss +0 -1
- package/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.d.ts +2 -0
- package/lib/component/checkout/checkout-overview-delivery-edit/style/material.scss +0 -1
- package/lib/component/checkout/checkout-overview-relation-edit/style/material.scss +0 -1
- package/lib/component/checkout/checkout-relation-suggestions-list/style/material.scss +0 -1
- package/lib/component/checkout/checkout-relation-suggestions-list-item/style/material.scss +0 -1
- package/lib/component/checkout/style/material.scss +1 -2
- package/lib/component/confirmation-dialog/style/material.scss +0 -1
- package/lib/component/core/base/components/transaction-header-block/style/_layout.scss +53 -0
- package/lib/component/core/base/components/transaction-header-block/style/_material-definition.scss +20 -0
- package/lib/component/core/base/components/transaction-header-block/style/_theme.scss +11 -0
- package/lib/component/core/base/components/transaction-header-block/style/material.scss +4 -0
- package/lib/component/core/base/components/transaction-header-block/transaction-header-block.component.d.ts +8 -0
- package/lib/component/core/base/components/transaction-header-block/transaction-header-block.module.d.ts +2 -0
- package/lib/component/core/base/style/material.scss +0 -1
- package/lib/component/core/base/transaction-grid-base.component.d.ts +25 -0
- package/lib/component/core/characteristic-answer/characteristic-answer.component.scss +0 -1
- package/lib/component/core/icon/icon.component.scss +0 -1
- package/lib/component/core/image-display/style/material.scss +0 -1
- package/lib/component/core/relation/customer-groups.component.d.ts +2 -2
- package/lib/component/core/stock-status-indicator/stock-status-indicator.component.scss +0 -1
- package/lib/component/delivery-type-tile/style/material.scss +0 -1
- package/lib/component/order-confirmation-create/style/material.scss +0 -1
- package/lib/component/payment/payment.component.d.ts +22 -5
- package/lib/component/payment/style/_layout.scss +23 -1
- package/lib/component/payment/style/_material-definition.scss +0 -1
- package/lib/component/payment/style/_theme.scss +24 -0
- package/lib/component/payment/style/material.scss +0 -1
- package/lib/component/payment-tile/payment-tile.component.d.ts +1 -0
- package/lib/component/payment-tile/style/_layout.scss +2 -1
- package/lib/component/payment-tile/style/material.scss +0 -1
- package/lib/component/relation-address/relation-address.component.d.ts +2 -2
- package/lib/component/relation-address/style/material.scss +0 -1
- package/lib/component/relation-address-select/style/material.scss +0 -1
- package/lib/component/relation-address-tile/style/material.scss +0 -1
- package/lib/component/shared/transaction-article-text/style/material.scss +0 -1
- package/lib/component/shared/transaction-article-text-overview/style/material.scss +0 -1
- package/lib/component/shopping-cart/style/material.scss +0 -1
- package/lib/component/shopping-cart-OLD/shopping-cart-manager/shopping-cart-manager.component.scss +0 -1
- package/lib/component/shopping-cart-preview/style/material.scss +0 -1
- package/lib/component/stepper/style/material.scss +0 -1
- package/lib/component/tile/style/material.scss +0 -1
- package/lib/component/transaction/style/_layout.scss +13 -13
- package/lib/component/transaction/style/_material-definition.scss +2 -6
- package/lib/component/transaction/style/_theme.scss +0 -18
- package/lib/component/transaction/style/material.scss +5 -5
- package/lib/component/transaction/transaction.component.d.ts +9 -9
- package/lib/component/transaction-button-bar/style/_layout.scss +50 -0
- package/lib/component/transaction-button-bar/style/_material-definition.scss +12 -0
- package/lib/component/transaction-button-bar/style/_theme.scss +14 -0
- package/lib/component/{order-grid → transaction-button-bar}/style/material.scss +0 -1
- package/lib/component/transaction-button-bar/transaction-button-bar-button/transaction-button-bar-button.component.d.ts +9 -0
- package/lib/component/transaction-button-bar/transaction-button-bar.component.d.ts +17 -0
- package/lib/component/transaction-button-bar/transaction-button-bar.module.d.ts +2 -0
- package/lib/component/transaction-confirmation-history/style/material.scss +0 -1
- package/lib/component/transaction-grid/transaction-base-grid/style/_layout.scss +33 -0
- package/lib/component/transaction-grid/transaction-base-grid/style/_material-definition.scss +8 -0
- package/lib/component/transaction-grid/transaction-base-grid/style/_theme.scss +12 -0
- package/lib/component/{seller-information → transaction-grid/transaction-base-grid}/style/material.scss +0 -1
- package/lib/component/transaction-grid/transaction-base-grid/transaction-base-grid.component.d.ts +8 -0
- package/lib/component/transaction-grid/transaction-base-grid/transaction-base-grid.module.d.ts +2 -0
- package/lib/component/transaction-grid/transaction-grid/style/_layout.scss +6 -0
- package/lib/component/{transaction-history-grid → transaction-grid/transaction-grid}/style/_material-definition.scss +0 -0
- package/lib/component/transaction-grid/transaction-grid/style/_theme.scss +6 -0
- package/lib/component/transaction-grid/transaction-grid/style/material.scss +5 -0
- package/lib/component/transaction-grid/transaction-grid/transaction-grid.component.d.ts +26 -0
- package/lib/component/transaction-grid/transaction-grid/transaction-grid.module.d.ts +2 -0
- package/lib/component/transaction-grid/transaction-history-grid/style/_layout.scss +15 -0
- package/lib/component/transaction-grid/transaction-history-grid/style/_material-definition.scss +1 -0
- package/lib/component/{transaction-history-grid → transaction-grid/transaction-history-grid}/style/_theme.scss +1 -1
- package/lib/component/{transaction-commit-bar → transaction-grid/transaction-history-grid}/style/material.scss +0 -1
- package/lib/component/transaction-grid/transaction-history-grid/transaction-history-grid.component.d.ts +19 -0
- package/lib/component/{transaction-history-grid → transaction-grid/transaction-history-grid}/transaction-history-grid.module.d.ts +0 -0
- package/lib/component/{transaction-lines-grid → transaction-grid/transaction-lines-grid}/style/_layout.scss +5 -1
- package/lib/component/{transaction-lines-grid → transaction-grid/transaction-lines-grid}/style/_material-definition.scss +3 -0
- package/lib/component/{transaction-lines-grid → transaction-grid/transaction-lines-grid}/style/_theme.scss +1 -1
- package/lib/component/transaction-grid/transaction-lines-grid/style/material.scss +4 -0
- package/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.component.d.ts +11 -0
- package/lib/component/{transaction-lines-grid → transaction-grid/transaction-lines-grid}/transaction-lines-grid.module.d.ts +0 -0
- package/lib/component/transaction-grid/transaction-order-confirmation-grid/style/_layout.scss +7 -0
- package/lib/component/{order-confirmation-grid → transaction-grid/transaction-order-confirmation-grid}/style/_material-definition.scss +0 -0
- package/lib/component/transaction-grid/transaction-order-confirmation-grid/style/_theme.scss +7 -0
- package/lib/component/transaction-grid/transaction-order-confirmation-grid/style/material.scss +3 -0
- package/lib/component/transaction-grid/transaction-order-confirmation-grid/transaction-order-confirmation-grid.component.d.ts +4 -0
- package/lib/component/transaction-grid/transaction-order-confirmation-grid/transaction-order-confirmation-grid.module.d.ts +2 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/style/_layout.scss +6 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/style/_material-definition.scss +0 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/style/_theme.scss +6 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/style/material.scss +4 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/transaction-received-goods-grid.component.d.ts +37 -0
- package/lib/component/transaction-grid/transaction-received-goods-grid/transaction-received-goods-grid.module.d.ts +2 -0
- package/lib/component/transaction-header/transaction-header/style/_layout.scss +40 -0
- package/lib/component/transaction-header/transaction-header/style/_material-definition.scss +9 -0
- package/lib/component/transaction-header/transaction-header/style/_theme.scss +11 -0
- package/lib/component/transaction-header/transaction-header/style/material.scss +7 -0
- package/lib/component/transaction-header/transaction-header/transaction-header.component.d.ts +10 -0
- package/lib/component/transaction-header/transaction-header/transaction-header.module.d.ts +2 -0
- package/lib/component/transaction-header/transaction-header-delivery/style/_layout.scss +38 -0
- package/lib/component/transaction-header/transaction-header-delivery/style/_material-definition.scss +7 -0
- package/lib/component/transaction-header/transaction-header-delivery/style/_theme.scss +25 -0
- package/lib/component/transaction-header/transaction-header-delivery/style/material.scss +3 -0
- package/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.component.d.ts +15 -0
- package/lib/component/{transaction-header-delivery → transaction-header/transaction-header-delivery}/transaction-header-delivery.module.d.ts +0 -0
- package/lib/component/transaction-header/transaction-header-order/style/_layout.scss +12 -0
- package/lib/component/transaction-header/transaction-header-order/style/_material-definition.scss +0 -0
- package/lib/component/transaction-header/transaction-header-order/style/_theme.scss +6 -0
- package/lib/component/transaction-header/transaction-header-order/style/material.scss +4 -0
- package/lib/component/transaction-header/transaction-header-order/transaction-header-order.component.d.ts +4 -0
- package/lib/component/transaction-header/transaction-header-order/transaction-header-order.module.d.ts +2 -0
- package/lib/component/transaction-header/transaction-header-payment/style/_layout.scss +14 -0
- package/lib/component/transaction-header/transaction-header-payment/style/_material-definition.scss +4 -0
- package/lib/component/transaction-header/transaction-header-payment/style/_theme.scss +12 -0
- package/lib/component/transaction-header/transaction-header-payment/style/material.scss +5 -0
- package/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.component.d.ts +6 -0
- package/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.module.d.ts +2 -0
- package/lib/component/transaction-header/transaction-header-relation/style/_layout.scss +7 -0
- package/lib/component/transaction-header/transaction-header-relation/style/_material-definition.scss +0 -0
- package/lib/component/transaction-header/transaction-header-relation/style/_theme.scss +6 -0
- package/lib/component/transaction-header/transaction-header-relation/style/material.scss +4 -0
- package/lib/component/{transaction-header-relation → transaction-header/transaction-header-relation}/transaction-header-relation.component.d.ts +1 -1
- package/lib/component/{transaction-header-relation → transaction-header/transaction-header-relation}/transaction-header-relation.module.d.ts +0 -0
- package/lib/component/transaction-header/transaction-header.component.d.ts +0 -2
- package/lib/component/transaction-history-grid-status/style/_layout.scss +7 -7
- package/lib/component/transaction-history-grid-status/style/_material-definition.scss +8 -0
- package/lib/component/transaction-history-grid-status/style/material.scss +0 -1
- package/lib/component/transaction-history-grid-status/transaction-history-grid-status.component.d.ts +2 -0
- package/lib/component/transaction-line/style/_layout.scss +38 -1
- package/lib/component/transaction-line/style/_material-definition.scss +4 -3
- package/lib/component/transaction-line/style/_theme.scss +5 -0
- package/lib/component/transaction-line/style/material.scss +0 -1
- package/lib/component/transaction-line/transaction-line.component.d.ts +7 -4
- package/lib/component/transaction-line-grid/style/material.scss +0 -1
- package/lib/component/transaction-line-side-panel/style/_layout.scss +3 -2
- package/lib/component/transaction-line-side-panel/style/_material-definition.scss +2 -0
- package/lib/component/transaction-line-side-panel/style/material.scss +0 -1
- package/lib/component/transaction-line-side-panel/transaction-line-side-panel.component.d.ts +13 -6
- package/lib/component/transaction-line-side-panel-default/style/material.scss +0 -1
- package/lib/component/transaction-line-side-panel-purchase/style/_layout.scss +6 -0
- package/lib/component/transaction-line-side-panel-purchase/style/_material-definition.scss +0 -0
- package/lib/component/transaction-line-side-panel-purchase/style/_theme.scss +6 -0
- package/lib/component/transaction-line-side-panel-purchase/style/material.scss +5 -0
- package/lib/component/transaction-line-side-panel-purchase/transaction-line-side-panel-purchase.component.d.ts +21 -0
- package/lib/component/transaction-line-side-panel-purchase/transaction-line-side-panel-purchase.module.d.ts +2 -0
- package/lib/component/transaction-lines/style/material.scss +0 -1
- package/lib/component/transaction-lines/transaction-lines.component.d.ts +3 -5
- package/lib/component/transaction-quick-access/transaction-quick-access/style/_layout.scss +11 -0
- package/lib/component/{transaction-commit-bar → transaction-quick-access/transaction-quick-access}/style/_material-definition.scss +0 -0
- package/lib/component/{transaction-commit-bar → transaction-quick-access/transaction-quick-access}/style/_theme.scss +1 -1
- package/lib/component/transaction-quick-access/transaction-quick-access/style/material.scss +6 -0
- package/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.component.d.ts +21 -0
- package/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.module.d.ts +2 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/style/_layout.scss +9 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/style/_material-definition.scss +0 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/style/_theme.scss +6 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/style/material.scss +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.component.d.ts +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.module.d.ts +2 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/_layout.scss +7 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/_material-definition.scss +0 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/_theme.scss +6 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/material.scss +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.d.ts +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.module.d.ts +2 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/style/_layout.scss +9 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/style/_material-definition.scss +0 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/style/_theme.scss +6 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/style/material.scss +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/transaction-quick-access-received-goods.component.d.ts +27 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-received-goods/transaction-quick-access-received-goods.module.d.ts +2 -0
- package/lib/component/transaction-receiving-goods-details/style/_layout.scss +4 -4
- package/lib/component/transaction-receiving-goods-details/style/_material-definition.scss +3 -1
- package/lib/component/transaction-receiving-goods-details/style/material.scss +0 -1
- package/lib/component/transaction-receiving-goods-details/transaction-receiving-goods-details.component.d.ts +28 -2
- package/lib/component/transaction-receiving-goods-history/style/material.scss +0 -1
- package/lib/component/transaction-receiving-goods-history/transaction-receiving-goods-history.component.d.ts +14 -1
- package/lib/component/transaction-search/service/filter-request.service.d.ts +23 -0
- package/lib/component/transaction-search/service/transaction-search.service.d.ts +11 -0
- package/lib/component/transaction-search/style/_layout.scss +37 -0
- package/lib/component/transaction-search/style/_material-definition.scss +41 -0
- package/lib/component/transaction-search/style/_theme.scss +6 -0
- package/lib/component/transaction-search/style/material.scss +7 -0
- package/lib/component/transaction-search/transaction-filter/style/_layout.scss +53 -0
- package/lib/component/transaction-search/transaction-filter/style/_material-definition.scss +1 -0
- package/lib/component/transaction-search/transaction-filter/style/_theme.scss +8 -0
- package/lib/component/transaction-search/transaction-filter/style/material.scss +7 -0
- package/lib/component/transaction-search/transaction-filter/transaction-filter.component.d.ts +21 -0
- package/lib/component/transaction-search/transaction-filter/transaction-filter.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-filter-categories/style/_layout.scss +23 -0
- package/lib/component/transaction-search/transaction-filter-categories/style/_material-definition.scss +0 -0
- package/lib/component/transaction-search/transaction-filter-categories/style/_theme.scss +13 -0
- package/lib/component/transaction-search/transaction-filter-categories/style/material.scss +3 -0
- package/lib/component/transaction-search/transaction-filter-categories/transaction-filter-categories.component.d.ts +10 -0
- package/lib/component/transaction-search/transaction-filter-categories/transaction-filter-categories.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-filter-content-article/style/_layout.scss +13 -0
- package/lib/component/transaction-search/transaction-filter-content-article/style/_material-definition.scss +1 -0
- package/lib/component/transaction-search/transaction-filter-content-article/style/_theme.scss +6 -0
- package/lib/component/transaction-search/transaction-filter-content-article/style/material.scss +4 -0
- package/lib/component/transaction-search/transaction-filter-content-article/transaction-filter-content-article.component.d.ts +37 -0
- package/lib/component/transaction-search/transaction-filter-content-article/transaction-filter-content-article.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/style/_layout.scss +12 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/style/_material-definition.scss +0 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/style/_theme.scss +6 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/style/material.scss +4 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/transaction-filter-content-logistics.component.d.ts +36 -0
- package/lib/component/transaction-search/transaction-filter-content-logistics/transaction-filter-content-logistics.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-filter-content-order/style/_layout.scss +12 -0
- package/lib/component/transaction-search/transaction-filter-content-order/style/_material-definition.scss +1 -0
- package/lib/component/transaction-search/transaction-filter-content-order/style/_theme.scss +6 -0
- package/lib/component/transaction-search/transaction-filter-content-order/style/material.scss +4 -0
- package/lib/component/transaction-search/transaction-filter-content-order/transaction-filter-content-order.component.d.ts +60 -0
- package/lib/component/transaction-search/transaction-filter-content-order/transaction-filter-content-order.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-search-result/style/_layout.scss +30 -0
- package/lib/component/transaction-search/transaction-search-result/style/_material-definition.scss +1 -0
- package/lib/component/transaction-search/transaction-search-result/style/_theme.scss +10 -0
- package/lib/component/transaction-search/transaction-search-result/style/material.scss +3 -0
- package/lib/component/transaction-search/transaction-search-result/transaction-search-result.component.d.ts +19 -0
- package/lib/component/transaction-search/transaction-search-result/transaction-search-result.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-search.component.d.ts +12 -0
- package/lib/component/transaction-search/transaction-search.module.d.ts +2 -0
- package/lib/component/transaction-search/transaction-tile/style/_layout.scss +91 -0
- package/lib/component/transaction-search/transaction-tile/style/_material-definition.scss +0 -0
- package/lib/component/transaction-search/transaction-tile/style/_theme.scss +46 -0
- package/lib/component/transaction-search/transaction-tile/style/material.scss +5 -0
- package/lib/component/transaction-search/transaction-tile/transaction-tile.component.d.ts +13 -0
- package/lib/component/transaction-search/transaction-tile/transaction-tile.module.d.ts +2 -0
- package/lib/component/transaction-search-grid/style/_layout.scss +6 -0
- package/lib/component/transaction-search-grid/style/_material-definition.scss +1 -0
- package/lib/component/transaction-search-grid/style/_theme.scss +6 -0
- package/lib/component/transaction-search-grid/style/material.scss +7 -0
- package/lib/component/transaction-search-grid/transaction-search-grid.component.d.ts +13 -0
- package/lib/component/transaction-search-grid/transaction-search-grid.module.d.ts +2 -0
- package/lib/component/transaction-totals/style/material.scss +0 -1
- package/lib/component/view-mode-buttons/style/_layout.scss +20 -0
- package/lib/component/view-mode-buttons/style/_material-definition.scss +5 -0
- package/lib/component/view-mode-buttons/style/_theme.scss +22 -0
- package/lib/component/view-mode-buttons/style/material.scss +3 -0
- package/lib/component/view-mode-buttons/view-mode-buttons.component.d.ts +17 -0
- package/lib/component/view-mode-buttons/view-mode-buttons.module.d.ts +2 -0
- package/lib/enum/content-view-mode.enum.d.ts +2 -1
- package/lib/enum/icon.enum.d.ts +17 -0
- package/lib/enum/position-grid-row.enum.d.ts +4 -0
- package/lib/enum/status-type.enum.d.ts +3 -1
- package/lib/enum/transaction-type-category.enum.d.ts +14 -0
- package/lib/model/filter-item.viewmodel.d.ts +7 -0
- package/lib/model/filter-viewmodel.d.ts +8 -0
- package/lib/model/payment.viewmodel.d.ts +6 -0
- package/lib/model/received-goods-view-model.d.ts +10 -0
- package/lib/model/transaction-bar-button.d.ts +7 -0
- package/lib/service/article-connector.service.d.ts +13 -0
- package/lib/service/article.service.d.ts +6 -0
- package/lib/service/collection-cache.service.d.ts +6 -0
- package/lib/service/options.service.d.ts +1 -0
- package/lib/service/payment.service.d.ts +9 -0
- package/lib/service/pending-reason.service.d.ts +3 -3
- package/lib/service/shared-connector.service.d.ts +12 -0
- package/lib/service/shared.service.d.ts +13 -0
- package/lib/service/{ione-connector-adapter.service.d.ts → transaction-connector.service.d.ts} +32 -4
- package/lib/service/transaction-event.service.d.ts +65 -0
- package/lib/service/transaction-image.service.d.ts +10 -0
- package/lib/service/transaction-mapping.service.d.ts +14 -0
- package/lib/service/transaction.service.d.ts +48 -28
- package/lib/style/_variables.scss +41 -36
- package/lib/style/transaction-globals.scss +25 -0
- package/package.json +6 -3
- package/public_api.d.ts +14 -8
- package/esm2015/lib/component/core/base/default-ok-cancel-buttons.component.js +0 -41
- package/esm2015/lib/component/order-confirmation-grid/order-confirmation-grid.component.js +0 -70
- package/esm2015/lib/component/order-confirmation-grid/order-confirmation-grid.module.js +0 -29
- package/esm2015/lib/component/order-grid/order-grid.component.js +0 -99
- package/esm2015/lib/component/order-grid/order-grid.module.js +0 -28
- package/esm2015/lib/component/seller-information/seller-information.component.js +0 -61
- package/esm2015/lib/component/seller-information/seller-information.module.js +0 -21
- package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.component.js +0 -46
- package/esm2015/lib/component/transaction-commit-bar/transaction-commit-bar.module.js +0 -27
- package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.component.js +0 -34
- package/esm2015/lib/component/transaction-header-contact/transaction-header-contact.module.js +0 -19
- package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.component.js +0 -60
- package/esm2015/lib/component/transaction-header-delivery/transaction-header-delivery.module.js +0 -21
- package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.component.js +0 -35
- package/esm2015/lib/component/transaction-header-relation/transaction-header-relation.module.js +0 -19
- package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.component.js +0 -47
- package/esm2015/lib/component/transaction-history-grid/transaction-history-grid.module.js +0 -27
- package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.component.js +0 -64
- package/esm2015/lib/component/transaction-lines-grid/transaction-lines-grid.module.js +0 -27
- package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.js +0 -29
- package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.component.js +0 -65
- package/esm2015/lib/component/transaction-nav-bar/transaction-nav-bar.module.js +0 -26
- package/esm2015/lib/enum/tab-category.enum.js +0 -10
- package/esm2015/lib/service/ione-connector-adapter.service.js +0 -836
- package/lib/component/core/base/default-ok-cancel-buttons.component.d.ts +0 -13
- package/lib/component/order-confirmation-grid/order-confirmation-grid.component.d.ts +0 -15
- package/lib/component/order-confirmation-grid/order-confirmation-grid.module.d.ts +0 -2
- package/lib/component/order-confirmation-grid/style/_layout.scss +0 -5
- package/lib/component/order-confirmation-grid/style/_theme.scss +0 -5
- package/lib/component/order-grid/order-grid.component.d.ts +0 -23
- package/lib/component/order-grid/order-grid.module.d.ts +0 -2
- package/lib/component/order-grid/style/_layout.scss +0 -21
- package/lib/component/order-grid/style/_material-definition.scss +0 -2
- package/lib/component/order-grid/style/_theme.scss +0 -6
- package/lib/component/seller-information/seller-information.module.d.ts +0 -2
- package/lib/component/seller-information/style/_material-definition.scss +0 -2
- package/lib/component/seller-information/style/_theme.scss +0 -7
- package/lib/component/transaction-commit-bar/style/_layout.scss +0 -16
- package/lib/component/transaction-commit-bar/transaction-commit-bar.component.d.ts +0 -11
- package/lib/component/transaction-commit-bar/transaction-commit-bar.module.d.ts +0 -2
- package/lib/component/transaction-header-contact/style/_layout.scss +0 -25
- package/lib/component/transaction-header-contact/style/_material-definition.scss +0 -7
- package/lib/component/transaction-header-contact/style/_theme.scss +0 -11
- package/lib/component/transaction-header-contact/style/material.scss +0 -4
- package/lib/component/transaction-header-contact/transaction-header-contact.component.d.ts +0 -4
- package/lib/component/transaction-header-contact/transaction-header-contact.module.d.ts +0 -2
- package/lib/component/transaction-header-delivery/style/_layout.scss +0 -54
- package/lib/component/transaction-header-delivery/style/_material-definition.scss +0 -12
- package/lib/component/transaction-header-delivery/style/_theme.scss +0 -24
- package/lib/component/transaction-header-delivery/style/material.scss +0 -4
- package/lib/component/transaction-header-delivery/transaction-header-delivery.component.d.ts +0 -13
- package/lib/component/transaction-header-relation/style/_layout.scss +0 -25
- package/lib/component/transaction-header-relation/style/_material-definition.scss +0 -7
- package/lib/component/transaction-header-relation/style/_theme.scss +0 -11
- package/lib/component/transaction-header-relation/style/material.scss +0 -4
- package/lib/component/transaction-history-grid/style/_layout.scss +0 -7
- package/lib/component/transaction-history-grid/style/material.scss +0 -4
- package/lib/component/transaction-history-grid/transaction-history-grid.component.d.ts +0 -14
- package/lib/component/transaction-lines-grid/style/material.scss +0 -5
- package/lib/component/transaction-lines-grid/transaction-lines-grid.component.d.ts +0 -20
- package/lib/component/transaction-nav-bar/style/_layout.scss +0 -13
- package/lib/component/transaction-nav-bar/style/_material-definition.scss +0 -1
- package/lib/component/transaction-nav-bar/style/_theme.scss +0 -7
- package/lib/component/transaction-nav-bar/style/material.scss +0 -4
- package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.d.ts +0 -14
- package/lib/component/transaction-nav-bar/transaction-nav-bar-button/transaction-nav-bar-button.component.scss +0 -23
- package/lib/component/transaction-nav-bar/transaction-nav-bar.component.d.ts +0 -18
- package/lib/component/transaction-nav-bar/transaction-nav-bar.module.d.ts +0 -2
- package/lib/enum/tab-category.enum.d.ts +0 -8
|
@@ -0,0 +1,1050 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { CustomerFullObject } from "@colijnit/transactionapi/build/model/customer-full-object.bo";
|
|
4
|
+
import { TransactionInfoResponse } from "@colijnit/transactionapi/build/model/transaction-info-response.bo";
|
|
5
|
+
import { RelationPrivacySetting } from "@colijnit/transactionapi/build/model/relation-privacy-setting.bo";
|
|
6
|
+
import { DeliveryMethod } from "@colijnit/transactionapi/build/model/delivery-method.bo";
|
|
7
|
+
import { GetPostalCodeRetrievalOutputParams } from "@colijnit/transactionapi/build/model/get-postal-code-retrieval-output-params";
|
|
8
|
+
import { RelationListObject } from "@colijnit/transactionapi/build/model/relation-list-object.bo";
|
|
9
|
+
import { CoDomainValue } from "@colijnit/transactionapi/build/model/co-domain-value.bo";
|
|
10
|
+
import { ArticleFullObject } from "@colijnit/transactionapi/build/model/article-full-object";
|
|
11
|
+
import { Transaction } from "@colijnit/transactionapi/build/transaction";
|
|
12
|
+
import { BusinessObjectFactory } from "../factory/business-object-factory";
|
|
13
|
+
import { ImageUtils } from "@colijnit/transactionapi/build/utils/image-utils";
|
|
14
|
+
import { StandardText } from "../model/standard-text";
|
|
15
|
+
import { TransactionLineInfo } from "@colijnit/transactionapi/build/model/transaction-line-info.bo";
|
|
16
|
+
import { OptionsService } from "./options.service";
|
|
17
|
+
import { CashRegister } from "@colijnit/transactionapi/build/model/cash-register";
|
|
18
|
+
import { PriceList } from "@colijnit/transactionapi/build/model/price-list";
|
|
19
|
+
import { Vat } from "@colijnit/transactionapi/build/model/vat";
|
|
20
|
+
import { TransactionSearchView } from "@colijnit/transactionapi/build/model/transaction-search-view.bo";
|
|
21
|
+
import { BranchLov } from "@colijnit/transactionapi/build/model/branch-lov.bo";
|
|
22
|
+
import { SalesPerson } from "@colijnit/transactionapi/build/model/sales-person.bo";
|
|
23
|
+
import { Tag } from "@colijnit/transactionapi/build/model/tag";
|
|
24
|
+
import { OnHoldCode } from "@colijnit/transactionapi/build/model/on-hold-code.bo";
|
|
25
|
+
import { Warehouse } from "@colijnit/transactionapi/build/model/warehouse.bo";
|
|
26
|
+
import { CodeDescription } from "@colijnit/transactionapi/build/model/code-description";
|
|
27
|
+
import { CollectionCacheService } from "./collection-cache.service";
|
|
28
|
+
import { GoodsReceiptStatusWithHistory } from "@colijnit/transactionapi/build/model/goods-receipt-status-with-history.bo";
|
|
29
|
+
import { PaymentMethod } from "@colijnit/transactionapi/build/model/payment-method.bo";
|
|
30
|
+
import * as i0 from "@angular/core";
|
|
31
|
+
import * as i1 from "./options.service";
|
|
32
|
+
import * as i2 from "./collection-cache.service";
|
|
33
|
+
export class TransactionConnectorService {
|
|
34
|
+
constructor(_optionsService, _collectionService) {
|
|
35
|
+
this._optionsService = _optionsService;
|
|
36
|
+
this._collectionService = _collectionService;
|
|
37
|
+
this._boFactory = new BusinessObjectFactory();
|
|
38
|
+
this._countryList = [];
|
|
39
|
+
}
|
|
40
|
+
connect() {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
this.connector = new Transaction(this._optionsService.options);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
getArticleFullObject(goodId) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
return this.connector.getArticleFullObject(goodId).then((result) => {
|
|
49
|
+
if (result.validationResult && result.validationResult.success) {
|
|
50
|
+
if (result.resultObject) {
|
|
51
|
+
resolve(this._boFactory.makeWithRawBackendData(ArticleFullObject, result.resultObject));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
reject(result.validationMessagesAsString);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
getGoodIdFromArticleNr(articleNr) {
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
return this.connector.getGoodIdFromArticleNr(articleNr).then((result) => {
|
|
64
|
+
if (result.validationResult && result.validationResult.success) {
|
|
65
|
+
resolve(result.resultObject);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
reject(result.validationMessagesAsString);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
getSingleImage(nodeId, publication, includeMimetype, thumb) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
return this.connector.getSingleImage(nodeId, publication, includeMimetype, thumb).then((result) => {
|
|
76
|
+
if (result.validationResult && result.validationResult.success) {
|
|
77
|
+
if (result.resultObject && result.resultObject.filePath !== null && result.resultObject.filePath !== undefined && result.resultObject.filePath !== "") {
|
|
78
|
+
return resolve(ImageUtils.getFixedImageFilepathUrl(result.resultObject.filePath));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (result.resultObject) {
|
|
82
|
+
if (includeMimetype) {
|
|
83
|
+
return resolve(ImageUtils.getDocBodyWithMimeTypeDefinition(result.resultObject.fileName, thumb ? result.resultObject.thumbnailBody : result.resultObject.documentBody));
|
|
84
|
+
}
|
|
85
|
+
return resolve(thumb ? result.resultObject.thumbnailBody : result.resultObject.documentBody);
|
|
86
|
+
}
|
|
87
|
+
else { // no image
|
|
88
|
+
resolve("");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
reject(result.validationMessagesAsString);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
getCountries() {
|
|
99
|
+
if (this._countryList.length > 0) {
|
|
100
|
+
return new Promise((resolve) => {
|
|
101
|
+
resolve(this._countryList);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return new Promise((resolve, reject) => {
|
|
105
|
+
return this.connector.getCountries().then((result) => {
|
|
106
|
+
if (result.validationResult && result.validationResult.success) {
|
|
107
|
+
this._countryList = result.resultObjects;
|
|
108
|
+
resolve(result.resultObjects);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
reject(result.validationMessagesAsString);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
getCustomerGroups() {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
const response = yield this.connector.getCustomerGroups();
|
|
119
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
120
|
+
return response.resultObjects;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
getCountry(countryCode) {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
yield this.getCountries();
|
|
130
|
+
return this._countryList.find(country => country.code === countryCode);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
getPrivacySettings() {
|
|
134
|
+
return new Promise((resolve, reject) => {
|
|
135
|
+
return this.connector.getPrivacySettings().then((result) => {
|
|
136
|
+
if (result.validationResult && result.validationResult.success) {
|
|
137
|
+
resolve(result.resultObjects);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
reject(result.validationMessagesAsString);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
getRelationPrivacySettings() {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const privacySettings = [];
|
|
148
|
+
const basePrivacySettings = yield this.getPrivacySettings();
|
|
149
|
+
for (let i = 0, len = basePrivacySettings.length; i < len; i++) {
|
|
150
|
+
const basePrivSetting = basePrivacySettings[i];
|
|
151
|
+
const newRelPrivSet = this._boFactory.instantiateNewBo(RelationPrivacySetting);
|
|
152
|
+
newRelPrivSet.applyBasePrivacySettingValues(basePrivSetting);
|
|
153
|
+
privacySettings.push(newRelPrivSet);
|
|
154
|
+
}
|
|
155
|
+
return privacySettings;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
getMarketingCodes() {
|
|
159
|
+
return new Promise((resolve, reject) => {
|
|
160
|
+
return this.connector.getMarketingCodes().then((result) => {
|
|
161
|
+
if (result.validationResult && result.validationResult.success) {
|
|
162
|
+
resolve(result.resultObjects);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
reject(result.validationMessagesAsString);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
createTransaction(kind, branchNr) {
|
|
171
|
+
return new Promise((resolve, reject) => {
|
|
172
|
+
return this.connector.createTransaction(kind, branchNr).then((result) => {
|
|
173
|
+
if (result.validationResult && result.validationResult.success) {
|
|
174
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
reject(result.validationMessagesAsString);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
getArticleBoundTextLinesOfArticleLine(articleLineUuid) {
|
|
183
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
+
const result = yield this.connector.getArticleBoundTextLinesOfArticleLine(articleLineUuid);
|
|
185
|
+
if (result.validationResult && result.validationResult.success) {
|
|
186
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(TransactionLineInfo, result.resultObject);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
getTransactionByNrAndKind(kind, transactionNo) {
|
|
194
|
+
return new Promise((resolve, reject) => {
|
|
195
|
+
return this.connector.getTransactionByNrAndKind(kind, transactionNo).then((result) => {
|
|
196
|
+
if (result.validationResult && result.validationResult.success) {
|
|
197
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
reject(result.validationMessagesAsString);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
getTransactionById(transactionId) {
|
|
206
|
+
return new Promise((resolve, reject) => {
|
|
207
|
+
return this.connector.getTransactionById(transactionId).then((result) => {
|
|
208
|
+
if (result.validationResult && result.validationResult.success) {
|
|
209
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
reject(result.validationMessagesAsString);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
commit() {
|
|
218
|
+
return this.connector.commit();
|
|
219
|
+
}
|
|
220
|
+
saveTransaction(uuid) {
|
|
221
|
+
return new Promise((resolve, reject) => {
|
|
222
|
+
return this.connector.saveTransaction(uuid).then((result) => {
|
|
223
|
+
if (result.validationResult && result.validationResult.success) {
|
|
224
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
reject(result.validationMessagesAsString);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
getCustomerFullObject(relationNo) {
|
|
233
|
+
return new Promise((resolve, reject) => {
|
|
234
|
+
return this.connector.getCustomerFullObject(relationNo).then((result) => {
|
|
235
|
+
if (result.validationResult && result.validationResult.success) {
|
|
236
|
+
resolve(this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
reject(result.validationMessagesAsString);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
getCashRegisters(branch, group) {
|
|
245
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
246
|
+
const response = yield this.connector.getCashRegister(branch, group);
|
|
247
|
+
if (response.validationResult && response.validationResult.success) {
|
|
248
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(CashRegister, response.resultObjects);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
getRelationNumber(relationId) {
|
|
256
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
257
|
+
return new Promise((resolve, reject) => {
|
|
258
|
+
return this.connector.getRelationNumber(relationId).then((result) => {
|
|
259
|
+
if (result.validationResult && result.validationResult.success) {
|
|
260
|
+
resolve(result.resultObject);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
reject(result.validationMessagesAsString);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
getPriceLists(code) {
|
|
270
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
271
|
+
const response = yield this.connector.getPriceLists(code);
|
|
272
|
+
if (response.validationResult && response.validationResult.success) {
|
|
273
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(PriceList, response.resultObjects);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
return []; // todo: handle error messages in a good way
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
getVatList(onlyValid = false) {
|
|
281
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
282
|
+
const response = yield this.connector.getVatList(onlyValid);
|
|
283
|
+
if (response.validationResult && response.validationResult.success) {
|
|
284
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(Vat, response.resultObjects);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
return []; // todo: handle error messages in a good way
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
searchTransactions(request) {
|
|
292
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
293
|
+
const response = yield this.connector.searchTransactions(request);
|
|
294
|
+
if (response.validationResult && response.validationResult.success) {
|
|
295
|
+
return this._boFactory.makeBOArrayFromRawBackendDataArray(TransactionSearchView, response.resultObjects);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
return []; // todo: handle error messages in a good way
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
getSequenceValue(sequenceName) {
|
|
303
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
304
|
+
return new Promise((resolve, reject) => {
|
|
305
|
+
return this.connector.getSequenceValue(sequenceName).then((result) => {
|
|
306
|
+
if (result.validationResult && result.validationResult.success) {
|
|
307
|
+
resolve(result.resultObject);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
reject(result.validationMessagesAsString);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
insertCustomer(relation) {
|
|
317
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
318
|
+
return new Promise((resolve, reject) => {
|
|
319
|
+
return this.connector.insertCustomer(relation).then((result) => {
|
|
320
|
+
if (result.validationResult && result.validationResult.success) {
|
|
321
|
+
resolve(this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
reject(result.validationMessagesAsString);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
updateCustomer(relation) {
|
|
331
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
332
|
+
return new Promise((resolve, reject) => {
|
|
333
|
+
return this.connector.updateCustomer(relation).then((result) => {
|
|
334
|
+
if (result.validationResult && result.validationResult.success) {
|
|
335
|
+
resolve(this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
reject(result.validationMessagesAsString);
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
getDeliveryMethods() {
|
|
345
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
346
|
+
return new Promise((resolve, reject) => {
|
|
347
|
+
return this.connector.getDeliveryMethods().then((result) => {
|
|
348
|
+
if (result.validationResult && result.validationResult.success) {
|
|
349
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(DeliveryMethod, result.resultObjects));
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
reject(result.validationMessagesAsString);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
getDeliveryOptions() {
|
|
359
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
360
|
+
return new Promise((resolve, reject) => {
|
|
361
|
+
return this.connector.getDeliveryOptions().then((result) => {
|
|
362
|
+
if (result.validationResult && result.validationResult.success) {
|
|
363
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(DeliveryMethod, result.resultObjects));
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
reject(result.validationMessagesAsString);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
addRelationToTransaction(uuid, relationId) {
|
|
373
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
374
|
+
return new Promise((resolve, reject) => {
|
|
375
|
+
return this.connector.addRelationToTransaction(uuid, relationId).then((result) => {
|
|
376
|
+
if (result.validationResult && result.validationResult.success) {
|
|
377
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
reject(result.validationMessagesAsString);
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
setTransactionDeliveryOptions(transactionDeliveryOptionsRequest) {
|
|
387
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
388
|
+
return new Promise((resolve, reject) => {
|
|
389
|
+
return this.connector.setTransactionDeliveryOptions(transactionDeliveryOptionsRequest).then((result) => {
|
|
390
|
+
if (result.validationResult && result.validationResult.success) {
|
|
391
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
reject(result.validationMessagesAsString);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
getPostalCodeRetrieval(postcalCode, houseNo) {
|
|
401
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
402
|
+
return new Promise((resolve, reject) => {
|
|
403
|
+
return this.connector.getPostalCodeRetrieval(postcalCode, houseNo).then((result) => {
|
|
404
|
+
if (result.validationResult && result.validationResult.success) {
|
|
405
|
+
const outputParams = new GetPostalCodeRetrievalOutputParams();
|
|
406
|
+
outputParams.city = result.resultObject.city;
|
|
407
|
+
outputParams.street = result.resultObject.street;
|
|
408
|
+
outputParams.status = result.resultObject.status;
|
|
409
|
+
outputParams.netNumber = result.resultObject.netNumber;
|
|
410
|
+
resolve(outputParams);
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
reject(result.validationMessagesAsString);
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
getRelationListObjects(relationRequest) {
|
|
420
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
421
|
+
return new Promise((resolve, reject) => {
|
|
422
|
+
return this.connector.getRelationListObjects(relationRequest).then((result) => {
|
|
423
|
+
if (result.validationResult && result.validationResult.success) {
|
|
424
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(RelationListObject, result.resultObjects));
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
reject(result.validationMessagesAsString);
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
addTransactionLine(uuid, articleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr) {
|
|
434
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
435
|
+
return new Promise((resolve, reject) => {
|
|
436
|
+
return this.connector.addTransactionLine(uuid, articleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr).then((result) => {
|
|
437
|
+
if (result.validationResult && result.validationResult.success) {
|
|
438
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
reject(result.validationMessagesAsString);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
addTextLineToTransaction(uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr) {
|
|
448
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
449
|
+
return new Promise((resolve, reject) => {
|
|
450
|
+
return this.connector.addTextLineToTransaction(uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr).then((result) => {
|
|
451
|
+
if (result.validationResult && result.validationResult.success) {
|
|
452
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
reject(result.validationMessagesAsString);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
changeLineSequence(uuid, lineUuid, aboveLineNr, belowLineNr) {
|
|
462
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
463
|
+
return new Promise((resolve, reject) => {
|
|
464
|
+
const request = {
|
|
465
|
+
transactionUuid: uuid,
|
|
466
|
+
lineUuid: lineUuid,
|
|
467
|
+
aboveLineNr: aboveLineNr,
|
|
468
|
+
belowLineNr: belowLineNr
|
|
469
|
+
};
|
|
470
|
+
return this.connector.changeLineSequence(request).then((result) => {
|
|
471
|
+
if (result.validationResult && result.validationResult.success) {
|
|
472
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
reject(result.validationMessagesAsString);
|
|
476
|
+
}
|
|
477
|
+
});
|
|
478
|
+
});
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
cancelAddTransactionLine(lineUuid) {
|
|
482
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
483
|
+
return new Promise((resolve, reject) => {
|
|
484
|
+
return this.connector.cancelAddTransactionLine(lineUuid).then((result) => {
|
|
485
|
+
if (result.validationResult && result.validationResult.success) {
|
|
486
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
reject(result.validationMessagesAsString);
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
deleteTransactionLine(uuid, lineUuid) {
|
|
496
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
497
|
+
return new Promise((resolve, reject) => {
|
|
498
|
+
return this.connector.deleteTransactionLine(uuid, lineUuid).then((result) => {
|
|
499
|
+
if (result.validationResult && result.validationResult.success) {
|
|
500
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
reject(result.validationMessagesAsString);
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
changeTransactionLineQuantity(uuid, lineUuid, newQuantity) {
|
|
510
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
511
|
+
return new Promise((resolve, reject) => {
|
|
512
|
+
const request = {
|
|
513
|
+
transactionUuid: uuid,
|
|
514
|
+
lineUuid: lineUuid,
|
|
515
|
+
newQuantity: newQuantity
|
|
516
|
+
};
|
|
517
|
+
return this.connector.changeTransactionLineQuantity(request).then((result) => {
|
|
518
|
+
if (result.validationResult && result.validationResult.success) {
|
|
519
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
reject(result.validationMessagesAsString);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
resolvePendingLineReason(pendingLineValues) {
|
|
529
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
530
|
+
return new Promise((resolve, reject) => {
|
|
531
|
+
return this.connector.resolvePendingLineReason(pendingLineValues).then((result) => {
|
|
532
|
+
if (result.validationResult && result.validationResult.success) {
|
|
533
|
+
resolve(this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
reject(result.validationMessagesAsString);
|
|
537
|
+
}
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
getCommissionCodes(languageCode) {
|
|
543
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
544
|
+
return new Promise((resolve, reject) => {
|
|
545
|
+
return this.connector.getCommissionCodes(languageCode).then((result) => {
|
|
546
|
+
if (result.validationResult && result.validationResult.success) {
|
|
547
|
+
resolve(result.resultObjects);
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
reject(result.validationMessagesAsString);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
});
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
getInOutCollection(languageCode) {
|
|
557
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
558
|
+
return new Promise((resolve, reject) => {
|
|
559
|
+
return this.connector.getInOutCollection(languageCode).then((result) => {
|
|
560
|
+
if (result.validationResult && result.validationResult.success) {
|
|
561
|
+
resolve(result.resultObjects);
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
reject(result.validationMessagesAsString);
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
});
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
getTransactionArticleWarehouses(goodId) {
|
|
571
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
572
|
+
return new Promise((resolve, reject) => {
|
|
573
|
+
return this.connector.getTransactionArticleWarehouses(goodId).then((result) => {
|
|
574
|
+
if (result.validationResult && result.validationResult.success) {
|
|
575
|
+
resolve(result.resultObjects);
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
reject(result.validationMessagesAsString);
|
|
579
|
+
}
|
|
580
|
+
});
|
|
581
|
+
});
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
setRelationByUser(uuid, username, password) {
|
|
585
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
586
|
+
return new Promise((resolve, reject) => {
|
|
587
|
+
return this.connector.setRelationByUser(uuid, username, password).then((result) => {
|
|
588
|
+
if (result.validationResult && result.validationResult.success) {
|
|
589
|
+
resolve(result.validationResult.success);
|
|
590
|
+
}
|
|
591
|
+
else {
|
|
592
|
+
reject(result.validationMessagesAsString);
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
getTextTypes(languageCode) {
|
|
599
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
600
|
+
return new Promise((resolve, reject) => {
|
|
601
|
+
return this.connector.getTextTypes(languageCode).then((result) => {
|
|
602
|
+
if (result.validationResult && result.validationResult.success) {
|
|
603
|
+
const texts = this._boFactory.makeBOArrayFromRawBackendDataArray(CoDomainValue, result.resultObjects);
|
|
604
|
+
texts.sort((a, b) => a.sequence > b.sequence ? 1 : -1);
|
|
605
|
+
resolve(texts);
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
reject(result.validationMessagesAsString);
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
});
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
getStandardTexts(languageCode) {
|
|
615
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
616
|
+
return new Promise((resolve, reject) => {
|
|
617
|
+
return this.connector.getStandardTexts(languageCode).then((result) => {
|
|
618
|
+
if (result.validationResult && result.validationResult.success) {
|
|
619
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StandardText, result.resultObject));
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
reject(result.validationMessagesAsString);
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
});
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
getBranches(branchNr) {
|
|
629
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
630
|
+
return new Promise((resolve, reject) => {
|
|
631
|
+
return this.connector.getBranches(branchNr).then((result) => {
|
|
632
|
+
if (result.validationResult && result.validationResult.success) {
|
|
633
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(BranchLov, result.resultObjects));
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
reject(result.validationMessagesAsString);
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
getSalesPersons(date) {
|
|
643
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
644
|
+
return new Promise((resolve, reject) => {
|
|
645
|
+
return this.connector.getSalesPersons(date).then((result) => {
|
|
646
|
+
if (result.validationResult && result.validationResult.success) {
|
|
647
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(SalesPerson, result.resultObjects));
|
|
648
|
+
}
|
|
649
|
+
else {
|
|
650
|
+
reject(result.validationMessagesAsString);
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
getTags(category) {
|
|
657
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
658
|
+
return new Promise((resolve, reject) => {
|
|
659
|
+
const collection = this._collectionService.getCollection(Tag.name, [category]);
|
|
660
|
+
if (collection) {
|
|
661
|
+
return resolve(collection);
|
|
662
|
+
}
|
|
663
|
+
return this.connector.getTags(category).then((result) => {
|
|
664
|
+
if (result.validationResult && result.validationResult.success) {
|
|
665
|
+
const collection = this._boFactory.makeBOArrayFromRawBackendDataArray(Tag, result.resultObjects);
|
|
666
|
+
this._collectionService.cacheCollection(Tag.name, collection, [category]);
|
|
667
|
+
resolve(collection);
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
reject(result.validationMessagesAsString);
|
|
671
|
+
}
|
|
672
|
+
});
|
|
673
|
+
});
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
getOnHoldCodes() {
|
|
677
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
678
|
+
return new Promise((resolve, reject) => {
|
|
679
|
+
const collection = this._collectionService.getCollection(OnHoldCode.name);
|
|
680
|
+
if (collection) {
|
|
681
|
+
return resolve(collection);
|
|
682
|
+
}
|
|
683
|
+
return this.connector.getOnHoldCodes().then((result) => {
|
|
684
|
+
if (result.validationResult && result.validationResult.success) {
|
|
685
|
+
const collection = this._boFactory.makeBOArrayFromRawBackendDataArray(OnHoldCode, result.resultObjects);
|
|
686
|
+
this._collectionService.cacheCollection(OnHoldCode.name, collection);
|
|
687
|
+
resolve(collection);
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
reject(result.validationMessagesAsString);
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
});
|
|
694
|
+
});
|
|
695
|
+
}
|
|
696
|
+
getWarehouses(branchNr) {
|
|
697
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
698
|
+
return new Promise((resolve, reject) => {
|
|
699
|
+
return this.connector.getWarehouses(branchNr).then((result) => {
|
|
700
|
+
if (result.validationResult && result.validationResult.success) {
|
|
701
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(Warehouse, result.resultObjects));
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
reject(result.validationMessagesAsString);
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
});
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
getHistoricStateValues() {
|
|
711
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
712
|
+
return new Promise((resolve, reject) => {
|
|
713
|
+
const result = this.connector.getHistoricStateValues();
|
|
714
|
+
if (result.validationResult && result.validationResult.success) {
|
|
715
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(CodeDescription, result.resultObjects));
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
reject(result.validationMessagesAsString);
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
getPaymentMethods() {
|
|
724
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
725
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
726
|
+
const result = yield this.connector.getPaymentMethods();
|
|
727
|
+
if (result.validationResult && result.validationResult.success) {
|
|
728
|
+
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(PaymentMethod, result.resultObjects));
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
reject(result.validationMessagesAsString);
|
|
732
|
+
}
|
|
733
|
+
}));
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
changeTransactionLineCommissionCode(uuid, lineUuid, code) {
|
|
737
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
738
|
+
const request = {
|
|
739
|
+
transactionUuid: uuid,
|
|
740
|
+
lineUuid: lineUuid,
|
|
741
|
+
newCommissionCode: code
|
|
742
|
+
};
|
|
743
|
+
const response = yield this.connector.changeTransactionLineCommissionCode(request);
|
|
744
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
745
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
746
|
+
}
|
|
747
|
+
else {
|
|
748
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
749
|
+
}
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
changeTransactionLineWarehouse(uuid, lineUuid, warehouseNumber) {
|
|
753
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
754
|
+
const request = {
|
|
755
|
+
transactionUuid: uuid,
|
|
756
|
+
lineUuid: lineUuid,
|
|
757
|
+
newWarehouseNumber: warehouseNumber
|
|
758
|
+
};
|
|
759
|
+
const response = yield this.connector.changeTransactionLineWarehouse(request);
|
|
760
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
761
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
765
|
+
}
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
changeTransactionLinePrice(uuid, lineUuid, price) {
|
|
769
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
770
|
+
const request = {
|
|
771
|
+
transactionUuid: uuid,
|
|
772
|
+
lineUuid: lineUuid,
|
|
773
|
+
newPrice: price
|
|
774
|
+
};
|
|
775
|
+
const response = yield this.connector.changeTransactionLinePrice(request);
|
|
776
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
777
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
781
|
+
}
|
|
782
|
+
});
|
|
783
|
+
}
|
|
784
|
+
changeTransactionLinePriceList(uuid, lineUuid, priceList) {
|
|
785
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
786
|
+
const request = {
|
|
787
|
+
transactionUuid: uuid,
|
|
788
|
+
lineUuid: lineUuid,
|
|
789
|
+
newPriceListCode: priceList
|
|
790
|
+
};
|
|
791
|
+
const response = yield this.connector.changeTransactionLinePriceList(request);
|
|
792
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
793
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
794
|
+
}
|
|
795
|
+
else {
|
|
796
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
797
|
+
}
|
|
798
|
+
});
|
|
799
|
+
}
|
|
800
|
+
changeTransactionLineVat(uuid, lineUuid, id) {
|
|
801
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
802
|
+
const request = {
|
|
803
|
+
transactionUuid: uuid,
|
|
804
|
+
lineUuid: lineUuid,
|
|
805
|
+
newVatId: id
|
|
806
|
+
};
|
|
807
|
+
const response = yield this.connector.changeTransactionLineVat(request);
|
|
808
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
809
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
changeTransactionLineLineDiscount(uuid, lineUuid, type, discount, reason, code) {
|
|
817
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
818
|
+
const request = {
|
|
819
|
+
transactionUuid: uuid,
|
|
820
|
+
lineUuid: lineUuid,
|
|
821
|
+
discountType: type,
|
|
822
|
+
newDiscount: discount,
|
|
823
|
+
newDiscountReason: reason,
|
|
824
|
+
newDiscountCode: code
|
|
825
|
+
};
|
|
826
|
+
const response = yield this.connector.changeTransactionLineDiscount(request);
|
|
827
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
828
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
829
|
+
}
|
|
830
|
+
else {
|
|
831
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
832
|
+
}
|
|
833
|
+
});
|
|
834
|
+
}
|
|
835
|
+
changeTransactionLineDeliveryMethod(uuid, lineUuid, method) {
|
|
836
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
837
|
+
const request = {
|
|
838
|
+
transactionUuid: uuid,
|
|
839
|
+
lineUuid: lineUuid,
|
|
840
|
+
newDeliveryMethodCode: method
|
|
841
|
+
};
|
|
842
|
+
const response = yield this.connector.changeTransactionLineDeliveryMethod(request);
|
|
843
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
844
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
845
|
+
}
|
|
846
|
+
else {
|
|
847
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
848
|
+
}
|
|
849
|
+
});
|
|
850
|
+
}
|
|
851
|
+
changeTransactionLineDeliveryDate(uuid, lineUuid, date) {
|
|
852
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
853
|
+
const request = {
|
|
854
|
+
transactionUuid: uuid,
|
|
855
|
+
lineUuid: lineUuid,
|
|
856
|
+
newDeliveryDate: date
|
|
857
|
+
};
|
|
858
|
+
const response = yield this.connector.changeTransactionLineDeliveryDate(request);
|
|
859
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
860
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
861
|
+
}
|
|
862
|
+
else {
|
|
863
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
864
|
+
}
|
|
865
|
+
});
|
|
866
|
+
}
|
|
867
|
+
changeTransactionLineAssemblyTime(uuid, lineUuid, time) {
|
|
868
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
869
|
+
const request = {
|
|
870
|
+
transactionUuid: uuid,
|
|
871
|
+
lineUuid: lineUuid,
|
|
872
|
+
newAssemblyTime: time
|
|
873
|
+
};
|
|
874
|
+
const response = yield this.connector.changeTransactionLineAssemblyTime(request);
|
|
875
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
876
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
877
|
+
}
|
|
878
|
+
else {
|
|
879
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
880
|
+
}
|
|
881
|
+
});
|
|
882
|
+
}
|
|
883
|
+
changeTransactionLineEditTime(uuid, lineUuid, time) {
|
|
884
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
885
|
+
const request = {
|
|
886
|
+
transactionUuid: uuid,
|
|
887
|
+
lineUuid: lineUuid,
|
|
888
|
+
newEditTime: time
|
|
889
|
+
};
|
|
890
|
+
const response = yield this.connector.changeTransactionLineEditTime(request);
|
|
891
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
892
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
893
|
+
}
|
|
894
|
+
else {
|
|
895
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
896
|
+
}
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
changeTransactionLineSupplierArticleNumber(uuid, lineUuid, articleNumber) {
|
|
900
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
901
|
+
const request = {
|
|
902
|
+
transactionUuid: uuid,
|
|
903
|
+
lineUuid: lineUuid,
|
|
904
|
+
newSupplierArticleNumber: articleNumber
|
|
905
|
+
};
|
|
906
|
+
const response = yield this.connector.changeTransactionLineSupplierArticleNumber(request);
|
|
907
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
908
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
909
|
+
}
|
|
910
|
+
else {
|
|
911
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
912
|
+
}
|
|
913
|
+
});
|
|
914
|
+
}
|
|
915
|
+
changeTransactionLineReference(uuid, lineUuid, reference) {
|
|
916
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
917
|
+
const request = {
|
|
918
|
+
transactionUuid: uuid,
|
|
919
|
+
lineUuid: lineUuid,
|
|
920
|
+
newReference: reference
|
|
921
|
+
};
|
|
922
|
+
const response = yield this.connector.changeTransactionLineReference(request);
|
|
923
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
924
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
925
|
+
}
|
|
926
|
+
else {
|
|
927
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
928
|
+
}
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
changeHeaderTransactionDefinitive(uuid, definitive) {
|
|
932
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
933
|
+
const request = {
|
|
934
|
+
transactionUuid: uuid,
|
|
935
|
+
newTransactionDefinitive: definitive
|
|
936
|
+
};
|
|
937
|
+
const response = yield this.connector.changeHeaderTransactionDefinitive(request);
|
|
938
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
939
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
940
|
+
}
|
|
941
|
+
else {
|
|
942
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
943
|
+
}
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
changeTransactionLineCollectionCode(uuid, lineUuid, code) {
|
|
947
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
948
|
+
const request = {
|
|
949
|
+
transactionUuid: uuid,
|
|
950
|
+
lineUuid: lineUuid,
|
|
951
|
+
newCollectionCode: code
|
|
952
|
+
};
|
|
953
|
+
const response = yield this.connector.changeTransactionLineCollectionCode(request);
|
|
954
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
955
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
956
|
+
}
|
|
957
|
+
else {
|
|
958
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
959
|
+
}
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
createOutstandingEntry(uuid, amount) {
|
|
963
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
964
|
+
const request = {
|
|
965
|
+
transUUID: uuid,
|
|
966
|
+
amount: amount
|
|
967
|
+
};
|
|
968
|
+
const response = yield this.connector.createOutstandingEntry(request);
|
|
969
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
970
|
+
console.log(response);
|
|
971
|
+
}
|
|
972
|
+
else {
|
|
973
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
974
|
+
}
|
|
975
|
+
});
|
|
976
|
+
}
|
|
977
|
+
registerSalesOrderPayment(uuid, amount, currencyCode, paymentMethod, cashRegisterGroupId) {
|
|
978
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
979
|
+
const request = {
|
|
980
|
+
transUUID: uuid,
|
|
981
|
+
amount: amount,
|
|
982
|
+
currencyCode: currencyCode,
|
|
983
|
+
paymentMethodCode: paymentMethod,
|
|
984
|
+
cashRegisterGroupId: cashRegisterGroupId
|
|
985
|
+
};
|
|
986
|
+
const response = yield this.connector.registerSalesOrderPayment(request);
|
|
987
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
988
|
+
console.log(response);
|
|
989
|
+
}
|
|
990
|
+
else {
|
|
991
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
992
|
+
}
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
getGoodsReceiptStatus(transId, lineNr) {
|
|
996
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
997
|
+
const response = yield this.connector.getGoodsReceiptStatus(transId, lineNr);
|
|
998
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
999
|
+
return this._boFactory.makeWithRawBackendData(GoodsReceiptStatusWithHistory, response.resultObject);
|
|
1000
|
+
}
|
|
1001
|
+
else {
|
|
1002
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
1003
|
+
}
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1006
|
+
getGoodsReceiptStatusWithHistory(transId, lineNr) {
|
|
1007
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1008
|
+
const response = yield this.connector.getGoodsReceiptStatusWithHistory(transId, lineNr);
|
|
1009
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
1010
|
+
return this._boFactory.makeWithRawBackendData(GoodsReceiptStatusWithHistory, response.resultObject);
|
|
1011
|
+
}
|
|
1012
|
+
else {
|
|
1013
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
1014
|
+
}
|
|
1015
|
+
});
|
|
1016
|
+
}
|
|
1017
|
+
receiveGoodsForPurchaseOrder(request) {
|
|
1018
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1019
|
+
const response = yield this.connector.receiveGoodsForPurchaseOrder(request);
|
|
1020
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
1021
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
1022
|
+
}
|
|
1023
|
+
else {
|
|
1024
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
1025
|
+
}
|
|
1026
|
+
});
|
|
1027
|
+
}
|
|
1028
|
+
receiveGoodsForPurchaseOrderCorrection(request) {
|
|
1029
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1030
|
+
const response = yield this.connector.receiveGoodsForPurchaseOrderCorrection(request);
|
|
1031
|
+
if (response && response.validationResult && response.validationResult.success) {
|
|
1032
|
+
return this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
|
|
1033
|
+
}
|
|
1034
|
+
else {
|
|
1035
|
+
return Promise.reject(response.validationMessagesAsString);
|
|
1036
|
+
}
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
TransactionConnectorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TransactionConnectorService_Factory() { return new TransactionConnectorService(i0.ɵɵinject(i1.OptionsService), i0.ɵɵinject(i2.CollectionCacheService)); }, token: TransactionConnectorService, providedIn: "root" });
|
|
1041
|
+
TransactionConnectorService.decorators = [
|
|
1042
|
+
{ type: Injectable, args: [{
|
|
1043
|
+
providedIn: "root"
|
|
1044
|
+
},] }
|
|
1045
|
+
];
|
|
1046
|
+
TransactionConnectorService.ctorParameters = () => [
|
|
1047
|
+
{ type: OptionsService },
|
|
1048
|
+
{ type: CollectionCacheService }
|
|
1049
|
+
];
|
|
1050
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY29ubmVjdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL3NlcnZpY2UvdHJhbnNhY3Rpb24tY29ubmVjdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDaEcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sbUVBQW1FLENBQUM7QUFJMUcsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFFeEcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBR3ZGLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLDhFQUE4RSxDQUFDO0FBQ2hJLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBR2hHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUV0RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUUzRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFdkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzVFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBR2hG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Q0gsQ0FBQztLQUFBO0lBRVksNEJBQTRCLENBQUMsT0FBNEM7O1lBQ3BGLE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzlFLE9BQXlDLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pJO2lCQUFNO2dCQUNMLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUM7S0FBQTtJQUVZLHNDQUFzQyxDQUFDLE9BQXNEOztZQUN4RyxNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9HLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUM5RSxPQUF5QyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNqSTtpQkFBTTtnQkFDTCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDNUQ7UUFDSCxDQUFDO0tBQUE7Ozs7WUFuNUJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBM0JPLGNBQWM7WUFlZCxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge01hcmtldGluZ30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9tYXJrZXRpbmcuYm9cIjtcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24ta2luZC5lbnVtXCI7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ib1wiO1xuaW1wb3J0IHtQcml2YWN5U2V0dGluZyB9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bVwiO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvXCI7XG5pbXBvcnQge1NldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9zZXQtdHJhbnNhY3Rpb24tZGVsaXZlcnktb3B0aW9ucy1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge0dldFBvc3RhbENvZGVSZXRyaWV2YWxPdXRwdXRQYXJhbXN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXBvc3RhbC1jb2RlLXJldHJpZXZhbC1vdXRwdXQtcGFyYW1zXCI7XG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW1cIjtcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25SZXNwb25zZUJhc2V9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tcmVzcG9uc2UtYmFzZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbn0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC90cmFuc2FjdGlvblwiO1xuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YVwiO1xuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gXCIuLi9mYWN0b3J5L2J1c2luZXNzLW9iamVjdC1mYWN0b3J5XCI7XG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvaW1hZ2UtdXRpbHNcIjtcbmltcG9ydCB7U3RhbmRhcmRUZXh0fSBmcm9tIFwiLi4vbW9kZWwvc3RhbmRhcmQtdGV4dFwiO1xuaW1wb3J0IHtDdXN0b21lckdyb3VwfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWdyb3VwLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvXCI7XG5pbXBvcnQge09wdGlvbnNTZXJ2aWNlfSBmcm9tIFwiLi9vcHRpb25zLnNlcnZpY2VcIjtcbmltcG9ydCB7Q2FzaFJlZ2lzdGVyfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtcmVnaXN0ZXJcIjtcbmltcG9ydCB7Q2hhbmdlTGluZVNlcXVlbmNlUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jaGFuZ2UtbGluZS1zZXF1ZW5jZS1yZXF1ZXN0XCI7XG5pbXBvcnQge1Jlc29sdmVMaW5lUGVuZGluZ1JlYXNvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVzb2x2ZS1wZW5kaW5nLXJlYXNvbi1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge1ByaWNlTGlzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmljZS1saXN0XCI7XG5pbXBvcnQge1ZhdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC92YXRcIjtcbmltcG9ydCB7RGlzY291bnRUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vZGlzY291bnQtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXZpZXctcmVxdWVzdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFZpZXd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXZpZXcuYm9cIjtcbmltcG9ydCB7QnJhbmNoTG92fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2JyYW5jaC1sb3YuYm9cIjtcbmltcG9ydCB7U2FsZXNQZXJzb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2FsZXMtcGVyc29uLmJvXCI7XG5pbXBvcnQge1RhZ30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90YWdcIjtcbmltcG9ydCB7T25Ib2xkQ29kZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9vbi1ob2xkLWNvZGUuYm9cIjtcbmltcG9ydCB7V2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3dhcmVob3VzZS5ib1wiO1xuaW1wb3J0IHtDb2RlRGVzY3JpcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY29kZS1kZXNjcmlwdGlvblwiO1xuaW1wb3J0IHtDb2xsZWN0aW9uQ2FjaGVTZXJ2aWNlfSBmcm9tIFwiLi9jb2xsZWN0aW9uLWNhY2hlLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0XG59IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVjZWl2ZS1nb29kcy1mb3ItcHVyY2hhc2Utb3JkZXItcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtHb29kc1JlY2VpcHRTdGF0dXNXaXRoSGlzdG9yeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1yZWNlaXB0LXN0YXR1cy13aXRoLWhpc3RvcnkuYm9cIjtcbmltcG9ydCB7XG4gIFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uUmVxdWVzdFxufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlY2VpdmUtZ29vZHMtZm9yLXB1cmNoYXNlLW9yZGVyLWNvcnJlY3Rpb24tcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtQYXltZW50TWV0aG9kfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BheW1lbnQtbWV0aG9kLmJvXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlIHtcbiAgcHVibGljIGNvbm5lY3RvcjogVHJhbnNhY3Rpb247XG5cbiAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3RvcnkgPSBuZXcgQnVzaW5lc3NPYmplY3RGYWN0b3J5KCk7XG4gIHByaXZhdGUgX2NvdW50cnlMaXN0OiBDb3VudHJ5W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9vcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY29sbGVjdGlvblNlcnZpY2U6IENvbGxlY3Rpb25DYWNoZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29ubmVjdG9yID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRnVsbE9iamVjdCwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0R29vZElkRnJvbUFydGljbGVOcihhcnRpY2xlTnI6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoYXJ0aWNsZU5yKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVzdWx0T2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2luZ2xlSW1hZ2Uobm9kZUlkOiBudW1iZXIgfCBzdHJpbmcsIHB1YmxpY2F0aW9uOiBudW1iZXIsIGluY2x1ZGVNaW1ldHlwZTogYm9vbGVhbiwgdGh1bWI6IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTaW5nbGVJbWFnZShub2RlSWQsIHB1YmxpY2F0aW9uLCBpbmNsdWRlTWltZXR5cGUsIHRodW1iKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3QgJiYgcmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gbnVsbCAmJiByZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzdWx0LnJlc3VsdE9iamVjdC5maWxlUGF0aCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoaW5jbHVkZU1pbWV0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoSW1hZ2VVdGlscy5nZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihyZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgdGh1bWIgPyByZXN1bHQucmVzdWx0T2JqZWN0LnRodW1ibmFpbEJvZHkgOiByZXN1bHQucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRodW1iID8gcmVzdWx0LnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzdWx0LnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIG5vIGltYWdlXG4gICAgICAgICAgICAgIHJlc29sdmUoXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb3VudHJpZXMoKTogUHJvbWlzZTxDb3VudHJ5W10+IHtcbiAgICBpZiAodGhpcy5fY291bnRyeUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2NvdW50cnlMaXN0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDb3VudHJpZXMoKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5fY291bnRyeUxpc3QgPSByZXN1bHQucmVzdWx0T2JqZWN0cztcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VzdG9tZXJHcm91cHMoKTogUHJvbWlzZTxDdXN0b21lckdyb3VwW10+IHtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDdXN0b21lckdyb3VwcygpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb3VudHJpZXMoKTtcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUxpc3QuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY29kZSA9PT0gY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFByaXZhY3lTZXR0aW5nW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHJpdmFjeVNldHRpbmdzKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUoPFByaXZhY3lTZXR0aW5nW10+cmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIGNvbnN0IHByaXZhY3lTZXR0aW5nczogUmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdID0gW107XG5cbiAgICBjb25zdCBiYXNlUHJpdmFjeVNldHRpbmdzOiBQcml2YWN5U2V0dGluZ1tdID0gYXdhaXQgdGhpcy5nZXRQcml2YWN5U2V0dGluZ3MoKTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBsZW46IG51bWJlciA9IGJhc2VQcml2YWN5U2V0dGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGJhc2VQcml2U2V0dGluZzogUHJpdmFjeVNldHRpbmcgPSBiYXNlUHJpdmFjeVNldHRpbmdzW2ldO1xuICAgICAgY29uc3QgbmV3UmVsUHJpdlNldDogUmVsYXRpb25Qcml2YWN5U2V0dGluZyA9IDxSZWxhdGlvblByaXZhY3lTZXR0aW5nPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5pbnN0YW50aWF0ZU5ld0JvKFJlbGF0aW9uUHJpdmFjeVNldHRpbmcpO1xuICAgICAgbmV3UmVsUHJpdlNldC5hcHBseUJhc2VQcml2YWN5U2V0dGluZ1ZhbHVlcyhiYXNlUHJpdlNldHRpbmcpO1xuICAgICAgcHJpdmFjeVNldHRpbmdzLnB1c2gobmV3UmVsUHJpdlNldCk7XG4gICAgfVxuICAgIHJldHVybiBwcml2YWN5U2V0dGluZ3M7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRNYXJrZXRpbmdDb2RlcygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKDxDb0RvbWFpblZhbHVlW10+cmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVUcmFuc2FjdGlvbihraW5kOiBUcmFuc2FjdGlvbktpbmQsIGJyYW5jaE5yOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVRyYW5zYWN0aW9uKGtpbmQsIGJyYW5jaE5yKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlQm91bmRUZXh0TGluZXNPZkFydGljbGVMaW5lKGFydGljbGVMaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkxpbmVJbmZvW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQpO1xuICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uTGluZUluZm9bXT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUcmFuc2FjdGlvbkxpbmVJbmZvLCByZXN1bHQucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKGtpbmQ6IFRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25ObzogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKGtpbmQsIHRyYW5zYWN0aW9uTm8pLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb21taXQoKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jb21taXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlVHJhbnNhY3Rpb24odXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odXVpZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KHJlbGF0aW9uTm86IG51bWJlcik6IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChyZWxhdGlvbk5vKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDdXN0b21lckZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2FzaFJlZ2lzdGVycyhicmFuY2g/OiBzdHJpbmcsIGdyb3VwPzogbnVtYmVyKTogUHJvbWlzZTxDYXNoUmVnaXN0ZXJbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldENhc2hSZWdpc3RlcihicmFuY2gsIGdyb3VwKTtcbiAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8Q2FzaFJlZ2lzdGVyW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ2FzaFJlZ2lzdGVyLCByZXNwb25zZS5yZXN1bHRPYmplY3RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVzdWx0T2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpY2VMaXN0cyhjb2RlPzogc3RyaW5nKTogUHJvbWlzZTxQcmljZUxpc3RbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHJpY2VMaXN0cyhjb2RlKTtcbiAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQcmljZUxpc3QsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIFByaWNlTGlzdFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107IC8vIHRvZG86IGhhbmRsZSBlcnJvciBtZXNzYWdlcyBpbiBhIGdvb2Qgd2F5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhdExpc3Qob25seVZhbGlkOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPFZhdFtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRWYXRMaXN0KG9ubHlWYWxpZCk7XG4gICAgaWYgKHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoVmF0LCByZXNwb25zZS5yZXN1bHRPYmplY3RzKSBhcyBWYXRbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdOyAvLyB0b2RvOiBoYW5kbGUgZXJyb3IgbWVzc2FnZXMgaW4gYSBnb29kIHdheVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hWaWV3W10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShUcmFuc2FjdGlvblNlYXJjaFZpZXcsIHJlc3BvbnNlLnJlc3VsdE9iamVjdHMpIGFzIFRyYW5zYWN0aW9uU2VhcmNoVmlld1tdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107IC8vIHRvZG86IGhhbmRsZSBlcnJvciBtZXNzYWdlcyBpbiBhIGdvb2Qgd2F5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcXVlbmNlVmFsdWUoc2VxdWVuY2VOYW1lOiBTZXF1ZW5jZU5hbWUpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKHNlcXVlbmNlTmFtZSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0LnJlc3VsdE9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluc2VydEN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbnNlcnRDdXN0b21lcihyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVDdXN0b21lcihyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlNZXRob2RzKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVsaXZlcnlNZXRob2QsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlPcHRpb25zKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVsaXZlcnlNZXRob2QsIHJlc3VsdC5yZXN1bHRPYmplY3RzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkOiBzdHJpbmcsIHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHV1aWQsIHJlbGF0aW9uSWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvblJlc3BvbnNlQmFzZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBvc3RhbENvZGVSZXRyaWV2YWwocG9zdGNhbENvZGU6IHN0cmluZywgaG91c2VObzogc3RyaW5nKTogUHJvbWlzZTxHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFBvc3RhbENvZGVSZXRyaWV2YWwocG9zdGNhbENvZGUsIGhvdXNlTm8pLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXRQYXJhbXM6IEdldFBvc3RhbENvZGVSZXRyaWV2YWxPdXRwdXRQYXJhbXMgPSBuZXcgR2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcygpO1xuICAgICAgICAgIG91dHB1dFBhcmFtcy5jaXR5ID0gcmVzdWx0LnJlc3VsdE9iamVjdC5jaXR5O1xuICAgICAgICAgIG91dHB1dFBhcmFtcy5zdHJlZXQgPSByZXN1bHQucmVzdWx0T2JqZWN0LnN0cmVldDtcbiAgICAgICAgICBvdXRwdXRQYXJhbXMuc3RhdHVzID0gcmVzdWx0LnJlc3VsdE9iamVjdC5zdGF0dXM7XG4gICAgICAgICAgb3V0cHV0UGFyYW1zLm5ldE51bWJlciA9IHJlc3VsdC5yZXN1bHRPYmplY3QubmV0TnVtYmVyO1xuICAgICAgICAgIHJlc29sdmUob3V0cHV0UGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3Q6IFJlbGF0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVsYXRpb25MaXN0T2JqZWN0W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFJlbGF0aW9uTGlzdE9iamVjdCwgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVHJhbnNhY3Rpb25MaW5lKFxuICAgIHV1aWQ6IHN0cmluZyxcbiAgICBhcnRpY2xlTGluZTogVHJhbnNhY3Rpb25MaW5lVHlwZSxcbiAgICBhcnRpY2xlTm86IHN0cmluZyxcbiAgICBhbW91bnQ6IG51bWJlcixcbiAgICB3YXJlaG91c2VObzogbnVtYmVyLFxuICAgIGNvbW1pc3Npb25Db2RlOiBzdHJpbmcsXG4gICAgaXNSZXR1cm46IGJvb2xlYW4sXG4gICAgYWJvdmVMaW5lTnI6IG51bWJlcixcbiAgICBiZWxvd0xpbmVOcjogbnVtYmVyXG4gICk6XG4gICAgUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUodXVpZCwgYXJ0aWNsZUxpbmUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRleHRMaW5lVG9UcmFuc2FjdGlvbih1dWlkOiBzdHJpbmcsIHNob3dPbkRvY3VtZW50czogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBhcnRpY2xlQm91bmQ6IGJvb2xlYW4sIHJlZkFydGljbGVMaW5lTnI6IG51bWJlciwgYWJvdmVMaW5lTnI/OiBudW1iZXIsIGJlbG93TGluZU5yPzogbnVtYmVyKTpcbiAgICBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFRleHRMaW5lVG9UcmFuc2FjdGlvbih1dWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQsIGFtb3VudCwgYXJ0aWNsZUJvdW5kLCByZWZBcnRpY2xlTGluZU5yLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZUxpbmVTZXF1ZW5jZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6XG4gICAgUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IENoYW5nZUxpbmVTZXF1ZW5jZVJlcXVlc3QgPSB7XG4gICAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgICBhYm92ZUxpbmVOcjogYWJvdmVMaW5lTnIsXG4gICAgICAgIGJlbG93TGluZU5yOiBiZWxvd0xpbmVOclxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZUxpbmVTZXF1ZW5jZShyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5jZWxBZGRUcmFuc2FjdGlvbkxpbmUobGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uTGluZSh1dWlkLCBsaW5lVXVpZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgICBsaW5lVXVpZDogbGluZVV1aWQsXG4gICAgICAgIG5ld1F1YW50aXR5OiBuZXdRdWFudGl0eVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlczogUmVzb2x2ZUxpbmVQZW5kaW5nUmVhc29uUmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IucmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8Q29Eb21haW5WYWx1ZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8Q29Eb21haW5WYWx1ZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKDxUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VbXT5yZXN1bHQucmVzdWx0T2JqZWN0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFJlbGF0aW9uQnlVc2VyKHV1aWQ6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih1dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUZXh0VHlwZXMobGFuZ3VhZ2VDb2RlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgdGV4dHM6IENvRG9tYWluVmFsdWVbXSA9IDxDb0RvbWFpblZhbHVlW10+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoQ29Eb21haW5WYWx1ZSwgcmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICAgIHRleHRzLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgPiBiLnNlcXVlbmNlID8gMSA6IC0xKTtcbiAgICAgICAgICByZXNvbHZlKHRleHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8U3RhbmRhcmRUZXh0W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGUpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFN0YW5kYXJkVGV4dCwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRCcmFuY2hlcyhicmFuY2hOcj86IHN0cmluZyk6IFByb21pc2U8QnJhbmNoTG92W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0QnJhbmNoZXMoYnJhbmNoTnIpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEJyYW5jaExvdiwgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2FsZXNQZXJzb25zKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxTYWxlc1BlcnNvbltdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFNhbGVzUGVyc29ucyhkYXRlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTYWxlc1BlcnNvbiwgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VGFncyhjYXRlZ29yeTogbnVtYmVyKTogUHJvbWlzZTxUYWdbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9jb2xsZWN0aW9uU2VydmljZS5nZXRDb2xsZWN0aW9uKFRhZy5uYW1lLCBbY2F0ZWdvcnldKTtcbiAgICAgIGlmIChjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGNvbGxlY3Rpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRhZ3MoY2F0ZWdvcnkpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBUYWdbXSA9IHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFRhZywgcmVzdWx0LnJlc3VsdE9iamVjdHMpIGFzIHVua25vd24gYXMgVGFnW107XG4gICAgICAgICAgdGhpcy5fY29sbGVjdGlvblNlcnZpY2UuY2FjaGVDb2xsZWN0aW9uKFRhZy5uYW1lLCBjb2xsZWN0aW9uLCBbY2F0ZWdvcnldKTtcbiAgICAgICAgICByZXNvbHZlKGNvbGxlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPbkhvbGRDb2RlcygpOiBQcm9taXNlPE9uSG9sZENvZGVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9jb2xsZWN0aW9uU2VydmljZS5nZXRDb2xsZWN0aW9uKE9uSG9sZENvZGUubmFtZSk7XG4gICAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShjb2xsZWN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRPbkhvbGRDb2RlcygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBPbkhvbGRDb2RlW10gPSB0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShPbkhvbGRDb2RlLCByZXN1bHQucmVzdWx0T2JqZWN0cykgYXMgdW5rbm93biBhcyBPbkhvbGRDb2RlW107XG4gICAgICAgICAgdGhpcy5fY29sbGVjdGlvblNlcnZpY2UuY2FjaGVDb2xsZWN0aW9uKE9uSG9sZENvZGUubmFtZSwgY29sbGVjdGlvbik7XG4gICAgICAgICAgcmVzb2x2ZShjb2xsZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0V2FyZWhvdXNlcyhicmFuY2hOcj86IHN0cmluZyk6IFByb21pc2U8V2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0V2FyZWhvdXNlcyhicmFuY2hOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoV2FyZWhvdXNlLCByZXN1bHQucmVzdWx0T2JqZWN0cykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk6IFByb21pc2U8Q29kZURlc2NyaXB0aW9uW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNTdGF0ZVZhbHVlcygpO1xuICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShDb2RlRGVzY3JpcHRpb24sIHJlc3VsdC5yZXN1bHRPYmplY3RzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQYXltZW50TWV0aG9kcygpOiBQcm9taXNlPFBheW1lbnRNZXRob2RbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQYXltZW50TWV0aG9kcygpO1xuICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShQYXltZW50TWV0aG9kLCByZXN1bHQucmVzdWx0T2JqZWN0cykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lQ29tbWlzc2lvbkNvZGUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIG5ld0NvbW1pc3Npb25Db2RlOiBjb2RlXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb21taXNzaW9uQ29kZShyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVdhcmVob3VzZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHdhcmVob3VzZU51bWJlcjogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXG4gICAgICBuZXdXYXJlaG91c2VOdW1iZXI6IHdhcmVob3VzZU51bWJlclxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lV2FyZWhvdXNlKHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICB0cmFuc2FjdGlvblV1aWQ6IHV1aWQsXG4gICAgICBsaW5lVXVpZDogbGluZVV1aWQsXG4gICAgICBuZXdQcmljZTogcHJpY2VcbiAgICB9O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlKHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2VMaXN0KHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcHJpY2VMaXN0OiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIG5ld1ByaWNlTGlzdENvZGU6IHByaWNlTGlzdFxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2VMaXN0KHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lVmF0KHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgaWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgbmV3VmF0SWQ6IGlkXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVWYXQocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVMaW5lRGlzY291bnQodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGRpc2NvdW50OiBudW1iZXIsIHJlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIGRpc2NvdW50VHlwZTogdHlwZSxcbiAgICAgIG5ld0Rpc2NvdW50OiBkaXNjb3VudCxcbiAgICAgIG5ld0Rpc2NvdW50UmVhc29uOiByZWFzb24sXG4gICAgICBuZXdEaXNjb3VudENvZGU6IGNvZGVcbiAgICB9O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURpc2NvdW50KHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlNZXRob2QodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgbmV3RGVsaXZlcnlNZXRob2RDb2RlOiBtZXRob2RcbiAgICB9O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURlbGl2ZXJ5TWV0aG9kKHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgbmV3RGVsaXZlcnlEYXRlOiBkYXRlXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeURhdGUocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVBc3NlbWJseVRpbWUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIG5ld0Fzc2VtYmx5VGltZTogdGltZVxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lQXNzZW1ibHlUaW1lKHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lRWRpdFRpbWUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIG5ld0VkaXRUaW1lOiB0aW1lXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVFZGl0VGltZShyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVN1cHBsaWVyQXJ0aWNsZU51bWJlcih1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGFydGljbGVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgbmV3U3VwcGxpZXJBcnRpY2xlTnVtYmVyOiBhcnRpY2xlTnVtYmVyXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVTdXBwbGllckFydGljbGVOdW1iZXIocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVSZWZlcmVuY2UodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNhY3Rpb25VdWlkOiB1dWlkLFxuICAgICAgbGluZVV1aWQ6IGxpbmVVdWlkLFxuICAgICAgbmV3UmVmZXJlbmNlOiByZWZlcmVuY2VcbiAgICB9O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVJlZmVyZW5jZShyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4pOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIG5ld1RyYW5zYWN0aW9uRGVmaW5pdGl2ZTogZGVmaW5pdGl2ZVxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWZpbml0aXZlKHJlcXVlc3QpO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hhbmdlVHJhbnNhY3Rpb25MaW5lQ29sbGVjdGlvbkNvZGUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHRyYW5zYWN0aW9uVXVpZDogdXVpZCxcbiAgICAgIGxpbmVVdWlkOiBsaW5lVXVpZCxcbiAgICAgIG5ld0NvbGxlY3Rpb25Db2RlOiBjb2RlXG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb2xsZWN0aW9uQ29kZShyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiA8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZU91dHN0YW5kaW5nRW50cnkodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxuICAgICAgYW1vdW50OiBhbW91bnRcbiAgICB9O1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNyZWF0ZU91dHN0YW5kaW5nRW50cnkocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyU2FsZXNPcmRlclBheW1lbnQoXG4gICAgdXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgY3VycmVuY3lDb2RlOiBudW1iZXIsIHBheW1lbnRNZXRob2Q6IHN0cmluZywgY2FzaFJlZ2lzdGVyR3JvdXBJZDogbnVtYmVyXG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgdHJhbnNVVUlEOiB1dWlkLFxuICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgIHBheW1lbnRNZXRob2RDb2RlOiBwYXltZW50TWV0aG9kLFxuICAgICAgY2FzaFJlZ2lzdGVyR3JvdXBJZDogY2FzaFJlZ2lzdGVyR3JvdXBJZFxuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucmVnaXN0ZXJTYWxlc09yZGVyUGF5bWVudChyZXF1ZXN0KTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNSZWNlaXB0U3RhdHVzKHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNSZWNlaXB0U3RhdHVzKHRyYW5zSWQsIGxpbmVOcik7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc1JlY2VpcHRTdGF0dXNXaXRoSGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc1JlY2VpcHRTdGF0dXNXaXRoSGlzdG9yeT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5Pjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEdvb2RzUmVjZWlwdFN0YXR1c1dpdGhIaXN0b3J5LCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyQ29ycmVjdGlvbihyZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlckNvcnJlY3Rpb24ocmVxdWVzdCk7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPjx1bmtub3duPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuIl19
|