@vendure/admin-ui 2.0.1 → 2.0.3

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 (132) hide show
  1. package/catalog/components/move-collections-dialog/move-collections-dialog.component.d.ts +3 -2
  2. package/catalog/components/product-variant-list/product-variant-list-bulk-actions.d.ts +6 -0
  3. package/catalog/public_api.d.ts +1 -1
  4. package/core/common/base-detail.component.d.ts +1 -0
  5. package/core/common/component-registry-types.d.ts +2 -2
  6. package/core/common/generated-types.d.ts +13 -0
  7. package/core/common/version.d.ts +1 -1
  8. package/core/components/theme-switcher/theme-switcher.component.d.ts +1 -0
  9. package/core/data/definitions/product-definitions.d.ts +1 -0
  10. package/core/data/providers/product-data.service.d.ts +1 -0
  11. package/core/shared/components/chart/chart.component.d.ts +3 -1
  12. package/core/shared/components/data-table-filters/data-table-filters.component.d.ts +1 -0
  13. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -0
  14. package/core/shared/components/dropdown/dropdown.component.d.ts +1 -1
  15. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +6 -0
  16. package/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +5 -2
  17. package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +4 -2
  18. package/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.d.ts +8 -5
  19. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +1 -4
  20. package/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.d.ts +0 -1
  21. package/core/shared/shared.module.d.ts +2 -1
  22. package/esm2022/catalog/catalog.module.mjs +5 -1
  23. package/esm2022/catalog/components/asset-list/asset-list.component.mjs +3 -3
  24. package/esm2022/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +11 -14
  25. package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +34 -8
  26. package/esm2022/catalog/components/product-list/product-list.component.mjs +3 -3
  27. package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +1 -1
  28. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +4 -5
  29. package/esm2022/catalog/components/product-variant-list/product-variant-list-bulk-actions.mjs +92 -0
  30. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +5 -5
  31. package/esm2022/catalog/public_api.mjs +2 -2
  32. package/esm2022/core/common/base-detail.component.mjs +3 -3
  33. package/esm2022/core/common/base-list.component.mjs +2 -2
  34. package/esm2022/core/common/component-registry-types.mjs +1 -1
  35. package/esm2022/core/common/generated-types.mjs +2 -1
  36. package/esm2022/core/common/introspection-result.mjs +1 -1
  37. package/esm2022/core/common/title-setter.mjs +1 -1
  38. package/esm2022/core/common/version.mjs +2 -2
  39. package/esm2022/core/components/app-shell/app-shell.component.mjs +3 -3
  40. package/esm2022/core/components/base-nav/base-nav.component.mjs +1 -1
  41. package/esm2022/core/components/breadcrumb/breadcrumb.component.mjs +3 -3
  42. package/esm2022/core/components/main-nav/main-nav.component.mjs +2 -2
  43. package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +15 -5
  44. package/esm2022/core/components/user-menu/user-menu.component.mjs +3 -3
  45. package/esm2022/core/data/definitions/product-definitions.mjs +9 -1
  46. package/esm2022/core/data/providers/interceptor.mjs +1 -1
  47. package/esm2022/core/data/providers/product-data.service.mjs +7 -2
  48. package/esm2022/core/data/utils/transform-relation-custom-field-inputs.mjs +2 -2
  49. package/esm2022/core/providers/bulk-action-registry/bulk-action-types.mjs +1 -1
  50. package/esm2022/core/providers/custom-field-component/custom-field-component.service.mjs +1 -1
  51. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +2 -2
  52. package/esm2022/core/providers/local-storage/local-storage.service.mjs +1 -1
  53. package/esm2022/core/providers/page/page.service.mjs +1 -1
  54. package/esm2022/core/shared/components/action-bar-items/action-bar-items.component.mjs +1 -1
  55. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
  56. package/esm2022/core/shared/components/asset-search-input/asset-search-input.component.mjs +3 -3
  57. package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
  58. package/esm2022/core/shared/components/chart/chart.component.mjs +6 -2
  59. package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
  60. package/esm2022/core/shared/components/currency-code-selector/currency-code-selector.component.mjs +1 -1
  61. package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
  62. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +24 -15
  63. package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +65 -24
  64. package/esm2022/core/shared/components/dropdown/dropdown.component.mjs +1 -1
  65. package/esm2022/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +3 -3
  66. package/esm2022/core/shared/components/language-code-selector/language-code-selector.component.mjs +1 -1
  67. package/esm2022/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +4 -3
  68. package/esm2022/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +16 -3
  69. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +3 -1
  70. package/esm2022/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +7 -4
  71. package/esm2022/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +9 -8
  72. package/esm2022/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +3 -2
  73. package/esm2022/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +10 -5
  74. package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +1 -1
  75. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +14 -15
  76. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.mjs +1 -3
  77. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.mjs +3 -3
  78. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.mjs +3 -3
  79. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.mjs +3 -3
  80. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.mjs +2 -2
  81. package/esm2022/core/shared/pipes/state-i18n-token.pipe.mjs +1 -1
  82. package/esm2022/core/shared/shared.module.mjs +9 -4
  83. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +29 -29
  84. package/esm2022/customer/components/customer-list/customer-list.component.mjs +24 -24
  85. package/esm2022/customer/customer.module.mjs +9 -2
  86. package/esm2022/customer/customer.routes.mjs +1 -1
  87. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +1 -1
  88. package/esm2022/dashboard/default-widgets.mjs +2 -1
  89. package/esm2022/dashboard/widgets/order-chart-widget/order-chart-widget.component.mjs +1 -1
  90. package/esm2022/marketing/marketing.module.mjs +1 -1
  91. package/esm2022/order/components/order-detail/order-detail.component.mjs +8 -8
  92. package/esm2022/order/components/order-list/order-list.component.mjs +9 -2
  93. package/esm2022/order/components/order-table/order-table.component.mjs +3 -3
  94. package/esm2022/order/order.module.mjs +1 -1
  95. package/esm2022/order/order.routes.mjs +1 -1
  96. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +12 -11
  97. package/esm2022/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +3 -3
  98. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +8 -8
  99. package/esm2022/settings/settings.module.mjs +1 -1
  100. package/fesm2022/vendure-admin-ui-catalog.mjs +141 -81
  101. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  102. package/fesm2022/vendure-admin-ui-core.mjs +203 -98
  103. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  104. package/fesm2022/vendure-admin-ui-customer.mjs +58 -51
  105. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  106. package/fesm2022/vendure-admin-ui-dashboard.mjs +2 -1
  107. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  108. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  109. package/fesm2022/vendure-admin-ui-order.mjs +17 -10
  110. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  111. package/fesm2022/vendure-admin-ui-settings.mjs +20 -19
  112. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  113. package/package.json +19 -19
  114. package/static/i18n-messages/cs.json +772 -770
  115. package/static/i18n-messages/de.json +773 -771
  116. package/static/i18n-messages/en.json +773 -771
  117. package/static/i18n-messages/es.json +773 -771
  118. package/static/i18n-messages/fr.json +773 -771
  119. package/static/i18n-messages/it.json +773 -771
  120. package/static/i18n-messages/pl.json +773 -771
  121. package/static/i18n-messages/pt_BR.json +773 -771
  122. package/static/i18n-messages/pt_PT.json +773 -771
  123. package/static/i18n-messages/ru.json +773 -771
  124. package/static/i18n-messages/uk.json +773 -771
  125. package/static/i18n-messages/zh_Hans.json +773 -771
  126. package/static/i18n-messages/zh_Hant.json +773 -771
  127. package/static/styles/global/_buttons.scss +63 -49
  128. package/static/styles/global/_forms.scss +5 -1
  129. package/static/styles/theme/default.scss +2 -0
  130. package/static/theme.min.css +1 -1
  131. package/catalog/components/product-variant-list/product-list-bulk-actions.d.ts +0 -3
  132. package/esm2022/catalog/components/product-variant-list/product-list-bulk-actions.mjs +0 -55
@@ -24,13 +24,13 @@ import * as i8 from "../fulfillment-card/fulfillment-card.component";
24
24
  import * as i9 from "../order-table/order-table.component";
25
25
  import * as i10 from "../seller-orders-card/seller-orders-card.component";
26
26
  import * as i11 from "@ngx-translate/core";
27
- export const ORDER_DETAIL_QUERY = gql `
28
- query OrderDetailQuery($id: ID!) {
29
- order(id: $id) {
30
- ...OrderDetail
31
- }
32
- }
33
- ${ORDER_DETAIL_FRAGMENT}
27
+ export const ORDER_DETAIL_QUERY = gql `
28
+ query OrderDetailQuery($id: ID!) {
29
+ order(id: $id) {
30
+ ...OrderDetail
31
+ }
32
+ }
33
+ ${ORDER_DETAIL_FRAGMENT}
34
34
  `;
35
35
  export class OrderDetailComponent extends TypedBaseDetailComponent {
36
36
  constructor(changeDetector, dataService, notificationService, modalService, orderTransitionService, formBuilder) {
@@ -549,4 +549,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
549
549
  type: Component,
550
550
  args: [{ selector: 'vdr-order-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left> </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"button primary mr-1\"\r\n *ngIf=\"\r\n order.type !== 'Aggregate' &&\r\n (order.state === 'ArrangingPayment' || order.state === 'ArrangingAdditionalPayment') &&\r\n (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))\r\n \"\r\n (click)=\"addManualPayment(order)\"\r\n >\r\n {{ 'order.add-payment-to-order' | translate }}\r\n ({{ outstandingPaymentAmount(order) | localeCurrency : order.currencyCode }})\r\n </button>\r\n <button\r\n class=\"button primary mr-1\"\r\n *ngIf=\"\r\n order.type !== 'Aggregate' &&\r\n order.active === false &&\r\n order.state !== 'ArrangingAdditionalPayment' &&\r\n order.state !== 'ArrangingPayment' &&\r\n 0 < outstandingPaymentAmount(order)\r\n \"\r\n (click)=\"transitionToState('ArrangingAdditionalPayment')\"\r\n >\r\n {{ 'order.arrange-additional-payment' | translate }}\r\n </button>\r\n <button\r\n *ngIf=\"order.type !== 'Aggregate'\"\r\n class=\"button primary mr-1\"\r\n (click)=\"fulfillOrder()\"\r\n [disabled]=\"!canAddFulfillment(order)\"\r\n >\r\n {{ 'order.fulfill-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 <ng-container\r\n *ngIf=\"order.type !== 'Aggregate' && order.nextStates.includes('Modifying')\"\r\n >\r\n <button type=\"button\" vdrDropdownItem (click)=\"transitionToModifying()\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'order.modify-order' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n vdrDropdownItem\r\n *ngIf=\"order.type !== 'Aggregate' && order.nextStates.includes('Cancelled')\"\r\n (click)=\"cancelOrRefund(order)\"\r\n >\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n <ng-container *ngIf=\"orderHasSettledPayments(order); else cancelOnly\">\r\n {{ 'order.refund-and-cancel-order' | translate }}\r\n </ng-container>\r\n <ng-template #cancelOnly>\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-template>\r\n </button>\r\n\r\n <ng-container *ngIf=\"(nextStates$ | async)?.length\">\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n *ngFor=\"let nextState of nextStates$ | async\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"transitionToState(nextState)\"\r\n >\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate : { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </button>\r\n </ng-container>\r\n <div class=\"dropdown-divider\"></div>\r\n <button type=\"button\" vdrDropdownItem (click)=\"manuallyTransitionToState(order)\">\r\n <clr-icon shape=\"step-forward-2\" class=\"is-warning\"></clr-icon>\r\n {{ 'order.manually-transition-to-state' | 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>\r\n <vdr-order-state-label [state]=\"order.state\">\r\n <button\r\n class=\"icon-button\"\r\n (click)=\"openStateDiagram()\"\r\n [title]=\"'order.order-state-diagram' | translate\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n </button>\r\n </vdr-order-state-label>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.customer' | translate\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n <vdr-labeled-data\r\n class=\"mt-2\"\r\n [label]=\"'order.shipping-address' | translate\"\r\n *ngIf=\"getOrderAddressLines(order.shippingAddress).length\"\r\n >\r\n <vdr-formatted-address [address]=\"order.shippingAddress\" class=\"mt-1\"></vdr-formatted-address>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n [label]=\"'order.billing-address' | translate\"\r\n *ngIf=\"getOrderAddressLines(order.billingAddress).length\"\r\n >\r\n <vdr-formatted-address [address]=\"order.billingAddress\" class=\"mt-1\"></vdr-formatted-address>\r\n </vdr-labeled-data>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.payments' | translate\" *ngIf=\"order.payments?.length\">\r\n <vdr-order-payment-card\r\n *ngFor=\"let payment of order.payments\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [payment]=\"payment\"\r\n (settlePayment)=\"settlePayment($event)\"\r\n (transitionPaymentState)=\"transitionPaymentState($event)\"\r\n (settleRefund)=\"settleRefund($event)\"\r\n ></vdr-order-payment-card>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"order.fulfillments?.length\">\r\n <vdr-fulfillment-card\r\n *ngFor=\"let fulfillment of order.fulfillments\"\r\n [fulfillment]=\"fulfillment\"\r\n [order]=\"order\"\r\n (transitionState)=\"transitionFulfillment(fulfillment.id, $event)\"\r\n ></vdr-fulfillment-card>\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\r\n <vdr-page-block>\r\n <vdr-seller-orders-card\r\n class=\"mb-2\"\r\n *ngIf=\"order.sellerOrders.length\"\r\n [orderId]=\"order.id\"\r\n ></vdr-seller-orders-card>\r\n <vdr-card [paddingX]=\"false\">\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n ></vdr-order-table>\r\n </vdr-card>\r\n <vdr-card [title]=\"'order.tax-summary' | translate\" [paddingX]=\"false\">\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 </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Order\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdateOrder' | hasPermission)\"\r\n />\r\n <button\r\n class=\"button primary\"\r\n (click)=\"updateCustomFields()\"\r\n [disabled]=\"\r\n detailForm.get('customFields')?.pristine || detailForm.get('customFields')?.invalid\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card [title]=\"'order.order-history' | translate\">\r\n <vdr-order-history\r\n [order]=\"order\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNote($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-order-history>\r\n </vdr-card>\r\n </vdr-page-block>\r\n</vdr-page-detail-layout>\r\n", styles: [".shipping-address{list-style-type:none;line-height:1.3em}.order-cards h6{margin-top:6px;color:var(--color-text-200)}\n"] }]
551
551
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DataService }, { type: i1.NotificationService }, { type: i1.ModalService }, { type: i2.OrderTransitionService }, { type: i3.FormBuilder }]; } });
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZGV0YWlsL29yZGVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWRldGFpbC9vcmRlci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBZSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCx1QkFBdUIsRUFNdkIscUJBQXFCLEVBSXJCLFNBQVMsRUFFVCx3QkFBd0IsR0FDM0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNuSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0NBQWdD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QU0sQ0FBQyxDQUFDO1NBQ25HO0lBQ0wsQ0FBQzs4R0Eza0JRLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtFQ2pEakMsOHFVQW9OQTs7MkZEbkthLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIEVkaXROb3RlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgRnVsZmlsbG1lbnRGcmFnbWVudCxcclxuICAgIEdldE9yZGVySGlzdG9yeVF1ZXJ5LFxyXG4gICAgR2V0T3JkZXJRdWVyeSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBPUkRFUl9ERVRBSUxfRlJBR01FTlQsXHJcbiAgICBPcmRlckRldGFpbEZyYWdtZW50LFxyXG4gICAgT3JkZXJEZXRhaWxRdWVyeURvY3VtZW50LFxyXG4gICAgUmVmdW5kLFxyXG4gICAgU29ydE9yZGVyLFxyXG4gICAgVGltZWxpbmVIaXN0b3J5RW50cnksXHJcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydE5ldmVyLCBzdW1tYXRlIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1hcFRvLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvb3JkZXItdHJhbnNpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkTWFudWFsUGF5bWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FkZC1tYW51YWwtcGF5bWVudC1kaWFsb2cvYWRkLW1hbnVhbC1wYXltZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDYW5jZWxPcmRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NhbmNlbC1vcmRlci1kaWFsb2cvY2FuY2VsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGdWxmaWxsT3JkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9mdWxmaWxsLW9yZGVyLWRpYWxvZy9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPcmRlclByb2Nlc3NHcmFwaERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLXByb2Nlc3MtZ3JhcGgtZGlhbG9nL29yZGVyLXByb2Nlc3MtZ3JhcGgtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlZnVuZE9yZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVmdW5kLW9yZGVyLWRpYWxvZy9yZWZ1bmQtb3JkZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNldHRsZVJlZnVuZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NldHRsZS1yZWZ1bmQtZGlhbG9nL3NldHRsZS1yZWZ1bmQtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG50eXBlIFBheW1lbnQgPSBOb25OdWxsYWJsZTxPcmRlckRldGFpbEZyYWdtZW50WydwYXltZW50cyddPltudW1iZXJdO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9SREVSX0RFVEFJTF9RVUVSWSA9IGdxbGBcclxuICAgIHF1ZXJ5IE9yZGVyRGV0YWlsUXVlcnkoJGlkOiBJRCEpIHtcclxuICAgICAgICBvcmRlcihpZDogJGlkKSB7XHJcbiAgICAgICAgICAgIC4uLk9yZGVyRGV0YWlsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHtPUkRFUl9ERVRBSUxfRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLW9yZGVyLWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmRlckRldGFpbENvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQ8dHlwZW9mIE9yZGVyRGV0YWlsUXVlcnlEb2N1bWVudCwgJ29yZGVyJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXInKTtcclxuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xyXG4gICAgZGV0YWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICksXHJcbiAgICB9KTtcclxuICAgIGhpc3RvcnkkOiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPEdldE9yZGVySGlzdG9yeVF1ZXJ5WydvcmRlciddPlsnaGlzdG9yeSddWydpdGVtcyddIHwgdW5kZWZpbmVkPjtcclxuICAgIG5leHRTdGF0ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGZldGNoSGlzdG9yeSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTdGF0ZXMgPSBbXHJcbiAgICAgICAgJ0FkZGluZ0l0ZW1zJyxcclxuICAgICAgICAnQXJyYW5naW5nUGF5bWVudCcsXHJcbiAgICAgICAgJ1BheW1lbnRBdXRob3JpemVkJyxcclxuICAgICAgICAnUGF5bWVudFNldHRsZWQnLFxyXG4gICAgICAgICdQYXJ0aWFsbHlTaGlwcGVkJyxcclxuICAgICAgICAnU2hpcHBlZCcsXHJcbiAgICAgICAgJ1BhcnRpYWxseURlbGl2ZXJlZCcsXHJcbiAgICAgICAgJ0RlbGl2ZXJlZCcsXHJcbiAgICAgICAgJ0NhbmNlbGxlZCcsXHJcbiAgICAgICAgJ01vZGlmeWluZycsXHJcbiAgICAgICAgJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50JyxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZGVyVHJhbnNpdGlvblNlcnZpY2U6IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvcmRlciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcmRlci5zdGF0ZSA9PT0gJ01vZGlmeWluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCAnbW9kaWZ5J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeSQgPSB0aGlzLmZldGNoSGlzdG9yeS5waXBlKFxyXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRPcmRlckhpc3RvcnkodGhpcy5pZCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEub3JkZXI/Lmhpc3RvcnkuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5uZXh0U3RhdGVzJCA9IHRoaXMuZW50aXR5JC5waXBlKFxyXG4gICAgICAgICAgICBtYXAob3JkZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbkN1c3RvbVN0YXRlID0gIXRoaXMuZGVmYXVsdFN0YXRlcy5pbmNsdWRlcyhvcmRlci5zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNJbkN1c3RvbVN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgPyBvcmRlci5uZXh0U3RhdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgOiBvcmRlci5uZXh0U3RhdGVzLmZpbHRlcihzID0+ICF0aGlzLmRlZmF1bHRTdGF0ZXMuaW5jbHVkZXMocykpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5TdGF0ZURpYWdyYW0oKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChvcmRlciA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoT3JkZXJQcm9jZXNzR3JhcGhEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3RhdGU6IG9yZGVyLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNpdGlvblRvU3RhdGUoc3RhdGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIudHJhbnNpdGlvblRvU3RhdGUodGhpcy5pZCwgc3RhdGUpLnN1YnNjcmliZSgoeyB0cmFuc2l0aW9uT3JkZXJUb1N0YXRlIH0pID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdPcmRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIudHJhbnNpdGlvbmVkLXRvLXN0YXRlLXN1Y2Nlc3MnKSwgeyBzdGF0ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSGlzdG9yeS5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdPcmRlclN0YXRlVHJhbnNpdGlvbkVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZS50cmFuc2l0aW9uRXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFudWFsbHlUcmFuc2l0aW9uVG9TdGF0ZShvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xyXG4gICAgICAgIHRoaXMub3JkZXJUcmFuc2l0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAubWFudWFsbHlUcmFuc2l0aW9uVG9TdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcklkOiBvcmRlci5pZCxcclxuICAgICAgICAgICAgICAgIG5leHRTdGF0ZXM6IG9yZGVyLm5leHRTdGF0ZXMsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IF8oJ29yZGVyLm1hbnVhbGx5LXRyYW5zaXRpb24tdG8tc3RhdGUtbWVzc2FnZScpLFxyXG4gICAgICAgICAgICAgICAgcmV0cnk6IDAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uVG9Nb2RpZnlpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAudHJhbnNpdGlvblRvU3RhdGUodGhpcy5pZCwgJ01vZGlmeWluZycpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgdHJhbnNpdGlvbk9yZGVyVG9TdGF0ZSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRyYW5zaXRpb25PcmRlclRvU3RhdGU/Ll9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi9tb2RpZnknXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlclN0YXRlVHJhbnNpdGlvbkVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRyYW5zaXRpb25PcmRlclRvU3RhdGUudHJhbnNpdGlvbkVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3VzdG9tRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLnVwZGF0ZU9yZGVyQ3VzdG9tRmllbGRzKHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmRldGFpbEZvcm0udmFsdWUuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwgeyBlbnRpdHk6ICdPcmRlcicgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9yZGVyQWRkcmVzc0xpbmVzKG9yZGVyQWRkcmVzcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgaWYgKCFvcmRlckFkZHJlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhvcmRlckFkZHJlc3MpXHJcbiAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCAhPT0gJ09yZGVyQWRkcmVzcycpXHJcbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhIWxpbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHRsZVBheW1lbnQocGF5bWVudDogUGF5bWVudCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0dGxlUGF5bWVudChwYXltZW50LmlkKS5zdWJzY3JpYmUoKHsgc2V0dGxlUGF5bWVudCB9KSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoc2V0dGxlUGF5bWVudC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50JzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGxlUGF5bWVudC5zdGF0ZSA9PT0gJ1NldHRsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLnNldHRsZS1wYXltZW50LXN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ29yZGVyLnNldHRsZS1wYXltZW50LWVycm9yJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmdldE9yZGVyKHRoaXMuaWQpLnNpbmdsZSQuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnT3JkZXJTdGF0ZVRyYW5zaXRpb25FcnJvcic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50U3RhdGVUcmFuc2l0aW9uRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU2V0dGxlUGF5bWVudEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3Ioc2V0dGxlUGF5bWVudC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb25QYXltZW50U3RhdGUoeyBwYXltZW50LCBzdGF0ZSB9OiB7IHBheW1lbnQ6IFBheW1lbnQ7IHN0YXRlOiBzdHJpbmcgfSkge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ0NhbmNlbGxlZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5jYW5jZWxQYXltZW50KHBheW1lbnQuaWQpLnN1YnNjcmliZSgoeyBjYW5jZWxQYXltZW50IH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FuY2VsUGF5bWVudC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLnRyYW5zaXRpb25lZC1wYXltZW50LXRvLXN0YXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmdldE9yZGVyKHRoaXMuaWQpLnNpbmdsZSQuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudFN0YXRlVHJhbnNpdGlvbkVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGNhbmNlbFBheW1lbnQudHJhbnNpdGlvbkVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2FuY2VsUGF5bWVudEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGNhbmNlbFBheW1lbnQucGF5bWVudEVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvblBheW1lbnRUb1N0YXRlKHBheW1lbnQuaWQsIHN0YXRlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyB0cmFuc2l0aW9uUGF5bWVudFRvU3RhdGUgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJhbnNpdGlvblBheW1lbnRUb1N0YXRlLl9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCdvcmRlci50cmFuc2l0aW9uZWQtcGF5bWVudC10by1zdGF0ZS1zdWNjZXNzJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZ2V0T3JkZXIodGhpcy5pZCkuc2luZ2xlJC5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50U3RhdGVUcmFuc2l0aW9uRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRyYW5zaXRpb25QYXltZW50VG9TdGF0ZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYW5BZGRGdWxmaWxsbWVudChvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGFsbEZ1bGZpbGxtZW50TGluZXM6IEZ1bGZpbGxtZW50RnJhZ21lbnRbJ2xpbmVzJ10gPSAob3JkZXIuZnVsZmlsbG1lbnRzID8/IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChhbGwsIGZ1bGZpbGxtZW50KSA9PiBbLi4uYWxsLCAuLi5mdWxmaWxsbWVudC5saW5lc10sXHJcbiAgICAgICAgICAgIFtdIGFzIEZ1bGZpbGxtZW50RnJhZ21lbnRbJ2xpbmVzJ10sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgYWxsSXRlbXNGdWxmaWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvcmRlci5saW5lcykge1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbEZ1bGZpbGxlZENvdW50ID0gYWxsRnVsZmlsbG1lbnRMaW5lc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lm9yZGVyTGluZUlkID09PSBsaW5lLmlkKVxyXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCByb3cpID0+IHN1bSArIHJvdy5xdWFudGl0eSwgMCk7XHJcbiAgICAgICAgICAgIGlmICh0b3RhbEZ1bGZpbGxlZENvdW50IDwgbGluZS5xdWFudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgYWxsSXRlbXNGdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhYWxsSXRlbXNGdWxmaWxsZWQgJiZcclxuICAgICAgICAgICAgIXRoaXMuaGFzVW5zZXR0bGVkTW9kaWZpY2F0aW9ucyhvcmRlcikgJiZcclxuICAgICAgICAgICAgdGhpcy5vdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXIpID09PSAwICYmXHJcbiAgICAgICAgICAgIChvcmRlci5uZXh0U3RhdGVzLmluY2x1ZGVzKCdTaGlwcGVkJykgfHxcclxuICAgICAgICAgICAgICAgIG9yZGVyLm5leHRTdGF0ZXMuaW5jbHVkZXMoJ1BhcnRpYWxseVNoaXBwZWQnKSB8fFxyXG4gICAgICAgICAgICAgICAgb3JkZXIubmV4dFN0YXRlcy5pbmNsdWRlcygnRGVsaXZlcmVkJykpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNVbnNldHRsZWRNb2RpZmljYXRpb25zKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIDAgPCBvcmRlci5tb2RpZmljYXRpb25zLmZpbHRlcihtID0+ICFtLmlzU2V0dGxlZCkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE91dHN0YW5kaW5nTW9kaWZpY2F0aW9uQW1vdW50KG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gc3VtbWF0ZShcclxuICAgICAgICAgICAgb3JkZXIubW9kaWZpY2F0aW9ucy5maWx0ZXIobSA9PiAhbS5pc1NldHRsZWQpLFxyXG4gICAgICAgICAgICAncHJpY2VDaGFuZ2UnLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0c3RhbmRpbmdQYXltZW50QW1vdW50KG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBwYXltZW50SXNWYWxpZCA9IChwOiBQYXltZW50KTogYm9vbGVhbiA9PlxyXG4gICAgICAgICAgICBwLnN0YXRlICE9PSAnQ2FuY2VsbGVkJyAmJiBwLnN0YXRlICE9PSAnRGVjbGluZWQnICYmIHAuc3RhdGUgIT09ICdFcnJvcic7XHJcblxyXG4gICAgICAgIGxldCBhbW91bnRDb3ZlcmVkID0gMDtcclxuICAgICAgICBmb3IgKGNvbnN0IHBheW1lbnQgb2Ygb3JkZXIucGF5bWVudHM/LmZpbHRlcihwYXltZW50SXNWYWxpZCkgPz8gW10pIHtcclxuICAgICAgICAgICAgY29uc3QgcmVmdW5kcyA9IHBheW1lbnQucmVmdW5kcy5maWx0ZXIociA9PiByLnN0YXRlICE9PSAnRmFpbGVkJykgPz8gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZnVuZHNUb3RhbCA9IHN1bW1hdGUocmVmdW5kcyBhcyBBcnJheTxSZXF1aXJlZDxSZWZ1bmQ+PiwgJ3RvdGFsJyk7XHJcbiAgICAgICAgICAgIGFtb3VudENvdmVyZWQgKz0gcGF5bWVudC5hbW91bnQgLSByZWZ1bmRzVG90YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcmRlci50b3RhbFdpdGhUYXggLSBhbW91bnRDb3ZlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE1hbnVhbFBheW1lbnQob3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmlvclN0YXRlID0gb3JkZXIuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQWRkTWFudWFsUGF5bWVudERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZ0Ftb3VudDogdGhpcy5vdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogb3JkZXIuY3VycmVuY3lDb2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmFkZE1hbnVhbFBheW1lbnRUb09yZGVyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVySWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiByZXN1bHQudHJhbnNhY3Rpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcmVzdWx0Lm1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXN1bHQubWV0YWRhdGEgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBhZGRNYW51YWxQYXltZW50VG9PcmRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhZGRNYW51YWxQYXltZW50VG9PcmRlci5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLmFkZC1wYXltZW50LXRvLW9yZGVyLXN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JTdGF0ZSA9PT0gJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9yZGVyVHJhbnNpdGlvblNlcnZpY2UudHJhbnNpdGlvblRvUHJlTW9kaWZ5aW5nU3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlci5uZXh0U3RhdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZignUGF5bWVudFNldHRsZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTWFudWFsUGF5bWVudFN0YXRlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGFkZE1hbnVhbFBheW1lbnRUb09yZGVyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hPcmRlcih7IHJlc3VsdCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVsZmlsbE9yZGVyKCkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5JFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAob3JkZXIgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KEZ1bGZpbGxPcmRlckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpbnB1dCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmNyZWF0ZUZ1bGZpbGxtZW50KGlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4gdGhpcy5yZWZldGNoT3JkZXIocmVzdWx0KS5waXBlKG1hcFRvKHJlc3VsdCkpKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBhZGRGdWxmaWxsbWVudFRvT3JkZXIgfSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFkZEZ1bGZpbGxtZW50VG9PcmRlci5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Z1bGZpbGxtZW50JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLmNyZWF0ZS1mdWxmaWxsbWVudC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VtcHR5T3JkZXJMaW5lU2VsZWN0aW9uRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnN1ZmZpY2llbnRTdG9ja09uSGFuZEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSXRlbXNBbHJlYWR5RnVsZmlsbGVkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnZhbGlkRnVsZmlsbG1lbnRIYW5kbGVyRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGFkZEZ1bGZpbGxtZW50VG9PcmRlci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGdWxmaWxsbWVudFN0YXRlVHJhbnNpdGlvbkVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihhZGRGdWxmaWxsbWVudFRvT3JkZXIudHJhbnNpdGlvbkVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDcmVhdGVGdWxmaWxsbWVudEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihhZGRGdWxmaWxsbWVudFRvT3JkZXIuZnVsZmlsbG1lbnRIYW5kbGVyRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KGFkZEZ1bGZpbGxtZW50VG9PcmRlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihhZGRGdWxmaWxsbWVudFRvT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNpdGlvbkZ1bGZpbGxtZW50KGlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uRnVsZmlsbG1lbnRUb1N0YXRlKGlkLCBzdGF0ZSlcclxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHJlc3VsdCA9PiB0aGlzLnJlZmV0Y2hPcmRlcihyZXN1bHQpKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdvcmRlci5zdWNjZXNzZnVsbHktdXBkYXRlZC1mdWxmaWxsbWVudCcpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsT3JSZWZ1bmQob3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCBpc1JlZnVuZGFibGUgPSB0aGlzLm9yZGVySGFzU2V0dGxlZFBheW1lbnRzKG9yZGVyKTtcclxuICAgICAgICBpZiAob3JkZXIuc3RhdGUgPT09ICdQYXltZW50QXV0aG9yaXplZCcgfHwgb3JkZXIuYWN0aXZlID09PSB0cnVlIHx8ICFpc1JlZnVuZGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxPcmRlcihvcmRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZ1bmRPcmRlcihvcmRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldHRsZVJlZnVuZChyZWZ1bmQ6IFBheW1lbnRbJ3JlZnVuZHMnXVtudW1iZXJdKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoU2V0dGxlUmVmdW5kRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmdW5kLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAodHJhbnNhY3Rpb25JZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0dGxlUmVmdW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlZnVuZC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgLy8gc3dpdGNoTWFwKHJlc3VsdCA9PiB0aGlzLnJlZmV0Y2hPcmRlcihyZXN1bHQpKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIuc2V0dGxlLXJlZnVuZC1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGROb3RlKGV2ZW50OiB7IG5vdGU6IHN0cmluZzsgaXNQdWJsaWM6IGJvb2xlYW4gfSkge1xyXG4gICAgICAgIGNvbnN0IHsgbm90ZSwgaXNQdWJsaWMgfSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLmFkZE5vdGVUb09yZGVyKHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgbm90ZSxcclxuICAgICAgICAgICAgICAgIGlzUHVibGljLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAocmVzdWx0ID0+IHRoaXMucmVmZXRjaE9yZGVyKHJlc3VsdCkpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdOb3RlJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVOb3RlKGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSkge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEVkaXROb3RlRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlQcml2YWN5Q29udHJvbHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogZW50cnkuZGF0YS5ub3RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGVJc1ByaXZhdGU6ICFlbnRyeS5pc1B1YmxpYyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci51cGRhdGVPcmRlck5vdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZUlkOiBlbnRyeS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHVibGljOiAhcmVzdWx0LmlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IHJlc3VsdC5ub3RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTm90ZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY29tbW9uLmNvbmZpcm0tZGVsZXRlLW5vdGUnKSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IGVudHJ5LmRhdGEubm90ZSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZGFuZ2VyJywgbGFiZWw6IF8oJ2NvbW1vbi5kZWxldGUnKSwgcmV0dXJuVmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gKHJlcyA/IHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZGVsZXRlT3JkZXJOb3RlKGVudHJ5LmlkKSA6IEVNUFRZKSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3JkZXJIYXNTZXR0bGVkUGF5bWVudHMob3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFvcmRlci5wYXltZW50cz8uZmluZChwID0+IHAuc3RhdGUgPT09ICdTZXR0bGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW5jZWxPcmRlcihvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KENhbmNlbE9yZGVyRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpbnB1dCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmNhbmNlbE9yZGVyKGlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4gdGhpcy5yZWZldGNoT3JkZXIocmVzdWx0KSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLmNhbmNlbGxlZC1vcmRlci1zdWNjZXNzJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZnVuZE9yZGVyKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoUmVmdW5kT3JkZXJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGlucHV0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNhbmNlbC5saW5lcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmNhbmNlbE9yZGVyKGlucHV0LmNhbmNlbCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcy5jYW5jZWxPcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXRjaE9yZGVyKHJlc3VsdCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdvcmRlci5jYW5jZWxsZWQtb3JkZXItc3VjY2VzcycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2FuY2VsQWN0aXZlT3JkZXJFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1F1YW50aXR5VG9vR3JlYXRFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ011bHRpcGxlT3JkZXJFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyU3RhdGVUcmFuc2l0aW9uRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFbXB0eU9yZGVyTGluZVNlbGVjdGlvbkVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5wdXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGlucHV0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQucmVmdW5kLmxpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlZnVuZE9yZGVyKGlucHV0LnJlZnVuZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnJlZnVuZE9yZGVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZnVuZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hPcmRlcihyZXN1bHQpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0ZSA9PT0gJ0ZhaWxlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnb3JkZXIucmVmdW5kLW9yZGVyLWZhaWxlZCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIucmVmdW5kLW9yZGVyLXN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQWxyZWFkeVJlZnVuZGVkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOb3RoaW5nVG9SZWZ1bmRFcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BheW1lbnRPcmRlck1pc21hdGNoRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWZ1bmRPcmRlclN0YXRlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWZ1bmRTdGF0ZVRyYW5zaXRpb25FcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZmV0Y2hPcmRlcihyZXN1bHQ6IG9iamVjdCB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8R2V0T3JkZXJRdWVyeSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmdldE9yZGVyKHRoaXMuaWQpLnNpbmdsZSQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogT3JkZXJEZXRhaWxGcmFnbWVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXModGhpcy5jdXN0b21GaWVsZHMsIHRoaXMuZGV0YWlsRm9ybS5nZXQoWydjdXN0b21GaWVsZHMnXSksIGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhciAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBvcmRlclwiPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD4gPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJvcmRlci1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5IG1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBvcmRlci50eXBlICE9PSAnQWdncmVnYXRlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChvcmRlci5zdGF0ZSA9PT0gJ0FycmFuZ2luZ1BheW1lbnQnIHx8IG9yZGVyLnN0YXRlID09PSAnQXJyYW5naW5nQWRkaXRpb25hbFBheW1lbnQnKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoYXNVbnNldHRsZWRNb2RpZmljYXRpb25zKG9yZGVyKSB8fCAwIDwgb3V0c3RhbmRpbmdQYXltZW50QW1vdW50KG9yZGVyKSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTWFudWFsUGF5bWVudChvcmRlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuYWRkLXBheW1lbnQtdG8tb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAoe3sgb3V0c3RhbmRpbmdQYXltZW50QW1vdW50KG9yZGVyKSB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlIH19KVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gcHJpbWFyeSBtci0xXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIudHlwZSAhPT0gJ0FnZ3JlZ2F0ZScgJiZcclxuICAgICAgICAgICAgICAgICAgICBvcmRlci5hY3RpdmUgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIuc3RhdGUgIT09ICdBcnJhbmdpbmdBZGRpdGlvbmFsUGF5bWVudCcgJiZcclxuICAgICAgICAgICAgICAgICAgICBvcmRlci5zdGF0ZSAhPT0gJ0FycmFuZ2luZ1BheW1lbnQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgMCA8IG91dHN0YW5kaW5nUGF5bWVudEFtb3VudChvcmRlcilcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidHJhbnNpdGlvblRvU3RhdGUoJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50JylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuYXJyYW5nZS1hZGRpdGlvbmFsLXBheW1lbnQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLnR5cGUgIT09ICdBZ2dyZWdhdGUnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnkgbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZnVsZmlsbE9yZGVyKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRGdWxmaWxsbWVudChvcmRlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnb3JkZXIuZnVsZmlsbC1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idXR0b25cIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIudHlwZSAhPT0gJ0FnZ3JlZ2F0ZScgJiYgb3JkZXIubmV4dFN0YXRlcy5pbmNsdWRlcygnTW9kaWZ5aW5nJylcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmRyRHJvcGRvd25JdGVtIChjbGljayk9XCJ0cmFuc2l0aW9uVG9Nb2RpZnlpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGVuY2lsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tb2RpZnktb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9yZGVyLnR5cGUgIT09ICdBZ2dyZWdhdGUnICYmIG9yZGVyLm5leHRTdGF0ZXMuaW5jbHVkZXMoJ0NhbmNlbGxlZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yUmVmdW5kKG9yZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlcnJvci1zdGFuZGFyZFwiIGNsYXNzPVwiaXMtZXJyb3JcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JkZXJIYXNTZXR0bGVkUGF5bWVudHMob3JkZXIpOyBlbHNlIGNhbmNlbE9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5yZWZ1bmQtYW5kLWNhbmNlbC1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FuY2VsT25seT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5jYW5jZWwtb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIobmV4dFN0YXRlcyQgfCBhc3luYyk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbmV4dFN0YXRlIG9mIG5leHRTdGF0ZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmFuc2l0aW9uVG9TdGF0ZShuZXh0U3RhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwic3RlcC1mb3J3YXJkLTJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIudHJhbnNpdGlvbi10by1zdGF0ZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IHN0YXRlOiAobmV4dFN0YXRlIHwgc3RhdGVJMThuVG9rZW4gfCB0cmFuc2xhdGUpIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmRyRHJvcGRvd25JdGVtIChjbGljayk9XCJtYW51YWxseVRyYW5zaXRpb25Ub1N0YXRlKG9yZGVyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJzdGVwLWZvcndhcmQtMlwiIGNsYXNzPVwiaXMtd2FybmluZ1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tYW51YWxseS10cmFuc2l0aW9uLXRvLXN0YXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuPHZkci1wYWdlLWRldGFpbC1sYXlvdXQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgb3JkZXJcIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItb3JkZXItc3RhdGUtbGFiZWwgW3N0YXRlXT1cIm9yZGVyLnN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TdGF0ZURpYWdyYW0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidvcmRlci5vcmRlci1zdGF0ZS1kaWFncmFtJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwibGlzdFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC92ZHItb3JkZXItc3RhdGUtbGFiZWw+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5jdXN0b21lcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPHZkci1jdXN0b21lci1sYWJlbCBbY3VzdG9tZXJdPVwib3JkZXIuY3VzdG9tZXJcIj48L3Zkci1jdXN0b21lci1sYWJlbD5cclxuICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ29yZGVyLnNoaXBwaW5nLWFkZHJlc3MnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3JkZXJBZGRyZXNzTGluZXMob3JkZXIuc2hpcHBpbmdBZGRyZXNzKS5sZW5ndGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm1hdHRlZC1hZGRyZXNzIFthZGRyZXNzXT1cIm9yZGVyLnNoaXBwaW5nQWRkcmVzc1wiIGNsYXNzPVwibXQtMVwiPjwvdmRyLWZvcm1hdHRlZC1hZGRyZXNzPlxyXG4gICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgICAgIDx2ZHItbGFiZWxlZC1kYXRhXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ29yZGVyLmJpbGxpbmctYWRkcmVzcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRPcmRlckFkZHJlc3NMaW5lcyhvcmRlci5iaWxsaW5nQWRkcmVzcykubGVuZ3RoXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHZkci1mb3JtYXR0ZWQtYWRkcmVzcyBbYWRkcmVzc109XCJvcmRlci5iaWxsaW5nQWRkcmVzc1wiIGNsYXNzPVwibXQtMVwiPjwvdmRyLWZvcm1hdHRlZC1hZGRyZXNzPlxyXG4gICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5wYXltZW50cycgfCB0cmFuc2xhdGVcIiAqbmdJZj1cIm9yZGVyLnBheW1lbnRzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHZkci1vcmRlci1wYXltZW50LWNhcmRcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIG9yZGVyLnBheW1lbnRzXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwib3JkZXIuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgIFtwYXltZW50XT1cInBheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgKHNldHRsZVBheW1lbnQpPVwic2V0dGxlUGF5bWVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh0cmFuc2l0aW9uUGF5bWVudFN0YXRlKT1cInRyYW5zaXRpb25QYXltZW50U3RhdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoc2V0dGxlUmVmdW5kKT1cInNldHRsZVJlZnVuZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLW9yZGVyLXBheW1lbnQtY2FyZD5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cIm9yZGVyLmZ1bGZpbGxtZW50cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDx2ZHItZnVsZmlsbG1lbnQtY2FyZFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZ1bGZpbGxtZW50IG9mIG9yZGVyLmZ1bGZpbGxtZW50c1wiXHJcbiAgICAgICAgICAgICAgICBbZnVsZmlsbG1lbnRdPVwiZnVsZmlsbG1lbnRcIlxyXG4gICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICh0cmFuc2l0aW9uU3RhdGUpPVwidHJhbnNpdGlvbkZ1bGZpbGxtZW50KGZ1bGZpbGxtZW50LmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLWZ1bGZpbGxtZW50LWNhcmQ+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIiBbZW50aXR5XT1cImVudGl0eVwiIC8+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcblxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItc2VsbGVyLW9yZGVycy1jYXJkXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWItMlwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwib3JkZXIuc2VsbGVyT3JkZXJzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgIFtvcmRlcklkXT1cIm9yZGVyLmlkXCJcclxuICAgICAgICA+PC92ZHItc2VsbGVyLW9yZGVycy1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCBbcGFkZGluZ1hdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPHZkci1vcmRlci10YWJsZVxyXG4gICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgIFtvcmRlckxpbmVDdXN0b21GaWVsZHNdPVwib3JkZXJMaW5lQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgPjwvdmRyLW9yZGVyLXRhYmxlPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInb3JkZXIudGF4LXN1bW1hcnknIHwgdHJhbnNsYXRlXCIgW3BhZGRpbmdYXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ2NvbW1vbi5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRheC1yYXRlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudGF4LWJhc2UnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci50YXgtdG90YWwnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBvcmRlci50YXhTdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByb3cuZGVzY3JpcHRpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LnRheFJhdGUgLyAxMDAgfCBwZXJjZW50IH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy50YXhCYXNlIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LnRheFRvdGFsIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJPcmRlclwiXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISgnVXBkYXRlT3JkZXInIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVDdXN0b21GaWVsZHMoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpPy5wcmlzdGluZSB8fCBkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJyk/LmludmFsaWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICBsb2NhdGlvbklkPVwib3JkZXItZGV0YWlsXCJcclxuICAgICAgICAgICAgW2VudGl0eSRdPVwiZW50aXR5JFwiXHJcbiAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci5vcmRlci1oaXN0b3J5JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8dmRyLW9yZGVyLWhpc3RvcnlcclxuICAgICAgICAgICAgICAgIFtvcmRlcl09XCJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICBbaGlzdG9yeV09XCJoaXN0b3J5JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChhZGROb3RlKT1cImFkZE5vdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAodXBkYXRlTm90ZSk9XCJ1cGRhdGVOb3RlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGRlbGV0ZU5vdGUpPVwiZGVsZXRlTm90ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLW9yZGVyLWhpc3Rvcnk+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuIl19
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZGV0YWlsL29yZGVyLWRldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWRldGFpbC9vcmRlci1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBZSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCx1QkFBdUIsRUFNdkIscUJBQXFCLEVBSXJCLFNBQVMsRUFFVCx3QkFBd0IsR0FDM0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNuSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0NBQWdD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QU0sQ0FBQyxDQUFDO1NBQ25HO0lBQ0wsQ0FBQzs4R0Eza0JRLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtFQ2pEakMsOHFVQW9OQTs7MkZEbkthLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcbmltcG9ydCB7XG4gICAgRGF0YVNlcnZpY2UsXG4gICAgRWRpdE5vdGVEaWFsb2dDb21wb25lbnQsXG4gICAgRnVsZmlsbG1lbnRGcmFnbWVudCxcbiAgICBHZXRPcmRlckhpc3RvcnlRdWVyeSxcbiAgICBHZXRPcmRlclF1ZXJ5LFxuICAgIE1vZGFsU2VydmljZSxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIE9SREVSX0RFVEFJTF9GUkFHTUVOVCxcbiAgICBPcmRlckRldGFpbEZyYWdtZW50LFxuICAgIE9yZGVyRGV0YWlsUXVlcnlEb2N1bWVudCxcbiAgICBSZWZ1bmQsXG4gICAgU29ydE9yZGVyLFxuICAgIFRpbWVsaW5lSGlzdG9yeUVudHJ5LFxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciwgc3VtbWF0ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcbmltcG9ydCB7IGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtYXBUbywgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvb3JkZXItdHJhbnNpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFkZE1hbnVhbFBheW1lbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtbWFudWFsLXBheW1lbnQtZGlhbG9nL2FkZC1tYW51YWwtcGF5bWVudC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENhbmNlbE9yZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FuY2VsLW9yZGVyLWRpYWxvZy9jYW5jZWwtb3JkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGdWxmaWxsT3JkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9mdWxmaWxsLW9yZGVyLWRpYWxvZy9mdWxmaWxsLW9yZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JkZXJQcm9jZXNzR3JhcGhEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9vcmRlci1wcm9jZXNzLWdyYXBoLWRpYWxvZy9vcmRlci1wcm9jZXNzLWdyYXBoLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVmdW5kT3JkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9yZWZ1bmQtb3JkZXItZGlhbG9nL3JlZnVuZC1vcmRlci1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNldHRsZVJlZnVuZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NldHRsZS1yZWZ1bmQtZGlhbG9nL3NldHRsZS1yZWZ1bmQtZGlhbG9nLmNvbXBvbmVudCc7XG5cbnR5cGUgUGF5bWVudCA9IE5vbk51bGxhYmxlPE9yZGVyRGV0YWlsRnJhZ21lbnRbJ3BheW1lbnRzJ10+W251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBPUkRFUl9ERVRBSUxfUVVFUlkgPSBncWxgXG4gICAgcXVlcnkgT3JkZXJEZXRhaWxRdWVyeSgkaWQ6IElEISkge1xuICAgICAgICBvcmRlcihpZDogJGlkKSB7XG4gICAgICAgICAgICAuLi5PcmRlckRldGFpbFxuICAgICAgICB9XG4gICAgfVxuICAgICR7T1JERVJfREVUQUlMX0ZSQUdNRU5UfVxuYDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2ZHItb3JkZXItZGV0YWlsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9vcmRlci1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgT3JkZXJEZXRhaWxDb21wb25lbnRcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgT3JkZXJEZXRhaWxRdWVyeURvY3VtZW50LCAnb3JkZXInPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlcicpO1xuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xuICAgIGRldGFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxuICAgICAgICApLFxuICAgIH0pO1xuICAgIGhpc3RvcnkkOiBPYnNlcnZhYmxlPE5vbk51bGxhYmxlPEdldE9yZGVySGlzdG9yeVF1ZXJ5WydvcmRlciddPlsnaGlzdG9yeSddWydpdGVtcyddIHwgdW5kZWZpbmVkPjtcbiAgICBuZXh0U3RhdGVzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gICAgZmV0Y2hIaXN0b3J5ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTdGF0ZXMgPSBbXG4gICAgICAgICdBZGRpbmdJdGVtcycsXG4gICAgICAgICdBcnJhbmdpbmdQYXltZW50JyxcbiAgICAgICAgJ1BheW1lbnRBdXRob3JpemVkJyxcbiAgICAgICAgJ1BheW1lbnRTZXR0bGVkJyxcbiAgICAgICAgJ1BhcnRpYWxseVNoaXBwZWQnLFxuICAgICAgICAnU2hpcHBlZCcsXG4gICAgICAgICdQYXJ0aWFsbHlEZWxpdmVyZWQnLFxuICAgICAgICAnRGVsaXZlcmVkJyxcbiAgICAgICAgJ0NhbmNlbGxlZCcsXG4gICAgICAgICdNb2RpZnlpbmcnLFxuICAgICAgICAnQXJyYW5naW5nQWRkaXRpb25hbFBheW1lbnQnLFxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBvcmRlclRyYW5zaXRpb25TZXJ2aWNlOiBPcmRlclRyYW5zaXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMuZW50aXR5JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvcmRlciA9PiB7XG4gICAgICAgICAgICBpZiAob3JkZXIuc3RhdGUgPT09ICdNb2RpZnlpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycsICdtb2RpZnknXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5JCA9IHRoaXMuZmV0Y2hIaXN0b3J5LnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRPcmRlckhpc3RvcnkodGhpcy5pZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5vcmRlcj8uaGlzdG9yeS5pdGVtcyksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm5leHRTdGF0ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUoXG4gICAgICAgICAgICBtYXAob3JkZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5DdXN0b21TdGF0ZSA9ICF0aGlzLmRlZmF1bHRTdGF0ZXMuaW5jbHVkZXMob3JkZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0luQ3VzdG9tU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgPyBvcmRlci5uZXh0U3RhdGVzXG4gICAgICAgICAgICAgICAgICAgIDogb3JkZXIubmV4dFN0YXRlcy5maWx0ZXIocyA9PiAhdGhpcy5kZWZhdWx0U3RhdGVzLmluY2x1ZGVzKHMpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBvcGVuU3RhdGVEaWFncmFtKCkge1xuICAgICAgICB0aGlzLmVudGl0eSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoT3JkZXJQcm9jZXNzR3JhcGhEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3RhdGU6IG9yZGVyLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uVG9TdGF0ZShzdGF0ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIudHJhbnNpdGlvblRvU3RhdGUodGhpcy5pZCwgc3RhdGUpLnN1YnNjcmliZSgoeyB0cmFuc2l0aW9uT3JkZXJUb1N0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZT8uX190eXBlbmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIudHJhbnNpdGlvbmVkLXRvLXN0YXRlLXN1Y2Nlc3MnKSwgeyBzdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdPcmRlclN0YXRlVHJhbnNpdGlvbkVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRyYW5zaXRpb25PcmRlclRvU3RhdGUudHJhbnNpdGlvbkVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWFudWFsbHlUcmFuc2l0aW9uVG9TdGF0ZShvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xuICAgICAgICB0aGlzLm9yZGVyVHJhbnNpdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5tYW51YWxseVRyYW5zaXRpb25Ub1N0YXRlKHtcbiAgICAgICAgICAgICAgICBvcmRlcklkOiBvcmRlci5pZCxcbiAgICAgICAgICAgICAgICBuZXh0U3RhdGVzOiBvcmRlci5uZXh0U3RhdGVzLFxuICAgICAgICAgICAgICAgIGNhbmNlbGxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IF8oJ29yZGVyLm1hbnVhbGx5LXRyYW5zaXRpb24tdG8tc3RhdGUtbWVzc2FnZScpLFxuICAgICAgICAgICAgICAgIHJldHJ5OiAwLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uVG9Nb2RpZnlpbmcoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uVG9TdGF0ZSh0aGlzLmlkLCAnTW9kaWZ5aW5nJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgdHJhbnNpdGlvbk9yZGVyVG9TdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0cmFuc2l0aW9uT3JkZXJUb1N0YXRlPy5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi9tb2RpZnknXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyU3RhdGVUcmFuc2l0aW9uRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRyYW5zaXRpb25PcmRlclRvU3RhdGUudHJhbnNpdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVDdXN0b21GaWVsZHMoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC51cGRhdGVPcmRlckN1c3RvbUZpZWxkcyh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmRldGFpbEZvcm0udmFsdWUuY3VzdG9tRmllbGRzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwgeyBlbnRpdHk6ICdPcmRlcicgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRPcmRlckFkZHJlc3NMaW5lcyhvcmRlckFkZHJlc3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIW9yZGVyQWRkcmVzcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKG9yZGVyQWRkcmVzcylcbiAgICAgICAgICAgIC5maWx0ZXIodmFsID0+IHZhbCAhPT0gJ09yZGVyQWRkcmVzcycpXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gISFsaW5lKTtcbiAgICB9XG5cbiAgICBzZXR0bGVQYXltZW50KHBheW1lbnQ6IFBheW1lbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5zZXR0bGVQYXltZW50KHBheW1lbnQuaWQpLnN1YnNjcmliZSgoeyBzZXR0bGVQYXltZW50IH0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoc2V0dGxlUGF5bWVudC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudCc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0bGVQYXltZW50LnN0YXRlID09PSAnU2V0dGxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ29yZGVyLnNldHRsZS1wYXltZW50LXN1Y2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnb3JkZXIuc2V0dGxlLXBheW1lbnQtZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5nZXRPcmRlcih0aGlzLmlkKS5zaW5nbGUkLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSGlzdG9yeS5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyU3RhdGVUcmFuc2l0aW9uRXJyb3InOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1BheW1lbnRTdGF0ZVRyYW5zaXRpb25FcnJvcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnU2V0dGxlUGF5bWVudEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHNldHRsZVBheW1lbnQubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYW5zaXRpb25QYXltZW50U3RhdGUoeyBwYXltZW50LCBzdGF0ZSB9OiB7IHBheW1lbnQ6IFBheW1lbnQ7IHN0YXRlOiBzdHJpbmcgfSkge1xuICAgICAgICBpZiAoc3RhdGUgPT09ICdDYW5jZWxsZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmNhbmNlbFBheW1lbnQocGF5bWVudC5pZCkuc3Vic2NyaWJlKCh7IGNhbmNlbFBheW1lbnQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FuY2VsUGF5bWVudC5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BheW1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIudHJhbnNpdGlvbmVkLXBheW1lbnQtdG8tc3RhdGUtc3VjY2VzcycpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZ2V0T3JkZXIodGhpcy5pZCkuc2luZ2xlJC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50U3RhdGVUcmFuc2l0aW9uRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGNhbmNlbFBheW1lbnQudHJhbnNpdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDYW5jZWxQYXltZW50RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGNhbmNlbFBheW1lbnQucGF5bWVudEVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvblBheW1lbnRUb1N0YXRlKHBheW1lbnQuaWQsIHN0YXRlKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgdHJhbnNpdGlvblBheW1lbnRUb1N0YXRlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0cmFuc2l0aW9uUGF5bWVudFRvU3RhdGUuX190eXBlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oJ29yZGVyLnRyYW5zaXRpb25lZC1wYXltZW50LXRvLXN0YXRlLXN1Y2Nlc3MnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmdldE9yZGVyKHRoaXMuaWQpLnNpbmdsZSQuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGF5bWVudFN0YXRlVHJhbnNpdGlvbkVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodHJhbnNpdGlvblBheW1lbnRUb1N0YXRlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5BZGRGdWxmaWxsbWVudChvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBhbGxGdWxmaWxsbWVudExpbmVzOiBGdWxmaWxsbWVudEZyYWdtZW50WydsaW5lcyddID0gKG9yZGVyLmZ1bGZpbGxtZW50cyA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgKGFsbCwgZnVsZmlsbG1lbnQpID0+IFsuLi5hbGwsIC4uLmZ1bGZpbGxtZW50LmxpbmVzXSxcbiAgICAgICAgICAgIFtdIGFzIEZ1bGZpbGxtZW50RnJhZ21lbnRbJ2xpbmVzJ10sXG4gICAgICAgICk7XG4gICAgICAgIGxldCBhbGxJdGVtc0Z1bGZpbGxlZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvcmRlci5saW5lcykge1xuICAgICAgICAgICAgY29uc3QgdG90YWxGdWxmaWxsZWRDb3VudCA9IGFsbEZ1bGZpbGxtZW50TGluZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHJvdyA9PiByb3cub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCByb3cpID0+IHN1bSArIHJvdy5xdWFudGl0eSwgMCk7XG4gICAgICAgICAgICBpZiAodG90YWxGdWxmaWxsZWRDb3VudCA8IGxpbmUucXVhbnRpdHkpIHtcbiAgICAgICAgICAgICAgICBhbGxJdGVtc0Z1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhYWxsSXRlbXNGdWxmaWxsZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmhhc1Vuc2V0dGxlZE1vZGlmaWNhdGlvbnMob3JkZXIpICYmXG4gICAgICAgICAgICB0aGlzLm91dHN0YW5kaW5nUGF5bWVudEFtb3VudChvcmRlcikgPT09IDAgJiZcbiAgICAgICAgICAgIChvcmRlci5uZXh0U3RhdGVzLmluY2x1ZGVzKCdTaGlwcGVkJykgfHxcbiAgICAgICAgICAgICAgICBvcmRlci5uZXh0U3RhdGVzLmluY2x1ZGVzKCdQYXJ0aWFsbHlTaGlwcGVkJykgfHxcbiAgICAgICAgICAgICAgICBvcmRlci5uZXh0U3RhdGVzLmluY2x1ZGVzKCdEZWxpdmVyZWQnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBoYXNVbnNldHRsZWRNb2RpZmljYXRpb25zKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAwIDwgb3JkZXIubW9kaWZpY2F0aW9ucy5maWx0ZXIobSA9PiAhbS5pc1NldHRsZWQpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRPdXRzdGFuZGluZ01vZGlmaWNhdGlvbkFtb3VudChvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBzdW1tYXRlKFxuICAgICAgICAgICAgb3JkZXIubW9kaWZpY2F0aW9ucy5maWx0ZXIobSA9PiAhbS5pc1NldHRsZWQpLFxuICAgICAgICAgICAgJ3ByaWNlQ2hhbmdlJyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXltZW50SXNWYWxpZCA9IChwOiBQYXltZW50KTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgcC5zdGF0ZSAhPT0gJ0NhbmNlbGxlZCcgJiYgcC5zdGF0ZSAhPT0gJ0RlY2xpbmVkJyAmJiBwLnN0YXRlICE9PSAnRXJyb3InO1xuXG4gICAgICAgIGxldCBhbW91bnRDb3ZlcmVkID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwYXltZW50IG9mIG9yZGVyLnBheW1lbnRzPy5maWx0ZXIocGF5bWVudElzVmFsaWQpID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCByZWZ1bmRzID0gcGF5bWVudC5yZWZ1bmRzLmZpbHRlcihyID0+IHIuc3RhdGUgIT09ICdGYWlsZWQnKSA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlZnVuZHNUb3RhbCA9IHN1bW1hdGUocmVmdW5kcyBhcyBBcnJheTxSZXF1aXJlZDxSZWZ1bmQ+PiwgJ3RvdGFsJyk7XG4gICAgICAgICAgICBhbW91bnRDb3ZlcmVkICs9IHBheW1lbnQuYW1vdW50IC0gcmVmdW5kc1RvdGFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmRlci50b3RhbFdpdGhUYXggLSBhbW91bnRDb3ZlcmVkO1xuICAgIH1cblxuICAgIGFkZE1hbnVhbFBheW1lbnQob3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQpIHtcbiAgICAgICAgY29uc3QgcHJpb3JTdGF0ZSA9IG9yZGVyLnN0YXRlO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQWRkTWFudWFsUGF5bWVudERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xuICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZ0Ftb3VudDogdGhpcy5vdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXIpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IG9yZGVyLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5hZGRNYW51YWxQYXltZW50VG9PcmRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiByZXN1bHQudHJhbnNhY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IHJlc3VsdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3VsdC5tZXRhZGF0YSB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGFkZE1hbnVhbFBheW1lbnRUb09yZGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhZGRNYW51YWxQYXltZW50VG9PcmRlci5fX3R5cGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIuYWRkLXBheW1lbnQtdG8tb3JkZXItc3VjY2VzcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JTdGF0ZSA9PT0gJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcmRlclRyYW5zaXRpb25TZXJ2aWNlLnRyYW5zaXRpb25Ub1ByZU1vZGlmeWluZ1N0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlci5uZXh0U3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZignUGF5bWVudFNldHRsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNYW51YWxQYXltZW50U3RhdGVFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGFkZE1hbnVhbFBheW1lbnRUb09yZGVyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hPcmRlcih7IHJlc3VsdCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdWxmaWxsT3JkZXIoKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAob3JkZXIgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChGdWxmaWxsT3JkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5jcmVhdGVGdWxmaWxsbWVudChpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4gdGhpcy5yZWZldGNoT3JkZXIocmVzdWx0KS5waXBlKG1hcFRvKHJlc3VsdCkpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgYWRkRnVsZmlsbG1lbnRUb09yZGVyIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWRkRnVsZmlsbG1lbnRUb09yZGVyLl9fdHlwZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Z1bGZpbGxtZW50JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdvcmRlci5jcmVhdGUtZnVsZmlsbG1lbnQtc3VjY2VzcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VtcHR5T3JkZXJMaW5lU2VsZWN0aW9uRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5zdWZmaWNpZW50U3RvY2tPbkhhbmRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJdGVtc0FscmVhZHlGdWxmaWxsZWRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnZhbGlkRnVsZmlsbG1lbnRIYW5kbGVyRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihhZGRGdWxmaWxsbWVudFRvT3JkZXIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGdWxmaWxsbWVudFN0YXRlVHJhbnNpdGlvbkVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoYWRkRnVsZmlsbG1lbnRUb09yZGVyLnRyYW5zaXRpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDcmVhdGVGdWxmaWxsbWVudEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoYWRkRnVsZmlsbG1lbnRUb09yZGVyLmZ1bGZpbGxtZW50SGFuZGxlckVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeShhZGRGdWxmaWxsbWVudFRvT3JkZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIoYWRkRnVsZmlsbG1lbnRUb09yZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYW5zaXRpb25GdWxmaWxsbWVudChpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uRnVsZmlsbG1lbnRUb1N0YXRlKGlkLCBzdGF0ZSlcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXN1bHQgPT4gdGhpcy5yZWZldGNoT3JkZXIocmVzdWx0KSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdvcmRlci5zdWNjZXNzZnVsbHktdXBkYXRlZC1mdWxmaWxsbWVudCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbmNlbE9yUmVmdW5kKG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50KSB7XG4gICAgICAgIGNvbnN0IGlzUmVmdW5kYWJsZSA9IHRoaXMub3JkZXJIYXNTZXR0bGVkUGF5bWVudHMob3JkZXIpO1xuICAgICAgICBpZiAob3JkZXIuc3RhdGUgPT09ICdQYXltZW50QXV0aG9yaXplZCcgfHwgb3JkZXIuYWN0aXZlID09PSB0cnVlIHx8ICFpc1JlZnVuZGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsT3JkZXIob3JkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRPcmRlcihvcmRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR0bGVSZWZ1bmQocmVmdW5kOiBQYXltZW50WydyZWZ1bmRzJ11bbnVtYmVyXSkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoU2V0dGxlUmVmdW5kRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmdW5kLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHRyYW5zYWN0aW9uSWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0dGxlUmVmdW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlZnVuZC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBzd2l0Y2hNYXAocmVzdWx0ID0+IHRoaXMucmVmZXRjaE9yZGVyKHJlc3VsdCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIuc2V0dGxlLXJlZnVuZC1zdWNjZXNzJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZE5vdGUoZXZlbnQ6IHsgbm90ZTogc3RyaW5nOyBpc1B1YmxpYzogYm9vbGVhbiB9KSB7XG4gICAgICAgIGNvbnN0IHsgbm90ZSwgaXNQdWJsaWMgfSA9IGV2ZW50O1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXG4gICAgICAgICAgICAuYWRkTm90ZVRvT3JkZXIoe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIG5vdGUsXG4gICAgICAgICAgICAgICAgaXNQdWJsaWMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHJlc3VsdCA9PiB0aGlzLnJlZmV0Y2hPcmRlcihyZXN1bHQpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVOb3RlKGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoRWRpdE5vdGVEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVByaXZhY3lDb250cm9sczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogZW50cnkuZGF0YS5ub3RlLFxuICAgICAgICAgICAgICAgICAgICBub3RlSXNQcml2YXRlOiAhZW50cnkuaXNQdWJsaWMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIudXBkYXRlT3JkZXJOb3RlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlSWQ6IGVudHJ5LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHVibGljOiAhcmVzdWx0LmlzUHJpdmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlOiByZXN1bHQubm90ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEhpc3RvcnkubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdOb3RlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vdGUoZW50cnk6IFRpbWVsaW5lSGlzdG9yeUVudHJ5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmRpYWxvZyh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2NvbW1vbi5jb25maXJtLWRlbGV0ZS1ub3RlJyksXG4gICAgICAgICAgICAgICAgYm9keTogZW50cnkuZGF0YS5ub3RlLFxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYW5nZXInLCBsYWJlbDogXygnY29tbW9uLmRlbGV0ZScpLCByZXR1cm5WYWx1ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHJlcyA9PiAocmVzID8gdGhpcy5kYXRhU2VydmljZS5vcmRlci5kZWxldGVPcmRlck5vdGUoZW50cnkuaWQpIDogRU1QVFkpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnTm90ZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcmRlckhhc1NldHRsZWRQYXltZW50cyhvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFvcmRlci5wYXltZW50cz8uZmluZChwID0+IHAuc3RhdGUgPT09ICdTZXR0bGVkJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5jZWxPcmRlcihvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQ2FuY2VsT3JkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xuICAgICAgICAgICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuY2FuY2VsT3JkZXIoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHRoaXMucmVmZXRjaE9yZGVyKHJlc3VsdCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIuY2FuY2VsbGVkLW9yZGVyLXN1Y2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZ1bmRPcmRlcihvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoUmVmdW5kT3JkZXJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xuICAgICAgICAgICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNhbmNlbC5saW5lcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5jYW5jZWxPcmRlcihpbnB1dC5jYW5jZWwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcy5jYW5jZWxPcmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQuX190eXBlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmZXRjaE9yZGVyKHJlc3VsdCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnb3JkZXIuY2FuY2VsbGVkLW9yZGVyLXN1Y2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2FuY2VsQWN0aXZlT3JkZXJFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdRdWFudGl0eVRvb0dyZWF0RXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTXVsdGlwbGVPcmRlckVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ09yZGVyU3RhdGVUcmFuc2l0aW9uRXJyb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRW1wdHlPcmRlckxpbmVTZWxlY3Rpb25FcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpbnB1dF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaW5wdXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQucmVmdW5kLmxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVmdW5kT3JkZXIoaW5wdXQucmVmdW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChyZXMgPT4gcmVzLnJlZnVuZE9yZGVyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0Ll9fdHlwZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZnVuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZldGNoT3JkZXIocmVzdWx0KS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXRlID09PSAnRmFpbGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnb3JkZXIucmVmdW5kLW9yZGVyLWZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdvcmRlci5yZWZ1bmQtb3JkZXItc3VjY2VzcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBbHJlYWR5UmVmdW5kZWRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOb3RoaW5nVG9SZWZ1bmRFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50T3JkZXJNaXNtYXRjaEVycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlZnVuZE9yZGVyU3RhdGVFcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWZ1bmRTdGF0ZVRyYW5zaXRpb25FcnJvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmZXRjaE9yZGVyKHJlc3VsdDogb2JqZWN0IHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxHZXRPcmRlclF1ZXJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRoaXMuZmV0Y2hIaXN0b3J5Lm5leHQoKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuZ2V0T3JkZXIodGhpcy5pZCkuc2luZ2xlJDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBPcmRlckRldGFpbEZyYWdtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKHRoaXMuY3VzdG9tRmllbGRzLCB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnY3VzdG9tRmllbGRzJ10pLCBlbnRpdHkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIG9yZGVyXCI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PiA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cIm9yZGVyLWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnkgbXItMVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyLnR5cGUgIT09ICdBZ2dyZWdhdGUnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKG9yZGVyLnN0YXRlID09PSAnQXJyYW5naW5nUGF5bWVudCcgfHwgb3JkZXIuc3RhdGUgPT09ICdBcnJhbmdpbmdBZGRpdGlvbmFsUGF5bWVudCcpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGhhc1Vuc2V0dGxlZE1vZGlmaWNhdGlvbnMob3JkZXIpIHx8IDAgPCBvdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXIpKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRNYW51YWxQYXltZW50KG9yZGVyKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5hZGQtcGF5bWVudC10by1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICh7eyBvdXRzdGFuZGluZ1BheW1lbnRBbW91bnQob3JkZXIpIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX0pXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5IG1yLTFcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBvcmRlci50eXBlICE9PSAnQWdncmVnYXRlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyLmFjdGl2ZSA9PT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgICAgICAgICBvcmRlci5zdGF0ZSAhPT0gJ0FycmFuZ2luZ0FkZGl0aW9uYWxQYXltZW50JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyLnN0YXRlICE9PSAnQXJyYW5naW5nUGF5bWVudCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAwIDwgb3V0c3RhbmRpbmdQYXltZW50QW1vdW50KG9yZGVyKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmFuc2l0aW9uVG9TdGF0ZSgnQXJyYW5naW5nQWRkaXRpb25hbFBheW1lbnQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5hcnJhbmdlLWFkZGl0aW9uYWwtcGF5bWVudCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIudHlwZSAhPT0gJ0FnZ3JlZ2F0ZSdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gcHJpbWFyeSBtci0xXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmdWxmaWxsT3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZEZ1bGZpbGxtZW50KG9yZGVyKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5mdWxmaWxsLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlci50eXBlICE9PSAnQWdncmVnYXRlJyAmJiBvcmRlci5uZXh0U3RhdGVzLmluY2x1ZGVzKCdNb2RpZnlpbmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB2ZHJEcm9wZG93bkl0ZW0gKGNsaWNrKT1cInRyYW5zaXRpb25Ub01vZGlmeWluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwZW5jaWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1vZGlmeS1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXIudHlwZSAhPT0gJ0FnZ3JlZ2F0ZScgJiYgb3JkZXIubmV4dFN0YXRlcy5pbmNsdWRlcygnQ2FuY2VsbGVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JSZWZ1bmQob3JkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVycm9yLXN0YW5kYXJkXCIgY2xhc3M9XCJpcy1lcnJvclwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmRlckhhc1NldHRsZWRQYXltZW50cyhvcmRlcik7IGVsc2UgY2FuY2VsT25seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC1hbmQtY2FuY2VsLW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYW5jZWxPbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmNhbmNlbC1vcmRlcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihuZXh0U3RhdGVzJCB8IGFzeW5jKT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBuZXh0U3RhdGUgb2YgbmV4dFN0YXRlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyYW5zaXRpb25Ub1N0YXRlKG5leHRTdGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJzdGVwLWZvcndhcmQtMlwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci50cmFuc2l0aW9uLXRvLXN0YXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgc3RhdGU6IChuZXh0U3RhdGUgfCBzdGF0ZUkxOG5Ub2tlbiB8IHRyYW5zbGF0ZSkgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB2ZHJEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIm1hbnVhbGx5VHJhbnNpdGlvblRvU3RhdGUob3JkZXIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInN0ZXAtZm9yd2FyZC0yXCIgY2xhc3M9XCJpcy13YXJuaW5nXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1hbnVhbGx5LXRyYW5zaXRpb24tdG8tc3RhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcblxyXG48dmRyLXBhZ2UtZGV0YWlsLWxheW91dCAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBvcmRlclwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblN0YXRlRGlhZ3JhbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ29yZGVyLm9yZGVyLXN0YXRlLWRpYWdyYW0nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJsaXN0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ29yZGVyLmN1c3RvbWVyJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8dmRyLWN1c3RvbWVyLWxhYmVsIFtjdXN0b21lcl09XCJvcmRlci5jdXN0b21lclwiPjwvdmRyLWN1c3RvbWVyLWxhYmVsPlxyXG4gICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInb3JkZXIuc2hpcHBpbmctYWRkcmVzcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRPcmRlckFkZHJlc3NMaW5lcyhvcmRlci5zaGlwcGluZ0FkZHJlc3MpLmxlbmd0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybWF0dGVkLWFkZHJlc3MgW2FkZHJlc3NdPVwib3JkZXIuc2hpcHBpbmdBZGRyZXNzXCIgY2xhc3M9XCJtdC0xXCI+PC92ZHItZm9ybWF0dGVkLWFkZHJlc3M+XHJcbiAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGFcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInb3JkZXIuYmlsbGluZy1hZGRyZXNzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldE9yZGVyQWRkcmVzc0xpbmVzKG9yZGVyLmJpbGxpbmdBZGRyZXNzKS5sZW5ndGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm1hdHRlZC1hZGRyZXNzIFthZGRyZXNzXT1cIm9yZGVyLmJpbGxpbmdBZGRyZXNzXCIgY2xhc3M9XCJtdC0xXCI+PC92ZHItZm9ybWF0dGVkLWFkZHJlc3M+XHJcbiAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ29yZGVyLnBheW1lbnRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwib3JkZXIucGF5bWVudHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dmRyLW9yZGVyLXBheW1lbnQtY2FyZFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBheW1lbnQgb2Ygb3JkZXIucGF5bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJvcmRlci5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgW3BheW1lbnRdPVwicGF5bWVudFwiXHJcbiAgICAgICAgICAgICAgICAoc2V0dGxlUGF5bWVudCk9XCJzZXR0bGVQYXltZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHRyYW5zaXRpb25QYXltZW50U3RhdGUpPVwidHJhbnNpdGlvblBheW1lbnRTdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChzZXR0bGVSZWZ1bmQpPVwic2V0dGxlUmVmdW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItb3JkZXItcGF5bWVudC1jYXJkPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwib3JkZXIuZnVsZmlsbG1lbnRzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHZkci1mdWxmaWxsbWVudC1jYXJkXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZnVsZmlsbG1lbnQgb2Ygb3JkZXIuZnVsZmlsbG1lbnRzXCJcclxuICAgICAgICAgICAgICAgIFtmdWxmaWxsbWVudF09XCJmdWxmaWxsbWVudFwiXHJcbiAgICAgICAgICAgICAgICBbb3JkZXJdPVwib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgKHRyYW5zaXRpb25TdGF0ZSk9XCJ0cmFuc2l0aW9uRnVsZmlsbG1lbnQoZnVsZmlsbG1lbnQuaWQsICRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItZnVsZmlsbG1lbnQtY2FyZD5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiIFtlbnRpdHldPVwiZW50aXR5XCIgLz5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuXHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPHZkci1zZWxsZXItb3JkZXJzLWNhcmRcclxuICAgICAgICAgICAgY2xhc3M9XCJtYi0yXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJvcmRlci5zZWxsZXJPcmRlcnMubGVuZ3RoXCJcclxuICAgICAgICAgICAgW29yZGVySWRdPVwib3JkZXIuaWRcIlxyXG4gICAgICAgID48L3Zkci1zZWxsZXItb3JkZXJzLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jYXJkIFtwYWRkaW5nWF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8dmRyLW9yZGVyLXRhYmxlXHJcbiAgICAgICAgICAgICAgICBbb3JkZXJdPVwib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgW29yZGVyTGluZUN1c3RvbUZpZWxkc109XCJvcmRlckxpbmVDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICA+PC92ZHItb3JkZXItdGFibGU+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidvcmRlci50YXgtc3VtbWFyeScgfCB0cmFuc2xhdGVcIiBbcGFkZGluZ1hdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudGF4LXJhdGUnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci50YXgtYmFzZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnRheC10b3RhbCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIG9yZGVyLnRheFN1bW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJvdy5kZXNjcmlwdGlvbiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByb3cudGF4UmF0ZSAvIDEwMCB8IHBlcmNlbnQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcm93LnRheEJhc2UgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByb3cudGF4VG90YWwgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIiAqbmdJZj1cImN1c3RvbUZpZWxkcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIk9yZGVyXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKCdVcGRhdGVPcmRlcicgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUN1c3RvbUZpZWxkcygpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxGb3JtLmdldCgnY3VzdG9tRmllbGRzJyk/LnByaXN0aW5lIHx8IGRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJvcmRlci1kZXRhaWxcIlxyXG4gICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgW2RldGFpbEZvcm1dPVwiZGV0YWlsRm9ybVwiXHJcbiAgICAgICAgPjwvdmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3Q+XHJcblxyXG4gICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ29yZGVyLm9yZGVyLWhpc3RvcnknIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDx2ZHItb3JkZXItaGlzdG9yeVxyXG4gICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgIFtoaXN0b3J5XT1cImhpc3RvcnkkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgKGFkZE5vdGUpPVwiYWRkTm90ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICh1cGRhdGVOb3RlKT1cInVwZGF0ZU5vdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZGVsZXRlTm90ZSk9XCJkZWxldGVOb3RlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItb3JkZXItaGlzdG9yeT5cclxuICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgPC92ZHItcGFnZS1ibG9jaz5cclxuPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
3
- import { GetOrderListDocument, getOrderStateTranslationToken, OrderType, TypedBaseListComponent, } from '@vendure/admin-ui/core';
3
+ import { GetOrderListDocument, getOrderStateTranslationToken, LogicalOperator, OrderType, TypedBaseListComponent, } from '@vendure/admin-ui/core';
4
4
  import { tap } from 'rxjs/operators';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@vendure/admin-ui/core";
@@ -115,6 +115,12 @@ export class OrderListComponent extends TypedBaseListComponent {
115
115
  code: {
116
116
  contains: searchTerm,
117
117
  },
118
+ customerLastName: {
119
+ contains: searchTerm,
120
+ },
121
+ transactionId: {
122
+ contains: searchTerm,
123
+ },
118
124
  };
119
125
  }
120
126
  return {
@@ -124,6 +130,7 @@ export class OrderListComponent extends TypedBaseListComponent {
124
130
  filter: {
125
131
  ...(filterInput ?? {}),
126
132
  },
133
+ filterOperator: searchTerm ? LogicalOperator.OR : LogicalOperator.AND,
127
134
  sort: this.sorts.createSortInput(),
128
135
  },
129
136
  };
@@ -143,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
143
150
  type: Component,
144
151
  args: [{ selector: 'vdr-order-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n <ng-container *ngIf=\"canCreateDraftOrder\">\r\n <a class=\"btn\" *vdrIfPermissions=\"['CreateOrder']\" [routerLink]=\"['./draft/create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-draft-order' | translate }}\r\n </a>\r\n </ng-container>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n id=\"order-list\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"order-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'order.search-by-order-filters' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-order=\"item\">\r\n {{ order.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-order=\"item\">\r\n {{ order.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-order=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"order.state === 'Draft' ? ['./draft', order.id] : ['./', order.id]\"\r\n ><span>{{ order.code }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.customer' | translate\" [sort]=\"sorts.get('customerLastName')\">\r\n <ng-template let-order=\"item\">\r\n <vdr-customer-label\r\n [customer]=\"order.customer\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></vdr-customer-label>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.order-type' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-order=\"item\">\r\n <vdr-chip *ngIf=\"order.type === OrderType.Regular\">{{ 'order.order-type-regular' | translate }}</vdr-chip>\r\n <vdr-chip *ngIf=\"order.type === OrderType.Aggregate\">{{ 'order.order-type-aggregate' | translate }}</vdr-chip>\r\n <vdr-chip *ngIf=\"order.type === OrderType.Seller\">{{ 'order.order-type-seller' | translate }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.state' | translate\" [sort]=\"sorts.get('state')\">\r\n <ng-template let-order=\"item\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.total' | translate\" [sort]=\"sorts.get('totalWithTax')\">\r\n <ng-template let-order=\"item\">\r\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\">\r\n <ng-template let-order=\"item\">\r\n {{ order.updatedAt | timeAgo }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" [sort]=\"sorts.get('orderPlacedAt')\">\r\n <ng-template let-order=\"item\">\r\n {{ order.orderPlacedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'order.shipping' | translate\">\r\n <ng-template let-order=\"item\">\r\n {{ getShippingNames(order) }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n", styles: [".search-form{display:flex;flex-direction:column;align-items:baseline;width:100%;max-width:100vw;margin-bottom:6px}.filter-presets{max-width:90vw;overflow-x:auto}.search-input{margin-top:6px;min-width:300px}.custom-filters{overflow:hidden;max-height:0;padding-bottom:6px}.custom-filters.expanded{max-height:initial}.custom-filters>form{display:flex;flex-direction:column;align-items:center}.custom-filters>form>div{width:100%}ng-select{flex:1;min-width:200px;height:36px}ng-select ::ng-deep .ng-select-container{height:36px}\n"] }]
145
152
  }], ctorParameters: function () { return [{ type: i1.ServerConfigService }, { type: i1.ChannelService }]; } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUVILG9CQUFvQixFQUNwQiw2QkFBNkIsRUFFN0IsU0FBUyxFQUVULHNCQUFzQixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sa0JBQ1QsU0FBUSxzQkFBNkQ7SUE4RXJFLFlBQXNCLG1CQUF3QyxFQUFVLGNBQThCO1FBQ2xHLEtBQUssRUFBRSxDQUFDO1FBRFUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTNFdEcsZ0JBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixpQkFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxZQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2FBQzNDLGNBQWMsRUFBRTthQUNoQixTQUFTLENB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OzhHQTNJUSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw2RUNwQi9CLDhnSkFpR0E7OzJGRDdFYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbm5lbFNlcnZpY2UsXHJcbiAgICBHZXRPcmRlckxpc3REb2N1bWVudCxcclxuICAgIGdldE9yZGVyU3RhdGVUcmFuc2xhdGlvblRva2VuLFxyXG4gICAgT3JkZXJMaXN0T3B0aW9ucyxcclxuICAgIE9yZGVyVHlwZSxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUeXBlZEJhc2VMaXN0Q29tcG9uZW50LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBPcmRlciB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1vcmRlci1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJMaXN0Q29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZUxpc3RDb21wb25lbnQ8dHlwZW9mIEdldE9yZGVyTGlzdERvY3VtZW50LCAnb3JkZXJzJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIG9yZGVyU3RhdGVzID0gdGhpcy5zZXJ2ZXJDb25maWdTZXJ2aWNlLmdldE9yZGVyUHJvY2Vzc1N0YXRlcygpLm1hcChpdGVtID0+IGl0ZW0ubmFtZSk7XHJcbiAgICByZWFkb25seSBPcmRlclR5cGUgPSBPcmRlclR5cGU7XHJcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlcicpO1xyXG4gICAgcmVhZG9ubHkgZmlsdGVycyA9IHRoaXMuY3JlYXRlRmlsdGVyQ29sbGVjdGlvbigpXHJcbiAgICAgICAgLmFkZERhdGVGaWx0ZXJzKClcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ2FjdGl2ZScsXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdvcmRlci5maWx0ZXItaXMtYWN0aXZlJyksXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnYWN0aXZlJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAndG90YWxXaXRoVGF4JyxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnbnVtYmVyJywgaW5wdXRUeXBlOiAnY3VycmVuY3knLCBjdXJyZW5jeUNvZGU6ICdVU0QnIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdvcmRlci50b3RhbCcpLFxyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ3RvdGFsV2l0aFRheCcsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3N0YXRlJyxcclxuICAgICAgICAgICAgdHlwZToge1xyXG4gICAgICAgICAgICAgICAga2luZDogJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9yZGVyU3RhdGVzLm1hcChzID0+ICh7IHZhbHVlOiBzLCBsYWJlbDogZ2V0T3JkZXJTdGF0ZVRyYW5zbGF0aW9uVG9rZW4ocykgfSkpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnb3JkZXIuc3RhdGUnKSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdzdGF0ZScsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3R5cGUnLFxyXG4gICAgICAgICAgICB0eXBlOiB7XHJcbiAgICAgICAgICAgICAgICBraW5kOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBPcmRlclR5cGUuUmVndWxhciwgbGFiZWw6IF8oJ29yZGVyLm9yZGVyLXR5cGUtcmVndWxhcicpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogT3JkZXJUeXBlLkFnZ3JlZ2F0ZSwgbGFiZWw6IF8oJ29yZGVyLm9yZGVyLXR5cGUtYWdncmVnYXRlJykgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBPcmRlclR5cGUuU2VsbGVyLCBsYWJlbDogXygnb3JkZXIub3JkZXItdHlwZS1zZWxsZXInKSB9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ29yZGVyLm9yZGVyLXR5cGUnKSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICd0eXBlJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAnb3JkZXJQbGFjZWRBdCcsXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2RhdGVSYW5nZScgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ29yZGVyLnBsYWNlZC1hdCcpLFxyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ29yZGVyUGxhY2VkQXQnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICdjdXN0b21lckxhc3ROYW1lJyxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ2N1c3RvbWVyLmxhc3QtbmFtZScpLFxyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ2N1c3RvbWVyTGFzdE5hbWUnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICd0cmFuc2FjdGlvbklkJyxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ29yZGVyLnRyYW5zYWN0aW9uLWlkJyksXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAndHJhbnNhY3Rpb25JZCcsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICByZWFkb25seSBzb3J0cyA9IHRoaXMuY3JlYXRlU29ydENvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5kZWZhdWx0U29ydCgndXBkYXRlZEF0JywgJ0RFU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2lkJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICd1cGRhdGVkQXQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnb3JkZXJQbGFjZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdjdXN0b21lckxhc3ROYW1lJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3N0YXRlJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3RvdGFsV2l0aFRheCcgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRTb3J0cyh0aGlzLmN1c3RvbUZpZWxkcylcclxuICAgICAgICAuY29ubmVjdFRvUm91dGUodGhpcy5yb3V0ZSk7XHJcblxyXG4gICAgY2FuQ3JlYXRlRHJhZnRPcmRlciA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVDaGFubmVsSXNEZWZhdWx0Q2hhbm5lbCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLCBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKHtcclxuICAgICAgICAgICAgZG9jdW1lbnQ6IEdldE9yZGVyTGlzdERvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogcmVzdWx0ID0+IHJlc3VsdC5vcmRlcnMsXHJcbiAgICAgICAgICAgIHNldFZhcmlhYmxlczogKHNraXAsIHRha2UpID0+IHRoaXMuY3JlYXRlUXVlcnlPcHRpb25zKHNraXAsIHRha2UsIHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUpLFxyXG4gICAgICAgICAgICByZWZyZXNoTGlzdE9uQ2hhbmdlczogW3RoaXMuZmlsdGVycy52YWx1ZUNoYW5nZXMsIHRoaXMuc29ydHMudmFsdWVDaGFuZ2VzXSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5DcmVhdGVEcmFmdE9yZGVyID0gISF0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmdldE9yZGVyUHJvY2Vzc1N0YXRlcygpXHJcbiAgICAgICAgICAgIC5maW5kKHN0YXRlID0+IHN0YXRlLm5hbWUgPT09ICdDcmVhdGVkJylcclxuICAgICAgICAgICAgPy50by5pbmNsdWRlcygnRHJhZnQnKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdENoYW5uZWwkID0gdGhpcy5jaGFubmVsU2VydmljZS5kZWZhdWx0Q2hhbm5lbElzQWN0aXZlJC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoaXNEZWZhdWx0ID0+ICh0aGlzLmFjdGl2ZUNoYW5uZWxJc0RlZmF1bHRDaGFubmVsID0gaXNEZWZhdWx0KSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzdXBlci5yZWZyZXNoTGlzdE9uQ2hhbmdlcyh0aGlzLmZpbHRlcnMudmFsdWVDaGFuZ2VzLCB0aGlzLnNvcnRzLnZhbHVlQ2hhbmdlcywgaXNEZWZhdWx0Q2hhbm5lbCQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlUXVlcnlPcHRpb25zKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XHJcbiAgICAgICAgc2tpcDogbnVtYmVyLFxyXG4gICAgICAgIHRha2U6IG51bWJlcixcclxuICAgICAgICBzZWFyY2hUZXJtOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgKTogeyBvcHRpb25zOiBPcmRlckxpc3RPcHRpb25zIH0ge1xyXG4gICAgICAgIGxldCBmaWx0ZXJJbnB1dCA9IHRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUNoYW5uZWxJc0RlZmF1bHRDaGFubmVsKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcklucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uKGZpbHRlcklucHV0ID8/IHt9KSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgICAgZmlsdGVySW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IHNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLihmaWx0ZXJJbnB1dCA/PyB7fSksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0cy5jcmVhdGVTb3J0SW5wdXQoKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNoaXBwaW5nTmFtZXMob3JkZXI6IE9yZGVyKSB7XHJcbiAgICAgICAgaWYgKG9yZGVyLnNoaXBwaW5nTGluZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcmRlci5zaGlwcGluZ0xpbmVzLm1hcChzaGlwcGluZ0xpbmUgPT4gc2hpcHBpbmdMaW5lLnNoaXBwaW5nTWV0aG9kLm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJvcmRlci1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbkNyZWF0ZURyYWZ0T3JkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuXCIgKnZkcklmUGVybWlzc2lvbnM9XCJbJ0NyZWF0ZU9yZGVyJ11cIiBbcm91dGVyTGlua109XCJbJy4vZHJhZnQvY3JlYXRlJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jcmVhdGUtZHJhZnQtb3JkZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPHZkci1kYXRhLXRhYmxlLTJcclxuICAgIGNsYXNzPVwibXQtMlwiXHJcbiAgICBpZD1cIm9yZGVyLWxpc3RcIlxyXG4gICAgW2l0ZW1zXT1cIml0ZW1zJCB8IGFzeW5jXCJcclxuICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlJCB8IGFzeW5jXCJcclxuICAgIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gICAgKHBhZ2VDaGFuZ2UpPVwic2V0UGFnZU51bWJlcigkZXZlbnQpXCJcclxuICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4+XHJcbiAgICA8dmRyLWJ1bGstYWN0aW9uLW1lbnVcclxuICAgICAgICBsb2NhdGlvbklkPVwib3JkZXItbGlzdFwiXHJcbiAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICA+PC92ZHItYnVsay1hY3Rpb24tbWVudT5cclxuICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgIFtzZWFyY2hUZXJtQ29udHJvbF09XCJzZWFyY2hUZXJtQ29udHJvbFwiXHJcbiAgICAgICAgW3NlYXJjaFRlcm1QbGFjZWhvbGRlcl09XCInb3JkZXIuc2VhcmNoLWJ5LW9yZGVyLWZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcclxuICAgIC8+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5pZCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIiBbc29ydF09XCJzb3J0cy5nZXQoJ2lkJylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBvcmRlci5pZCB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBvcmRlci5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImJ1dHRvbi1naG9zdFwiIFtyb3V0ZXJMaW5rXT1cIm9yZGVyLnN0YXRlID09PSAnRHJhZnQnID8gWycuL2RyYWZ0Jywgb3JkZXIuaWRdIDogWycuLycsIG9yZGVyLmlkXVwiXHJcbiAgICAgICAgICAgICAgICA+PHNwYW4+e3sgb3JkZXIuY29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidvcmRlci5jdXN0b21lcicgfCB0cmFuc2xhdGVcIiBbc29ydF09XCJzb3J0cy5nZXQoJ2N1c3RvbWVyTGFzdE5hbWUnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItbGFiZWxcclxuICAgICAgICAgICAgICAgIFtjdXN0b21lcl09XCJvcmRlci5jdXN0b21lclwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgPjwvdmRyLWN1c3RvbWVyLWxhYmVsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidvcmRlci5vcmRlci10eXBlJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIm9yZGVyLnR5cGUgPT09IE9yZGVyVHlwZS5SZWd1bGFyXCI+e3sgJ29yZGVyLm9yZGVyLXR5cGUtcmVndWxhcicgfCB0cmFuc2xhdGUgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJvcmRlci50eXBlID09PSBPcmRlclR5cGUuQWdncmVnYXRlXCI+e3sgJ29yZGVyLm9yZGVyLXR5cGUtYWdncmVnYXRlJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cIm9yZGVyLnR5cGUgPT09IE9yZGVyVHlwZS5TZWxsZXJcIj57eyAnb3JkZXIub3JkZXItdHlwZS1zZWxsZXInIHwgdHJhbnNsYXRlIH19PC92ZHItY2hpcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIuc3RhdGUnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdzdGF0ZScpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPHZkci1vcmRlci1zdGF0ZS1sYWJlbCBbc3RhdGVdPVwib3JkZXIuc3RhdGVcIj48L3Zkci1vcmRlci1zdGF0ZS1sYWJlbD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIudG90YWwnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCd0b3RhbFdpdGhUYXgnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IG9yZGVyLnRvdGFsV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IG9yZGVyLnVwZGF0ZWRBdCB8IHRpbWVBZ28gfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIucGxhY2VkLWF0JyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnb3JkZXJQbGFjZWRBdCcpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgb3JkZXIub3JkZXJQbGFjZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLnNoaXBwaW5nJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IGdldFNoaXBwaW5nTmFtZXMob3JkZXIpIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jdXN0b20tZmllbGQtY29sdW1uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbUZpZWxkIG9mIGN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgW2N1c3RvbUZpZWxkXT1cImN1c3RvbUZpZWxkXCJcclxuICAgICAgICBbc29ydHNdPVwic29ydHNcIlxyXG4gICAgLz5cclxuPC92ZHItZGF0YS10YWJsZS0yPlxyXG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWxpc3Qvb3JkZXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUVILG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0IsZUFBZSxFQUVmLFNBQVMsRUFFVCxzQkFBc0IsR0FDekIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFRckMsTUFBTSxPQUFPLGtCQUNULFNBQVEsc0JBQTZEO0lBOEVyRSxZQUFzQixtQkFBd0MsRUFBVSxjQUE4QjtRQUNsRyxLQUFLLEVBQUUsQ0FBQztRQURVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUEzRXRHLGdCQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdFLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsaUJBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsWUFBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTthQUMzQyxjQUFjLEVBQUU7YUFD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LENBQUMsTUFBTSxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvRjthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7OEdBbEpRLGtCQUFrQjtrR0FBbEIsa0JBQWtCLDZFQ3JCL0IsOGdKQWlHQTs7MkZENUVhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFubmVsU2VydmljZSxcclxuICAgIEdldE9yZGVyTGlzdERvY3VtZW50LFxyXG4gICAgZ2V0T3JkZXJTdGF0ZVRyYW5zbGF0aW9uVG9rZW4sXHJcbiAgICBMb2dpY2FsT3BlcmF0b3IsXHJcbiAgICBPcmRlckxpc3RPcHRpb25zLFxyXG4gICAgT3JkZXJUeXBlLFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIFR5cGVkQmFzZUxpc3RDb21wb25lbnQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9nZW5lcmF0ZWQtdHlwZXMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLW9yZGVyLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL29yZGVyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb3JkZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmRlckxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0T3JkZXJMaXN0RG9jdW1lbnQsICdvcmRlcnMnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gICAgb3JkZXJTdGF0ZXMgPSB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0T3JkZXJQcm9jZXNzU3RhdGVzKCkubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKTtcclxuICAgIHJlYWRvbmx5IE9yZGVyVHlwZSA9IE9yZGVyVHlwZTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyJyk7XHJcbiAgICByZWFkb25seSBmaWx0ZXJzID0gdGhpcy5jcmVhdGVGaWx0ZXJDb2xsZWN0aW9uKClcclxuICAgICAgICAuYWRkRGF0ZUZpbHRlcnMoKVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAnYWN0aXZlJyxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnYm9vbGVhbicgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ29yZGVyLmZpbHRlci1pcy1hY3RpdmUnKSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdhY3RpdmUnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICd0b3RhbFdpdGhUYXgnLFxyXG4gICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdudW1iZXInLCBpbnB1dFR5cGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5Q29kZTogJ1VTRCcgfSxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ29yZGVyLnRvdGFsJyksXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAndG90YWxXaXRoVGF4JyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxyXG4gICAgICAgICAgICB0eXBlOiB7XHJcbiAgICAgICAgICAgICAgICBraW5kOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3JkZXJTdGF0ZXMubWFwKHMgPT4gKHsgdmFsdWU6IHMsIGxhYmVsOiBnZXRPcmRlclN0YXRlVHJhbnNsYXRpb25Ub2tlbihzKSB9KSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdvcmRlci5zdGF0ZScpLFxyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ3N0YXRlJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAndHlwZScsXHJcbiAgICAgICAgICAgIHR5cGU6IHtcclxuICAgICAgICAgICAgICAgIGtpbmQ6ICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IE9yZGVyVHlwZS5SZWd1bGFyLCBsYWJlbDogXygnb3JkZXIub3JkZXItdHlwZS1yZWd1bGFyJykgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBPcmRlclR5cGUuQWdncmVnYXRlLCBsYWJlbDogXygnb3JkZXIub3JkZXItdHlwZS1hZ2dyZWdhdGUnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IE9yZGVyVHlwZS5TZWxsZXIsIGxhYmVsOiBfKCdvcmRlci5vcmRlci10eXBlLXNlbGxlcicpIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnb3JkZXIub3JkZXItdHlwZScpLFxyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZDogJ3R5cGUnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICdvcmRlclBsYWNlZEF0JyxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAnZGF0ZVJhbmdlJyB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnb3JkZXIucGxhY2VkLWF0JyksXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnb3JkZXJQbGFjZWRBdCcsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTGFzdE5hbWUnLFxyXG4gICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnY3VzdG9tZXIubGFzdC1uYW1lJyksXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnY3VzdG9tZXJMYXN0TmFtZScsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3RyYW5zYWN0aW9uSWQnLFxyXG4gICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnb3JkZXIudHJhbnNhY3Rpb24taWQnKSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICd0cmFuc2FjdGlvbklkJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZEZpbHRlcnModGhpcy5jdXN0b21GaWVsZHMpXHJcbiAgICAgICAgLmNvbm5lY3RUb1JvdXRlKHRoaXMucm91dGUpO1xyXG5cclxuICAgIHJlYWRvbmx5IHNvcnRzID0gdGhpcy5jcmVhdGVTb3J0Q29sbGVjdGlvbigpXHJcbiAgICAgICAgLmRlZmF1bHRTb3J0KCd1cGRhdGVkQXQnLCAnREVTQycpXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnaWQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnY3JlYXRlZEF0JyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3VwZGF0ZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdvcmRlclBsYWNlZEF0JyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2N1c3RvbWVyTGFzdE5hbWUnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnc3RhdGUnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAndG90YWxXaXRoVGF4JyB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZFNvcnRzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICBjYW5DcmVhdGVEcmFmdE9yZGVyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFjdGl2ZUNoYW5uZWxJc0RlZmF1bHRDaGFubmVsID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBzdXBlci5jb25maWd1cmUoe1xyXG4gICAgICAgICAgICBkb2N1bWVudDogR2V0T3JkZXJMaXN0RG9jdW1lbnQsXHJcbiAgICAgICAgICAgIGdldEl0ZW1zOiByZXN1bHQgPT4gcmVzdWx0Lm9yZGVycyxcclxuICAgICAgICAgICAgc2V0VmFyaWFibGVzOiAoc2tpcCwgdGFrZSkgPT4gdGhpcy5jcmVhdGVRdWVyeU9wdGlvbnMoc2tpcCwgdGFrZSwgdGhpcy5zZWFyY2hUZXJtQ29udHJvbC52YWx1ZSksXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0T25DaGFuZ2VzOiBbdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlcywgdGhpcy5zb3J0cy52YWx1ZUNoYW5nZXNdLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhbkNyZWF0ZURyYWZ0T3JkZXIgPSAhIXRoaXMuc2VydmVyQ29uZmlnU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0T3JkZXJQcm9jZXNzU3RhdGVzKClcclxuICAgICAgICAgICAgLmZpbmQoc3RhdGUgPT4gc3RhdGUubmFtZSA9PT0gJ0NyZWF0ZWQnKVxyXG4gICAgICAgICAgICA/LnRvLmluY2x1ZGVzKCdEcmFmdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgaXNEZWZhdWx0Q2hhbm5lbCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmRlZmF1bHRDaGFubmVsSXNBY3RpdmUkLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcChpc0RlZmF1bHQgPT4gKHRoaXMuYWN0aXZlQ2hhbm5lbElzRGVmYXVsdENoYW5uZWwgPSBpc0RlZmF1bHQpKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHN1cGVyLnJlZnJlc2hMaXN0T25DaGFuZ2VzKHRoaXMuZmlsdGVycy52YWx1ZUNoYW5nZXMsIHRoaXMuc29ydHMudmFsdWVDaGFuZ2VzLCBpc0RlZmF1bHRDaGFubmVsJCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeU9wdGlvbnMoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICBza2lwOiBudW1iZXIsXHJcbiAgICAgICAgdGFrZTogbnVtYmVyLFxyXG4gICAgICAgIHNlYXJjaFRlcm06IHN0cmluZyB8IG51bGwsXHJcbiAgICApOiB7IG9wdGlvbnM6IE9yZGVyTGlzdE9wdGlvbnMgfSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcklucHV0ID0gdGhpcy5maWx0ZXJzLmNyZWF0ZUZpbHRlcklucHV0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2hhbm5lbElzRGVmYXVsdENoYW5uZWwpIHtcclxuICAgICAgICAgICAgZmlsdGVySW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi4oZmlsdGVySW5wdXQgPz8ge30pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJJbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogc2VhcmNoVGVybSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjdXN0b21lckxhc3ROYW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IHNlYXJjaFRlcm0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBzZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2tpcCxcclxuICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oZmlsdGVySW5wdXQgPz8ge30pLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdG9yOiBzZWFyY2hUZXJtID8gTG9naWNhbE9wZXJhdG9yLk9SIDogTG9naWNhbE9wZXJhdG9yLkFORCxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydHMuY3JlYXRlU29ydElucHV0KCksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaGlwcGluZ05hbWVzKG9yZGVyOiBPcmRlcikge1xyXG4gICAgICAgIGlmIChvcmRlci5zaGlwcGluZ0xpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb3JkZXIuc2hpcHBpbmdMaW5lcy5tYXAoc2hpcHBpbmdMaW5lID0+IHNoaXBwaW5nTGluZS5zaGlwcGluZ01ldGhvZC5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwib3JkZXItbGlzdFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5DcmVhdGVEcmFmdE9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0blwiICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVPcmRlciddXCIgW3JvdXRlckxpbmtdPVwiWycuL2RyYWZ0L2NyZWF0ZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY3JlYXRlLWRyYWZ0LW9yZGVyJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjx2ZHItZGF0YS10YWJsZS0yXHJcbiAgICBjbGFzcz1cIm10LTJcIlxyXG4gICAgaWQ9XCJvcmRlci1saXN0XCJcclxuICAgIFtpdGVtc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zJCB8IGFzeW5jXCJcclxuICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuPlxyXG4gICAgPHZkci1idWxrLWFjdGlvbi1tZW51XHJcbiAgICAgICAgbG9jYXRpb25JZD1cIm9yZGVyLWxpc3RcIlxyXG4gICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gICAgICAgIFtzZWxlY3Rpb25NYW5hZ2VyXT1cInNlbGVjdGlvbk1hbmFnZXJcIlxyXG4gICAgPjwvdmRyLWJ1bGstYWN0aW9uLW1lbnU+XHJcbiAgICA8dmRyLWR0Mi1zZWFyY2hcclxuICAgICAgICBbc2VhcmNoVGVybUNvbnRyb2xdPVwic2VhcmNoVGVybUNvbnRyb2xcIlxyXG4gICAgICAgIFtzZWFyY2hUZXJtUGxhY2Vob2xkZXJdPVwiJ29yZGVyLnNlYXJjaC1ieS1vcmRlci1maWx0ZXJzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAvPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdpZCcpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgb3JkZXIuaWQgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgb3JkZXIuY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNvZGUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcmRlcj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidXR0b24tZ2hvc3RcIiBbcm91dGVyTGlua109XCJvcmRlci5zdGF0ZSA9PT0gJ0RyYWZ0JyA/IFsnLi9kcmFmdCcsIG9yZGVyLmlkXSA6IFsnLi8nLCBvcmRlci5pZF1cIlxyXG4gICAgICAgICAgICAgICAgPjxzcGFuPnt7IG9yZGVyLmNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhcnJvdyByaWdodFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIuY3VzdG9tZXInIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdjdXN0b21lckxhc3ROYW1lJylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8dmRyLWN1c3RvbWVyLWxhYmVsXHJcbiAgICAgICAgICAgICAgICBbY3VzdG9tZXJdPVwib3JkZXIuY3VzdG9tZXJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgID48L3Zkci1jdXN0b21lci1sYWJlbD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInb3JkZXIub3JkZXItdHlwZScgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJvcmRlci50eXBlID09PSBPcmRlclR5cGUuUmVndWxhclwiPnt7ICdvcmRlci5vcmRlci10eXBlLXJlZ3VsYXInIHwgdHJhbnNsYXRlIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgPHZkci1jaGlwICpuZ0lmPVwib3JkZXIudHlwZSA9PT0gT3JkZXJUeXBlLkFnZ3JlZ2F0ZVwiPnt7ICdvcmRlci5vcmRlci10eXBlLWFnZ3JlZ2F0ZScgfCB0cmFuc2xhdGUgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJvcmRlci50eXBlID09PSBPcmRlclR5cGUuU2VsbGVyXCI+e3sgJ29yZGVyLm9yZGVyLXR5cGUtc2VsbGVyJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLnN0YXRlJyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgnc3RhdGUnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDx2ZHItb3JkZXItc3RhdGUtbGFiZWwgW3N0YXRlXT1cIm9yZGVyLnN0YXRlXCI+PC92ZHItb3JkZXItc3RhdGUtbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLnRvdGFsJyB8IHRyYW5zbGF0ZVwiIFtzb3J0XT1cInNvcnRzLmdldCgndG90YWxXaXRoVGF4JylcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBvcmRlci50b3RhbFdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBvcmRlci51cGRhdGVkQXQgfCB0aW1lQWdvIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ29yZGVyLnBsYWNlZC1hdCcgfCB0cmFuc2xhdGVcIiBbc29ydF09XCJzb3J0cy5nZXQoJ29yZGVyUGxhY2VkQXQnKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3JkZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IG9yZGVyLm9yZGVyUGxhY2VkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidvcmRlci5zaGlwcGluZycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9yZGVyPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBnZXRTaGlwcGluZ05hbWVzKG9yZGVyKSB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY3VzdG9tLWZpZWxkLWNvbHVtblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgW3NvcnRzXT1cInNvcnRzXCJcclxuICAgIC8+XHJcbjwvdmRyLWRhdGEtdGFibGUtMj5cclxuIl19