@vendure/admin-ui 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/core/common/component-registry-types.d.ts +1 -1
  2. package/core/common/version.d.ts +1 -1
  3. package/core/components/app-shell/app-shell.component.d.ts +1 -0
  4. package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +4 -1
  5. package/core/providers/i18n/i18n.service.d.ts +4 -0
  6. package/dashboard/components/dashboard/dashboard.component.d.ts +4 -1
  7. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +3 -3
  8. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +2 -2
  9. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +4 -4
  10. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +2 -2
  11. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +7 -1
  12. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +7 -5
  13. package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +30 -30
  14. package/esm2022/core/app.config.mjs +3 -7
  15. package/esm2022/core/common/base-list.component.mjs +1 -1
  16. package/esm2022/core/common/component-registry-types.mjs +1 -1
  17. package/esm2022/core/common/generated-types.mjs +1 -1
  18. package/esm2022/core/common/version.mjs +2 -2
  19. package/esm2022/core/components/app-shell/app-shell.component.mjs +11 -9
  20. package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +1 -1
  21. package/esm2022/core/components/user-menu/user-menu.component.mjs +3 -3
  22. package/esm2022/core/data/data.module.mjs +3 -3
  23. package/esm2022/core/data/utils/transform-relation-custom-field-inputs.mjs +1 -1
  24. package/esm2022/core/providers/bulk-action-registry/bulk-action-types.mjs +1 -1
  25. package/esm2022/core/providers/dashboard-widget/dashboard-widget-types.mjs +1 -1
  26. package/esm2022/core/providers/dashboard-widget/dashboard-widget.service.mjs +5 -5
  27. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +1 -1
  28. package/esm2022/core/providers/i18n/i18n.service.mjs +15 -1
  29. package/esm2022/core/providers/page/page.service.mjs +1 -1
  30. package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
  31. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +3 -3
  32. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +1 -1
  33. package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +29 -29
  34. package/esm2022/core/shared/components/dropdown/dropdown.component.mjs +1 -1
  35. package/esm2022/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +1 -1
  36. package/esm2022/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +1 -1
  37. package/esm2022/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +1 -1
  38. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +1 -1
  39. package/esm2022/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +1 -1
  40. package/esm2022/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
  41. package/esm2022/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +1 -1
  42. package/esm2022/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +1 -1
  43. package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +1 -1
  44. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +14 -14
  45. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.mjs +1 -1
  46. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.mjs +3 -3
  47. package/esm2022/core/shared/shared.module.mjs +1 -1
  48. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +27 -27
  49. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +4 -4
  50. package/esm2022/order/components/draft-order-detail/draft-order-detail.component.mjs +3 -3
  51. package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +5 -3
  52. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +3 -3
  53. package/esm2022/order/components/order-detail/order-detail.component.mjs +13 -11
  54. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +9 -9
  55. package/fesm2022/vendure-admin-ui-catalog.mjs +48 -41
  56. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  57. package/fesm2022/vendure-admin-ui-core.mjs +79 -69
  58. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  59. package/fesm2022/vendure-admin-ui-customer.mjs +26 -26
  60. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  61. package/fesm2022/vendure-admin-ui-dashboard.mjs +3 -3
  62. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  63. package/fesm2022/vendure-admin-ui-order.mjs +20 -16
  64. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  65. package/fesm2022/vendure-admin-ui-settings.mjs +8 -8
  66. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  67. package/package.json +14 -14
  68. package/static/i18n-messages/ar.json +774 -0
  69. package/static/i18n-messages/cs.json +773 -773
  70. package/static/i18n-messages/de.json +773 -773
  71. package/static/i18n-messages/en.json +774 -774
  72. package/static/i18n-messages/es.json +773 -773
  73. package/static/i18n-messages/fr.json +773 -773
  74. package/static/i18n-messages/he.json +774 -0
  75. package/static/i18n-messages/it.json +773 -773
  76. package/static/i18n-messages/pl.json +773 -773
  77. package/static/i18n-messages/pt_BR.json +773 -773
  78. package/static/i18n-messages/pt_PT.json +773 -773
  79. package/static/i18n-messages/ru.json +773 -773
  80. package/static/i18n-messages/uk.json +773 -773
  81. package/static/i18n-messages/zh_Hans.json +773 -773
  82. package/static/i18n-messages/zh_Hant.json +773 -773
  83. package/static/vendure-ui-config.json +3 -0
@@ -173,10 +173,10 @@ export class DraftOrderDetailComponent extends TypedBaseDetailComponent {
173
173
  // empty
174
174
  }
175
175
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: DraftOrderDetailComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DataService }, { token: i1.NotificationService }, { token: i1.ModalService }, { token: i2.OrderTransitionService }], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: DraftOrderDetailComponent, selector: "vdr-draft-order-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-page-detail-layout *ngIf=\"entity$ | async as order\">\r\n <vdr-page-detail-sidebar>\r\n <vdr-card [title]=\"'order.customer' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n </ng-template>\r\n <vdr-customer-label\r\n class=\"block mb-2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"button-small\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.billing-address' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.shipping' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small mr-2\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"button-small\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card>\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"button-small\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.tax-summary' | translate\">\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency : order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency : order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </vdr-card>\r\n\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { kind: "component", type: i1.FormattedAddressComponent, selector: "vdr-formatted-address", inputs: ["address"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i1.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i1.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i1.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "directive", type: i1.CardControlsDirective, selector: "[vdrCardControls]" }, { kind: "component", type: i5.OrderCustomFieldsCardComponent, selector: "vdr-order-custom-fields-card", inputs: ["customFieldsConfig", "customFieldValues"], outputs: ["updateClick"] }, { kind: "component", type: i6.OrderTableComponent, selector: "vdr-order-table", inputs: ["order", "orderLineCustomFields", "isDraft"], outputs: ["adjust", "remove"] }, { kind: "component", type: i7.DraftOrderVariantSelectorComponent, selector: "vdr-draft-order-variant-selector", inputs: ["currencyCode", "orderLineCustomFields"], outputs: ["addItem"] }, { kind: "component", type: i8.CouponCodeSelectorComponent, selector: "vdr-coupon-code-selector", inputs: ["couponCodes", "control"], outputs: ["addCouponCode", "removeCouponCode"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.PercentPipe, name: "percent" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
176
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: DraftOrderDetailComponent, selector: "vdr-draft-order-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"draft-order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-page-detail-layout *ngIf=\"entity$ | async as order\">\r\n <vdr-page-detail-sidebar>\r\n <vdr-card [title]=\"'order.customer' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n </ng-template>\r\n <vdr-customer-label\r\n class=\"block mb-2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"button-small\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.billing-address' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.shipping' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small mr-2\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"button-small\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card>\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"button-small\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.tax-summary' | translate\">\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency : order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency : order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"draft-order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { kind: "component", type: i1.FormattedAddressComponent, selector: "vdr-formatted-address", inputs: ["address"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "component", type: i1.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i1.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i1.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i1.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "directive", type: i1.CardControlsDirective, selector: "[vdrCardControls]" }, { kind: "component", type: i5.OrderCustomFieldsCardComponent, selector: "vdr-order-custom-fields-card", inputs: ["customFieldsConfig", "customFieldValues"], outputs: ["updateClick"] }, { kind: "component", type: i6.OrderTableComponent, selector: "vdr-order-table", inputs: ["order", "orderLineCustomFields", "isDraft"], outputs: ["adjust", "remove"] }, { kind: "component", type: i7.DraftOrderVariantSelectorComponent, selector: "vdr-draft-order-variant-selector", inputs: ["currencyCode", "orderLineCustomFields"], outputs: ["addItem"] }, { kind: "component", type: i8.CouponCodeSelectorComponent, selector: "vdr-coupon-code-selector", inputs: ["couponCodes", "control"], outputs: ["addCouponCode", "removeCouponCode"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.PercentPipe, name: "percent" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
177
177
  }
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: DraftOrderDetailComponent, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'vdr-draft-order-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-page-detail-layout *ngIf=\"entity$ | async as order\">\r\n <vdr-page-detail-sidebar>\r\n <vdr-card [title]=\"'order.customer' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n </ng-template>\r\n <vdr-customer-label\r\n class=\"block mb-2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"button-small\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.billing-address' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.shipping' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small mr-2\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"button-small\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card>\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"button-small\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.tax-summary' | translate\">\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency : order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency : order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </vdr-card>\r\n\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n" }]
180
+ args: [{ selector: 'vdr-draft-order-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"draft-order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n\r\n<vdr-page-detail-layout *ngIf=\"entity$ | async as order\">\r\n <vdr-page-detail-sidebar>\r\n <vdr-card [title]=\"'order.customer' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n </ng-template>\r\n <vdr-customer-label\r\n class=\"block mb-2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"button-small\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.billing-address' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.shipping' | translate\">\r\n <ng-template vdrCardControls>\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n </ng-template>\r\n <vdr-formatted-address\r\n class=\"block mb-2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"button-small mr-2\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"button-small\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-card>\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"button-small\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card>\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.tax-summary' | translate\">\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency : order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency : order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"draft-order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n" }]
181
181
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DataService }, { type: i1.NotificationService }, { type: i1.ModalService }, { type: i2.OrderTransitionService }]; } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvZHJhZnQtb3JkZXItZGV0YWlsL2RyYWZ0LW9yZGVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL2RyYWZ0LW9yZGVyLWRldGFpbC9kcmFmdC1vcmRlci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUVILGNBQWMsRUFPZCx3QkFBd0IsR0FDM0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOzs7Ozs7Ozs7OztBQVEvSCxNQUFNLE9BQU8seUJBQ1QsU0FBUSx3QkFBa0U7SUFhMUUsWUFDWSxjQUFpQyxFQUMvQixXQUF3QixFQUMxQixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDMUIsc0JBQThDO1FBRXRELEtBQUssRUFBRSxDQUFDO1FBTkEsbUJBQWMsR0FBZCxjQUFj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a0JBTnJDLFNBQVM7K0JBQ0ksd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBEcmFmdE9yZGVyRWxpZ2libGVTaGlwcGluZ01ldGhvZHNRdWVyeSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBPcmRlcixcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICBPcmRlckRldGFpbFF1ZXJ5RG9jdW1lbnQsXHJcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgT3JkZXJUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9vcmRlci10cmFuc2l0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RBZGRyZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWFkZHJlc3MtZGlhbG9nL3NlbGVjdC1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RDdXN0b21lckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1jdXN0b21lci1kaWFsb2cvc2VsZWN0LWN1c3RvbWVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RTaGlwcGluZ01ldGhvZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1zaGlwcGluZy1tZXRob2QtZGlhbG9nL3NlbGVjdC1zaGlwcGluZy1tZXRob2QtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWRyYWZ0LW9yZGVyLWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RyYWZ0LW9yZGVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmFmdE9yZGVyRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgT3JkZXJEZXRhaWxRdWVyeURvY3VtZW50LCAnb3JkZXInPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlcicpO1xyXG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXJMaW5lJyk7XHJcbiAgICBkZXRhaWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG4gICAgZWxpZ2libGVTaGlwcGluZ01ldGhvZHMkOiBPYnNlcnZhYmxlPFxyXG4gICAgICAgIERyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5WydlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXInXVxyXG4gICAgPjtcclxuICAgIG5leHRTdGF0ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGZldGNoSGlzdG9yeSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBkaXNwbGF5Q291cG9uQ29kZUlucHV0ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZGVyVHJhbnNpdGlvblNlcnZpY2U6IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXJMaW5lJyk7XHJcbiAgICAgICAgdGhpcy5lbGlnaWJsZVNoaXBwaW5nTWV0aG9kcyQgPSB0aGlzLmVudGl0eSQucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldERyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kcyhvcmRlci5pZClcclxuICAgICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoeyBlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXIgfSkgPT4gZWxpZ2libGVTaGlwcGluZ01ldGhvZHNGb3JEcmFmdE9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtVG9PcmRlcihldmVudDogeyBwcm9kdWN0VmFyaWFudElkOiBzdHJpbmc7IHF1YW50aXR5OiBudW1iZXI7IGN1c3RvbUZpZWxkczogYW55IH0pIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmFkZEl0ZW1Ub0RyYWZ0T3JkZXIodGhpcy5pZCwgZXZlbnQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFkZEl0ZW1Ub0RyYWZ0T3JkZXIuX190eXBlbmFtZSAhPT0gJ09yZGVyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKChyZXN1bHQuYWRkSXRlbVRvRHJhZnRPcmRlciBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRqdXN0T3JkZXJMaW5lKGV2ZW50OiB7IGxpbmVJZDogc3RyaW5nOyBxdWFudGl0eTogbnVtYmVyIH0pIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC5hZGp1c3REcmFmdE9yZGVyTGluZSh0aGlzLmlkLCB7IG9yZGVyTGluZUlkOiBldmVudC5saW5lSWQsIHF1YW50aXR5OiBldmVudC5xdWFudGl0eSB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmFkanVzdERyYWZ0T3JkZXJMaW5lLl9fdHlwZW5hbWUgIT09ICdPcmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKHJlc3VsdC5hZGp1c3REcmFmdE9yZGVyTGluZSBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPcmRlckxpbmUoZXZlbnQ6IHsgbGluZUlkOiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIucmVtb3ZlRHJhZnRPcmRlckxpbmUodGhpcy5pZCwgZXZlbnQubGluZUlkKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yZW1vdmVEcmFmdE9yZGVyTGluZS5fX3R5cGVuYW1lICE9PSAnT3JkZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKHJlc3VsdC5yZW1vdmVEcmFmdE9yZGVyTGluZSBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXJBZGRyZXNzTGluZXMob3JkZXJBZGRyZXNzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIW9yZGVyQWRkcmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9yZGVyQWRkcmVzcylcclxuICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsICE9PSAnT3JkZXJBZGRyZXNzJylcclxuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICEhbGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VzdG9tZXIoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChTZWxlY3RDdXN0b21lckRpYWxvZ0NvbXBvbmVudCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lkKHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAuc2V0Q3VzdG9tZXJGb3JEcmFmdE9yZGVyKHRoaXMuaWQsIHsgY3VzdG9tZXJJZDogcmVzdWx0LmlkIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5zZXRDdXN0b21lckZvckRyYWZ0T3JkZXIodGhpcy5pZCwgeyBpbnB1dDogcmVzdWx0IH0pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2hpcHBpbmdBZGRyZXNzKCkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5JFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAob3JkZXIgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KFNlbGVjdEFkZHJlc3NEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lcklkOiBvcmRlci5jdXN0b21lcj8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWRkcmVzczogb3JkZXIuc2hpcHBpbmdBZGRyZXNzID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlclNoaXBwaW5nQWRkcmVzcyh0aGlzLmlkLCByZXN1bHQpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCaWxsaW5nQWRkcmVzcygpIHtcclxuICAgICAgICB0aGlzLmVudGl0eSRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChTZWxlY3RBZGRyZXNzRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJJZDogb3JkZXIuY3VzdG9tZXI/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFkZHJlc3M6IG9yZGVyLmJpbGxpbmdBZGRyZXNzID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlckJpbGxpbmdBZGRyZXNzKHRoaXMuaWQsIHJlc3VsdCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5Q291cG9uQ29kZShjb3Vwb25Db2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmFwcGx5Q291cG9uQ29kZVRvRHJhZnRPcmRlcih0aGlzLmlkLCBjb3Vwb25Db2RlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb3Vwb25Db2RlKGNvdXBvbkNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIucmVtb3ZlQ291cG9uQ29kZUZyb21EcmFmdE9yZGVyKHRoaXMuaWQsIGNvdXBvbkNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNoaXBwaW5nTWV0aG9kKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmVsaWdpYmxlU2hpcHBpbmdNZXRob2RzJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChbb3JkZXIsIG1ldGhvZHNdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoU2VsZWN0U2hpcHBpbmdNZXRob2REaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlnaWJsZVNoaXBwaW5nTWV0aG9kczogbWV0aG9kcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogb3JkZXIuY3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbklkOiBvcmRlci5zaGlwcGluZ0xpbmVzPy5bMF0/LnNoaXBwaW5nTWV0aG9kLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5zZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2QodGhpcy5pZCwgcmVzdWx0KS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3VzdG9tRmllbGRzKGN1c3RvbUZpZWxkc1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC51cGRhdGVPcmRlckN1c3RvbUZpZWxkcyh7XHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkczogY3VzdG9tRmllbGRzVmFsdWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVPcmRlcigpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmRlbGV0ZURyYWZ0T3JkZXIodGhpcy5pZCkuc3Vic2NyaWJlKCh7IGRlbGV0ZURyYWZ0T3JkZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlRHJhZnRPcmRlci5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ09yZGVyJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb3JkZXJzJ10pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbGV0ZURyYWZ0T3JkZXIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGRlbGV0ZURyYWZ0T3JkZXIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0ZU9yZGVyKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLnRyYW5zaXRpb25Ub1N0YXRlKHRoaXMuaWQsICdBcnJhbmdpbmdQYXltZW50JylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyB0cmFuc2l0aW9uT3JkZXJUb1N0YXRlIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lID09PSAnT3JkZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb3JkZXJzJywgdGhpcy5pZF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lID09PSAnT3JkZXJTdGF0ZVRyYW5zaXRpb25FcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZS50cmFuc2l0aW9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc0lkPFQgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4oaW5wdXQ6IFQgfCBhbnkpOiBpbnB1dCBpcyB7IGlkOiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgISFpbnB1dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IE9yZGVyRGV0YWlsRnJhZ21lbnQpOiB2b2lkIHtcclxuICAgICAgICAvLyBlbXB0eVxyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhciAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBvcmRlclwiPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlT3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW9yZGVyLmN1c3RvbWVyIHx8ICFvcmRlci5saW5lcy5sZW5ndGggfHwgIW9yZGVyLnNoaXBwaW5nTGluZXMubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiY2hlY2tcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ29yZGVyLmNvbXBsZXRlLWRyYWZ0LW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHZkckRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZGVsZXRlT3JkZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0cmFzaFwiIGNsYXNzPVwiaXMtZGFuZ2VyXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmRlbGV0ZS1kcmFmdC1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuXHJcbjx2ZHItcGFnZS1kZXRhaWwtbGF5b3V0ICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIG9yZGVyXCI+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInb3JkZXIuY3VzdG9tZXInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB2ZHJDYXJkQ29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gKm5nSWY9XCIhb3JkZXIuY3VzdG9tZXJcIiBzaGFwZT1cInVua25vd24tc3RhdHVzXCIgY2xhc3M9XCJpcy13YXJuaW5nXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cIm9yZGVyLmN1c3RvbWVyXCIgc2hhcGU9XCJjaGVja1wiIGNsYXNzPVwiaXMtc3VjY2Vzc1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItbGFiZWxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgbWItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLmN1c3RvbWVyXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21lcl09XCJvcmRlci5jdXN0b21lclwiXHJcbiAgICAgICAgICAgID48L3Zkci1jdXN0b21lci1sYWJlbD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbFwiIChjbGljayk9XCJzZXRDdXN0b21lcigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuc2V0LWN1c3RvbWVyLWZvci1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5iaWxsaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB2ZHJDYXJkQ29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFvcmRlci5iaWxsaW5nQWRkcmVzcy5zdHJlZXRMaW5lMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ1bmtub3duLXN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpcy13YXJuaW5nXCJcclxuICAgICAgICAgICAgICAgID48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlci5iaWxsaW5nQWRkcmVzcy5zdHJlZXRMaW5lMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJjaGVja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1zdWNjZXNzXCJcclxuICAgICAgICAgICAgICAgID48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dmRyLWZvcm1hdHRlZC1hZGRyZXNzXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJsb2NrIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlci5iaWxsaW5nQWRkcmVzc1wiXHJcbiAgICAgICAgICAgICAgICBbYWRkcmVzc109XCJvcmRlci5iaWxsaW5nQWRkcmVzc1wiXHJcbiAgICAgICAgICAgID48L3Zkci1mb3JtYXR0ZWQtYWRkcmVzcz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbFwiIChjbGljayk9XCJzZXRCaWxsaW5nQWRkcmVzcygpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuc2V0LWJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5zaGlwcGluZycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHZkckNhcmRDb250cm9scz5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW9yZGVyLnNoaXBwaW5nQWRkcmVzcy5zdHJlZXRMaW5lMSB8fCAhb3JkZXIuc2hpcHBpbmdMaW5lcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlPVwidW5rbm93bi1zdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtd2FybmluZ1wiXHJcbiAgICAgICAgICAgICAgICA+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIuc2hpcHBpbmdBZGRyZXNzLnN0cmVldExpbmUxICYmIG9yZGVyLnNoaXBwaW5nTGluZXMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZT1cImNoZWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDx2ZHItZm9ybWF0dGVkLWFkZHJlc3NcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgbWItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLnNoaXBwaW5nQWRkcmVzc1wiXHJcbiAgICAgICAgICAgICAgICBbYWRkcmVzc109XCJvcmRlci5zaGlwcGluZ0FkZHJlc3NcIlxyXG4gICAgICAgICAgICA+PC92ZHItZm9ybWF0dGVkLWFkZHJlc3M+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tc21hbGwgbXItMlwiIChjbGljayk9XCJzZXRTaGlwcGluZ0FkZHJlc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ29yZGVyLnNldC1zaGlwcGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHNoaXBwaW5nTGluZSBvZiBvcmRlci5zaGlwcGluZ0xpbmVzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzaGlwcGluZ0xpbmUuc2hpcHBpbmdNZXRob2QubmFtZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbFwiIChjbGljayk9XCJzZXRTaGlwcGluZ01ldGhvZCgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuc2V0LXNoaXBwaW5nLW1ldGhvZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIuY291cG9uQ29kZXMubGVuZ3RoID09PSAwICYmICFkaXNwbGF5Q291cG9uQ29kZUlucHV0XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5Q291cG9uQ29kZUlucHV0ID0gIWRpc3BsYXlDb3Vwb25Db2RlSW5wdXRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuc2V0LWNvdXBvbi1jb2RlcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcmRlci5jb3Vwb25Db2Rlcy5sZW5ndGggfHwgZGlzcGxheUNvdXBvbkNvZGVJbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdvcmRlci5zZXQtY291cG9uLWNvZGVzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWNvdXBvbi1jb2RlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvdXBvbkNvZGVzXT1cIm9yZGVyLmNvdXBvbkNvZGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAoYWRkQ291cG9uQ29kZSk9XCJhcHBseUNvdXBvbkNvZGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZUNvdXBvbkNvZGUpPVwicmVtb3ZlQ291cG9uQ29kZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1jb3Vwb24tY29kZS1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIiBbZW50aXR5XT1cImVudGl0eVwiIC8+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWRyYWZ0LW9yZGVyLXZhcmlhbnQtc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIFtvcmRlckxpbmVDdXN0b21GaWVsZHNdPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwib3JkZXIuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgIChhZGRJdGVtKT1cImFkZEl0ZW1Ub09yZGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItZHJhZnQtb3JkZXItdmFyaWFudC1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPHZkci1vcmRlci10YWJsZVxyXG4gICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgIFtvcmRlckxpbmVDdXN0b21GaWVsZHNdPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtpc0RyYWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgKGFkanVzdCk9XCJhZGp1c3RPcmRlckxpbmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZU9yZGVyTGluZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLW9yZGVyLXRhYmxlPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInb3JkZXIudGF4LXN1bW1hcnknIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmRlci50YXhTdW1tYXJ5Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRheC1yYXRlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRheC1iYXNlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRheC10b3RhbCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBvcmRlci50YXhTdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LmRlc2NyaXB0aW9uIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByb3cudGF4UmF0ZSAvIDEwMCB8IHBlcmNlbnQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy50YXhCYXNlIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy50YXhUb3RhbCB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgPHZkci1vcmRlci1jdXN0b20tZmllbGRzLWNhcmRcclxuICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0NvbmZpZ109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICBbY3VzdG9tRmllbGRWYWx1ZXNdPVwib3JkZXIuY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgKHVwZGF0ZUNsaWNrKT1cInVwZGF0ZUN1c3RvbUZpZWxkcygkZXZlbnQpXCJcclxuICAgICAgICA+PC92ZHItb3JkZXItY3VzdG9tLWZpZWxkcy1jYXJkPlxyXG4gICAgPC92ZHItcGFnZS1ibG9jaz5cclxuPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvZHJhZnQtb3JkZXItZGV0YWlsL2RyYWZ0LW9yZGVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL2RyYWZ0LW9yZGVyLWRldGFpbC9kcmFmdC1vcmRlci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUVILGNBQWMsRUFPZCx3QkFBd0IsR0FDM0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOzs7Ozs7Ozs7OztBQVEvSCxNQUFNLE9BQU8seUJBQ1QsU0FBUSx3QkFBa0U7SUFhMUUsWUFDWSxjQUFpQyxFQUMvQixXQUF3QixFQUMxQixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDMUIsc0JBQThDO1FBRXRELEtBQUssRUFBRSxDQUFDO1FBTkEsbUJBQWMsR0FBZCxjQUFj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a0JBTnJDLFNBQVM7K0JBQ0ksd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBEcmFmdE9yZGVyRWxpZ2libGVTaGlwcGluZ01ldGhvZHNRdWVyeSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBPcmRlcixcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICBPcmRlckRldGFpbFF1ZXJ5RG9jdW1lbnQsXHJcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgT3JkZXJUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9vcmRlci10cmFuc2l0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RBZGRyZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWFkZHJlc3MtZGlhbG9nL3NlbGVjdC1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RDdXN0b21lckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1jdXN0b21lci1kaWFsb2cvc2VsZWN0LWN1c3RvbWVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RTaGlwcGluZ01ldGhvZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1zaGlwcGluZy1tZXRob2QtZGlhbG9nL3NlbGVjdC1zaGlwcGluZy1tZXRob2QtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWRyYWZ0LW9yZGVyLWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RyYWZ0LW9yZGVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmFmdE9yZGVyRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgT3JkZXJEZXRhaWxRdWVyeURvY3VtZW50LCAnb3JkZXInPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlcicpO1xyXG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXJMaW5lJyk7XHJcbiAgICBkZXRhaWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG4gICAgZWxpZ2libGVTaGlwcGluZ01ldGhvZHMkOiBPYnNlcnZhYmxlPFxyXG4gICAgICAgIERyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5WydlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXInXVxyXG4gICAgPjtcclxuICAgIG5leHRTdGF0ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGZldGNoSGlzdG9yeSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBkaXNwbGF5Q291cG9uQ29kZUlucHV0ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZGVyVHJhbnNpdGlvblNlcnZpY2U6IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXJMaW5lJyk7XHJcbiAgICAgICAgdGhpcy5lbGlnaWJsZVNoaXBwaW5nTWV0aG9kcyQgPSB0aGlzLmVudGl0eSQucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldERyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kcyhvcmRlci5pZClcclxuICAgICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoeyBlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXIgfSkgPT4gZWxpZ2libGVTaGlwcGluZ01ldGhvZHNGb3JEcmFmdE9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtVG9PcmRlcihldmVudDogeyBwcm9kdWN0VmFyaWFudElkOiBzdHJpbmc7IHF1YW50aXR5OiBudW1iZXI7IGN1c3RvbUZpZWxkczogYW55IH0pIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmFkZEl0ZW1Ub0RyYWZ0T3JkZXIodGhpcy5pZCwgZXZlbnQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFkZEl0ZW1Ub0RyYWZ0T3JkZXIuX190eXBlbmFtZSAhPT0gJ09yZGVyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKChyZXN1bHQuYWRkSXRlbVRvRHJhZnRPcmRlciBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRqdXN0T3JkZXJMaW5lKGV2ZW50OiB7IGxpbmVJZDogc3RyaW5nOyBxdWFudGl0eTogbnVtYmVyIH0pIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC5hZGp1c3REcmFmdE9yZGVyTGluZSh0aGlzLmlkLCB7IG9yZGVyTGluZUlkOiBldmVudC5saW5lSWQsIHF1YW50aXR5OiBldmVudC5xdWFudGl0eSB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmFkanVzdERyYWZ0T3JkZXJMaW5lLl9fdHlwZW5hbWUgIT09ICdPcmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKHJlc3VsdC5hZGp1c3REcmFmdE9yZGVyTGluZSBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVPcmRlckxpbmUoZXZlbnQ6IHsgbGluZUlkOiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIucmVtb3ZlRHJhZnRPcmRlckxpbmUodGhpcy5pZCwgZXZlbnQubGluZUlkKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yZW1vdmVEcmFmdE9yZGVyTGluZS5fX3R5cGVuYW1lICE9PSAnT3JkZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKHJlc3VsdC5yZW1vdmVEcmFmdE9yZGVyTGluZSBhcyBhbnkpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3JkZXJBZGRyZXNzTGluZXMob3JkZXJBZGRyZXNzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIW9yZGVyQWRkcmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9yZGVyQWRkcmVzcylcclxuICAgICAgICAgICAgLmZpbHRlcih2YWwgPT4gdmFsICE9PSAnT3JkZXJBZGRyZXNzJylcclxuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICEhbGluZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q3VzdG9tZXIoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChTZWxlY3RDdXN0b21lckRpYWxvZ0NvbXBvbmVudCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lkKHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAuc2V0Q3VzdG9tZXJGb3JEcmFmdE9yZGVyKHRoaXMuaWQsIHsgY3VzdG9tZXJJZDogcmVzdWx0LmlkIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5zZXRDdXN0b21lckZvckRyYWZ0T3JkZXIodGhpcy5pZCwgeyBpbnB1dDogcmVzdWx0IH0pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2hpcHBpbmdBZGRyZXNzKCkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5JFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAob3JkZXIgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KFNlbGVjdEFkZHJlc3NEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lcklkOiBvcmRlci5jdXN0b21lcj8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QWRkcmVzczogb3JkZXIuc2hpcHBpbmdBZGRyZXNzID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlclNoaXBwaW5nQWRkcmVzcyh0aGlzLmlkLCByZXN1bHQpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCaWxsaW5nQWRkcmVzcygpIHtcclxuICAgICAgICB0aGlzLmVudGl0eSRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChTZWxlY3RBZGRyZXNzRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJJZDogb3JkZXIuY3VzdG9tZXI/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFkZHJlc3M6IG9yZGVyLmJpbGxpbmdBZGRyZXNzID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlckJpbGxpbmdBZGRyZXNzKHRoaXMuaWQsIHJlc3VsdCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5Q291cG9uQ29kZShjb3Vwb25Db2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmFwcGx5Q291cG9uQ29kZVRvRHJhZnRPcmRlcih0aGlzLmlkLCBjb3Vwb25Db2RlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb3Vwb25Db2RlKGNvdXBvbkNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIucmVtb3ZlQ291cG9uQ29kZUZyb21EcmFmdE9yZGVyKHRoaXMuaWQsIGNvdXBvbkNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNoaXBwaW5nTWV0aG9kKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmVsaWdpYmxlU2hpcHBpbmdNZXRob2RzJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChbb3JkZXIsIG1ldGhvZHNdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoU2VsZWN0U2hpcHBpbmdNZXRob2REaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlnaWJsZVNoaXBwaW5nTWV0aG9kczogbWV0aG9kcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogb3JkZXIuY3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbklkOiBvcmRlci5zaGlwcGluZ0xpbmVzPy5bMF0/LnNoaXBwaW5nTWV0aG9kLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5zZXREcmFmdE9yZGVyU2hpcHBpbmdNZXRob2QodGhpcy5pZCwgcmVzdWx0KS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3VzdG9tRmllbGRzKGN1c3RvbUZpZWxkc1ZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC51cGRhdGVPcmRlckN1c3RvbUZpZWxkcyh7XHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkczogY3VzdG9tRmllbGRzVmFsdWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVPcmRlcigpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmRlbGV0ZURyYWZ0T3JkZXIodGhpcy5pZCkuc3Vic2NyaWJlKCh7IGRlbGV0ZURyYWZ0T3JkZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlRHJhZnRPcmRlci5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ09yZGVyJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb3JkZXJzJ10pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlbGV0ZURyYWZ0T3JkZXIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGRlbGV0ZURyYWZ0T3JkZXIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0ZU9yZGVyKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLnRyYW5zaXRpb25Ub1N0YXRlKHRoaXMuaWQsICdBcnJhbmdpbmdQYXltZW50JylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyB0cmFuc2l0aW9uT3JkZXJUb1N0YXRlIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lID09PSAnT3JkZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb3JkZXJzJywgdGhpcy5pZF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lID09PSAnT3JkZXJTdGF0ZVRyYW5zaXRpb25FcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZS50cmFuc2l0aW9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc0lkPFQgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4oaW5wdXQ6IFQgfCBhbnkpOiBpbnB1dCBpcyB7IGlkOiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgISFpbnB1dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IE9yZGVyRGV0YWlsRnJhZ21lbnQpOiB2b2lkIHtcclxuICAgICAgICAvLyBlbXB0eVxyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhciAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBvcmRlclwiPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJkcmFmdC1vcmRlci1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29tcGxldGVPcmRlcigpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhb3JkZXIuY3VzdG9tZXIgfHwgIW9yZGVyLmxpbmVzLmxlbmd0aCB8fCAhb3JkZXIuc2hpcHBpbmdMaW5lcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjaGVja1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuY29tcGxldGUtZHJhZnQtb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnV0dG9uXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmRyRHJvcGRvd25JdGVtIChjbGljayk9XCJkZWxldGVPcmRlcigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuZGVsZXRlLWRyYWZ0LW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuPHZkci1wYWdlLWRldGFpbC1sYXlvdXQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5jdXN0b21lcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHZkckNhcmRDb250cm9scz5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiAqbmdJZj1cIiFvcmRlci5jdXN0b21lclwiIHNoYXBlPVwidW5rbm93bi1zdGF0dXNcIiBjbGFzcz1cImlzLXdhcm5pbmdcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uICpuZ0lmPVwib3JkZXIuY3VzdG9tZXJcIiBzaGFwZT1cImNoZWNrXCIgY2xhc3M9XCJpcy1zdWNjZXNzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHZkci1jdXN0b21lci1sYWJlbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayBtYi0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIuY3VzdG9tZXJcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbWVyXT1cIm9yZGVyLmN1c3RvbWVyXCJcclxuICAgICAgICAgICAgPjwvdmRyLWN1c3RvbWVyLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXNtYWxsXCIgKGNsaWNrKT1cInNldEN1c3RvbWVyKClcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5zZXQtY3VzdG9tZXItZm9yLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ29yZGVyLmJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHZkckNhcmRDb250cm9scz5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW9yZGVyLmJpbGxpbmdBZGRyZXNzLnN0cmVldExpbmUxXCJcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInVua25vd24tc3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLXdhcm5pbmdcIlxyXG4gICAgICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLmJpbGxpbmdBZGRyZXNzLnN0cmVldExpbmUxXCJcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZT1cImNoZWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlzLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDx2ZHItZm9ybWF0dGVkLWFkZHJlc3NcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgbWItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLmJpbGxpbmdBZGRyZXNzXCJcclxuICAgICAgICAgICAgICAgIFthZGRyZXNzXT1cIm9yZGVyLmJpbGxpbmdBZGRyZXNzXCJcclxuICAgICAgICAgICAgPjwvdmRyLWZvcm1hdHRlZC1hZGRyZXNzPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXNtYWxsXCIgKGNsaWNrKT1cInNldEJpbGxpbmdBZGRyZXNzKClcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5zZXQtYmlsbGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ29yZGVyLnNoaXBwaW5nJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgdmRyQ2FyZENvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhb3JkZXIuc2hpcHBpbmdBZGRyZXNzLnN0cmVldExpbmUxIHx8ICFvcmRlci5zaGlwcGluZ0xpbmVzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ1bmtub3duLXN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpcy13YXJuaW5nXCJcclxuICAgICAgICAgICAgICAgID48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlci5zaGlwcGluZ0FkZHJlc3Muc3RyZWV0TGluZTEgJiYgb3JkZXIuc2hpcHBpbmdMaW5lcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlPVwiY2hlY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICA+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHZkci1mb3JtYXR0ZWQtYWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayBtYi0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIuc2hpcHBpbmdBZGRyZXNzXCJcclxuICAgICAgICAgICAgICAgIFthZGRyZXNzXT1cIm9yZGVyLnNoaXBwaW5nQWRkcmVzc1wiXHJcbiAgICAgICAgICAgID48L3Zkci1mb3JtYXR0ZWQtYWRkcmVzcz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtci0yXCIgKGNsaWNrKT1cInNldFNoaXBwaW5nQWRkcmVzcygpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuc2V0LXNoaXBwaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2hpcHBpbmdMaW5lIG9mIG9yZGVyLnNoaXBwaW5nTGluZXNcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNoaXBwaW5nTGluZS5zaGlwcGluZ01ldGhvZC5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXNtYWxsXCIgKGNsaWNrKT1cInNldFNoaXBwaW5nTWV0aG9kKClcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5zZXQtc2hpcHBpbmctbWV0aG9kJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlci5jb3Vwb25Db2Rlcy5sZW5ndGggPT09IDAgJiYgIWRpc3BsYXlDb3Vwb25Db2RlSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGxcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlDb3Vwb25Db2RlSW5wdXQgPSAhZGlzcGxheUNvdXBvbkNvZGVJbnB1dFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5zZXQtY291cG9uLWNvZGVzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9yZGVyLmNvdXBvbkNvZGVzLmxlbmd0aCB8fCBkaXNwbGF5Q291cG9uQ29kZUlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ29yZGVyLnNldC1jb3Vwb24tY29kZXMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx2ZHItY291cG9uLWNvZGUtc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgICAgICBbY291cG9uQ29kZXNdPVwib3JkZXIuY291cG9uQ29kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChhZGRDb3Vwb25Db2RlKT1cImFwcGx5Q291cG9uQ29kZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocmVtb3ZlQ291cG9uQ29kZSk9XCJyZW1vdmVDb3Vwb25Db2RlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWNvdXBvbi1jb2RlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiIFtlbnRpdHldPVwiZW50aXR5XCIgLz5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgIDx2ZHItcGFnZS1ibG9jaz5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItZHJhZnQtb3JkZXItdmFyaWFudC1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgW29yZGVyTGluZUN1c3RvbUZpZWxkc109XCJvcmRlckxpbmVDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJvcmRlci5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgKGFkZEl0ZW0pPVwiYWRkSXRlbVRvT3JkZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1kcmFmdC1vcmRlci12YXJpYW50LXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8dmRyLW9yZGVyLXRhYmxlXHJcbiAgICAgICAgICAgICAgICBbb3JkZXJdPVwib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgW29yZGVyTGluZUN1c3RvbUZpZWxkc109XCJvcmRlckxpbmVDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgW2lzRHJhZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAoYWRqdXN0KT1cImFkanVzdE9yZGVyTGluZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlT3JkZXJMaW5lKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItb3JkZXItdGFibGU+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci50YXgtc3VtbWFyeScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9yZGVyLnRheFN1bW1hcnkubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdjb21tb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudGF4LXJhdGUnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudGF4LWJhc2UnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudGF4LXRvdGFsJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIG9yZGVyLnRheFN1bW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByb3cuZGVzY3JpcHRpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy50YXhSYXRlIC8gMTAwIHwgcGVyY2VudCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LnRheEJhc2UgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LnRheFRvdGFsIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICBsb2NhdGlvbklkPVwiZHJhZnQtb3JkZXItZGV0YWlsXCJcclxuICAgICAgICAgICAgW2VudGl0eSRdPVwiZW50aXR5JFwiXHJcbiAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG5cclxuICAgICAgICA8dmRyLW9yZGVyLWN1c3RvbS1maWVsZHMtY2FyZFxyXG4gICAgICAgICAgICBbY3VzdG9tRmllbGRzQ29uZmlnXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgIFtjdXN0b21GaWVsZFZhbHVlc109XCJvcmRlci5jdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAodXBkYXRlQ2xpY2spPVwidXBkYXRlQ3VzdG9tRmllbGRzKCRldmVudClcIlxyXG4gICAgICAgID48L3Zkci1vcmRlci1jdXN0b20tZmllbGRzLWNhcmQ+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG48L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiJdfQ==
@@ -43,7 +43,8 @@ export class FulfillOrderDialogComponent {
43
43
  }
44
44
  getUnfulfilledCount(line) {
45
45
  const fulfilled = this.order.fulfillments
46
- ?.map(f => f.lines)
46
+ ?.filter(f => f.state !== 'Cancelled')
47
+ .map(f => f.lines)
47
48
  .flat()
48
49
  .filter(row => row.orderLineId === line.id)
49
50
  .reduce((sum, row) => sum + row.quantity, 0) ?? 0;
@@ -51,8 +52,9 @@ export class FulfillOrderDialogComponent {
51
52
  }
52
53
  canSubmit() {
53
54
  const totalCount = Object.values(this.fulfillmentQuantities).reduce((total, { fulfillCount }) => total + fulfillCount, 0);
55
+ const fulfillmentQuantityIsValid = Object.values(this.fulfillmentQuantities).every(({ fulfillCount, max }) => fulfillCount <= max);
54
56
  const formIsValid = configurableOperationValueIsValid(this.fulfillmentHandlerDef, this.fulfillmentHandlerControl.value) && this.fulfillmentHandlerControl.valid;
55
- return formIsValid && 0 < totalCount;
57
+ return formIsValid && 0 < totalCount && fulfillmentQuantityIsValid;
56
58
  }
57
59
  select() {
58
60
  const lines = Object.entries(this.fulfillmentQuantities).map(([orderLineId, { fulfillCount }]) => ({
@@ -74,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
74
76
  type: Component,
75
77
  args: [{ selector: 'vdr-fulfill-order-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>{{ 'order.fulfill-order' | translate }}</ng-template>\r\n\r\n<div class=\"fulfillment-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unfulfilled' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n <th>{{ 'order.fulfill' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let line of order.lines\"\r\n class=\"order-line\"\r\n [class.ignore]=\"getUnfulfilledCount(line) === 0\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img *ngIf=\"line.featuredAsset\" [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">{{ getUnfulfilledCount(line) }}</td>\r\n <td class=\"align-middle quantity\">{{ line.productVariant.stockOnHand }}</td>\r\n <td class=\"align-middle fulfil\">\r\n <input\r\n *ngIf=\"fulfillmentQuantities[line.id]\"\r\n [disabled]=\"getUnfulfilledCount(line) === 0\"\r\n [(ngModel)]=\"fulfillmentQuantities[line.id].fulfillCount\"\r\n type=\"number\"\r\n [max]=\"fulfillmentQuantities[line.id].max\"\r\n min=\"0\"\r\n />\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"shipping-details\">\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6>{{ 'order.shipping-method' | translate }}</h6>\r\n {{ order.shippingLines[0]?.shippingMethod?.name }}\r\n <strong>{{ order.shipping | localeCurrency: order.currencyCode }}</strong>\r\n <vdr-configurable-input\r\n [operationDefinition]=\"fulfillmentHandlerDef\"\r\n [operation]=\"fulfillmentHandler\"\r\n [formControl]=\"fulfillmentHandlerControl\"\r\n [removable]=\"false\"\r\n ></vdr-configurable-input>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n {{ 'order.create-fulfillment' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;min-height:64vh}:host .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}:host .sub-total td{border-top:1px dashed var(--color-component-border-200)}:host .total td{font-weight:700;border-top:1px dashed var(--color-component-border-200)}:host td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}:host img{border-radius:var(--border-radius-img)}:host .order-line-custom-fields{display:flex;flex-wrap:wrap}:host .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}:host .draft-qty{max-width:48px}:host .order-line-custom-field{background-color:var(--color-component-bg-100)}:host .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}:host .net-price{font-size:11px;color:var(--color-text-300);line-height:14px}:host .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}:host .thumb img{width:50px;height:50px}:host .shipping-method-name{font-size:var(--font-size-xs);margin-right:2px}.fulfillment-wrapper{flex:1}@media screen and (min-width: 768px){.fulfillment-wrapper{display:flex;flex-direction:row}}.fulfillment-wrapper .shipping-details{margin-top:24px}@media screen and (min-width: 768px){.fulfillment-wrapper .shipping-details{margin-top:0;margin-left:24px;width:250px}}.fulfillment-wrapper .shipping-details clr-input-container{margin-top:24px}.fulfillment-wrapper .order-table{flex:1;overflow-y:auto}.fulfillment-wrapper .order-table table{margin-top:0}.fulfillment-wrapper tr.ignore{color:var(--color-grey-300)}\n"] }]
76
78
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i0.ChangeDetectorRef }]; } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsZmlsbC1vcmRlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9vcmRlci9zcmMvY29tcG9uZW50cy9mdWxmaWxsLW9yZGVyLWRpYWxvZy9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL2Z1bGZpbGwtb3JkZXItZGlhbG9nL2Z1bGZpbGwtb3JkZXItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxnQ0FBZ0MsRUFHaEMsaUNBQWlDLEVBSWpDLFVBQVUsRUFFViw0QkFBNEIsR0FDL0IsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUWhDLE1BQU0sT0FBTywyQkFBMkI7SUFVcEMsWUFBb0IsV0FBd0IsRUFBVSxjQUFpQztRQUFuRSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQU52Riw4QkFBeUIsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDckQsMEJBQXFCLEdBQWdFLEVBQUUsQ0FBQztJQUtFLENBQUM7SUFFM0YsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNsRSxN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LHlCQUF5QixDQUFDLEtBQUssQ0FDdkMsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO1FBQzlDLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU07UUFDRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRixXQUFXO1lBQ1gsUUFBUSxFQUFFLFlBQVk7U0FDekIsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2IsS0FBSztZQUNMLE9BQU8sRUFBRSw0QkFBNEIsQ0FDakMsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUN2QztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7OEdBdEZRLDJCQUEyQjtrR0FBM0IsMkJBQTJCLGdFQ3JCeEMsdTdGQTREQTs7MkZEdkNhLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDSSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIGNvbmZpZ3VyYWJsZURlZmluaXRpb25Ub0luc3RhbmNlLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbixcclxuICAgIGNvbmZpZ3VyYWJsZU9wZXJhdGlvblZhbHVlSXNWYWxpZCxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGlhbG9nLFxyXG4gICAgRnVsZmlsbE9yZGVySW5wdXQsXHJcbiAgICBHbG9iYWxGbGFnLFxyXG4gICAgT3JkZXJEZXRhaWxGcmFnbWVudCxcclxuICAgIHRvQ29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWZ1bGZpbGwtb3JkZXItZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdWxmaWxsT3JkZXJEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBEaWFsb2c8RnVsZmlsbE9yZGVySW5wdXQ+LCBPbkluaXQge1xyXG4gICAgcmVzb2x2ZVdpdGg6IChyZXN1bHQ/OiBGdWxmaWxsT3JkZXJJbnB1dCkgPT4gdm9pZDtcclxuICAgIGZ1bGZpbGxtZW50SGFuZGxlckRlZjogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbjtcclxuICAgIGZ1bGZpbGxtZW50SGFuZGxlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uO1xyXG4gICAgZnVsZmlsbG1lbnRIYW5kbGVyQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIGZ1bGZpbGxtZW50UXVhbnRpdGllczogeyBbbGluZUlkOiBzdHJpbmddOiB7IGZ1bGZpbGxDb3VudDogbnVtYmVyOyBtYXg6IG51bWJlciB9IH0gPSB7fTtcclxuXHJcbiAgICAvLyBQcm92aWRlZCBieSBtb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudCgpIGNhbGxcclxuICAgIG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzLmdldEdsb2JhbFNldHRpbmdzKCkuc2luZ2xlJC5zdWJzY3JpYmUoKHsgZ2xvYmFsU2V0dGluZ3MgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGZpbGxtZW50UXVhbnRpdGllcyA9IHRoaXMub3JkZXIubGluZXMucmVkdWNlKChyZXN1bHQsIGxpbmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGZpbGxDb3VudCA9IHRoaXMuZ2V0RnVsZmlsbGFibGVDb3VudChsaW5lLCBnbG9iYWxTZXR0aW5ncy50cmFja0ludmVudG9yeSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICBbbGluZS5pZF06IHsgZnVsZmlsbENvdW50LCBtYXg6IGZ1bGZpbGxDb3VudCB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNoaXBwaW5nTWV0aG9kXHJcbiAgICAgICAgICAgIC5nZXRTaGlwcGluZ01ldGhvZE9wZXJhdGlvbnMoKVxyXG4gICAgICAgICAgICAubWFwU2luZ2xlKGRhdGEgPT4gZGF0YS5mdWxmaWxsbWVudEhhbmRsZXJzKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGhhbmRsZXJzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsZmlsbG1lbnRIYW5kbGVyRGVmID1cclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoID0+IGguY29kZSA9PT0gdGhpcy5vcmRlci5zaGlwcGluZ0xpbmVzWzBdPy5zaGlwcGluZ01ldGhvZD8uZnVsZmlsbG1lbnRIYW5kbGVyQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIHx8IGhhbmRsZXJzWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXIgPSBjb25maWd1cmFibGVEZWZpbml0aW9uVG9JbnN0YW5jZSh0aGlzLmZ1bGZpbGxtZW50SGFuZGxlckRlZik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGZpbGxtZW50SGFuZGxlckNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmZ1bGZpbGxtZW50SGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGdWxmaWxsYWJsZUNvdW50KGxpbmU6IE9yZGVyRGV0YWlsRnJhZ21lbnRbJ2xpbmVzJ11bbnVtYmVyXSwgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHsgdHJhY2tJbnZlbnRvcnksIHN0b2NrT25IYW5kIH0gPSBsaW5lLnByb2R1Y3RWYXJpYW50O1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRyYWNJbnZlbnRvcnkgPVxyXG4gICAgICAgICAgICB0cmFja0ludmVudG9yeSA9PT0gR2xvYmFsRmxhZy5JTkhFUklUID8gZ2xvYmFsVHJhY2tJbnZlbnRvcnkgOiB0cmFja0ludmVudG9yeSA9PT0gR2xvYmFsRmxhZy5UUlVFO1xyXG5cclxuICAgICAgICBjb25zdCB1bmZ1bGZpbGxlZENvdW50ID0gdGhpcy5nZXRVbmZ1bGZpbGxlZENvdW50KGxpbmUpO1xyXG4gICAgICAgIHJldHVybiBlZmZlY3RpdmVUcmFjSW52ZW50b3J5ID8gTWF0aC5taW4odW5mdWxmaWxsZWRDb3VudCwgc3RvY2tPbkhhbmQpIDogdW5mdWxmaWxsZWRDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVbmZ1bGZpbGxlZENvdW50KGxpbmU6IE9yZGVyRGV0YWlsRnJhZ21lbnRbJ2xpbmVzJ11bbnVtYmVyXSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZnVsZmlsbGVkID1cclxuICAgICAgICAgICAgdGhpcy5vcmRlci5mdWxmaWxsbWVudHNcclxuICAgICAgICAgICAgICAgID8ubWFwKGYgPT4gZi5saW5lcylcclxuICAgICAgICAgICAgICAgIC5mbGF0KClcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocm93ID0+IHJvdy5vcmRlckxpbmVJZCA9PT0gbGluZS5pZClcclxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHN1bSwgcm93KSA9PiBzdW0gKyByb3cucXVhbnRpdHksIDApID8/IDA7XHJcbiAgICAgICAgcmV0dXJuIGxpbmUucXVhbnRpdHkgLSBmdWxmaWxsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZnVsZmlsbG1lbnRRdWFudGl0aWVzKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgICh0b3RhbCwgeyBmdWxmaWxsQ291bnQgfSkgPT4gdG90YWwgKyBmdWxmaWxsQ291bnQsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmb3JtSXNWYWxpZCA9XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZU9wZXJhdGlvblZhbHVlSXNWYWxpZChcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsZmlsbG1lbnRIYW5kbGVyRGVmLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXJDb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICApICYmIHRoaXMuZnVsZmlsbG1lbnRIYW5kbGVyQ29udHJvbC52YWxpZDtcclxuICAgICAgICByZXR1cm4gZm9ybUlzVmFsaWQgJiYgMCA8IHRvdGFsQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5mdWxmaWxsbWVudFF1YW50aXRpZXMpLm1hcCgoW29yZGVyTGluZUlkLCB7IGZ1bGZpbGxDb3VudCB9XSkgPT4gKHtcclxuICAgICAgICAgICAgb3JkZXJMaW5lSWQsXHJcbiAgICAgICAgICAgIHF1YW50aXR5OiBmdWxmaWxsQ291bnQsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICBsaW5lcyxcclxuICAgICAgICAgICAgaGFuZGxlcjogdG9Db25maWd1cmFibGVPcGVyYXRpb25JbnB1dChcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsZmlsbG1lbnRIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXJDb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmVXaXRoKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlIHZkckRpYWxvZ1RpdGxlPnt7ICdvcmRlci5mdWxmaWxsLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IGNsYXNzPVwiZnVsZmlsbG1lbnQtd3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm9yZGVyLXRhYmxlXCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvZHVjdC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci5wcm9kdWN0LXNrdScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudW5mdWxmaWxsZWQnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ2NhdGFsb2cuc3RvY2stb24taGFuZCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIuZnVsZmlsbCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGluZSBvZiBvcmRlci5saW5lc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9yZGVyLWxpbmVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlnbm9yZV09XCJnZXRVbmZ1bGZpbGxlZENvdW50KGxpbmUpID09PSAwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRodW1iXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImxpbmUuZmVhdHVyZWRBc3NldFwiIFtzcmNdPVwibGluZS5mZWF0dXJlZEFzc2V0IHwgYXNzZXRQcmV2aWV3OiAndGlueSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBuYW1lXCI+e3sgbGluZS5wcm9kdWN0VmFyaWFudC5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBza3VcIj57eyBsaW5lLnByb2R1Y3RWYXJpYW50LnNrdSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgcXVhbnRpdHlcIj57eyBnZXRVbmZ1bGZpbGxlZENvdW50KGxpbmUpIH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQuc3RvY2tPbkhhbmQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIGZ1bGZpbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZ1bGZpbGxtZW50UXVhbnRpdGllc1tsaW5lLmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRVbmZ1bGZpbGxlZENvdW50KGxpbmUpID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmdWxmaWxsbWVudFF1YW50aXRpZXNbbGluZS5pZF0uZnVsZmlsbENvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiZnVsZmlsbG1lbnRRdWFudGl0aWVzW2xpbmUuaWRdLm1heFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGlwcGluZy1kZXRhaWxzXCI+XHJcbiAgICAgICAgPHZkci1mb3JtYXR0ZWQtYWRkcmVzcyBbYWRkcmVzc109XCJvcmRlci5zaGlwcGluZ0FkZHJlc3NcIj48L3Zkci1mb3JtYXR0ZWQtYWRkcmVzcz5cclxuICAgICAgICA8aDY+e3sgJ29yZGVyLnNoaXBwaW5nLW1ldGhvZCcgfCB0cmFuc2xhdGUgfX08L2g2PlxyXG4gICAgICAgIHt7IG9yZGVyLnNoaXBwaW5nTGluZXNbMF0/LnNoaXBwaW5nTWV0aG9kPy5uYW1lIH19XHJcbiAgICAgICAgPHN0cm9uZz57eyBvcmRlci5zaGlwcGluZyB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX08L3N0cm9uZz5cclxuICAgICAgICA8dmRyLWNvbmZpZ3VyYWJsZS1pbnB1dFxyXG4gICAgICAgICAgICBbb3BlcmF0aW9uRGVmaW5pdGlvbl09XCJmdWxmaWxsbWVudEhhbmRsZXJEZWZcIlxyXG4gICAgICAgICAgICBbb3BlcmF0aW9uXT1cImZ1bGZpbGxtZW50SGFuZGxlclwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmdWxmaWxsbWVudEhhbmRsZXJDb250cm9sXCJcclxuICAgICAgICAgICAgW3JlbW92YWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgPjwvdmRyLWNvbmZpZ3VyYWJsZS1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dCdXR0b25zPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiY2FuY2VsKClcIj57eyAnY29tbW9uLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJzZWxlY3QoKVwiIFtkaXNhYmxlZF09XCIhY2FuU3VibWl0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxyXG4gICAgICAgIHt7ICdvcmRlci5jcmVhdGUtZnVsZmlsbG1lbnQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsZmlsbC1vcmRlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9vcmRlci9zcmMvY29tcG9uZW50cy9mdWxmaWxsLW9yZGVyLWRpYWxvZy9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL2Z1bGZpbGwtb3JkZXItZGlhbG9nL2Z1bGZpbGwtb3JkZXItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxnQ0FBZ0MsRUFHaEMsaUNBQWlDLEVBSWpDLFVBQVUsRUFFViw0QkFBNEIsR0FDL0IsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUWhDLE1BQU0sT0FBTywyQkFBMkI7SUFVcEMsWUFBb0IsV0FBd0IsRUFBVSxjQUFpQztRQUFuRSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQU52Riw4QkFBeUIsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDckQsMEJBQXFCLEdBQWdFLEVBQUUsQ0FBQztJQUtFLENBQUM7SUFFM0YsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNsRSxN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YW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgICBjb25maWd1cmFibGVEZWZpbml0aW9uVG9JbnN0YW5jZSxcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb24sXHJcbiAgICBjb25maWd1cmFibGVPcGVyYXRpb25WYWx1ZUlzVmFsaWQsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIERpYWxvZyxcclxuICAgIEZ1bGZpbGxPcmRlcklucHV0LFxyXG4gICAgR2xvYmFsRmxhZyxcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICB0b0NvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1mdWxmaWxsLW9yZGVyLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZnVsZmlsbC1vcmRlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZnVsZmlsbC1vcmRlci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnVsZmlsbE9yZGVyRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgRGlhbG9nPEZ1bGZpbGxPcmRlcklucHV0PiwgT25Jbml0IHtcclxuICAgIHJlc29sdmVXaXRoOiAocmVzdWx0PzogRnVsZmlsbE9yZGVySW5wdXQpID0+IHZvaWQ7XHJcbiAgICBmdWxmaWxsbWVudEhhbmRsZXJEZWY6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb247XHJcbiAgICBmdWxmaWxsbWVudEhhbmRsZXI6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbjtcclxuICAgIGZ1bGZpbGxtZW50SGFuZGxlckNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgICBmdWxmaWxsbWVudFF1YW50aXRpZXM6IHsgW2xpbmVJZDogc3RyaW5nXTogeyBmdWxmaWxsQ291bnQ6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB9ID0ge307XHJcblxyXG4gICAgLy8gUHJvdmlkZWQgYnkgbW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoKSBjYWxsXHJcbiAgICBvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5zZXR0aW5ncy5nZXRHbG9iYWxTZXR0aW5ncygpLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGdsb2JhbFNldHRpbmdzIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudFF1YW50aXRpZXMgPSB0aGlzLm9yZGVyLmxpbmVzLnJlZHVjZSgocmVzdWx0LCBsaW5lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxmaWxsQ291bnQgPSB0aGlzLmdldEZ1bGZpbGxhYmxlQ291bnQobGluZSwgZ2xvYmFsU2V0dGluZ3MudHJhY2tJbnZlbnRvcnkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmUuaWRdOiB7IGZ1bGZpbGxDb3VudCwgbWF4OiBmdWxmaWxsQ291bnQgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5zaGlwcGluZ01ldGhvZFxyXG4gICAgICAgICAgICAuZ2V0U2hpcHBpbmdNZXRob2RPcGVyYXRpb25zKClcclxuICAgICAgICAgICAgLm1hcFNpbmdsZShkYXRhID0+IGRhdGEuZnVsZmlsbG1lbnRIYW5kbGVycylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShoYW5kbGVycyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGZpbGxtZW50SGFuZGxlckRlZiA9XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaCA9PiBoLmNvZGUgPT09IHRoaXMub3JkZXIuc2hpcHBpbmdMaW5lc1swXT8uc2hpcHBpbmdNZXRob2Q/LmZ1bGZpbGxtZW50SGFuZGxlckNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSB8fCBoYW5kbGVyc1swXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsZmlsbG1lbnRIYW5kbGVyID0gY29uZmlndXJhYmxlRGVmaW5pdGlvblRvSW5zdGFuY2UodGhpcy5mdWxmaWxsbWVudEhhbmRsZXJEZWYpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXJDb250cm9sLnBhdGNoVmFsdWUodGhpcy5mdWxmaWxsbWVudEhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RnVsZmlsbGFibGVDb3VudChsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0sIGdsb2JhbFRyYWNrSW52ZW50b3J5OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB7IHRyYWNrSW52ZW50b3J5LCBzdG9ja09uSGFuZCB9ID0gbGluZS5wcm9kdWN0VmFyaWFudDtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUcmFjSW52ZW50b3J5ID1cclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuSU5IRVJJVCA/IGdsb2JhbFRyYWNrSW52ZW50b3J5IDogdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuVFJVRTtcclxuXHJcbiAgICAgICAgY29uc3QgdW5mdWxmaWxsZWRDb3VudCA9IHRoaXMuZ2V0VW5mdWxmaWxsZWRDb3VudChsaW5lKTtcclxuICAgICAgICByZXR1cm4gZWZmZWN0aXZlVHJhY0ludmVudG9yeSA/IE1hdGgubWluKHVuZnVsZmlsbGVkQ291bnQsIHN0b2NrT25IYW5kKSA6IHVuZnVsZmlsbGVkQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VW5mdWxmaWxsZWRDb3VudChsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGZ1bGZpbGxlZCA9XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZnVsZmlsbG1lbnRzXHJcbiAgICAgICAgICAgICAgICA/LmZpbHRlcihmID0+IGYuc3RhdGUgIT09ICdDYW5jZWxsZWQnKVxyXG4gICAgICAgICAgICAgICAgLm1hcChmID0+IGYubGluZXMpXHJcbiAgICAgICAgICAgICAgICAuZmxhdCgpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHJvdyA9PiByb3cub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQpXHJcbiAgICAgICAgICAgICAgICAucmVkdWNlKChzdW0sIHJvdykgPT4gc3VtICsgcm93LnF1YW50aXR5LCAwKSA/PyAwO1xyXG4gICAgICAgIHJldHVybiBsaW5lLnF1YW50aXR5IC0gZnVsZmlsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblN1Ym1pdCgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZ1bGZpbGxtZW50UXVhbnRpdGllcykucmVkdWNlKFxyXG4gICAgICAgICAgICAodG90YWwsIHsgZnVsZmlsbENvdW50IH0pID0+IHRvdGFsICsgZnVsZmlsbENvdW50LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZnVsZmlsbG1lbnRRdWFudGl0eUlzVmFsaWQgPSBPYmplY3QudmFsdWVzKHRoaXMuZnVsZmlsbG1lbnRRdWFudGl0aWVzKS5ldmVyeShcclxuICAgICAgICAgICAgKHsgZnVsZmlsbENvdW50LCBtYXggfSkgPT4gZnVsZmlsbENvdW50IDw9IG1heCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZvcm1Jc1ZhbGlkID1cclxuICAgICAgICAgICAgY29uZmlndXJhYmxlT3BlcmF0aW9uVmFsdWVJc1ZhbGlkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXJEZWYsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGZpbGxtZW50SGFuZGxlckNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICkgJiYgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXJDb250cm9sLnZhbGlkO1xyXG4gICAgICAgIHJldHVybiBmb3JtSXNWYWxpZCAmJiAwIDwgdG90YWxDb3VudCAmJiBmdWxmaWxsbWVudFF1YW50aXR5SXNWYWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmZ1bGZpbGxtZW50UXVhbnRpdGllcykubWFwKChbb3JkZXJMaW5lSWQsIHsgZnVsZmlsbENvdW50IH1dKSA9PiAoe1xyXG4gICAgICAgICAgICBvcmRlckxpbmVJZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGZ1bGZpbGxDb3VudCxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCh7XHJcbiAgICAgICAgICAgIGxpbmVzLFxyXG4gICAgICAgICAgICBoYW5kbGVyOiB0b0NvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxmaWxsbWVudEhhbmRsZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGZpbGxtZW50SGFuZGxlckNvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoKTtcclxuICAgIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgdmRyRGlhbG9nVGl0bGU+e3sgJ29yZGVyLmZ1bGZpbGwtb3JkZXInIHwgdHJhbnNsYXRlIH19PC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgY2xhc3M9XCJmdWxmaWxsbWVudC13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3JkZXItdGFibGVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci5wcm9kdWN0LW5hbWUnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnByb2R1Y3Qtc2t1JyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci51bmZ1bGZpbGxlZCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnY2F0YWxvZy5zdG9jay1vbi1oYW5kJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci5mdWxmaWxsJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaW5lIG9mIG9yZGVyLmxpbmVzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwib3JkZXItbGluZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaWdub3JlXT1cImdldFVuZnVsZmlsbGVkQ291bnQobGluZSkgPT09IDBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGh1bWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwibGluZS5mZWF0dXJlZEFzc2V0XCIgW3NyY109XCJsaW5lLmZlYXR1cmVkQXNzZXQgfCBhc3NldFByZXZpZXc6ICd0aW55J1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIG5hbWVcIj57eyBsaW5lLnByb2R1Y3RWYXJpYW50Lm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eVwiPnt7IGdldFVuZnVsZmlsbGVkQ291bnQobGluZSkgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHF1YW50aXR5XCI+e3sgbGluZS5wcm9kdWN0VmFyaWFudC5zdG9ja09uSGFuZCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgZnVsZmlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZnVsZmlsbG1lbnRRdWFudGl0aWVzW2xpbmUuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldFVuZnVsZmlsbGVkQ291bnQobGluZSkgPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZ1bGZpbGxtZW50UXVhbnRpdGllc1tsaW5lLmlkXS5mdWxmaWxsQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJmdWxmaWxsbWVudFF1YW50aXRpZXNbbGluZS5pZF0ubWF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaXBwaW5nLWRldGFpbHNcIj5cclxuICAgICAgICA8dmRyLWZvcm1hdHRlZC1hZGRyZXNzIFthZGRyZXNzXT1cIm9yZGVyLnNoaXBwaW5nQWRkcmVzc1wiPjwvdmRyLWZvcm1hdHRlZC1hZGRyZXNzPlxyXG4gICAgICAgIDxoNj57eyAnb3JkZXIuc2hpcHBpbmctbWV0aG9kJyB8IHRyYW5zbGF0ZSB9fTwvaDY+XHJcbiAgICAgICAge3sgb3JkZXIuc2hpcHBpbmdMaW5lc1swXT8uc2hpcHBpbmdNZXRob2Q/Lm5hbWUgfX1cclxuICAgICAgICA8c3Ryb25nPnt7IG9yZGVyLnNoaXBwaW5nIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxyXG4gICAgICAgIDx2ZHItY29uZmlndXJhYmxlLWlucHV0XHJcbiAgICAgICAgICAgIFtvcGVyYXRpb25EZWZpbml0aW9uXT1cImZ1bGZpbGxtZW50SGFuZGxlckRlZlwiXHJcbiAgICAgICAgICAgIFtvcGVyYXRpb25dPVwiZnVsZmlsbG1lbnRIYW5kbGVyXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZ1bGZpbGxtZW50SGFuZGxlckNvbnRyb2xcIlxyXG4gICAgICAgICAgICBbcmVtb3ZhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICA+PC92ZHItY29uZmlndXJhYmxlLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICdjb21tb24uY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInNlbGVjdCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5TdWJtaXQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAge3sgJ29yZGVyLmNyZWF0ZS1mdWxmaWxsbWVudCcgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=