@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
@@ -8,367 +8,370 @@ import { HttpErrorResponse } from '@angular/common/http';
8
8
  import { ExtraMembersMixin } from './mixins/extra-members-mixin';
9
9
  import * as i0 from "@angular/core";
10
10
  export class ActivityEffects extends ExtraMembersMixin {
11
- actions$ = inject(Actions);
12
- activityService = inject(ActivityService);
13
- addTeamLeaderActivityInvite$ = createEffect(() => this.actions$
14
- .pipe(ofType(addTeamLeaderActivityInviteAction), exhaustMap(({ payload }) => this.activityService.addTeamActivityInvites(payload.teamId, payload.activityId, payload.memberIds)
15
- .pipe(map((success) => {
16
- if (success) {
17
- return addTeamLeaderActivityInviteSuccessAction();
18
- }
19
- else {
20
- return addTeamLeaderActivityInviteFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
21
- }
22
- }), catchError((error) => of(addTeamLeaderActivityInviteFailureAction({ payload: error })))))));
23
- createTeamActivity$ = createEffect(() => this.actions$
24
- .pipe(ofType(createTeamActivityAction), exhaustMap(({ payload }) => this.activityService.createTeamActivity(payload.teamId, payload.activity)
25
- .pipe(mergeMap((activity) => [createTeamActivitySuccessAction({ payload: activity }), retrieveTeamActivityAction({
11
+ constructor() {
12
+ super(...arguments);
13
+ this.actions$ = inject(Actions);
14
+ this.activityService = inject(ActivityService);
15
+ this.addTeamLeaderActivityInvite$ = createEffect(() => this.actions$
16
+ .pipe(ofType(addTeamLeaderActivityInviteAction), exhaustMap(({ payload }) => this.activityService.addTeamActivityInvites(payload.teamId, payload.activityId, payload.memberIds)
17
+ .pipe(map((success) => {
18
+ if (success) {
19
+ return addTeamLeaderActivityInviteSuccessAction();
20
+ }
21
+ else {
22
+ return addTeamLeaderActivityInviteFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
23
+ }
24
+ }), catchError((error) => of(addTeamLeaderActivityInviteFailureAction({ payload: error })))))));
25
+ this.createTeamActivity$ = createEffect(() => this.actions$
26
+ .pipe(ofType(createTeamActivityAction), exhaustMap(({ payload }) => this.activityService.createTeamActivity(payload.teamId, payload.activity)
27
+ .pipe(mergeMap((activity) => [createTeamActivitySuccessAction({ payload: activity }), retrieveTeamActivityAction({
28
+ payload: {
29
+ teamId: payload.teamId,
30
+ activityId: activity.id,
31
+ retrieveExtraMembers: true
32
+ }
33
+ })]), catchError((error) => of(createTeamActivityFailureAction({ payload: error })))))));
34
+ this.createTeamActivityQuestion$ = createEffect(() => this.actions$
35
+ .pipe(ofType(createTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.createTeamActivityQuestion(payload.teamId, payload.question)
36
+ .pipe(mergeMap((question) => [
37
+ createTeamActivityQuestionSuccessAction({ payload: question }),
38
+ listTeamActivityQuestionsAction({ payload: { teamId: payload.teamId } })
39
+ ]), catchError((error) => of(createTeamActivityQuestionFailureAction({ payload: error })))))));
40
+ this.deleteTeamActivity$ = createEffect(() => this.actions$
41
+ .pipe(ofType(deleteTeamActivityAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivity(payload.teamId, payload.activityId)
42
+ .pipe(map((value) => {
43
+ if (value) {
44
+ return deleteTeamActivitySuccessAction({ payload: payload.activityId });
45
+ }
46
+ else {
47
+ return deleteTeamActivityFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
48
+ }
49
+ }), catchError((error) => of(deleteTeamActivityFailureAction({ payload: error })))))));
50
+ this.deleteTeamActivityInvite$ = createEffect(() => this.actions$
51
+ .pipe(ofType(deleteTeamActivityInviteAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityInvite(payload.teamId, payload.activityId, payload.activityInviteId)
52
+ .pipe(map((value) => {
53
+ if (value) {
54
+ return deleteTeamActivityInviteSuccessAction();
55
+ }
56
+ else {
57
+ return deleteTeamActivityInviteFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
58
+ }
59
+ }), catchError((error) => of(deleteTeamActivityInviteFailureAction({ payload: error })))))));
60
+ this.deleteTeamActivityQuestion$ = createEffect(() => this.actions$
61
+ .pipe(ofType(deleteTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityQuestion(payload.teamId, payload.questionId)
62
+ .pipe(map((value) => {
63
+ if (value) {
64
+ return deleteTeamActivityQuestionSuccessAction({ payload: { ...payload } });
65
+ }
66
+ else {
67
+ return deleteTeamActivityQuestionFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
68
+ }
69
+ }), catchError((error) => of(deleteTeamActivityQuestionFailureAction({ payload: error })))))));
70
+ this.listMemberActivityInvites$ = createEffect(() => this.actions$
71
+ .pipe(ofType(listMemberActivityInvitesAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.activityService.getMemberActivityInvites(id)
72
+ .pipe(catchError((error) => of({ error }))))).pipe(map(results => {
73
+ const returnValue = [];
74
+ const successResults = results.filter(result => !(result instanceof HttpErrorResponse));
75
+ const errorResults = results.filter(result => result instanceof HttpErrorResponse);
76
+ if (errorResults.length) {
77
+ return listMemberActivityInvitesFailureAction({ payload: errorResults[0] });
78
+ }
79
+ successResults.forEach(result => {
80
+ returnValue.push(...result.toArray());
81
+ });
82
+ return listMemberActivityInvitesSuccessAction({ payload: returnValue });
83
+ }), catchError(error => of(listMemberActivityInvitesFailureAction({ payload: error })))))));
84
+ this.listTeamActivityParticipants$ = createEffect(() => this.actions$
85
+ .pipe(ofType(listTeamActivityParticipantsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityParticipants(payload.teamId, payload.activityId)
86
+ .pipe(map((activityParticipants) => listTeamActivityParticipantsSuccessAction({
26
87
  payload: {
27
- teamId: payload.teamId,
28
- activityId: activity.id,
29
- retrieveExtraMembers: true
88
+ activityId: payload.activityId,
89
+ results: activityParticipants.toArray()
90
+ }
91
+ })), catchError((error) => of(listTeamActivityParticipantsFailureAction({ payload: error })))))));
92
+ this.listTeamActivityGuests$ = createEffect(() => this.actions$
93
+ .pipe(ofType(listTeamActivityGuestsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityGuests(payload.teamId, payload.activityId)
94
+ .pipe(map((guests) => listTeamActivityGuestsSuccessAction({
95
+ payload: { activityId: payload.activityId, results: guests.toArray() }
96
+ })), catchError((error) => of(listTeamActivityGuestsFailureAction({ payload: error })))))));
97
+ this.addTeamActivityGuest$ = createEffect(() => this.actions$
98
+ .pipe(ofType(addTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.addTeamActivityGuest(payload.teamId, payload.activityId, { name: payload.name, comment: payload.comment })
99
+ .pipe(map((guest) => addTeamActivityGuestSuccessAction({
100
+ payload: { activityId: payload.activityId, guest }
101
+ })), catchError((error) => of(addTeamActivityGuestFailureAction({ payload: error })))))));
102
+ this.updateTeamActivityGuest$ = createEffect(() => this.actions$
103
+ .pipe(ofType(updateTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityGuest(payload.teamId, payload.activityId, payload.guestId, { name: payload.name, comment: payload.comment })
104
+ .pipe(map((guest) => updateTeamActivityGuestSuccessAction({
105
+ payload: { activityId: payload.activityId, guest }
106
+ })), catchError((error) => of(updateTeamActivityGuestFailureAction({ payload: error })))))));
107
+ this.deleteTeamActivityGuest$ = createEffect(() => this.actions$
108
+ .pipe(ofType(deleteTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityGuest(payload.teamId, payload.activityId, payload.guestId)
109
+ .pipe(map(() => deleteTeamActivityGuestSuccessAction({
110
+ payload: { activityId: payload.activityId, guestId: payload.guestId }
111
+ })), catchError((error) => of(deleteTeamActivityGuestFailureAction({ payload: error })))))));
112
+ this.listTeamActivityQuestions$ = createEffect(() => this.actions$
113
+ .pipe(ofType(listTeamActivityQuestionsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQuestions(payload.teamId)
114
+ .pipe(map((activityQuestions) => listTeamActivityQuestionsSuccessAction({ payload: { teamId: payload.teamId, results: activityQuestions.toArray() } })), catchError((error) => of(listTeamActivityQuestionsFailureAction({ payload: { teamId: payload.teamId, error } })))))));
115
+ this.removeMemberOpenActivity$ = createEffect(() => this.actions$
116
+ .pipe(ofType(removeMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.removeMemberOpenActivity(payload.memberId, payload.activityId)
117
+ .pipe(map((success) => {
118
+ if (success) {
119
+ return removeMemberOpenActivitySuccessAction();
120
+ }
121
+ else {
122
+ return removeMemberOpenActivityFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
30
123
  }
31
- })]), catchError((error) => of(createTeamActivityFailureAction({ payload: error })))))));
32
- createTeamActivityQuestion$ = createEffect(() => this.actions$
33
- .pipe(ofType(createTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.createTeamActivityQuestion(payload.teamId, payload.question)
34
- .pipe(mergeMap((question) => [
35
- createTeamActivityQuestionSuccessAction({ payload: question }),
36
- listTeamActivityQuestionsAction({ payload: { teamId: payload.teamId } })
37
- ]), catchError((error) => of(createTeamActivityQuestionFailureAction({ payload: error })))))));
38
- deleteTeamActivity$ = createEffect(() => this.actions$
39
- .pipe(ofType(deleteTeamActivityAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivity(payload.teamId, payload.activityId)
40
- .pipe(map((value) => {
41
- if (value) {
42
- return deleteTeamActivitySuccessAction({ payload: payload.activityId });
43
- }
44
- else {
45
- return deleteTeamActivityFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
46
- }
47
- }), catchError((error) => of(deleteTeamActivityFailureAction({ payload: error })))))));
48
- deleteTeamActivityInvite$ = createEffect(() => this.actions$
49
- .pipe(ofType(deleteTeamActivityInviteAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityInvite(payload.teamId, payload.activityId, payload.activityInviteId)
50
- .pipe(map((value) => {
51
- if (value) {
52
- return deleteTeamActivityInviteSuccessAction();
53
- }
54
- else {
55
- return deleteTeamActivityInviteFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
56
- }
57
- }), catchError((error) => of(deleteTeamActivityInviteFailureAction({ payload: error })))))));
58
- deleteTeamActivityQuestion$ = createEffect(() => this.actions$
59
- .pipe(ofType(deleteTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityQuestion(payload.teamId, payload.questionId)
60
- .pipe(map((value) => {
61
- if (value) {
62
- return deleteTeamActivityQuestionSuccessAction({ payload: { ...payload } });
63
- }
64
- else {
65
- return deleteTeamActivityQuestionFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
66
- }
67
- }), catchError((error) => of(deleteTeamActivityQuestionFailureAction({ payload: error })))))));
68
- listMemberActivityInvites$ = createEffect(() => this.actions$
69
- .pipe(ofType(listMemberActivityInvitesAction), mergeMap(({ payload }) => forkJoin(payload.map((id) => this.activityService.getMemberActivityInvites(id)
70
- .pipe(catchError((error) => of({ error }))))).pipe(map(results => {
71
- const returnValue = [];
72
- const successResults = results.filter(result => !(result instanceof HttpErrorResponse));
73
- const errorResults = results.filter(result => result instanceof HttpErrorResponse);
74
- if (errorResults.length) {
75
- return listMemberActivityInvitesFailureAction({ payload: errorResults[0] });
76
- }
77
- successResults.forEach(result => {
78
- returnValue.push(...result.toArray());
79
- });
80
- return listMemberActivityInvitesSuccessAction({ payload: returnValue });
81
- }), catchError(error => of(listMemberActivityInvitesFailureAction({ payload: error })))))));
82
- listTeamActivityParticipants$ = createEffect(() => this.actions$
83
- .pipe(ofType(listTeamActivityParticipantsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityParticipants(payload.teamId, payload.activityId)
84
- .pipe(map((activityParticipants) => listTeamActivityParticipantsSuccessAction({
85
- payload: {
86
- activityId: payload.activityId,
87
- results: activityParticipants.toArray()
88
- }
89
- })), catchError((error) => of(listTeamActivityParticipantsFailureAction({ payload: error })))))));
90
- listTeamActivityGuests$ = createEffect(() => this.actions$
91
- .pipe(ofType(listTeamActivityGuestsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityGuests(payload.teamId, payload.activityId)
92
- .pipe(map((guests) => listTeamActivityGuestsSuccessAction({
93
- payload: { activityId: payload.activityId, results: guests.toArray() }
94
- })), catchError((error) => of(listTeamActivityGuestsFailureAction({ payload: error })))))));
95
- addTeamActivityGuest$ = createEffect(() => this.actions$
96
- .pipe(ofType(addTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.addTeamActivityGuest(payload.teamId, payload.activityId, { name: payload.name, comment: payload.comment })
97
- .pipe(map((guest) => addTeamActivityGuestSuccessAction({
98
- payload: { activityId: payload.activityId, guest }
99
- })), catchError((error) => of(addTeamActivityGuestFailureAction({ payload: error })))))));
100
- updateTeamActivityGuest$ = createEffect(() => this.actions$
101
- .pipe(ofType(updateTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityGuest(payload.teamId, payload.activityId, payload.guestId, { name: payload.name, comment: payload.comment })
102
- .pipe(map((guest) => updateTeamActivityGuestSuccessAction({
103
- payload: { activityId: payload.activityId, guest }
104
- })), catchError((error) => of(updateTeamActivityGuestFailureAction({ payload: error })))))));
105
- deleteTeamActivityGuest$ = createEffect(() => this.actions$
106
- .pipe(ofType(deleteTeamActivityGuestAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityGuest(payload.teamId, payload.activityId, payload.guestId)
107
- .pipe(map(() => deleteTeamActivityGuestSuccessAction({
108
- payload: { activityId: payload.activityId, guestId: payload.guestId }
109
- })), catchError((error) => of(deleteTeamActivityGuestFailureAction({ payload: error })))))));
110
- listTeamActivityQuestions$ = createEffect(() => this.actions$
111
- .pipe(ofType(listTeamActivityQuestionsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQuestions(payload.teamId)
112
- .pipe(map((activityQuestions) => listTeamActivityQuestionsSuccessAction({ payload: { teamId: payload.teamId, results: activityQuestions.toArray() } })), catchError((error) => of(listTeamActivityQuestionsFailureAction({ payload: { teamId: payload.teamId, error } })))))));
113
- removeMemberOpenActivity$ = createEffect(() => this.actions$
114
- .pipe(ofType(removeMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.removeMemberOpenActivity(payload.memberId, payload.activityId)
115
- .pipe(map((success) => {
116
- if (success) {
117
- return removeMemberOpenActivitySuccessAction();
118
- }
119
- else {
120
- return removeMemberOpenActivityFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
121
- }
122
- }), catchError((error) => of(removeMemberOpenActivityFailureAction({ payload: error })))))));
123
- resendTeamActivityInvite$ = createEffect(() => this.actions$
124
- .pipe(ofType(resendTeamActivityMemberInviteAction), exhaustMap(({ payload }) => this.activityService.resendInvite(payload.teamId, payload.activityId, payload.activityInviteId)
125
- .pipe(map((activityInvite) => resendTeamActivityMemberInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(resendTeamActivityMemberInviteFailureAction({ payload: error })))))));
126
- retrieveMemberActivity$ = createEffect(() => this.actions$
127
- .pipe(ofType(retrieveMemberActivityAction), exhaustMap(({ payload }) => this.activityService.getMemberActivity(payload.memberId, payload.activityId)
128
- .pipe(map((activity) => retrieveMemberActivitySuccessAction({ payload: activity })), catchError((error) => of(retrieveMemberActivityFailureAction({ payload: error })))))));
129
- retrieveMemberActivityInvite$ = createEffect(() => this.actions$
130
- .pipe(ofType(retrieveMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getMemberActivityInvite(payload.memberId, payload.activityInviteId)
131
- .pipe(map((activityInvite) => retrieveMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrieveMemberActivityInviteFailureAction({ payload: error })))))));
132
- retrieveMemberOpenActivityInvite$ = createEffect(() => this.actions$
133
- .pipe(ofType(retrieveMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.getMemberOpenActivity(payload.memberId, payload.activityId)
134
- .pipe(map((activity) => retrieveMemberOpenActivitySuccessAction({ payload: activity })), catchError((error) => of(retrieveMemberOpenActivityFailureAction({ payload: error })))))));
135
- retrieveMemberPublicActivity$ = createEffect(() => this.actions$
136
- .pipe(ofType(retrievePublicMemberActivityAction), exhaustMap(({ payload }) => this.activityService.getPublicMemberActivity(payload)
137
- .pipe(map((activity) => retrievePublicMemberActivitySuccessAction({ payload: activity })), catchError((error) => of(retrievePublicMemberActivityFailureAction({ payload: error })))))));
138
- retrieveTeamActivity = createEffect(() => this.actions$
139
- .pipe(ofType(retrieveTeamActivityAction), exhaustMap(({ payload }) => forkJoin({
140
- activity: this.activityService.getTeamActivity(payload.teamId, payload.activityId)
141
- .pipe(take(1)),
142
- extraMembers: payload.retrieveExtraMembers ? this.teamLeaderGetAllExtraMembers(payload.teamId)
143
- .pipe(take(1)) : of(new Array()),
144
- members: this.teamLeaderGetAllMembers(payload.teamId),
145
- participants: this.activityService.getTeamActivityParticipants(payload.teamId, payload.activityId)
146
- .pipe(take(1), map((response) => response.toArray())),
147
- team: this.teamService.getTeamLeaderTeam(payload.teamId)
148
- .pipe(take(1))
149
- }).pipe(mergeMap(({ activity, extraMembers, members, participants, team }) => [
150
- retrieveTeamActivitySuccessAction({
124
+ }), catchError((error) => of(removeMemberOpenActivityFailureAction({ payload: error })))))));
125
+ this.resendTeamActivityInvite$ = createEffect(() => this.actions$
126
+ .pipe(ofType(resendTeamActivityMemberInviteAction), exhaustMap(({ payload }) => this.activityService.resendInvite(payload.teamId, payload.activityId, payload.activityInviteId)
127
+ .pipe(map((activityInvite) => resendTeamActivityMemberInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(resendTeamActivityMemberInviteFailureAction({ payload: error })))))));
128
+ this.retrieveMemberActivity$ = createEffect(() => this.actions$
129
+ .pipe(ofType(retrieveMemberActivityAction), exhaustMap(({ payload }) => this.activityService.getMemberActivity(payload.memberId, payload.activityId)
130
+ .pipe(map((activity) => retrieveMemberActivitySuccessAction({ payload: activity })), catchError((error) => of(retrieveMemberActivityFailureAction({ payload: error })))))));
131
+ this.retrieveMemberActivityInvite$ = createEffect(() => this.actions$
132
+ .pipe(ofType(retrieveMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getMemberActivityInvite(payload.memberId, payload.activityInviteId)
133
+ .pipe(map((activityInvite) => retrieveMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrieveMemberActivityInviteFailureAction({ payload: error })))))));
134
+ this.retrieveMemberOpenActivityInvite$ = createEffect(() => this.actions$
135
+ .pipe(ofType(retrieveMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.getMemberOpenActivity(payload.memberId, payload.activityId)
136
+ .pipe(map((activity) => retrieveMemberOpenActivitySuccessAction({ payload: activity })), catchError((error) => of(retrieveMemberOpenActivityFailureAction({ payload: error })))))));
137
+ this.retrieveMemberPublicActivity$ = createEffect(() => this.actions$
138
+ .pipe(ofType(retrievePublicMemberActivityAction), exhaustMap(({ payload }) => this.activityService.getPublicMemberActivity(payload)
139
+ .pipe(map((activity) => retrievePublicMemberActivitySuccessAction({ payload: activity })), catchError((error) => of(retrievePublicMemberActivityFailureAction({ payload: error })))))));
140
+ this.retrieveTeamActivity = createEffect(() => this.actions$
141
+ .pipe(ofType(retrieveTeamActivityAction), exhaustMap(({ payload }) => forkJoin({
142
+ activity: this.activityService.getTeamActivity(payload.teamId, payload.activityId)
143
+ .pipe(take(1)),
144
+ extraMembers: payload.retrieveExtraMembers ? this.teamLeaderGetAllExtraMembers(payload.teamId)
145
+ .pipe(take(1)) : of(new Array()),
146
+ members: this.teamLeaderGetAllMembers(payload.teamId),
147
+ participants: this.activityService.getTeamActivityParticipants(payload.teamId, payload.activityId)
148
+ .pipe(take(1), map((response) => response.toArray())),
149
+ team: this.teamService.getTeamLeaderTeam(payload.teamId)
150
+ .pipe(take(1))
151
+ }).pipe(mergeMap(({ activity, extraMembers, members, participants, team }) => [
152
+ retrieveTeamActivitySuccessAction({
153
+ payload: {
154
+ activity,
155
+ extraMembers,
156
+ extraMembersLoaded: payload.retrieveExtraMembers,
157
+ guests: [],
158
+ members,
159
+ participants,
160
+ team,
161
+ waitingList: [],
162
+ waitlistOutstandingOffer: null
163
+ }
164
+ }),
165
+ retrieveTeamLeaderGroupSuccessAction({ payload: team }),
166
+ listTeamLeaderExtraMembersSuccessAction({ payload: { teamId: payload.teamId, results: extraMembers } }),
167
+ ]), catchError((error) => of(retrieveTeamActivityFailureAction({ payload: error })))))));
168
+ this.retrievePublicActivityInvite$ = createEffect(() => this.actions$
169
+ .pipe(ofType(retrievePublicActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getPublicActivityInvite(payload.activityInviteId, payload.token)
170
+ .pipe(map((activityInvite) => retrievePublicActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrievePublicActivityInviteFailureAction({ payload: error })))))));
171
+ this.retrievePublicMemberActivityInvite$ = createEffect(() => this.actions$
172
+ .pipe(ofType(retrievePublicMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getPublicMemberActivityInvite(payload)
173
+ .pipe(map((activityInvite) => retrievePublicMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrievePublicMemberActivityInviteFailureAction({ payload: error })))))));
174
+ this.retrieveTeamActivityQRCode$ = createEffect(() => this.actions$
175
+ .pipe(ofType(retrieveTeamActivityQRCodeAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQRCode(payload.teamId, payload.activityId)
176
+ .pipe(map((activity) => retrieveTeamActivityQRCodeSuccessAction({
151
177
  payload: {
152
- activity,
153
- extraMembers,
154
- extraMembersLoaded: payload.retrieveExtraMembers,
155
- guests: [],
156
- members,
157
- participants,
158
- team,
159
- waitingList: [],
160
- waitlistOutstandingOffer: null
178
+ teamId: payload.teamId,
179
+ activity: activity
161
180
  }
162
- }),
163
- retrieveTeamLeaderGroupSuccessAction({ payload: team }),
164
- listTeamLeaderExtraMembersSuccessAction({ payload: { teamId: payload.teamId, results: extraMembers } }),
165
- ]), catchError((error) => of(retrieveTeamActivityFailureAction({ payload: error })))))));
166
- retrievePublicActivityInvite$ = createEffect(() => this.actions$
167
- .pipe(ofType(retrievePublicActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getPublicActivityInvite(payload.activityInviteId, payload.token)
168
- .pipe(map((activityInvite) => retrievePublicActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrievePublicActivityInviteFailureAction({ payload: error })))))));
169
- retrievePublicMemberActivityInvite$ = createEffect(() => this.actions$
170
- .pipe(ofType(retrievePublicMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.getPublicMemberActivityInvite(payload)
171
- .pipe(map((activityInvite) => retrievePublicMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(retrievePublicMemberActivityInviteFailureAction({ payload: error })))))));
172
- retrieveTeamActivityQRCode$ = createEffect(() => this.actions$
173
- .pipe(ofType(retrieveTeamActivityQRCodeAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQRCode(payload.teamId, payload.activityId)
174
- .pipe(map((activity) => retrieveTeamActivityQRCodeSuccessAction({
175
- payload: {
176
- teamId: payload.teamId,
177
- activity: activity
178
- }
179
- })), catchError((error) => of(retrieveTeamActivityQRCodeFailureAction({ payload: error })))))));
180
- retrieveTeamActivityQuestion$ = createEffect(() => this.actions$
181
- .pipe(ofType(retrieveTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQuestion(payload.teamId, payload.questionId)
182
- .pipe(map((activityQuestion) => retrieveTeamActivityQuestionSuccessAction({ payload: activityQuestion })), catchError((error) => of(retrieveTeamActivityQuestionFailureAction({ payload: error })))))));
183
- retrieveTeamActivitySettings$ = createEffect(() => this.actions$
184
- .pipe(ofType(retrieveTeamActivitySettingsAction), exhaustMap(({ payload }) => forkJoin({
185
- activitySettings: this.activityService.getTeamActivitySettings(payload.teamId)
186
- .pipe(take(1)),
187
- activityLocations: this.activityService.getTeamActivityLocations(payload.teamId)
188
- .pipe(take(1), map((response) => response.toArray().map((value) => ({
189
- text: value.name,
190
- value: value.id
191
- })))),
192
- activityTypes: this.activityService.getTeamActivityTypes(payload.teamId)
193
- .pipe(take(1), map((response) => {
194
- const types = payload.create ? response.toArray().filter((type) => type.active) : response.toArray();
195
- return types.map((value) => ({
181
+ })), catchError((error) => of(retrieveTeamActivityQRCodeFailureAction({ payload: error })))))));
182
+ this.retrieveTeamActivityQuestion$ = createEffect(() => this.actions$
183
+ .pipe(ofType(retrieveTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityQuestion(payload.teamId, payload.questionId)
184
+ .pipe(map((activityQuestion) => retrieveTeamActivityQuestionSuccessAction({ payload: activityQuestion })), catchError((error) => of(retrieveTeamActivityQuestionFailureAction({ payload: error })))))));
185
+ this.retrieveTeamActivitySettings$ = createEffect(() => this.actions$
186
+ .pipe(ofType(retrieveTeamActivitySettingsAction), exhaustMap(({ payload }) => forkJoin({
187
+ activitySettings: this.activityService.getTeamActivitySettings(payload.teamId)
188
+ .pipe(take(1)),
189
+ activityLocations: this.activityService.getTeamActivityLocations(payload.teamId)
190
+ .pipe(take(1), map((response) => response.toArray().map((value) => ({
196
191
  text: value.name,
197
192
  value: value.id
198
- }));
199
- }))
200
- }).pipe(map(({ activitySettings, activityLocations, activityTypes }) => {
201
- // Add locations and types to the activitySettings object
202
- activitySettings.activityLocations = activityLocations;
203
- activitySettings.activityTypes = activityTypes;
204
- return retrieveTeamActivitySettingsSuccessAction({ payload: activitySettings });
205
- }), catchError((error) => of(retrieveTeamActivitySettingsFailureAction({ payload: error })))))));
206
- retrieveTeamDefaultActivitySettings$ = createEffect(() => this.actions$
207
- .pipe(ofType(retrieveTeamDefaultActivitySettingsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityNew(payload)
208
- .pipe(map((activity) => retrieveTeamDefaultActivitySettingsSuccessAction({ payload: activity })), catchError((error) => of(retrieveTeamDefaultActivitySettingsFailureAction({ payload: error })))))));
209
- updateMemberActivityAttendance$ = createEffect(() => this.actions$
210
- .pipe(ofType(updateMemberActivityAttendanceAction), exhaustMap(({ payload }) => this.activityService.updateMemberActivityAttendance(payload.memberId, payload.activityId)
211
- .pipe(map((success) => {
212
- if (success) {
213
- return updateMemberActivityAttendanceSuccessAction();
214
- }
215
- else {
216
- return updateMemberActivityAttendanceFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
217
- }
218
- }), catchError((error) => of(updateMemberActivityAttendanceFailureAction({ payload: error })))))));
219
- updateMemberActivityInvite$ = createEffect(() => this.actions$
220
- .pipe(ofType(updateMemberActivityInviteAction), exhaustMap(({ payload }) => {
221
- // New guests are sent inline with the respond request so the backend can
222
- // include their guest fees in the invoice it creates on accept. Existing
223
- // guests are reconciled (update/delete) before responding, so removed
224
- // guests are not invoiced.
225
- const existingGuests = payload.activityInvite.guests ?? [];
226
- const reconcile$ = payload.guests
227
- ? reconcileMemberGuests(payload.memberId, payload.activityInvite.id, payload.guests, existingGuests, this.activityService)
228
- .pipe(catchError(() => of(null)))
229
- : of(null);
230
- return reconcile$.pipe(mergeMap(() => this.activityService.updateMemberActivity(payload.memberId, payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
231
- .pipe(map((activityInvite) => activityInvite
232
- ? updateMemberActivityInviteSuccessAction({ payload: activityInvite })
233
- : removeMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updateMemberActivityInviteFailureAction({ payload: error }))))));
234
- })));
235
- updateMemberOpenActivity$ = createEffect(() => this.actions$
236
- .pipe(ofType(updateMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpMemberOpenActivity(payload.memberId, payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
237
- .pipe(map((openActivity) => updateMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updateMemberOpenActivityFailureAction({ payload: error })))))));
238
- updatePublicActivityInvite$ = createEffect(() => this.actions$
239
- .pipe(ofType(updatePublicActivityInviteAction), exhaustMap(({ payload }) => {
240
- const existingGuests = payload.activityInvite.guests ?? [];
241
- const reconcile$ = payload.guests
242
- ? reconcilePublicTokenGuests(payload.activityInvite.id, payload.token, payload.guests, existingGuests, this.activityService)
243
- .pipe(catchError(() => of(null)))
244
- : of(null);
245
- return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicActivityInvite(payload.activityInvite.id, payload.token, { ...payload.activityInvite, guests: newGuests(payload.guests) })
246
- .pipe(map((activityInvite) => activityInvite
247
- ? updatePublicActivityInviteSuccessAction({ payload: activityInvite })
248
- : removePublicActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicActivityInviteFailureAction({ payload: error }))))));
249
- })));
250
- updatePublicMemberActivityInvite$ = createEffect(() => this.actions$
251
- .pipe(ofType(updatePublicMemberActivityInviteAction), exhaustMap(({ payload }) => {
252
- const existingGuests = payload.activityInvite.guests ?? [];
253
- const reconcile$ = payload.guests
254
- ? reconcilePublicTokenGuests(payload.activityInvite.id, payload.activityInvite.token, payload.guests, existingGuests, this.activityService)
255
- .pipe(catchError(() => of(null)))
256
- : of(null);
257
- return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicMemberActivityInvite(payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
258
- .pipe(map((activityInvite) => activityInvite
259
- ? updatePublicMemberActivityInviteSuccessAction({ payload: activityInvite })
260
- : removePublicMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicMemberActivityInviteFailureAction({ payload: error }))))));
261
- })));
262
- updatePublicMemberOpenActivity$ = createEffect(() => this.actions$
263
- .pipe(ofType(updatePublicMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpPublicOpenActivity(payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
264
- .pipe(map((openActivity) => updatePublicMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updatePublicMemberOpenActivityFailureAction({ payload: error })))))));
265
- updateTeamActivity = createEffect(() => this.actions$
266
- .pipe(ofType(updateTeamActivityAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivity(payload.teamId, payload.activity)
267
- .pipe(map((activity) => updateTeamActivitySuccessAction({ payload: activity })), catchError((error) => of(updateTeamActivityFailureAction({ payload: error })))))));
268
- updateTeamActivityAttendance = createEffect(() => this.actions$
269
- .pipe(ofType(updateTeamActivityAttendanceAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityParticipants(payload.teamId, payload.activityId, payload.memberIds)
270
- .pipe(map(() => updateTeamActivityAttendanceSuccessAction()), catchError((error) => of(updateTeamActivityAttendanceFailureAction({ payload: error })))))));
271
- updateTeamMemberActivityInvite = createEffect(() => this.actions$
272
- .pipe(ofType(updateTeamMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityInvite(payload.teamId, payload.activityId, payload.activityInviteId, payload.memberActivityInvite)
273
- .pipe(map((memberActivityInvite) => updateTeamMemberActivityInviteSuccessAction({ payload: memberActivityInvite })), catchError((error) => of(updateTeamMemberActivityInviteFailureAction({ payload: error })))))));
274
- updateTeamActivityQuestion$ = createEffect(() => this.actions$
275
- .pipe(ofType(updateTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityQuestion(payload.teamId, payload.question)
276
- .pipe(map((activityQuestion) => updateTeamActivityQuestionSuccessAction({ payload: activityQuestion })), catchError((error) => of(updateTeamActivityQuestionFailureAction({ payload: error })))))));
277
- joinWaitingList$ = createEffect(() => this.actions$
278
- .pipe(ofType(joinWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinMemberActivityWaitingList(payload.memberId, payload.activityId)
279
- .pipe(mergeMap((entry) => [
280
- joinWaitingListSuccessAction({ payload: entry }),
281
- ...memberWaitlistRefreshActions(payload)
282
- ]), catchError((error) => of(joinWaitingListFailureAction({ payload: error })))))));
283
- leaveWaitingList$ = createEffect(() => this.actions$
284
- .pipe(ofType(leaveWaitingListAction), exhaustMap(({ payload }) => this.activityService.leaveMemberActivityWaitingList(payload.memberId, payload.activityId)
285
- .pipe(mergeMap(() => [
286
- leaveWaitingListSuccessAction({ payload: { memberId: payload.memberId, activityId: payload.activityId } }),
287
- ...memberWaitlistRefreshActions(payload)
288
- ]), catchError((error) => of(leaveWaitingListFailureAction({ payload: error })))))));
289
- retrieveMemberWaitingListEntry$ = createEffect(() => this.actions$
290
- .pipe(ofType(retrieveMemberWaitingListEntryAction), exhaustMap(({ payload }) => this.activityService.getMemberActivityWaitingListEntry(payload.memberId, payload.activityId)
291
- .pipe(map((entry) => retrieveMemberWaitingListEntrySuccessAction({ payload: entry })), catchError((error) => of(retrieveMemberWaitingListEntryFailureAction({ payload: error })))))));
292
- loadTeamActivityWaitingList$ = createEffect(() => this.actions$
293
- .pipe(ofType(loadTeamActivityWaitingListAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityWaitingList(payload.teamId, payload.activityId)
294
- .pipe(map(({ entries, outstandingOffer }) => loadTeamActivityWaitingListSuccessAction({
295
- payload: { activityId: payload.activityId, entries, outstandingOffer }
296
- })), catchError((error) => of(loadTeamActivityWaitingListFailureAction({ payload: error })))))));
297
- admitWaitlistEntry$ = createEffect(() => this.actions$
298
- .pipe(ofType(admitWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.admitTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
299
- .pipe(mergeMap(() => [
300
- admitWaitlistEntrySuccessAction(),
301
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
302
- ]), catchError((error) => of(admitWaitlistEntryFailureAction({ payload: error })))))));
303
- reorderWaitlistEntry$ = createEffect(() => this.actions$
304
- .pipe(ofType(reorderWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.reorderTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId, payload.direction)
305
- .pipe(mergeMap(() => [
306
- reorderWaitlistEntrySuccessAction(),
307
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
308
- ]), catchError((error) => of(reorderWaitlistEntryFailureAction({ payload: error })))))));
309
- remindWaitlistOffer$ = createEffect(() => this.actions$
310
- .pipe(ofType(remindWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.remindTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
311
- .pipe(mergeMap(() => [
312
- remindWaitlistOfferSuccessAction(),
313
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
314
- ]), catchError((error) => of(remindWaitlistOfferFailureAction({ payload: error })))))));
315
- offerWaitlistEntry$ = createEffect(() => this.actions$
316
- .pipe(ofType(offerWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.offerTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
317
- .pipe(mergeMap((entry) => [
318
- offerWaitlistEntrySuccessAction({ payload: entry }),
319
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
320
- ]), catchError((error) => of(offerWaitlistEntryFailureAction({ payload: error })))))));
321
- passWaitlistOffer$ = createEffect(() => this.actions$
322
- .pipe(ofType(passWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.passTeamActivityWaitlistOffer(payload.teamId, payload.activityId, payload.entryId)
323
- .pipe(mergeMap(() => [
324
- passWaitlistOfferSuccessAction(),
325
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
326
- ]), catchError((error) => of(passWaitlistOfferFailureAction({ payload: error })))))));
327
- openWaitlistPlace$ = createEffect(() => this.actions$
328
- .pipe(ofType(openWaitlistPlaceAction), exhaustMap(({ payload }) => this.activityService.openTeamActivityWaitlistPlace(payload.teamId, payload.activityId)
329
- .pipe(mergeMap(() => [
330
- openWaitlistPlaceSuccessAction(),
331
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
332
- ]), catchError((error) => of(openWaitlistPlaceFailureAction({ payload: error })))))));
333
- removeWaitlistEntry$ = createEffect(() => this.actions$
334
- .pipe(ofType(removeWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
335
- .pipe(mergeMap(() => [
336
- removeWaitlistEntrySuccessAction(),
337
- loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
338
- ]), catchError((error) => of(removeWaitlistEntryFailureAction({ payload: error })))))));
339
- retrievePublicWaitingListState$ = createEffect(() => this.actions$
340
- .pipe(ofType(retrievePublicWaitingListStateAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListState(payload.activityInviteId, payload.token)
341
- .pipe(map((entry) => retrievePublicWaitingListStateSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListStateFailureAction({ payload: error })))))));
342
- joinPublicWaitingList$ = createEffect(() => this.actions$
343
- .pipe(ofType(joinPublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinPublicWaitingList(payload.activityInviteId, payload.token)
344
- .pipe(mergeMap((entry) => [
345
- joinPublicWaitingListSuccessAction({ payload: entry }),
346
- retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
347
- ]), catchError((error) => of(joinPublicWaitingListFailureAction({ payload: error })))))));
348
- leavePublicWaitingList$ = createEffect(() => this.actions$
349
- .pipe(ofType(leavePublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.leavePublicWaitingList(payload.activityInviteId, payload.token)
350
- .pipe(mergeMap(() => [
351
- leavePublicWaitingListSuccessAction(),
352
- retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
353
- ]), catchError((error) => of(leavePublicWaitingListFailureAction({ payload: error })))))));
354
- retrievePublicWaitingListOffer$ = createEffect(() => this.actions$
355
- .pipe(ofType(retrievePublicWaitingListOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListOffer(payload.id, payload.token)
356
- .pipe(map((entry) => retrievePublicWaitingListOfferSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListOfferFailureAction({ payload: error })))))));
357
- retrievePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
358
- .pipe(ofType(retrievePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicOpenActivityWaitlistOffer(payload.id, payload.token)
359
- .pipe(map((openActivity) => retrievePublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(retrievePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
360
- respondPublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
361
- .pipe(ofType(respondPublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.respondPublicOpenActivityWaitlistOffer(payload.id, payload.token, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
362
- .pipe(map((openActivity) => respondPublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(respondPublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
363
- declinePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
364
- .pipe(ofType(declinePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.declinePublicOpenActivityWaitlistOffer(payload.id, payload.token)
365
- .pipe(map((success) => success
366
- ? declinePublicOpenActivityWaitlistOfferSuccessAction()
367
- : declinePublicOpenActivityWaitlistOfferFailureAction({ payload: new HttpErrorResponse({ status: 400 }) })), catchError((error) => of(declinePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
368
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
369
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects });
193
+ })))),
194
+ activityTypes: this.activityService.getTeamActivityTypes(payload.teamId)
195
+ .pipe(take(1), map((response) => {
196
+ const types = payload.create ? response.toArray().filter((type) => type.active) : response.toArray();
197
+ return types.map((value) => ({
198
+ text: value.name,
199
+ value: value.id
200
+ }));
201
+ }))
202
+ }).pipe(map(({ activitySettings, activityLocations, activityTypes }) => {
203
+ // Add locations and types to the activitySettings object
204
+ activitySettings.activityLocations = activityLocations;
205
+ activitySettings.activityTypes = activityTypes;
206
+ return retrieveTeamActivitySettingsSuccessAction({ payload: activitySettings });
207
+ }), catchError((error) => of(retrieveTeamActivitySettingsFailureAction({ payload: error })))))));
208
+ this.retrieveTeamDefaultActivitySettings$ = createEffect(() => this.actions$
209
+ .pipe(ofType(retrieveTeamDefaultActivitySettingsAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityNew(payload)
210
+ .pipe(map((activity) => retrieveTeamDefaultActivitySettingsSuccessAction({ payload: activity })), catchError((error) => of(retrieveTeamDefaultActivitySettingsFailureAction({ payload: error })))))));
211
+ this.updateMemberActivityAttendance$ = createEffect(() => this.actions$
212
+ .pipe(ofType(updateMemberActivityAttendanceAction), exhaustMap(({ payload }) => this.activityService.updateMemberActivityAttendance(payload.memberId, payload.activityId)
213
+ .pipe(map((success) => {
214
+ if (success) {
215
+ return updateMemberActivityAttendanceSuccessAction();
216
+ }
217
+ else {
218
+ return updateMemberActivityAttendanceFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
219
+ }
220
+ }), catchError((error) => of(updateMemberActivityAttendanceFailureAction({ payload: error })))))));
221
+ this.updateMemberActivityInvite$ = createEffect(() => this.actions$
222
+ .pipe(ofType(updateMemberActivityInviteAction), exhaustMap(({ payload }) => {
223
+ // New guests are sent inline with the respond request so the backend can
224
+ // include their guest fees in the invoice it creates on accept. Existing
225
+ // guests are reconciled (update/delete) before responding, so removed
226
+ // guests are not invoiced.
227
+ const existingGuests = payload.activityInvite.guests ?? [];
228
+ const reconcile$ = payload.guests
229
+ ? reconcileMemberGuests(payload.memberId, payload.activityInvite.id, payload.guests, existingGuests, this.activityService)
230
+ .pipe(catchError(() => of(null)))
231
+ : of(null);
232
+ return reconcile$.pipe(mergeMap(() => this.activityService.updateMemberActivity(payload.memberId, payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
233
+ .pipe(map((activityInvite) => activityInvite
234
+ ? updateMemberActivityInviteSuccessAction({ payload: activityInvite })
235
+ : removeMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updateMemberActivityInviteFailureAction({ payload: error }))))));
236
+ })));
237
+ this.updateMemberOpenActivity$ = createEffect(() => this.actions$
238
+ .pipe(ofType(updateMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpMemberOpenActivity(payload.memberId, payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
239
+ .pipe(map((openActivity) => updateMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updateMemberOpenActivityFailureAction({ payload: error })))))));
240
+ this.updatePublicActivityInvite$ = createEffect(() => this.actions$
241
+ .pipe(ofType(updatePublicActivityInviteAction), exhaustMap(({ payload }) => {
242
+ const existingGuests = payload.activityInvite.guests ?? [];
243
+ const reconcile$ = payload.guests
244
+ ? reconcilePublicTokenGuests(payload.activityInvite.id, payload.token, payload.guests, existingGuests, this.activityService)
245
+ .pipe(catchError(() => of(null)))
246
+ : of(null);
247
+ return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicActivityInvite(payload.activityInvite.id, payload.token, { ...payload.activityInvite, guests: newGuests(payload.guests) })
248
+ .pipe(map((activityInvite) => activityInvite
249
+ ? updatePublicActivityInviteSuccessAction({ payload: activityInvite })
250
+ : removePublicActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicActivityInviteFailureAction({ payload: error }))))));
251
+ })));
252
+ this.updatePublicMemberActivityInvite$ = createEffect(() => this.actions$
253
+ .pipe(ofType(updatePublicMemberActivityInviteAction), exhaustMap(({ payload }) => {
254
+ const existingGuests = payload.activityInvite.guests ?? [];
255
+ const reconcile$ = payload.guests
256
+ ? reconcilePublicTokenGuests(payload.activityInvite.id, payload.activityInvite.token, payload.guests, existingGuests, this.activityService)
257
+ .pipe(catchError(() => of(null)))
258
+ : of(null);
259
+ return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicMemberActivityInvite(payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
260
+ .pipe(map((activityInvite) => activityInvite
261
+ ? updatePublicMemberActivityInviteSuccessAction({ payload: activityInvite })
262
+ : removePublicMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicMemberActivityInviteFailureAction({ payload: error }))))));
263
+ })));
264
+ this.updatePublicMemberOpenActivity$ = createEffect(() => this.actions$
265
+ .pipe(ofType(updatePublicMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpPublicOpenActivity(payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
266
+ .pipe(map((openActivity) => updatePublicMemberOpenActivitySuccessAction({ payload: openActivity })), catchError((error) => of(updatePublicMemberOpenActivityFailureAction({ payload: error })))))));
267
+ this.updateTeamActivity = createEffect(() => this.actions$
268
+ .pipe(ofType(updateTeamActivityAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivity(payload.teamId, payload.activity)
269
+ .pipe(map((activity) => updateTeamActivitySuccessAction({ payload: activity })), catchError((error) => of(updateTeamActivityFailureAction({ payload: error })))))));
270
+ this.updateTeamActivityAttendance = createEffect(() => this.actions$
271
+ .pipe(ofType(updateTeamActivityAttendanceAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityParticipants(payload.teamId, payload.activityId, payload.memberIds)
272
+ .pipe(map(() => updateTeamActivityAttendanceSuccessAction()), catchError((error) => of(updateTeamActivityAttendanceFailureAction({ payload: error })))))));
273
+ this.updateTeamMemberActivityInvite = createEffect(() => this.actions$
274
+ .pipe(ofType(updateTeamMemberActivityInviteAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityInvite(payload.teamId, payload.activityId, payload.activityInviteId, payload.memberActivityInvite)
275
+ .pipe(map((memberActivityInvite) => updateTeamMemberActivityInviteSuccessAction({ payload: memberActivityInvite })), catchError((error) => of(updateTeamMemberActivityInviteFailureAction({ payload: error })))))));
276
+ this.updateTeamActivityQuestion$ = createEffect(() => this.actions$
277
+ .pipe(ofType(updateTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityQuestion(payload.teamId, payload.question)
278
+ .pipe(map((activityQuestion) => updateTeamActivityQuestionSuccessAction({ payload: activityQuestion })), catchError((error) => of(updateTeamActivityQuestionFailureAction({ payload: error })))))));
279
+ this.joinWaitingList$ = createEffect(() => this.actions$
280
+ .pipe(ofType(joinWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinMemberActivityWaitingList(payload.memberId, payload.activityId)
281
+ .pipe(mergeMap((entry) => [
282
+ joinWaitingListSuccessAction({ payload: entry }),
283
+ ...memberWaitlistRefreshActions(payload)
284
+ ]), catchError((error) => of(joinWaitingListFailureAction({ payload: error })))))));
285
+ this.leaveWaitingList$ = createEffect(() => this.actions$
286
+ .pipe(ofType(leaveWaitingListAction), exhaustMap(({ payload }) => this.activityService.leaveMemberActivityWaitingList(payload.memberId, payload.activityId)
287
+ .pipe(mergeMap(() => [
288
+ leaveWaitingListSuccessAction({ payload: { memberId: payload.memberId, activityId: payload.activityId } }),
289
+ ...memberWaitlistRefreshActions(payload)
290
+ ]), catchError((error) => of(leaveWaitingListFailureAction({ payload: error })))))));
291
+ this.retrieveMemberWaitingListEntry$ = createEffect(() => this.actions$
292
+ .pipe(ofType(retrieveMemberWaitingListEntryAction), exhaustMap(({ payload }) => this.activityService.getMemberActivityWaitingListEntry(payload.memberId, payload.activityId)
293
+ .pipe(map((entry) => retrieveMemberWaitingListEntrySuccessAction({ payload: entry })), catchError((error) => of(retrieveMemberWaitingListEntryFailureAction({ payload: error })))))));
294
+ this.loadTeamActivityWaitingList$ = createEffect(() => this.actions$
295
+ .pipe(ofType(loadTeamActivityWaitingListAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityWaitingList(payload.teamId, payload.activityId)
296
+ .pipe(map(({ entries, outstandingOffer }) => loadTeamActivityWaitingListSuccessAction({
297
+ payload: { activityId: payload.activityId, entries, outstandingOffer }
298
+ })), catchError((error) => of(loadTeamActivityWaitingListFailureAction({ payload: error })))))));
299
+ this.admitWaitlistEntry$ = createEffect(() => this.actions$
300
+ .pipe(ofType(admitWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.admitTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
301
+ .pipe(mergeMap(() => [
302
+ admitWaitlistEntrySuccessAction(),
303
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
304
+ ]), catchError((error) => of(admitWaitlistEntryFailureAction({ payload: error })))))));
305
+ this.reorderWaitlistEntry$ = createEffect(() => this.actions$
306
+ .pipe(ofType(reorderWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.reorderTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId, payload.direction)
307
+ .pipe(mergeMap(() => [
308
+ reorderWaitlistEntrySuccessAction(),
309
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
310
+ ]), catchError((error) => of(reorderWaitlistEntryFailureAction({ payload: error })))))));
311
+ this.remindWaitlistOffer$ = createEffect(() => this.actions$
312
+ .pipe(ofType(remindWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.remindTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
313
+ .pipe(mergeMap(() => [
314
+ remindWaitlistOfferSuccessAction(),
315
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
316
+ ]), catchError((error) => of(remindWaitlistOfferFailureAction({ payload: error })))))));
317
+ this.offerWaitlistEntry$ = createEffect(() => this.actions$
318
+ .pipe(ofType(offerWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.offerTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
319
+ .pipe(mergeMap((entry) => [
320
+ offerWaitlistEntrySuccessAction({ payload: entry }),
321
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
322
+ ]), catchError((error) => of(offerWaitlistEntryFailureAction({ payload: error })))))));
323
+ this.passWaitlistOffer$ = createEffect(() => this.actions$
324
+ .pipe(ofType(passWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.passTeamActivityWaitlistOffer(payload.teamId, payload.activityId, payload.entryId)
325
+ .pipe(mergeMap(() => [
326
+ passWaitlistOfferSuccessAction(),
327
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
328
+ ]), catchError((error) => of(passWaitlistOfferFailureAction({ payload: error })))))));
329
+ this.openWaitlistPlace$ = createEffect(() => this.actions$
330
+ .pipe(ofType(openWaitlistPlaceAction), exhaustMap(({ payload }) => this.activityService.openTeamActivityWaitlistPlace(payload.teamId, payload.activityId)
331
+ .pipe(mergeMap(() => [
332
+ openWaitlistPlaceSuccessAction(),
333
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
334
+ ]), catchError((error) => of(openWaitlistPlaceFailureAction({ payload: error })))))));
335
+ this.removeWaitlistEntry$ = createEffect(() => this.actions$
336
+ .pipe(ofType(removeWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
337
+ .pipe(mergeMap(() => [
338
+ removeWaitlistEntrySuccessAction(),
339
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
340
+ ]), catchError((error) => of(removeWaitlistEntryFailureAction({ payload: error })))))));
341
+ this.retrievePublicWaitingListState$ = createEffect(() => this.actions$
342
+ .pipe(ofType(retrievePublicWaitingListStateAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListState(payload.activityInviteId, payload.token)
343
+ .pipe(map((entry) => retrievePublicWaitingListStateSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListStateFailureAction({ payload: error })))))));
344
+ this.joinPublicWaitingList$ = createEffect(() => this.actions$
345
+ .pipe(ofType(joinPublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinPublicWaitingList(payload.activityInviteId, payload.token)
346
+ .pipe(mergeMap((entry) => [
347
+ joinPublicWaitingListSuccessAction({ payload: entry }),
348
+ retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
349
+ ]), catchError((error) => of(joinPublicWaitingListFailureAction({ payload: error })))))));
350
+ this.leavePublicWaitingList$ = createEffect(() => this.actions$
351
+ .pipe(ofType(leavePublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.leavePublicWaitingList(payload.activityInviteId, payload.token)
352
+ .pipe(mergeMap(() => [
353
+ leavePublicWaitingListSuccessAction(),
354
+ retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
355
+ ]), catchError((error) => of(leavePublicWaitingListFailureAction({ payload: error })))))));
356
+ this.retrievePublicWaitingListOffer$ = createEffect(() => this.actions$
357
+ .pipe(ofType(retrievePublicWaitingListOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListOffer(payload.id, payload.token)
358
+ .pipe(map((entry) => retrievePublicWaitingListOfferSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListOfferFailureAction({ payload: error })))))));
359
+ this.retrievePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
360
+ .pipe(ofType(retrievePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicOpenActivityWaitlistOffer(payload.id, payload.token)
361
+ .pipe(map((openActivity) => retrievePublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(retrievePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
362
+ this.respondPublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
363
+ .pipe(ofType(respondPublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.respondPublicOpenActivityWaitlistOffer(payload.id, payload.token, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
364
+ .pipe(map((openActivity) => respondPublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(respondPublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
365
+ this.declinePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
366
+ .pipe(ofType(declinePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.declinePublicOpenActivityWaitlistOffer(payload.id, payload.token)
367
+ .pipe(map((success) => success
368
+ ? declinePublicOpenActivityWaitlistOfferSuccessAction()
369
+ : declinePublicOpenActivityWaitlistOfferFailureAction({ payload: new HttpErrorResponse({ status: 400 }) })), catchError((error) => of(declinePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
370
+ }
371
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityEffects, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
372
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityEffects }); }
370
373
  }
371
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects, decorators: [{
374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActivityEffects, decorators: [{
372
375
  type: Injectable
373
376
  }] });
374
377
  // Member join/leave both refresh the activity (or open activity) so the
@@ -426,4 +429,4 @@ function reconcilePublicTokenGuests(id, token, desiredGuests, existingGuests, ac
426
429
  ];
427
430
  return ops.length > 0 ? forkJoin(ops) : of(null);
428
431
  }
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc3RvcmUvZWZmZWN0cy9hY3Rpdml0eS5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyx5Q0FBeUMsRUFDekMseUNBQXlDLEVBQ3pDLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLHVDQUF1QyxFQUN2Qyw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLHFDQUFxQyxF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LE9BQU8sS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEdBQUcsR0FBK0I7UUFDdEMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQzVJLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5QWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzRmFpbHVyZUFjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c1N1Y2Nlc3NBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uLFxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNGYWlsdXJlQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUxlYWRlckV4dHJhTWVtYmVyc1N1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtTGVhZGVyR3JvdXBTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGpvaW5XYWl0aW5nTGlzdEFjdGlvbixcbiAgam9pbldhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgam9pbldhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgbGVhdmVXYWl0aW5nTGlzdEFjdGlvbixcbiAgbGVhdmVXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGxlYXZlV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24sXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbixcbiAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgYWRtaXRXYWl0bGlzdEVudHJ5QWN0aW9uLFxuICBhZG1pdFdhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICBhZG1pdFdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICByZW9yZGVyV2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgcmVvcmRlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICByZW9yZGVyV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbWluZFdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHJlbWluZFdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICByZW1pbmRXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbixcbiAgb2ZmZXJXYWl0bGlzdEVudHJ5QWN0aW9uLFxuICBvZmZlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICBvZmZlcldhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICBwYXNzV2FpdGxpc3RPZmZlckFjdGlvbixcbiAgcGFzc1dhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICBwYXNzV2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIG9wZW5XYWl0bGlzdFBsYWNlQWN0aW9uLFxuICBvcGVuV2FpdGxpc3RQbGFjZUZhaWx1cmVBY3Rpb24sXG4gIG9wZW5XYWl0bGlzdFBsYWNlU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlV2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgcmVtb3ZlV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24sXG4gIHJlbW92ZVdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdEFjdGlvbixcbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdEFjdGlvbixcbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGxlYXZlUHVibGljV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbixcbiAgcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uLFxuICBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckFjdGlvbixcbiAgZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEFjdGl2aXR5LFxuICBBY3Rpdml0eUV4dHJhTWVtYmVyLFxuICBBY3Rpdml0eUludml0ZSxcbiAgQWN0aXZpdHlMb2NhdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlLFxuICBBY3Rpdml0eVNldHRpbmdzLFxuICBBY3Rpdml0eVR5cGUsXG4gIEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSxcbiAgQ29sbGVjdGlvbixcbiAgR3Vlc3QsXG4gIE1lbWJlckFjdGl2aXR5SW52aXRlLFxuICBPcGVuQWN0aXZpdHksXG4gIFNlYXJjaE1lbWJlcixcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEd1ZXN0SW5wdXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEV4dHJhTWVtYmVyc01peGluIH0gZnJvbSAnLi9taXhpbnMvZXh0cmEtbWVtYmVycy1taXhpbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eUVmZmVjdHMgZXh0ZW5kcyBFeHRyYU1lbWJlcnNNaXhpbiB7XG4gIHByaXZhdGUgYWN0aW9ucyQgPSBpbmplY3QoQWN0aW9ucyk7XG4gIHByaXZhdGUgYWN0aXZpdHlTZXJ2aWNlID0gaW5qZWN0KEFjdGl2aXR5U2VydmljZSk7XG5cbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgbWVtYmVySWRzOiBBcnJheTxzdHJpbmc+IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuYWRkVGVhbUFjdGl2aXR5SW52aXRlcyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLm1lbWJlcklkcylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVUZWFtQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHk6IEFjdGl2aXR5IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuY3JlYXRlVGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gW2NyZWF0ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSksIHJldHJpZXZlVGVhbUFjdGl2aXR5QWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIHRlYW1JZDogcGF5bG9hZC50ZWFtSWQsXG4gICAgICAgICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgICAgICAgICAgcmV0cmlldmVFeHRyYU1lbWJlcnM6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIHF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb24pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgocXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IFtcbiAgICAgICAgICAgICAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBxdWVzdGlvbn0pLFxuICAgICAgICAgICAgICBsaXN0VGVhbUFjdGl2aXR5UXVlc3Rpb25zQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXlsb2FkLmFjdGl2aXR5SWR9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSA6IHtwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbklkOiBzdHJpbmcgfSB9ICkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb25JZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzQWN0aW9uKSxcbiAgICAgIG1lcmdlTWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogQXJyYXk8c3RyaW5nPiB9KSA9PlxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICBwYXlsb2FkLm1hcCgoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5SW52aXRlcyhpZClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih7ZXJyb3J9KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlOiBBcnJheTxBY3Rpdml0eUludml0ZT4gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+ICEocmVzdWx0IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSBhcyBBcnJheTxDb2xsZWN0aW9uPEFjdGl2aXR5SW52aXRlPj47XG4gICAgICAgICAgICBjb25zdCBlcnJvclJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIGFzIEFycmF5PEh0dHBFcnJvclJlc3BvbnNlPjtcblxuICAgICAgICAgICAgaWYgKGVycm9yUmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvclJlc3VsdHNbMF19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Y2Nlc3NSZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHVzaCguLi5yZXN1bHQudG9BcnJheSgpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHJldHVyblZhbHVlfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5UGFydGljaXBhbnRzOiBDb2xsZWN0aW9uPFNlYXJjaE1lbWJlcj4pID0+IGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRzOiBhY3Rpdml0eVBhcnRpY2lwYW50cy50b0FycmF5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eUd1ZXN0cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChndWVzdHM6IENvbGxlY3Rpb248R3Vlc3Q+KSA9PiBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCByZXN1bHRzOiBndWVzdHMudG9BcnJheSgpIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgYWRkVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShhZGRUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmFkZFRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHsgbmFtZTogcGF5bG9hZC5uYW1lLCBjb21tZW50OiBwYXlsb2FkLmNvbW1lbnQgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3Q6IEd1ZXN0KSA9PiBhZGRUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3QgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihhZGRUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZ3Vlc3RJZCwgeyBuYW1lOiBwYXlsb2FkLm5hbWUsIGNvbW1lbnQ6IHBheWxvYWQuY29tbWVudCB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChndWVzdDogR3Vlc3QpID0+IHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBndWVzdCB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3QocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5ndWVzdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IGRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBndWVzdElkOiBwYXlsb2FkLmd1ZXN0SWQgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9ucyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVF1ZXN0aW9ucyhwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eVF1ZXN0aW9uczogQ29sbGVjdGlvbjxBY3Rpdml0eVF1ZXN0aW9uPikgPT4gbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCByZXN1bHRzOiBhY3Rpdml0eVF1ZXN0aW9ucy50b0FycmF5KCl9fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBlcnJvcn19KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXNlbmRUZWFtQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5yZXNlbmRJbnZpdGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJlc2VuZFRlYW1BY3Rpdml0eU1lbWJlckludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyQWN0aXZpdHkocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRNZW1iZXJBY3Rpdml0eUludml0ZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSkgPT4gcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyUHVibGljQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNNZW1iZXJBY3Rpdml0eShwYXlsb2FkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5ID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCByZXRyaWV2ZUV4dHJhTWVtYmVyczogYm9vbGVhbiB9IH0pID0+XG4gICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICBhY3Rpdml0eTogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBleHRyYU1lbWJlcnM6IHBheWxvYWQucmV0cmlldmVFeHRyYU1lbWJlcnMgPyB0aGlzLnRlYW1MZWFkZXJHZXRBbGxFeHRyYU1lbWJlcnMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICkgOiBvZihuZXcgQXJyYXk8QWN0aXZpdHlFeHRyYU1lbWJlcj4oKSksXG4gICAgICAgICAgbWVtYmVyczogdGhpcy50ZWFtTGVhZGVyR2V0QWxsTWVtYmVycyhwYXlsb2FkLnRlYW1JZCksXG4gICAgICAgICAgcGFydGljaXBhbnRzOiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBDb2xsZWN0aW9uPFNlYXJjaE1lbWJlcj4pID0+IHJlc3BvbnNlLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdGVhbTogdGhpcy50ZWFtU2VydmljZS5nZXRUZWFtTGVhZGVyVGVhbShwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKHthY3Rpdml0eSwgZXh0cmFNZW1iZXJzLCBtZW1iZXJzLCBwYXJ0aWNpcGFudHMsIHRlYW19KSA9PiBbXG4gICAgICAgICAgICByZXRyaWV2ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgICAgZXh0cmFNZW1iZXJzLFxuICAgICAgICAgICAgICAgIGV4dHJhTWVtYmVyc0xvYWRlZDogcGF5bG9hZC5yZXRyaWV2ZUV4dHJhTWVtYmVycyxcbiAgICAgICAgICAgICAgICBndWVzdHM6IFtdLFxuICAgICAgICAgICAgICAgIG1lbWJlcnMsXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICAgICAgICAgIHRlYW0sXG4gICAgICAgICAgICAgICAgd2FpdGluZ0xpc3Q6IFtdLFxuICAgICAgICAgICAgICAgIHdhaXRsaXN0T3V0c3RhbmRpbmdPZmZlcjogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJldHJpZXZlVGVhbUxlYWRlckdyb3VwU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogdGVhbX0pLFxuICAgICAgICAgICAgbGlzdFRlYW1MZWFkZXJFeHRyYU1lbWJlcnNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgcmVzdWx0czogZXh0cmFNZW1iZXJzfX0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nIH19KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNBY3Rpdml0eUludml0ZShwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDogc3RyaW5nfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVFSQ29kZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICB0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLFxuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlRdWVzdGlvbihwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5xdWVzdGlvbklkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5UXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eVF1ZXN0aW9ufSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3MkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBjcmVhdGU6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgYWN0aXZpdHlTZXR0aW5nczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5U2V0dGluZ3MocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBhY3Rpdml0eUxvY2F0aW9uczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5TG9jYXRpb25zKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IENvbGxlY3Rpb248QWN0aXZpdHlMb2NhdGlvbj4pID0+IHJlc3BvbnNlLnRvQXJyYXkoKS5tYXAoKHZhbHVlOiBBY3Rpdml0eUxvY2F0aW9uKSA9PiAoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmlkXG4gICAgICAgICAgICAgIH0pKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgYWN0aXZpdHlUeXBlczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5VHlwZXMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxBY3Rpdml0eVR5cGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBwYXlsb2FkLmNyZWF0ZSA/IHJlc3BvbnNlLnRvQXJyYXkoKS5maWx0ZXIoKHR5cGU6IEFjdGl2aXR5VHlwZSkgPT4gdHlwZS5hY3RpdmUpIDogcmVzcG9uc2UudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy5tYXAoKHZhbHVlOiBBY3Rpdml0eVR5cGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmlkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIG1hcCgoe2FjdGl2aXR5U2V0dGluZ3MsIGFjdGl2aXR5TG9jYXRpb25zLCBhY3Rpdml0eVR5cGVzfSkgPT4ge1xuICAgICAgICAgICAgLy8gQWRkIGxvY2F0aW9ucyBhbmQgdHlwZXMgdG8gdGhlIGFjdGl2aXR5U2V0dGluZ3Mgb2JqZWN0XG4gICAgICAgICAgICBhY3Rpdml0eVNldHRpbmdzLmFjdGl2aXR5TG9jYXRpb25zID0gYWN0aXZpdHlMb2NhdGlvbnM7XG4gICAgICAgICAgICBhY3Rpdml0eVNldHRpbmdzLmFjdGl2aXR5VHlwZXMgPSBhY3Rpdml0eVR5cGVzO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5U2V0dGluZ3MgYXMgQWN0aXZpdHlTZXR0aW5nc30pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3NBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlOZXcocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+IHtcbiAgICAgICAgLy8gTmV3IGd1ZXN0cyBhcmUgc2VudCBpbmxpbmUgd2l0aCB0aGUgcmVzcG9uZCByZXF1ZXN0IHNvIHRoZSBiYWNrZW5kIGNhblxuICAgICAgICAvLyBpbmNsdWRlIHRoZWlyIGd1ZXN0IGZlZXMgaW4gdGhlIGludm9pY2UgaXQgY3JlYXRlcyBvbiBhY2NlcHQuIEV4aXN0aW5nXG4gICAgICAgIC8vIGd1ZXN0cyBhcmUgcmVjb25jaWxlZCAodXBkYXRlL2RlbGV0ZSkgYmVmb3JlIHJlc3BvbmRpbmcsIHNvIHJlbW92ZWRcbiAgICAgICAgLy8gZ3Vlc3RzIGFyZSBub3QgaW52b2ljZWQuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3Vlc3RzID0gcGF5bG9hZC5hY3Rpdml0eUludml0ZS5ndWVzdHMgPz8gW107XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSQgPSBwYXlsb2FkLmd1ZXN0c1xuICAgICAgICAgID8gcmVjb25jaWxlTWVtYmVyR3Vlc3RzKHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQuZ3Vlc3RzLCBleGlzdGluZ0d1ZXN0cywgdGhpcy5hY3Rpdml0eVNlcnZpY2UpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgICA6IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUkLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHsuLi5wYXlsb2FkLmFjdGl2aXR5SW52aXRlLCBndWVzdHM6IG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cyl9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSB8IG51bGwpID0+IGFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgICAgICAgICA/IHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KVxuICAgICAgICAgICAgICAgICAgOiByZW1vdmVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZTogcGF5bG9hZC5hY3Rpdml0eUludml0ZX19KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuc2lnblVwTWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5jb21tZW50LCBwYXlsb2FkLm9wdGlvbmFsX2ZlZXMsIHBheWxvYWQucmVzcG9uc2VzLCBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogb3BlbkFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge3Rva2VuOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSwgZ3Vlc3RzPzogQXJyYXk8R3Vlc3RJbnB1dD59fSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0d1ZXN0cyA9IHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuZ3Vlc3RzID8/IFtdO1xuICAgICAgICBjb25zdCByZWNvbmNpbGUkID0gcGF5bG9hZC5ndWVzdHNcbiAgICAgICAgICA/IHJlY29uY2lsZVB1YmxpY1Rva2VuR3Vlc3RzKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQudG9rZW4sIHBheWxvYWQuZ3Vlc3RzLCBleGlzdGluZ0d1ZXN0cywgdGhpcy5hY3Rpdml0eVNlcnZpY2UpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgICA6IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUkLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQudG9rZW4sIHsuLi5wYXlsb2FkLmFjdGl2aXR5SW52aXRlLCBndWVzdHM6IG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cyl9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSB8IG51bGwpID0+IGFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgICAgICAgICA/IHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KVxuICAgICAgICAgICAgICAgICAgOiByZW1vdmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZTogcGF5bG9hZC5hY3Rpdml0eUludml0ZX19KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlLCBndWVzdHM/OiBBcnJheTxHdWVzdElucHV0Pn19KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3Vlc3RzID0gcGF5bG9hZC5hY3Rpdml0eUludml0ZS5ndWVzdHMgPz8gW107XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSQgPSBwYXlsb2FkLmd1ZXN0c1xuICAgICAgICAgID8gcmVjb25jaWxlUHVibGljVG9rZW5HdWVzdHMocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZS50b2tlbiwgcGF5bG9hZC5ndWVzdHMsIGV4aXN0aW5nR3Vlc3RzLCB0aGlzLmFjdGl2aXR5U2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICAgIDogb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZSQucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgey4uLnBheWxvYWQuYWN0aXZpdHlJbnZpdGUsIGd1ZXN0czogbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKX0pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlIHwgbnVsbCkgPT4gYWN0aXZpdHlJbnZpdGVcbiAgICAgICAgICAgICAgICAgID8gdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pXG4gICAgICAgICAgICAgICAgICA6IHJlbW92ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDoge2FjdGl2aXR5SW52aXRlOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlfX0pKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge2FjdGl2aXR5SWQ6IHN0cmluZywgY29tbWVudDogc3RyaW5nLCBvcHRpb25hbF9mZWVzOiBBcnJheTxzdHJpbmc+LCByZXNwb25zZXM6IEFycmF5PEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZT4sIGd1ZXN0cz86IEFycmF5PEd1ZXN0SW5wdXQ+fX0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnNpZ25VcFB1YmxpY09wZW5BY3Rpdml0eShwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuY29tbWVudCwgcGF5bG9hZC5vcHRpb25hbF9mZWVzLCBwYXlsb2FkLnJlc3BvbnNlcywgbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgob3BlbkFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUZWFtQWN0aXZpdHkgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVRlYW1BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eTogQWN0aXZpdHkgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gdXBkYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcklkczogQXJyYXk8c3RyaW5nPiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLm1lbWJlcklkcylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbigpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBhY3Rpdml0eUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBtZW1iZXJBY3Rpdml0eUludml0ZTogTWVtYmVyQWN0aXZpdHlJbnZpdGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eUludml0ZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQubWVtYmVyQWN0aXZpdHlJbnZpdGUpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG1lbWJlckFjdGl2aXR5SW52aXRlOiBNZW1iZXJBY3Rpdml0eUludml0ZSkgPT4gdXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogbWVtYmVyQWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0gOiB7cGF5bG9hZDoge3RlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbn19KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbihwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5xdWVzdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5UXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlRdWVzdGlvbn0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBqb2luV2FpdGluZ0xpc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShqb2luV2FpdGluZ0xpc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5qb2luTWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gW1xuICAgICAgICAgICAgICBqb2luV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBlbnRyeX0pLFxuICAgICAgICAgICAgICAuLi5tZW1iZXJXYWl0bGlzdFJlZnJlc2hBY3Rpb25zKHBheWxvYWQpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoam9pbldhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsZWF2ZVdhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGVhdmVXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmxlYXZlTWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIGxlYXZlV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7bWVtYmVySWQ6IHBheWxvYWQubWVtYmVySWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KSxcbiAgICAgICAgICAgICAgLi4ubWVtYmVyV2FpdGxpc3RSZWZyZXNoQWN0aW9ucyhwYXlsb2FkKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxlYXZlV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGVudHJ5OiBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHtlbnRyaWVzLCBvdXRzdGFuZGluZ09mZmVyfSkgPT4gbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBlbnRyaWVzLCBvdXRzdGFuZGluZ09mZmVyIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBhZG1pdFdhaXRsaXN0RW50cnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShhZG1pdFdhaXRsaXN0RW50cnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5hZG1pdFRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5lbnRyeUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICBhZG1pdFdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGFkbWl0V2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVvcmRlcldhaXRsaXN0RW50cnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZW9yZGVyV2FpdGxpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlb3JkZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZCwgcGF5bG9hZC5kaXJlY3Rpb24pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIHJlb3JkZXJXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZW9yZGVyV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtaW5kV2FpdGxpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbWluZFdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5yZW1pbmRUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgcmVtaW5kV2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0QWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVtaW5kV2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgb2ZmZXJXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUob2ZmZXJXYWl0bGlzdEVudHJ5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uub2ZmZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChlbnRyeTogQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KSA9PiBbXG4gICAgICAgICAgICAgIG9mZmVyV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKG9mZmVyV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcGFzc1dhaXRsaXN0T2ZmZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShwYXNzV2FpdGxpc3RPZmZlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnBhc3NUZWFtQWN0aXZpdHlXYWl0bGlzdE9mZmVyKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgcGFzc1dhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHBhc3NXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBvcGVuV2FpdGxpc3RQbGFjZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKG9wZW5XYWl0bGlzdFBsYWNlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uub3BlblRlYW1BY3Rpdml0eVdhaXRsaXN0UGxhY2UocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgb3BlbldhaXRsaXN0UGxhY2VTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKG9wZW5XYWl0bGlzdFBsYWNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZW1vdmVXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlV2FpdGxpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5lbnRyeUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICByZW1vdmVXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZW1vdmVXYWl0bGlzdEVudHJ5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNXYWl0aW5nTGlzdFN0YXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdFN0YXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogZW50cnl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoam9pblB1YmxpY1dhaXRpbmdMaXN0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuam9pblB1YmxpY1dhaXRpbmdMaXN0KHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChlbnRyeTogQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KSA9PiBbXG4gICAgICAgICAgICAgIGpvaW5QdWJsaWNXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSksXG4gICAgICAgICAgICAgIHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZUlkOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHRva2VuOiBwYXlsb2FkLnRva2VufX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoam9pblB1YmxpY1dhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGVhdmVQdWJsaWNXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmxlYXZlUHVibGljV2FpdGluZ0xpc3QocGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICBsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGVJZDogcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCB0b2tlbjogcGF5bG9hZC50b2tlbn19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxlYXZlUHVibGljV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFB1YmxpY1dhaXRpbmdMaXN0T2ZmZXIocGF5bG9hZC5pZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdE9mZmVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogZW50cnl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogb3BlbkFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5yZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLmNvbW1lbnQsIHBheWxvYWQub3B0aW9uYWxfZmVlcywgcGF5bG9hZC5yZXNwb25zZXMsIG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cykpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9wZW5BY3Rpdml0eTogT3BlbkFjdGl2aXR5KSA9PiByZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5kZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzdWNjZXNzOiBib29sZWFuKSA9PiBzdWNjZXNzXG4gICAgICAgICAgICAgID8gZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKClcbiAgICAgICAgICAgICAgOiBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG4vLyBNZW1iZXIgam9pbi9sZWF2ZSBib3RoIHJlZnJlc2ggdGhlIGFjdGl2aXR5IChvciBvcGVuIGFjdGl2aXR5KSBzbyB0aGVcbi8vIG1lbWJlcl93YWl0aW5nX2xpc3RfKiBzZXJpYWxpemVyIGZpZWxkcyBzdGF5IGluIHN5bmMsIHBsdXMgdGhlIGludml0ZSB3aGVuXG4vLyB0aGUgbWVtYmVyIGNhbWUgdGhyb3VnaCBhbiBpbnZpdGF0aW9uLlxuZnVuY3Rpb24gbWVtYmVyV2FpdGxpc3RSZWZyZXNoQWN0aW9ucyhwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZD86IHN0cmluZywgaXNPcGVuQWN0aXZpdHk/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgYWN0aW9ucyA9IFtdO1xuXG4gIGlmIChwYXlsb2FkLmlzT3BlbkFjdGl2aXR5KSB7XG4gICAgYWN0aW9ucy5wdXNoKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKHtwYXlsb2FkOiB7bWVtYmVySWQ6IHBheWxvYWQubWVtYmVySWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KSk7XG4gIH0gZWxzZSB7XG4gICAgYWN0aW9ucy5wdXNoKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlBY3Rpb24oe3BheWxvYWQ6IHttZW1iZXJJZDogcGF5bG9hZC5tZW1iZXJJZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pKTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpIHtcbiAgICBhY3Rpb25zLnB1c2gocmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbih7cGF5bG9hZDoge21lbWJlcklkOiBwYXlsb2FkLm1lbWJlcklkLCBhY3Rpdml0eUludml0ZUlkOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWR9fSkpO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59XG5cbi8vIE5ldyBndWVzdHMgKG5vIGlkIHlldCkgYXJlIHNlbnQgaW5saW5lIHdpdGggdGhlIHJlc3BvbmQgcmVxdWVzdCwgc28gdGhlXG4vLyBiYWNrZW5kIGNyZWF0ZXMgdGhlbSBiZWZvcmUgdGhlIGludm9pY2UgYW5kIGluY2x1ZGVzIHRoZWlyIGd1ZXN0IGZlZXMuXG5mdW5jdGlvbiBuZXdHdWVzdHMoZ3Vlc3RzOiBBcnJheTxHdWVzdElucHV0PiB8IHVuZGVmaW5lZCk6IEFycmF5PHsgbmFtZTogc3RyaW5nLCBjb21tZW50Pzogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIChndWVzdHMgPz8gW10pLmZpbHRlcihnID0+ICFnLmlkKS5tYXAoZyA9PiAoeyBuYW1lOiBnLm5hbWUsIGNvbW1lbnQ6IGcuY29tbWVudCA/PyB1bmRlZmluZWQgfSkpO1xufVxuXG4vLyBVcGRhdGVzIGFuZCBkZWxldGVzIG9mIGV4aXN0aW5nIGd1ZXN0cyBzdGlsbCB1c2UgdGhlIGRlZGljYXRlZCBndWVzdFxuLy8gZW5kcG9pbnRzOyBuZXcgZ3Vlc3RzIGFyZSBzZW50IGlubGluZSB3aXRoIHRoZSByZXNwb25kIHJlcXVlc3QgaW5zdGVhZC5cbmZ1bmN0aW9uIHJlY29uY2lsZU1lbWJlckd1ZXN0cyhcbiAgbWVtYmVySWQ6IHN0cmluZyxcbiAgaW52aXRlSWQ6IHN0cmluZyxcbiAgZGVzaXJlZEd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4sXG4gIGV4aXN0aW5nR3Vlc3RzOiBBcnJheTxHdWVzdD4sXG4gIGFjdGl2aXR5U2VydmljZTogQWN0aXZpdHlTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgY29uc3QgZXhpc3RpbmdCeUlkID0gbmV3IE1hcChleGlzdGluZ0d1ZXN0cy5tYXAoZyA9PiBbZy5pZCwgZ10pKTtcbiAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiBnLmlkKS5tYXAoZyA9PiBnLmlkISkpO1xuXG4gIGNvbnN0IHRvRGVsZXRlID0gZXhpc3RpbmdHdWVzdHMuZmlsdGVyKGcgPT4gIWRlc2lyZWRJZHMuaGFzKGcuaWQpKTtcbiAgY29uc3QgdG9VcGRhdGUgPSBkZXNpcmVkR3Vlc3RzLmZpbHRlcihnID0+IHtcbiAgICBpZiAoIWcuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nQnlJZC5nZXQoZy5pZCk7XG4gICAgcmV0dXJuIGV4aXN0aW5nICYmIChleGlzdGluZy5uYW1lICE9PSBnLm5hbWUgfHwgZXhpc3RpbmcuY29tbWVudCAhPT0gZy5jb21tZW50KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3BzOiBBcnJheTxPYnNlcnZhYmxlPHVua25vd24+PiA9IFtcbiAgICAuLi50b0RlbGV0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UuZGVsZXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZCwgaW52aXRlSWQsIGcuaWQpKSxcbiAgICAuLi50b1VwZGF0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UudXBkYXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZCwgaW52aXRlSWQsIGcuaWQhLCB7IG5hbWU6IGcubmFtZSwgY29tbWVudDogZy5jb21tZW50ID8/IHVuZGVmaW5lZCB9KSksXG4gIF07XG5cbiAgcmV0dXJuIG9wcy5sZW5ndGggPiAwID8gZm9ya0pvaW4ob3BzKSA6IG9mKG51bGwpO1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVQdWJsaWNUb2tlbkd1ZXN0cyhcbiAgaWQ6IHN0cmluZyxcbiAgdG9rZW46IHN0cmluZyxcbiAgZGVzaXJlZEd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4sXG4gIGV4aXN0aW5nR3Vlc3RzOiBBcnJheTxHdWVzdD4sXG4gIGFjdGl2aXR5U2VydmljZTogQWN0aXZpdHlTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgY29uc3QgZXhpc3RpbmdCeUlkID0gbmV3IE1hcChleGlzdGluZ0d1ZXN0cy5tYXAoZyA9PiBbZy5pZCwgZ10pKTtcbiAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiBnLmlkKS5tYXAoZyA9PiBnLmlkISkpO1xuXG4gIGNvbnN0IHRvRGVsZXRlID0gZXhpc3RpbmdHdWVzdHMuZmlsdGVyKGcgPT4gIWRlc2lyZWRJZHMuaGFzKGcuaWQpKTtcbiAgY29uc3QgdG9VcGRhdGUgPSBkZXNpcmVkR3Vlc3RzLmZpbHRlcihnID0+IHtcbiAgICBpZiAoIWcuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nQnlJZC5nZXQoZy5pZCk7XG4gICAgcmV0dXJuIGV4aXN0aW5nICYmIChleGlzdGluZy5uYW1lICE9PSBnLm5hbWUgfHwgZXhpc3RpbmcuY29tbWVudCAhPT0gZy5jb21tZW50KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3BzOiBBcnJheTxPYnNlcnZhYmxlPHVua25vd24+PiA9IFtcbiAgICAuLi50b0RlbGV0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UuZGVsZXRlUHVibGljQWN0aXZpdHlHdWVzdEJ5VG9rZW4oaWQsIHRva2VuLCBnLmlkKSksXG4gICAgLi4udG9VcGRhdGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkLCB0b2tlbiwgZy5pZCEsIHsgbmFtZTogZy5uYW1lLCBjb21tZW50OiBnLmNvbW1lbnQgPz8gdW5kZWZpbmVkIH0pKSxcbiAgXTtcblxuICByZXR1cm4gb3BzLmxlbmd0aCA+IDAgPyBmb3JrSm9pbihvcHMpIDogb2YobnVsbCk7XG59XG4iXX0=
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc3RvcmUvZWZmZWN0cy9hY3Rpdml0eS5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyx5Q0FBeUMsRUFDekMseUNBQXlDLEVBQ3pDLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLHVDQUF1QyxFQUN2Qyw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLHFDQUFxQyxF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QU8sUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxHQUFHLEdBQStCO1FBQ3RDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztLQUM1SSxDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEFjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbixcbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlVGVhbUFjdGl2aXR5QWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbixcbiAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNBY3Rpb24sXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNGYWlsdXJlQWN0aW9uLFxuICBsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlHdWVzdHNTdWNjZXNzQWN0aW9uLFxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbixcbiAgYWRkVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uLFxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzRmFpbHVyZUFjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50c1N1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNGYWlsdXJlQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UXVlc3Rpb25zU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFRlYW1MZWFkZXJFeHRyYU1lbWJlcnNTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24sXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIHJlc2VuZFRlYW1BY3Rpdml0eU1lbWJlckludml0ZUFjdGlvbixcbiAgcmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlRmFpbHVyZUFjdGlvbixcbiAgcmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3NGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc1N1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUxlYWRlckdyb3VwU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbixcbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eUFjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICBqb2luV2FpdGluZ0xpc3RBY3Rpb24sXG4gIGpvaW5XYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGpvaW5XYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24sXG4gIGxlYXZlV2FpdGluZ0xpc3RBY3Rpb24sXG4gIGxlYXZlV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uLFxuICBsZWF2ZVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJXYWl0aW5nTGlzdEVudHJ5QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24sXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24sXG4gIGFkbWl0V2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgYWRtaXRXYWl0bGlzdEVudHJ5RmFpbHVyZUFjdGlvbixcbiAgYWRtaXRXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbixcbiAgcmVvcmRlcldhaXRsaXN0RW50cnlBY3Rpb24sXG4gIHJlb3JkZXJXYWl0bGlzdEVudHJ5RmFpbHVyZUFjdGlvbixcbiAgcmVvcmRlcldhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICByZW1pbmRXYWl0bGlzdE9mZmVyQWN0aW9uLFxuICByZW1pbmRXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcmVtaW5kV2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIG9mZmVyV2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgb2ZmZXJXYWl0bGlzdEVudHJ5RmFpbHVyZUFjdGlvbixcbiAgb2ZmZXJXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbixcbiAgcGFzc1dhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHBhc3NXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcGFzc1dhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uLFxuICBvcGVuV2FpdGxpc3RQbGFjZUFjdGlvbixcbiAgb3BlbldhaXRsaXN0UGxhY2VGYWlsdXJlQWN0aW9uLFxuICBvcGVuV2FpdGxpc3RQbGFjZVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZVdhaXRsaXN0RW50cnlBY3Rpb24sXG4gIHJlbW92ZVdhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICByZW1vdmVXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdFN0YXRlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVTdWNjZXNzQWN0aW9uLFxuICBqb2luUHVibGljV2FpdGluZ0xpc3RBY3Rpb24sXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24sXG4gIGxlYXZlUHVibGljV2FpdGluZ0xpc3RBY3Rpb24sXG4gIGxlYXZlUHVibGljV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uLFxuICBsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdE9mZmVyQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyQWN0aW9uLFxuICByZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24sXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbixcbiAgZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgZXhoYXVzdE1hcCwgZm9ya0pvaW4sIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBBY3Rpdml0eSxcbiAgQWN0aXZpdHlFeHRyYU1lbWJlcixcbiAgQWN0aXZpdHlJbnZpdGUsXG4gIEFjdGl2aXR5TG9jYXRpb24sXG4gIEFjdGl2aXR5UXVlc3Rpb24sXG4gIEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZSxcbiAgQWN0aXZpdHlTZXR0aW5ncyxcbiAgQWN0aXZpdHlUeXBlLFxuICBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnksXG4gIENvbGxlY3Rpb24sXG4gIEd1ZXN0LFxuICBNZW1iZXJBY3Rpdml0eUludml0ZSxcbiAgT3BlbkFjdGl2aXR5LFxuICBTZWFyY2hNZW1iZXIsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBHdWVzdElucHV0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeHRyYU1lbWJlcnNNaXhpbiB9IGZyb20gJy4vbWl4aW5zL2V4dHJhLW1lbWJlcnMtbWl4aW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aXZpdHlFZmZlY3RzIGV4dGVuZHMgRXh0cmFNZW1iZXJzTWl4aW4ge1xuICBwcml2YXRlIGFjdGlvbnMkID0gaW5qZWN0KEFjdGlvbnMpO1xuICBwcml2YXRlIGFjdGl2aXR5U2VydmljZSA9IGluamVjdChBY3Rpdml0eVNlcnZpY2UpO1xuXG4gIGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcklkczogQXJyYXk8c3RyaW5nPiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmFkZFRlYW1BY3Rpdml0eUludml0ZXMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5tZW1iZXJJZHMpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlVGVhbUFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5OiBBY3Rpdml0eSB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmNyZWF0ZVRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IFtjcmVhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pLCByZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICB0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLFxuICAgICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICAgICAgICAgIHJldHJpZXZlRXh0cmFNZW1iZXJzOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKHF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uKSA9PiBbXG4gICAgICAgICAgICAgIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcXVlc3Rpb259KSxcbiAgICAgICAgICAgICAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0FjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVsZXRlVGVhbUFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bG9hZC5hY3Rpdml0eUlkfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5kZWxldGVUZWFtQWN0aXZpdHlJbnZpdGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0gOiB7cGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgcXVlc3Rpb25JZDogc3RyaW5nIH0gfSApID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7Li4ucGF5bG9hZH19KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IEFycmF5PHN0cmluZz4gfSkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgcGF5bG9hZC5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRNZW1iZXJBY3Rpdml0eUludml0ZXMoaWQpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoe2Vycm9yfSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZTogQXJyYXk8QWN0aXZpdHlJbnZpdGU+ID0gW107XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiAhKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkgYXMgQXJyYXk8Q29sbGVjdGlvbjxBY3Rpdml0eUludml0ZT4+O1xuICAgICAgICAgICAgY29uc3QgZXJyb3JSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSBhcyBBcnJheTxIdHRwRXJyb3JSZXNwb25zZT47XG5cbiAgICAgICAgICAgIGlmIChlcnJvclJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3JSZXN1bHRzWzBdfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWNjZXNzUmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVyblZhbHVlLnB1c2goLi4ucmVzdWx0LnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiByZXR1cm5WYWx1ZX0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2YobGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eVBhcnRpY2lwYW50czogQ29sbGVjdGlvbjxTZWFyY2hNZW1iZXI+KSA9PiBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0czogYWN0aXZpdHlQYXJ0aWNpcGFudHMudG9BcnJheSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50c0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlHdWVzdHNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlHdWVzdHMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3RzOiBDb2xsZWN0aW9uPEd1ZXN0PikgPT4gbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c1N1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgcmVzdWx0czogZ3Vlc3RzLnRvQXJyYXkoKSB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RUZWFtQWN0aXZpdHlHdWVzdHNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoYWRkVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5hZGRUZWFtQWN0aXZpdHlHdWVzdChwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCB7IG5hbWU6IHBheWxvYWQubmFtZSwgY29tbWVudDogcGF5bG9hZC5jb21tZW50IH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGd1ZXN0OiBHdWVzdCkgPT4gYWRkVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogeyBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWQsIGd1ZXN0IH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoYWRkVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlHdWVzdChwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmd1ZXN0SWQsIHsgbmFtZTogcGF5bG9hZC5uYW1lLCBjb21tZW50OiBwYXlsb2FkLmNvbW1lbnQgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3Q6IEd1ZXN0KSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3QgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZ3Vlc3RJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3RJZDogcGF5bG9hZC5ndWVzdElkIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0VGVhbUFjdGl2aXR5UXVlc3Rpb25zQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlRdWVzdGlvbnMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlRdWVzdGlvbnM6IENvbGxlY3Rpb248QWN0aXZpdHlRdWVzdGlvbj4pID0+IGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgcmVzdWx0czogYWN0aXZpdHlRdWVzdGlvbnMudG9BcnJheSgpfX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgZXJyb3J9fSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVzZW5kVGVhbUFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVzZW5kSW52aXRlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVNZW1iZXJBY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IEFjdGl2aXR5KSA9PiByZXRyaWV2ZU1lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlclB1YmxpY0FjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljTWVtYmVyQWN0aXZpdHkocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgcmV0cmlldmVFeHRyYU1lbWJlcnM6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgYWN0aXZpdHk6IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgZXh0cmFNZW1iZXJzOiBwYXlsb2FkLnJldHJpZXZlRXh0cmFNZW1iZXJzID8gdGhpcy50ZWFtTGVhZGVyR2V0QWxsRXh0cmFNZW1iZXJzKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICApIDogb2YobmV3IEFycmF5PEFjdGl2aXR5RXh0cmFNZW1iZXI+KCkpLFxuICAgICAgICAgIG1lbWJlcnM6IHRoaXMudGVhbUxlYWRlckdldEFsbE1lbWJlcnMocGF5bG9hZC50ZWFtSWQpLFxuICAgICAgICAgIHBhcnRpY2lwYW50czogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxTZWFyY2hNZW1iZXI+KSA9PiByZXNwb25zZS50b0FycmF5KCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHRlYW06IHRoaXMudGVhbVNlcnZpY2UuZ2V0VGVhbUxlYWRlclRlYW0ocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCh7YWN0aXZpdHksIGV4dHJhTWVtYmVycywgbWVtYmVycywgcGFydGljaXBhbnRzLCB0ZWFtfSkgPT4gW1xuICAgICAgICAgICAgcmV0cmlldmVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5LFxuICAgICAgICAgICAgICAgIGV4dHJhTWVtYmVycyxcbiAgICAgICAgICAgICAgICBleHRyYU1lbWJlcnNMb2FkZWQ6IHBheWxvYWQucmV0cmlldmVFeHRyYU1lbWJlcnMsXG4gICAgICAgICAgICAgICAgZ3Vlc3RzOiBbXSxcbiAgICAgICAgICAgICAgICBtZW1iZXJzLFxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cyxcbiAgICAgICAgICAgICAgICB0ZWFtLFxuICAgICAgICAgICAgICAgIHdhaXRpbmdMaXN0OiBbXSxcbiAgICAgICAgICAgICAgICB3YWl0bGlzdE91dHN0YW5kaW5nT2ZmZXI6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZXRyaWV2ZVRlYW1MZWFkZXJHcm91cFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHRlYW19KSxcbiAgICAgICAgICAgIGxpc3RUZWFtTGVhZGVyRXh0cmFNZW1iZXJzU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIHJlc3VsdHM6IGV4dHJhTWVtYmVyc319KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge2FjdGl2aXR5SW52aXRlSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZyB9fSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSkgPT4gcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHN0cmluZ30pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlKHBheWxvYWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlRUkNvZGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IEFjdGl2aXR5KSA9PiByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZVN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgdGVhbUlkOiBwYXlsb2FkLnRlYW1JZCxcbiAgICAgICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgcXVlc3Rpb25JZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb25JZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eVF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uKSA9PiByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlRdWVzdGlvbn0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgY3JlYXRlOiBib29sZWFuIH0gfSkgPT5cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgIGFjdGl2aXR5U2V0dGluZ3M6IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVNldHRpbmdzKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgYWN0aXZpdHlMb2NhdGlvbnM6IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eUxvY2F0aW9ucyhwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBDb2xsZWN0aW9uPEFjdGl2aXR5TG9jYXRpb24+KSA9PiByZXNwb25zZS50b0FycmF5KCkubWFwKCh2YWx1ZTogQWN0aXZpdHlMb2NhdGlvbikgPT4gKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5pZFxuICAgICAgICAgICAgICB9KSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIGFjdGl2aXR5VHlwZXM6IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVR5cGVzKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IENvbGxlY3Rpb248QWN0aXZpdHlUeXBlPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gcGF5bG9hZC5jcmVhdGUgPyByZXNwb25zZS50b0FycmF5KCkuZmlsdGVyKCh0eXBlOiBBY3Rpdml0eVR5cGUpID0+IHR5cGUuYWN0aXZlKSA6IHJlc3BvbnNlLnRvQXJyYXkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZXMubWFwKCh2YWx1ZTogQWN0aXZpdHlUeXBlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgdGV4dDogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5pZFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBtYXAoKHthY3Rpdml0eVNldHRpbmdzLCBhY3Rpdml0eUxvY2F0aW9ucywgYWN0aXZpdHlUeXBlc30pID0+IHtcbiAgICAgICAgICAgIC8vIEFkZCBsb2NhdGlvbnMgYW5kIHR5cGVzIHRvIHRoZSBhY3Rpdml0eVNldHRpbmdzIG9iamVjdFxuICAgICAgICAgICAgYWN0aXZpdHlTZXR0aW5ncy5hY3Rpdml0eUxvY2F0aW9ucyA9IGFjdGl2aXR5TG9jYXRpb25zO1xuICAgICAgICAgICAgYWN0aXZpdHlTZXR0aW5ncy5hY3Rpdml0eVR5cGVzID0gYWN0aXZpdHlUeXBlcztcblxuICAgICAgICAgICAgcmV0dXJuIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eVNldHRpbmdzIGFzIEFjdGl2aXR5U2V0dGluZ3N9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5ncyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5TmV3KHBheWxvYWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IEFjdGl2aXR5KSA9PiByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3NGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2UkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2UocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PiB7XG4gICAgICAgIC8vIE5ldyBndWVzdHMgYXJlIHNlbnQgaW5saW5lIHdpdGggdGhlIHJlc3BvbmQgcmVxdWVzdCBzbyB0aGUgYmFja2VuZCBjYW5cbiAgICAgICAgLy8gaW5jbHVkZSB0aGVpciBndWVzdCBmZWVzIGluIHRoZSBpbnZvaWNlIGl0IGNyZWF0ZXMgb24gYWNjZXB0LiBFeGlzdGluZ1xuICAgICAgICAvLyBndWVzdHMgYXJlIHJlY29uY2lsZWQgKHVwZGF0ZS9kZWxldGUpIGJlZm9yZSByZXNwb25kaW5nLCBzbyByZW1vdmVkXG4gICAgICAgIC8vIGd1ZXN0cyBhcmUgbm90IGludm9pY2VkLlxuICAgICAgICBjb25zdCBleGlzdGluZ0d1ZXN0cyA9IHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuZ3Vlc3RzID8/IFtdO1xuICAgICAgICBjb25zdCByZWNvbmNpbGUkID0gcGF5bG9hZC5ndWVzdHNcbiAgICAgICAgICA/IHJlY29uY2lsZU1lbWJlckd1ZXN0cyhwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCBwYXlsb2FkLmd1ZXN0cywgZXhpc3RpbmdHdWVzdHMsIHRoaXMuYWN0aXZpdHlTZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICAgOiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gcmVjb25jaWxlJC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVNZW1iZXJBY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCB7Li4ucGF5bG9hZC5hY3Rpdml0eUludml0ZSwgZ3Vlc3RzOiBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpfSlcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUgfCBudWxsKSA9PiBhY3Rpdml0eUludml0ZVxuICAgICAgICAgICAgICAgICAgPyB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSlcbiAgICAgICAgICAgICAgICAgIDogcmVtb3ZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGU6IHBheWxvYWQuYWN0aXZpdHlJbnZpdGV9fSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnNpZ25VcE1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuY29tbWVudCwgcGF5bG9hZC5vcHRpb25hbF9mZWVzLCBwYXlsb2FkLnJlc3BvbnNlcywgbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgob3BlbkFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHt0b2tlbjogc3RyaW5nLCBhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUsIGd1ZXN0cz86IEFycmF5PEd1ZXN0SW5wdXQ+fX0pID0+IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdHdWVzdHMgPSBwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmd1ZXN0cyA/PyBbXTtcbiAgICAgICAgY29uc3QgcmVjb25jaWxlJCA9IHBheWxvYWQuZ3Vlc3RzXG4gICAgICAgICAgPyByZWNvbmNpbGVQdWJsaWNUb2tlbkd1ZXN0cyhwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLmd1ZXN0cywgZXhpc3RpbmdHdWVzdHMsIHRoaXMuYWN0aXZpdHlTZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICAgOiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gcmVjb25jaWxlJC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZShwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCBwYXlsb2FkLnRva2VuLCB7Li4ucGF5bG9hZC5hY3Rpdml0eUludml0ZSwgZ3Vlc3RzOiBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpfSlcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUgfCBudWxsKSA9PiBhY3Rpdml0eUludml0ZVxuICAgICAgICAgICAgICAgICAgPyB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSlcbiAgICAgICAgICAgICAgICAgIDogcmVtb3ZlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGU6IHBheWxvYWQuYWN0aXZpdHlJbnZpdGV9fSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge2FjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSwgZ3Vlc3RzPzogQXJyYXk8R3Vlc3RJbnB1dD59fSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0d1ZXN0cyA9IHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuZ3Vlc3RzID8/IFtdO1xuICAgICAgICBjb25zdCByZWNvbmNpbGUkID0gcGF5bG9hZC5ndWVzdHNcbiAgICAgICAgICA/IHJlY29uY2lsZVB1YmxpY1Rva2VuR3Vlc3RzKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGUudG9rZW4sIHBheWxvYWQuZ3Vlc3RzLCBleGlzdGluZ0d1ZXN0cywgdGhpcy5hY3Rpdml0eVNlcnZpY2UpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgICA6IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUkLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHsuLi5wYXlsb2FkLmFjdGl2aXR5SW52aXRlLCBndWVzdHM6IG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cyl9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSB8IG51bGwpID0+IGFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgICAgICAgICA/IHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KVxuICAgICAgICAgICAgICAgICAgOiByZW1vdmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZTogcGF5bG9hZC5hY3Rpdml0eUludml0ZX19KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHthY3Rpdml0eUlkOiBzdHJpbmcsIGNvbW1lbnQ6IHN0cmluZywgb3B0aW9uYWxfZmVlczogQXJyYXk8c3RyaW5nPiwgcmVzcG9uc2VzOiBBcnJheTxBY3Rpdml0eVF1ZXN0aW9uUmVzcG9uc2U+LCBndWVzdHM/OiBBcnJheTxHdWVzdElucHV0Pn19KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5zaWduVXBQdWJsaWNPcGVuQWN0aXZpdHkocGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmNvbW1lbnQsIHBheWxvYWQub3B0aW9uYWxfZmVlcywgcGF5bG9hZC5yZXNwb25zZXMsIG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cykpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9wZW5BY3Rpdml0eTogT3BlbkFjdGl2aXR5KSA9PiB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBvcGVuQWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5ID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHk6IEFjdGl2aXR5IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlVGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHVwZGF0ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2UgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBtZW1iZXJJZHM6IEFycmF5PHN0cmluZz4gfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5tZW1iZXJJZHMpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gdXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24oKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHRlYW1JZDogc3RyaW5nLFxuICAgICAgICAgICAgYWN0aXZpdHlJZDogc3RyaW5nLFxuICAgICAgICAgICAgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nLFxuICAgICAgICAgICAgbWVtYmVyQWN0aXZpdHlJbnZpdGU6IE1lbWJlckFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlJbnZpdGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCBwYXlsb2FkLm1lbWJlckFjdGl2aXR5SW52aXRlKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChtZW1iZXJBY3Rpdml0eUludml0ZTogTWVtYmVyQWN0aXZpdHlJbnZpdGUpID0+IHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG1lbWJlckFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9IDoge3BheWxvYWQ6IHt0ZWFtSWQ6IHN0cmluZywgcXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb259fSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb24pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eVF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uKSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5UXVlc3Rpb259KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgam9pbldhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoam9pbldhaXRpbmdMaXN0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuam9pbk1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3QocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKGVudHJ5OiBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IFtcbiAgICAgICAgICAgICAgam9pbldhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogZW50cnl9KSxcbiAgICAgICAgICAgICAgLi4ubWVtYmVyV2FpdGxpc3RSZWZyZXNoQWN0aW9ucyhwYXlsb2FkKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGpvaW5XYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGVhdmVXYWl0aW5nTGlzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxlYXZlV2FpdGluZ0xpc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5sZWF2ZU1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3QocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICBsZWF2ZVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDoge21lbWJlcklkOiBwYXlsb2FkLm1lbWJlcklkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSksXG4gICAgICAgICAgICAgIC4uLm1lbWJlcldhaXRsaXN0UmVmcmVzaEFjdGlvbnMocGF5bG9hZClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsZWF2ZVdhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRNZW1iZXJBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChlbnRyeTogQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KSA9PiByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBlbnRyeX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJXYWl0aW5nTGlzdEVudHJ5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdChwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh7ZW50cmllcywgb3V0c3RhbmRpbmdPZmZlcn0pID0+IGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZW50cmllcywgb3V0c3RhbmRpbmdPZmZlciB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgYWRtaXRXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoYWRtaXRXYWl0bGlzdEVudHJ5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuYWRtaXRUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgYWRtaXRXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihhZG1pdFdhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlb3JkZXJXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVvcmRlcldhaXRsaXN0RW50cnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5yZW9yZGVyVGVhbUFjdGl2aXR5V2FpdGxpc3RFbnRyeShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmVudHJ5SWQsIHBheWxvYWQuZGlyZWN0aW9uKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICByZW9yZGVyV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0QWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVvcmRlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlbWluZFdhaXRsaXN0T2ZmZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZW1pbmRXYWl0bGlzdE9mZmVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVtaW5kVGVhbUFjdGl2aXR5V2FpdGxpc3RFbnRyeShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmVudHJ5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIHJlbWluZFdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJlbWluZFdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIG9mZmVyV2FpdGxpc3RFbnRyeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKG9mZmVyV2FpdGxpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLm9mZmVyVGVhbUFjdGl2aXR5V2FpdGxpc3RFbnRyeShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmVudHJ5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gW1xuICAgICAgICAgICAgICBvZmZlcldhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBlbnRyeX0pLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihvZmZlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHBhc3NXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocGFzc1dhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5wYXNzVGVhbUFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmVudHJ5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIHBhc3NXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihwYXNzV2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgb3BlbldhaXRsaXN0UGxhY2UkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShvcGVuV2FpdGxpc3RQbGFjZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLm9wZW5UZWFtQWN0aXZpdHlXYWl0bGlzdFBsYWNlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIG9wZW5XYWl0bGlzdFBsYWNlU3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihvcGVuV2FpdGxpc3RQbGFjZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtb3ZlV2FpdGxpc3RFbnRyeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbW92ZVdhaXRsaXN0RW50cnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5kZWxldGVUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgcmVtb3ZlV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0QWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVtb3ZlV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdFN0YXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdFN0YXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljV2FpdGluZ0xpc3RTdGF0ZShwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGVudHJ5OiBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGpvaW5QdWJsaWNXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmpvaW5QdWJsaWNXYWl0aW5nTGlzdChwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gW1xuICAgICAgICAgICAgICBqb2luUHVibGljV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBlbnRyeX0pLFxuICAgICAgICAgICAgICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGVJZDogcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCB0b2tlbjogcGF5bG9hZC50b2tlbn19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGpvaW5QdWJsaWNXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxlYXZlUHVibGljV2FpdGluZ0xpc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5sZWF2ZVB1YmxpY1dhaXRpbmdMaXN0KHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbih7cGF5bG9hZDoge2FjdGl2aXR5SW52aXRlSWQ6IHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgdG9rZW46IHBheWxvYWQudG9rZW59fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNXYWl0aW5nTGlzdE9mZmVyKHBheWxvYWQuaWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGVudHJ5OiBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIocGF5bG9hZC5pZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgob3BlbkFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIocGF5bG9hZC5pZCwgcGF5bG9hZC50b2tlbiwgcGF5bG9hZC5jb21tZW50LCBwYXlsb2FkLm9wdGlvbmFsX2ZlZXMsIHBheWxvYWQucmVzcG9uc2VzLCBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBvcGVuQWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXIocGF5bG9hZC5pZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4gc3VjY2Vzc1xuICAgICAgICAgICAgICA/IGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbigpXG4gICAgICAgICAgICAgIDogZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcbn1cblxuLy8gTWVtYmVyIGpvaW4vbGVhdmUgYm90aCByZWZyZXNoIHRoZSBhY3Rpdml0eSAob3Igb3BlbiBhY3Rpdml0eSkgc28gdGhlXG4vLyBtZW1iZXJfd2FpdGluZ19saXN0Xyogc2VyaWFsaXplciBmaWVsZHMgc3RheSBpbiBzeW5jLCBwbHVzIHRoZSBpbnZpdGUgd2hlblxuLy8gdGhlIG1lbWJlciBjYW1lIHRocm91Z2ggYW4gaW52aXRhdGlvbi5cbmZ1bmN0aW9uIG1lbWJlcldhaXRsaXN0UmVmcmVzaEFjdGlvbnMocGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ/OiBzdHJpbmcsIGlzT3BlbkFjdGl2aXR5PzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IGFjdGlvbnMgPSBbXTtcblxuICBpZiAocGF5bG9hZC5pc09wZW5BY3Rpdml0eSkge1xuICAgIGFjdGlvbnMucHVzaChyZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbih7cGF5bG9hZDoge21lbWJlcklkOiBwYXlsb2FkLm1lbWJlcklkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSkpO1xuICB9IGVsc2Uge1xuICAgIGFjdGlvbnMucHVzaChyZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uKHtwYXlsb2FkOiB7bWVtYmVySWQ6IHBheWxvYWQubWVtYmVySWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKSB7XG4gICAgYWN0aW9ucy5wdXNoKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24oe3BheWxvYWQ6IHttZW1iZXJJZDogcGF5bG9hZC5tZW1iZXJJZCwgYWN0aXZpdHlJbnZpdGVJZDogcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkfX0pKTtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25zO1xufVxuXG4vLyBOZXcgZ3Vlc3RzIChubyBpZCB5ZXQpIGFyZSBzZW50IGlubGluZSB3aXRoIHRoZSByZXNwb25kIHJlcXVlc3QsIHNvIHRoZVxuLy8gYmFja2VuZCBjcmVhdGVzIHRoZW0gYmVmb3JlIHRoZSBpbnZvaWNlIGFuZCBpbmNsdWRlcyB0aGVpciBndWVzdCBmZWVzLlxuZnVuY3Rpb24gbmV3R3Vlc3RzKGd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4gfCB1bmRlZmluZWQpOiBBcnJheTx7IG5hbWU6IHN0cmluZywgY29tbWVudD86IHN0cmluZyB9PiB7XG4gIHJldHVybiAoZ3Vlc3RzID8/IFtdKS5maWx0ZXIoZyA9PiAhZy5pZCkubWFwKGcgPT4gKHsgbmFtZTogZy5uYW1lLCBjb21tZW50OiBnLmNvbW1lbnQgPz8gdW5kZWZpbmVkIH0pKTtcbn1cblxuLy8gVXBkYXRlcyBhbmQgZGVsZXRlcyBvZiBleGlzdGluZyBndWVzdHMgc3RpbGwgdXNlIHRoZSBkZWRpY2F0ZWQgZ3Vlc3Rcbi8vIGVuZHBvaW50czsgbmV3IGd1ZXN0cyBhcmUgc2VudCBpbmxpbmUgd2l0aCB0aGUgcmVzcG9uZCByZXF1ZXN0IGluc3RlYWQuXG5mdW5jdGlvbiByZWNvbmNpbGVNZW1iZXJHdWVzdHMoXG4gIG1lbWJlcklkOiBzdHJpbmcsXG4gIGludml0ZUlkOiBzdHJpbmcsXG4gIGRlc2lyZWRHdWVzdHM6IEFycmF5PEd1ZXN0SW5wdXQ+LFxuICBleGlzdGluZ0d1ZXN0czogQXJyYXk8R3Vlc3Q+LFxuICBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZVxuKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gIGNvbnN0IGV4aXN0aW5nQnlJZCA9IG5ldyBNYXAoZXhpc3RpbmdHdWVzdHMubWFwKGcgPT4gW2cuaWQsIGddKSk7XG4gIGNvbnN0IGRlc2lyZWRJZHMgPSBuZXcgU2V0KGRlc2lyZWRHdWVzdHMuZmlsdGVyKGcgPT4gZy5pZCkubWFwKGcgPT4gZy5pZCEpKTtcblxuICBjb25zdCB0b0RlbGV0ZSA9IGV4aXN0aW5nR3Vlc3RzLmZpbHRlcihnID0+ICFkZXNpcmVkSWRzLmhhcyhnLmlkKSk7XG4gIGNvbnN0IHRvVXBkYXRlID0gZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiB7XG4gICAgaWYgKCFnLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ0J5SWQuZ2V0KGcuaWQpO1xuICAgIHJldHVybiBleGlzdGluZyAmJiAoZXhpc3RpbmcubmFtZSAhPT0gZy5uYW1lIHx8IGV4aXN0aW5nLmNvbW1lbnQgIT09IGcuY29tbWVudCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9wczogQXJyYXk8T2JzZXJ2YWJsZTx1bmtub3duPj4gPSBbXG4gICAgLi4udG9EZWxldGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZU1lbWJlckFjdGl2aXR5R3Vlc3QobWVtYmVySWQsIGludml0ZUlkLCBnLmlkKSksXG4gICAgLi4udG9VcGRhdGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5R3Vlc3QobWVtYmVySWQsIGludml0ZUlkLCBnLmlkISwgeyBuYW1lOiBnLm5hbWUsIGNvbW1lbnQ6IGcuY29tbWVudCA/PyB1bmRlZmluZWQgfSkpLFxuICBdO1xuXG4gIHJldHVybiBvcHMubGVuZ3RoID4gMCA/IGZvcmtKb2luKG9wcykgOiBvZihudWxsKTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlUHVibGljVG9rZW5HdWVzdHMoXG4gIGlkOiBzdHJpbmcsXG4gIHRva2VuOiBzdHJpbmcsXG4gIGRlc2lyZWRHdWVzdHM6IEFycmF5PEd1ZXN0SW5wdXQ+LFxuICBleGlzdGluZ0d1ZXN0czogQXJyYXk8R3Vlc3Q+LFxuICBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZVxuKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gIGNvbnN0IGV4aXN0aW5nQnlJZCA9IG5ldyBNYXAoZXhpc3RpbmdHdWVzdHMubWFwKGcgPT4gW2cuaWQsIGddKSk7XG4gIGNvbnN0IGRlc2lyZWRJZHMgPSBuZXcgU2V0KGRlc2lyZWRHdWVzdHMuZmlsdGVyKGcgPT4gZy5pZCkubWFwKGcgPT4gZy5pZCEpKTtcblxuICBjb25zdCB0b0RlbGV0ZSA9IGV4aXN0aW5nR3Vlc3RzLmZpbHRlcihnID0+ICFkZXNpcmVkSWRzLmhhcyhnLmlkKSk7XG4gIGNvbnN0IHRvVXBkYXRlID0gZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiB7XG4gICAgaWYgKCFnLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ0J5SWQuZ2V0KGcuaWQpO1xuICAgIHJldHVybiBleGlzdGluZyAmJiAoZXhpc3RpbmcubmFtZSAhPT0gZy5uYW1lIHx8IGV4aXN0aW5nLmNvbW1lbnQgIT09IGcuY29tbWVudCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9wczogQXJyYXk8T2JzZXJ2YWJsZTx1bmtub3duPj4gPSBbXG4gICAgLi4udG9EZWxldGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkLCB0b2tlbiwgZy5pZCkpLFxuICAgIC4uLnRvVXBkYXRlLm1hcChnID0+IGFjdGl2aXR5U2VydmljZS51cGRhdGVQdWJsaWNBY3Rpdml0eUd1ZXN0QnlUb2tlbihpZCwgdG9rZW4sIGcuaWQhLCB7IG5hbWU6IGcubmFtZSwgY29tbWVudDogZy5jb21tZW50ID8/IHVuZGVmaW5lZCB9KSksXG4gIF07XG5cbiAgcmV0dXJuIG9wcy5sZW5ndGggPiAwID8gZm9ya0pvaW4ob3BzKSA6IG9mKG51bGwpO1xufVxuIl19