@esolve/ng-esolve-connect 0.100.0 → 0.101.0

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/esm2022/lib/account/esolve-account.service.mjs +4 -4
  2. package/esm2022/lib/account/user-account/classes/esolve-user-client-account.model.mjs +49 -5
  3. package/esm2022/lib/albums/services/esolve-albums.service.mjs +4 -4
  4. package/esm2022/lib/assets/esolve-assets.service.mjs +4 -4
  5. package/esm2022/lib/auth/esolve-auth-interceptor.service.mjs +4 -4
  6. package/esm2022/lib/auth/esolve-auth.service.mjs +4 -4
  7. package/esm2022/lib/auth/esolve-otp.service.mjs +4 -4
  8. package/esm2022/lib/banners/esolve-banner.service.mjs +4 -4
  9. package/esm2022/lib/cart/esolve-cart.service.mjs +4 -4
  10. package/esm2022/lib/category-tree/esolve-category-tree.service.mjs +4 -4
  11. package/esm2022/lib/competitions/services/esolve-competitions.service.mjs +4 -4
  12. package/esm2022/lib/core/esolve-config.service.mjs +4 -4
  13. package/esm2022/lib/coupons/esolve-coupons.service.mjs +4 -4
  14. package/esm2022/lib/deliveries/esolve-deliveries.service.mjs +4 -4
  15. package/esm2022/lib/device/esolve-device.service.mjs +4 -4
  16. package/esm2022/lib/enquiry/esolve-enquiry.service.mjs +4 -4
  17. package/esm2022/lib/geocoder/esolve-geocoder.service.mjs +4 -4
  18. package/esm2022/lib/images/directives/cdn-src.directive.mjs +4 -4
  19. package/esm2022/lib/locations/esolve-locations.service.mjs +4 -4
  20. package/esm2022/lib/manufacturers/esolve-manufacturers.service.mjs +4 -4
  21. package/esm2022/lib/menu/esolve-menu.service.mjs +4 -4
  22. package/esm2022/lib/news/esolve-news.service.mjs +4 -4
  23. package/esm2022/lib/ng-esolve-connect.module.mjs +5 -5
  24. package/esm2022/lib/payment/esolve-payment.service.mjs +4 -4
  25. package/esm2022/lib/ranges/esolve-ranges.service.mjs +4 -4
  26. package/esm2022/lib/reviews/services/esolve-reviews.service.mjs +4 -4
  27. package/esm2022/lib/seo/esolve-seo.service.mjs +4 -4
  28. package/esm2022/lib/session/esolve-session-metadata.service.mjs +4 -4
  29. package/esm2022/lib/session/esolve-session.service.mjs +4 -4
  30. package/esm2022/lib/shared/cookie/esolve-cookie.service.mjs +4 -4
  31. package/esm2022/lib/shared/errors/esolve-error-handler.service.mjs +4 -4
  32. package/esm2022/lib/shared/response/esolve-response-handler.service.mjs +4 -4
  33. package/esm2022/lib/shipping/esolve-shipping.service.mjs +4 -4
  34. package/esm2022/lib/specials/esolve-specials.service.mjs +4 -4
  35. package/esm2022/lib/stock/classes/esolve-stock-item-base.model.mjs +6 -1
  36. package/esm2022/lib/stock/esolve-stock.service.mjs +4 -4
  37. package/esm2022/lib/stock/interfaces/esolve-stock-base-record.interface.mjs +1 -1
  38. package/esm2022/lib/suppliers/esolve-suppliers.service.mjs +4 -4
  39. package/esm2022/lib/tags/esolve-tags.service.mjs +4 -4
  40. package/esm2022/lib/topics/esolve-topic.service.mjs +4 -4
  41. package/esm2022/lib/transactions/esolve-transactions.service.mjs +4 -4
  42. package/esm2022/lib/vouchers/esolve-vouchers.service.mjs +4 -4
  43. package/esm2022/lib/wallet/esolve-wallet.service.mjs +4 -4
  44. package/esm2022/lib/wishlist/esolve-wishlist.service.mjs +4 -4
  45. package/esm2022/media/lib/components/media-layout/esolve-media-layout.component.mjs +4 -4
  46. package/esm2022/media/lib/components/media-section/esolve-media-section.component.mjs +4 -4
  47. package/esm2022/media/lib/ng-esolve-connect-media.module.mjs +5 -5
  48. package/esm2022/media/lib/services/esolve-media-layout.service.mjs +4 -4
  49. package/esm2022/media/lib/services/esolve-media.service.mjs +4 -4
  50. package/esm2022/notifications/lib/services/esolve-notifications.service.mjs +4 -4
  51. package/esm2022/survey/lib/services/esolve-survey.service.mjs +4 -4
  52. package/fesm2022/esolve-ng-esolve-connect-media.mjs +16 -16
  53. package/fesm2022/esolve-ng-esolve-connect-media.mjs.map +1 -1
  54. package/fesm2022/esolve-ng-esolve-connect-notifications.mjs +3 -3
  55. package/fesm2022/esolve-ng-esolve-connect-notifications.mjs.map +1 -1
  56. package/fesm2022/esolve-ng-esolve-connect-survey.mjs +3 -3
  57. package/fesm2022/esolve-ng-esolve-connect-survey.mjs.map +1 -1
  58. package/fesm2022/esolve-ng-esolve-connect.mjs +179 -130
  59. package/fesm2022/esolve-ng-esolve-connect.mjs.map +1 -1
  60. package/lib/account/user-account/classes/esolve-user-client-account.model.d.ts +42 -38
  61. package/lib/stock/classes/esolve-stock-item-base.model.d.ts +4 -0
  62. package/lib/stock/interfaces/esolve-stock-base-record.interface.d.ts +1 -0
  63. package/lib/wishlist/classes/esolve-wishlist-item.model.d.ts +2 -2
  64. package/package.json +1 -1
@@ -592,13 +592,13 @@ export class EsolveAccountService {
592
592
  }
593
593
  return requests;
594
594
  }
595
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAccountService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
596
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAccountService, providedIn: 'root' }); }
595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAccountService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
596
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAccountService, providedIn: 'root' }); }
597
597
  }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAccountService, decorators: [{
598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAccountService, decorators: [{
599
599
  type: Injectable,
600
600
  args: [{
601
601
  providedIn: 'root',
602
602
  }]
603
603
  }], ctorParameters: () => [] });
604
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWFjY291bnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmctZXNvbHZlLWNvbm5lY3Qvc3JjL2xpYi9hY2NvdW50L2Vzb2x2ZS1hY2NvdW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNILFVBQVUsRUFFVixVQUFVLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsNEJBQTRCLEVBRzVCLFlBQVksRUFFWixtQkFBbUIsR0FDdEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBRUgsaUJBQWlCLEVBRWpCLHFCQUFxQixHQUN4QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFHSCx3QkFBd0IsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0gsYUFBYSxFQUViLG1CQUFtQixFQUduQixnQ0FBZ0MsR0FDbkMsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNILDBCQUEwQixFQUMxQix5QkFBeUIsR0FHNUIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNILHdCQUF3QixFQUV4QixpQkFBaUIsRUFHakIsdUJBQXVCLEVBQ3ZCLCtCQUErQixFQUUvQiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBRTFCLE1BQU0sZ0JBQWdCLENBQUM7QUFD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QU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0FqK0JRLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzRGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgSHR0cENsaWVudCxcbiAgICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICBIdHRwUGFyYW1zLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFc29sdmVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZUVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgRXNvbHZlUmVzcG9uc2VIYW5kbGVyU2VydmljZSxcbiAgICBFc29sdmVTZXRSZXNwb25zZSxcbiAgICBFc29sdmVHZXRSZXNwb25zZSxcbiAgICBFc29sdmVSZXN1bHQsXG4gICAgRXNvbHZlRGVsZXRlUmVzcG9uc2UsXG4gICAgRXNvbHZlRmlsdGVyRmFjdG9yeSxcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IEVzb2x2ZUF1dGhSZXN1bHQgfSBmcm9tICcuLi9hdXRoJztcbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbic7XG5pbXBvcnQgeyBFc29sdmVDYXJ0VG90YWxzIH0gZnJvbSAnLi4vY2FydCc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZVRyYW5zYWN0aW9uUmVjb3JkLFxuICAgIEVzb2x2ZVRyYW5zYWN0aW9uLFxuICAgIEVzb2x2ZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgICBFc29sdmVUcmFuc2FjdGlvbkxpc3QsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZVJlZ2lzdHJhdGlvblBvc3RSZXNwb25zZUl0ZW0sXG4gICAgRXNvbHZlUmVnaXN0cmF0aW9uRGF0YSxcbiAgICBFc29sdmVSZWdpc3RyYXRpb25SZXN1bHQsXG59IGZyb20gJy4vcmVnaXN0cmF0aW9uJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWRkcmVzcyxcbiAgICBFc29sdmVBZGRyZXNzUmVjb3JkLFxuICAgIEVzb2x2ZUFkZHJlc3NSZXN1bHQsXG4gICAgRXNvbHZlQWRkcmVzc1Bvc3REYXRhLFxuICAgIEVzb2x2ZUFkZHJlc3NSZXNwb25zZSxcbiAgICBFc29sdmVTZXNzaW9uQWRkcmVzc1VwZGF0ZVJlc3VsdCxcbn0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQ2hhbmdlUGFzc3dvcmRSZXN1bHQsXG4gICAgRXNvbHZlUmVzZXRQYXNzd29yZFJlc3VsdCxcbiAgICBFc29sdmVGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICAgIEVzb2x2ZUZvcmdvdFBhc3N3b3JkR2V0UmVzdWx0LFxufSBmcm9tICcuL3Bhc3N3b3JkJztcbmltcG9ydCB7XG4gICAgRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0LFxuICAgIEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdFJlY29yZCxcbiAgICBFc29sdmVVc2VyQWNjb3VudCxcbiAgICBFc29sdmVVc2VyQWNjb3VudERhdGEsXG4gICAgRXNvbHZlVXNlckFjY291bnRSZWNvcmQsXG4gICAgRXNvbHZlVXNlckFjY291bnRSZXN1bHQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyxcbiAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzUmVjb3JkLFxuICAgIEVzb2x2ZUVycERvY3VtZW50c1JlcXVlc3RSZXN1bHQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmQsXG59IGZyb20gJy4vdXNlci1hY2NvdW50JztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblBvc3RSZXNwb25zZUl0ZW0sXG4gICAgRXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9jb25maXJtYXRpb24nO1xuaW1wb3J0IHsgRXNvbHZlTG9jYXRpb25PcHRpb24sIEVzb2x2ZUxvY2F0aW9uVXBkYXRlUmVzdWx0IH0gZnJvbSAnLi9sb2NhdGlvbic7XG5cbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdCB9IGZyb20gJy4vZXNvbHZlLXNlc3Npb24tc2hpcHBpbmctdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0IH0gZnJvbSAnLi9lc29sdmUtc2Vzc2lvbi1jbGllbnQtdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVzb2x2ZUFjY291bnRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChFc29sdmVDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChFc29sdmVTZXNzaW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvckhhbmRsZXIgPSBpbmplY3QoRXNvbHZlRXJyb3JIYW5kbGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZUhhbmRsZXIgPSBpbmplY3QoRXNvbHZlUmVzcG9uc2VIYW5kbGVyU2VydmljZSk7XG5cbiAgICBwcml2YXRlIF91c2VyX2lkID0gMDtcblxuICAgIHB1YmxpYyBnZXQgdXNlcl9pZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcl9pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHVzZXJfaWQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID4gMCA/IHZhbHVlIDogMDtcblxuICAgICAgICBpZiAodGhpcy5fdXNlcl9pZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJfaWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFNlc3Npb24oKS5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uLnRva2VuICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcl9pZCA9IHNlc3Npb24udXNlcl9pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVVzZXJBY2NvdW50KFxuICAgICAgICB1c2VyX2FjY291bnRfZGF0YTogRXNvbHZlVXNlckFjY291bnREYXRhLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlVXNlckFjY291bnRSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFjY291bnQ6IHVzZXJfYWNjb3VudF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtdXNlci1hY2NvdW50LnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZVVzZXJBY2NvdW50UmVzdWx0KHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtdXNlci1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VXNlckFjY291bnQoKTogT2JzZXJ2YWJsZTxFc29sdmVVc2VyQWNjb3VudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgIEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVVzZXJBY2NvdW50UmVjb3JkW10+XG4gICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hY2NvdW50LnBocGApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJlc3BvbnNlLnJlY29yZHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1VzZXJBY2NvdW50KHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVVc2VyQWNjb3VudCgpOiBPYnNlcnZhYmxlPEVzb2x2ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZGVsZXRlPEVzb2x2ZURlbGV0ZVJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9kZWxldGUtYWNjb3VudC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5zdGF0dXMgIT09ICdzdWNjZXNzJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGh0dHBfcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cERlbGV0ZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWRkcmVzcyhcbiAgICAgICAgYWRkcmVzc19wb3N0X2RhdGE6IEVzb2x2ZUFkZHJlc3NQb3N0RGF0YSxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUFkZHJlc3NSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NfcG9zdF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFkZHJlc3NSZXNwb25zZT4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1hZGRyZXNzLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZUFkZHJlc3NSZXN1bHQocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwUG9zdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NldC1hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWRkcmVzc2VzKCk6IE9ic2VydmFibGU8RXNvbHZlQWRkcmVzc1tdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQWRkcmVzc1JlY29yZFtdPj4oXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hZGRyZXNzZXMucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHVzZXJfaWQ6IHRoaXMudXNlcl9pZCB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckFkZHJlc3MocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xpZW50cygpOiBPYnNlcnZhYmxlPEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmRbXT5cbiAgICAgICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC11c2VyLWNsaWVudHMucGhwYClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckNsaWVudHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWRkcmVzcyhpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmRlbGV0ZTxFc29sdmVEZWxldGVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZGVsZXRlLWFkZHJlc3MucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBpZCB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaHR0cF9yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwRGVsZXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLWFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlcihcbiAgICAgICAgdXNlcl9yZWdpc3RyYXRpb246IEVzb2x2ZVJlZ2lzdHJhdGlvbkRhdGEsXG4gICAgICAgIGd1ZXN0ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVSZWdpc3RyYXRpb25SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIHVzZXI6IHVzZXJfcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgZ3Vlc3RfcmVnaXN0cmF0aW9uOiBndWVzdCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgICBFc29sdmVTZXRSZXNwb25zZTxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlUmVnaXN0cmF0aW9uUG9zdFJlc3BvbnNlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlQXV0aFJlc3VsdFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgID4oYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXJlZ2lzdHJhdGlvbi5waHBgLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlLCBhZGRpdGlvbmFsX2RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0b19sb2dpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uX2RhdGEgPSByZXNwb25zZS5zZXNzaW9uX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsX2RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGFkZGl0aW9uYWxfZGF0YS5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArc2Vzc2lvbl9kYXRhLmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArc2Vzc2lvbl9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArc2Vzc2lvbl9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Nlc3Npb25fZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVnaXN0cmF0aW9uUmVzdWx0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LXJlZ2lzdHJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVBhc3N3b3JkKFxuICAgICAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgICAgICBjb25maXJtX3Bhc3N3b3JkOiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVDaGFuZ2VQYXNzd29yZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtY2hhbmdlLXBhc3N3b3JkLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQ2hhbmdlUGFzc3dvcmRSZXN1bHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdWJtaXRzIHRoZSB1c2VycyBjb25maXJtYXRpb24ga2V5IHRvIHRoZSByZWxldmFudCBiYWNrZW5kIHNlcnZlciBpbiBvcmRlciB0b1xuICAgICAqIGNvbmZpcm0gdGhlIGFjY291bnRzIHZhbGlkaXR5LiBUaGUga2V5IHdhcyBlbWFpbGVkIHRvIHRoZSB1c2VyIGhlbmNlIGlmIGhlIHJlY2VpdmVkXG4gICAgICogaXQgYW5kIGVudGVycyB0aGUgdmFsdWUsIHRoZSBlbWFpbCBhY2NvdW50IGNhbiBiZSBzZWVuIGFzIHZhbGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRoYXQgd2FzIGVtYWlsZWQgdG8gdGhlIHJlZ2lzdGVyZWQgdXNlcidzIGVtYWlsIGFjY291bnQuXG4gICAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIHRoYXQgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgYWNjb3VudCBjb25maXJtYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjb3VudENvbmZpcm1hdGlvblJlcXVlc3QoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFjY291bnRDb25maXJtYXRpb25Qb3N0UmVzcG9uc2VJdGVtPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LWFjY291bnQtY29uZmlybWF0aW9uLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRvX2xvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6ICtyZXNwb25zZS5sb2NhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZDogK3Jlc3BvbnNlLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArcmVzcG9uc2Uuc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzcG9uc2UuY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVBY2NvdW50Q29uZmlybWF0aW9uUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtYWNjb3VudC1jb25maXJtYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kRm9yZ290UGFzc3dvcmRSZXF1ZXN0KGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldDxFc29sdmVHZXRSZXNwb25zZTxFc29sdmVGb3Jnb3RQYXNzd29yZEdldFJlc3VsdD4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1mb3Jnb3QtcGFzc3dvcmQucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBlbWFpbCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgISgncmVzZXRfbGlua19zZW50JyBpbiByZXNwb25zZS5yZWNvcmRzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlY29yZHMucmVzZXRfbGlua19zZW50O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZChcbiAgICAgICAgcmVzZXRfa2V5OiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIGNvbmZpcm1fcGFzc3dvcmQ6IHN0cmluZyxcbiAgICAgICAgYXV0b19sb2dpbiA9IHRydWUsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVSZXNldFBhc3N3b3JkUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+PihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtZm9yZ290LXBhc3N3b3JkLnBocGAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNldF9rZXksXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICBhdXRvX2xvZ2luLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxvZ2luX3JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25fZGF0YSA9IHJlc3BvbnNlLnNlc3Npb25fZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArc2Vzc2lvbl9kYXRhLmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArc2Vzc2lvbl9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArc2Vzc2lvbl9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Nlc3Npb25fZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVJlc2V0UGFzc3dvcmRSZXN1bHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtZm9yZ290LXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb24oXG4gICAgICAgIGxvY2F0aW9uX2lkOiBudW1iZXIsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVVc2VyTG9jYXRpb24oeyBsb2NhdGlvbl9pZCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb25PbkVycChcbiAgICAgICAgZXJwOiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVVc2VyTG9jYXRpb24oeyBlcnAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNlc3Npb25DbGllbnQoXG4gICAgICAgIGNsaWVudHNfaWQ6IG51bWJlcixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZVNlc3Npb25DbGllbnRVcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1zZXNzaW9uLWNsaWVudC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5lc29sdmVfaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU2Vzc2lvbkFkZHJlc3MoXG4gICAgICAgIGFkZHJlc3Nlc19pZDogbnVtYmVyLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlU2Vzc2lvbkFkZHJlc3NVcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1zZXNzaW9uLWFkZHJlc3MucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5lc29sdmVfaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXNfaWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVNlc3Npb25BZGRyZXNzVXBkYXRlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU2Vzc2lvblNoaXBwaW5nKFxuICAgICAgICBzaGlwcGluZ19pZDogbnVtYmVyLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlU2Vzc2lvblNoaXBwaW5nVXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1zaGlwcGluZy5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXNvbHZlX2lkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmdfaWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEVzb2x2ZVRyYW5zYWN0aW9uc1NlcnZpY2UgZm9yIGZ1dHVyZSB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvbnMoXG4gICAgICAgIG9wdGlvbnM6IEVzb2x2ZVRyYW5zYWN0aW9uT3B0aW9ucyA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlVHJhbnNhY3Rpb25MaXN0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3VzZXJfaWQnLCB0aGlzLnVzZXJfaWQpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndHlwZScsIG9wdGlvbnMudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucm93cykge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3Jvd3MnLCBvcHRpb25zLnJvd3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mcm9tX2RhdGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdmcm9tX2RhdGUnLCBvcHRpb25zLmZyb21fZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRvX2RhdGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b19kYXRlJywgb3B0aW9ucy50b19kYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJzID0gb3B0aW9ucy5maWx0ZXJzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBFc29sdmVGaWx0ZXJGYWN0b3J5LmNvdmVydEZyb21PYmooZmlsdGVycyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyYW1zID0gRXNvbHZlRmlsdGVyRmFjdG9yeS5jb252ZXJ0VG9IdHRwUGFyYW1zKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtdHJhbnNhY3Rpb25zLnBocGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnByb2Nlc3NUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9ICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYWRkaXRpb25hbF9kYXRhLnRvdGFsX3JlY29yZHMgPz8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBvcHRpb25zLnJvd3MgPz8gdG90YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlVHJhbnNhY3Rpb25MaXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgRXNvbHZlVHJhbnNhY3Rpb25zU2VydmljZSBmb3IgZnV0dXJlIHRyYW5zYWN0aW9uIHJlcXVlc3RzXG4gICAgICovXG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEVzb2x2ZVRyYW5zYWN0aW9uPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtdHJhbnNhY3Rpb25zLnBocGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbl9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoIDw9IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsaWVudEFjY291bnRCYWxhbmNlcygpOiBPYnNlcnZhYmxlPFxuICAgICAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzIHwgdW5kZWZpbmVkXG4gICAgPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8XG4gICAgICAgICAgICAgICAgICAgIEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50QmFsYW5jZXNSZWNvcmRbXT5cbiAgICAgICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1jbGllbnQtYWNjb3VudC1iYWxhbmNlcy5waHBgKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVjb3JkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDbGllbnRCYWxhbmNlcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZVN0YXRlbWVudERvd25sb2FkTGluayhjbGllbnRzX2lkOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkd1YXJkKCk7XG5cbiAgICAgICAgICAgIGlmIChjbGllbnRzX2lkIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VfdXJsID0gYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWdlbmVyYXRlZC1wZGYucGhwYDtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICd3c19pZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmZpZy53c2lkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbGllbnRzX2lkJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFRva2VuKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5X3N0cmluZyA9IHF1ZXJpZXNcbiAgICAgICAgICAgICAgICAubWFwKChxdWVyeSkgPT4gYCR7cXVlcnkua2V5fT0ke3F1ZXJ5LnZhbHVlfWApXG4gICAgICAgICAgICAgICAgLmpvaW4oJyYnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VfdXJsfT8ke3F1ZXJ5X3N0cmluZ31gO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlcXVlc3RFcnBEb2N1bWVudHMoXG4gICAgICAgIHJlcXVlc3RlZF9kb2N1bWVudHM6IEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdFtdLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlRXJwRG9jdW1lbnRzUmVxdWVzdFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcmVxdWVzdGVkX2RvY3VtZW50cyxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxFc29sdmVTZXRSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXJlcXVlc3QtZXJwLWRvY3VtZW50LnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXNvbHZlRXJwRG9jdW1lbnRzUmVxdWVzdFJlc3VsdChyZXNwb25zZSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LXJlcXVlc3QtZXJwLWRvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJwRG9jdW1lbnRSZXF1ZXN0cyhcbiAgICAgICAgY2xpZW50c19pZDogbnVtYmVyLFxuICAgICAgICB0eXBlID0gJ2ludm9pY2UnLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY2xpZW50c19pZCcsIGNsaWVudHNfaWQpO1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndHlwZScsIHR5cGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxFc29sdmVHZXRSZXNwb25zZTxFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RSZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtZXJwLWRvY3VtZW50LXJlcXVlc3QucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXJwRG9jdW1lbnRSZXF1ZXN0KHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVXNlckFjY291bnQoXG4gICAgICAgIHJlY29yZDogRXNvbHZlVXNlckFjY291bnRSZWNvcmQsXG4gICAgKTogRXNvbHZlVXNlckFjY291bnQge1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY29yZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCtyZWNvcmQudXNlcmlkICE9PSB0aGlzLl91c2VyX2lkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBhY2NvdW50IHJldHJpZXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVVc2VyQWNjb3VudChyZWNvcmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1VzZXJBZGRyZXNzKFxuICAgICAgICByZWNvcmRzOiBFc29sdmVBZGRyZXNzUmVjb3JkW10sXG4gICAgKTogRXNvbHZlQWRkcmVzc1tdIHtcbiAgICAgICAgY29uc3QgdXNlcl9hZGRyZXNzZXM6IEVzb2x2ZUFkZHJlc3NbXSA9IFtdO1xuXG4gICAgICAgIGlmICghcmVjb3JkcyB8fCB0aGlzLl91c2VyX2lkID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlcl9hZGRyZXNzZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAoK3JlY29yZC51c2VyaWQgIT09IHRoaXMuX3VzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXNlcl9hZGRyZXNzZXMucHVzaChuZXcgRXNvbHZlQWRkcmVzcyhyZWNvcmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1c2VyX2FkZHJlc3NlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NVc2VyQ2xpZW50cyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmRbXSxcbiAgICApOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFtdIHtcbiAgICAgICAgY29uc3QgdXNlcl9jbGllbnRzOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFtdID0gW107XG5cbiAgICAgICAgaWYgKCFyZWNvcmRzIHx8IHRoaXMuX3VzZXJfaWQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyX2NsaWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICB1c2VyX2NsaWVudHMucHVzaChuZXcgRXNvbHZlVXNlckNsaWVudEFjY291bnQocmVjb3JkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXNlcl9jbGllbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1RyYW5zYWN0aW9ucyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXSxcbiAgICApOiBFc29sdmVUcmFuc2FjdGlvbltdIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zOiBFc29sdmVUcmFuc2FjdGlvbltdID0gW107XG5cbiAgICAgICAgaWYgKHJlY29yZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBFc29sdmVUcmFuc2FjdGlvbihyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zLnB1c2godHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NDbGllbnRCYWxhbmNlcyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlc1JlY29yZFtdLFxuICAgICk6IEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50QmFsYW5jZXMgfCB1bmRlZmluZWQge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAoK3JlY29yZC5jbGllbnRzX2lkIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjYXJ0X3RvdGFscyA9IG5ldyBFc29sdmVDYXJ0VG90YWxzKHJlY29yZC5jYXJ0X3RvdGFscyk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyhcbiAgICAgICAgICAgICAgICArcmVjb3JkLmNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkLmFjY291bnQsXG4gICAgICAgICAgICAgICAgY2FydF90b3RhbHMsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5jcmVkaXRfbGltaXQsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5leHRlcm5hbF9hY2NvdW50X2JhbGFuY2UsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5leHRlcm5hbF9hdmFpbGFibGVfYmFsYW5jZSxcbiAgICAgICAgICAgICAgICArcmVjb3JkLm5ld19leHRlcm5hbF9hdmFpbGFibGVfYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAhIStyZWNvcmQuY3JlZGl0X2xpbWl0X29rYXksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ2luR3VhcmQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJfaWQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudGhyb3dFcnJvcignbG9naW5fcmVxdWlyZWQnLCAnTG9naW4gaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVXNlckxvY2F0aW9uKFxuICAgICAgICBib2R5OiBFc29sdmVMb2NhdGlvbk9wdGlvbixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUxvY2F0aW9uVXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1sb2NhdGlvbi5waHBgLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmVzb2x2ZV9pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGlkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0VycERvY3VtZW50UmVxdWVzdChcbiAgICAgICAgcmVjb3JkczogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0UmVjb3JkW10sXG4gICAgKTogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10ge1xuICAgICAgICBjb25zdCByZXF1ZXN0czogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKG5ldyBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3QocmVjb3JkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVxdWVzdHM7XG4gICAgfVxufVxuIl19
604
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWFjY291bnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmctZXNvbHZlLWNvbm5lY3Qvc3JjL2xpYi9hY2NvdW50L2Vzb2x2ZS1hY2NvdW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNILFVBQVUsRUFFVixVQUFVLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlDLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsNEJBQTRCLEVBRzVCLFlBQVksRUFFWixtQkFBbUIsR0FDdEIsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBRUgsaUJBQWlCLEVBRWpCLHFCQUFxQixHQUN4QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFHSCx3QkFBd0IsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0gsYUFBYSxFQUViLG1CQUFtQixFQUduQixnQ0FBZ0MsR0FDbkMsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNILDBCQUEwQixFQUMxQix5QkFBeUIsR0FHNUIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNILHdCQUF3QixFQUV4QixpQkFBaUIsRUFHakIsdUJBQXVCLEVBQ3ZCLCtCQUErQixFQUUvQiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBRTFCLE1BQU0sZ0JBQWdCLENBQUM7QUFD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QU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs4R0FqK0JRLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgSHR0cENsaWVudCxcbiAgICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICBIdHRwUGFyYW1zLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFc29sdmVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZUVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgRXNvbHZlUmVzcG9uc2VIYW5kbGVyU2VydmljZSxcbiAgICBFc29sdmVTZXRSZXNwb25zZSxcbiAgICBFc29sdmVHZXRSZXNwb25zZSxcbiAgICBFc29sdmVSZXN1bHQsXG4gICAgRXNvbHZlRGVsZXRlUmVzcG9uc2UsXG4gICAgRXNvbHZlRmlsdGVyRmFjdG9yeSxcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IEVzb2x2ZUF1dGhSZXN1bHQgfSBmcm9tICcuLi9hdXRoJztcbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbic7XG5pbXBvcnQgeyBFc29sdmVDYXJ0VG90YWxzIH0gZnJvbSAnLi4vY2FydCc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZVRyYW5zYWN0aW9uUmVjb3JkLFxuICAgIEVzb2x2ZVRyYW5zYWN0aW9uLFxuICAgIEVzb2x2ZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgICBFc29sdmVUcmFuc2FjdGlvbkxpc3QsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICAgIEVzb2x2ZVJlZ2lzdHJhdGlvblBvc3RSZXNwb25zZUl0ZW0sXG4gICAgRXNvbHZlUmVnaXN0cmF0aW9uRGF0YSxcbiAgICBFc29sdmVSZWdpc3RyYXRpb25SZXN1bHQsXG59IGZyb20gJy4vcmVnaXN0cmF0aW9uJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWRkcmVzcyxcbiAgICBFc29sdmVBZGRyZXNzUmVjb3JkLFxuICAgIEVzb2x2ZUFkZHJlc3NSZXN1bHQsXG4gICAgRXNvbHZlQWRkcmVzc1Bvc3REYXRhLFxuICAgIEVzb2x2ZUFkZHJlc3NSZXNwb25zZSxcbiAgICBFc29sdmVTZXNzaW9uQWRkcmVzc1VwZGF0ZVJlc3VsdCxcbn0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQ2hhbmdlUGFzc3dvcmRSZXN1bHQsXG4gICAgRXNvbHZlUmVzZXRQYXNzd29yZFJlc3VsdCxcbiAgICBFc29sdmVGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICAgIEVzb2x2ZUZvcmdvdFBhc3N3b3JkR2V0UmVzdWx0LFxufSBmcm9tICcuL3Bhc3N3b3JkJztcbmltcG9ydCB7XG4gICAgRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0LFxuICAgIEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdFJlY29yZCxcbiAgICBFc29sdmVVc2VyQWNjb3VudCxcbiAgICBFc29sdmVVc2VyQWNjb3VudERhdGEsXG4gICAgRXNvbHZlVXNlckFjY291bnRSZWNvcmQsXG4gICAgRXNvbHZlVXNlckFjY291bnRSZXN1bHQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyxcbiAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzUmVjb3JkLFxuICAgIEVzb2x2ZUVycERvY3VtZW50c1JlcXVlc3RSZXN1bHQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnQsXG4gICAgRXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmQsXG59IGZyb20gJy4vdXNlci1hY2NvdW50JztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblBvc3RSZXNwb25zZUl0ZW0sXG4gICAgRXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9jb25maXJtYXRpb24nO1xuaW1wb3J0IHsgRXNvbHZlTG9jYXRpb25PcHRpb24sIEVzb2x2ZUxvY2F0aW9uVXBkYXRlUmVzdWx0IH0gZnJvbSAnLi9sb2NhdGlvbic7XG5cbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdCB9IGZyb20gJy4vZXNvbHZlLXNlc3Npb24tc2hpcHBpbmctdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0IH0gZnJvbSAnLi9lc29sdmUtc2Vzc2lvbi1jbGllbnQtdXBkYXRlLXJlc3VsdC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVzb2x2ZUFjY291bnRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChFc29sdmVDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChFc29sdmVTZXNzaW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvckhhbmRsZXIgPSBpbmplY3QoRXNvbHZlRXJyb3JIYW5kbGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZUhhbmRsZXIgPSBpbmplY3QoRXNvbHZlUmVzcG9uc2VIYW5kbGVyU2VydmljZSk7XG5cbiAgICBwcml2YXRlIF91c2VyX2lkID0gMDtcblxuICAgIHB1YmxpYyBnZXQgdXNlcl9pZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcl9pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHVzZXJfaWQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID4gMCA/IHZhbHVlIDogMDtcblxuICAgICAgICBpZiAodGhpcy5fdXNlcl9pZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJfaWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFNlc3Npb24oKS5zdWJzY3JpYmUoKHNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uLnRva2VuICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlcl9pZCA9IHNlc3Npb24udXNlcl9pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVVzZXJBY2NvdW50KFxuICAgICAgICB1c2VyX2FjY291bnRfZGF0YTogRXNvbHZlVXNlckFjY291bnREYXRhLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlVXNlckFjY291bnRSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFjY291bnQ6IHVzZXJfYWNjb3VudF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtdXNlci1hY2NvdW50LnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZVVzZXJBY2NvdW50UmVzdWx0KHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtdXNlci1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VXNlckFjY291bnQoKTogT2JzZXJ2YWJsZTxFc29sdmVVc2VyQWNjb3VudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgIEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVVzZXJBY2NvdW50UmVjb3JkW10+XG4gICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hY2NvdW50LnBocGApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJlc3BvbnNlLnJlY29yZHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1VzZXJBY2NvdW50KHJlY29yZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVVc2VyQWNjb3VudCgpOiBPYnNlcnZhYmxlPEVzb2x2ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZGVsZXRlPEVzb2x2ZURlbGV0ZVJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9kZWxldGUtYWNjb3VudC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0ID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5zdGF0dXMgIT09ICdzdWNjZXNzJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGh0dHBfcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLnJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cERlbGV0ZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS1hY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWRkcmVzcyhcbiAgICAgICAgYWRkcmVzc19wb3N0X2RhdGE6IEVzb2x2ZUFkZHJlc3NQb3N0RGF0YSxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUFkZHJlc3NSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NfcG9zdF9kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFkZHJlc3NSZXNwb25zZT4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1hZGRyZXNzLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4gbmV3IEVzb2x2ZUFkZHJlc3NSZXN1bHQocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwUG9zdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NldC1hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWRkcmVzc2VzKCk6IE9ic2VydmFibGU8RXNvbHZlQWRkcmVzc1tdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQWRkcmVzc1JlY29yZFtdPj4oXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hZGRyZXNzZXMucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IHVzZXJfaWQ6IHRoaXMudXNlcl9pZCB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckFkZHJlc3MocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xpZW50cygpOiBPYnNlcnZhYmxlPEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmRbXT5cbiAgICAgICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC11c2VyLWNsaWVudHMucGhwYClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVXNlckNsaWVudHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWRkcmVzcyhpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmRlbGV0ZTxFc29sdmVEZWxldGVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZGVsZXRlLWFkZHJlc3MucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBpZCB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0LnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaHR0cF9yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZS5yZXN1bHQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UucmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwRGVsZXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLWFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlcihcbiAgICAgICAgdXNlcl9yZWdpc3RyYXRpb246IEVzb2x2ZVJlZ2lzdHJhdGlvbkRhdGEsXG4gICAgICAgIGd1ZXN0ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVSZWdpc3RyYXRpb25SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICAgIHVzZXI6IHVzZXJfcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgZ3Vlc3RfcmVnaXN0cmF0aW9uOiBndWVzdCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgICBFc29sdmVTZXRSZXNwb25zZTxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlUmVnaXN0cmF0aW9uUG9zdFJlc3BvbnNlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgRXNvbHZlQXV0aFJlc3VsdFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgID4oYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXJlZ2lzdHJhdGlvbi5waHBgLCBib2R5LCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlLCBhZGRpdGlvbmFsX2RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0b19sb2dpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uX2RhdGEgPSByZXNwb25zZS5zZXNzaW9uX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsX2RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGFkZGl0aW9uYWxfZGF0YS5rZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArc2Vzc2lvbl9kYXRhLmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArc2Vzc2lvbl9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArc2Vzc2lvbl9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Nlc3Npb25fZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlUmVnaXN0cmF0aW9uUmVzdWx0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LXJlZ2lzdHJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVBhc3N3b3JkKFxuICAgICAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgICAgICBjb25maXJtX3Bhc3N3b3JkOiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVDaGFuZ2VQYXNzd29yZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtY2hhbmdlLXBhc3N3b3JkLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQ2hhbmdlUGFzc3dvcmRSZXN1bHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdWJtaXRzIHRoZSB1c2VycyBjb25maXJtYXRpb24ga2V5IHRvIHRoZSByZWxldmFudCBiYWNrZW5kIHNlcnZlciBpbiBvcmRlciB0b1xuICAgICAqIGNvbmZpcm0gdGhlIGFjY291bnRzIHZhbGlkaXR5LiBUaGUga2V5IHdhcyBlbWFpbGVkIHRvIHRoZSB1c2VyIGhlbmNlIGlmIGhlIHJlY2VpdmVkXG4gICAgICogaXQgYW5kIGVudGVycyB0aGUgdmFsdWUsIHRoZSBlbWFpbCBhY2NvdW50IGNhbiBiZSBzZWVuIGFzIHZhbGlkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRoYXQgd2FzIGVtYWlsZWQgdG8gdGhlIHJlZ2lzdGVyZWQgdXNlcidzIGVtYWlsIGFjY291bnQuXG4gICAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIHRoYXQgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUgYWNjb3VudCBjb25maXJtYXRpb24gcmVxdWVzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjb3VudENvbmZpcm1hdGlvblJlcXVlc3QoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlQWNjb3VudENvbmZpcm1hdGlvblJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUFjY291bnRDb25maXJtYXRpb25Qb3N0UmVzcG9uc2VJdGVtPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LWFjY291bnQtY29uZmlybWF0aW9uLnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRvX2xvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6ICtyZXNwb25zZS5sb2NhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZDogK3Jlc3BvbnNlLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArcmVzcG9uc2Uuc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzcG9uc2UuY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVBY2NvdW50Q29uZmlybWF0aW9uUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtYWNjb3VudC1jb25maXJtYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXMsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kRm9yZ290UGFzc3dvcmRSZXF1ZXN0KGVtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldDxFc29sdmVHZXRSZXNwb25zZTxFc29sdmVGb3Jnb3RQYXNzd29yZEdldFJlc3VsdD4+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1mb3Jnb3QtcGFzc3dvcmQucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBlbWFpbCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgISgncmVzZXRfbGlua19zZW50JyBpbiByZXNwb25zZS5yZWNvcmRzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlY29yZHMucmVzZXRfbGlua19zZW50O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZChcbiAgICAgICAgcmVzZXRfa2V5OiBzdHJpbmcsXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgICAgIGNvbmZpcm1fcGFzc3dvcmQ6IHN0cmluZyxcbiAgICAgICAgYXV0b19sb2dpbiA9IHRydWUsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVSZXNldFBhc3N3b3JkUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPEVzb2x2ZUZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+PihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtZm9yZ290LXBhc3N3b3JkLnBocGAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNldF9rZXksXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtX3Bhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICBhdXRvX2xvZ2luLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxvZ2luX3JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25fZGF0YSA9IHJlc3BvbnNlLnNlc3Npb25fZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3BvbnNlLmVzb2x2ZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArc2Vzc2lvbl9kYXRhLmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArc2Vzc2lvbl9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArc2Vzc2lvbl9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogK3Nlc3Npb25fZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVJlc2V0UGFzc3dvcmRSZXN1bHQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzOiBIdHRwRXJyb3JSZXNwb25zZSB8IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlSHR0cFBvc3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtZm9yZ290LXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb24oXG4gICAgICAgIGxvY2F0aW9uX2lkOiBudW1iZXIsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVVc2VyTG9jYXRpb24oeyBsb2NhdGlvbl9pZCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTG9jYXRpb25PbkVycChcbiAgICAgICAgZXJwOiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVVc2VyTG9jYXRpb24oeyBlcnAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNlc3Npb25DbGllbnQoXG4gICAgICAgIGNsaWVudHNfaWQ6IG51bWJlcixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZVNlc3Npb25DbGllbnRVcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1zZXNzaW9uLWNsaWVudC5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5lc29sdmVfaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVTZXNzaW9uQ2xpZW50VXBkYXRlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU2Vzc2lvbkFkZHJlc3MoXG4gICAgICAgIGFkZHJlc3Nlc19pZDogbnVtYmVyLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlU2Vzc2lvbkFkZHJlc3NVcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8RXNvbHZlU2V0UmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L3NldC1zZXNzaW9uLWFkZHJlc3MucGhwYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaHR0cF9yZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIudmFsaWRhdGVTaW5nbGVIdHRwUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5lc29sdmVfaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmhhbmRsZVVwZGF0ZVNlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXNfaWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVNlc3Npb25BZGRyZXNzVXBkYXRlUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU2Vzc2lvblNoaXBwaW5nKFxuICAgICAgICBzaGlwcGluZ19pZDogbnVtYmVyLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlU2Vzc2lvblNoaXBwaW5nVXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1zaGlwcGluZy5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXNvbHZlX2lkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5oYW5kbGVVcGRhdGVTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmdfaWQ6ICtyZXNwb25zZS5lc29sdmVfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZVNlc3Npb25TaGlwcGluZ1VwZGF0ZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEVzb2x2ZVRyYW5zYWN0aW9uc1NlcnZpY2UgZm9yIGZ1dHVyZSB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRUcmFuc2FjdGlvbnMoXG4gICAgICAgIG9wdGlvbnM6IEVzb2x2ZVRyYW5zYWN0aW9uT3B0aW9ucyA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlVHJhbnNhY3Rpb25MaXN0PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3VzZXJfaWQnLCB0aGlzLnVzZXJfaWQpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndHlwZScsIG9wdGlvbnMudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucm93cykge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3Jvd3MnLCBvcHRpb25zLnJvd3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mcm9tX2RhdGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdmcm9tX2RhdGUnLCBvcHRpb25zLmZyb21fZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRvX2RhdGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b19kYXRlJywgb3B0aW9ucy50b19kYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJzID0gb3B0aW9ucy5maWx0ZXJzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBFc29sdmVGaWx0ZXJGYWN0b3J5LmNvdmVydEZyb21PYmooZmlsdGVycyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyYW1zID0gRXNvbHZlRmlsdGVyRmFjdG9yeS5jb252ZXJ0VG9IdHRwUGFyYW1zKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtdHJhbnNhY3Rpb25zLnBocGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnByb2Nlc3NUcmFuc2FjdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9ICsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYWRkaXRpb25hbF9kYXRhLnRvdGFsX3JlY29yZHMgPz8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBvcHRpb25zLnJvd3MgPz8gdG90YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlVHJhbnNhY3Rpb25MaXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgRXNvbHZlVHJhbnNhY3Rpb25zU2VydmljZSBmb3IgZnV0dXJlIHRyYW5zYWN0aW9uIHJlcXVlc3RzXG4gICAgICovXG4gICAgcHVibGljIGdldFRyYW5zYWN0aW9uKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEVzb2x2ZVRyYW5zYWN0aW9uPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtdHJhbnNhY3Rpb25zLnBocGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ6IHRoaXMudXNlcl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbl9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoIDw9IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsaWVudEFjY291bnRCYWxhbmNlcygpOiBPYnNlcnZhYmxlPFxuICAgICAgICBFc29sdmVVc2VyQ2xpZW50QWNjb3VudEJhbGFuY2VzIHwgdW5kZWZpbmVkXG4gICAgPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2luR3VhcmQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5nZXQ8XG4gICAgICAgICAgICAgICAgICAgIEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50QmFsYW5jZXNSZWNvcmRbXT5cbiAgICAgICAgICAgICAgICA+KGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1jbGllbnQtYWNjb3VudC1iYWxhbmNlcy5waHBgKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVjb3JkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDbGllbnRCYWxhbmNlcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZVN0YXRlbWVudERvd25sb2FkTGluayhjbGllbnRzX2lkOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkd1YXJkKCk7XG5cbiAgICAgICAgICAgIGlmIChjbGllbnRzX2lkIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VfdXJsID0gYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWdlbmVyYXRlZC1wZGYucGhwYDtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICd3c19pZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmZpZy53c2lkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbGllbnRzX2lkJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFRva2VuKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5X3N0cmluZyA9IHF1ZXJpZXNcbiAgICAgICAgICAgICAgICAubWFwKChxdWVyeSkgPT4gYCR7cXVlcnkua2V5fT0ke3F1ZXJ5LnZhbHVlfWApXG4gICAgICAgICAgICAgICAgLmpvaW4oJyYnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VfdXJsfT8ke3F1ZXJ5X3N0cmluZ31gO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlcXVlc3RFcnBEb2N1bWVudHMoXG4gICAgICAgIHJlcXVlc3RlZF9kb2N1bWVudHM6IEVzb2x2ZUVycERvY3VtZW50UmVxdWVzdFtdLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlRXJwRG9jdW1lbnRzUmVxdWVzdFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgcmVxdWVzdGVkX2RvY3VtZW50cyxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxFc29sdmVTZXRSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LXJlcXVlc3QtZXJwLWRvY3VtZW50LnBocGAsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtODsnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGh0dHBfcmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2luZ2xlSHR0cFJlc3BvbnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXNvbHZlRXJwRG9jdW1lbnRzUmVxdWVzdFJlc3VsdChyZXNwb25zZSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UgfCBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LXJlcXVlc3QtZXJwLWRvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJwRG9jdW1lbnRSZXF1ZXN0cyhcbiAgICAgICAgY2xpZW50c19pZDogbnVtYmVyLFxuICAgICAgICB0eXBlID0gJ2ludm9pY2UnLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubG9naW5HdWFyZCgpO1xuXG4gICAgICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY2xpZW50c19pZCcsIGNsaWVudHNfaWQpO1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndHlwZScsIHR5cGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxFc29sdmVHZXRSZXNwb25zZTxFc29sdmVFcnBEb2N1bWVudFJlcXVlc3RSZWNvcmRbXT4+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtZXJwLWRvY3VtZW50LXJlcXVlc3QucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXJwRG9jdW1lbnRSZXF1ZXN0KHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVXNlckFjY291bnQoXG4gICAgICAgIHJlY29yZDogRXNvbHZlVXNlckFjY291bnRSZWNvcmQsXG4gICAgKTogRXNvbHZlVXNlckFjY291bnQge1xuICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY29yZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCtyZWNvcmQudXNlcmlkICE9PSB0aGlzLl91c2VyX2lkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBhY2NvdW50IHJldHJpZXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVVc2VyQWNjb3VudChyZWNvcmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1VzZXJBZGRyZXNzKFxuICAgICAgICByZWNvcmRzOiBFc29sdmVBZGRyZXNzUmVjb3JkW10sXG4gICAgKTogRXNvbHZlQWRkcmVzc1tdIHtcbiAgICAgICAgY29uc3QgdXNlcl9hZGRyZXNzZXM6IEVzb2x2ZUFkZHJlc3NbXSA9IFtdO1xuXG4gICAgICAgIGlmICghcmVjb3JkcyB8fCB0aGlzLl91c2VyX2lkID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdXNlcl9hZGRyZXNzZXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAoK3JlY29yZC51c2VyaWQgIT09IHRoaXMuX3VzZXJfaWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXNlcl9hZGRyZXNzZXMucHVzaChuZXcgRXNvbHZlQWRkcmVzcyhyZWNvcmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1c2VyX2FkZHJlc3NlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NVc2VyQ2xpZW50cyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmRbXSxcbiAgICApOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFtdIHtcbiAgICAgICAgY29uc3QgdXNlcl9jbGllbnRzOiBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFtdID0gW107XG5cbiAgICAgICAgaWYgKCFyZWNvcmRzIHx8IHRoaXMuX3VzZXJfaWQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1c2VyX2NsaWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICB1c2VyX2NsaWVudHMucHVzaChuZXcgRXNvbHZlVXNlckNsaWVudEFjY291bnQocmVjb3JkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXNlcl9jbGllbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1RyYW5zYWN0aW9ucyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVHJhbnNhY3Rpb25SZWNvcmRbXSxcbiAgICApOiBFc29sdmVUcmFuc2FjdGlvbltdIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zOiBFc29sdmVUcmFuc2FjdGlvbltdID0gW107XG5cbiAgICAgICAgaWYgKHJlY29yZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBFc29sdmVUcmFuc2FjdGlvbihyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zLnB1c2godHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NDbGllbnRCYWxhbmNlcyhcbiAgICAgICAgcmVjb3JkczogRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlc1JlY29yZFtdLFxuICAgICk6IEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50QmFsYW5jZXMgfCB1bmRlZmluZWQge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAoK3JlY29yZC5jbGllbnRzX2lkIDw9IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjYXJ0X3RvdGFscyA9IG5ldyBFc29sdmVDYXJ0VG90YWxzKHJlY29yZC5jYXJ0X3RvdGFscyk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlVXNlckNsaWVudEFjY291bnRCYWxhbmNlcyhcbiAgICAgICAgICAgICAgICArcmVjb3JkLmNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkLmFjY291bnQsXG4gICAgICAgICAgICAgICAgY2FydF90b3RhbHMsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5jcmVkaXRfbGltaXQsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5leHRlcm5hbF9hY2NvdW50X2JhbGFuY2UsXG4gICAgICAgICAgICAgICAgK3JlY29yZC5leHRlcm5hbF9hdmFpbGFibGVfYmFsYW5jZSxcbiAgICAgICAgICAgICAgICArcmVjb3JkLm5ld19leHRlcm5hbF9hdmFpbGFibGVfYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAhIStyZWNvcmQuY3JlZGl0X2xpbWl0X29rYXksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ2luR3VhcmQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJfaWQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudGhyb3dFcnJvcignbG9naW5fcmVxdWlyZWQnLCAnTG9naW4gaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVXNlckxvY2F0aW9uKFxuICAgICAgICBib2R5OiBFc29sdmVMb2NhdGlvbk9wdGlvbixcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUxvY2F0aW9uVXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5wb3N0PEVzb2x2ZVNldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtc2Vzc2lvbi1sb2NhdGlvbi5waHBgLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChodHRwX3Jlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVNpbmdsZUh0dHBSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmVzb2x2ZV9pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGlkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuaGFuZGxlVXBkYXRlU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiArcmVzcG9uc2UuZXNvbHZlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVMb2NhdGlvblVwZGF0ZVJlc3VsdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0VycERvY3VtZW50UmVxdWVzdChcbiAgICAgICAgcmVjb3JkczogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0UmVjb3JkW10sXG4gICAgKTogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10ge1xuICAgICAgICBjb25zdCByZXF1ZXN0czogRXNvbHZlRXJwRG9jdW1lbnRSZXF1ZXN0W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKG5ldyBFc29sdmVFcnBEb2N1bWVudFJlcXVlc3QocmVjb3JkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVxdWVzdHM7XG4gICAgfVxufVxuIl19
@@ -1,8 +1,52 @@
1
1
  import { EsolveStatement } from './esolve-statement.model';
2
2
  export class EsolveUserClientAccount {
3
+ /**
4
+ * @deprecated Use field id` instead
5
+ */
6
+ get esolve_id() {
7
+ return this.id;
8
+ }
3
9
  constructor(record) {
10
+ this.id = 0;
11
+ this.account = '';
12
+ this.branch_code = '';
13
+ this.account_group = '';
14
+ this.pricing_group = '';
15
+ this.company_name = '';
16
+ this.client_contact_person = '';
17
+ this.client_firstname = '';
18
+ this.client_surname = '';
19
+ this.client_email = '';
20
+ this.client_contact_number = '';
21
+ this.client_fax_number = '';
22
+ this.client_cellphone_number = '';
23
+ this.client_id_number = '';
24
+ this.address_description = '';
25
+ this.street = '';
26
+ this.suburb = '';
27
+ this.city = '';
28
+ this.province = '';
29
+ this.country = '';
30
+ this.postal_code = '';
31
+ this.postal_address = '';
32
+ this.delivery_address = '';
33
+ this.latitude = 0;
34
+ this.longitude = 0;
35
+ this.vat_number = '';
36
+ this.ageing = '';
37
+ this.balance_last_updated = '';
38
+ this.client_classification = '';
39
+ this.override_stock_listing_identifiers = '';
40
+ this.requires_transaction_approval = '';
41
+ this.price_list = 0;
42
+ this.loyalty_classification_id = 0;
43
+ this.credit_limit = 0;
44
+ this.pending_invoice_balance = 0;
45
+ this.external_account_balance = 0;
46
+ this.default_sellprice = 0;
47
+ this.is_active = false;
4
48
  if (record) {
5
- this.esolve_id = +(record.id ?? 0);
49
+ this.id = +(record.id ?? 0);
6
50
  this.account = record.account ?? '';
7
51
  this.branch_code = record.branch_code ?? '';
8
52
  this.account_group = record.account_group ?? '';
@@ -18,13 +62,15 @@ export class EsolveUserClientAccount {
18
62
  this.client_id_number = record.client_id_number ?? '';
19
63
  this.address_description = record.address_description ?? '';
20
64
  this.street = record.street ?? '';
21
- this.suburb = record.suburb;
65
+ this.suburb = record.suburb ?? '';
22
66
  this.city = record.city ?? '';
23
67
  this.province = record.province ?? '';
24
68
  this.country = record.country ?? '';
25
69
  this.postal_code = record.postal_code ?? '';
26
70
  this.postal_address = record.postal_address ?? '';
27
71
  this.delivery_address = record.delivery_address ?? '';
72
+ this.latitude = +(record.latitude ?? 0);
73
+ this.longitude = +(record.longitude ?? 0);
28
74
  this.vat_number = record.vat_number ?? '';
29
75
  this.ageing = record.ageing ?? '';
30
76
  this.balance_last_updated = record.balance_last_updated ?? '';
@@ -33,8 +79,6 @@ export class EsolveUserClientAccount {
33
79
  record.override_stock_listing_identifiers ?? '';
34
80
  this.requires_transaction_approval =
35
81
  record.requires_transaction_approval ?? '';
36
- this.latitude = +(record.latitude ?? 0);
37
- this.longitude = +(record.longitude ?? 0);
38
82
  this.price_list = +(record.price_list ?? 0);
39
83
  this.loyalty_classification_id = +(record.loyalty_classification_id ?? 0);
40
84
  this.credit_limit = +(record.credit_limit ?? 0);
@@ -46,4 +90,4 @@ export class EsolveUserClientAccount {
46
90
  }
47
91
  }
48
92
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLXVzZXItY2xpZW50LWFjY291bnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYWNjb3VudC91c2VyLWFjY291bnQvY2xhc3Nlcy9lc29sdmUtdXNlci1jbGllbnQtYWNjb3VudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsTUFBTSxPQUFPLHVCQUF1QjtJQXlDaEMsWUFBWSxNQUErQztRQUN2RCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLGtDQUFrQztnQkFDbkMsTUFBTSxDQUFDLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsNkJBQTZCO2dCQUM5QixNQUFNLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQzlCLE1BQU0sQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLENBQ3hDLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQzVCLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLENBQ3RDLENBQUM7WUFDRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUM3QixNQUFNLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUN2QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUM7WUFFaEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUN6QyxNQUFNLENBQUMsa0JBQWtCLENBQzVCLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgRXNvbHZlU3RhdGVtZW50IH0gZnJvbSAnLi9lc29sdmUtc3RhdGVtZW50Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEVzb2x2ZVVzZXJDbGllbnRBY2NvdW50IHtcbiAgICBwdWJsaWMgZXNvbHZlX2lkPzogbnVtYmVyO1xuICAgIHB1YmxpYyBhY2NvdW50Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBicmFuY2hfY29kZT86IHN0cmluZztcbiAgICBwdWJsaWMgYWNjb3VudF9ncm91cD86IHN0cmluZztcbiAgICBwdWJsaWMgcHJpY2luZ19ncm91cD86IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFueV9uYW1lPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGllbnRfY29udGFjdF9wZXJzb24/OiBzdHJpbmc7XG4gICAgcHVibGljIGNsaWVudF9maXJzdG5hbWU/OiBzdHJpbmc7XG4gICAgcHVibGljIGNsaWVudF9zdXJuYW1lPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGllbnRfZW1haWw/OiBzdHJpbmc7XG4gICAgcHVibGljIGNsaWVudF9jb250YWN0X251bWJlcj86IHN0cmluZztcbiAgICBwdWJsaWMgY2xpZW50X2ZheF9udW1iZXI/OiBzdHJpbmc7XG4gICAgcHVibGljIGNsaWVudF9jZWxscGhvbmVfbnVtYmVyPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGllbnRfaWRfbnVtYmVyPzogc3RyaW5nO1xuICAgIHB1YmxpYyBhZGRyZXNzX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHB1YmxpYyBzdHJlZXQ/OiBzdHJpbmc7XG4gICAgcHVibGljIHN1YnVyYj86IHN0cmluZztcbiAgICBwdWJsaWMgY2l0eT86IHN0cmluZztcbiAgICBwdWJsaWMgcHJvdmluY2U/OiBzdHJpbmc7XG4gICAgcHVibGljIGNvdW50cnk/OiBzdHJpbmc7XG4gICAgcHVibGljIHBvc3RhbF9jb2RlPzogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3N0YWxfYWRkcmVzcz86IHN0cmluZztcbiAgICBwdWJsaWMgZGVsaXZlcnlfYWRkcmVzcz86IHN0cmluZztcbiAgICBwdWJsaWMgdmF0X251bWJlcj86IHN0cmluZztcbiAgICBwdWJsaWMgYWdlaW5nPzogc3RyaW5nO1xuICAgIHB1YmxpYyBiYWxhbmNlX2xhc3RfdXBkYXRlZD86IHN0cmluZztcbiAgICBwdWJsaWMgY2xpZW50X2NsYXNzaWZpY2F0aW9uPzogc3RyaW5nO1xuICAgIHB1YmxpYyBvdmVycmlkZV9zdG9ja19saXN0aW5nX2lkZW50aWZpZXJzPzogc3RyaW5nO1xuICAgIHB1YmxpYyByZXF1aXJlc190cmFuc2FjdGlvbl9hcHByb3ZhbD86IHN0cmluZztcbiAgICBwdWJsaWMgbGF0aXR1ZGU/OiBudW1iZXI7XG4gICAgcHVibGljIGxvbmdpdHVkZT86IG51bWJlcjtcbiAgICBwdWJsaWMgcHJpY2VfbGlzdD86IG51bWJlcjtcbiAgICBwdWJsaWMgbG95YWx0eV9jbGFzc2lmaWNhdGlvbl9pZD86IG51bWJlcjtcbiAgICBwdWJsaWMgY3JlZGl0X2xpbWl0PzogbnVtYmVyO1xuICAgIHB1YmxpYyBwZW5kaW5nX2ludm9pY2VfYmFsYW5jZT86IG51bWJlcjtcbiAgICBwdWJsaWMgZXh0ZXJuYWxfYWNjb3VudF9iYWxhbmNlPzogbnVtYmVyO1xuICAgIHB1YmxpYyBkZWZhdWx0X3NlbGxwcmljZT86IG51bWJlcjtcbiAgICBwdWJsaWMgaXNfYWN0aXZlPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgZXh0ZXJuYWxfc3RhdGVtZW50PzogRXNvbHZlU3RhdGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocmVjb3JkPzogUGFydGlhbDxFc29sdmVVc2VyQ2xpZW50QWNjb3VudFJlY29yZD4pIHtcbiAgICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICAgICAgdGhpcy5lc29sdmVfaWQgPSArKHJlY29yZC5pZCA/PyAwKTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IHJlY29yZC5hY2NvdW50ID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5icmFuY2hfY29kZSA9IHJlY29yZC5icmFuY2hfY29kZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudF9ncm91cCA9IHJlY29yZC5hY2NvdW50X2dyb3VwID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcmljaW5nX2dyb3VwID0gcmVjb3JkLnByaWNpbmdfZ3JvdXAgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNvbXBhbnlfbmFtZSA9IHJlY29yZC5jb21wYW55X25hbWUgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9jb250YWN0X3BlcnNvbiA9IHJlY29yZC5jbGllbnRfY29udGFjdF9wZXJzb24gPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9maXJzdG5hbWUgPSByZWNvcmQuY2xpZW50X2ZpcnN0bmFtZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X3N1cm5hbWUgPSByZWNvcmQuY2xpZW50X3N1cm5hbWUgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9lbWFpbCA9IHJlY29yZC5jbGllbnRfZW1haWwgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9jb250YWN0X251bWJlciA9IHJlY29yZC5jbGllbnRfY29udGFjdF9udW1iZXIgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9mYXhfbnVtYmVyID0gcmVjb3JkLmNsaWVudF9mYXhfbnVtYmVyID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5jbGllbnRfY2VsbHBob25lX251bWJlciA9IHJlY29yZC5jbGllbnRfY2VsbHBob25lX251bWJlciA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2lkX251bWJlciA9IHJlY29yZC5jbGllbnRfaWRfbnVtYmVyID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzX2Rlc2NyaXB0aW9uID0gcmVjb3JkLmFkZHJlc3NfZGVzY3JpcHRpb24gPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnN0cmVldCA9IHJlY29yZC5zdHJlZXQgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnN1YnVyYiA9IHJlY29yZC5zdWJ1cmI7XG4gICAgICAgICAgICB0aGlzLmNpdHkgPSByZWNvcmQuY2l0eSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvdmluY2UgPSByZWNvcmQucHJvdmluY2UgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNvdW50cnkgPSByZWNvcmQuY291bnRyeSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucG9zdGFsX2NvZGUgPSByZWNvcmQucG9zdGFsX2NvZGUgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnBvc3RhbF9hZGRyZXNzID0gcmVjb3JkLnBvc3RhbF9hZGRyZXNzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5kZWxpdmVyeV9hZGRyZXNzID0gcmVjb3JkLmRlbGl2ZXJ5X2FkZHJlc3MgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnZhdF9udW1iZXIgPSByZWNvcmQudmF0X251bWJlciA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuYWdlaW5nID0gcmVjb3JkLmFnZWluZyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZV9sYXN0X3VwZGF0ZWQgPSByZWNvcmQuYmFsYW5jZV9sYXN0X3VwZGF0ZWQgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9jbGFzc2lmaWNhdGlvbiA9IHJlY29yZC5jbGllbnRfY2xhc3NpZmljYXRpb24gPz8gJyc7XG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlX3N0b2NrX2xpc3RpbmdfaWRlbnRpZmllcnMgPVxuICAgICAgICAgICAgICAgIHJlY29yZC5vdmVycmlkZV9zdG9ja19saXN0aW5nX2lkZW50aWZpZXJzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5yZXF1aXJlc190cmFuc2FjdGlvbl9hcHByb3ZhbCA9XG4gICAgICAgICAgICAgICAgcmVjb3JkLnJlcXVpcmVzX3RyYW5zYWN0aW9uX2FwcHJvdmFsID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9ICsocmVjb3JkLmxhdGl0dWRlID8/IDApO1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSArKHJlY29yZC5sb25naXR1ZGUgPz8gMCk7XG4gICAgICAgICAgICB0aGlzLnByaWNlX2xpc3QgPSArKHJlY29yZC5wcmljZV9saXN0ID8/IDApO1xuICAgICAgICAgICAgdGhpcy5sb3lhbHR5X2NsYXNzaWZpY2F0aW9uX2lkID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQubG95YWx0eV9jbGFzc2lmaWNhdGlvbl9pZCA/PyAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRfbGltaXQgPSArKHJlY29yZC5jcmVkaXRfbGltaXQgPz8gMCk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdfaW52b2ljZV9iYWxhbmNlID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQucGVuZGluZ19pbnZvaWNlX2JhbGFuY2UgPz8gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxfYWNjb3VudF9iYWxhbmNlID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQuZXh0ZXJuYWxfYWNjb3VudF9iYWxhbmNlID8/IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRfc2VsbHByaWNlID0gKyhyZWNvcmQuZGVmYXVsdF9zZWxscHJpY2UgPz8gMCk7XG4gICAgICAgICAgICB0aGlzLmlzX2FjdGl2ZSA9ICEhKyhyZWNvcmQuaXNfYWN0aXZlID8/IGZhbHNlKTtcblxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbF9zdGF0ZW1lbnQgPSBuZXcgRXNvbHZlU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgIHJlY29yZC5leHRlcm5hbF9zdGF0ZW1lbnQsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLXVzZXItY2xpZW50LWFjY291bnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYWNjb3VudC91c2VyLWFjY291bnQvY2xhc3Nlcy9lc29sdmUtdXNlci1jbGllbnQtYWNjb3VudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsTUFBTSxPQUFPLHVCQUF1QjtJQUVoQzs7T0FFRztJQUNILElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQTRDRCxZQUFZLE1BQStDO1FBbERwRCxPQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUVAsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRXRCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsdUNBQWtDLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLGtDQUE2QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUM1Qiw2QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFDN0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJckIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBRTlDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztZQUV0RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUxQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLGtDQUFrQztnQkFDbkMsTUFBTSxDQUFDLGtDQUFrQyxJQUFJLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsNkJBQTZCO2dCQUM5QixNQUFNLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLENBQUMsQ0FDOUIsTUFBTSxDQUFDLHlCQUF5QixJQUFJLENBQUMsQ0FDeEMsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FDNUIsTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FDdEMsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQzdCLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLENBQ3ZDLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDNUIsQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFc29sdmVVc2VyQ2xpZW50QWNjb3VudFJlY29yZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBFc29sdmVTdGF0ZW1lbnQgfSBmcm9tICcuL2Vzb2x2ZS1zdGF0ZW1lbnQubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRXNvbHZlVXNlckNsaWVudEFjY291bnQge1xuICAgIHB1YmxpYyBpZCA9IDA7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGZpZWxkIGlkYCBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIGdldCBlc29sdmVfaWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY291bnQgPSAnJztcbiAgICBwdWJsaWMgYnJhbmNoX2NvZGUgPSAnJztcbiAgICBwdWJsaWMgYWNjb3VudF9ncm91cCA9ICcnO1xuICAgIHB1YmxpYyBwcmljaW5nX2dyb3VwID0gJyc7XG4gICAgcHVibGljIGNvbXBhbnlfbmFtZSA9ICcnO1xuXG4gICAgcHVibGljIGNsaWVudF9jb250YWN0X3BlcnNvbiA9ICcnO1xuICAgIHB1YmxpYyBjbGllbnRfZmlyc3RuYW1lID0gJyc7XG4gICAgcHVibGljIGNsaWVudF9zdXJuYW1lID0gJyc7XG4gICAgcHVibGljIGNsaWVudF9lbWFpbCA9ICcnO1xuICAgIHB1YmxpYyBjbGllbnRfY29udGFjdF9udW1iZXIgPSAnJztcbiAgICBwdWJsaWMgY2xpZW50X2ZheF9udW1iZXIgPSAnJztcbiAgICBwdWJsaWMgY2xpZW50X2NlbGxwaG9uZV9udW1iZXIgPSAnJztcbiAgICBwdWJsaWMgY2xpZW50X2lkX251bWJlciA9ICcnO1xuXG4gICAgcHVibGljIGFkZHJlc3NfZGVzY3JpcHRpb24gPSAnJztcbiAgICBwdWJsaWMgc3RyZWV0ID0gJyc7XG4gICAgcHVibGljIHN1YnVyYiA9ICcnO1xuICAgIHB1YmxpYyBjaXR5ID0gJyc7XG4gICAgcHVibGljIHByb3ZpbmNlID0gJyc7XG4gICAgcHVibGljIGNvdW50cnkgPSAnJztcbiAgICBwdWJsaWMgcG9zdGFsX2NvZGUgPSAnJztcbiAgICBwdWJsaWMgcG9zdGFsX2FkZHJlc3MgPSAnJztcbiAgICBwdWJsaWMgZGVsaXZlcnlfYWRkcmVzcyA9ICcnO1xuICAgIHB1YmxpYyBsYXRpdHVkZSA9IDA7XG4gICAgcHVibGljIGxvbmdpdHVkZSA9IDA7XG5cbiAgICBwdWJsaWMgdmF0X251bWJlciA9ICcnO1xuICAgIHB1YmxpYyBhZ2VpbmcgPSAnJztcbiAgICBwdWJsaWMgYmFsYW5jZV9sYXN0X3VwZGF0ZWQgPSAnJztcbiAgICBwdWJsaWMgY2xpZW50X2NsYXNzaWZpY2F0aW9uID0gJyc7XG4gICAgcHVibGljIG92ZXJyaWRlX3N0b2NrX2xpc3RpbmdfaWRlbnRpZmllcnMgPSAnJztcbiAgICBwdWJsaWMgcmVxdWlyZXNfdHJhbnNhY3Rpb25fYXBwcm92YWwgPSAnJztcbiAgICBwdWJsaWMgcHJpY2VfbGlzdCA9IDA7XG4gICAgcHVibGljIGxveWFsdHlfY2xhc3NpZmljYXRpb25faWQgPSAwO1xuICAgIHB1YmxpYyBjcmVkaXRfbGltaXQgPSAwO1xuICAgIHB1YmxpYyBwZW5kaW5nX2ludm9pY2VfYmFsYW5jZSA9IDA7XG4gICAgcHVibGljIGV4dGVybmFsX2FjY291bnRfYmFsYW5jZSA9IDA7XG4gICAgcHVibGljIGRlZmF1bHRfc2VsbHByaWNlID0gMDtcbiAgICBwdWJsaWMgaXNfYWN0aXZlID0gZmFsc2U7XG4gICAgcHVibGljIGV4dGVybmFsX3N0YXRlbWVudD86IEVzb2x2ZVN0YXRlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHJlY29yZD86IFBhcnRpYWw8RXNvbHZlVXNlckNsaWVudEFjY291bnRSZWNvcmQ+KSB7XG4gICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSArKHJlY29yZC5pZCA/PyAwKTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IHJlY29yZC5hY2NvdW50ID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5icmFuY2hfY29kZSA9IHJlY29yZC5icmFuY2hfY29kZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudF9ncm91cCA9IHJlY29yZC5hY2NvdW50X2dyb3VwID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcmljaW5nX2dyb3VwID0gcmVjb3JkLnByaWNpbmdfZ3JvdXAgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNvbXBhbnlfbmFtZSA9IHJlY29yZC5jb21wYW55X25hbWUgPz8gJyc7XG5cbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2NvbnRhY3RfcGVyc29uID0gcmVjb3JkLmNsaWVudF9jb250YWN0X3BlcnNvbiA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2ZpcnN0bmFtZSA9IHJlY29yZC5jbGllbnRfZmlyc3RuYW1lID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5jbGllbnRfc3VybmFtZSA9IHJlY29yZC5jbGllbnRfc3VybmFtZSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2VtYWlsID0gcmVjb3JkLmNsaWVudF9lbWFpbCA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2NvbnRhY3RfbnVtYmVyID0gcmVjb3JkLmNsaWVudF9jb250YWN0X251bWJlciA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2ZheF9udW1iZXIgPSByZWNvcmQuY2xpZW50X2ZheF9udW1iZXIgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmNsaWVudF9jZWxscGhvbmVfbnVtYmVyID0gcmVjb3JkLmNsaWVudF9jZWxscGhvbmVfbnVtYmVyID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5jbGllbnRfaWRfbnVtYmVyID0gcmVjb3JkLmNsaWVudF9pZF9udW1iZXIgPz8gJyc7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc19kZXNjcmlwdGlvbiA9IHJlY29yZC5hZGRyZXNzX2Rlc2NyaXB0aW9uID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5zdHJlZXQgPSByZWNvcmQuc3RyZWV0ID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5zdWJ1cmIgPSByZWNvcmQuc3VidXJiID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5jaXR5ID0gcmVjb3JkLmNpdHkgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByb3ZpbmNlID0gcmVjb3JkLnByb3ZpbmNlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5ID0gcmVjb3JkLmNvdW50cnkgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnBvc3RhbF9jb2RlID0gcmVjb3JkLnBvc3RhbF9jb2RlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wb3N0YWxfYWRkcmVzcyA9IHJlY29yZC5wb3N0YWxfYWRkcmVzcyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlfYWRkcmVzcyA9IHJlY29yZC5kZWxpdmVyeV9hZGRyZXNzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9ICsocmVjb3JkLmxhdGl0dWRlID8/IDApO1xuICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSArKHJlY29yZC5sb25naXR1ZGUgPz8gMCk7XG5cbiAgICAgICAgICAgIHRoaXMudmF0X251bWJlciA9IHJlY29yZC52YXRfbnVtYmVyID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5hZ2VpbmcgPSByZWNvcmQuYWdlaW5nID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5iYWxhbmNlX2xhc3RfdXBkYXRlZCA9IHJlY29yZC5iYWxhbmNlX2xhc3RfdXBkYXRlZCA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuY2xpZW50X2NsYXNzaWZpY2F0aW9uID0gcmVjb3JkLmNsaWVudF9jbGFzc2lmaWNhdGlvbiA/PyAnJztcbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVfc3RvY2tfbGlzdGluZ19pZGVudGlmaWVycyA9XG4gICAgICAgICAgICAgICAgcmVjb3JkLm92ZXJyaWRlX3N0b2NrX2xpc3RpbmdfaWRlbnRpZmllcnMgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVzX3RyYW5zYWN0aW9uX2FwcHJvdmFsID1cbiAgICAgICAgICAgICAgICByZWNvcmQucmVxdWlyZXNfdHJhbnNhY3Rpb25fYXBwcm92YWwgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLnByaWNlX2xpc3QgPSArKHJlY29yZC5wcmljZV9saXN0ID8/IDApO1xuICAgICAgICAgICAgdGhpcy5sb3lhbHR5X2NsYXNzaWZpY2F0aW9uX2lkID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQubG95YWx0eV9jbGFzc2lmaWNhdGlvbl9pZCA/PyAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRfbGltaXQgPSArKHJlY29yZC5jcmVkaXRfbGltaXQgPz8gMCk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdfaW52b2ljZV9iYWxhbmNlID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQucGVuZGluZ19pbnZvaWNlX2JhbGFuY2UgPz8gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxfYWNjb3VudF9iYWxhbmNlID0gKyhcbiAgICAgICAgICAgICAgICByZWNvcmQuZXh0ZXJuYWxfYWNjb3VudF9iYWxhbmNlID8/IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRfc2VsbHByaWNlID0gKyhyZWNvcmQuZGVmYXVsdF9zZWxscHJpY2UgPz8gMCk7XG4gICAgICAgICAgICB0aGlzLmlzX2FjdGl2ZSA9ICEhKyhyZWNvcmQuaXNfYWN0aXZlID8/IGZhbHNlKTtcblxuICAgICAgICAgICAgdGhpcy5leHRlcm5hbF9zdGF0ZW1lbnQgPSBuZXcgRXNvbHZlU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgIHJlY29yZC5leHRlcm5hbF9zdGF0ZW1lbnQsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -146,13 +146,13 @@ export class EsolveAlbumsService {
146
146
  }
147
147
  return album_images;
148
148
  }
149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAlbumsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
150
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAlbumsService, providedIn: 'root' }); }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAlbumsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
150
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAlbumsService, providedIn: 'root' }); }
151
151
  }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EsolveAlbumsService, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: EsolveAlbumsService, decorators: [{
153
153
  type: Injectable,
154
154
  args: [{
155
155
  providedIn: 'root',
156
156
  }]
157
157
  }] });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWFsYnVtcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy1lc29sdmUtY29ubmVjdC9zcmMvbGliL2FsYnVtcy9zZXJ2aWNlcy9lc29sdmUtYWxidW1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakQsT0FBTyxFQUNILFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsR0FDbEIsTUFBTSxZQUFZLENBQUM7O0FBV3BCLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJcUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixXQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0EyTXpEO0lBek1HOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxTQUFpQjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMxQixVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0IsQ0FBQyxVQUFrQjtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMxQixVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJ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RUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVzb2x2ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlJztcblxuaW1wb3J0IHsgRXNvbHZlR2V0UmVzcG9uc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5pbXBvcnQge1xuICAgIEVzb2x2ZUFsYnVtLFxuICAgIEVzb2x2ZUFsYnVtSW1hZ2UsXG4gICAgRXNvbHZlQWxidW1JbWFnZUxpc3QsXG4gICAgRXNvbHZlQWxidW1MaXN0LFxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWxidW1JbWFnZU9wdGlvbnMsXG4gICAgRXNvbHZlQWxidW1JbWFnZVJlY29yZCxcbiAgICBFc29sdmVBbGJ1bU9wdGlvbnMsXG4gICAgRXNvbHZlQWxidW1SZWNvcmQsXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFc29sdmVBbGJ1bXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoRXNvbHZlQ29uZmlnU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhIGFsYnVtIGJhc2VkIG9uIGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbGJ1bV9pZCAtIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXF1ZSBpZCBvZiBhIGFsYnVtLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB0eXBlIEVzb2x2ZUFsYnVtXG4gICAgICovXG4gICAgcHVibGljIGdldEFsYnVtKGFsYnVtc19pZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVBbGJ1bT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICAgICAgICBmcm9tT2JqZWN0OiB7IGFsYnVtc19pZCB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGJ1bVNpbmdsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGFsYnVtIGJhc2VkIG9uIGl0cyBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgLSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBhbGJ1bS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgdHlwZSBFc29sdmVBbGJ1bS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxidW1Gcm9tSWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgICAgICAgIGZyb21PYmplY3Q6IHsgaWRlbnRpZmllciB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGJ1bVNpbmdsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGEgbGlzdCBvZiBhbGJ1bXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgZmlsdGVyaW5nIGFsYnVtc1xuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB0eXBlIEVzb2x2ZUFsYnVtTGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxidW1zKFxuICAgICAgICBvcHRpb25zPzogRXNvbHZlQWxidW1PcHRpb25zLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlQWxidW1MaXN0PiB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChvcHRpb25zPy5hbGJ1bXNfaWQpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2FsYnVtc19pZCcsIG9wdGlvbnMuYWxidW1zX2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdpZGVudGlmaWVyJywgb3B0aW9ucy5pZGVudGlmaWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5wYWdlKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5yb3dzKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyb3dzJywgb3B0aW9ucy5yb3dzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsYnVtc1N0cmVhbShwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucHJvY2Vzc0FsYnVtcyhyZXNwb25zZS5yZWNvcmRzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gKyhyZXNwb25zZS5hZGRpdGlvbmFsX2RhdGEudG90YWxfcmVjb3JkcyA/PyAwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBvcHRpb25zPy5yb3dzID8/IHRvdGFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBvcHRpb25zPy5wYWdlIHx8IDE7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZUFsYnVtTGlzdChpdGVtcywgcGFnZSwgcm93cywgdG90YWwpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgYSBsaXN0IG9mIGFsYnVtIGltYWdlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9uc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBmaWx0ZXJpbmcgYWxidW0gaW1hZ2VzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHR5cGUgRXNvbHZlQWxidW1JbWFnZUxpc3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsYnVtSW1hZ2VzKFxuICAgICAgICBvcHRpb25zOiBFc29sdmVBbGJ1bUltYWdlT3B0aW9ucyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtSW1hZ2VMaXN0PiB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgIGNvbnN0IGFsYnVtc19pZCA9IG9wdGlvbnM/LmFsYnVtc19pZDtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IG9wdGlvbnM/LmlkZW50aWZpZXI7XG5cbiAgICAgICAgaWYgKCFhbGJ1bXNfaWQgJiYgIWlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICgpID0+IG5ldyBFcnJvcignQWxidW0gaWQgb3IgaWRlbnRpZmllciBpcyByZXF1aXJlZCAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxidW1zX2lkKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdhbGJ1bXNfaWQnLCBhbGJ1bXNfaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2lkZW50aWZpZXInLCBpZGVudGlmaWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5wYWdlKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5yb3dzKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyb3dzJywgb3B0aW9ucy5yb3dzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQWxidW1JbWFnZVJlY29yZFtdPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWFsYnVtLWltYWdlcy5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnByb2Nlc3NBbGJ1bUltYWdlcyhyZXNwb25zZS5yZWNvcmRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9ICsoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5hZGRpdGlvbmFsX2RhdGEudG90YWxfcmVjb3JkcyA/PyAwXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93cyA9IG9wdGlvbnMucm93cyA/PyB0b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCAxO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQWxidW1JbWFnZUxpc3QoaXRlbXMsIHBhZ2UsIHJvd3MsIHRvdGFsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGJ1bVNpbmdsZShwYXJhbXM6IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsYnVtc1N0cmVhbShwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSByZXNwb25zZS5yZWNvcmRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0FsYnVtKHJlY29yZCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsYnVtc1N0cmVhbShcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZUFsYnVtUmVjb3JkW10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZUFsYnVtUmVjb3JkW10+PihcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hbGJ1bXMucGhwYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0FsYnVtcyhyZWNvcmRzOiBFc29sdmVBbGJ1bVJlY29yZFtdKTogRXNvbHZlQWxidW1bXSB7XG4gICAgICAgIGNvbnN0IGFsYnVtczogRXNvbHZlQWxidW1bXSA9IFtdO1xuXG4gICAgICAgIGlmIChyZWNvcmRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxidW0gPSB0aGlzLnByb2Nlc3NBbGJ1bShyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgYWxidW1zLnB1c2goYWxidW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsYnVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NBbGJ1bShyZWNvcmQ6IEVzb2x2ZUFsYnVtUmVjb3JkKTogRXNvbHZlQWxidW0ge1xuICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZUFsYnVtKHJlY29yZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWxidW1JbWFnZXMoXG4gICAgICAgIHJlY29yZHM6IEVzb2x2ZUFsYnVtSW1hZ2VSZWNvcmRbXSxcbiAgICApOiBFc29sdmVBbGJ1bUltYWdlW10ge1xuICAgICAgICBjb25zdCBhbGJ1bV9pbWFnZXM6IEVzb2x2ZUFsYnVtSW1hZ2VbXSA9IFtdO1xuXG4gICAgICAgIGlmIChyZWNvcmRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxidW1faW1hZ2UgPSBuZXcgRXNvbHZlQWxidW1JbWFnZShyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgYWxidW1faW1hZ2VzLnB1c2goYWxidW1faW1hZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsYnVtX2ltYWdlcztcbiAgICB9XG59XG4iXX0=
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWFsYnVtcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy1lc29sdmUtY29ubmVjdC9zcmMvbGliL2FsYnVtcy9zZXJ2aWNlcy9lc29sdmUtYWxidW1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakQsT0FBTyxFQUNILFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsR0FDbEIsTUFBTSxZQUFZLENBQUM7O0FBV3BCLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJcUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixXQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0EyTXpEO0lBek1HOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxTQUFpQjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMxQixVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0IsQ0FBQyxVQUFrQjtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMxQixVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUU7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQ1osT0FBNEI7UUFFNUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUU5QixJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUN0QixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNiLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxRQUFRLENBQUM7WUFDbkIsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRW5ELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUU3RCxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVoQyxPQUFPLElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUNqQixPQUFnQztRQUVoQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsQ0FBQztRQUV2QyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsT0FBTyxVQUFVLENBQ2IsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FDekQsQ0FBQztRQUNOLENBQUM7UUFFRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ1gsR0FBRyxDQUNBLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLHVCQUF1QixFQUM3QztZQUNJLE1BQU07U0FDVCxDQUNKO2FBQ0EsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2IsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFFBQVEsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV4RCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQ1gsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUM5QyxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFFL0IsT0FBTyxJQUFJLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQWtCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3BDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2IsSUFDSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVM7Z0JBQzlCLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDOUIsQ0FBQztnQkFDQyxNQUFNLFFBQVEsQ0FBQztZQUNuQixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQ25CLE1BQW1CO1FBRW5CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2hCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLGlCQUFpQixFQUN2QztZQUNJLE1BQU07U0FDVCxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQTRCO1FBQzlDLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFFakMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXhDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQXlCO1FBQzFDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLGtCQUFrQixDQUN0QixPQUFpQztRQUVqQyxNQUFNLFlBQVksR0FBdUIsRUFBRSxDQUFDO1FBRTVDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQzs4R0E1TVEsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVzb2x2ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlJztcblxuaW1wb3J0IHsgRXNvbHZlR2V0UmVzcG9uc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5pbXBvcnQge1xuICAgIEVzb2x2ZUFsYnVtLFxuICAgIEVzb2x2ZUFsYnVtSW1hZ2UsXG4gICAgRXNvbHZlQWxidW1JbWFnZUxpc3QsXG4gICAgRXNvbHZlQWxidW1MaXN0LFxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG4gICAgRXNvbHZlQWxidW1JbWFnZU9wdGlvbnMsXG4gICAgRXNvbHZlQWxidW1JbWFnZVJlY29yZCxcbiAgICBFc29sdmVBbGJ1bU9wdGlvbnMsXG4gICAgRXNvbHZlQWxidW1SZWNvcmQsXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFc29sdmVBbGJ1bXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoRXNvbHZlQ29uZmlnU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhIGFsYnVtIGJhc2VkIG9uIGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbGJ1bV9pZCAtIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXF1ZSBpZCBvZiBhIGFsYnVtLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB0eXBlIEVzb2x2ZUFsYnVtXG4gICAgICovXG4gICAgcHVibGljIGdldEFsYnVtKGFsYnVtc19pZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFc29sdmVBbGJ1bT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7XG4gICAgICAgICAgICBmcm9tT2JqZWN0OiB7IGFsYnVtc19pZCB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGJ1bVNpbmdsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGFsYnVtIGJhc2VkIG9uIGl0cyBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgLSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBhbGJ1bS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGFuIE9ic2VydmFibGUgb2YgdHlwZSBFc29sdmVBbGJ1bS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxidW1Gcm9tSWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtcbiAgICAgICAgICAgIGZyb21PYmplY3Q6IHsgaWRlbnRpZmllciB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGJ1bVNpbmdsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGEgbGlzdCBvZiBhbGJ1bXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgZmlsdGVyaW5nIGFsYnVtc1xuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSBvZiB0eXBlIEVzb2x2ZUFsYnVtTGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxidW1zKFxuICAgICAgICBvcHRpb25zPzogRXNvbHZlQWxidW1PcHRpb25zLFxuICAgICk6IE9ic2VydmFibGU8RXNvbHZlQWxidW1MaXN0PiB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChvcHRpb25zPy5hbGJ1bXNfaWQpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2FsYnVtc19pZCcsIG9wdGlvbnMuYWxidW1zX2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdpZGVudGlmaWVyJywgb3B0aW9ucy5pZGVudGlmaWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5wYWdlKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5yb3dzKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyb3dzJywgb3B0aW9ucy5yb3dzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsYnVtc1N0cmVhbShwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucHJvY2Vzc0FsYnVtcyhyZXNwb25zZS5yZWNvcmRzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gKyhyZXNwb25zZS5hZGRpdGlvbmFsX2RhdGEudG90YWxfcmVjb3JkcyA/PyAwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBvcHRpb25zPy5yb3dzID8/IHRvdGFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBvcHRpb25zPy5wYWdlIHx8IDE7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZUFsYnVtTGlzdChpdGVtcywgcGFnZSwgcm93cywgdG90YWwpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgYSBsaXN0IG9mIGFsYnVtIGltYWdlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9uc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBmaWx0ZXJpbmcgYWxidW0gaW1hZ2VzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIHR5cGUgRXNvbHZlQWxidW1JbWFnZUxpc3QuXG4gICAgICovXG4gICAgcHVibGljIGdldEFsYnVtSW1hZ2VzKFxuICAgICAgICBvcHRpb25zOiBFc29sdmVBbGJ1bUltYWdlT3B0aW9ucyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtSW1hZ2VMaXN0PiB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgIGNvbnN0IGFsYnVtc19pZCA9IG9wdGlvbnM/LmFsYnVtc19pZDtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IG9wdGlvbnM/LmlkZW50aWZpZXI7XG5cbiAgICAgICAgaWYgKCFhbGJ1bXNfaWQgJiYgIWlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICgpID0+IG5ldyBFcnJvcignQWxidW0gaWQgb3IgaWRlbnRpZmllciBpcyByZXF1aXJlZCAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxidW1zX2lkKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdhbGJ1bXNfaWQnLCBhbGJ1bXNfaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2lkZW50aWZpZXInLCBpZGVudGlmaWVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5wYWdlKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgb3B0aW9ucy5wYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5yb3dzKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyb3dzJywgb3B0aW9ucy5yb3dzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQ8RXNvbHZlR2V0UmVzcG9uc2U8RXNvbHZlQWxidW1JbWFnZVJlY29yZFtdPj4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWFsYnVtLWltYWdlcy5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnByb2Nlc3NBbGJ1bUltYWdlcyhyZXNwb25zZS5yZWNvcmRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9ICsoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5hZGRpdGlvbmFsX2RhdGEudG90YWxfcmVjb3JkcyA/PyAwXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93cyA9IG9wdGlvbnMucm93cyA/PyB0b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCAxO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNvbHZlQWxidW1JbWFnZUxpc3QoaXRlbXMsIHBhZ2UsIHJvd3MsIHRvdGFsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGJ1bVNpbmdsZShwYXJhbXM6IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPEVzb2x2ZUFsYnVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsYnVtc1N0cmVhbShwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSByZXNwb25zZS5yZWNvcmRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0FsYnVtKHJlY29yZCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsYnVtc1N0cmVhbShcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZUFsYnVtUmVjb3JkW10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEVzb2x2ZUdldFJlc3BvbnNlPEVzb2x2ZUFsYnVtUmVjb3JkW10+PihcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaV91cmx9L2dldC1hbGJ1bXMucGhwYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0FsYnVtcyhyZWNvcmRzOiBFc29sdmVBbGJ1bVJlY29yZFtdKTogRXNvbHZlQWxidW1bXSB7XG4gICAgICAgIGNvbnN0IGFsYnVtczogRXNvbHZlQWxidW1bXSA9IFtdO1xuXG4gICAgICAgIGlmIChyZWNvcmRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxidW0gPSB0aGlzLnByb2Nlc3NBbGJ1bShyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgYWxidW1zLnB1c2goYWxidW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsYnVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NBbGJ1bShyZWNvcmQ6IEVzb2x2ZUFsYnVtUmVjb3JkKTogRXNvbHZlQWxidW0ge1xuICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZUFsYnVtKHJlY29yZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWxidW1JbWFnZXMoXG4gICAgICAgIHJlY29yZHM6IEVzb2x2ZUFsYnVtSW1hZ2VSZWNvcmRbXSxcbiAgICApOiBFc29sdmVBbGJ1bUltYWdlW10ge1xuICAgICAgICBjb25zdCBhbGJ1bV9pbWFnZXM6IEVzb2x2ZUFsYnVtSW1hZ2VbXSA9IFtdO1xuXG4gICAgICAgIGlmIChyZWNvcmRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxidW1faW1hZ2UgPSBuZXcgRXNvbHZlQWxidW1JbWFnZShyZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgYWxidW1faW1hZ2VzLnB1c2goYWxidW1faW1hZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsYnVtX2ltYWdlcztcbiAgICB9XG59XG4iXX0=