@snabcentr/client-ui 4.14.6-profstroy → 4.14.7

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 (64) hide show
  1. package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +8 -0
  2. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
  3. package/catalog/input-quantity/sc-input-quantity.component.d.ts +1 -17
  4. package/catalog/price-history/sc-price-history.component.d.ts +4 -0
  5. package/catalog/sc-catalog.module.d.ts +1 -1
  6. package/configurators/sandwich/sc-sandwich.component.d.ts +4 -0
  7. package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +8 -0
  8. package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -6
  9. package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +22 -18
  10. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +16 -5
  11. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +10 -32
  12. package/esm2022/catalog/price-history/sc-price-history.component.mjs +9 -5
  13. package/esm2022/catalog/sc-catalog.module.mjs +5 -3
  14. package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +11 -6
  15. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +19 -11
  16. package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +6 -14
  17. package/esm2022/order/draft/sc-draft.component.mjs +10 -173
  18. package/esm2022/order/index.mjs +1 -5
  19. package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +3 -7
  20. package/esm2022/order/order-item/sc-order-item.component.mjs +10 -15
  21. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +13 -62
  22. package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +3 -7
  23. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
  24. package/esm2022/pipes/sc-format-date.mjs +1 -1
  25. package/esm2022/providers/sc-date-formatter.mjs +1 -1
  26. package/esm2022/validators/step-validator.mjs +4 -4
  27. package/fesm2022/snabcentr-client-ui.mjs +112 -719
  28. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  29. package/order/draft/sc-draft.component.d.ts +1 -88
  30. package/order/index.d.ts +0 -4
  31. package/order/order-direction-items/sc-order-direction-items.component.d.ts +1 -5
  32. package/order/order-item/sc-order-item.component.d.ts +5 -9
  33. package/order/order-items-list/sc-order-items-list.component.d.ts +5 -23
  34. package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +1 -5
  35. package/package.json +2 -2
  36. package/pipes/sc-format-date.d.ts +1 -1
  37. package/providers/sc-date-formatter.d.ts +1 -1
  38. package/release_notes.tmp +1 -1
  39. package/styles/tailwind/tailwind.scss +0 -16
  40. package/validators/step-validator.d.ts +1 -2
  41. package/esm2022/helpers/sc-file-helper.mjs +0 -29
  42. package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +0 -42
  43. package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +0 -2
  44. package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +0 -68
  45. package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +0 -21
  46. package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +0 -31
  47. package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +0 -132
  48. package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +0 -32
  49. package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +0 -72
  50. package/esm2022/order/draft/profstroy/index.mjs +0 -8
  51. package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +0 -2
  52. package/esm2022/order/models/sc-i-order-items-group.mjs +0 -2
  53. package/helpers/sc-file-helper.d.ts +0 -13
  54. package/order/draft/helpers/sc-draft-list-helper.d.ts +0 -22
  55. package/order/draft/models/sc-i-draft-list-item.d.ts +0 -14
  56. package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +0 -54
  57. package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +0 -12
  58. package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +0 -21
  59. package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +0 -58
  60. package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +0 -29
  61. package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +0 -26
  62. package/order/draft/profstroy/index.d.ts +0 -7
  63. package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +0 -17
  64. package/order/models/sc-i-order-items-group.d.ts +0 -22
@@ -3,7 +3,7 @@ import { HttpErrorResponse } from '@angular/common/http';
3
3
  import { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject } from '@angular/core';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { FormControl, FormGroup, Validators } from '@angular/forms';
6
- import { ScISuggestionType, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
6
+ import { ScISuggestionType, ScNumberHelper, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
7
7
  import { TUI_IS_MOBILE } from '@taiga-ui/cdk';
8
8
  import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
9
9
  import { getCountries } from 'libphonenumber-js';
@@ -28,14 +28,6 @@ import * as i12 from "@taiga-ui/experimental";
28
28
  * Компонент добавления адреса доставки.
29
29
  */
30
30
  export class ScAddDeliveryAddressDialogComponent {
31
- /**
32
- * Округляет координаты до 6 цифр после запятой.
33
- *
34
- * @param coords Координаты точки.
35
- */
36
- static roundCoordinate(coords) {
37
- return coords.map((coord) => Math.round(coord * 1e6) / 1e6);
38
- }
39
31
  /**
40
32
  * Инициализирует экземпляр класса {@link ScAddDeliveryAddressDialogComponent}.
41
33
  *
@@ -170,7 +162,7 @@ export class ScAddDeliveryAddressDialogComponent {
170
162
  */
171
163
  onSelectedAddress(suggestion) {
172
164
  if ('addressString' in suggestion && suggestion.geoCoordinates) {
173
- const coords = ScAddDeliveryAddressDialogComponent.roundCoordinate([suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long]);
165
+ const coords = [suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long].map((coord) => ScNumberHelper.roundCoordinate(coord));
174
166
  this.addressPlacemark ??= this.createPlacemark(coords);
175
167
  this.setGeoCoordinates(coords);
176
168
  if (!this.yaMap?.geoObjects.getLength()) {
@@ -193,8 +185,8 @@ export class ScAddDeliveryAddressDialogComponent {
193
185
  this.addressPlacemark.geometry?.setCoordinates(coords);
194
186
  this.form.patchValue({
195
187
  coordinates: {
196
- lat: Number(coords[0].toFixed(6)),
197
- long: Number(coords[1].toFixed(6)),
188
+ lat: coords[0],
189
+ long: coords[1],
198
190
  },
199
191
  });
200
192
  }
@@ -230,7 +222,7 @@ export class ScAddDeliveryAddressDialogComponent {
230
222
  placemark.events.add('dragend', () => {
231
223
  const coord = this.addressPlacemark?.geometry?.getCoordinates();
232
224
  if (coord) {
233
- this.setGeoCoordinates(ScAddDeliveryAddressDialogComponent.roundCoordinate(coord));
225
+ this.setGeoCoordinates(coord.map((value) => ScNumberHelper.roundCoordinate(value)));
234
226
  }
235
227
  });
236
228
  return placemark;
@@ -245,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
245
237
  type: Inject,
246
238
  args: [POLYMORPHEUS_CONTEXT]
247
239
  }] }, { type: i1.ScConvertersService }] });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQVFILGlCQUFpQixFQUVqQixzQkFBc0IsR0FFekIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFB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QUksQ0FBQyxpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOytHQTdRUSxtQ0FBbUMsOEZBaUpoQyxvQkFBb0I7bUdBakp2QixtQ0FBbUMsc0VDdkNoRCw0ak5BcUpBOzs0RkQ5R2EsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNJLGdDQUFnQyxtQkFFekIsdUJBQXVCLENBQUMsTUFBTTs7MEJBbUoxQyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2QgKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbmplY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgU2NJQXBpRXJyb3JSZXNwb25zZSxcbiAgICBTY0lEZWxpdmVyeUFkZHJlc3MsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlLFxuICAgIFNjSU9yZ0NvbnRhY3QsXG4gICAgU2NJU3VnZ2VzdGlvbkFkZHJlc3MsXG4gICAgU2NJU3VnZ2VzdGlvblR5cGUsXG4gICAgU2NTdWdnZXN0aW9uLFxuICAgIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sXG4gICAgU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVFVJX0lTX01PQklMRSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUNvdW50cnlJc29Db2RlIH0gZnJvbSAnQHRhaWdhLXVpL2kxOG4nO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IFlhUmVhZHlFdmVudCB9IGZyb20gJ2FuZ3VsYXI4LXlhbmRleC1tYXBzJztcbmltcG9ydCB7IGdldENvdW50cmllcyB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSVNfREVGQVVMVF9DT1VOVFJZIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IFNjSGVscE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBwaG9uZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvc2MtcGhvbmUtdmFsaWRhdG9yJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiDQntC60YDRg9Cz0LvRj9C10YIg0LrQvtC+0YDQtNC40L3QsNGC0Ysg0LTQviA2INGG0LjRhNGAINC/0L7RgdC70LUg0LfQsNC/0Y/RgtC+0LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcm91bmRDb29yZGluYXRlKGNvb3JkczogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBjb29yZHMubWFwKChjb29yZCkgPT4gTWF0aC5yb3VuZChjb29yZCAqIDFlNikgLyAxZTYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQtNC70Y8g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7Qs9C+INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0L3QuNGH0YLQvtC20LXQvdC40LXQvCDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINC+0YLQvtCx0YDQsNC20LDQtdGC0YHRjyDRjdGC0L7RgiDQutC+0LzQv9C+0L3QtdC90YIg0L3QsCDQvNC+0LHQuNC70YzQvdC+0Lwg0YPRgdGC0YDQvtC50YHRgtCy0LUg0LjQu9C4INC90LXRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGU6IGJvb2xlYW4gPSBpbmplY3QoVFVJX0lTX01PQklMRSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0L7RgNC00LjQvdCw0YLRiyDRhtC10L3RgtGA0LAg0LrQsNGA0YLRiyDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdENlbnRlck1hcDogbnVtYmVyW10gPSBbNTcuMDAwMzUzLCA0MC45NzM5M107XG5cbiAgICAvKipcbiAgICAgKiDQnNCw0YHRiNGC0LDQsSDQutCw0YDRgtGLINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Wm9vbU1hcDogbnVtYmVyID0gMTE7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LTQsNC90L3Ri9GFINC60L7QvdGC0LDQutGC0L7QsiDQtNC7INC/0L7QvNC+0YnQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXNlckhlbHBDb250YWN0cyQ6IE9ic2VydmFibGU8U2NJT3JnQ29udGFjdFtdPiA9IGluamVjdChTY0hlbHBOb3RpZmljYXRpb25TZXJ2aWNlKS51c2VySGVscENvbnRhY3RzO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDRgtC10LrRg9GJ0LDRjyDRgdGC0YDQsNC90LAg0Y/QstC70Y/QtdGC0YHRjyDQstC10YDQvdC+0LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVmYXVsdENvdW50cnk6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBpbmplY3QoSVNfREVGQVVMVF9DT1VOVFJZKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGC0YDQsNC9LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb3VudHJpZXM6IHJlYWRvbmx5IFR1aUNvdW50cnlJc29Db2RlW10gPSBnZXRDb3VudHJpZXMoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJRGVsaXZlcnlBZGRyZXNzIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0JC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLmNyZWF0ZURlbGl2ZXJ5QWRkcmVzcyQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlPFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZT4odmFsdWUpKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIFNjSUFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogZXJyb3JzW2tleV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBTY0lEZWxpdmVyeUFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEgPT09IG51bGwpKTtcblxuICAgIC8qKlxuICAgICAqINCT0YDRg9C/0L/QsCDRgSDQv9C+0LvRj9C80Lgg0LDQtNGA0LXRgdC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGFkZHJlc3NDb250cm9sOiBGb3JtQ29udHJvbDxTY0lTdWdnZXN0aW9uQWRkcmVzcyB8IHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPFNjSVN1Z2dlc3Rpb25BZGRyZXNzIHwgc3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0YHRgtGA0L7QudC60Lgg0LrQsNGA0YLRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3B0aW9uczogeW1hcHMuSU1hcE9wdGlvbnMgPSB7XG4gICAgICAgIGF1dG9GaXRUb1ZpZXdwb3J0OiAnYWx3YXlzJyxcbiAgICAgICAgeWFuZGV4TWFwRGlzYWJsZVBvaUludGVyYWN0aXZpdHk6IGZhbHNlLFxuICAgICAgICBtYXhab29tOiAxOSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3NDb250cm9sLFxuICAgICAgICBjb29yZGluYXRlczogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBsYXQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIGxvbmc6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbnRhY3Q6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgcGhvbmVWYWxpZGF0b3IoKV0pLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLmVtYWlsKSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KLQvtGH0LrQsCDQsNC00YDQtdGB0LAg0L3QsCDQutCw0YDRgtC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRyZXNzUGxhY2VtYXJrPzogeW1hcHMuUGxhY2VtYXJrO1xuXG4gICAgLyoqXG4gICAgICog0K/QvdC00LXQutGBINC60LDRgNGC0LAuXG4gICAgICovXG4gICAgcHVibGljIHlhTWFwPzogeW1hcHMuTWFwO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0FkZERlbGl2ZXJ5QWRkcmVzc0RpYWxvZ0NvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaXZlcnlBZGRyZXNzU2VydmljZSDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINCw0LTRgNC10YHQsNC80Lgg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlOiBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSxcbiAgICAgICAgQEluamVjdChQT0xZTU9SUEhFVVNfQ09OVEVYVCkgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ6IFR1aURpYWxvZ0NvbnRleHQ8dm9pZCwgdm9pZD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXRkb2MgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0udXNlclByb2ZpbGVEZWxpdmVyeUFkZHJlc3NBZGRTaG93LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZHJlc3NDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVHZW9Db29yZGluYXRlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQt9Cw0LPRgNGD0LfQutC4INC60LDRgNGC0Ysg0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRhcmdldCDQrdC60LfQtdC80L/Qu9GP0YAg0YbQtdC70LXQstC+0LPQviDQvtCx0YrQtdC60YLQsC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0LnRhcmdldCDQrdC60LfQtdC80L/Qu9GP0YAg0YbQtdC70LXQstC+0LPQviDQvtCx0YrQtdC60YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25NYXBSZWFkeUhhbmRsZSh7IHRhcmdldCB9OiBZYVJlYWR5RXZlbnQ8eW1hcHMuTWFwPik6IHZvaWQge1xuICAgICAgICB0aGlzLnlhTWFwID0gdGFyZ2V0O1xuXG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRhcmdldC5nZW9PYmplY3RzLmFkZCh0aGlzLmFkZHJlc3NQbGFjZW1hcmspO1xuXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmFkZHJlc3NQbGFjZW1hcmsuZ2VvbWV0cnk/LmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0LLRi9Cx0L7RgNCwINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHN1Z2dlc3Rpb24g0J7QsdGK0LXQutGCINC/0L7QtNGB0LrQsNC30LrQuCDQsNGA0LXRgdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBTY1N1Z2dlc3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKCdhZGRyZXNzU3RyaW5nJyBpbiBzdWdnZXN0aW9uICYmIHN1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50LnJvdW5kQ29vcmRpbmF0ZShbc3VnZ2VzdGlvbi5nZW9Db29yZGluYXRlcy5sYXQsIHN1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMubG9uZ10pO1xuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NQbGFjZW1hcmsgPz89IHRoaXMuY3JlYXRlUGxhY2VtYXJrKGNvb3Jkcyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0R2VvQ29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnlhTWFwPy5nZW9PYmplY3RzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5hZGQodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrLmdlb21ldHJ5Py5nZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgaWYgKGJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldFpvb20oMTcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRHZW9Db29yZGluYXRlcyhjb29yZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uc2V0Q29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogTnVtYmVyKGNvb3Jkc1swXS50b0ZpeGVkKDYpKSxcbiAgICAgICAgICAgICAgICAgICAgbG9uZzogTnVtYmVyKGNvb3Jkc1sxXS50b0ZpeGVkKDYpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiB7QGxpbmsgYWRkcmVzc1BsYWNlbWFya30g0YLQvtGH0LrRgyDQvdCwINC+0L/RgNC10LTQtdC70ZHQvdC90YvQtSDQutC+0L7RgNC00LjQvdCw0YLRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUdlb0Nvb3JkaW5hdGVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hZGRyZXNzUGxhY2VtYXJrKSB7XG4gICAgICAgICAgICB0aGlzLnlhTWFwPy5nZW9PYmplY3RzLnJlbW92ZSh0aGlzLmFkZHJlc3NQbGFjZW1hcmspO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy55YU1hcD8uc2V0Q2VudGVyKHRoaXMuZGVmYXVsdENlbnRlck1hcCk7XG4gICAgICAgICAgICB0aGlzLnlhTWFwPy5zZXRab29tKHRoaXMuZGVmYXVsdFpvb21NYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0L7QsdGK0LXQutGCINGC0L7Rh9C60Lgg0Lgg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YHQvtCx0YvRgtC40Y8g0LTQu9GPINC90LXQs9C+LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvb3JkcyDQmtC+0L7RgNC00LjQvdCw0YLRiyDRgtC+0YfQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlUGxhY2VtYXJrKGNvb3JkczogbnVtYmVyW10pOiB5bWFwcy5QbGFjZW1hcmsge1xuICAgICAgICBjb25zdCBwbGFjZW1hcmsgPSBuZXcgeW1hcHMuUGxhY2VtYXJrKFxuICAgICAgICAgICAgY29vcmRzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb25DYXB0aW9uOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJlc2V0OiAnaXNsYW5kcycsXG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHBsYWNlbWFyay5ldmVudHMuYWRkKCdkcmFnZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLmFkZHJlc3NQbGFjZW1hcms/Lmdlb21ldHJ5Py5nZXRDb29yZGluYXRlcygpO1xuXG4gICAgICAgICAgICBpZiAoY29vcmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdlb0Nvb3JkaW5hdGVzKFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50LnJvdW5kQ29vcmRpbmF0ZShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGxhY2VtYXJrO1xuICAgIH1cbn1cbiIsIkBsZXQgaXNFbmFibGVkQWRkRGVsaXZlcnlBZGRyZXNzID0gaXNEZWZhdWx0Q291bnRyeSB8IGFzeW5jO1xuXG5AaWYgKGlzRW5hYmxlZEFkZERlbGl2ZXJ5QWRkcmVzcykge1xuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93XCI+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAgICAgKG5nU3VibWl0KT1cIm9uU3VibWl0JC5uZXh0KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICDQkNC00YDQtdGBINC00L7RgdGC0LDQstC60LhcbiAgICAgICAgICAgICAgICA8dHVpLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtwc2V1ZG9JbnZhbGlkXT1cIihhZGRyZXNzQ29udHJvbC52YWxpZCAmJiBmb3JtLmNvbnRyb2xzLmNvb3JkaW5hdGVzLmludmFsaWQpIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5hZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENsaWNrKT1cIm9uU2VsZWN0ZWRBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkZHJlc3NDb250cm9sLnZhbGlkICYmIGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgIGVycm9yPVwi0JLRi9Cx0LXRgNC40YLQtSDQstCw0YDQuNCw0L3RgiDQuNC3INGB0L/QuNGB0LrQsFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNvbnRhY3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIGdhcC0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInctZnVsbCBmb250LWJvbGRcIj7QmtC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQvjo8L3A+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCi0LXQu9C10YTQvtC9XG4gICAgICAgICAgICAgICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cnlTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cmllc109XCIoY291bnRyaWVzIHwgdHVpU29ydENvdW50cmllcyB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1xuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRMZWdhY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICDQlNC+0LvQttC90L7RgdGC0YxcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiPiDQlNC+0LvQttC90L7RgdGC0YwgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLThcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbaWNvblN0YXJ0XT1cImlzTW9iaWxlID8gJ0B0dWkueCcgOiAnQHR1aS54J1wiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J7RgtC80LXQvdCwXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2ljb25TdGFydF09XCJpc01vYmlsZSA/ICdAdHVpLnNhdmUnIDogJ0B0dWkuc2F2ZSdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0YxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtei0xMCBmbGV4IHNpemUtZnVsbCBtZDp3LTEvMlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd6LTAgcmVsYXRpdmUnOiBhZGRyZXNzUGxhY2VtYXJrIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWF1dG9cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BvaW50ZXItZXZlbnRzLW5vbmUgb3BhY2l0eS01MCc6IGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZCB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8eWEtbWFwXG4gICAgICAgICAgICAgICAgICAgIFt6b29tXT1cIjExXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInsgY29udHJvbHM6IFtdIH1cIlxuICAgICAgICAgICAgICAgICAgICAocmVhZHkpPVwib25NYXBSZWFkeUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIEBsZXQgaGVscENvbnRhY3RzID0gdXNlckhlbHBDb250YWN0cyQgfCBhc3luYztcblxuICAgIEBpZiAoaGVscENvbnRhY3RzICYmIGhlbHBDb250YWN0cy5sZW5ndGgpIHtcbiAgICAgICAgPHR1aS1wdXNoXG4gICAgICAgICAgICB0eXBlPVwi0KfRgtC+0LHRiyDQtNC+0LHQsNCy0LjRgtGMINCw0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuCwg0YHQstGP0LbQuNGC0LXRgdGMINGBINC90LDQvNC4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiIXctYXV0b1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0dWktaWNvbiBpY29uPVwiQHR1aS5tZXNzYWdlLXNxdWFyZVwiIC8+XG4gICAgICAgICAgICA8c2MtbWFuYWdlci1jYXJkIFttYW5hZ2VyXT1cImhlbHBDb250YWN0c1swXVwiIC8+XG4gICAgICAgIDwvdHVpLXB1c2g+XG4gICAgfVxufVxuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQVFILGlCQUFpQixFQUNqQixjQUFjLEVBRWQsc0JBQXNCLEdBRXpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFckU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sbUNBQW1DO0lBNkg1Qzs7Ozs7OztPQU9HO0lBQ0gsWUFDcUIsc0JBQWdELEVBQ2hELGtCQUF3QyxFQUNYLE9BQXFDLEVBQ2xFLGlCQUFzQztRQUh0QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTBCO1FBQ2hELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBc0I7UUFDWCxZQUFPLEdBQVAsT0FBTyxDQUE4QjtRQUNsRSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBeEkzRDs7V0FFRztRQUNLLGVBQVUsR0FBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEQ7O1dBRUc7UUFDYSxhQUFRLEdBQVksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFEOztXQUVHO1FBQ2EsbUJBQWMsR0FBNkIsaUJBQWlCLENBQUM7UUFFN0U7O1dBRUc7UUFDYSxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0Q7O1dBRUc7UUFDYSxxQkFBZ0IsR0FBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuRTs7V0FFRztRQUNhLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRTVDOztXQUVHO1FBQ2dCLHNCQUFpQixHQUFnQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2SDs7V0FFRztRQUNnQixxQkFBZ0IsR0FBd0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFdEY7O1dBRUc7UUFDZ0IsY0FBUyxHQUFpQyxZQUFZLEVBQUUsQ0FBQztRQUU1RTs7V0FFRztRQUNjLGFBQVEsR0FBMEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2xGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUM3QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUF1QyxDQUFDLEVBQzVELFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQWlDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN0SSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUMxQixJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUE0QixDQUFDO2dCQUUvRCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ2hDLDREQUE0RDt3QkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25FLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxFQUFFLENBQUMsRUFBd0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDbEIsQ0FDSixFQUNELEtBQUssRUFBRSxDQUNWLENBQUM7UUFFRjs7V0FFRztRQUNhLGFBQVEsR0FBd0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVqRzs7V0FFRztRQUNJLG1CQUFjLEdBQXNELElBQUksV0FBVyxDQUF1QyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVKOztXQUVHO1FBQ0ksWUFBTyxHQUFzQjtZQUNoQyxpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLGdDQUFnQyxFQUFFLEtBQUs7WUFDdkMsT0FBTyxFQUFFLEVBQUU7U0FDZCxDQUFDO1FBRUY7O1dBRUc7UUFDYSxTQUFJLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzVCLFdBQVcsRUFBRSxJQUFJLFNBQVMsQ0FBQztnQkFDdkIsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDOUQsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNsRSxDQUFDO1lBQ0YsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQWdCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMvRCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQWdCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDcEYsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDN0QsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUN0RSxDQUFDO1NBQ0wsQ0FBQyxDQUFDO0lBeUJBLENBQUM7SUFFSixrQkFBa0I7SUFDWCxlQUFlO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztZQUN6QyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsaUNBQWlDO1NBQ25FLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQTJCO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUUzRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLFVBQXdCO1FBQzdDLElBQUksZUFBZSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXJJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBRTNELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxNQUFnQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNqQixXQUFXLEVBQUU7b0JBQ1QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUN4QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDakIsV0FBVyxFQUFFO29CQUNULEdBQUcsRUFBRSxJQUFJO29CQUNULElBQUksRUFBRSxJQUFJO2lCQUNiO2FBQ0osQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGVBQWUsQ0FBQyxNQUFnQjtRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQ2pDLE1BQU0sRUFDTjtZQUNJLFdBQVcsRUFBRSxFQUFFO1NBQ2xCLEVBQ0Q7WUFDSSxNQUFNLEVBQUUsU0FBUztZQUNqQixTQUFTLEVBQUUsSUFBSTtTQUNsQixDQUNKLENBQUM7UUFFRixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFFaEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzsrR0FwUVEsbUNBQW1DLDhGQXdJaEMsb0JBQW9CO21HQXhJdkIsbUNBQW1DLHNFQ3hDaEQsNGpOQXFKQTs7NEZEN0dhLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDSSxnQ0FBZ0MsbUJBRXpCLHVCQUF1QixDQUFDLE1BQU07OzBCQTBJMUMsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgSW5qZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzLFxuICAgIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSxcbiAgICBTY0lPcmdDb250YWN0LFxuICAgIFNjSVN1Z2dlc3Rpb25BZGRyZXNzLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjTnVtYmVySGVscGVyLFxuICAgIFNjU3VnZ2VzdGlvbixcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlDb3VudHJ5SXNvQ29kZSB9IGZyb20gJ0B0YWlnYS11aS9pMThuJztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICdhbmd1bGFyOC15YW5kZXgtbWFwcyc7XG5pbXBvcnQgeyBnZXRDb3VudHJpZXMgfSBmcm9tICdsaWJwaG9uZW51bWJlci1qcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElTX0RFRkFVTFRfQ09VTlRSWSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTY0hlbHBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcGhvbmVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3NjLXBob25lLXZhbGlkYXRvcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00L7QsdCw0LLQu9C10L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvtGA0LTQuNC90LDRgtGLINGG0LXQvdGC0YDQsCDQutCw0YDRgtGLINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0Q2VudGVyTWFwOiBudW1iZXJbXSA9IFs1Ny4wMDAzNTMsIDQwLjk3MzkzXTtcblxuICAgIC8qKlxuICAgICAqINCc0LDRgdGI0YLQsNCxINC60LDRgNGC0Ysg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRab29tTWFwOiBudW1iZXIgPSAxMTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQtNCw0L3QvdGL0YUg0LrQvtC90YLQsNC60YLQvtCyINC00Lsg0L/QvtC80L7RidC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB1c2VySGVscENvbnRhY3RzJDogT2JzZXJ2YWJsZTxTY0lPcmdDb250YWN0W10+ID0gaW5qZWN0KFNjSGVscE5vdGlmaWNhdGlvblNlcnZpY2UpLnVzZXJIZWxwQ29udGFjdHM7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INGC0LXQutGD0YnQsNGPINGB0YLRgNCw0L3QsCDRj9Cy0LvRj9C10YLRgdGPINCy0LXRgNC90L7QuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZWZhdWx0Q291bnRyeTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGluamVjdChJU19ERUZBVUxUX0NPVU5UUlkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YLRgNCw0L0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cmllczogcmVhZG9ubHkgVHVpQ291bnRyeUlzb0NvZGVbXSA9IGdldENvdW50cmllcygpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGBINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTxTY0lEZWxpdmVyeUFkZHJlc3MgfCBudWxsPiA9IHRoaXMub25TdWJtaXQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtLnZhbHVlIGFzIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UuY3JlYXRlRGVsaXZlcnlBZGRyZXNzJCh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGxSZWN1cnNpdmU8U2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlPih2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNvbXBsZXRlV2l0aCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9IGFzIFNjSURlbGl2ZXJ5QWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YSA9PT0gbnVsbCkpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINGBINC/0L7Qu9GP0LzQuCDQsNC00YDQtdGB0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkcmVzc0NvbnRyb2w6IEZvcm1Db250cm9sPFNjSVN1Z2dlc3Rpb25BZGRyZXNzIHwgc3RyaW5nIHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8U2NJU3VnZ2VzdGlvbkFkZHJlc3MgfCBzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQutCw0YDRgtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBvcHRpb25zOiB5bWFwcy5JTWFwT3B0aW9ucyA9IHtcbiAgICAgICAgYXV0b0ZpdFRvVmlld3BvcnQ6ICdhbHdheXMnLFxuICAgICAgICB5YW5kZXhNYXBEaXNhYmxlUG9pSW50ZXJhY3Rpdml0eTogZmFsc2UsXG4gICAgICAgIG1heFpvb206IDE5LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuYWRkcmVzc0NvbnRyb2wsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGxhdDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgbG9uZzogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB9KSxcbiAgICAgICAgY29udGFjdDogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBwaG9uZVZhbGlkYXRvcigpXSksXG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMuZW1haWwpLFxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQotC+0YfQutCwINCw0LTRgNC10YHQsCDQvdCwINC60LDRgNGC0LUuXG4gICAgICovXG4gICAgcHVibGljIGFkZHJlc3NQbGFjZW1hcms/OiB5bWFwcy5QbGFjZW1hcms7XG5cbiAgICAvKipcbiAgICAgKiDQr9C90LTQtdC60YEg0LrQsNGA0YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgeWFNYXA/OiB5bWFwcy5NYXA7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LDQtNGA0LXRgdCw0LzQuCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqIEBwYXJhbSB1c2VyTWV0cmlrYVNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICogQHBhcmFtIGNvbnRleHQg0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLCDQsiDQutC+0YLQvtGA0L7QvCDQvtGC0LrRgNGL0YIg0LrQvtC80L/QvtC90LXQvdGCLlxuICAgICAqIEBwYXJhbSBjb252ZXJ0ZXJzU2VydmljZSDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2U6IFNjRGVsaXZlcnlBZGRyZXNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFBPTFlNT1JQSEVVU19DT05URVhUKSBwdWJsaWMgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB2b2lkPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS51c2VyUHJvZmlsZURlbGl2ZXJ5QWRkcmVzc0FkZFNob3csXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkcmVzc0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUdlb0Nvb3JkaW5hdGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INC30LDQs9GA0YPQt9C60Lgg0LrQsNGA0YLRiyDQvdCwINGB0YLRgNCw0L3QuNGG0LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0INCt0LrQt9C10LzQv9C70Y/RgCDRhtC10LvQtdCy0L7Qs9C+INC+0LHRitC10LrRgtCwLlxuICAgICAqIEBwYXJhbSB0YXJnZXQudGFyZ2V0INCt0LrQt9C10LzQv9C70Y/RgCDRhtC10LvQtdCy0L7Qs9C+INC+0LHRitC10LrRgtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbk1hcFJlYWR5SGFuZGxlKHsgdGFyZ2V0IH06IFlhUmVhZHlFdmVudDx5bWFwcy5NYXA+KTogdm9pZCB7XG4gICAgICAgIHRoaXMueWFNYXAgPSB0YXJnZXQ7XG5cbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1BsYWNlbWFyaykge1xuICAgICAgICAgICAgdGFyZ2V0Lmdlb09iamVjdHMuYWRkKHRoaXMuYWRkcmVzc1BsYWNlbWFyayk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uZ2V0Qm91bmRzKCk7XG5cbiAgICAgICAgICAgIGlmIChib3VuZHMpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0Qm91bmRzKGJvdW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQstGL0LHQvtGA0LAg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiDQntCx0YrQtdC60YIg0L/QvtC00YHQutCw0LfQutC4INCw0YDQtdGB0LAuXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IFNjU3VnZ2VzdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoJ2FkZHJlc3NTdHJpbmcnIGluIHN1Z2dlc3Rpb24gJiYgc3VnZ2VzdGlvbi5nZW9Db29yZGluYXRlcykge1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gW3N1Z2dlc3Rpb24uZ2VvQ29vcmRpbmF0ZXMubGF0LCBzdWdnZXN0aW9uLmdlb0Nvb3JkaW5hdGVzLmxvbmddLm1hcCgoY29vcmQpID0+IFNjTnVtYmVySGVscGVyLnJvdW5kQ29vcmRpbmF0ZShjb29yZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NQbGFjZW1hcmsgPz89IHRoaXMuY3JlYXRlUGxhY2VtYXJrKGNvb3Jkcyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0R2VvQ29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnlhTWFwPy5nZW9PYmplY3RzLmdldExlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5hZGQodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrLmdlb21ldHJ5Py5nZXRCb3VuZHMoKTtcblxuICAgICAgICAgICAgaWYgKGJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldEJvdW5kcyhib3VuZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldFpvb20oMTcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29vcmRzINCa0L7QvtGA0LTQuNC90LDRgtGLINGC0L7Rh9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRHZW9Db29yZGluYXRlcyhjb29yZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkZHJlc3NQbGFjZW1hcmspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1BsYWNlbWFyay5nZW9tZXRyeT8uc2V0Q29vcmRpbmF0ZXMoY29vcmRzKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogY29vcmRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsb25nOiBjb29yZHNbMV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIge0BsaW5rIGFkZHJlc3NQbGFjZW1hcmt9INGC0L7Rh9C60YMg0L3QsCDQvtC/0YDQtdC00LXQu9GR0L3QvdGL0LUg0LrQvtC+0YDQtNC40L3QsNGC0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVHZW9Db29yZGluYXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1BsYWNlbWFyaykge1xuICAgICAgICAgICAgdGhpcy55YU1hcD8uZ2VvT2JqZWN0cy5yZW1vdmUodGhpcy5hZGRyZXNzUGxhY2VtYXJrKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbG9uZzogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMueWFNYXA/LnNldENlbnRlcih0aGlzLmRlZmF1bHRDZW50ZXJNYXApO1xuICAgICAgICAgICAgdGhpcy55YU1hcD8uc2V0Wm9vbSh0aGlzLmRlZmF1bHRab29tTWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC+0LHRitC10LrRgiDRgtC+0YfQutC4INC4INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINGB0L7QsdGL0YLQuNGPINC00LvRjyDQvdC10LPQvi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb29yZHMg0JrQvtC+0YDQtNC40L3QsNGC0Ysg0YLQvtGH0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVBsYWNlbWFyayhjb29yZHM6IG51bWJlcltdKTogeW1hcHMuUGxhY2VtYXJrIHtcbiAgICAgICAgY29uc3QgcGxhY2VtYXJrID0gbmV3IHltYXBzLlBsYWNlbWFyayhcbiAgICAgICAgICAgIGNvb3JkcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpY29uQ2FwdGlvbjogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByZXNldDogJ2lzbGFuZHMnLFxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBwbGFjZW1hcmsuZXZlbnRzLmFkZCgnZHJhZ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkID0gdGhpcy5hZGRyZXNzUGxhY2VtYXJrPy5nZW9tZXRyeT8uZ2V0Q29vcmRpbmF0ZXMoKTtcblxuICAgICAgICAgICAgaWYgKGNvb3JkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHZW9Db29yZGluYXRlcyhjb29yZC5tYXAoKHZhbHVlKSA9PiBTY051bWJlckhlbHBlci5yb3VuZENvb3JkaW5hdGUodmFsdWUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwbGFjZW1hcms7XG4gICAgfVxufVxuIiwiQGxldCBpc0VuYWJsZWRBZGREZWxpdmVyeUFkZHJlc3MgPSBpc0RlZmF1bHRDb3VudHJ5IHwgYXN5bmM7XG5cbkBpZiAoaXNFbmFibGVkQWRkRGVsaXZlcnlBZGRyZXNzKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3dcIj5cbiAgICAgICAgPGZvcm1cbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAobmdTdWJtaXQpPVwib25TdWJtaXQkLm5leHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgIDx0dWktaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3BzZXVkb0ludmFsaWRdPVwiKGFkZHJlc3NDb250cm9sLnZhbGlkICYmIGZvcm0uY29udHJvbHMuY29vcmRpbmF0ZXMuaW52YWxpZCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XG4gICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2xpY2spPVwib25TZWxlY3RlZEFkZHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkTGVnYWN5XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkcmVzc0NvbnRyb2wudmFsaWQgJiYgZm9ybS5jb250cm9scy5jb29yZGluYXRlcy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I9XCLQktGL0LHQtdGA0LjRgtC1INCy0LDRgNC40LDQvdGCINC40Lcg0YHQv9C40YHQutCwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY29udGFjdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGdyb3cgZmxleC1jb2wgZ2FwLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy1mdWxsIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+OjwvcD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCkLtCYLtCeLlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgINCkLtCYLtCeLlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5maW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAg0KLQtdC70LXRhNC+0L1cbiAgICAgICAgICAgICAgICAgICAgPHR1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY291bnRyeVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY291bnRyaWVzXT1cIihjb3VudHJpZXMgfCB0dWlTb3J0Q291bnRyaWVzIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgINCU0L7Qu9C20L3QvtGB0YLRjFxuICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCI+INCU0L7Qu9C20L3QvtGB0YLRjCA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uU3RhcnRdPVwiaXNNb2JpbGUgPyAnQHR1aS54JyA6ICdAdHVpLngnXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQntGC0LzQtdC90LBcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbaWNvblN0YXJ0XT1cImlzTW9iaWxlID8gJ0B0dWkuc2F2ZScgOiAnQHR1aS5zYXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIhIShsb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0JTQvtCx0LDQstC40YLRjFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIC16LTEwIGZsZXggc2l6ZS1mdWxsIG1kOnctMS8yXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3otMCByZWxhdGl2ZSc6IGFkZHJlc3NQbGFjZW1hcmsgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtYXV0b1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTUwJzogZm9ybS5jb250cm9scy5jb29yZGluYXRlcy5pbnZhbGlkIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx5YS1tYXBcbiAgICAgICAgICAgICAgICAgICAgW3pvb21dPVwiMTFcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwieyBjb250cm9sczogW10gfVwiXG4gICAgICAgICAgICAgICAgICAgIChyZWFkeSk9XCJvbk1hcFJlYWR5SGFuZGxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgQGxldCBoZWxwQ29udGFjdHMgPSB1c2VySGVscENvbnRhY3RzJCB8IGFzeW5jO1xuXG4gICAgQGlmIChoZWxwQ29udGFjdHMgJiYgaGVscENvbnRhY3RzLmxlbmd0aCkge1xuICAgICAgICA8dHVpLXB1c2hcbiAgICAgICAgICAgIHR5cGU9XCLQp9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LCDRgdCy0Y/QttC40YLQtdGB0Ywg0YEg0L3QsNC80LhcIlxuICAgICAgICAgICAgY2xhc3M9XCIhdy1hdXRvXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHR1aS1pY29uIGljb249XCJAdHVpLm1lc3NhZ2Utc3F1YXJlXCIgLz5cbiAgICAgICAgICAgIDxzYy1tYW5hZ2VyLWNhcmQgW21hbmFnZXJdPVwiaGVscENvbnRhY3RzWzBdXCIgLz5cbiAgICAgICAgPC90dWktcHVzaD5cbiAgICB9XG59XG4iXX0=
@@ -1,24 +1,17 @@
1
- import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
2
- import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, model, output, signal } from '@angular/core';
3
- import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, inject, model, output } from '@angular/core';
2
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
4
3
  import { ActivatedRoute, Router } from '@angular/router';
5
- import { SC_ORDER_LOADER, SC_UPDATE_INTERVAL, ScOrderDraftActualizationStatus, ScOrderDraftsService, scOrderIsLoaded, ScProfstroyOrderItem, ScRouteKeys, ScSeoService, } from '@snabcentr/client-core';
6
- import { TuiAlertService, TuiButton, TuiDialogService, TuiIcons } from '@taiga-ui/core';
4
+ import { SC_ORDER_LOADER, ScOrderDraftsService, scOrderIsLoaded, ScRouteKeys, ScSeoService } from '@snabcentr/client-core';
5
+ import { TuiButton, TuiDialogService, TuiIcons } from '@taiga-ui/core';
7
6
  import { TUI_CONFIRM } from '@taiga-ui/kit';
8
- import { catchError, distinctUntilChanged, EMPTY, filter, finalize, map, noop, switchMap, take, timer } from 'rxjs';
7
+ import { distinctUntilChanged, filter, map, noop, switchMap } from 'rxjs';
9
8
  import { ScOrderAccessorDirective } from '../directives/sc-order-accessor.directive';
10
- import { ScOrderItemsListComponent } from '../order-items-list/sc-order-items-list.component';
11
9
  import { ScOrderItemsListByDirectionsComponent } from '../order-items-list-by-directions/sc-order-items-list-by-directions.component';
12
- import { ScProfstroyActualizationPanelComponent } from './profstroy/actualization-panel/sc-profstroy-actualization-panel.component';
13
- import { ScProfstroyDraftBadgesComponent } from './profstroy/badges/sc-profstroy-draft-badges.component';
14
10
  import * as i0 from "@angular/core";
15
11
  /**
16
12
  * Компонент страницы черновика заказа (аналог корзины для одного черновика).
17
13
  */
18
14
  export class ScDraftComponent {
19
- /**
20
- * Инициализирует экземпляр класса {@link ScDraftComponent}.
21
- */
22
15
  constructor() {
23
16
  /**
24
17
  * Сервис маршрутизации.
@@ -32,14 +25,6 @@ export class ScDraftComponent {
32
25
  * Сервис для работы с черновиками заказов.
33
26
  */
34
27
  this.draftsService = inject(ScOrderDraftsService);
35
- /**
36
- * Интервалы обновления данных.
37
- */
38
- this.updateInterval = inject(SC_UPDATE_INTERVAL);
39
- /**
40
- * Сервис уведомлений.
41
- */
42
- this.alerts = inject(TuiAlertService);
43
28
  /**
44
29
  * Сигнал с данными текущего черновика заказа (из параметра orderId в URL).
45
30
  */
@@ -60,47 +45,6 @@ export class ScDraftComponent {
60
45
  * Текущий ключ маршрута.
61
46
  */
62
47
  this.isDraftPage = toSignal(this.route.data.pipe(map((data) => data['routes_key'] === ScRouteKeys.draft), distinctUntilChanged()), { initialValue: false });
63
- /**
64
- * Функция группировки позиций черновика Профстрой по группам из файла.
65
- */
66
- // eslint-disable-next-line @typescript-eslint/unbound-method
67
- this.groupByFileGroup = ScProfstroyOrderItem.getGroupTitle;
68
- /**
69
- * Признак черновика Профстрой.
70
- */
71
- this.isProfstroy = computed(() => this.draft()?.isProfstroy === true);
72
- /**
73
- * Текущий момент для проверки срока актуализации. Обновляется по таймеру, пока открыт черновик Профстрой.
74
- */
75
- this.now = signal(new Date());
76
- /**
77
- * Признак выполнения действия над черновиком Профстрой.
78
- */
79
- this.busy = signal(false);
80
- /**
81
- * Признак, что можно менять состав черновика Профстрой.
82
- */
83
- this.canEditProfstroy = computed(() => this.isDraftPage() && !this.busy() && this.draft()?.actualization?.isProcessing === false);
84
- /**
85
- * Позиции, выбранные для заказа из черновика Профстрой.
86
- */
87
- this.selectedProfstroyItems = computed(() => {
88
- const ids = new Set(this.selectedItemsIds());
89
- return this.draft()?.products.filter((item) => item.isOrderable && ids.has(item.id)) ?? [];
90
- });
91
- /**
92
- * Причина, по которой нельзя оформить заказ из черновика Профстрой, или пустая строка.
93
- */
94
- this.profstroyOrderBlockReason = computed(() => {
95
- const draft = this.draft();
96
- if (!draft?.actualization?.isOrderAllowedAt(this.now())) {
97
- return 'Оформление доступно после успешной актуализации.';
98
- }
99
- if (!draft.products.some((item) => item.isOrderable)) {
100
- return 'В заявке нет позиций, которые могут попасть в заказ.';
101
- }
102
- return this.selectedProfstroyItems().length === 0 ? 'Выберите позиции для заказа.' : '';
103
- });
104
48
  /**
105
49
  * Ссылка для автоматического управления уничтожением зависимостей.
106
50
  */
@@ -109,8 +53,6 @@ export class ScDraftComponent {
109
53
  * Сервис установки SEO-данных приложения.
110
54
  */
111
55
  this.seoService = inject(ScSeoService);
112
- this.watchProfstroyExpiration();
113
- this.watchProfstroyProcessing();
114
56
  }
115
57
  /** @inheritDoc */
116
58
  ngOnInit() {
@@ -133,27 +75,6 @@ export class ScDraftComponent {
133
75
  const ids = this.selectedItemsIds().filter((id) => direction.items.some((item) => item.id === id));
134
76
  this.router.navigate(['orders', 'new', this.draft()?.id, direction.direction.id, 'draft'], { queryParams: { itemsIds: ids } }).catch(noop);
135
77
  }
136
- /**
137
- * Переход к оформлению заказа из черновика Профстрой по выбранным позициям.
138
- */
139
- goToNewProfstroyOrder() {
140
- const ids = this.selectedProfstroyItems().map((item) => item.id);
141
- this.router.navigate(['orders', 'new', this.draft()?.id, 'profstroy'], { queryParams: { itemsIds: ids } }).catch(noop);
142
- }
143
- /**
144
- * Запускает актуализацию черновика Профстрой.
145
- */
146
- actualizeProfstroy() {
147
- this.runProfstroyAction((draftId) => this.draftsService.actualizeProfstroy$(draftId));
148
- }
149
- /**
150
- * Запускает пересборку черновика Профстрой из файла после подтверждения.
151
- */
152
- reloadProfstroy() {
153
- this.confirm$('Собрать заявку заново?', 'Заявка будет собрана заново из загруженного файла. Изменённое количество и удалённые позиции будут потеряны. Продолжить?', 'Да, собрать заново').subscribe(() => {
154
- this.runProfstroyAction((draftId) => this.draftsService.reloadProfstroy$(draftId));
155
- });
156
- }
157
78
  /**
158
79
  * Удаляет черновик и перенаправляет к списку черновиков.
159
80
  */
@@ -177,105 +98,21 @@ export class ScDraftComponent {
177
98
  this.router.navigate(['/drafts']).catch(noop);
178
99
  });
179
100
  }
180
- /**
181
- * Выполняет действие над черновиком Профстрой. Пока действие выполняется, остальные заблокированы.
182
- * При ошибке показывает текст сервера и перезапрашивает черновик, так как его состояние могло смениться.
183
- *
184
- * @param action Функция, возвращающая запрос действия по идентификатору черновика.
185
- */
186
- runProfstroyAction(action) {
187
- const draftId = this.draft()?.id;
188
- if (draftId === undefined || this.busy()) {
189
- return;
190
- }
191
- this.busy.set(true);
192
- action(draftId)
193
- .pipe(catchError((error) => {
194
- this.showForbiddenError(error);
195
- return this.draftsService.fetch$(draftId).pipe(catchError(() => EMPTY));
196
- }), finalize(() => {
197
- this.busy.set(false);
198
- }), takeUntilDestroyed(this.destroyRef))
199
- .subscribe((draft) => {
200
- this.setDraftIfCurrent(draft);
201
- });
202
- }
203
- /**
204
- * Показывает текст ошибки отказа в доступе. Остальные ошибки показывает перехватчик приложения.
205
- *
206
- * @param error Ошибка запроса.
207
- */
208
- showForbiddenError(error) {
209
- if (error instanceof HttpErrorResponse && error.status === HttpStatusCode.Forbidden) {
210
- const { message } = (error.error ?? {});
211
- this.alerts.open(message ?? 'Действие недоступно.', { appearance: 'negative' }).subscribe();
212
- }
213
- }
214
- /**
215
- * Открывает подтверждение и возвращает {@link Observable}, который выдаёт значение только при согласии.
216
- *
217
- * @param label Заголовок.
218
- * @param content Текст подтверждения.
219
- * @param yes Текст кнопки согласия.
220
- */
221
- confirm$(label, content, yes) {
222
- return this.dialogService.open(TUI_CONFIRM, { label, data: { content, yes, no: 'Отмена' } }).pipe(filter(Boolean), takeUntilDestroyed(this.destroyRef));
223
- }
224
- /**
225
- * Обновляет черновик, если пришли данные того же черновика, который открыт сейчас.
226
- *
227
- * @param draft Полученные данные черновика.
228
- */
229
- setDraftIfCurrent(draft) {
230
- if (this.draft()?.id === draft.id) {
231
- this.draft.set(draft);
232
- }
233
- }
234
- /**
235
- * Обновляет текущий момент по таймеру, пока открыт черновик Профстрой, чтобы истечение срока актуализации отражалось без перезагрузки.
236
- */
237
- watchProfstroyExpiration() {
238
- toObservable(this.isProfstroy)
239
- .pipe(distinctUntilChanged(), switchMap((isProfstroy) => (isProfstroy ? timer(0, this.updateInterval.orderDraftExpiration) : EMPTY)), takeUntilDestroyed(this.destroyRef))
240
- .subscribe(() => {
241
- this.now.set(new Date());
242
- });
243
- }
244
- /**
245
- * Пока черновик Профстрой в обработке, опрашивает его состояние лёгким запросом списка и после смены статуса перезапрашивает черновик целиком.
246
- */
247
- watchProfstroyProcessing() {
248
- toObservable(this.draft)
249
- .pipe(map((draft) => (draft?.isProfstroy && draft.actualization?.isProcessing ? draft.id : null)), distinctUntilChanged(), switchMap((draftId) => draftId === null
250
- ? EMPTY
251
- : this.draftsService.watchShortList$([draftId]).pipe(map((drafts) => drafts.find((item) => item.id === draftId)), filter((short) => short !== undefined && short.actualization?.status !== ScOrderDraftActualizationStatus.processing), take(1), switchMap(() => this.draftsService.fetch$(draftId).pipe(catchError(() => EMPTY))))), takeUntilDestroyed(this.destroyRef))
252
- .subscribe((draft) => {
253
- this.setDraftIfCurrent(draft);
254
- });
255
- }
256
101
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScDraftComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
257
102
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScDraftComponent, isStandalone: true, selector: "sc-draft", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: false, transformFunction: null }, selectedItemsIds: { classPropertyName: "selectedItemsIds", publicName: "selectedItemsIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { draft: "draftChange", selectedItemsIds: "selectedItemsIdsChange", deleteEvent: "deleteEvent" }, providers: [
258
103
  {
259
104
  provide: SC_ORDER_LOADER,
260
105
  useExisting: ScOrderDraftsService,
261
106
  },
262
- ], ngImport: i0, template: "@let currentDraft = draft();\n\n@if (currentDraft && currentDraft.isProfstroy) {\n <div class=\"flex flex-col gap-5\">\n <sc-profstroy-draft-badges\n [actualization]=\"currentDraft.actualization\"\n [now]=\"now()\"\n />\n\n <sc-profstroy-actualization-panel\n [draft]=\"currentDraft\"\n [now]=\"now()\"\n [busy]=\"busy() || !isDraftPage()\"\n (actualize)=\"actualizeProfstroy()\"\n (reload)=\"reloadProfstroy()\"\n />\n\n @if (currentDraft.products.length) {\n <sc-order-items-list\n scOrder\n [orderId]=\"currentDraft.id\"\n [items]=\"currentDraft.products\"\n [groupBy]=\"groupByFileGroup\"\n [markUnavailable]=\"true\"\n [useLinePrice]=\"true\"\n [editable]=\"canEditProfstroy()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n } @else {\n <p class=\"text-base font-bold\">{{ currentDraft.actualization?.isProcessing ? '\u041F\u043E\u0437\u0438\u0446\u0438\u0438 \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0444\u0430\u0439\u043B\u0430.' : '\u0412 \u0437\u0430\u044F\u0432\u043A\u0435 \u043D\u0435\u0442 \u043F\u043E\u0437\u0438\u0446\u0438\u0439.' }}</p>\n }\n\n <div class=\"flex flex-col items-center gap-x-2.5 gap-y-4 sm:flex-row sm:flex-wrap-reverse sm:items-start\">\n <button\n tuiButton\n appearance=\"secondary\"\n iconStart=\"@tui.trash-2\"\n [disabled]=\"busy()\"\n (click)=\"clearDraft()\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n\n <div class=\"flex flex-col items-center gap-1 sm:ml-auto sm:items-end\">\n <button\n tuiButton\n type=\"button\"\n iconStart=\"@tui.shopping-cart\"\n [disabled]=\"busy() || !!profstroyOrderBlockReason()\"\n (click)=\"goToNewProfstroyOrder()\"\n >\n \u041E\u0444\u043E\u0440\u043C\u0438\u0442\u044C \u0437\u0430\u043A\u0430\u0437\n </button>\n @if (profstroyOrderBlockReason(); as reason) {\n <span class=\"text-body-s text-tui-text-02\">{{ reason }}</span>\n }\n </div>\n </div>\n </div>\n} @else {\n @let items = draft()?.products;\n\n @if (items) {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @if (items.length) {\n <sc-order-items-list-by-directions\n scOrder\n [orderId]=\"draft()?.id\"\n [items]=\"items\"\n [editable]=\"isDraftPage()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n (continueClick)=\"goToNewOrder($event)\"\n >\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n </sc-order-items-list-by-directions>\n } @else {\n <p class=\"text-base font-bold\">\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u043F\u0443\u0441\u0442.</p>\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @for (item of [1, 2, 3, 4]; track item) {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n }\n <div class=\"flex gap-2\">\n <div class=\"tui-skeleton h-10 w-40 rounded-md\"></div>\n <div class=\"tui-skeleton h-10 w-36 rounded-md\"></div>\n </div>\n </div>\n </div>\n }\n}\n", dependencies: [{ kind: "component", type: ScOrderItemsListByDirectionsComponent, selector: "sc-order-items-list-by-directions", inputs: ["items", "selectable", "editable", "useLinePrice", "showContinueButton", "continueButtonText", "selectedItemsIds"], outputs: ["continueClick", "selectedItemsIdsChange"] }, { kind: "directive", type: ScOrderAccessorDirective, selector: "[scOrder]", inputs: ["orderId"] }, { kind: "component", type: ScProfstroyActualizationPanelComponent, selector: "sc-profstroy-actualization-panel", inputs: ["draft", "now", "busy"], outputs: ["actualize", "reload"] }, { kind: "component", type: ScProfstroyDraftBadgesComponent, selector: "sc-profstroy-draft-badges", inputs: ["actualization", "now"] }, { kind: "component", type: ScOrderItemsListComponent, selector: "sc-order-items-list", inputs: ["selectable", "editable", "groupBy", "markUnavailable", "useLinePrice", "items"], outputs: ["selectedItemsIdsChange"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
+ ], ngImport: i0, template: "@let items = draft()?.products;\n\n@if (items) {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @if (items.length) {\n <sc-order-items-list-by-directions\n scOrder\n [orderId]=\"draft()?.id\"\n [items]=\"items\"\n [editable]=\"isDraftPage()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n (continueClick)=\"goToNewOrder($event)\"\n >\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n </sc-order-items-list-by-directions>\n } @else {\n <p class=\"text-base font-bold\">\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u043F\u0443\u0441\u0442.</p>\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @for (item of [1, 2, 3, 4]; track item) {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n }\n <div class=\"flex gap-2\">\n <div class=\"tui-skeleton h-10 w-40 rounded-md\"></div>\n <div class=\"tui-skeleton h-10 w-36 rounded-md\"></div>\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "component", type: ScOrderItemsListByDirectionsComponent, selector: "sc-order-items-list-by-directions", inputs: ["items", "selectable", "editable", "showContinueButton", "continueButtonText", "selectedItemsIds"], outputs: ["continueClick", "selectedItemsIdsChange"] }, { kind: "directive", type: ScOrderAccessorDirective, selector: "[scOrder]", inputs: ["orderId"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
263
108
  }
264
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScDraftComponent, decorators: [{
265
110
  type: Component,
266
- args: [{ standalone: true, selector: 'sc-draft', imports: [
267
- ScOrderItemsListByDirectionsComponent,
268
- ScOrderAccessorDirective,
269
- ScProfstroyActualizationPanelComponent,
270
- ScProfstroyDraftBadgesComponent,
271
- ScOrderItemsListComponent,
272
- TuiButton,
273
- TuiIcons,
274
- ], providers: [
111
+ args: [{ standalone: true, selector: 'sc-draft', imports: [ScOrderItemsListByDirectionsComponent, ScOrderAccessorDirective, TuiButton, TuiIcons], providers: [
275
112
  {
276
113
  provide: SC_ORDER_LOADER,
277
114
  useExisting: ScOrderDraftsService,
278
115
  },
279
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let currentDraft = draft();\n\n@if (currentDraft && currentDraft.isProfstroy) {\n <div class=\"flex flex-col gap-5\">\n <sc-profstroy-draft-badges\n [actualization]=\"currentDraft.actualization\"\n [now]=\"now()\"\n />\n\n <sc-profstroy-actualization-panel\n [draft]=\"currentDraft\"\n [now]=\"now()\"\n [busy]=\"busy() || !isDraftPage()\"\n (actualize)=\"actualizeProfstroy()\"\n (reload)=\"reloadProfstroy()\"\n />\n\n @if (currentDraft.products.length) {\n <sc-order-items-list\n scOrder\n [orderId]=\"currentDraft.id\"\n [items]=\"currentDraft.products\"\n [groupBy]=\"groupByFileGroup\"\n [markUnavailable]=\"true\"\n [useLinePrice]=\"true\"\n [editable]=\"canEditProfstroy()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n } @else {\n <p class=\"text-base font-bold\">{{ currentDraft.actualization?.isProcessing ? '\u041F\u043E\u0437\u0438\u0446\u0438\u0438 \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0444\u0430\u0439\u043B\u0430.' : '\u0412 \u0437\u0430\u044F\u0432\u043A\u0435 \u043D\u0435\u0442 \u043F\u043E\u0437\u0438\u0446\u0438\u0439.' }}</p>\n }\n\n <div class=\"flex flex-col items-center gap-x-2.5 gap-y-4 sm:flex-row sm:flex-wrap-reverse sm:items-start\">\n <button\n tuiButton\n appearance=\"secondary\"\n iconStart=\"@tui.trash-2\"\n [disabled]=\"busy()\"\n (click)=\"clearDraft()\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n\n <div class=\"flex flex-col items-center gap-1 sm:ml-auto sm:items-end\">\n <button\n tuiButton\n type=\"button\"\n iconStart=\"@tui.shopping-cart\"\n [disabled]=\"busy() || !!profstroyOrderBlockReason()\"\n (click)=\"goToNewProfstroyOrder()\"\n >\n \u041E\u0444\u043E\u0440\u043C\u0438\u0442\u044C \u0437\u0430\u043A\u0430\u0437\n </button>\n @if (profstroyOrderBlockReason(); as reason) {\n <span class=\"text-body-s text-tui-text-02\">{{ reason }}</span>\n }\n </div>\n </div>\n </div>\n} @else {\n @let items = draft()?.products;\n\n @if (items) {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @if (items.length) {\n <sc-order-items-list-by-directions\n scOrder\n [orderId]=\"draft()?.id\"\n [items]=\"items\"\n [editable]=\"isDraftPage()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n (continueClick)=\"goToNewOrder($event)\"\n >\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n </sc-order-items-list-by-directions>\n } @else {\n <p class=\"text-base font-bold\">\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u043F\u0443\u0441\u0442.</p>\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @for (item of [1, 2, 3, 4]; track item) {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n }\n <div class=\"flex gap-2\">\n <div class=\"tui-skeleton h-10 w-40 rounded-md\"></div>\n <div class=\"tui-skeleton h-10 w-36 rounded-md\"></div>\n </div>\n </div>\n </div>\n }\n}\n" }]
280
- }], ctorParameters: () => [] });
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZHJhZnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL2RyYWZ0L3NjLWRyYWZ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9zYy1kcmFmdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILGVBQWUsRUFDZixrQkFBa0IsRUFHbEIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixlQUFlLEVBRWYsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxZQUFZLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVo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QyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNwRixDQUNWLEVBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QzthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBM1RRLGdCQUFnQjttR0FBaEIsZ0JBQWdCLCtiQVJkO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7YUFDcEM7U0FDSiwwQkNqREwsOHlLQTBIQSw0Q0R0RlEscUNBQXFDLGlRQUNyQyx3QkFBd0IsMkVBQ3hCLHNDQUFzQyxpSkFDdEMsK0JBQStCLHdHQUMvQix5QkFBeUIsZ01BQ3pCLFNBQVM7OzRGQVdKLGdCQUFnQjtrQkFyQjVCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLFVBQVUsV0FFWDt3QkFDTCxxQ0FBcUM7d0JBQ3JDLHdCQUF3Qjt3QkFDeEIsc0NBQXNDO3dCQUN0QywrQkFBK0I7d0JBQy9CLHlCQUF5Qjt3QkFDekIsU0FBUzt3QkFDVCxRQUFRO3FCQUNYLGFBQ1U7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7eUJBQ3BDO3FCQUNKLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBTQ19PUkRFUl9MT0FERVIsXG4gICAgU0NfVVBEQVRFX0lOVEVSVkFMLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NPcmRlckRyYWZ0LFxuICAgIFNjT3JkZXJEcmFmdEFjdHVhbGl6YXRpb25TdGF0dXMsXG4gICAgU2NPcmRlckRyYWZ0c1NlcnZpY2UsXG4gICAgc2NPcmRlcklzTG9hZGVkLFxuICAgIFNjT3JkZXJJdGVtLFxuICAgIFNjUHJvZnN0cm95T3JkZXJJdGVtLFxuICAgIFNjUm91dGVLZXlzLFxuICAgIFNjU2VvU2VydmljZSxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlBbGVydFNlcnZpY2UsIFR1aUJ1dHRvbiwgVHVpRGlhbG9nU2VydmljZSwgVHVpSWNvbnMgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUVUlfQ09ORklSTSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIEVNUFRZLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIG5vb3AsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGFrZSwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NPcmRlckFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zYy1vcmRlci1hY2Nlc3Nvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2NPcmRlckl0ZW1zQnlEaXJlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvc2MtaS1jYXJ0LWl0ZW1zLWJ5LWRpcmVjdGlvbic7XG5pbXBvcnQgeyBTY09yZGVySXRlbXNMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY09yZGVySXRlbXNMaXN0QnlEaXJlY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi4vb3JkZXItaXRlbXMtbGlzdC1ieS1kaXJlY3Rpb25zL3NjLW9yZGVyLWl0ZW1zLWxpc3QtYnktZGlyZWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NQcm9mc3Ryb3lBY3R1YWxpemF0aW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL3Byb2ZzdHJveS9hY3R1YWxpemF0aW9uLXBhbmVsL3NjLXByb2ZzdHJveS1hY3R1YWxpemF0aW9uLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY1Byb2ZzdHJveURyYWZ0QmFkZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9mc3Ryb3kvYmFkZ2VzL3NjLXByb2ZzdHJveS1kcmFmdC1iYWRnZXMuY29tcG9uZW50JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQvdC+0LLQuNC60LAg0LfQsNC60LDQt9CwICjQsNC90LDQu9C+0LMg0LrQvtGA0LfQuNC90Ysg0LTQu9GPINC+0LTQvdC+0LPQviDRh9C10YDQvdC+0LLQuNC60LApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtZHJhZnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1kcmFmdC5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBTY09yZGVySXRlbXNMaXN0QnlEaXJlY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBTY09yZGVyQWNjZXNzb3JEaXJlY3RpdmUsXG4gICAgICAgIFNjUHJvZnN0cm95QWN0dWFsaXphdGlvblBhbmVsQ29tcG9uZW50LFxuICAgICAgICBTY1Byb2ZzdHJveURyYWZ0QmFkZ2VzQ29tcG9uZW50LFxuICAgICAgICBTY09yZGVySXRlbXNMaXN0Q29tcG9uZW50LFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUljb25zLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFNDX09SREVSX0xPQURFUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTY09yZGVyRHJhZnRzU2VydmljZSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0RyYWZ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RidC40Lkg0LTQvtGB0YLRg9C/INC6INC00LDQvdC90YvQvCDQviDQvNCw0YDRiNGA0YPRgtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGH0LXRgNC90L7QstC40LrQsNC80Lgg0LfQsNC60LDQt9C+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFmdHNTZXJ2aWNlID0gaW5qZWN0KFNjT3JkZXJEcmFmdHNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0LvRiyDQvtCx0L3QvtCy0LvQtdC90LjRjyDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVJbnRlcnZhbCA9IGluamVjdChTQ19VUERBVEVfSU5URVJWQUwpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGD0LLQtdC00L7QvNC70LXQvdC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHMgPSBpbmplY3QoVHVpQWxlcnRTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDRgSDQtNCw0L3QvdGL0LzQuCDRgtC10LrRg9GJ0LXQs9C+INGH0LXRgNC90L7QstC40LrQsCDQt9Cw0LrQsNC30LAgKNC40Lcg0L/QsNGA0LDQvNC10YLRgNCwIG9yZGVySWQg0LIgVVJMKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZHJhZnQgPSBtb2RlbDxTY09yZGVyRHJhZnQgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzID0gbW9kZWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCY0YHRgtC+0YfQvdC40Log0YHQvtCx0YvRgtC40Y8g0YPQtNCw0LvQtdC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdGLINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlRXZlbnQgPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdDxUdWlEaWFsb2dTZXJ2aWNlPihUdWlEaWFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCi0LXQutGD0YnQuNC5INC60LvRjtGHINC80LDRgNGI0YDRg9GC0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRHJhZnRQYWdlID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgbWFwKChkYXRhKSA9PiAoZGF0YVsncm91dGVzX2tleSddIGFzIFNjUm91dGVLZXlzKSA9PT0gU2NSb3V0ZUtleXMuZHJhZnQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLFxuICAgICAgICB7IGluaXRpYWxWYWx1ZTogZmFsc2UgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQpNGD0L3QutGG0LjRjyDQs9GA0YPQv9C/0LjRgNC+0LLQutC4INC/0L7Qt9C40YbQuNC5INGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0Lkg0L/QviDQs9GA0YPQv9C/0LDQvCDQuNC3INGE0LDQudC70LAuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIHByb3RlY3RlZCByZWFkb25seSBncm91cEJ5RmlsZUdyb3VwOiAoaXRlbTogU2NPcmRlckl0ZW0pID0+IHN0cmluZyA9IFNjUHJvZnN0cm95T3JkZXJJdGVtLmdldEdyb3VwVGl0bGU7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRh9C10YDQvdC+0LLQuNC60LAg0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc1Byb2ZzdHJveSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZHJhZnQoKT8uaXNQcm9mc3Ryb3kgPT09IHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0KLQtdC60YPRidC40Lkg0LzQvtC80LXQvdGCINC00LvRjyDQv9GA0L7QstC10YDQutC4INGB0YDQvtC60LAg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LiDQntCx0L3QvtCy0LvRj9C10YLRgdGPINC/0L4g0YLQsNC50LzQtdGA0YMsINC/0L7QutCwINC+0YLQutGA0YvRgiDRh9C10YDQvdC+0LLQuNC6INCf0YDQvtGE0YHRgtGA0L7QuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm93ID0gc2lnbmFsKG5ldyBEYXRlKCkpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LTQtdC50YHRgtCy0LjRjyDQvdCw0LQg0YfQtdGA0L3QvtCy0LjQutC+0Lwg0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBidXN5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LzQvtC20L3QviDQvNC10L3Rj9GC0Ywg0YHQvtGB0YLQsNCyINGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkVkaXRQcm9mc3Ryb3kgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzRHJhZnRQYWdlKCkgJiYgIXRoaXMuYnVzeSgpICYmIHRoaXMuZHJhZnQoKT8uYWN0dWFsaXphdGlvbj8uaXNQcm9jZXNzaW5nID09PSBmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LfQuNGG0LjQuCwg0LLRi9Cx0YDQsNC90L3Ri9C1INC00LvRjyDQt9Cw0LrQsNC30LAg0LjQtyDRh9C10YDQvdC+0LLQuNC60LAg0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByb2ZzdHJveUl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtc0lkcygpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kcmFmdCgpPy5wcm9kdWN0cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNPcmRlcmFibGUgJiYgaWRzLmhhcyhpdGVtLmlkKSkgPz8gW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjRh9C40L3QsCwg0L/QviDQutC+0YLQvtGA0L7QuSDQvdC10LvRjNC30Y8g0L7RhNC+0YDQvNC40YLRjCDQt9Cw0LrQsNC3INC40Lcg0YfQtdGA0L3QvtCy0LjQutCwINCf0YDQvtGE0YHRgtGA0L7QuSwg0LjQu9C4INC/0YPRgdGC0LDRjyDRgdGC0YDQvtC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2ZzdHJveU9yZGVyQmxvY2tSZWFzb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYWZ0ID0gdGhpcy5kcmFmdCgpO1xuXG4gICAgICAgIGlmICghZHJhZnQ/LmFjdHVhbGl6YXRpb24/LmlzT3JkZXJBbGxvd2VkQXQodGhpcy5ub3coKSkpIHtcbiAgICAgICAgICAgIHJldHVybiAn0J7RhNC+0YDQvNC70LXQvdC40LUg0LTQvtGB0YLRg9C/0L3QviDQv9C+0YHQu9C1INGD0YHQv9C10YjQvdC+0Lkg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4Lic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRyYWZ0LnByb2R1Y3RzLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaXNPcmRlcmFibGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9CSINC30LDRj9Cy0LrQtSDQvdC10YIg0L/QvtC30LjRhtC40LksINC60L7RgtC+0YDRi9C1INC80L7Qs9GD0YIg0L/QvtC/0LDRgdGC0Ywg0LIg0LfQsNC60LDQty4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQcm9mc3Ryb3lJdGVtcygpLmxlbmd0aCA9PT0gMCA/ICfQktGL0LHQtdGA0LjRgtC1INC/0L7Qt9C40YbQuNC4INC00LvRjyDQt9Cw0LrQsNC30LAuJyA6ICcnO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPRgdGC0LDQvdC+0LLQutC4IFNFTy3QtNCw0L3QvdGL0YUg0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZW9TZXJ2aWNlOiBTY1Nlb1NlcnZpY2UgPSBpbmplY3QoU2NTZW9TZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NEcmFmdENvbXBvbmVudH0uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLndhdGNoUHJvZnN0cm95RXhwaXJhdGlvbigpO1xuICAgICAgICB0aGlzLndhdGNoUHJvZnN0cm95UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRyYWZ0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZnRzU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXQkKE51bWJlci5wYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnb3JkZXJJZCcpID8/ICcnLCAxMCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHNjT3JkZXJJc0xvYWRlZCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRyYWZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZnQuc2V0KGRyYWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW9TZXJ2aWNlLnNldEJ5RGVmYXVsdEFzTm9JbmRleGVkKCfQp9C10YDQvdC+0LLQuNC60Lgg0LfQsNC60LDQt9C+0LInKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YXQvtC0INC6INC+0YTQvtGA0LzQu9C10L3QuNGOINC30LDQutCw0LfQsCDQv9C+INCy0YvQsdGA0LDQvdC90L7QvNGDINC90LDQv9GA0LDQstC70LXQvdC40Y4g0L/RgNC+0LTQsNC2LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRpcmVjdGlvbiDQk9GA0YPQv9C/0LAg0L/QvtC30LjRhtC40Lkg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGOINC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ29Ub05ld09yZGVyKGRpcmVjdGlvbjogU2NPcmRlckl0ZW1zQnlEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5zZWxlY3RlZEl0ZW1zSWRzKCkuZmlsdGVyKChpZCkgPT4gZGlyZWN0aW9uLml0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydvcmRlcnMnLCAnbmV3JywgdGhpcy5kcmFmdCgpPy5pZCwgZGlyZWN0aW9uLmRpcmVjdGlvbi5pZCwgJ2RyYWZ0J10sIHsgcXVlcnlQYXJhbXM6IHsgaXRlbXNJZHM6IGlkcyB9IH0pLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YXQvtC0INC6INC+0YTQvtGA0LzQu9C10L3QuNGOINC30LDQutCw0LfQsCDQuNC3INGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0Lkg0L/QviDQstGL0LHRgNCw0L3QvdGL0Lwg0L/QvtC30LjRhtC40Y/QvC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ29Ub05ld1Byb2ZzdHJveU9yZGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnNlbGVjdGVkUHJvZnN0cm95SXRlbXMoKS5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnb3JkZXJzJywgJ25ldycsIHRoaXMuZHJhZnQoKT8uaWQsICdwcm9mc3Ryb3knXSwgeyBxdWVyeVBhcmFtczogeyBpdGVtc0lkczogaWRzIH0gfSkuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC/0YPRgdC60LDQtdGCINCw0LrRgtGD0LDQu9C40LfQsNGG0LjRjiDRh9C10YDQvdC+0LLQuNC60LAg0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhY3R1YWxpemVQcm9mc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMucnVuUHJvZnN0cm95QWN0aW9uKChkcmFmdElkKSA9PiB0aGlzLmRyYWZ0c1NlcnZpY2UuYWN0dWFsaXplUHJvZnN0cm95JChkcmFmdElkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC/0YPRgdC60LDQtdGCINC/0LXRgNC10YHQsdC+0YDQutGDINGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0Lkg0LjQtyDRhNCw0LnQu9CwINC/0L7RgdC70LUg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbG9hZFByb2ZzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maXJtJChcbiAgICAgICAgICAgICfQodC+0LHRgNCw0YLRjCDQt9Cw0Y/QstC60YMg0LfQsNC90L7QstC+PycsXG4gICAgICAgICAgICAn0JfQsNGP0LLQutCwINCx0YPQtNC10YIg0YHQvtCx0YDQsNC90LAg0LfQsNC90L7QstC+INC40Lcg0LfQsNCz0YDRg9C20LXQvdC90L7Qs9C+INGE0LDQudC70LAuINCY0LfQvNC10L3RkdC90L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC4INGD0LTQsNC70ZHQvdC90YvQtSDQv9C+0LfQuNGG0LjQuCDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90YsuINCf0YDQvtC00L7Qu9C20LjRgtGMPycsXG4gICAgICAgICAgICAn0JTQsCwg0YHQvtCx0YDQsNGC0Ywg0LfQsNC90L7QstC+J1xuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJ1blByb2ZzdHJveUFjdGlvbigoZHJhZnRJZCkgPT4gdGhpcy5kcmFmdHNTZXJ2aWNlLnJlbG9hZFByb2ZzdHJveSQoZHJhZnRJZCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDRh9C10YDQvdC+0LLQuNC6INC4INC/0LXRgNC10L3QsNC/0YDQsNCy0LvRj9C10YIg0Log0YHQv9C40YHQutGDINGH0LXRgNC90L7QstC40LrQvtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjbGVhckRyYWZ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGlkIH0gPSB0aGlzLmRyYWZ0KCkgPz8ge307XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAub3Blbjxib29sZWFuPihUVUlfQ09ORklSTSwge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBg0KPQtNCw0LvQuNGC0Ywg0YfQtdGA0L3QvtCy0LjQuiDihJYke2lkfT9gLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogYNCt0YLQviDQtNC10LnRgdGC0LLQuNC1INGD0LTQsNC70LjRgiDRh9C10YDQvdC+0LLQuNC6IOKEliR7aWR9LmAsXG4gICAgICAgICAgICAgICAgICAgIHllczogJ9CU0LAsINGD0LTQsNC70LjRgtGMJyxcbiAgICAgICAgICAgICAgICAgICAgbm86ICfQndC10YIsINC+0YHRgtCw0LLQuNGC0YwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmRyYWZ0c1NlcnZpY2UuZGVsZXRlJChpZCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9kcmFmdHMnXSkuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0LTQtdC50YHRgtCy0LjQtSDQvdCw0LQg0YfQtdGA0L3QvtCy0LjQutC+0Lwg0J/RgNC+0YTRgdGC0YDQvtC5LiDQn9C+0LrQsCDQtNC10LnRgdGC0LLQuNC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8sINC+0YHRgtCw0LvRjNC90YvQtSDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3Riy5cbiAgICAgKiDQn9GA0Lgg0L7RiNC40LHQutC1INC/0L7QutCw0LfRi9Cy0LDQtdGCINGC0LXQutGB0YIg0YHQtdGA0LLQtdGA0LAg0Lgg0L/QtdGA0LXQt9Cw0L/RgNCw0YjQuNCy0LDQtdGCINGH0LXRgNC90L7QstC40LosINGC0LDQuiDQutCw0Log0LXQs9C+INGB0L7RgdGC0L7Rj9C90LjQtSDQvNC+0LPQu9C+INGB0LzQtdC90LjRgtGM0YHRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24g0KTRg9C90LrRhtC40Y8sINCy0L7Qt9Cy0YDQsNGJ0LDRjtGJ0LDRjyDQt9Cw0L/RgNC+0YEg0LTQtdC50YHRgtCy0LjRjyDQv9C+INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0YMg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcnVuUHJvZnN0cm95QWN0aW9uKGFjdGlvbjogKGRyYWZ0SWQ6IG51bWJlcikgPT4gT2JzZXJ2YWJsZTxTY09yZGVyRHJhZnQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRyYWZ0SWQgPSB0aGlzLmRyYWZ0KCk/LmlkO1xuXG4gICAgICAgIGlmIChkcmFmdElkID09PSB1bmRlZmluZWQgfHwgdGhpcy5idXN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG5cbiAgICAgICAgYWN0aW9uKGRyYWZ0SWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGb3JiaWRkZW5FcnJvcihlcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJhZnRzU2VydmljZS5mZXRjaCQoZHJhZnRJZCkucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZHJhZnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERyYWZ0SWZDdXJyZW50KGRyYWZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0L7QutCw0LfRi9Cy0LDQtdGCINGC0LXQutGB0YIg0L7RiNC40LHQutC4INC+0YLQutCw0LfQsCDQsiDQtNC+0YHRgtGD0L/QtS4g0J7RgdGC0LDQu9GM0L3Ri9C1INC+0YjQuNCx0LrQuCDQv9C+0LrQsNC30YvQstCw0LXRgiDQv9C10YDQtdGF0LLQsNGC0YfQuNC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVycm9yINCe0YjQuNCx0LrQsCDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dGb3JiaWRkZW5FcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiAoZXJyb3Iuc3RhdHVzIGFzIEh0dHBTdGF0dXNDb2RlKSA9PT0gSHR0cFN0YXR1c0NvZGUuRm9yYmlkZGVuKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IChlcnJvci5lcnJvciA/PyB7fSkgYXMgUGFydGlhbDxTY0lBcGlFcnJvclJlc3BvbnNlPjtcblxuICAgICAgICAgICAgdGhpcy5hbGVydHMub3BlbihtZXNzYWdlID8/ICfQlNC10LnRgdGC0LLQuNC1INC90LXQtNC+0YHRgtGD0L/QvdC+LicsIHsgYXBwZWFyYW5jZTogJ25lZ2F0aXZlJyB9KS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtSDQuCDQstC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0sINC60L7RgtC+0YDRi9C5INCy0YvQtNCw0ZHRgiDQt9C90LDRh9C10L3QuNC1INGC0L7Qu9GM0LrQviDQv9GA0Lgg0YHQvtCz0LvQsNGB0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYWJlbCDQl9Cw0LPQvtC70L7QstC+0LouXG4gICAgICogQHBhcmFtIGNvbnRlbnQg0KLQtdC60YHRgiDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0geWVzINCi0LXQutGB0YIg0LrQvdC+0L/QutC4INGB0L7Qs9C70LDRgdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maXJtJChsYWJlbDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIHllczogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbjxib29sZWFuPihUVUlfQ09ORklSTSwgeyBsYWJlbCwgZGF0YTogeyBjb250ZW50LCB5ZXMsIG5vOiAn0J7RgtC80LXQvdCwJyB9IH0pLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINGH0LXRgNC90L7QstC40LosINC10YHQu9C4INC/0YDQuNGI0LvQuCDQtNCw0L3QvdGL0LUg0YLQvtCz0L4g0LbQtSDRh9C10YDQvdC+0LLQuNC60LAsINC60L7RgtC+0YDRi9C5INC+0YLQutGA0YvRgiDRgdC10LnRh9Cw0YEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHJhZnQg0J/QvtC70YPRh9C10L3QvdGL0LUg0LTQsNC90L3Ri9C1INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldERyYWZ0SWZDdXJyZW50KGRyYWZ0OiBTY09yZGVyRHJhZnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZnQoKT8uaWQgPT09IGRyYWZ0LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWZ0LnNldChkcmFmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0YLQtdC60YPRidC40Lkg0LzQvtC80LXQvdGCINC/0L4g0YLQsNC50LzQtdGA0YMsINC/0L7QutCwINC+0YLQutGA0YvRgiDRh9C10YDQvdC+0LLQuNC6INCf0YDQvtGE0YHRgtGA0L7QuSwg0YfRgtC+0LHRiyDQuNGB0YLQtdGH0LXQvdC40LUg0YHRgNC+0LrQsCDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Lgg0L7RgtGA0LDQttCw0LvQvtGB0Ywg0LHQtdC3INC/0LXRgNC10LfQsNCz0YDRg9C30LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHdhdGNoUHJvZnN0cm95RXhwaXJhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNQcm9mc3Ryb3kpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaXNQcm9mc3Ryb3kpID0+IChpc1Byb2ZzdHJveSA/IHRpbWVyKDAsIHRoaXMudXBkYXRlSW50ZXJ2YWwub3JkZXJEcmFmdEV4cGlyYXRpb24pIDogRU1QVFkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3cuc2V0KG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QvtC60LAg0YfQtdGA0L3QvtCy0LjQuiDQn9GA0L7RhNGB0YLRgNC+0Lkg0LIg0L7QsdGA0LDQsdC+0YLQutC1LCDQvtC/0YDQsNGI0LjQstCw0LXRgiDQtdCz0L4g0YHQvtGB0YLQvtGP0L3QuNC1INC70ZHQs9C60LjQvCDQt9Cw0L/RgNC+0YHQvtC8INGB0L/QuNGB0LrQsCDQuCDQv9C+0YHQu9C1INGB0LzQtdC90Ysg0YHRgtCw0YLRg9GB0LAg0L/QtdGA0LXQt9Cw0L/RgNCw0YjQuNCy0LDQtdGCINGH0LXRgNC90L7QstC40Log0YbQtdC70LjQutC+0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSB3YXRjaFByb2ZzdHJveVByb2Nlc3NpbmcoKTogdm9pZCB7XG4gICAgICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmRyYWZ0KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChkcmFmdCkgPT4gKGRyYWZ0Py5pc1Byb2ZzdHJveSAmJiBkcmFmdC5hY3R1YWxpemF0aW9uPy5pc1Byb2Nlc3NpbmcgPyBkcmFmdC5pZCA6IG51bGwpKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZHJhZnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZHJhZnRJZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBFTVBUWVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRyYWZ0c1NlcnZpY2Uud2F0Y2hTaG9ydExpc3QkKFtkcmFmdElkXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZHJhZnRzKSA9PiBkcmFmdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZHJhZnRJZCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzaG9ydCkgPT4gc2hvcnQgIT09IHVuZGVmaW5lZCAmJiBzaG9ydC5hY3R1YWxpemF0aW9uPy5zdGF0dXMgIT09IFNjT3JkZXJEcmFmdEFjdHVhbGl6YXRpb25TdGF0dXMucHJvY2Vzc2luZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZHJhZnRzU2VydmljZS5mZXRjaCQoZHJhZnRJZCkucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkcmFmdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RHJhZnRJZkN1cnJlbnQoZHJhZnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiQGxldCBjdXJyZW50RHJhZnQgPSBkcmFmdCgpO1xuXG5AaWYgKGN1cnJlbnREcmFmdCAmJiBjdXJyZW50RHJhZnQuaXNQcm9mc3Ryb3kpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiPlxuICAgICAgICA8c2MtcHJvZnN0cm95LWRyYWZ0LWJhZGdlc1xuICAgICAgICAgICAgW2FjdHVhbGl6YXRpb25dPVwiY3VycmVudERyYWZ0LmFjdHVhbGl6YXRpb25cIlxuICAgICAgICAgICAgW25vd109XCJub3coKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHNjLXByb2ZzdHJveS1hY3R1YWxpemF0aW9uLXBhbmVsXG4gICAgICAgICAgICBbZHJhZnRdPVwiY3VycmVudERyYWZ0XCJcbiAgICAgICAgICAgIFtub3ddPVwibm93KClcIlxuICAgICAgICAgICAgW2J1c3ldPVwiYnVzeSgpIHx8ICFpc0RyYWZ0UGFnZSgpXCJcbiAgICAgICAgICAgIChhY3R1YWxpemUpPVwiYWN0dWFsaXplUHJvZnN0cm95KClcIlxuICAgICAgICAgICAgKHJlbG9hZCk9XCJyZWxvYWRQcm9mc3Ryb3koKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgQGlmIChjdXJyZW50RHJhZnQucHJvZHVjdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8c2Mtb3JkZXItaXRlbXMtbGlzdFxuICAgICAgICAgICAgICAgIHNjT3JkZXJcbiAgICAgICAgICAgICAgICBbb3JkZXJJZF09XCJjdXJyZW50RHJhZnQuaWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJjdXJyZW50RHJhZnQucHJvZHVjdHNcIlxuICAgICAgICAgICAgICAgIFtncm91cEJ5XT1cImdyb3VwQnlGaWxlR3JvdXBcIlxuICAgICAgICAgICAgICAgIFttYXJrVW5hdmFpbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3VzZUxpbmVQcmljZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZWRpdGFibGVdPVwiY2FuRWRpdFByb2ZzdHJveSgpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zSWRzLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3sgY3VycmVudERyYWZ0LmFjdHVhbGl6YXRpb24/LmlzUHJvY2Vzc2luZyA/ICfQn9C+0LfQuNGG0LjQuCDQv9C+0Y/QstGP0YLRgdGPINC/0L7RgdC70LUg0L7QsdGA0LDQsdC+0YLQutC4INGE0LDQudC70LAuJyA6ICfQkiDQt9Cw0Y/QstC60LUg0L3QtdGCINC/0L7Qt9C40YbQuNC5LicgfX08L3A+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLXgtMi41IGdhcC15LTQgc206ZmxleC1yb3cgc206ZmxleC13cmFwLXJldmVyc2Ugc206aXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoLTJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5KClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRyYWZ0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCj0LTQsNC70LjRgtGMINGH0LXRgNC90L7QstC40LpcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgc206bWwtYXV0byBzbTppdGVtcy1lbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zaG9wcGluZy1jYXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3koKSB8fCAhIXByb2ZzdHJveU9yZGVyQmxvY2tSZWFzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvTmV3UHJvZnN0cm95T3JkZXIoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQntGE0L7RgNC80LjRgtGMINC30LDQutCw0LdcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKHByb2ZzdHJveU9yZGVyQmxvY2tSZWFzb24oKTsgYXMgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXMgdGV4dC10dWktdGV4dC0wMlwiPnt7IHJlYXNvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59IEBlbHNlIHtcbiAgICBAbGV0IGl0ZW1zID0gZHJhZnQoKT8ucHJvZHVjdHM7XG5cbiAgICBAaWYgKGl0ZW1zKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICA8c2Mtb3JkZXItaXRlbXMtbGlzdC1ieS1kaXJlY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBzY09yZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3JkZXJJZF09XCJkcmFmdCgpPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImlzRHJhZnRQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zSWRzLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb250aW51ZUNsaWNrKT1cImdvVG9OZXdPcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlckFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcmFmdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCj0LTQsNC70LjRgtGMINGH0LXRgNC90L7QstC40LpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3NjLW9yZGVyLWl0ZW1zLWxpc3QtYnktZGlyZWN0aW9ucz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+0KfQtdGA0L3QvtCy0LjQuiDQv9GD0YHRgi48L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlckFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcmFmdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCj0LTQsNC70LjRgtGMINGH0LXRgNC90L7QstC40LpcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIFsxLCAyLCAzLCA0XTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIGZsZXggaC1bOC4yNXJlbV0gdy1mdWxsIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXhsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktc2tlbGV0b24gaC0xMCB3LTQwIHJvdW5kZWQtbWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR1aS1za2VsZXRvbiBoLTEwIHctMzYgcm91bmRlZC1tZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cbiJdfQ==
116
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let items = draft()?.products;\n\n@if (items) {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @if (items.length) {\n <sc-order-items-list-by-directions\n scOrder\n [orderId]=\"draft()?.id\"\n [items]=\"items\"\n [editable]=\"isDraftPage()\"\n [selectable]=\"true\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n (continueClick)=\"goToNewOrder($event)\"\n >\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n </sc-order-items-list-by-directions>\n } @else {\n <p class=\"text-base font-bold\">\u0427\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u043F\u0443\u0441\u0442.</p>\n <div\n footerActions\n class=\"flex gap-2\"\n >\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"clearDraft()\"\n iconStart=\"@tui.trash-2\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\n </button>\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col gap-12\">\n <div class=\"flex flex-col gap-5\">\n @for (item of [1, 2, 3, 4]; track item) {\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n }\n <div class=\"flex gap-2\">\n <div class=\"tui-skeleton h-10 w-40 rounded-md\"></div>\n <div class=\"tui-skeleton h-10 w-36 rounded-md\"></div>\n </div>\n </div>\n </div>\n}\n" }]
117
+ }] });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZHJhZnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL2RyYWZ0L3NjLWRyYWZ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9zYy1kcmFmdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixvQkFBb0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtFQUErRSxDQUFDOztBQUV0STs7R0FFRztBQWNILE1BQU0sT0FBTyxnQkFBZ0I7SUFiN0I7UUFjSTs7V0FFRztRQUNjLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekM7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RTtnQkFDRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsR0FBRztnQkFDL0MsR0FBRyxFQUFFLGFBQWE7Z0JBQ2xCLEVBQUUsRUFBRSxlQUFlO2FBQ3RCO1NBQ0osQ0FBQzthQUNELElBQUksQ0FDRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQy9DLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0E3R1EsZ0JBQWdCO21HQUFoQixnQkFBZ0IsK2JBUmQ7WUFDUDtnQkFDSSxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsV0FBVyxFQUFFLG9CQUFvQjthQUNwQztTQUNKLDBCQ3pCTCw0NUVBNERBLDRDRHpDYyxxQ0FBcUMsaVBBQUUsd0JBQXdCLDJFQUFFLFNBQVM7OzRGQVMzRSxnQkFBZ0I7a0JBYjVCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLFVBQVUsV0FFWCxDQUFDLHFDQUFxQyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsYUFDcEY7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFdBQVcsRUFBRSxvQkFBb0I7eUJBQ3BDO3FCQUNKLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBtb2RlbCwgT25Jbml0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNDX09SREVSX0xPQURFUiwgU2NPcmRlckRyYWZ0LCBTY09yZGVyRHJhZnRzU2VydmljZSwgc2NPcmRlcklzTG9hZGVkLCBTY1JvdXRlS2V5cywgU2NTZW9TZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b24sIFR1aURpYWxvZ1NlcnZpY2UsIFR1aUljb25zIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVFVJX0NPTkZJUk0gfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbm9vcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Mtb3JkZXItYWNjZXNzb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNjT3JkZXJJdGVtc0J5RGlyZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3NjLWktY2FydC1pdGVtcy1ieS1kaXJlY3Rpb24nO1xuaW1wb3J0IHsgU2NPcmRlckl0ZW1zTGlzdEJ5RGlyZWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLWl0ZW1zLWxpc3QtYnktZGlyZWN0aW9ucy9zYy1vcmRlci1pdGVtcy1saXN0LWJ5LWRpcmVjdGlvbnMuY29tcG9uZW50JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQvdC+0LLQuNC60LAg0LfQsNC60LDQt9CwICjQsNC90LDQu9C+0LMg0LrQvtGA0LfQuNC90Ysg0LTQu9GPINC+0LTQvdC+0LPQviDRh9C10YDQvdC+0LLQuNC60LApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtZHJhZnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1kcmFmdC5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1NjT3JkZXJJdGVtc0xpc3RCeURpcmVjdGlvbnNDb21wb25lbnQsIFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZSwgVHVpQnV0dG9uLCBUdWlJY29uc10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFNDX09SREVSX0xPQURFUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTY09yZGVyRHJhZnRzU2VydmljZSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0RyYWZ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RidC40Lkg0LTQvtGB0YLRg9C/INC6INC00LDQvdC90YvQvCDQviDQvNCw0YDRiNGA0YPRgtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGH0LXRgNC90L7QstC40LrQsNC80Lgg0LfQsNC60LDQt9C+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFmdHNTZXJ2aWNlID0gaW5qZWN0KFNjT3JkZXJEcmFmdHNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDRgSDQtNCw0L3QvdGL0LzQuCDRgtC10LrRg9GJ0LXQs9C+INGH0LXRgNC90L7QstC40LrQsCDQt9Cw0LrQsNC30LAgKNC40Lcg0L/QsNGA0LDQvNC10YLRgNCwIG9yZGVySWQg0LIgVVJMKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZHJhZnQgPSBtb2RlbDxTY09yZGVyRHJhZnQgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzID0gbW9kZWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCY0YHRgtC+0YfQvdC40Log0YHQvtCx0YvRgtC40Y8g0YPQtNCw0LvQtdC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdGLINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlRXZlbnQgPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdDxUdWlEaWFsb2dTZXJ2aWNlPihUdWlEaWFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCi0LXQutGD0YnQuNC5INC60LvRjtGHINC80LDRgNGI0YDRg9GC0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRHJhZnRQYWdlID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgbWFwKChkYXRhKSA9PiAoZGF0YVsncm91dGVzX2tleSddIGFzIFNjUm91dGVLZXlzKSA9PT0gU2NSb3V0ZUtleXMuZHJhZnQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLFxuICAgICAgICB7IGluaXRpYWxWYWx1ZTogZmFsc2UgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRg9GB0YLQsNC90L7QstC60LggU0VPLdC00LDQvdC90YvRhSDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlb1NlcnZpY2U6IFNjU2VvU2VydmljZSA9IGluamVjdChTY1Nlb1NlcnZpY2UpO1xuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZHJhZnQoKSkge1xuICAgICAgICAgICAgdGhpcy5kcmFmdHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldCQoTnVtYmVyLnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdvcmRlcklkJykgPz8gJycsIDEwKSlcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoc2NPcmRlcklzTG9hZGVkKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZHJhZnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFmdC5zZXQoZHJhZnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlb1NlcnZpY2Uuc2V0QnlEZWZhdWx0QXNOb0luZGV4ZWQoJ9Cn0LXRgNC90L7QstC40LrQuCDQt9Cw0LrQsNC30L7QsicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRhdC+0LQg0Log0L7RhNC+0YDQvNC70LXQvdC40Y4g0LfQsNC60LDQt9CwINC/0L4g0LLRi9Cx0YDQsNC90L3QvtC80YMg0L3QsNC/0YDQsNCy0LvQtdC90LjRjiDQv9GA0L7QtNCw0LYuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uINCT0YDRg9C/0L/QsCDQv9C+0LfQuNGG0LjQuSDQv9C+INC90LDQv9GA0LDQstC70LXQvdC40Y4g0L/RgNC+0LTQsNC2LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnb1RvTmV3T3JkZXIoZGlyZWN0aW9uOiBTY09yZGVySXRlbXNCeURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKS5maWx0ZXIoKGlkKSA9PiBkaXJlY3Rpb24uaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ29yZGVycycsICduZXcnLCB0aGlzLmRyYWZ0KCk/LmlkLCBkaXJlY3Rpb24uZGlyZWN0aW9uLmlkLCAnZHJhZnQnXSwgeyBxdWVyeVBhcmFtczogeyBpdGVtc0lkczogaWRzIH0gfSkuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0YfQtdGA0L3QvtCy0LjQuiDQuCDQv9C10YDQtdC90LDQv9GA0LDQstC70Y/QtdGCINC6INGB0L/QuNGB0LrRgyDRh9C10YDQvdC+0LLQuNC60L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2xlYXJEcmFmdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gdGhpcy5kcmFmdCgpID8/IHt9O1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW48Ym9vbGVhbj4oVFVJX0NPTkZJUk0sIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYNCj0LTQsNC70LjRgtGMINGH0LXRgNC90L7QstC40Log4oSWJHtpZH0/YCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGDQrdGC0L4g0LTQtdC50YHRgtCy0LjQtSDRg9C00LDQu9C40YIg0YfQtdGA0L3QvtCy0LjQuiDihJYke2lkfS5gLFxuICAgICAgICAgICAgICAgICAgICB5ZXM6ICfQlNCwLCDRg9C00LDQu9C40YLRjCcsXG4gICAgICAgICAgICAgICAgICAgIG5vOiAn0J3QtdGCLCDQvtGB0YLQsNCy0LjRgtGMJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kcmFmdHNTZXJ2aWNlLmRlbGV0ZSQoaWQpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVFdmVudC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZHJhZnRzJ10pLmNhdGNoKG5vb3ApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiQGxldCBpdGVtcyA9IGRyYWZ0KCk/LnByb2R1Y3RzO1xuXG5AaWYgKGl0ZW1zKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCI+XG4gICAgICAgICAgICBAaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtcy1saXN0LWJ5LWRpcmVjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgc2NPcmRlclxuICAgICAgICAgICAgICAgICAgICBbb3JkZXJJZF09XCJkcmFmdCgpPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJpc0RyYWZ0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEl0ZW1zSWRzQ2hhbmdlKT1cInNlbGVjdGVkSXRlbXNJZHMuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY29udGludWVDbGljayk9XCJnb1RvTmV3T3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRHJhZnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQo9C00LDQu9C40YLRjCDRh9C10YDQvdC+0LLQuNC6XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9zYy1vcmRlci1pdGVtcy1saXN0LWJ5LWRpcmVjdGlvbnM+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj7Qp9C10YDQvdC+0LLQuNC6INC/0YPRgdGCLjwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGZvb3RlckFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcmFmdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkudHJhc2gtMlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgINCj0LTQsNC70LjRgtGMINGH0LXRgNC90L7QstC40LpcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIFsxLCAyLCAzLCA0XTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktc2tlbGV0b24gZmxleCBoLVs4LjI1cmVtXSB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGxcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR1aS1za2VsZXRvbiBoLTEwIHctNDAgcm91bmRlZC1tZFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktc2tlbGV0b24gaC0xMCB3LTM2IHJvdW5kZWQtbWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==