@myclub_se/data-access 3.7.10 → 3.7.11

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 (180) hide show
  1. package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +1 -8
  2. package/esm2022/lib/authentication/authentication.interceptor.mjs +6 -8
  3. package/esm2022/lib/authentication/authentication.service.mjs +8 -11
  4. package/esm2022/lib/authentication/guards/authenticated.guard.mjs +4 -6
  5. package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +4 -7
  6. package/esm2022/lib/data-access.module.mjs +6 -6
  7. package/esm2022/lib/maintenance/maintenance.interceptor.mjs +4 -5
  8. package/esm2022/lib/models/activity-extra-member.mjs +1 -8
  9. package/esm2022/lib/models/activity-invite.mjs +1 -23
  10. package/esm2022/lib/models/activity-location-group.mjs +1 -7
  11. package/esm2022/lib/models/activity-location-part.mjs +1 -3
  12. package/esm2022/lib/models/activity-location-tag.mjs +1 -6
  13. package/esm2022/lib/models/activity-location.mjs +1 -11
  14. package/esm2022/lib/models/activity-participant.mjs +1 -8
  15. package/esm2022/lib/models/activity-question-connection.mjs +1 -8
  16. package/esm2022/lib/models/activity-question-response.mjs +1 -3
  17. package/esm2022/lib/models/activity-question.mjs +1 -8
  18. package/esm2022/lib/models/activity-rule-relation.mjs +1 -9
  19. package/esm2022/lib/models/activity-rule.mjs +1 -8
  20. package/esm2022/lib/models/activity-settings.mjs +1 -18
  21. package/esm2022/lib/models/activity-type.mjs +1 -9
  22. package/esm2022/lib/models/activity-waiting-list-entry.mjs +1 -16
  23. package/esm2022/lib/models/activity.mjs +1 -82
  24. package/esm2022/lib/models/app-settings.mjs +1 -5
  25. package/esm2022/lib/models/auth/auth-member.mjs +3 -7
  26. package/esm2022/lib/models/auth/auth-section.mjs +1 -6
  27. package/esm2022/lib/models/auth/auth-team-section.mjs +1 -3
  28. package/esm2022/lib/models/auth/auth-team.mjs +1 -6
  29. package/esm2022/lib/models/auth/auth.mjs +1 -17
  30. package/esm2022/lib/models/authentication.mjs +1 -3
  31. package/esm2022/lib/models/bookable-item.mjs +1 -11
  32. package/esm2022/lib/models/bookable-part.mjs +1 -3
  33. package/esm2022/lib/models/bookable-tag.mjs +1 -6
  34. package/esm2022/lib/models/booking-calendar-application-time.mjs +1 -33
  35. package/esm2022/lib/models/booking-calendar-slot-session.mjs +1 -35
  36. package/esm2022/lib/models/booking-calendar-slot-validate-copy-result.mjs +1 -5
  37. package/esm2022/lib/models/booking-calendar-slot.mjs +1 -26
  38. package/esm2022/lib/models/booking-calendar.mjs +1 -33
  39. package/esm2022/lib/models/booking-settings.mjs +1 -8
  40. package/esm2022/lib/models/booking-slot-filter.mjs +1 -12
  41. package/esm2022/lib/models/calendar-event.mjs +1 -16
  42. package/esm2022/lib/models/calendar.mjs +1 -6
  43. package/esm2022/lib/models/card/card-deal.mjs +1 -6
  44. package/esm2022/lib/models/card/card-logo-urls.mjs +1 -9
  45. package/esm2022/lib/models/card/card-logo.mjs +1 -4
  46. package/esm2022/lib/models/card/card-member-ticket.mjs +1 -7
  47. package/esm2022/lib/models/card/card-theme.mjs +1 -6
  48. package/esm2022/lib/models/card/card-ticket-location.mjs +1 -5
  49. package/esm2022/lib/models/card/card-ticket.mjs +1 -17
  50. package/esm2022/lib/models/card/card.mjs +1 -9
  51. package/esm2022/lib/models/card/home-team.mjs +1 -4
  52. package/esm2022/lib/models/card/member-card.mjs +1 -11
  53. package/esm2022/lib/models/card/search-member-card.mjs +1 -5
  54. package/esm2022/lib/models/card/selected-field.mjs +1 -3
  55. package/esm2022/lib/models/club-image.mjs +1 -14
  56. package/esm2022/lib/models/club-section.mjs +1 -3
  57. package/esm2022/lib/models/club.mjs +1 -3
  58. package/esm2022/lib/models/collection.mjs +1 -5
  59. package/esm2022/lib/models/contact.mjs +1 -19
  60. package/esm2022/lib/models/databank-category.mjs +1 -7
  61. package/esm2022/lib/models/databank-item.mjs +1 -7
  62. package/esm2022/lib/models/directory.mjs +1 -10
  63. package/esm2022/lib/models/email.mjs +1 -4
  64. package/esm2022/lib/models/event.mjs +1 -28
  65. package/esm2022/lib/models/external-link.mjs +1 -3
  66. package/esm2022/lib/models/feature-flags.mjs +1 -14
  67. package/esm2022/lib/models/file-object.mjs +1 -10
  68. package/esm2022/lib/models/general-image.mjs +1 -4
  69. package/esm2022/lib/models/group-role.mjs +1 -7
  70. package/esm2022/lib/models/guest.mjs +1 -5
  71. package/esm2022/lib/models/image-urls.mjs +1 -6
  72. package/esm2022/lib/models/invoice/member-fee.mjs +1 -6
  73. package/esm2022/lib/models/invoice/member-invoice-row.mjs +1 -14
  74. package/esm2022/lib/models/invoice/member-invoice.mjs +1 -24
  75. package/esm2022/lib/models/invoice/payment-attempt.mjs +1 -10
  76. package/esm2022/lib/models/invoice/payment-order-row.mjs +1 -3
  77. package/esm2022/lib/models/invoice/payment-order.mjs +1 -18
  78. package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +1 -12
  79. package/esm2022/lib/models/invoice/payment-types/giro.mjs +1 -7
  80. package/esm2022/lib/models/invoice/payment-types/swish.mjs +1 -14
  81. package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +1 -8
  82. package/esm2022/lib/models/invoice/search-member-invoice.mjs +1 -10
  83. package/esm2022/lib/models/invoice/swish-qr-code.mjs +1 -2
  84. package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +1 -5
  85. package/esm2022/lib/models/leader-activity.mjs +1 -12
  86. package/esm2022/lib/models/member/member-attribute.mjs +1 -12
  87. package/esm2022/lib/models/member/member-contact.mjs +1 -6
  88. package/esm2022/lib/models/member/member-function.mjs +1 -6
  89. package/esm2022/lib/models/member/member-validation-settings.mjs +1 -9
  90. package/esm2022/lib/models/member/member.mjs +1 -27
  91. package/esm2022/lib/models/member/other-member-field.mjs +1 -4
  92. package/esm2022/lib/models/member/other-member.mjs +1 -9
  93. package/esm2022/lib/models/member/search-member.mjs +1 -17
  94. package/esm2022/lib/models/member-activity-invite.mjs +1 -12
  95. package/esm2022/lib/models/member-public-form-field-option.mjs +1 -5
  96. package/esm2022/lib/models/member-public-form-field.mjs +1 -12
  97. package/esm2022/lib/models/member-public-form.mjs +1 -26
  98. package/esm2022/lib/models/member-team-through.mjs +1 -10
  99. package/esm2022/lib/models/member-team.mjs +1 -10
  100. package/esm2022/lib/models/member-type.mjs +1 -4
  101. package/esm2022/lib/models/mypages-menu-item.mjs +1 -4
  102. package/esm2022/lib/models/news.mjs +1 -20
  103. package/esm2022/lib/models/open-activity.mjs +3 -79
  104. package/esm2022/lib/models/optional-fee.mjs +2 -7
  105. package/esm2022/lib/models/overbooked-bookable-item.mjs +1 -6
  106. package/esm2022/lib/models/overbooked-location.mjs +1 -6
  107. package/esm2022/lib/models/partner.mjs +1 -5
  108. package/esm2022/lib/models/public-authentication.mjs +1 -3
  109. package/esm2022/lib/models/registration-qr-code.mjs +1 -8
  110. package/esm2022/lib/models/retrieve-2fa.mjs +1 -3
  111. package/esm2022/lib/models/saved-search.mjs +1 -3
  112. package/esm2022/lib/models/search-attribute.mjs +1 -5
  113. package/esm2022/lib/models/search-club.mjs +1 -10
  114. package/esm2022/lib/models/search-team.mjs +1 -9
  115. package/esm2022/lib/models/section.mjs +1 -3
  116. package/esm2022/lib/models/swish-incident.mjs +1 -11
  117. package/esm2022/lib/models/token.mjs +1 -4
  118. package/esm2022/lib/models/user-notification.mjs +1 -9
  119. package/esm2022/lib/models/user.mjs +1 -13
  120. package/esm2022/lib/services/activity.service.mjs +4 -7
  121. package/esm2022/lib/services/api.service.mjs +4 -6
  122. package/esm2022/lib/services/auth.service.mjs +4 -5
  123. package/esm2022/lib/services/bookable.service.mjs +4 -5
  124. package/esm2022/lib/services/booking-calendar.service.mjs +22 -6
  125. package/esm2022/lib/services/club.service.mjs +4 -5
  126. package/esm2022/lib/services/constant.service.mjs +4 -5
  127. package/esm2022/lib/services/databank.service.mjs +4 -5
  128. package/esm2022/lib/services/email.service.mjs +4 -5
  129. package/esm2022/lib/services/external-link.service.mjs +4 -5
  130. package/esm2022/lib/services/feature-flags.service.mjs +4 -5
  131. package/esm2022/lib/services/file.service.mjs +4 -5
  132. package/esm2022/lib/services/invoice/invoice.service.mjs +4 -5
  133. package/esm2022/lib/services/invoice/payment-attempt.service.mjs +4 -5
  134. package/esm2022/lib/services/invoice/payment-order.service.mjs +4 -5
  135. package/esm2022/lib/services/leader-notification.service.mjs +4 -5
  136. package/esm2022/lib/services/maintenance-mode.service.mjs +8 -7
  137. package/esm2022/lib/services/member-card.service.mjs +4 -5
  138. package/esm2022/lib/services/member-fee.service.mjs +4 -5
  139. package/esm2022/lib/services/member-public-form.service.mjs +4 -5
  140. package/esm2022/lib/services/member.service.mjs +4 -5
  141. package/esm2022/lib/services/news.service.mjs +4 -5
  142. package/esm2022/lib/services/registration-qr-code.service.mjs +4 -5
  143. package/esm2022/lib/services/saved-search.service.mjs +4 -5
  144. package/esm2022/lib/services/section.service.mjs +4 -5
  145. package/esm2022/lib/services/storage.service.mjs +5 -6
  146. package/esm2022/lib/services/swish-incident.service.mjs +4 -5
  147. package/esm2022/lib/services/team.service.mjs +4 -5
  148. package/esm2022/lib/services/token.service.mjs +4 -5
  149. package/esm2022/lib/services/user-notification.service.mjs +4 -5
  150. package/esm2022/lib/services/user.service.mjs +4 -5
  151. package/esm2022/lib/store/actions/booking.actions.mjs +7 -1
  152. package/esm2022/lib/store/effects/activity.effects.mjs +358 -355
  153. package/esm2022/lib/store/effects/auth.effects.mjs +121 -119
  154. package/esm2022/lib/store/effects/booking.effects.mjs +139 -134
  155. package/esm2022/lib/store/effects/calendar.effects.mjs +61 -59
  156. package/esm2022/lib/store/effects/club-info.effects.mjs +17 -15
  157. package/esm2022/lib/store/effects/constant.effects.mjs +78 -76
  158. package/esm2022/lib/store/effects/databank.effects.mjs +23 -21
  159. package/esm2022/lib/store/effects/email.effects.mjs +16 -14
  160. package/esm2022/lib/store/effects/external-link.effects.mjs +11 -9
  161. package/esm2022/lib/store/effects/file.effects.mjs +92 -90
  162. package/esm2022/lib/store/effects/invoice.effects.mjs +176 -174
  163. package/esm2022/lib/store/effects/member-card.effects.mjs +73 -71
  164. package/esm2022/lib/store/effects/member-fee.effects.mjs +9 -7
  165. package/esm2022/lib/store/effects/member.effects.mjs +41 -39
  166. package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +4 -2
  167. package/esm2022/lib/store/effects/news.effects.mjs +47 -45
  168. package/esm2022/lib/store/effects/public-form.effects.mjs +24 -22
  169. package/esm2022/lib/store/effects/registration-qr-code.effects.mjs +14 -12
  170. package/esm2022/lib/store/effects/saved-search.effects.mjs +9 -7
  171. package/esm2022/lib/store/effects/swish-incidents.effects.mjs +11 -9
  172. package/esm2022/lib/store/effects/team.effects.mjs +82 -79
  173. package/esm2022/lib/store/effects/token.effects.mjs +93 -91
  174. package/esm2022/lib/store/effects/user.effects.mjs +35 -35
  175. package/fesm2022/myclub_se-data-access.mjs +1771 -2857
  176. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  177. package/lib/services/booking-calendar.service.d.ts +3 -0
  178. package/lib/store/actions/booking.actions.d.ts +24 -0
  179. package/lib/store/effects/booking.effects.d.ts +5 -0
  180. package/package.json +1 -1
@@ -78,9 +78,6 @@ const PUBLIC_WAITING_LIST_OFFER_PATH = 'activities/waiting-list-offers/:id/:toke
78
78
  const PUBLIC_WAITING_LIST_OFFER_OPEN_ACTIVITY_PATH = 'activities/waiting-list-offers/:id/:token/open-activity/';
79
79
  const PUBLIC_WAITING_LIST_OFFER_RESPOND_PATH = 'activities/waiting-list-offers/:id/:token/open-activity/respond/';
80
80
  export class ActivityService {
81
- apiService;
82
- activityLocationCollection;
83
- activityLocationResponseDate;
84
81
  constructor(apiService) {
85
82
  this.apiService = apiService;
86
83
  }
@@ -741,13 +738,13 @@ export class ActivityService {
741
738
  delete question.section_id;
742
739
  return question;
743
740
  }
744
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
745
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityService, providedIn: 'root' });
741
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityService, deps: [{ token: i1.ApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
742
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityService, providedIn: 'root' }); }
746
743
  }
747
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityService, decorators: [{
744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityService, decorators: [{
748
745
  type: Injectable,
749
746
  args: [{
750
747
  providedIn: 'root'
751
748
  }]
752
749
  }], ctorParameters: () => [{ type: i1.ApiService }] });
753
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc2VydmljZXMvYWN0aXZpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFRTCxJQUFJLEdBQ0wsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLCtCQUErQixFQUMvQixZQUFZLEVBQ1osWUFBWSxFQUNaLDJCQUEyQixFQUMzQixtQkFBbUIsRUFBRSxzQkFBc0IsRUFDM0MsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFFcEUsTUFBTSwyQkFBMkIsR0FBRyx3QkFBd0IsQ0FBQztBQUM3RCxNQUFNLDZCQUE2QixHQUFHLGFBQWEsQ0FBQztBQUNwRCxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0saUNBQWlDLEdBQUcsc0NBQXNDLENBQUM7QUFDakYsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRyxNQUFNLGtDQUFrQyxHQUFHLHVDQUF1QyxDQUFDO0FBQ25GLE1BQU0sZ0NBQWdDLEdBQUcsc0NBQXNDLENBQUM7QUFF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QUN2QyxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksT0FBTyxRQUFRLENBQUMseUJBQXlCLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDckcsT0FBTyxRQUFRLENBQUMseUJBQXlCLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxrQ0FBa0MsQ0FBQyxRQUFtQztRQUM1RSxJQUFJLE9BQU8sUUFBUSxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN4QixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzt1R0FodUNVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWN0aXZpdHksXG4gIEFjdGl2aXR5TG9jYXRpb24sIEFjdGl2aXR5UXVlc3Rpb24sXG4gIEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZSxcbiAgQWN0aXZpdHlUeXBlLFxuICBDb2xsZWN0aW9uLFxuICBHdWVzdCxcbiAgTWVtYmVyQWN0aXZpdHlJbnZpdGUsXG4gIFJvbGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgYWN0aXZpdHlGYWN0b3J5LFxuICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gIGFjdGl2aXR5TG9jYXRpb25GYWN0b3J5LFxuICBhY3Rpdml0eVF1ZXN0aW9uRmFjdG9yeSxcbiAgYWN0aXZpdHlTZXR0aW5nc0ZhY3RvcnksXG4gIGFjdGl2aXR5VHlwZUZhY3RvcnksXG4gIGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnksXG4gIGV2ZW50RmFjdG9yeSxcbiAgZ3Vlc3RGYWN0b3J5LFxuICBtZW1iZXJBY3Rpdml0eUludml0ZUZhY3RvcnksXG4gIG9wZW5BY3Rpdml0eUZhY3RvcnksIHNlYXJjaEF0dHJpYnV0ZUZhY3RvcnksXG4gIHNlYXJjaE1lbWJlckZhY3RvcnksXG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaUFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSB9IGZyb20gJy4uL2FwaS1tb2RlbHMnO1xuaW1wb3J0IHsgc3ViIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpbnZhbGlkUm9sZUVycm9yIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZWFyY2hUZWFtRmFjdG9yeSB9IGZyb20gJy4vZmFjdG9yaWVzL3NlYXJjaC10ZWFtLWZhY3RvcnknO1xuXG5jb25zdCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX1BBVEggPSAnYWN0aXZpdGllcy86aWQvOnRva2VuLyc7XG5jb25zdCBQVUJMSUNfTUVNQkVSX0FDVElWSVRJRVNfUEFUSCA9ICdhY3Rpdml0aWVzLyc7XG5jb25zdCBQVUJMSUNfTUVNQkVSX0FDVElWSVRZX1BBVEggPSAnYWN0aXZpdGllcy86YWN0aXZpdHlJZC8nO1xuY29uc3QgUFVCTElDX09QRU5fQUNUSVZJVFlfUkVTUE9ORF9QQVRIID0gJ29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9yZXNwb25kLyc7XG5jb25zdCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1dJVEhfREFUQV9QQVRIID0gJ29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9yZXNwb25kLWRhdGEvJztcbmNvbnN0IFBVQkxJQ19NRU1CRVJfQUNUSVZJVFlfSU5WSVRFX1BBVEggPSAnYWN0aXZpdGllcy9pbnZpdGVzLzphY3Rpdml0eUludml0ZUlkLyc7XG5jb25zdCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9JTlZJVEVfUEFUSCA9ICdvcGVuLWFjdGl2aXRpZXMvaW52aXRlcy86YWN0aXZpdHlJZC8nO1xuXG5jb25zdCBDTFVCX0FDVElWSVRZX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3NldHRpbmdzLyc7XG5jb25zdCBDTFVCX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvJztcbmNvbnN0IENMVUJfQUNUSVZJVFlfTE9DQVRJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvbG9jYXRpb25zLzpsb2NhdGlvbklkLyc7XG5jb25zdCBDTFVCX0FDVElWSVRZX1RZUEVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3R5cGVzLyc7XG5jb25zdCBDTFVCX0FDVElWSVRZX1RZUEVfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvdHlwZXMvOnR5cGVJZC8nO1xuXG5jb25zdCBTRUNUSU9OX0FDVElWSVRZX1NFVFRJTkdTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3NldHRpbmdzLyc7XG5jb25zdCBTRUNUSU9OX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvJztcbmNvbnN0IFNFQ1RJT05fQUNUSVZJVFlfTE9DQVRJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvbG9jYXRpb25zLzpsb2NhdGlvbklkLyc7XG5jb25zdCBTRUNUSU9OX0FDVElWSVRZX1RZUEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3R5cGVzLyc7XG5jb25zdCBTRUNUSU9OX0FDVElWSVRZX1RZUEVfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvdHlwZXMvOnR5cGVJZC8nO1xuXG5jb25zdCBURUFNX0FDVElWSVRJRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfUlVMRV9BVFRSSUJVVEVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2F0dHJpYnV0ZXMvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfSU5WSVRFU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC9pbnZpdGVzLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX0lOVklURV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC9pbnZpdGVzLzphY3Rpdml0eUludml0ZUlkLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX0lOVklURV9SRVNFTkRfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvaW52aXRlcy86YWN0aXZpdHlJbnZpdGVJZC9yZXNlbmQtaW52aXRlLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX05FV19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9uZXcvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfUEFSVElDSVBBTlRTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3BhcnRpY2lwYW50cy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86aWQvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfUVJfQ09ERV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86aWQvcXItY29kZS8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9RVUVTVElPTl9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9xdWVzdGlvbnMvOmlkLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1FVRVNUSU9OU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9xdWVzdGlvbnMvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfUlVMRV9URUFNU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy90ZWFtcy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9TRVRUSU5HU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXR0aW5ncy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9UWVBFU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy90eXBlcy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvbG9jYXRpb25zLyc7XG5jb25zdCBURUFNX0NBTEVOREFSX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2NhbGVuZGFyLyc7XG5cbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9BVFRFTkRBTkNFX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvYWN0aXZpdHkvOmFjdGl2aXR5SWQvYXR0ZW5kYW5jZS8nO1xuY29uc3QgTUVNQkVSX0FDVElWSVRZX0lOVklURV9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzLzphY3Rpdml0eUludml0ZUlkLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9hY3Rpdml0eS86YWN0aXZpdHlJZC8nO1xuY29uc3QgTUVNQkVSX0FDVElWSVRZX0lOVklURVNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy8nO1xuY29uc3QgTUVNQkVSX0NBTEVOREFSX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvY2FsZW5kYXIvJztcbmNvbnN0IE1FTUJFUl9PUEVOX0FDVElWSVRJRVNfUEFUSCA9ICc6bWVtYmVySWQvb3Blbi1hY3Rpdml0aWVzLyc7XG5jb25zdCBNRU1CRVJfT1BFTl9BQ1RJVklUSUVTX0FDVElWSVRZX1RZUEVTX1BBVEggPSAnOm1lbWJlcklkL29wZW4tYWN0aXZpdGllcy90eXBlcy8nO1xuY29uc3QgTUVNQkVSX09QRU5fQUNUSVZJVElFU19BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCA9ICc6bWVtYmVySWQvb3Blbi1hY3Rpdml0aWVzL2xvY2F0aW9ucy8nO1xuY29uc3QgTUVNQkVSX09QRU5fQUNUSVZJVFlfUEFUSCA9ICc6bWVtYmVySWQvb3Blbi1hY3Rpdml0aWVzLzphY3Rpdml0eUlkLyc7XG5jb25zdCBNRU1CRVJfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1BBVEggPSAnOm1lbWJlcklkL29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9yZXNwb25kLyc7XG5jb25zdCBNRU1CRVJfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1dJVEhfREFUQV9QQVRIID0gJzptZW1iZXJJZC9vcGVuLWFjdGl2aXRpZXMvOmFjdGl2aXR5SWQvcmVzcG9uZC1kYXRhLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfU0VUVElOR1NfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9zZXR0aW5ncy8nO1xuY29uc3QgTUVNQkVSX0FDVElWSVRZX1RZUEVTX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvdHlwZXMvJztcbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvJztcblxuY29uc3QgVEVBTV9BQ1RJVklUWV9HVUVTVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvZ3Vlc3RzLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX0dVRVNUX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL2d1ZXN0cy86Z3Vlc3RJZC8nO1xuY29uc3QgTUVNQkVSX0FDVElWSVRZX0lOVklURV9HVUVTVFNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy86aW52aXRlSWQvZ3Vlc3RzLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvOmludml0ZUlkL2d1ZXN0cy86Z3Vlc3RJZC8nO1xuXG5jb25zdCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX0xJU1RfUEFUSCA9ICdhY3Rpdml0aWVzLzppZC86dG9rZW4vZ3Vlc3RzLyc7XG5jb25zdCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX0RFVEFJTF9QQVRIID0gJ2FjdGl2aXRpZXMvOmlkLzp0b2tlbi9ndWVzdHMvOmd1ZXN0SWQvJztcbmNvbnN0IFBVQkxJQ19PUEVOX0FDVElWSVRZX0dVRVNUX0xJU1RfUEFUSCA9ICdvcGVuLWFjdGl2aXRpZXMvOmFjdGl2aXR5SWQvZ3Vlc3RzLyc7XG5jb25zdCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9HVUVTVF9ERVRBSUxfUEFUSCA9ICdvcGVuLWFjdGl2aXRpZXMvOmFjdGl2aXR5SWQvZ3Vlc3RzLzpndWVzdElkLyc7XG5cbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9hY3Rpdml0eS86YWN0aXZpdHlJZC93YWl0aW5nLWxpc3QvJztcbmNvbnN0IE1FTUJFUl9XQUlUSU5HX0xJU1RfRU5UUllfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy93YWl0aW5nLWxpc3QvOmVudHJ5SWQvJztcblxuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvd2FpdGluZy1saXN0Lyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9PUEVOX1BMQUNFX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC9vcGVuLXBsYWNlLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC93YWl0aW5nLWxpc3QvOmVudHJ5SWQvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX0FETUlUX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC9hZG1pdC8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUkVPUkRFUl9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC93YWl0aW5nLWxpc3QvOmVudHJ5SWQvcmVvcmRlci8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUkVNSU5EX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC9yZW1pbmQvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX09GRkVSX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC9vZmZlci8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUEFTU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC93YWl0aW5nLWxpc3QvOmVudHJ5SWQvcGFzcy8nO1xuXG5jb25zdCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX1dBSVRJTkdfTElTVF9QQVRIID0gJ2FjdGl2aXRpZXMvaW52aXRlcy86aWQvOnRva2VuL3dhaXRpbmctbGlzdC8nO1xuY29uc3QgUFVCTElDX1dBSVRJTkdfTElTVF9PRkZFUl9QQVRIID0gJ2FjdGl2aXRpZXMvd2FpdGluZy1saXN0LW9mZmVycy86aWQvOnRva2VuLyc7XG5jb25zdCBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX09QRU5fQUNUSVZJVFlfUEFUSCA9ICdhY3Rpdml0aWVzL3dhaXRpbmctbGlzdC1vZmZlcnMvOmlkLzp0b2tlbi9vcGVuLWFjdGl2aXR5Lyc7XG5jb25zdCBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX1JFU1BPTkRfUEFUSCA9ICdhY3Rpdml0aWVzL3dhaXRpbmctbGlzdC1vZmZlcnMvOmlkLzp0b2tlbi9vcGVuLWFjdGl2aXR5L3Jlc3BvbmQvJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eVNlcnZpY2Uge1xuICBhY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbjogQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPiB8IHVuZGVmaW5lZDtcblxuICBhY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgYWRkVGVhbUFjdGl2aXR5SW52aXRlcyh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBtZW1iZXJJZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICAoKSA9PiB0cnVlLFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9JTlZJVEVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVyczogbWVtYmVySWRzXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eSh0ZWFtSWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxBY3Rpdml0eT4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRJRVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnJlbW92ZVVudXNlZEFjdGl2aXR5RmllbGRzKHsuLi5kYXRhfSlcbiAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogUGFydGlhbDxBY3Rpdml0eVF1ZXN0aW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5UXVlc3Rpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9RVUVTVElPTlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnJlbW92ZVVudXNlZEFjdGl2aXR5UXVlc3Rpb25GaWVsZHMoey4uLnF1ZXN0aW9ufSlcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZCxcbiAgICAgICAgICBhY3Rpdml0eUludml0ZUlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUVVFU1RJT05fUEFUSCxcbiAgICAgICAge3RlYW1JZCwgaWR9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQWN0aXZpdHkobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRNZW1iZXJBY3Rpdml0eUludml0ZShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQWN0aXZpdHlJbnZpdGVzKG1lbWJlcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJywgb3Blbl9hY3Rpdml0eTogJ3RydWUnfTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9JTlZJVEVTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlckNhbGVuZGFyRXZlbnRzKG1lbWJlcklkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBvcGVuQWN0aXZpdHk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHBhcmFtc1snc2VhcmNoX3N0YXJ0X2RheSddID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ3NlYXJjaF9lbmRfZGF5J10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIGlmIChvcGVuQWN0aXZpdHkpIHtcbiAgICAgIHBhcmFtc1snb3Blbl9hY3Rpdml0eSddID0gJ3RydWUnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9DQUxFTkRBUl9QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldE1lbWJlck9wZW5BY3Rpdml0aWVzKG1lbWJlcklkOiBzdHJpbmcsIG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtczogT3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zSW50ZXJmYWNlKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG9wZW5BY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9PUEVOX0FDVElWSVRJRVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRPcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXMob3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zKVxuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRNZW1iZXJPcGVuQWN0aXZpdHkobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBvcGVuQWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfT1BFTl9BQ1RJVklUWV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyT3BlbkFjdGl2aXR5QWN0aXZpdHlUeXBlcyhtZW1iZXJJZDogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX09QRU5fQUNUSVZJVElFU19BQ1RJVklUWV9UWVBFU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRPcGVuQWN0aXZpdHlEYXRlUGFyYW1zKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgYWxsKSxcbiAgICAgICAgICAgIGxpbWl0OiAnbnVsbCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldE1lbWJlck9wZW5BY3Rpdml0eUxvY2F0aW9ucyhtZW1iZXJJZDogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9PUEVOX0FDVElWSVRJRVNfQUNUSVZJVFlfTE9DQVRJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAuLi50aGlzLmdldE9wZW5BY3Rpdml0eURhdGVQYXJhbXMoc3RhcnREYXRlLCBlbmREYXRlLCBhbGwpLFxuICAgICAgICAgICAgbGltaXQ6ICdudWxsJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0UHVibGljQWN0aXZpdHlJbnZpdGUoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlKGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX01FTUJFUl9BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY01lbWJlckFjdGl2aXRpZXMoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfTUVNQkVSX0FDVElWSVRJRVNfUEFUSCxcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHNlYXJjaF9zdGFydF9kYXk6IHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHNlYXJjaF9lbmRfZGF5OiBlbmREYXRlLFxuICAgICAgICAgICAgbGltaXQ6ICdudWxsJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0UHVibGljTWVtYmVyQWN0aXZpdHkoYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfTUVNQkVSX0FDVElWSVRZX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHkodGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUEFUSCxcbiAgICAgICAge3RlYW1JZCwgaWR9XG4gICAgICApXG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlRUkNvZGUodGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUVJfQ09ERV9QQVRILFxuICAgICAgICB7dGVhbUlkLCBpZH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVF1ZXN0aW9uKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVF1ZXN0aW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUVVFU1RJT05fUEFUSCxcbiAgICAgICAge3RlYW1JZCwgaWR9XG4gICAgICApXG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlRdWVzdGlvbnModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlRdWVzdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1FVRVNUSU9OU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKVxuICB9XG5cbiAgZ2V0QWN0aXZpdHlMb2NhdGlvbnMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJBY3Rpdml0eUxvY2F0aW9ucyhpdGVtSWQsIGZvcmNlKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25BY3Rpdml0eUxvY2F0aW9ucyhpdGVtSWQsIGZvcmNlKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1BY3Rpdml0eUxvY2F0aW9ucyhpdGVtSWQsIGZvcmNlKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQWN0aXZpdHlMb2NhdGlvbnMoaXRlbUlkLCBmb3JjZSlcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5TG9jYXRpb25zKHRlYW1JZDogc3RyaW5nLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSAmJiB0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgPiBzdWIobmV3IERhdGUoKSwge2hvdXJzOiAxfSkgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiBhcyBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKS5waXBlKFxuICAgICAgICB0YXAoKGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KSA9PiB7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uID0gYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb247XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQWN0aXZpdHlMb2NhdGlvbnMobWVtYmVySWQ6IHN0cmluZywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgJiYgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID4gc3ViKG5ldyBEYXRlKCksIHtob3VyczogMX0pICYmICFmb3JjZSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb24gYXMgQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5TG9jYXRpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfTE9DQVRJT05TX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICkucGlwZShcbiAgICAgICAgdGFwKChhY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbjogQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPikgPT4ge1xuICAgICAgICAgIHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiA9IGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGdldENsdWJBY3Rpdml0eUxvY2F0aW9ucyhjbHViSWQ6IHN0cmluZywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgJiYgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID4gc3ViKG5ldyBEYXRlKCksIHtob3VyczogMX0pICYmICFmb3JjZSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb24gYXMgQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5TG9jYXRpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICkucGlwZShcbiAgICAgICAgdGFwKChhY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbjogQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPikgPT4ge1xuICAgICAgICAgIHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiA9IGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFNlY3Rpb25BY3Rpdml0eUxvY2F0aW9ucyhzZWN0aW9uSWQ6IHN0cmluZywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgJiYgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID4gc3ViKG5ldyBEYXRlKCksIHtob3VyczogMX0pICYmICFmb3JjZSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb24gYXMgQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5TG9jYXRpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICkucGlwZShcbiAgICAgICAgdGFwKChhY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbjogQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPikgPT4ge1xuICAgICAgICAgIHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiA9IGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2aXR5TG9jYXRpb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGxvY2F0aW9uOiBBY3Rpdml0eUxvY2F0aW9uKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQWN0aXZpdHlMb2NhdGlvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGxvY2F0aW9uKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25BY3Rpdml0eUxvY2F0aW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbG9jYXRpb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDbHViQWN0aXZpdHlMb2NhdGlvbihjbHViSWQ6IHN0cmluZywgbG9jYXRpb246IEFjdGl2aXR5TG9jYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5TG9jYXRpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9BQ1RJVklUWV9MT0NBVElPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGxvY2F0aW9uSWQ6IGxvY2F0aW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlKG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfQVRURU5EQU5DRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb25BY3Rpdml0eUxvY2F0aW9uKHNlY3Rpb25JZDogc3RyaW5nLCBsb2NhdGlvbjogQWN0aXZpdHlMb2NhdGlvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0FDVElWSVRZX0xPQ0FUSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgbG9jYXRpb25JZDogbG9jYXRpb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlOZXcodGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfTkVXX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgc2VhcmNoTWVtYmVyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUEFSVElDSVBBTlRTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5R3Vlc3RzKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9HVUVTVFNfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQgfSxcbiAgICAgICAgeyBwYXJhbXM6IHsgbGltaXQ6ICdudWxsJyB9IH1cbiAgICAgICk7XG4gIH1cblxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdCh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9HVUVTVFNfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQgfSxcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZywgZGF0YTogeyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9HVUVTVF9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZ3Vlc3RJZCB9LFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3QodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZ3Vlc3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9HVUVTVF9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZ3Vlc3RJZCB9XG4gICAgICApO1xuICB9XG5cbiAgYWRkTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZDogc3RyaW5nLCBpbnZpdGVJZDogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX0dVRVNUU19QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBpbnZpdGVJZCB9LFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZDogc3RyaW5nLCBpbnZpdGVJZDogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGd1ZXN0RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX0lOVklURV9HVUVTVF9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBpbnZpdGVJZCwgZ3Vlc3RJZCB9LFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZDogc3RyaW5nLCBpbnZpdGVJZDogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9JTlZJVEVfR1VFU1RfUEFUSCxcbiAgICAgICAgeyBtZW1iZXJJZCwgaW52aXRlSWQsIGd1ZXN0SWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfUEFUSCxcbiAgICAgICAgeyBtZW1iZXJJZCwgYWN0aXZpdHlJZCB9XG4gICAgICApO1xuICB9XG5cbiAgam9pbk1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3QobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBhY3Rpdml0eUlkIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgbGVhdmVNZW1iZXJBY3Rpdml0eVdhaXRpbmdMaXN0KG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBhY3Rpdml0eUlkIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJXYWl0aW5nTGlzdEVudHJ5KG1lbWJlcklkOiBzdHJpbmcsIGVudHJ5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX1dBSVRJTkdfTElTVF9FTlRSWV9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBlbnRyeUlkIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdCh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICAoYXBpOiB7IGVudHJpZXM6IEFycmF5PEFwaUFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeT47IG91dHN0YW5kaW5nX29mZmVyOiBBcGlBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkgfCBudWxsIH0pID0+ICh7XG4gICAgICAgICAgZW50cmllczogKGFwaS5lbnRyaWVzIHx8IFtdKS5tYXAoKGVudHJ5OiBBcGlBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnkoZW50cnkpKSxcbiAgICAgICAgICBvdXRzdGFuZGluZ09mZmVyOiBhcGkub3V0c3RhbmRpbmdfb2ZmZXIgPyBhY3Rpdml0eVdhaXRpbmdMaXN0RW50cnlGYWN0b3J5KGFwaS5vdXRzdGFuZGluZ19vZmZlcikgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIG9wZW5UZWFtQWN0aXZpdHlXYWl0bGlzdFBsYWNlKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX09QRU5fUExBQ0VfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gIH1cblxuICBhZG1pdFRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9BRE1JVF9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZW50cnlJZCB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHJlb3JkZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGVudHJ5SWQ6IHN0cmluZywgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9SRU9SREVSX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBlbnRyeUlkIH0sXG4gICAgICAgIHsgZGlyZWN0aW9uIH1cbiAgICAgICk7XG4gIH1cblxuICByZW1pbmRUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGVudHJ5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUkVNSU5EX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBlbnRyeUlkIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgb2ZmZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGVudHJ5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9PRkZFUl9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZW50cnlJZCB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHBhc3NUZWFtQWN0aXZpdHlXYWl0bGlzdE9mZmVyKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGVudHJ5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUEFTU19QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZW50cnlJZCB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQsIGVudHJ5SWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY1dhaXRpbmdMaXN0U3RhdGUoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfV0FJVElOR19MSVNUX1BBVEgsXG4gICAgICAgIHsgaWQsIHRva2VuIH1cbiAgICAgICk7XG4gIH1cblxuICBqb2luUHVibGljV2FpdGluZ0xpc3QoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX1dBSVRJTkdfTElTVF9QQVRILFxuICAgICAgICB7IGlkLCB0b2tlbiB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIGxlYXZlUHVibGljV2FpdGluZ0xpc3QoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfV0FJVElOR19MSVNUX1BBVEgsXG4gICAgICAgIHsgaWQsIHRva2VuIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRQdWJsaWNXYWl0aW5nTGlzdE9mZmVyKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX1BBVEgsXG4gICAgICAgIHsgaWQsIHRva2VuIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIG9wZW5BY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX09QRU5fQUNUSVZJVFlfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfVxuICAgICAgKTtcbiAgfVxuXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGNvbW1lbnQ6IHN0cmluZywgb3B0aW9uYWxGZWVzOiBBcnJheTxzdHJpbmc+LCByZXNwb25zZXM6IEFycmF5PEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZT4sIGd1ZXN0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfT4gPSBbXSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIG9wZW5BY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX1JFU1BPTkRfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgb3B0aW9uYWxfZmVlczogb3B0aW9uYWxGZWVzLFxuICAgICAgICAgIHJlc3BvbnNlcyxcbiAgICAgICAgICBndWVzdHNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX1JFU1BPTkRfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2aXR5U2V0dGluZ3Mocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJBY3Rpdml0eVNldHRpbmdzKGl0ZW1JZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQWN0aXZpdHlTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUFjdGl2aXR5U2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQWN0aXZpdHlTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlckFjdGl2aXR5U2V0dGluZ3MobWVtYmVySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9TRVRUSU5HU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkFjdGl2aXR5U2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5U2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9BQ1RJVklUWV9TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRDbHViQWN0aXZpdHlTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0FDVElWSVRZX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRBY3Rpdml0eVR5cGVzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbHViQWN0aXZpdHlUeXBlcyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkFjdGl2aXR5VHlwZXMoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1BY3Rpdml0eVR5cGVzKGl0ZW1JZCk7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckFjdGl2aXR5VHlwZXMoaXRlbUlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5UnVsZXNBdHRyaWJ1dGVzKHRlYW1JZDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIHNlYXJjaEF0dHJpYnV0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1JVTEVfQVRUUklCVVRFU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge3E6IHF1ZXJ5U3RyaW5nfX1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVJ1bGVUZWFtcyh0ZWFtSWQ6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBzZWFyY2hUZWFtRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUlVMRV9URUFNU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge3BhcmFtczoge3E6IHF1ZXJ5U3RyaW5nfX1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVR5cGVzKHRlYW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5VHlwZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1RZUEVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApXG4gIH1cblxuICBnZXRNZW1iZXJBY3Rpdml0eVR5cGVzKG1lbWJlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1RZUEVTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgIClcbiAgfVxuXG4gIGdldENsdWJBY3Rpdml0eVR5cGVzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5VHlwZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0FDVElWSVRZX1RZUEVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkFjdGl2aXR5VHlwZXMoc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQUNUSVZJVFlfVFlQRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVBY3Rpdml0eVR5cGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5VHlwZTogQWN0aXZpdHlUeXBlKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQWN0aXZpdHlUeXBlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYWN0aXZpdHlUeXBlKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25BY3Rpdml0eVR5cGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhY3Rpdml0eVR5cGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDbHViQWN0aXZpdHlUeXBlKGNsdWJJZDogc3RyaW5nLCBhY3Rpdml0eVR5cGU6IEFjdGl2aXR5VHlwZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQUNUSVZJVFlfVFlQRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIHR5cGVJZDogYWN0aXZpdHlUeXBlLmlkLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eVR5cGUsXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlU2VjdGlvbkFjdGl2aXR5VHlwZShzZWN0aW9uSWQ6IHN0cmluZywgYWN0aXZpdHlUeXBlOiBBY3Rpdml0eVR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5VHlwZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0FDVElWSVRZX1RZUEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICB0eXBlSWQ6IGFjdGl2aXR5VHlwZS5pZCxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZpdHlUeXBlLFxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1DYWxlbmRhckV2ZW50cyh0ZWFtSWQ6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIG9wZW5BY3Rpdml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydzZWFyY2hfc3RhcnRfZGF5J10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snc2VhcmNoX2VuZF9kYXknXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKG9wZW5BY3Rpdml0eSkge1xuICAgICAgcGFyYW1zWydvcGVuX2FjdGl2aXR5J10gPSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGV2ZW50RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHJlc2VuZEludml0ZSh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0lOVklURV9SRVNFTkRfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkLFxuICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gIH1cblxuICByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHkobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHJlbW92ZVB1YmxpY09wZW5BY3Rpdml0eShhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHNpZ25VcE1lbWJlck9wZW5BY3Rpdml0eShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGNvbW1lbnQ6IHN0cmluZywgb3B0aW9uYWxGZWVzOiBBcnJheTxzdHJpbmc+LCByZXNwb25zZXM6IEFycmF5PEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZT4sIGd1ZXN0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfT4gPSBbXSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgb3BlbkFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX09QRU5fQUNUSVZJVFlfUkVTUE9ORF9XSVRIX0RBVEFfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgb3B0aW9uYWxfZmVlczogb3B0aW9uYWxGZWVzLFxuICAgICAgICAgIHJlc3BvbnNlcyxcbiAgICAgICAgICBndWVzdHNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHNpZ25VcFB1YmxpY09wZW5BY3Rpdml0eShhY3Rpdml0eUlkOiBzdHJpbmcsIGNvbW1lbnQ6IHN0cmluZywgb3B0aW9uYWxGZWVzOiBBcnJheTxzdHJpbmc+LCByZXNwb25zZXM6IEFycmF5PEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZT4sIGd1ZXN0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfT4gPSBbXSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgb3BlbkFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19PUEVOX0FDVElWSVRZX1JFU1BPTkRfV0lUSF9EQVRBX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tZW50LFxuICAgICAgICAgIG9wdGlvbmFsX2ZlZXM6IG9wdGlvbmFsRmVlcyxcbiAgICAgICAgICByZXNwb25zZXMsXG4gICAgICAgICAgZ3Vlc3RzXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBEZW55aW5nIGFuIG9wZW4tYWN0aXZpdHkgaW52aXRlIGRlbGV0ZXMgaXQgYW5kIGFuc3dlcnMgMjA0IE5vIENvbnRlbnQsIHNvIHRoZSByZXNwb25zZSBtYXkgYmVcbiAgLy8gbnVsbCAodGhlIGludml0ZSBpcyBnb25lKS4gQ2FsbGVycyBtdXN0IGhhbmRsZSBhIG51bGwgcmVzdWx0IGFzIFwidGhlIGludml0ZSB3YXMgcmVtb3ZlZFwiLlxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlT3JOdWxsKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZShhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlT3JOdWxsKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfTUVNQkVSX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUludml0ZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlT3JOdWxsKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB0b2tlblxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUludml0ZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVB1YmxpY09wZW5BY3Rpdml0eUludml0ZShpZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZU9yTnVsbChcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX09QRU5fQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUludml0ZVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY09wZW5BY3Rpdml0eUd1ZXN0cyhhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX09QRU5fQUNUSVZJVFlfR1VFU1RfTElTVF9QQVRILFxuICAgICAgICB7IGFjdGl2aXR5SWQgfSxcbiAgICAgICAgeyBwYXJhbXM6IHsgbGltaXQ6ICdudWxsJyB9IH1cbiAgICAgICk7XG4gIH1cblxuICBhZGRQdWJsaWNBY3Rpdml0eUd1ZXN0QnlUb2tlbihpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShndWVzdEZhY3RvcnksIFJvbGUuUHVibGljLCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX0xJU1RfUEFUSCwgeyBpZCwgdG9rZW4gfSwgZGF0YSk7XG4gIH1cblxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUd1ZXN0QnlUb2tlbihpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoZ3Vlc3RGYWN0b3J5LCBSb2xlLlB1YmxpYywgUFVCTElDX0FDVElWSVRZX0lOVklURV9HVUVTVF9ERVRBSUxfUEFUSCwgeyBpZCwgdG9rZW4sIGd1ZXN0SWQgfSwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVQdWJsaWNBY3Rpdml0eUd1ZXN0QnlUb2tlbihpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoUm9sZS5QdWJsaWMsIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfR1VFU1RfREVUQUlMX1BBVEgsIHsgaWQsIHRva2VuLCBndWVzdElkIH0pO1xuICB9XG5cbiAgYWRkUHVibGljT3BlbkFjdGl2aXR5R3Vlc3QoYWN0aXZpdHlJZDogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShndWVzdEZhY3RvcnksIFJvbGUuUHVibGljLCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9HVUVTVF9MSVNUX1BBVEgsIHsgYWN0aXZpdHlJZCB9LCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVB1YmxpY09wZW5BY3Rpdml0eUd1ZXN0KGFjdGl2aXR5SWQ6IHN0cmluZywgZ3Vlc3RJZDogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKGd1ZXN0RmFjdG9yeSwgUm9sZS5QdWJsaWMsIFBVQkxJQ19PUEVOX0FDVElWSVRZX0dVRVNUX0RFVEFJTF9QQVRILCB7IGFjdGl2aXR5SWQsIGd1ZXN0SWQgfSwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVQdWJsaWNPcGVuQWN0aXZpdHlHdWVzdChhY3Rpdml0eUlkOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShSb2xlLlB1YmxpYywgUFVCTElDX09QRU5fQUNUSVZJVFlfR1VFU1RfREVUQUlMX1BBVEgsIHsgYWN0aXZpdHlJZCwgZ3Vlc3RJZCB9KTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eSh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGFjdGl2aXR5LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVtb3ZlVW51c2VkQWN0aXZpdHlGaWVsZHMoey4uLmFjdGl2aXR5fSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbih0ZWFtSWQ6IHN0cmluZywgcXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5UXVlc3Rpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9RVUVTVElPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBxdWVzdGlvbi5pZFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnJlbW92ZVVudXNlZEFjdGl2aXR5UXVlc3Rpb25GaWVsZHMoey4uLnF1ZXN0aW9ufSlcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUludml0ZSh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiBNZW1iZXJBY3Rpdml0eUludml0ZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgbWVtYmVyQWN0aXZpdHlJbnZpdGVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkLFxuICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVcbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBtZW1iZXJzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9QQVJUSUNJUEFOVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJzXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE9wZW5BY3Rpdml0eURhdGVQYXJhbXMoc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICBsZXQgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgJ2FsbCc6IGFsbCA/ICd0cnVlJyA6ICdmYWxzZSdcbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydzdGFydF9kYXRlJ10gPSBzdGFydERhdGUgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2VuZF9kYXRlJ10gPSBlbmREYXRlIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXMob3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zOiBPcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXNJbnRlcmZhY2UpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgZW5kX2RhdGU6IG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5lbmREYXRlLFxuICAgICAgbGltaXQ6ICdudWxsJyxcbiAgICAgIHN0YXJ0X2RhdGU6IG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5zdGFydERhdGVcbiAgICB9O1xuXG4gICAgaWYgKG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5hY3Rpdml0eVR5cGVJZCkge1xuICAgICAgcGFyYW1zWydhY3Rpdml0eV90eXBlX2lkJ10gPSBvcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXMuYWN0aXZpdHlUeXBlSWQ7XG4gICAgfVxuXG4gICAgaWYgKG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5sb2NhdGlvbklkKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2lkJ10gPSBvcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXMubG9jYXRpb25JZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVVbnVzZWRBY3Rpdml0eUZpZWxkcyhhY3Rpdml0eTogUGFydGlhbDxBY3Rpdml0eT4pOiBQYXJ0aWFsPEFjdGl2aXR5PiB7XG4gICAgaWYgKHR5cGVvZiBhY3Rpdml0eS5pZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlbGV0ZSBhY3Rpdml0eS5pZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFjdGl2aXR5LmZpbGUgIT09ICd1bmRlZmluZWQnICYmICFhY3Rpdml0eS5maWxlKSB7XG4gICAgICBkZWxldGUgYWN0aXZpdHkuZmlsZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFjdGl2aXR5Lmludml0ZV9sYXN0X3Jlc3BvbnNlX2RhdGUgIT09ICd1bmRlZmluZWQnICYmICFhY3Rpdml0eS5pbnZpdGVfbGFzdF9yZXNwb25zZV9kYXRlKSB7XG4gICAgICBkZWxldGUgYWN0aXZpdHkuaW52aXRlX2xhc3RfcmVzcG9uc2VfZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZpdHk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVVudXNlZEFjdGl2aXR5UXVlc3Rpb25GaWVsZHMocXVlc3Rpb246IFBhcnRpYWw8QWN0aXZpdHlRdWVzdGlvbj4pOiBQYXJ0aWFsPEFjdGl2aXR5UXVlc3Rpb24+IHtcbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVsZXRlIHF1ZXN0aW9uLmlkO1xuICAgIH1cbiAgICBkZWxldGUgcXVlc3Rpb24uY2x1Yl9pZDtcbiAgICBkZWxldGUgcXVlc3Rpb24uc2VjdGlvbl9pZDtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbn1cbiJdfQ==
750
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc2VydmljZXMvYWN0aXZpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFRTCxJQUFJLEdBQ0wsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLCtCQUErQixFQUMvQixZQUFZLEVBQ1osWUFBWSxFQUNaLDJCQUEyQixFQUMzQixtQkFBbUIsRUFBRSxzQkFBc0IsRUFDM0MsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFFcEUsTUFBTSwyQkFBMkIsR0FBRyx3QkFBd0IsQ0FBQztBQUM3RCxNQUFNLDZCQUE2QixHQUFHLGFBQWEsQ0FBQztBQUNwRCxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0saUNBQWlDLEdBQUcsc0NBQXNDLENBQUM7QUFDakYsTUFBTSwyQ0FBMkMsR0FBRywyQ0FBMkMsQ0FBQztBQUNoRyxNQUFNLGtDQUFrQyxHQUFHLHVDQUF1QyxDQUFDO0FBQ25GLE1BQU0sZ0NBQWdDLEdBQUcsc0NBQXNDLENBQUM7QUFFaEYsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsQ0FBQztBQUNuRSxNQUFNLDRCQUE0QixHQUFHLCtCQUErQixDQUFDO0FBQ3JFLE1BQU0sMkJBQTJCLEdBQUcsMkNBQTJDLENBQUM7QUFDaEYsTUFBTSx3QkFBd0IsR0FBRywyQkFBMkIsQ0FBQztBQUM3RCxNQUFNLHVCQUF1QixHQUFHLG1DQUFtQyxDQUFDO0FBRXBFLE1BQU0sOEJBQThCLEdBQUcsaUNBQWlDLENBQUM7QUFDekUsTUFBTSwrQkFBK0IsR0FBRyxrQ0FBa0MsQ0FBQztBQUMzRSxNQUFNLDhCQUE4QixHQUFHLDhDQUE4QyxDQUFDO0FBQ3RGLE1BQU0sMkJBQTJCLEdBQUcsOEJBQThCLENBQUM7QUFDbkUsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUUxRSxNQUFNLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDO0FBQ25ELE1BQU0sa0NBQWtDLEdBQUcsZ0NBQWdDLENBQUM7QUFDNUUsTUFBTSwwQkFBMEIsR0FBRyx5Q0FBeUMsQ0FBQztBQUM3RSxNQUFNLHlCQUF5QixHQUFHLDJEQUEyRCxDQUFDO0FBQzlGLE1BQU0sZ0NBQWdDLEdBQUcseUVBQXlFLENBQUM7QUFDbkgsTUFBTSxzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQztBQUN6RCxNQUFNLCtCQUErQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3ZGLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDckQsTUFBTSwwQkFBMEIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNyRSxNQUFNLDJCQUEyQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3hFLE1BQU0sNEJBQTRCLEdBQUcsK0JBQStCLENBQUM7QUFDckUsTUFBTSw2QkFBNkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRSxNQUFNLDJCQUEyQixHQUFHLDhCQUE4QixDQUFDO0FBQ25FLE1BQU0sd0JBQXdCLEdBQUcsMkJBQTJCLENBQUM7QUFDN0QsTUFBTSw0QkFBNEIsR0FBRywrQkFBK0IsQ0FBQztBQUNyRSxNQUFNLGtCQUFrQixHQUFHLDhCQUE4QixDQUFDO0FBRTFELE1BQU0sK0JBQStCLEdBQUcsdURBQXVELENBQUM7QUFDaEcsTUFBTSwyQkFBMkIsR0FBRyx5Q0FBeUMsQ0FBQztBQUM5RSxNQUFNLG9CQUFvQixHQUFHLDRDQUE0QyxDQUFDO0FBQzFFLE1BQU0sNEJBQTRCLEdBQUcsdUJBQXVCLENBQUM7QUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUM5RCxNQUFNLDJCQUEyQixHQUFHLDRCQUE0QixDQUFDO0FBQ2pFLE1BQU0sMENBQTBDLEdBQUcsa0NBQWtDLENBQUM7QUFDdEYsTUFBTSw4Q0FBOEMsR0FBRyxzQ0FBc0MsQ0FBQztBQUM5RixNQUFNLHlCQUF5QixHQUFHLHdDQUF3QyxDQUFDO0FBQzNFLE1BQU0saUNBQWlDLEdBQUcsZ0RBQWdELENBQUM7QUFDM0YsTUFBTSwyQ0FBMkMsR0FBRyxxREFBcUQsQ0FBQztBQUMxRyxNQUFNLDZCQUE2QixHQUFHLGdDQUFnQyxDQUFDO0FBQ3ZFLE1BQU0sMEJBQTBCLEdBQUcsNkJBQTZCLENBQUM7QUFDakUsTUFBTSw4QkFBOEIsR0FBRyxpQ0FBaUMsQ0FBQztBQUV6RSxNQUFNLHlCQUF5QixHQUFHLHdDQUF3QyxDQUFDO0FBQzNFLE1BQU0sd0JBQXdCLEdBQUcsaURBQWlELENBQUM7QUFDbkYsTUFBTSxrQ0FBa0MsR0FBRyx3Q0FBd0MsQ0FBQztBQUNwRixNQUFNLGlDQUFpQyxHQUFHLGlEQUFpRCxDQUFDO0FBRTVGLE1BQU0sc0NBQXNDLEdBQUcsK0JBQStCLENBQUM7QUFDL0UsTUFBTSx3Q0FBd0MsR0FBRyx3Q0FBd0MsQ0FBQztBQUMxRixNQUFNLG9DQUFvQyxHQUFHLHFDQUFxQyxDQUFDO0FBQ25GLE1BQU0sc0NBQXNDLEdBQUcsOENBQThDLENBQUM7QUFFOUYsTUFBTSxpQ0FBaUMsR0FBRyx5REFBeUQsQ0FBQztBQUNwRyxNQUFNLDhCQUE4QixHQUFHLDZDQUE2QyxDQUFDO0FBRXJGLE1BQU0sK0JBQStCLEdBQUcsOENBQThDLENBQUM7QUFDdkYsTUFBTSwwQ0FBMEMsR0FBRyx5REFBeUQsQ0FBQztBQUM3RyxNQUFNLHFDQUFxQyxHQUFHLHVEQUF1RCxDQUFDO0FBQ3RHLE1BQU0sMkNBQTJDLEdBQUcsNkRBQTZELENBQUM7QUFDbEgsTUFBTSw2Q0FBNkMsR0FBRywrREFBK0QsQ0FBQztBQUN0SCxNQUFNLDRDQUE0QyxHQUFHLDhEQUE4RCxDQUFDO0FBQ3BILE1BQU0sMkNBQTJDLEdBQUcsNkRBQTZELENBQUM7QUFDbEgsTUFBTSwwQ0FBMEMsR0FBRyw0REFBNEQsQ0FBQztBQUVoSCxNQUFNLHdDQUF3QyxHQUFHLDZDQUE2QyxDQUFDO0FBQy9GLE1BQU0sOEJBQThCLEdBQUcsNENBQTRDLENBQUM7QUFDcEYsTUFBTSw0Q0FBNEMsR0FBRywwREFBMEQsQ0FBQztBQUNoSCxNQUFNLHNDQUFzQyxHQUFHLGtFQUFrRSxDQUFDO0FBTWxILE1BQU0sT0FBTyxlQUFlO0lBSzFCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDMUMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLFNBQXdCO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixJQUFJLENBQUMsU0FBUyxFQUNkLDBCQUEwQixFQUMxQjtZQUNFLE1BQU07WUFDTixVQUFVO1NBQ1gsRUFDRDtZQUNFLE9BQU8sRUFBRSxTQUFTO1NBQ25CLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsSUFBdUI7UUFDeEQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixZQUFZLENBQ1gsZUFBZSxFQUNmLElBQUksQ0FBQyxTQUFTLEVBQ2Qsb0JBQW9CLEVBQ3BCO1lBQ0UsTUFBTTtTQUNQLEVBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUMsR0FBRyxJQUFJLEVBQUMsQ0FBQyxDQUMzQyxDQUFBO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUFDLE1BQWMsRUFBRSxRQUFtQztRQUM1RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCx1QkFBdUIsRUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFDZCw0QkFBNEIsRUFDNUI7WUFDRSxNQUFNO1NBQ1AsRUFDRCxJQUFJLENBQUMsa0NBQWtDLENBQUMsRUFBQyxHQUFHLFFBQVEsRUFBQyxDQUFDLENBQ3ZELENBQUE7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBYyxFQUFFLEVBQVU7UUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFDZCxrQkFBa0IsRUFDbEI7WUFDRSxNQUFNO1lBQ04sRUFBRTtTQUNILENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxnQkFBd0I7UUFDbkYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFDZCx5QkFBeUIsRUFDekI7WUFDRSxNQUFNO1lBQ04sVUFBVTtZQUNWLGdCQUFnQjtTQUNqQixDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsMEJBQTBCLENBQUMsTUFBYyxFQUFFLEVBQVU7UUFDbkQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFDZCwyQkFBMkIsRUFDM0IsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFDLENBQ2IsQ0FBQztJQUNOLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLGVBQWUsRUFDZixJQUFJLENBQUMsV0FBVyxFQUNoQixvQkFBb0IsRUFDcEI7WUFDRSxRQUFRO1lBQ1IsVUFBVTtTQUNYLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLGdCQUF3QjtRQUNoRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsMkJBQTJCLEVBQzNCO1lBQ0UsUUFBUTtZQUNSLGdCQUFnQjtTQUNqQixDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBZ0I7UUFDdkMsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFakYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1oscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDRCQUE0QixFQUM1QixFQUFDLFFBQVEsRUFBQyxFQUNWO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLFlBQTJCLElBQUksRUFBRSxVQUF5QixJQUFJLEVBQUUsZUFBd0IsS0FBSztRQUNySSxNQUFNLE1BQU0sR0FBOEIsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFMUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixZQUFZLEVBQ1osSUFBSSxDQUFDLFdBQVcsRUFDaEIsb0JBQW9CLEVBQ3BCLEVBQUMsUUFBUSxFQUFDLEVBQ1Y7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWdCLEVBQUUsd0JBQTJEO1FBQ25HLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLG1CQUFtQixFQUNuQixJQUFJLENBQUMsV0FBVyxFQUNoQiwyQkFBMkIsRUFDM0IsRUFBQyxRQUFRLEVBQUMsRUFDVjtZQUNFLE1BQU0sRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsd0JBQXdCLENBQUM7U0FDbkUsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDeEQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixXQUFXLENBQ1YsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLHlCQUF5QixFQUN6QjtZQUNFLFFBQVE7WUFDUixVQUFVO1NBQ1gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELGtDQUFrQyxDQUFDLFFBQWdCLEVBQUUsWUFBMkIsSUFBSSxFQUFFLFVBQXlCLElBQUksRUFBRSxNQUFlLEtBQUs7UUFDdkksT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDBDQUEwQyxFQUMxQztZQUNFLFFBQVE7U0FDVCxFQUNEO1lBQ0UsTUFBTSxFQUFFO2dCQUNOLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO2dCQUMxRCxLQUFLLEVBQUUsTUFBTTthQUNkO1NBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELDhCQUE4QixDQUFDLFFBQWdCLEVBQUUsWUFBMkIsSUFBSSxFQUFFLFVBQXlCLElBQUksRUFBRSxNQUFlLEtBQUs7UUFDbkksT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDhDQUE4QyxFQUM5QztZQUNFLFFBQVE7U0FDVCxFQUNEO1lBQ0UsTUFBTSxFQUFFO2dCQUNOLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO2dCQUMxRCxLQUFLLEVBQUUsTUFBTTthQUNkO1NBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLHFCQUFxQixFQUNyQixJQUFJLENBQUMsTUFBTSxFQUNYLDJCQUEyQixFQUMzQjtZQUNFLEVBQUU7WUFDRixLQUFLO1NBQ04sQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELDZCQUE2QixDQUFDLGdCQUF3QjtRQUNwRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLE1BQU0sRUFDWCxrQ0FBa0MsRUFDbEM7WUFDRSxnQkFBZ0I7U0FDakIsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUMxRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixZQUFZLEVBQ1osSUFBSSxDQUFDLE1BQU0sRUFDWCw2QkFBNkIsRUFDN0IsRUFBRSxFQUNGO1lBQ0UsTUFBTSxFQUFFO2dCQUNOLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixLQUFLLEVBQUUsTUFBTTthQUNkO1NBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWtCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLGVBQWUsRUFDZixJQUFJLENBQUMsTUFBTSxFQUNYLDJCQUEyQixFQUMzQjtZQUNFLFVBQVU7U0FDWCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLGVBQWUsRUFDZixJQUFJLENBQUMsU0FBUyxFQUNkLGtCQUFrQixFQUNsQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FDYixDQUFBO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLGVBQWUsRUFDZixJQUFJLENBQUMsU0FBUyxFQUNkLDBCQUEwQixFQUMxQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FDYixDQUFBO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxFQUNkLDJCQUEyQixFQUMzQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FDYixDQUFBO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQWM7UUFDckMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQ2QsNEJBQTRCLEVBQzVCLEVBQUMsTUFBTSxFQUFDLEVBQ1IsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQTtJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsTUFBYyxFQUFFLFFBQWlCLEtBQUs7UUFDckUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssSUFBSSxDQUFDLFNBQVM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RCxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNwQixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsS0FBSyxJQUFJLENBQUMsU0FBUztnQkFDakIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELEtBQUssSUFBSSxDQUFDLFdBQVc7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN2RDtnQkFDRSxNQUFNLGdCQUFnQixDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBYyxFQUFFLFFBQWlCLEtBQUs7UUFDN0QsSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQ2QsNEJBQTRCLEVBQzVCLEVBQUMsTUFBTSxFQUFDLEVBQ1IsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsMEJBQXdELEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxRQUFnQixFQUFFLFFBQWlCLEtBQUs7UUFDakUsSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDhCQUE4QixFQUM5QixFQUFDLFFBQVEsRUFBQyxFQUNWLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLDBCQUF3RCxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBYyxFQUFFLFFBQWlCLEtBQUs7UUFDN0QsSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQ2QsNEJBQTRCLEVBQzVCLEVBQUMsTUFBTSxFQUFDLEVBQ1IsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsMEJBQXdELEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxTQUFpQixFQUFFLFFBQWlCLEtBQUs7UUFDbkUsSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBELENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLCtCQUErQixFQUMvQixFQUFDLFNBQVMsRUFBQyxFQUNYLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLDBCQUF3RCxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLFFBQTBCO1FBQzFGLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUNqQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMxRSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNwQixPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RTtnQkFDRSxNQUFNLGdCQUFnQixDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsTUFBYyxFQUFFLFFBQTBCO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxFQUNkLDJCQUEyQixFQUMzQjtZQUNFLE1BQU07WUFDTixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7U0FDeEIsRUFDRCxRQUFRLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsc0JBQXNCLENBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLCtCQUErQixFQUMvQjtZQUNFLFFBQVE7WUFDUixVQUFVO1NBQ1gsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxTQUFpQixFQUFFLFFBQTBCO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLHVCQUF1QixFQUN2QixJQUFJLENBQUMsWUFBWSxFQUNqQiw4QkFBOEIsRUFDOUI7WUFDRSxTQUFTO1lBQ1QsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1NBQ3hCLEVBQ0QsUUFBUSxDQUNULENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBYztRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVixlQUFlLEVBQ2YsSUFBSSxDQUFDLFNBQVMsRUFDZCxzQkFBc0IsRUFDdEIsRUFBQyxNQUFNLEVBQUMsQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQWMsRUFBRSxVQUFrQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFDZCwrQkFBK0IsRUFDL0I7WUFDRSxNQUFNO1lBQ04sVUFBVTtTQUNYLEVBQ0QsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQztJQUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsVUFBa0I7UUFDdEQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osWUFBWSxFQUNaLElBQUksQ0FBQyxTQUFTLEVBQ2QseUJBQXlCLEVBQ3pCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUN0QixFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUM5QixDQUFDO0lBQ04sQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLElBQXdDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLFlBQVksRUFDWixJQUFJLENBQUMsU0FBUyxFQUNkLHlCQUF5QixFQUN6QixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFDdEIsSUFBSSxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFVBQWtCLEVBQUUsT0FBZSxFQUFFLElBQXdDO1FBQ25ILE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLFlBQVksRUFDWixJQUFJLENBQUMsU0FBUyxFQUNkLHdCQUF3QixFQUN4QixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQy9CLElBQUksQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLE9BQWU7UUFDekUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFDZCx3QkFBd0IsRUFDeEIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxJQUF3QztRQUNqRyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxZQUFZLEVBQ1osSUFBSSxDQUFDLFdBQVcsRUFDaEIsa0NBQWtDLEVBQ2xDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN0QixJQUFJLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLElBQXdDO1FBQ3JILE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLFlBQVksRUFDWixJQUFJLENBQUMsV0FBVyxFQUNoQixpQ0FBaUMsRUFDakMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUMvQixJQUFJLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZTtRQUMzRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsV0FBVyxFQUNoQixpQ0FBaUMsRUFDakMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUVELGlDQUFpQyxDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDcEUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixXQUFXLENBQ1YsK0JBQStCLEVBQy9CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLGlDQUFpQyxFQUNqQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FDekIsQ0FBQztJQUNOLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLCtCQUErQixFQUMvQixJQUFJLENBQUMsV0FBVyxFQUNoQixpQ0FBaUMsRUFDakMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQ3hCLEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELDhCQUE4QixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDakUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsaUNBQWlDLEVBQ2pDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUN6QixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUN6RCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDViwrQkFBK0IsRUFDL0IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsOEJBQThCLEVBQzlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVELDBCQUEwQixDQUFDLE1BQWMsRUFBRSxVQUFrQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVixDQUFDLEdBQTJHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEgsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFrQyxFQUFFLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoSCxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3hHLENBQUMsRUFDRixJQUFJLENBQUMsU0FBUyxFQUNkLCtCQUErQixFQUMvQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FDdkIsQ0FBQztJQUNOLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxNQUFjLEVBQUUsVUFBa0I7UUFDOUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCwwQ0FBMEMsRUFDMUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQ3RCLEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELDhCQUE4QixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLE9BQWU7UUFDaEYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCwyQ0FBMkMsRUFDM0MsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUMvQixFQUFFLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxPQUFlLEVBQUUsU0FBd0I7UUFDNUcsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixzQkFBc0IsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCw2Q0FBNkMsRUFDN0MsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUMvQixFQUFFLFNBQVMsRUFBRSxDQUNkLENBQUM7SUFDTixDQUFDO0lBRUQsK0JBQStCLENBQUMsTUFBYyxFQUFFLFVBQWtCLEVBQUUsT0FBZTtRQUNqRixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLHNCQUFzQixDQUNyQixJQUFJLENBQUMsU0FBUyxFQUNkLDRDQUE0QyxFQUM1QyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQy9CLEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELDhCQUE4QixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLE9BQWU7UUFDaEYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixZQUFZLENBQ1gsK0JBQStCLEVBQy9CLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkNBQTJDLEVBQzNDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFDL0IsRUFBRSxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsNkJBQTZCLENBQUMsTUFBYyxFQUFFLFVBQWtCLEVBQUUsT0FBZTtRQUMvRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLHNCQUFzQixDQUNyQixJQUFJLENBQUMsU0FBUyxFQUNkLDBDQUEwQyxFQUMxQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQy9CLEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELCtCQUErQixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLE9BQWU7UUFDakYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFDZCxxQ0FBcUMsRUFDckMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUNoQyxDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLCtCQUErQixFQUMvQixJQUFJLENBQUMsTUFBTSxFQUNYLHdDQUF3QyxFQUN4QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELHFCQUFxQixDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLCtCQUErQixFQUMvQixJQUFJLENBQUMsTUFBTSxFQUNYLHdDQUF3QyxFQUN4QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFDYixFQUFFLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxFQUFVLEVBQUUsS0FBYTtRQUM5QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsTUFBTSxFQUNYLHdDQUF3QyxFQUN4QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLCtCQUErQixFQUMvQixJQUFJLENBQUMsTUFBTSxFQUNYLDhCQUE4QixFQUM5QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELGtDQUFrQyxDQUFDLEVBQVUsRUFBRSxLQUFhO1FBQzFELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLG1CQUFtQixFQUNuQixJQUFJLENBQUMsTUFBTSxFQUNYLDRDQUE0QyxFQUM1QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELHNDQUFzQyxDQUFDLEVBQVUsRUFBRSxLQUFhLEVBQUUsT0FBZSxFQUFFLFlBQTJCLEVBQUUsU0FBMEMsRUFBRSxTQUFvRCxFQUFFO1FBQ2hOLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLG1CQUFtQixFQUNuQixJQUFJLENBQUMsTUFBTSxFQUNYLHNDQUFzQyxFQUN0QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFDYjtZQUNFLE9BQU87WUFDUCxhQUFhLEVBQUUsWUFBWTtZQUMzQixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCxzQ0FBc0MsQ0FBQyxFQUFVLEVBQUUsS0FBYTtRQUM5RCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsTUFBTSxFQUNYLHNDQUFzQyxFQUN0QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVUsRUFBRSxNQUFjO1FBQzVDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUNqQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNwQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUNqQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxLQUFLLElBQUksQ0FBQyxXQUFXO2dCQUNuQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRDtnQkFDRSxNQUFNLGdCQUFnQixDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBYztRQUNwQyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FDVix1QkFBdUIsRUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFDZCwyQkFBMkIsRUFDM0I7WUFDRSxNQUFNO1NBQ1AsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHlCQUF5QixDQUFDLFFBQWdCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLHVCQUF1QixFQUN2QixJQUFJLENBQUMsV0FBVyxFQUNoQiw2QkFBNkIsRUFDN0IsRUFBQyxRQUFRLEVBQUMsQ0FDWCxDQUFDO0lBQ04sQ0FBQztJQUVELDBCQUEwQixDQUFDLFNBQWlCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsV0FBVyxDQUNWLHVCQUF1QixFQUN2QixJQUFJLENBQUMsWUFBWSxFQUNqQiw4QkFBOEIsRUFDOUI7WUFDRSxTQUFTO1NBQ1YsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWM7UUFDcEMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixXQUFXLENBQ1YsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkJBQTJCLEVBQzNCO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUN6QyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxJQUFJLENBQUMsU0FBUztnQkFDakIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLENBQUMsWUFBWTtnQkFDcEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsS0FBSyxJQUFJLENBQUMsU0FBUztnQkFDakIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLENBQUMsV0FBVztnQkFDbkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0M7Z0JBQ0UsTUFBTSxnQkFBZ0IsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELDhCQUE4QixDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUNoRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxrQ0FBa0MsRUFDbEMsRUFBQyxNQUFNLEVBQUMsRUFDUixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUMsRUFBQyxDQUMzQixDQUFBO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUMxRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFNBQVMsRUFDZCw2QkFBNkIsRUFDN0IsRUFBQyxNQUFNLEVBQUMsRUFDUixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUMsRUFBQyxDQUMzQixDQUFBO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWM7UUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxTQUFTLEVBQ2Qsd0JBQXdCLEVBQ3hCLEVBQUMsTUFBTSxFQUFDLEVBQ1IsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQTtJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFnQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsMEJBQTBCLEVBQzFCLEVBQUMsUUFBUSxFQUFDLEVBQ1YsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEVBQUMsQ0FDMUIsQ0FBQTtJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsYUFBYSxDQUNaLG1CQUFtQixFQUNuQixJQUFJLENBQUMsU0FBUyxFQUNkLHdCQUF3QixFQUN4QixFQUFDLE1BQU0sRUFBQyxFQUNSLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBaUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDJCQUEyQixFQUMzQixFQUFDLFNBQVMsRUFBQyxFQUNYLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxFQUFDLENBQzFCLENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBVSxFQUFFLHFCQUE2QixFQUFFLFlBQTBCO1FBQ3RGLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUNqQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMxRSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNwQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3RTtnQkFDRSxNQUFNLGdCQUFnQixDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBYyxFQUFFLFlBQTBCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLG1CQUFtQixFQUNuQixJQUFJLENBQUMsU0FBUyxFQUNkLHVCQUF1QixFQUN2QjtZQUNFLE1BQU07WUFDTixNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUU7U0FDeEIsRUFDRCxZQUFZLENBQ2IsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxTQUFpQixFQUFFLFlBQTBCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLG1CQUFtQixFQUNuQixJQUFJLENBQUMsWUFBWSxFQUNqQiwwQkFBMEIsRUFDMUI7WUFDRSxTQUFTO1lBQ1QsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFO1NBQ3hCLEVBQ0QsWUFBWSxDQUNiLENBQUM7SUFDTixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBYyxFQUFFLFlBQTJCLElBQUksRUFBRSxVQUF5QixJQUFJLEVBQUUsZUFBd0IsS0FBSztRQUNqSSxNQUFNLE1BQU0sR0FBOEIsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFMUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWixZQUFZLEVBQ1osSUFBSSxDQUFDLFNBQVMsRUFDZCxrQkFBa0IsRUFDbEIsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLGdCQUF3QjtRQUN2RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFlBQVksQ0FDWCxxQkFBcUIsRUFDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxnQ0FBZ0MsRUFDaEM7WUFDRSxNQUFNO1lBQ04sVUFBVTtZQUNWLGdCQUFnQjtTQUNqQixFQUNELEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDM0QsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsaUNBQWlDLEVBQ2pDO1lBQ0UsUUFBUTtZQUNSLFVBQVU7U0FDWCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsSUFBSSxDQUFDLE1BQU0sRUFDWCxpQ0FBaUMsRUFDakM7WUFDRSxVQUFVO1NBQ1gsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQWdCLEVBQUUsVUFBa0IsRUFBRSxPQUFlLEVBQUUsWUFBMkIsRUFBRSxTQUEwQyxFQUFFLFNBQW9ELEVBQUU7UUFDN00sT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDJDQUEyQyxFQUMzQztZQUNFLFFBQVE7WUFDUixVQUFVO1NBQ1gsRUFDRDtZQUNFLE9BQU87WUFDUCxhQUFhLEVBQUUsWUFBWTtZQUMzQixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxVQUFrQixFQUFFLE9BQWUsRUFBRSxZQUEyQixFQUFFLFNBQTBDLEVBQUUsU0FBb0QsRUFBRTtRQUMzTCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFDWCwyQ0FBMkMsRUFDM0M7WUFDRSxVQUFVO1NBQ1gsRUFDRDtZQUNFLE9BQU87WUFDUCxhQUFhLEVBQUUsWUFBWTtZQUMzQixTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsNEZBQTRGO0lBQzVGLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsZ0JBQXdCLEVBQUUsY0FBdUI7UUFDdEYsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixvQkFBb0IsQ0FDbkIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLDJCQUEyQixFQUMzQjtZQUNFLFFBQVE7WUFDUixnQkFBZ0I7U0FDakIsRUFDRCxjQUFjLENBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxnQkFBd0IsRUFBRSxjQUF1QjtRQUNoRixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLG9CQUFvQixDQUNuQixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLE1BQU0sRUFDWCxrQ0FBa0MsRUFDbEM7WUFDRSxnQkFBZ0I7U0FDakIsRUFDRCxjQUFjLENBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUFFLGNBQXVCO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsb0JBQW9CLENBQ25CLHFCQUFxQixFQUNyQixJQUFJLENBQUMsTUFBTSxFQUNYLDJCQUEyQixFQUMzQjtZQUNFLEVBQUU7WUFDRixLQUFLO1NBQ04sRUFDRCxjQUFjLENBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxFQUFVLEVBQUUsY0FBdUI7UUFDaEUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixvQkFBb0IsQ0FDbkIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxNQUFNLEVBQ1gsZ0NBQWdDLEVBQ2hDO1lBQ0UsRUFBRTtTQUNILEVBQ0QsY0FBYyxDQUNmLENBQUM7SUFDTixDQUFDO0lBRUQsMkJBQTJCLENBQUMsVUFBa0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osWUFBWSxFQUNaLElBQUksQ0FBQyxNQUFNLEVBQ1gsb0NBQW9DLEVBQ3BDLEVBQUUsVUFBVSxFQUFFLEVBQ2QsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDOUIsQ0FBQztJQUNOLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUFFLElBQXdDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUFFLE9BQWUsRUFBRSxJQUF3QztRQUNuSCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSx3Q0FBd0MsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELGdDQUFnQyxDQUFDLEVBQVUsRUFBRSxLQUFhLEVBQUUsT0FBZTtRQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHdDQUF3QyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxVQUFrQixFQUFFLElBQXdDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLG9DQUFvQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELDZCQUE2QixDQUFDLFVBQWtCLEVBQUUsT0FBZSxFQUFFLElBQXdDO1FBQ3pHLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RILENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxVQUFrQixFQUFFLE9BQWU7UUFDL0QsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxzQ0FBc0MsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsUUFBa0I7UUFDbkQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsZUFBZSxFQUNmLElBQUksQ0FBQyxTQUFTLEVBQ2Qsa0JBQWtCLEVBQ2xCO1lBQ0UsTUFBTTtZQUNOLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtTQUNoQixFQUNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFDLEdBQUcsUUFBUSxFQUFDLENBQUMsQ0FDL0MsQ0FBQztJQUNOLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxNQUFjLEVBQUUsUUFBMEI7UUFDbkUsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixjQUFjLENBQ2IsdUJBQXVCLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkJBQTJCLEVBQzNCO1lBQ0UsTUFBTTtZQUNOLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtTQUNoQixFQUNELElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFDLEdBQUcsUUFBUSxFQUFDLENBQUMsQ0FDdkQsQ0FBQTtJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxnQkFBd0IsRUFBRSxjQUFvQztRQUN6SCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYiwyQkFBMkIsRUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFDZCx5QkFBeUIsRUFDekI7WUFDRSxNQUFNO1lBQ04sVUFBVTtZQUNWLGdCQUFnQjtTQUNqQixFQUNELGNBQWMsQ0FDZixDQUFBO0lBQ0wsQ0FBQztJQUVELDhCQUE4QixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLE9BQXNCO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsWUFBWSxDQUNYLEdBQUcsRUFBRTtRQUNMLENBQUMsRUFDRCxJQUFJLENBQUMsU0FBUyxFQUNkLCtCQUErQixFQUMvQjtZQUNFLE1BQU07WUFDTixVQUFVO1NBQ1gsRUFDRDtZQUNFLE9BQU87U0FDUixDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8seUJBQXlCLENBQUMsU0FBd0IsRUFBRSxPQUFzQixFQUFFLE1BQWUsS0FBSztRQUN0RyxJQUFJLE1BQU0sR0FBOEI7WUFDdEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzlCLENBQUM7UUFFRixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQW1CLENBQUM7UUFDN0MsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBaUIsQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDJCQUEyQixDQUFDLHdCQUEyRDtRQUM3RixNQUFNLE1BQU0sR0FBOEI7WUFDeEMsUUFBUSxFQUFFLHdCQUF3QixDQUFDLE9BQU87WUFDMUMsS0FBSyxFQUFFLE1BQU07WUFDYixVQUFVLEVBQUUsd0JBQXdCLENBQUMsU0FBUztTQUMvQyxDQUFDO1FBRUYsSUFBSSx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksd0JBQXdCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQTJCO1FBQzVELElBQUksT0FBTyxRQUFRLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxPQUFPLFFBQVEsQ0FBQyx5QkFBeUIsS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNyRyxPQUFPLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGtDQUFrQyxDQUFDLFFBQW1DO1FBQzVFLElBQUksT0FBTyxRQUFRLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMzQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQWh1Q1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuICBBY3Rpdml0eSxcbiAgQWN0aXZpdHlMb2NhdGlvbiwgQWN0aXZpdHlRdWVzdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlLFxuICBBY3Rpdml0eVR5cGUsXG4gIENvbGxlY3Rpb24sXG4gIEd1ZXN0LFxuICBNZW1iZXJBY3Rpdml0eUludml0ZSxcbiAgUm9sZSxcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBhY3Rpdml0eUZhY3RvcnksXG4gIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gIGFjdGl2aXR5UXVlc3Rpb25GYWN0b3J5LFxuICBhY3Rpdml0eVNldHRpbmdzRmFjdG9yeSxcbiAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgZXZlbnRGYWN0b3J5LFxuICBndWVzdEZhY3RvcnksXG4gIG1lbWJlckFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgb3BlbkFjdGl2aXR5RmFjdG9yeSwgc2VhcmNoQXR0cmlidXRlRmFjdG9yeSxcbiAgc2VhcmNoTWVtYmVyRmFjdG9yeSxcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5IH0gZnJvbSAnLi4vYXBpLW1vZGVscyc7XG5pbXBvcnQgeyBzdWIgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBPcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXNJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGludmFsaWRSb2xlRXJyb3IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHNlYXJjaFRlYW1GYWN0b3J5IH0gZnJvbSAnLi9mYWN0b3JpZXMvc2VhcmNoLXRlYW0tZmFjdG9yeSc7XG5cbmNvbnN0IFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfUEFUSCA9ICdhY3Rpdml0aWVzLzppZC86dG9rZW4vJztcbmNvbnN0IFBVQkxJQ19NRU1CRVJfQUNUSVZJVElFU19QQVRIID0gJ2FjdGl2aXRpZXMvJztcbmNvbnN0IFBVQkxJQ19NRU1CRVJfQUNUSVZJVFlfUEFUSCA9ICdhY3Rpdml0aWVzLzphY3Rpdml0eUlkLyc7XG5jb25zdCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1BBVEggPSAnb3Blbi1hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3Jlc3BvbmQvJztcbmNvbnN0IFBVQkxJQ19PUEVOX0FDVElWSVRZX1JFU1BPTkRfV0lUSF9EQVRBX1BBVEggPSAnb3Blbi1hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3Jlc3BvbmQtZGF0YS8nO1xuY29uc3QgUFVCTElDX01FTUJFUl9BQ1RJVklUWV9JTlZJVEVfUEFUSCA9ICdhY3Rpdml0aWVzL2ludml0ZXMvOmFjdGl2aXR5SW52aXRlSWQvJztcbmNvbnN0IFBVQkxJQ19PUEVOX0FDVElWSVRZX0lOVklURV9QQVRIID0gJ29wZW4tYWN0aXZpdGllcy9pbnZpdGVzLzphY3Rpdml0eUlkLyc7XG5cbmNvbnN0IENMVUJfQUNUSVZJVFlfU0VUVElOR1NfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQUNUSVZJVFlfTE9DQVRJT05TX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2xvY2F0aW9ucy8nO1xuY29uc3QgQ0xVQl9BQ1RJVklUWV9MT0NBVElPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvOmxvY2F0aW9uSWQvJztcbmNvbnN0IENMVUJfQUNUSVZJVFlfVFlQRVNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvdHlwZXMvJztcbmNvbnN0IENMVUJfQUNUSVZJVFlfVFlQRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy90eXBlcy86dHlwZUlkLyc7XG5cbmNvbnN0IFNFQ1RJT05fQUNUSVZJVFlfU0VUVElOR1NfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2V0dGluZ3MvJztcbmNvbnN0IFNFQ1RJT05fQUNUSVZJVFlfTE9DQVRJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2xvY2F0aW9ucy8nO1xuY29uc3QgU0VDVElPTl9BQ1RJVklUWV9MT0NBVElPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvOmxvY2F0aW9uSWQvJztcbmNvbnN0IFNFQ1RJT05fQUNUSVZJVFlfVFlQRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvdHlwZXMvJztcbmNvbnN0IFNFQ1RJT05fQUNUSVZJVFlfVFlQRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy90eXBlcy86dHlwZUlkLyc7XG5cbmNvbnN0IFRFQU1fQUNUSVZJVElFU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9SVUxFX0FUVFJJQlVURVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXR0cmlidXRlcy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9JTlZJVEVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL2ludml0ZXMvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfSU5WSVRFX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL2ludml0ZXMvOmFjdGl2aXR5SW52aXRlSWQvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfSU5WSVRFX1JFU0VORF9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC9pbnZpdGVzLzphY3Rpdml0eUludml0ZUlkL3Jlc2VuZC1pbnZpdGUvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfTkVXX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL25ldy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9QQVJUSUNJUEFOVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvcGFydGljaXBhbnRzLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzppZC8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9RUl9DT0RFX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzppZC9xci1jb2RlLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1FVRVNUSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3F1ZXN0aW9ucy86aWQvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfUVVFU1RJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3F1ZXN0aW9ucy8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9SVUxFX1RFQU1TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3RlYW1zLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3NldHRpbmdzLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1RZUEVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3R5cGVzLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9sb2NhdGlvbnMvJztcbmNvbnN0IFRFQU1fQ0FMRU5EQVJfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXIvJztcblxuY29uc3QgTUVNQkVSX0FDVElWSVRZX0FUVEVOREFOQ0VfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9hY3Rpdml0eS86YWN0aXZpdHlJZC9hdHRlbmRhbmNlLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SW52aXRlSWQvJztcbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2FjdGl2aXR5LzphY3Rpdml0eUlkLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzLyc7XG5jb25zdCBNRU1CRVJfQ0FMRU5EQVJfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9jYWxlbmRhci8nO1xuY29uc3QgTUVNQkVSX09QRU5fQUNUSVZJVElFU19QQVRIID0gJzptZW1iZXJJZC9vcGVuLWFjdGl2aXRpZXMvJztcbmNvbnN0IE1FTUJFUl9PUEVOX0FDVElWSVRJRVNfQUNUSVZJVFlfVFlQRVNfUEFUSCA9ICc6bWVtYmVySWQvb3Blbi1hY3Rpdml0aWVzL3R5cGVzLyc7XG5jb25zdCBNRU1CRVJfT1BFTl9BQ1RJVklUSUVTX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRIID0gJzptZW1iZXJJZC9vcGVuLWFjdGl2aXRpZXMvbG9jYXRpb25zLyc7XG5jb25zdCBNRU1CRVJfT1BFTl9BQ1RJVklUWV9QQVRIID0gJzptZW1iZXJJZC9vcGVuLWFjdGl2aXRpZXMvOmFjdGl2aXR5SWQvJztcbmNvbnN0IE1FTUJFUl9PUEVOX0FDVElWSVRZX1JFU1BPTkRfUEFUSCA9ICc6bWVtYmVySWQvb3Blbi1hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3Jlc3BvbmQvJztcbmNvbnN0IE1FTUJFUl9PUEVOX0FDVElWSVRZX1JFU1BPTkRfV0lUSF9EQVRBX1BBVEggPSAnOm1lbWJlcklkL29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9yZXNwb25kLWRhdGEvJztcbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9TRVRUSU5HU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3NldHRpbmdzLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfVFlQRVNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy90eXBlcy8nO1xuY29uc3QgTUVNQkVSX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2xvY2F0aW9ucy8nO1xuXG5jb25zdCBURUFNX0FDVElWSVRZX0dVRVNUU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC9ndWVzdHMvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfR1VFU1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvZ3Vlc3RzLzpndWVzdElkLyc7XG5jb25zdCBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX0dVRVNUU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzLzppbnZpdGVJZC9ndWVzdHMvJztcbmNvbnN0IE1FTUJFUl9BQ1RJVklUWV9JTlZJVEVfR1VFU1RfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy86aW52aXRlSWQvZ3Vlc3RzLzpndWVzdElkLyc7XG5cbmNvbnN0IFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfR1VFU1RfTElTVF9QQVRIID0gJ2FjdGl2aXRpZXMvOmlkLzp0b2tlbi9ndWVzdHMvJztcbmNvbnN0IFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfR1VFU1RfREVUQUlMX1BBVEggPSAnYWN0aXZpdGllcy86aWQvOnRva2VuL2d1ZXN0cy86Z3Vlc3RJZC8nO1xuY29uc3QgUFVCTElDX09QRU5fQUNUSVZJVFlfR1VFU1RfTElTVF9QQVRIID0gJ29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9ndWVzdHMvJztcbmNvbnN0IFBVQkxJQ19PUEVOX0FDVElWSVRZX0dVRVNUX0RFVEFJTF9QQVRIID0gJ29wZW4tYWN0aXZpdGllcy86YWN0aXZpdHlJZC9ndWVzdHMvOmd1ZXN0SWQvJztcblxuY29uc3QgTUVNQkVSX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2FjdGl2aXR5LzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC8nO1xuY29uc3QgTUVNQkVSX1dBSVRJTkdfTElTVF9FTlRSWV9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3dhaXRpbmctbGlzdC86ZW50cnlJZC8nO1xuXG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy86YWN0aXZpdHlJZC93YWl0aW5nLWxpc3QvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX09QRU5fUExBQ0VfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvd2FpdGluZy1saXN0L29wZW4tcGxhY2UvJztcbmNvbnN0IFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfQURNSVRfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvd2FpdGluZy1saXN0LzplbnRyeUlkL2FkbWl0Lyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9SRU9SREVSX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC9yZW9yZGVyLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9SRU1JTkRfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvd2FpdGluZy1saXN0LzplbnRyeUlkL3JlbWluZC8nO1xuY29uc3QgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfRU5UUllfT0ZGRVJfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvOmFjdGl2aXR5SWQvd2FpdGluZy1saXN0LzplbnRyeUlkL29mZmVyLyc7XG5jb25zdCBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9QQVNTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzLzphY3Rpdml0eUlkL3dhaXRpbmctbGlzdC86ZW50cnlJZC9wYXNzLyc7XG5cbmNvbnN0IFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfV0FJVElOR19MSVNUX1BBVEggPSAnYWN0aXZpdGllcy9pbnZpdGVzLzppZC86dG9rZW4vd2FpdGluZy1saXN0Lyc7XG5jb25zdCBQVUJMSUNfV0FJVElOR19MSVNUX09GRkVSX1BBVEggPSAnYWN0aXZpdGllcy93YWl0aW5nLWxpc3Qtb2ZmZXJzLzppZC86dG9rZW4vJztcbmNvbnN0IFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfT1BFTl9BQ1RJVklUWV9QQVRIID0gJ2FjdGl2aXRpZXMvd2FpdGluZy1saXN0LW9mZmVycy86aWQvOnRva2VuL29wZW4tYWN0aXZpdHkvJztcbmNvbnN0IFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfUkVTUE9ORF9QQVRIID0gJ2FjdGl2aXRpZXMvd2FpdGluZy1saXN0LW9mZmVycy86aWQvOnRva2VuL29wZW4tYWN0aXZpdHkvcmVzcG9uZC8nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5U2VydmljZSB7XG4gIGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+IHwgdW5kZWZpbmVkO1xuXG4gIGFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICBhZGRUZWFtQWN0aXZpdHlJbnZpdGVzKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcklkczogQXJyYXk8c3RyaW5nPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgICgpID0+IHRydWUsXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0lOVklURVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJzOiBtZW1iZXJJZHNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5KHRlYW1JZDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPEFjdGl2aXR5Pikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVElFU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVtb3ZlVW51c2VkQWN0aXZpdHlGaWVsZHMoey4uLmRhdGF9KVxuICAgICAgKVxuICB9XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24odGVhbUlkOiBzdHJpbmcsIHF1ZXN0aW9uOiBQYXJ0aWFsPEFjdGl2aXR5UXVlc3Rpb24+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlRdWVzdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1FVRVNUSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVtb3ZlVW51c2VkQWN0aXZpdHlRdWVzdGlvbkZpZWxkcyh7Li4ucXVlc3Rpb259KVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5KHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGUodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkLFxuICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9RVUVTVElPTl9QQVRILFxuICAgICAgICB7dGVhbUlkLCBpZH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJBY3Rpdml0eShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldE1lbWJlckFjdGl2aXR5SW52aXRlKG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlJbnZpdGVGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBhY3Rpdml0eUludml0ZUlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJBY3Rpdml0eUludml0ZXMobWVtYmVySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnLCBvcGVuX2FjdGl2aXR5OiAndHJ1ZSd9O1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX0lOVklURVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQ2FsZW5kYXJFdmVudHMobWVtYmVySWQ6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIG9wZW5BY3Rpdml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydzZWFyY2hfc3RhcnRfZGF5J10gPSBzdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snc2VhcmNoX2VuZF9kYXknXSA9IGVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKG9wZW5BY3Rpdml0eSkge1xuICAgICAgcGFyYW1zWydvcGVuX2FjdGl2aXR5J10gPSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGV2ZW50RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWVtYmVyT3BlbkFjdGl2aXRpZXMobWVtYmVySWQ6IHN0cmluZywgb3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zOiBPcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXNJbnRlcmZhY2UpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgb3BlbkFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX09QRU5fQUNUSVZJVElFU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldE9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcyhvcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXMpXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldE1lbWJlck9wZW5BY3Rpdml0eShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIG9wZW5BY3Rpdml0eUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9PUEVOX0FDVElWSVRZX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpdml0eVR5cGVzKG1lbWJlcklkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eVR5cGVGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfT1BFTl9BQ1RJVklUSUVTX0FDVElWSVRZX1RZUEVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAuLi50aGlzLmdldE9wZW5BY3Rpdml0eURhdGVQYXJhbXMoc3RhcnREYXRlLCBlbmREYXRlLCBhbGwpLFxuICAgICAgICAgICAgbGltaXQ6ICdudWxsJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWVtYmVyT3BlbkFjdGl2aXR5TG9jYXRpb25zKG1lbWJlcklkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eUxvY2F0aW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX09QRU5fQUNUSVZJVElFU19BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0T3BlbkFjdGl2aXR5RGF0ZVBhcmFtcyhzdGFydERhdGUsIGVuZERhdGUsIGFsbCksXG4gICAgICAgICAgICBsaW1pdDogJ251bGwnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRQdWJsaWNBY3Rpdml0eUludml0ZShpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB0b2tlblxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUoYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfTUVNQkVSX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHVibGljTWVtYmVyQWN0aXZpdGllcyhzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGV2ZW50RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19NRU1CRVJfQUNUSVZJVElFU19QQVRILFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgc2VhcmNoX3N0YXJ0X2RheTogc3RhcnREYXRlLFxuICAgICAgICAgICAgc2VhcmNoX2VuZF9kYXk6IGVuZERhdGUsXG4gICAgICAgICAgICBsaW1pdDogJ251bGwnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRQdWJsaWNNZW1iZXJBY3Rpdml0eShhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19NRU1CRVJfQUNUSVZJVFlfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9QQVRILFxuICAgICAgICB7dGVhbUlkLCBpZH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVFSQ29kZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9RUl9DT0RFX1BBVEgsXG4gICAgICAgIHt0ZWFtSWQsIGlkfVxuICAgICAgKVxuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5UXVlc3Rpb24odGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5UXVlc3Rpb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9RVUVTVElPTl9QQVRILFxuICAgICAgICB7dGVhbUlkLCBpZH1cbiAgICAgIClcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVF1ZXN0aW9ucyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eVF1ZXN0aW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUVVFU1RJT05TX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApXG4gIH1cblxuICBnZXRBY3Rpdml0eUxvY2F0aW9ucyhyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkFjdGl2aXR5TG9jYXRpb25zKGl0ZW1JZCwgZm9yY2UpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkFjdGl2aXR5TG9jYXRpb25zKGl0ZW1JZCwgZm9yY2UpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUFjdGl2aXR5TG9jYXRpb25zKGl0ZW1JZCwgZm9yY2UpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJBY3Rpdml0eUxvY2F0aW9ucyhpdGVtSWQsIGZvcmNlKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlMb2NhdGlvbnModGVhbUlkOiBzdHJpbmcsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlICYmIHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSA+IHN1YihuZXcgRGF0ZSgpLCB7aG91cnM6IDF9KSAmJiAhZm9yY2UpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLmFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uIGFzIENvbGxlY3Rpb248QWN0aXZpdHlMb2NhdGlvbj4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eUxvY2F0aW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfTE9DQVRJT05TX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7bGltaXQ6ICdudWxsJ319XG4gICAgICApLnBpcGUoXG4gICAgICAgIHRhcCgoYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb246IENvbGxlY3Rpb248QWN0aXZpdHlMb2NhdGlvbj4pID0+IHtcbiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb24gPSBhY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRNZW1iZXJBY3Rpdml0eUxvY2F0aW9ucyhtZW1iZXJJZDogc3RyaW5nLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSAmJiB0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgPiBzdWIobmV3IERhdGUoKSwge2hvdXJzOiAxfSkgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiBhcyBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9MT0NBVElPTlNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKS5waXBlKFxuICAgICAgICB0YXAoKGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KSA9PiB7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uID0gYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb247XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Q2x1YkFjdGl2aXR5TG9jYXRpb25zKGNsdWJJZDogc3RyaW5nLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSAmJiB0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgPiBzdWIobmV3IERhdGUoKSwge2hvdXJzOiAxfSkgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiBhcyBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKS5waXBlKFxuICAgICAgICB0YXAoKGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KSA9PiB7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uID0gYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb247XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0U2VjdGlvbkFjdGl2aXR5TG9jYXRpb25zKHNlY3Rpb25JZDogc3RyaW5nLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZpdHlMb2NhdGlvblJlc3BvbnNlRGF0ZSAmJiB0aGlzLmFjdGl2aXR5TG9jYXRpb25SZXNwb25zZURhdGUgPiBzdWIobmV3IERhdGUoKSwge2hvdXJzOiAxfSkgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5hY3Rpdml0eUxvY2F0aW9uQ29sbGVjdGlvbiBhcyBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0FDVElWSVRZX0xPQ0FUSU9OU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKS5waXBlKFxuICAgICAgICB0YXAoKGFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KSA9PiB7XG4gICAgICAgICAgdGhpcy5hY3Rpdml0eUxvY2F0aW9uUmVzcG9uc2VEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9jYXRpb25Db2xsZWN0aW9uID0gYWN0aXZpdHlMb2NhdGlvbkNvbGxlY3Rpb247XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlQWN0aXZpdHlMb2NhdGlvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbG9jYXRpb246IEFjdGl2aXR5TG9jYXRpb24pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJBY3Rpdml0eUxvY2F0aW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbG9jYXRpb24pO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkFjdGl2aXR5TG9jYXRpb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBsb2NhdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNsdWJBY3Rpdml0eUxvY2F0aW9uKGNsdWJJZDogc3RyaW5nLCBsb2NhdGlvbjogQWN0aXZpdHlMb2NhdGlvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlMb2NhdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0FDVElWSVRZX0xPQ0FUSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgbG9jYXRpb25JZDogbG9jYXRpb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2UobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9BVFRFTkRBTkNFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlU2VjdGlvbkFjdGl2aXR5TG9jYXRpb24oc2VjdGlvbklkOiBzdHJpbmcsIGxvY2F0aW9uOiBBY3Rpdml0eUxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eUxvY2F0aW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQUNUSVZJVFlfTE9DQVRJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBsb2NhdGlvbklkOiBsb2NhdGlvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBsb2NhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eU5ldyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9ORVdfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHModGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBzZWFyY2hNZW1iZXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9QQVJUSUNJUEFOVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBhY3Rpdml0eUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlHdWVzdHModGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBndWVzdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0dVRVNUU19QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCB9LFxuICAgICAgICB7IHBhcmFtczogeyBsaW1pdDogJ251bGwnIH0gfVxuICAgICAgKTtcbiAgfVxuXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBndWVzdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0dVRVNUU19QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCB9LFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3QodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZ3Vlc3RJZDogc3RyaW5nLCBkYXRhOiB7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBndWVzdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0dVRVNUX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBndWVzdElkIH0sXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdCh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0dVRVNUX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBndWVzdElkIH1cbiAgICAgICk7XG4gIH1cblxuICBhZGRNZW1iZXJBY3Rpdml0eUd1ZXN0KG1lbWJlcklkOiBzdHJpbmcsIGludml0ZUlkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBndWVzdEZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9BQ1RJVklUWV9JTlZJVEVfR1VFU1RTX1BBVEgsXG4gICAgICAgIHsgbWVtYmVySWQsIGludml0ZUlkIH0sXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUd1ZXN0KG1lbWJlcklkOiBzdHJpbmcsIGludml0ZUlkOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZywgZGF0YTogeyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgZ3Vlc3RGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX1BBVEgsXG4gICAgICAgIHsgbWVtYmVySWQsIGludml0ZUlkLCBndWVzdElkIH0sXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVNZW1iZXJBY3Rpdml0eUd1ZXN0KG1lbWJlcklkOiBzdHJpbmcsIGludml0ZUlkOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX0lOVklURV9HVUVTVF9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBpbnZpdGVJZCwgZ3Vlc3RJZCB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRILFxuICAgICAgICB7IG1lbWJlcklkLCBhY3Rpdml0eUlkIH1cbiAgICAgICk7XG4gIH1cblxuICBqb2luTWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdChtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVdhaXRpbmdMaXN0RW50cnlGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfV0FJVElOR19MSVNUX1BBVEgsXG4gICAgICAgIHsgbWVtYmVySWQsIGFjdGl2aXR5SWQgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gIH1cblxuICBsZWF2ZU1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3QobWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfV0FJVElOR19MSVNUX1BBVEgsXG4gICAgICAgIHsgbWVtYmVySWQsIGFjdGl2aXR5SWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldE1lbWJlcldhaXRpbmdMaXN0RW50cnkobWVtYmVySWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVdhaXRpbmdMaXN0RW50cnlGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfV0FJVElOR19MSVNUX0VOVFJZX1BBVEgsXG4gICAgICAgIHsgbWVtYmVySWQsIGVudHJ5SWQgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIChhcGk6IHsgZW50cmllczogQXJyYXk8QXBpQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5Pjsgb3V0c3RhbmRpbmdfb2ZmZXI6IEFwaUFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSB8IG51bGwgfSkgPT4gKHtcbiAgICAgICAgICBlbnRyaWVzOiAoYXBpLmVudHJpZXMgfHwgW10pLm1hcCgoZW50cnk6IEFwaUFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeShlbnRyeSkpLFxuICAgICAgICAgIG91dHN0YW5kaW5nT2ZmZXI6IGFwaS5vdXRzdGFuZGluZ19vZmZlciA/IGFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeUZhY3RvcnkoYXBpLm91dHN0YW5kaW5nX29mZmVyKSA6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCB9XG4gICAgICApO1xuICB9XG5cbiAgb3BlblRlYW1BY3Rpdml0eVdhaXRsaXN0UGxhY2UodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9XQUlUSU5HX0xJU1RfT1BFTl9QTEFDRV9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIGFkbWl0VGVhbUFjdGl2aXR5V2FpdGxpc3RFbnRyeSh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBlbnRyeUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX0FETUlUX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBlbnRyeUlkIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgcmVvcmRlclRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX1JFT1JERVJfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQsIGVudHJ5SWQgfSxcbiAgICAgICAgeyBkaXJlY3Rpb24gfVxuICAgICAgKTtcbiAgfVxuXG4gIHJlbWluZFRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9SRU1JTkRfUEFUSCxcbiAgICAgICAgeyB0ZWFtSWQsIGFjdGl2aXR5SWQsIGVudHJ5SWQgfSxcbiAgICAgICAge31cbiAgICAgICk7XG4gIH1cblxuICBvZmZlclRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfV0FJVElOR19MSVNUX0VOVFJZX09GRkVSX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBlbnRyeUlkIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgcGFzc1RlYW1BY3Rpdml0eVdhaXRsaXN0T2ZmZXIodGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgZW50cnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9QQVNTX1BBVEgsXG4gICAgICAgIHsgdGVhbUlkLCBhY3Rpdml0eUlkLCBlbnRyeUlkIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5V2FpdGxpc3RFbnRyeSh0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBlbnRyeUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1dBSVRJTkdfTElTVF9FTlRSWV9QQVRILFxuICAgICAgICB7IHRlYW1JZCwgYWN0aXZpdHlJZCwgZW50cnlJZCB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHVibGljV2FpdGluZ0xpc3RTdGF0ZShpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVdhaXRpbmdMaXN0RW50cnlGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX0FDVElWSVRZX0lOVklURV9XQUlUSU5HX0xJU1RfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfVxuICAgICAgKTtcbiAgfVxuXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdChpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfV0FJVElOR19MSVNUX1BBVEgsXG4gICAgICAgIHsgaWQsIHRva2VuIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICB9XG5cbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdChpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX0FDVElWSVRZX0lOVklURV9XQUlUSU5HX0xJU1RfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY1dhaXRpbmdMaXN0T2ZmZXIoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfUEFUSCxcbiAgICAgICAgeyBpZCwgdG9rZW4gfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgb3BlbkFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfT1BFTl9BQ1RJVklUWV9QQVRILFxuICAgICAgICB7IGlkLCB0b2tlbiB9XG4gICAgICApO1xuICB9XG5cbiAgcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgY29tbWVudDogc3RyaW5nLCBvcHRpb25hbEZlZXM6IEFycmF5PHN0cmluZz4sIHJlc3BvbnNlczogQXJyYXk8QWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlPiwgZ3Vlc3RzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9PiA9IFtdKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgb3BlbkFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfUkVTUE9ORF9QQVRILFxuICAgICAgICB7IGlkLCB0b2tlbiB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBvcHRpb25hbF9mZWVzOiBvcHRpb25hbEZlZXMsXG4gICAgICAgICAgcmVzcG9uc2VzLFxuICAgICAgICAgIGd1ZXN0c1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19XQUlUSU5HX0xJU1RfT0ZGRVJfUkVTUE9ORF9QQVRILFxuICAgICAgICB7IGlkLCB0b2tlbiB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZpdHlTZXR0aW5ncyhyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkFjdGl2aXR5U2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25BY3Rpdml0eVNldHRpbmdzKGl0ZW1JZCk7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQWN0aXZpdHlTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJBY3Rpdml0eVNldHRpbmdzKGl0ZW1JZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGdldFRlYW1BY3Rpdml0eVNldHRpbmdzKHRlYW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVNldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZ2V0TWVtYmVyQWN0aXZpdHlTZXR0aW5ncyhtZW1iZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVNldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQWN0aXZpdHlTZXR0aW5ncyhzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0FDVElWSVRZX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldENsdWJBY3Rpdml0eVNldHRpbmdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVNldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQUNUSVZJVFlfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2aXR5VHlwZXMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJBY3Rpdml0eVR5cGVzKGl0ZW1JZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQWN0aXZpdHlUeXBlcyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUFjdGl2aXR5VHlwZXMoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQWN0aXZpdHlUeXBlcyhpdGVtSWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBnZXRUZWFtQWN0aXZpdHlSdWxlc0F0dHJpYnV0ZXModGVhbUlkOiBzdHJpbmcsIHF1ZXJ5U3RyaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgc2VhcmNoQXR0cmlidXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUlVMRV9BVFRSSUJVVEVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7cTogcXVlcnlTdHJpbmd9fVxuICAgICAgKVxuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5UnVsZVRlYW1zKHRlYW1JZDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIHNlYXJjaFRlYW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9BQ1RJVklUWV9SVUxFX1RFQU1TX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7cGFyYW1zOiB7cTogcXVlcnlTdHJpbmd9fVxuICAgICAgKVxuICB9XG5cbiAgZ2V0VGVhbUFjdGl2aXR5VHlwZXModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfVFlQRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgIClcbiAgfVxuXG4gIGdldE1lbWJlckFjdGl2aXR5VHlwZXMobWVtYmVySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eVR5cGVGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQUNUSVZJVFlfVFlQRVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKVxuICB9XG5cbiAgZ2V0Q2x1YkFjdGl2aXR5VHlwZXMoY2x1YklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQUNUSVZJVFlfVFlQRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtwYXJhbXM6IHtsaW1pdDogJ251bGwnfX1cbiAgICAgICk7XG4gIH1cblxuICBnZXRTZWN0aW9uQWN0aXZpdHlUeXBlcyhzZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBhY3Rpdml0eVR5cGVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9BQ1RJVklUWV9UWVBFU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge3BhcmFtczoge2xpbWl0OiAnbnVsbCd9fVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2aXR5VHlwZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlUeXBlOiBBY3Rpdml0eVR5cGUpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJBY3Rpdml0eVR5cGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhY3Rpdml0eVR5cGUpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkFjdGl2aXR5VHlwZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGFjdGl2aXR5VHlwZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNsdWJBY3Rpdml0eVR5cGUoY2x1YklkOiBzdHJpbmcsIGFjdGl2aXR5VHlwZTogQWN0aXZpdHlUeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBhY3Rpdml0eVR5cGVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9BQ1RJVklUWV9UWVBFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgdHlwZUlkOiBhY3Rpdml0eVR5cGUuaWQsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5VHlwZSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVTZWN0aW9uQWN0aXZpdHlUeXBlKHNlY3Rpb25JZDogc3RyaW5nLCBhY3Rpdml0eVR5cGU6IEFjdGl2aXR5VHlwZSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlUeXBlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQUNUSVZJVFlfVFlQRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIHR5cGVJZDogYWN0aXZpdHlUeXBlLmlkLFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eVR5cGUsXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VGVhbUNhbGVuZGFyRXZlbnRzKHRlYW1JZDogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBlbmREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgb3BlbkFjdGl2aXR5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ3NlYXJjaF9zdGFydF9kYXknXSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydzZWFyY2hfZW5kX2RheSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBpZiAob3BlbkFjdGl2aXR5KSB7XG4gICAgICBwYXJhbXNbJ29wZW5fYWN0aXZpdHknXSA9ICd0cnVlJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgZXZlbnRGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9DQUxFTkRBUl9QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcmVzZW5kSW52aXRlKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfSU5WSVRFX1JFU0VORF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGFjdGl2aXR5SWQsXG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eShtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9PUEVOX0FDVElWSVRZX1JFU1BPTkRfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcmVtb3ZlUHVibGljT3BlbkFjdGl2aXR5KGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19PUEVOX0FDVElWSVRZX1JFU1BPTkRfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgc2lnblVwTWVtYmVyT3BlbkFjdGl2aXR5KG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgY29tbWVudDogc3RyaW5nLCBvcHRpb25hbEZlZXM6IEFycmF5PHN0cmluZz4sIHJlc3BvbnNlczogQXJyYXk8QWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlPiwgZ3Vlc3RzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9PiA9IFtdKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBvcGVuQWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfT1BFTl9BQ1RJVklUWV9SRVNQT05EX1dJVEhfREFUQV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICBvcHRpb25hbF9mZWVzOiBvcHRpb25hbEZlZXMsXG4gICAgICAgICAgcmVzcG9uc2VzLFxuICAgICAgICAgIGd1ZXN0c1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgc2lnblVwUHVibGljT3BlbkFjdGl2aXR5KGFjdGl2aXR5SWQ6IHN0cmluZywgY29tbWVudDogc3RyaW5nLCBvcHRpb25hbEZlZXM6IEFycmF5PHN0cmluZz4sIHJlc3BvbnNlczogQXJyYXk8QWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlPiwgZ3Vlc3RzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgY29tbWVudD86IHN0cmluZyB9PiA9IFtdKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBvcGVuQWN0aXZpdHlGYWN0b3J5LFxuICAgICAgICBSb2xlLlB1YmxpYyxcbiAgICAgICAgUFVCTElDX09QRU5fQUNUSVZJVFlfUkVTUE9ORF9XSVRIX0RBVEFfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgb3B0aW9uYWxfZmVlczogb3B0aW9uYWxGZWVzLFxuICAgICAgICAgIHJlc3BvbnNlcyxcbiAgICAgICAgICBndWVzdHNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIERlbnlpbmcgYW4gb3Blbi1hY3Rpdml0eSBpbnZpdGUgZGVsZXRlcyBpdCBhbmQgYW5zd2VycyAyMDQgTm8gQ29udGVudCwgc28gdGhlIHJlc3BvbnNlIG1heSBiZVxuICAvLyBudWxsICh0aGUgaW52aXRlIGlzIGdvbmUpLiBDYWxsZXJzIG11c3QgaGFuZGxlIGEgbnVsbCByZXN1bHQgYXMgXCJ0aGUgaW52aXRlIHdhcyByZW1vdmVkXCIuXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5KG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2VPck51bGwoXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUludml0ZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlKGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2VPck51bGwoXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19NRU1CRVJfQUNUSVZJVFlfSU5WSVRFX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpdml0eUludml0ZUlkXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SW52aXRlXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGUoaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgYWN0aXZpdHlJbnZpdGU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2VPck51bGwoXG4gICAgICAgIGFjdGl2aXR5SW52aXRlRmFjdG9yeSxcbiAgICAgICAgUm9sZS5QdWJsaWMsXG4gICAgICAgIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHRva2VuXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SW52aXRlXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlUHVibGljT3BlbkFjdGl2aXR5SW52aXRlKGlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlT3JOdWxsKFxuICAgICAgICBhY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfT1BFTl9BQ1RJVklUWV9JTlZJVEVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGl2aXR5SW52aXRlXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHVibGljT3BlbkFjdGl2aXR5R3Vlc3RzKGFjdGl2aXR5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBndWVzdEZhY3RvcnksXG4gICAgICAgIFJvbGUuUHVibGljLFxuICAgICAgICBQVUJMSUNfT1BFTl9BQ1RJVklUWV9HVUVTVF9MSVNUX1BBVEgsXG4gICAgICAgIHsgYWN0aXZpdHlJZCB9LFxuICAgICAgICB7IHBhcmFtczogeyBsaW1pdDogJ251bGwnIH0gfVxuICAgICAgKTtcbiAgfVxuXG4gIGFkZFB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKGd1ZXN0RmFjdG9yeSwgUm9sZS5QdWJsaWMsIFBVQkxJQ19BQ1RJVklUWV9JTlZJVEVfR1VFU1RfTElTVF9QQVRILCB7IGlkLCB0b2tlbiB9LCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZywgZGF0YTogeyBuYW1lOiBzdHJpbmc7IGNvbW1lbnQ/OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShndWVzdEZhY3RvcnksIFJvbGUuUHVibGljLCBQVUJMSUNfQUNUSVZJVFlfSU5WSVRFX0dVRVNUX0RFVEFJTF9QQVRILCB7IGlkLCB0b2tlbiwgZ3Vlc3RJZCB9LCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGd1ZXN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShSb2xlLlB1YmxpYywgUFVCTElDX0FDVElWSVRZX0lOVklURV9HVUVTVF9ERVRBSUxfUEFUSCwgeyBpZCwgdG9rZW4sIGd1ZXN0SWQgfSk7XG4gIH1cblxuICBhZGRQdWJsaWNPcGVuQWN0aXZpdHlHdWVzdChhY3Rpdml0eUlkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKGd1ZXN0RmFjdG9yeSwgUm9sZS5QdWJsaWMsIFBVQkxJQ19PUEVOX0FDVElWSVRZX0dVRVNUX0xJU1RfUEFUSCwgeyBhY3Rpdml0eUlkIH0sIGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlUHVibGljT3BlbkFjdGl2aXR5R3Vlc3QoYWN0aXZpdHlJZDogc3RyaW5nLCBndWVzdElkOiBzdHJpbmcsIGRhdGE6IHsgbmFtZTogc3RyaW5nOyBjb21tZW50Pzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoZ3Vlc3RGYWN0b3J5LCBSb2xlLlB1YmxpYywgUFVCTElDX09QRU5fQUNUSVZJVFlfR1VFU1RfREVUQUlMX1BBVEgsIHsgYWN0aXZpdHlJZCwgZ3Vlc3RJZCB9LCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZVB1YmxpY09wZW5BY3Rpdml0eUd1ZXN0KGFjdGl2aXR5SWQ6IHN0cmluZywgZ3Vlc3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFJvbGUuUHVibGljLCBQVUJMSUNfT1BFTl9BQ1RJVklUWV9HVUVTVF9ERVRBSUxfUEFUSCwgeyBhY3Rpdml0eUlkLCBndWVzdElkIH0pO1xuICB9XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5KHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eTogQWN0aXZpdHkpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGFjdGl2aXR5RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQUNUSVZJVFlfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogYWN0aXZpdHkuaWRcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yZW1vdmVVbnVzZWRBY3Rpdml0eUZpZWxkcyh7Li4uYWN0aXZpdHl9KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYWN0aXZpdHlRdWVzdGlvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1FVRVNUSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IHF1ZXN0aW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVtb3ZlVW51c2VkQWN0aXZpdHlRdWVzdGlvbkZpZWxkcyh7Li4ucXVlc3Rpb259KVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5SW52aXRlKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGU6IE1lbWJlckFjdGl2aXR5SW52aXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBtZW1iZXJBY3Rpdml0eUludml0ZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX0lOVklURV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGFjdGl2aXR5SWQsXG4gICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eUludml0ZVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0FDVElWSVRZX1BBUlRJQ0lQQU5UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGFjdGl2aXR5SWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcnNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3BlbkFjdGl2aXR5RGF0ZVBhcmFtcyhzdGFydERhdGU6IHN0cmluZyB8IG51bGwsIGVuZERhdGU6IHN0cmluZyB8IG51bGwsIGFsbDogYm9vbGVhbiA9IGZhbHNlKToge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIGxldCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnYWxsJzogYWxsID8gJ3RydWUnIDogJ2ZhbHNlJ1xuICAgIH07XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ3N0YXJ0X2RhdGUnXSA9IHN0YXJ0RGF0ZSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIHBhcmFtc1snZW5kX2RhdGUnXSA9IGVuZERhdGUgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGdldE9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcyhvcGVuQWN0aXZpdHlTZWFyY2hQYXJhbXM6IE9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtc0ludGVyZmFjZSk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBlbmRfZGF0ZTogb3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zLmVuZERhdGUsXG4gICAgICBsaW1pdDogJ251bGwnLFxuICAgICAgc3RhcnRfZGF0ZTogb3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zLnN0YXJ0RGF0ZVxuICAgIH07XG5cbiAgICBpZiAob3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zLmFjdGl2aXR5VHlwZUlkKSB7XG4gICAgICBwYXJhbXNbJ2FjdGl2aXR5X3R5cGVfaWQnXSA9IG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5hY3Rpdml0eVR5cGVJZDtcbiAgICB9XG5cbiAgICBpZiAob3BlbkFjdGl2aXR5U2VhcmNoUGFyYW1zLmxvY2F0aW9uSWQpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IG9wZW5BY3Rpdml0eVNlYXJjaFBhcmFtcy5sb2NhdGlvbklkO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVVudXNlZEFjdGl2aXR5RmllbGRzKGFjdGl2aXR5OiBQYXJ0aWFsPEFjdGl2aXR5Pik6IFBhcnRpYWw8QWN0aXZpdHk+IHtcbiAgICBpZiAodHlwZW9mIGFjdGl2aXR5LmlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVsZXRlIGFjdGl2aXR5LmlkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aXZpdHkuZmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWFjdGl2aXR5LmZpbGUpIHtcbiAgICAgIGRlbGV0ZSBhY3Rpdml0eS5maWxlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aXZpdHkuaW52aXRlX2xhc3RfcmVzcG9uc2VfZGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWFjdGl2aXR5Lmludml0ZV9sYXN0X3Jlc3BvbnNlX2RhdGUpIHtcbiAgICAgIGRlbGV0ZSBhY3Rpdml0eS5pbnZpdGVfbGFzdF9yZXNwb25zZV9kYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpdml0eTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVW51c2VkQWN0aXZpdHlRdWVzdGlvbkZpZWxkcyhxdWVzdGlvbjogUGFydGlhbDxBY3Rpdml0eVF1ZXN0aW9uPik6IFBhcnRpYWw8QWN0aXZpdHlRdWVzdGlvbj4ge1xuICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uaWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkZWxldGUgcXVlc3Rpb24uaWQ7XG4gICAgfVxuICAgIGRlbGV0ZSBxdWVzdGlvbi5jbHViX2lkO1xuICAgIGRlbGV0ZSBxdWVzdGlvbi5zZWN0aW9uX2lkO1xuICAgIHJldHVybiBxdWVzdGlvbjtcbiAgfVxufVxuIl19
@@ -14,8 +14,6 @@ const ROLE_PATH = {
14
14
  [Role.None]: ''
15
15
  };
16
16
  export class ApiService {
17
- http;
18
- domain;
19
17
  constructor(http, domain) {
20
18
  this.http = http;
21
19
  this.domain = domain;
@@ -101,10 +99,10 @@ export class ApiService {
101
99
  url(path) {
102
100
  return this.domain + API_PATH + path;
103
101
  }
104
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiService, deps: [{ token: i1.HttpClient }, { token: DOMAIN }], target: i0.ɵɵFactoryTarget.Injectable });
105
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiService, providedIn: 'root' });
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, deps: [{ token: i1.HttpClient }, { token: DOMAIN }], target: i0.ɵɵFactoryTarget.Injectable }); }
103
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, providedIn: 'root' }); }
106
104
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ApiService, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiService, decorators: [{
108
106
  type: Injectable,
109
107
  args: [{
110
108
  providedIn: 'root'
@@ -113,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
113
111
  type: Inject,
114
112
  args: [DOMAIN]
115
113
  }] }] });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQUU3QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUM7QUFFM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRTNCLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWE7SUFDL0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCO0lBQ3JDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWE7SUFDL0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsZUFBZTtJQUNuQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO0lBQ3hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQztBQWtCRixNQUFNLE9BQU8sVUFBVTtJQUVYO0lBQ2dCO0lBRjFCLFlBQ1UsSUFBZ0IsRUFDQSxNQUFjO1FBRDlCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDQSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRXhDLENBQUM7SUFFRCxjQUFjLENBQ1osSUFBVSxFQUNWLElBQVksRUFDWixhQUF5QixFQUFFLEVBQzNCLFVBQW1CLEVBQUU7UUFFckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFD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QUlJLE1BQU07MkJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwaUNvbGxlY3Rpb24gfSBmcm9tICcuLi9hcGktbW9kZWxzJztcbmltcG9ydCB7IENvbGxlY3Rpb24sIFJvbGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgRE9NQUlOID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ2RvbWFpbicpO1xuXG5jb25zdCBBUElfUEFUSCA9ICdhcGkvdjMvJztcblxuY29uc3QgUk9MRV9QQVRIID0ge1xuICBbUm9sZS5DbHViQWRtaW5dOiAnY2x1Yi1hZG1pbi8nLFxuICBbUm9sZS5TZWN0aW9uQWRtaW5dOiAnc2VjdGlvbi1hZG1pbi8nLFxuICBbUm9sZS5UZWFtQWRtaW5dOiAndGVhbS1hZG1pbi8nLFxuICBbUm9sZS5NZW1iZXJBZG1pbl06ICdtZW1iZXItYWRtaW4vJyxcbiAgW1JvbGUuUHVibGljXTogJ3B1YmxpYy8nLFxuICBbUm9sZS5Ob25lXTogJydcbn07XG5cbmludGVyZmFjZSBGYWN0b3J5PEEsIFQ+IHtcbiAgKGFwaVJlc291cmNlOiBBKTogVDtcbn1cblxuaW50ZXJmYWNlIFBhdGhQYXJhbXMge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH07XG4gIGJvZHk/OiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChET01BSU4pIHByaXZhdGUgZG9tYWluOiBzdHJpbmdcbiAgKSB7XG4gIH1cblxuICBkZWxldGVSZXNvdXJjZShcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZShyb2xlLCBwYXRoLCBwYXRoUGFyYW1zLCBvcHRpb25zKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPikgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKFxuICAgICAgdGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgey4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZSd9LFxuICAgICkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPikgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpXG4gICAgKTtcbiAgfVxuXG4gIGdldENvbGxlY3Rpb248QSwgVD4oXG4gICAgZmFjdG9yeTogRmFjdG9yeTxBLCBUPixcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHJldHVybiB0aGlzLmdldDxBcGlDb2xsZWN0aW9uPEE+Pihyb2xlLCBwYXRoLCBwYXRoUGFyYW1zLCBvcHRpb25zKS5waXBlKFxuICAgICAgbWFwKChhcGlDb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGFwaUNvbGxlY3Rpb24ucmVzdWx0cy5tYXAoKHJlc291cmNlKSA9PiBmYWN0b3J5KHJlc291cmNlKSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbjxUPihhcGlDb2xsZWN0aW9uLmNvdW50LCBhcGlDb2xsZWN0aW9uLm5leHQsIGFwaUNvbGxlY3Rpb24ucHJldmlvdXMsIHJlc291cmNlcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRSZXNvdXJjZTxBLCBUPihcbiAgICBmYWN0b3J5OiBGYWN0b3J5PEEsIFQ+LFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0PEE+KHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKGFwaVJlc291cmNlKSA9PiBmYWN0b3J5KGFwaVJlc291cmNlKSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEZvcm1EYXRhPEEsIFQ+KFxuICAgIGZhY3Rvcnk6IEZhY3Rvcnk8QSwgVD4sXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBGb3JtRGF0YSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBPih0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCB0aGlzLmdldEZvcm1EYXRhKGRhdGEpKVxuICAgICAgLnBpcGUobWFwKChhcGlSZXNvdXJjZSkgPT4gZmFjdG9yeShhcGlSZXNvdXJjZSkpKTtcbiAgfVxuXG4gIHBvc3RSZXNvdXJjZTxBLCBUPihcbiAgICBmYWN0b3J5OiBGYWN0b3J5PEEsIFQ+LFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnBvc3Q8QT4ocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgZGF0YSwgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgoYXBpUmVzb3VyY2UpID0+IGZhY3RvcnkoYXBpUmVzb3VyY2UpKVxuICAgICk7XG4gIH1cblxuICBwb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnBvc3RFbXB0eVJlc3BvbnNlKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMsIGRhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4pID0+IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVSZXNvdXJjZTxBLCBUPihcbiAgICByZXNwb25zZUZhY3Rvcnk6IEZhY3Rvcnk8QSwgVD4sXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIGRhdGE6IHVua25vd24sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2g8QT4ocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgZGF0YSwgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgoYXBpUmVzb3VyY2UpID0+IHJlc3BvbnNlRmFjdG9yeShhcGlSZXNvdXJjZSkpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVJlc291cmNlTm9SZXNwb25zZShcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5wYXRjaEVtcHR5UmVzcG9uc2Uocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgZGF0YSwgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPikgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayB1cGRhdGVSZXNvdXJjZX0gYnV0IHRvbGVyYXRlcyBhIDIwNCBObyBDb250ZW50IHJlc3BvbnNlOiB0aGUgYm9keSBpcyBydW4gdGhyb3VnaCB0aGVcbiAgICogZmFjdG9yeSB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBgbnVsbGAgaXMgcmV0dXJuZWQuIFVzZWQgYnkgaW52aXRlIHJlc3BvbnNlcyB3aGVyZSBkZW55aW5nIGFuXG4gICAqIG9wZW4tYWN0aXZpdHkgaW52aXRlIGRlbGV0ZXMgaXQgc2VydmVyLXNpZGUgYW5kIGFuc3dlcnMgMjA0ICh0aGVyZSBpcyBubyBpbnZpdGUgbGVmdCB0byBlY2hvIGJhY2spLlxuICAgKi9cbiAgdXBkYXRlUmVzb3VyY2VPck51bGw8QSwgVD4oXG4gICAgcmVzcG9uc2VGYWN0b3J5OiBGYWN0b3J5PEEsIFQ+LFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnBhdGNoRW1wdHlSZXNwb25zZShyb2xlLCBwYXRoLCBwYXRoUGFyYW1zLCBkYXRhLCBvcHRpb25zKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPHVua25vd24+KSA9PlxuICAgICAgICByZXNwb25zZS5zdGF0dXMgPT09IDIwNCB8fCByZXNwb25zZS5ib2R5ID09PSBudWxsID8gbnVsbCA6IHJlc3BvbnNlRmFjdG9yeShyZXNwb25zZS5ib2R5IGFzIEEpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZShyb2xlOiBSb2xlLCBwYXRoOiBzdHJpbmcsIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8YW55PignZGVsZXRlJywgdGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgey4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0PFQ+KHJvbGU6IFJvbGUsIHBhdGg6IHN0cmluZywgcGF0aFBhcmFtczogUGF0aFBhcmFtcywgb3B0aW9uczogT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtRGF0YShkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgRm9ybURhdGEpIHtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaDxUPihyb2xlOiBSb2xlLCBwYXRoOiBzdHJpbmcsIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMsIGRhdGE6IHVua25vd24sIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFQ+KHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEVtcHR5UmVzcG9uc2Uocm9sZTogUm9sZSwgcGF0aDogc3RyaW5nLCBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zLCBkYXRhOiB1bmtub3duLCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaCh0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCBkYXRhLCB7Li4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRoKHJvbGU6IFJvbGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXRoUGFyYW1zKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgnOicgKyBrZXksICdnJyk7XG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKHJlZ2V4cCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBST0xFX1BBVEhbcm9sZV0gKyBwYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3N0PFQ+KHJvbGU6IFJvbGUsIHBhdGg6IHN0cmluZywgcGF0aFBhcmFtczogUGF0aFBhcmFtcywgZGF0YTogdW5rbm93biwgb3B0aW9uczogT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9zdEVtcHR5UmVzcG9uc2Uocm9sZTogUm9sZSwgcGF0aDogc3RyaW5nLCBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zLCBkYXRhOiB1bmtub3duLCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIGRhdGEsIHsuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gIH1cblxuICBwcml2YXRlIHVybChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kb21haW4gKyBBUElfUEFUSCArIHBhdGg7XG4gIH1cbn1cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWFjY2Vzcy9zcmMvbGliL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQUU3QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUM7QUFFM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRTNCLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWE7SUFDL0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCO0lBQ3JDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWE7SUFDL0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsZUFBZTtJQUNuQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTO0lBQ3hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQztBQWtCRixNQUFNLE9BQU8sVUFBVTtJQUNyQixZQUNVLElBQWdCLEVBQ0EsTUFBYztRQUQ5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ0EsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUV4QyxDQUFDO0lBRUQsY0FBYyxDQUNaLElBQVUsRUFDVixJQUFZLEVBQ1osYUFBeUIsRUFBRSxFQUMzQixVQUFtQixFQUFFO1FBRXJCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUs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QUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcGlDb2xsZWN0aW9uIH0gZnJvbSAnLi4vYXBpLW1vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uLCBSb2xlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IERPTUFJTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdkb21haW4nKTtcblxuY29uc3QgQVBJX1BBVEggPSAnYXBpL3YzLyc7XG5cbmNvbnN0IFJPTEVfUEFUSCA9IHtcbiAgW1JvbGUuQ2x1YkFkbWluXTogJ2NsdWItYWRtaW4vJyxcbiAgW1JvbGUuU2VjdGlvbkFkbWluXTogJ3NlY3Rpb24tYWRtaW4vJyxcbiAgW1JvbGUuVGVhbUFkbWluXTogJ3RlYW0tYWRtaW4vJyxcbiAgW1JvbGUuTWVtYmVyQWRtaW5dOiAnbWVtYmVyLWFkbWluLycsXG4gIFtSb2xlLlB1YmxpY106ICdwdWJsaWMvJyxcbiAgW1JvbGUuTm9uZV06ICcnXG59O1xuXG5pbnRlcmZhY2UgRmFjdG9yeTxBLCBUPiB7XG4gIChhcGlSZXNvdXJjZTogQSk6IFQ7XG59XG5cbmludGVyZmFjZSBQYXRoUGFyYW1zIHtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiB9O1xuICBib2R5PzogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcGlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRE9NQUlOKSBwcml2YXRlIGRvbWFpbjogc3RyaW5nXG4gICkge1xuICB9XG5cbiAgZGVsZXRlUmVzb3VyY2UoXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgb3B0aW9ucylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4pID0+IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShcbiAgICAgIHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIHsuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnfSxcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4pID0+IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xsZWN0aW9uPEEsIFQ+KFxuICAgIGZhY3Rvcnk6IEZhY3Rvcnk8QSwgVD4sXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5nZXQ8QXBpQ29sbGVjdGlvbjxBPj4ocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgoYXBpQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhcGlDb2xsZWN0aW9uLnJlc3VsdHMubWFwKChyZXNvdXJjZSkgPT4gZmFjdG9yeShyZXNvdXJjZSkpO1xuICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb248VD4oYXBpQ29sbGVjdGlvbi5jb3VudCwgYXBpQ29sbGVjdGlvbi5uZXh0LCBhcGlDb2xsZWN0aW9uLnByZXZpb3VzLCByZXNvdXJjZXMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UmVzb3VyY2U8QSwgVD4oXG4gICAgZmFjdG9yeTogRmFjdG9yeTxBLCBUPixcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9XG4gICkge1xuICAgIHJldHVybiB0aGlzLmdldDxBPihyb2xlLCBwYXRoLCBwYXRoUGFyYW1zLCBvcHRpb25zKS5waXBlKFxuICAgICAgbWFwKChhcGlSZXNvdXJjZSkgPT4gZmFjdG9yeShhcGlSZXNvdXJjZSkpXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RGb3JtRGF0YTxBLCBUPihcbiAgICBmYWN0b3J5OiBGYWN0b3J5PEEsIFQ+LFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgRm9ybURhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QT4odGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgdGhpcy5nZXRGb3JtRGF0YShkYXRhKSlcbiAgICAgIC5waXBlKG1hcCgoYXBpUmVzb3VyY2UpID0+IGZhY3RvcnkoYXBpUmVzb3VyY2UpKSk7XG4gIH1cblxuICBwb3N0UmVzb3VyY2U8QSwgVD4oXG4gICAgZmFjdG9yeTogRmFjdG9yeTxBLCBUPixcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0PEE+KHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMsIGRhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKGFwaVJlc291cmNlKSA9PiBmYWN0b3J5KGFwaVJlc291cmNlKSlcbiAgICApO1xuICB9XG5cbiAgcG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0RW1wdHlSZXNwb25zZShyb2xlLCBwYXRoLCBwYXRoUGFyYW1zLCBkYXRhLCBvcHRpb25zKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPHVua25vd24+KSA9PiByZXNwb25zZS5zdGF0dXMgPT09IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwMSB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNClcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlUmVzb3VyY2U8QSwgVD4oXG4gICAgcmVzcG9uc2VGYWN0b3J5OiBGYWN0b3J5PEEsIFQ+LFxuICAgIHJvbGU6IFJvbGUsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMgPSB7fSxcbiAgICBkYXRhOiB1bmtub3duLFxuICAgIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnBhdGNoPEE+KHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMsIGRhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKGFwaVJlc291cmNlKSA9PiByZXNwb25zZUZhY3RvcnkoYXBpUmVzb3VyY2UpKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgcm9sZTogUm9sZSxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGF0aFBhcmFtczogUGF0aFBhcmFtcyA9IHt9LFxuICAgIGRhdGE6IHVua25vd24sXG4gICAgb3B0aW9uczogT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2hFbXB0eVJlc3BvbnNlKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMsIGRhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8dW5rbm93bj4pID0+IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgdXBkYXRlUmVzb3VyY2V9IGJ1dCB0b2xlcmF0ZXMgYSAyMDQgTm8gQ29udGVudCByZXNwb25zZTogdGhlIGJvZHkgaXMgcnVuIHRocm91Z2ggdGhlXG4gICAqIGZhY3Rvcnkgd2hlbiBwcmVzZW50LCBvdGhlcndpc2UgYG51bGxgIGlzIHJldHVybmVkLiBVc2VkIGJ5IGludml0ZSByZXNwb25zZXMgd2hlcmUgZGVueWluZyBhblxuICAgKiBvcGVuLWFjdGl2aXR5IGludml0ZSBkZWxldGVzIGl0IHNlcnZlci1zaWRlIGFuZCBhbnN3ZXJzIDIwNCAodGhlcmUgaXMgbm8gaW52aXRlIGxlZnQgdG8gZWNobyBiYWNrKS5cbiAgICovXG4gIHVwZGF0ZVJlc291cmNlT3JOdWxsPEEsIFQ+KFxuICAgIHJlc3BvbnNlRmFjdG9yeTogRmFjdG9yeTxBLCBUPixcbiAgICByb2xlOiBSb2xlLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zID0ge30sXG4gICAgZGF0YTogdW5rbm93bixcbiAgICBvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5wYXRjaEVtcHR5UmVzcG9uc2Uocm9sZSwgcGF0aCwgcGF0aFBhcmFtcywgZGF0YSwgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPikgPT5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDQgfHwgcmVzcG9uc2UuYm9keSA9PT0gbnVsbCA/IG51bGwgOiByZXNwb25zZUZhY3RvcnkocmVzcG9uc2UuYm9keSBhcyBBKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGUocm9sZTogUm9sZSwgcGF0aDogc3RyaW5nLCBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zLCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuYm9keSkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PGFueT4oJ2RlbGV0ZScsIHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMudXJsKHRoaXMucGF0aChyb2xlLCBwYXRoLCBwYXRoUGFyYW1zKSksIHsuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnfSk7XG4gIH1cblxuICBwcml2YXRlIGdldDxUPihyb2xlOiBSb2xlLCBwYXRoOiBzdHJpbmcsIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybURhdGEoZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IEZvcm1EYXRhKSB7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2g8VD4ocm9sZTogUm9sZSwgcGF0aDogc3RyaW5nLCBwYXRoUGFyYW1zOiBQYXRoUGFyYW1zLCBkYXRhOiB1bmtub3duLCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxUPih0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hFbXB0eVJlc3BvbnNlKHJvbGU6IFJvbGUsIHBhdGg6IHN0cmluZywgcGF0aFBhcmFtczogUGF0aFBhcmFtcywgZGF0YTogdW5rbm93biwgb3B0aW9uczogT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2godGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgZGF0YSwgey4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0aChyb2xlOiBSb2xlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGF0aFBhcmFtcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJzonICsga2V5LCAnZycpO1xuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShyZWdleHAsIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUk9MRV9QQVRIW3JvbGVdICsgcGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgcG9zdDxUPihyb2xlOiBSb2xlLCBwYXRoOiBzdHJpbmcsIHBhdGhQYXJhbXM6IFBhdGhQYXJhbXMsIGRhdGE6IHVua25vd24sIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy51cmwodGhpcy5wYXRoKHJvbGUsIHBhdGgsIHBhdGhQYXJhbXMpKSwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIHBvc3RFbXB0eVJlc3BvbnNlKHJvbGU6IFJvbGUsIHBhdGg6IHN0cmluZywgcGF0aFBhcmFtczogUGF0aFBhcmFtcywgZGF0YTogdW5rbm93biwgb3B0aW9uczogT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLnVybCh0aGlzLnBhdGgocm9sZSwgcGF0aCwgcGF0aFBhcmFtcykpLCBkYXRhLCB7Li4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cmwocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tYWluICsgQVBJX1BBVEggKyBwYXRoO1xuICB9XG59XG4iXX0=