@vendasta/social-posts 4.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_internal/enums/index.mjs +9 -0
  3. package/esm2020/lib/_internal/enums/multilocation-post.enum.mjs +12 -0
  4. package/esm2020/lib/_internal/enums/social-posts.enum.mjs +39 -0
  5. package/esm2020/lib/_internal/hash-tags.api.service.mjs +49 -0
  6. package/esm2020/lib/_internal/index.mjs +17 -0
  7. package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
  8. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  9. package/esm2020/lib/_internal/interfaces/hashtag.interface.mjs +8 -0
  10. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  11. package/esm2020/lib/_internal/interfaces/multilocation-post.interface.mjs +8 -0
  12. package/esm2020/lib/_internal/interfaces/pixabay-image.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/post-templates.interface.mjs +8 -0
  14. package/esm2020/lib/_internal/interfaces/social-post-stats.interface.mjs +8 -0
  15. package/esm2020/lib/_internal/interfaces/social-posts.interface.mjs +8 -0
  16. package/esm2020/lib/_internal/interfaces/tenor-gif.interface.mjs +8 -0
  17. package/esm2020/lib/_internal/multilocation-post.api.service.mjs +64 -0
  18. package/esm2020/lib/_internal/objects/api.mjs +1354 -0
  19. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  20. package/esm2020/lib/_internal/objects/hashtag.mjs +39 -0
  21. package/esm2020/lib/_internal/objects/index.mjs +16 -0
  22. package/esm2020/lib/_internal/objects/multilocation-post.mjs +115 -0
  23. package/esm2020/lib/_internal/objects/pixabay-image.mjs +138 -0
  24. package/esm2020/lib/_internal/objects/post-templates.mjs +75 -0
  25. package/esm2020/lib/_internal/objects/social-post-stats.mjs +127 -0
  26. package/esm2020/lib/_internal/objects/social-posts.mjs +272 -0
  27. package/esm2020/lib/_internal/objects/tenor-gif.mjs +106 -0
  28. package/esm2020/lib/_internal/partner-social-posts.api.service.mjs +46 -0
  29. package/esm2020/lib/_internal/pixabay-images.api.service.mjs +41 -0
  30. package/esm2020/lib/_internal/post-templates.api.service.mjs +59 -0
  31. package/esm2020/lib/_internal/social-posts.api.service.mjs +70 -0
  32. package/esm2020/lib/_internal/tenor-gifs.api.service.mjs +46 -0
  33. package/esm2020/lib/hashtag.service.mjs +42 -0
  34. package/esm2020/lib/index.mjs +8 -0
  35. package/esm2020/lib/multilocation-posts.service.mjs +76 -0
  36. package/esm2020/lib/pixabay-image.service.mjs +23 -0
  37. package/esm2020/lib/post-templates.service.mjs +72 -0
  38. package/esm2020/lib/social-posts.service.mjs +43 -0
  39. package/esm2020/lib/tenor-gifs.service.mjs +34 -0
  40. package/esm2020/public_api.mjs +5 -0
  41. package/esm2020/vendasta-social-posts.mjs +5 -0
  42. package/fesm2015/vendasta-social-posts.mjs +2884 -0
  43. package/fesm2015/vendasta-social-posts.mjs.map +1 -0
  44. package/fesm2020/vendasta-social-posts.mjs +2883 -0
  45. package/fesm2020/vendasta-social-posts.mjs.map +1 -0
  46. package/lib/_generated/host.service.d.ts +5 -9
  47. package/lib/_internal/hash-tags.api.service.d.ts +18 -0
  48. package/lib/_internal/index.d.ts +3 -0
  49. package/lib/_internal/interfaces/api.interface.d.ts +51 -0
  50. package/lib/_internal/interfaces/hashtag.interface.d.ts +6 -0
  51. package/lib/_internal/interfaces/index.d.ts +4 -1
  52. package/lib/_internal/interfaces/pixabay-image.interface.d.ts +26 -0
  53. package/lib/_internal/interfaces/tenor-gif.interface.d.ts +20 -0
  54. package/lib/_internal/multilocation-post.api.service.d.ts +4 -0
  55. package/lib/_internal/objects/api.d.ts +81 -0
  56. package/lib/_internal/objects/hashtag.d.ts +11 -0
  57. package/lib/_internal/objects/index.d.ts +4 -1
  58. package/lib/_internal/objects/pixabay-image.d.ts +31 -0
  59. package/lib/_internal/objects/tenor-gif.d.ts +31 -0
  60. package/lib/_internal/partner-social-posts.api.service.d.ts +4 -0
  61. package/lib/_internal/pixabay-images.api.service.d.ts +16 -0
  62. package/lib/_internal/post-templates.api.service.d.ts +4 -0
  63. package/lib/_internal/social-posts.api.service.d.ts +4 -0
  64. package/lib/_internal/tenor-gifs.api.service.d.ts +17 -0
  65. package/lib/hashtag.service.d.ts +13 -0
  66. package/lib/index.d.ts +3 -0
  67. package/lib/multilocation-posts.service.d.ts +3 -0
  68. package/lib/pixabay-image.service.d.ts +11 -0
  69. package/lib/post-templates.service.d.ts +3 -0
  70. package/lib/social-posts.service.d.ts +3 -0
  71. package/lib/tenor-gifs.service.d.ts +12 -0
  72. package/package.json +24 -16
  73. package/src/README.md +1 -0
  74. package/vendasta-social-posts.d.ts +1 -4
  75. package/bundles/vendasta-social-posts.umd.js +0 -3709
  76. package/bundles/vendasta-social-posts.umd.js.map +0 -1
  77. package/bundles/vendasta-social-posts.umd.min.js +0 -2
  78. package/bundles/vendasta-social-posts.umd.min.js.map +0 -1
  79. package/esm2015/lib/_generated/host.service.js +0 -104
  80. package/esm2015/lib/_internal/enums/index.js +0 -13
  81. package/esm2015/lib/_internal/enums/multilocation-post.enum.js +0 -19
  82. package/esm2015/lib/_internal/enums/social-posts.enum.js +0 -67
  83. package/esm2015/lib/_internal/index.js +0 -18
  84. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -447
  85. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -19
  86. package/esm2015/lib/_internal/interfaces/index.js +0 -5
  87. package/esm2015/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  88. package/esm2015/lib/_internal/interfaces/post-templates.interface.js +0 -45
  89. package/esm2015/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  90. package/esm2015/lib/_internal/interfaces/social-posts.interface.js +0 -127
  91. package/esm2015/lib/_internal/multilocation-post.api.service.js +0 -136
  92. package/esm2015/lib/_internal/objects/api.js +0 -1805
  93. package/esm2015/lib/_internal/objects/field-mask.js +0 -53
  94. package/esm2015/lib/_internal/objects/index.js +0 -17
  95. package/esm2015/lib/_internal/objects/multilocation-post.js +0 -197
  96. package/esm2015/lib/_internal/objects/post-templates.js +0 -127
  97. package/esm2015/lib/_internal/objects/social-post-stats.js +0 -207
  98. package/esm2015/lib/_internal/objects/social-posts.js +0 -446
  99. package/esm2015/lib/_internal/partner-social-posts.api.service.js +0 -90
  100. package/esm2015/lib/_internal/post-templates.api.service.js +0 -122
  101. package/esm2015/lib/_internal/social-posts.api.service.js +0 -155
  102. package/esm2015/lib/index.js +0 -9
  103. package/esm2015/lib/multilocation-posts.service.js +0 -145
  104. package/esm2015/lib/post-templates.service.js +0 -138
  105. package/esm2015/lib/social-posts.service.js +0 -85
  106. package/esm2015/public_api.js +0 -9
  107. package/esm2015/vendasta-social-posts.js +0 -13
  108. package/esm5/lib/_generated/host.service.js +0 -115
  109. package/esm5/lib/_internal/enums/index.js +0 -13
  110. package/esm5/lib/_internal/enums/multilocation-post.enum.js +0 -19
  111. package/esm5/lib/_internal/enums/social-posts.enum.js +0 -67
  112. package/esm5/lib/_internal/index.js +0 -18
  113. package/esm5/lib/_internal/interfaces/api.interface.js +0 -447
  114. package/esm5/lib/_internal/interfaces/field-mask.interface.js +0 -19
  115. package/esm5/lib/_internal/interfaces/index.js +0 -5
  116. package/esm5/lib/_internal/interfaces/multilocation-post.interface.js +0 -59
  117. package/esm5/lib/_internal/interfaces/post-templates.interface.js +0 -45
  118. package/esm5/lib/_internal/interfaces/social-post-stats.interface.js +0 -57
  119. package/esm5/lib/_internal/interfaces/social-posts.interface.js +0 -127
  120. package/esm5/lib/_internal/multilocation-post.api.service.js +0 -163
  121. package/esm5/lib/_internal/objects/api.js +0 -2015
  122. package/esm5/lib/_internal/objects/field-mask.js +0 -59
  123. package/esm5/lib/_internal/objects/index.js +0 -17
  124. package/esm5/lib/_internal/objects/multilocation-post.js +0 -215
  125. package/esm5/lib/_internal/objects/post-templates.js +0 -133
  126. package/esm5/lib/_internal/objects/social-post-stats.js +0 -225
  127. package/esm5/lib/_internal/objects/social-posts.js +0 -482
  128. package/esm5/lib/_internal/partner-social-posts.api.service.js +0 -100
  129. package/esm5/lib/_internal/post-templates.api.service.js +0 -145
  130. package/esm5/lib/_internal/social-posts.api.service.js +0 -186
  131. package/esm5/lib/index.js +0 -9
  132. package/esm5/lib/multilocation-posts.service.js +0 -191
  133. package/esm5/lib/post-templates.service.js +0 -182
  134. package/esm5/lib/social-posts.service.js +0 -106
  135. package/esm5/public_api.js +0 -9
  136. package/esm5/vendasta-social-posts.js +0 -13
  137. package/fesm2015/vendasta-social-posts.js +0 -3220
  138. package/fesm2015/vendasta-social-posts.js.map +0 -1
  139. package/fesm5/vendasta-social-posts.js +0 -3668
  140. package/fesm5/vendasta-social-posts.js.map +0 -1
  141. package/vendasta-social-posts.metadata.json +0 -1
@@ -1,3709 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@vendasta/core'), require('@angular/common/http'), require('rxjs/operators'), require('rxjs')) :
3
- typeof define === 'function' && define.amd ? define('@vendasta/social-posts', ['exports', '@angular/core', '@vendasta/core', '@angular/common/http', 'rxjs/operators', 'rxjs'], factory) :
4
- (factory((global.vendasta = global.vendasta || {}, global.vendasta['social-posts'] = {}),global.ng.core,global.i1,global.ng.common.http,global.rxjs.operators,global.rxjs));
5
- }(this, (function (exports,i0,i1,i1$1,operators,rxjs) { 'use strict';
6
-
7
- /**
8
- * @fileoverview added by tsickle
9
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
10
- */
11
- var FieldMask = /** @class */ (function () {
12
- function FieldMask(kwargs) {
13
- if (!kwargs) {
14
- return;
15
- }
16
- Object.assign(this, kwargs);
17
- }
18
- /**
19
- * @param {?} proto
20
- * @return {?}
21
- */
22
- FieldMask.fromProto = /**
23
- * @param {?} proto
24
- * @return {?}
25
- */
26
- function (proto) {
27
- /** @type {?} */
28
- var m = new FieldMask();
29
- m = Object.assign(m, proto);
30
- return m;
31
- };
32
- /**
33
- * @return {?}
34
- */
35
- FieldMask.prototype.toApiJson = /**
36
- * @return {?}
37
- */
38
- function () {
39
- /** @type {?} */
40
- var toReturn = {};
41
- if (typeof this.paths !== 'undefined') {
42
- toReturn['paths'] = this.paths;
43
- }
44
- return toReturn;
45
- };
46
- return FieldMask;
47
- }());
48
-
49
- /**
50
- * @fileoverview added by tsickle
51
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
52
- */
53
- var Location = /** @class */ (function () {
54
- function Location(kwargs) {
55
- if (!kwargs) {
56
- return;
57
- }
58
- Object.assign(this, kwargs);
59
- }
60
- /**
61
- * @param {?} proto
62
- * @return {?}
63
- */
64
- Location.fromProto = /**
65
- * @param {?} proto
66
- * @return {?}
67
- */
68
- function (proto) {
69
- /** @type {?} */
70
- var m = new Location();
71
- m = Object.assign(m, proto);
72
- return m;
73
- };
74
- /**
75
- * @return {?}
76
- */
77
- Location.prototype.toApiJson = /**
78
- * @return {?}
79
- */
80
- function () {
81
- /** @type {?} */
82
- var toReturn = {};
83
- if (typeof this.socialServiceIds !== 'undefined') {
84
- toReturn['socialServiceIds'] = this.socialServiceIds;
85
- }
86
- if (typeof this.accountGroupId !== 'undefined') {
87
- toReturn['accountGroupId'] = this.accountGroupId;
88
- }
89
- return toReturn;
90
- };
91
- return Location;
92
- }());
93
- var MultilocationPost = /** @class */ (function () {
94
- function MultilocationPost(kwargs) {
95
- if (!kwargs) {
96
- return;
97
- }
98
- Object.assign(this, kwargs);
99
- }
100
- /**
101
- * @param {?} proto
102
- * @return {?}
103
- */
104
- MultilocationPost.fromProto = /**
105
- * @param {?} proto
106
- * @return {?}
107
- */
108
- function (proto) {
109
- /** @type {?} */
110
- var m = new MultilocationPost();
111
- m = Object.assign(m, proto);
112
- if (proto.originalScheduledDate) {
113
- m.originalScheduledDate = new Date(proto.originalScheduledDate);
114
- }
115
- if (proto.originalLocations) {
116
- m.originalLocations = proto.originalLocations.map(Location.fromProto);
117
- }
118
- if (proto.editedLocations) {
119
- m.editedLocations = proto.editedLocations.map(Location.fromProto);
120
- }
121
- if (proto.deletedLocations) {
122
- m.deletedLocations = proto.deletedLocations.map(Location.fromProto);
123
- }
124
- return m;
125
- };
126
- /**
127
- * @return {?}
128
- */
129
- MultilocationPost.prototype.toApiJson = /**
130
- * @return {?}
131
- */
132
- function () {
133
- /** @type {?} */
134
- var toReturn = {};
135
- if (typeof this.brandId !== 'undefined') {
136
- toReturn['brandId'] = this.brandId;
137
- }
138
- if (typeof this.multilocationId !== 'undefined') {
139
- toReturn['multilocationId'] = this.multilocationId;
140
- }
141
- if (typeof this.originalText !== 'undefined') {
142
- toReturn['originalText'] = this.originalText;
143
- }
144
- if (typeof this.originalScheduledDate !== 'undefined' && this.originalScheduledDate !== null) {
145
- toReturn['originalScheduledDate'] = 'toApiJson' in this.originalScheduledDate ? (( /** @type {?} */(this.originalScheduledDate))).toApiJson() : this.originalScheduledDate;
146
- }
147
- if (typeof this.originalMedia !== 'undefined') {
148
- toReturn['originalMedia'] = this.originalMedia;
149
- }
150
- if (typeof this.originalLocations !== 'undefined' && this.originalLocations !== null) {
151
- toReturn['originalLocations'] = 'toApiJson' in this.originalLocations ? (( /** @type {?} */(this.originalLocations))).toApiJson() : this.originalLocations;
152
- }
153
- if (typeof this.editedLocations !== 'undefined' && this.editedLocations !== null) {
154
- toReturn['editedLocations'] = 'toApiJson' in this.editedLocations ? (( /** @type {?} */(this.editedLocations))).toApiJson() : this.editedLocations;
155
- }
156
- if (typeof this.deletedLocations !== 'undefined' && this.deletedLocations !== null) {
157
- toReturn['deletedLocations'] = 'toApiJson' in this.deletedLocations ? (( /** @type {?} */(this.deletedLocations))).toApiJson() : this.deletedLocations;
158
- }
159
- if (typeof this.originalGifs !== 'undefined') {
160
- toReturn['originalGifs'] = this.originalGifs;
161
- }
162
- if (typeof this.originalVideos !== 'undefined') {
163
- toReturn['originalVideos'] = this.originalVideos;
164
- }
165
- return toReturn;
166
- };
167
- return MultilocationPost;
168
- }());
169
- var MultilocationPostError = /** @class */ (function () {
170
- function MultilocationPostError(kwargs) {
171
- if (!kwargs) {
172
- return;
173
- }
174
- Object.assign(this, kwargs);
175
- }
176
- /**
177
- * @param {?} proto
178
- * @return {?}
179
- */
180
- MultilocationPostError.fromProto = /**
181
- * @param {?} proto
182
- * @return {?}
183
- */
184
- function (proto) {
185
- /** @type {?} */
186
- var m = new MultilocationPostError();
187
- m = Object.assign(m, proto);
188
- return m;
189
- };
190
- /**
191
- * @return {?}
192
- */
193
- MultilocationPostError.prototype.toApiJson = /**
194
- * @return {?}
195
- */
196
- function () {
197
- /** @type {?} */
198
- var toReturn = {};
199
- if (typeof this.socialServiceId !== 'undefined') {
200
- toReturn['socialServiceId'] = this.socialServiceId;
201
- }
202
- if (typeof this.accountGroupId !== 'undefined') {
203
- toReturn['accountGroupId'] = this.accountGroupId;
204
- }
205
- if (typeof this.errorReason !== 'undefined') {
206
- toReturn['errorReason'] = this.errorReason;
207
- }
208
- return toReturn;
209
- };
210
- return MultilocationPostError;
211
- }());
212
-
213
- /**
214
- * @fileoverview added by tsickle
215
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
216
- */
217
- var PostTemplate = /** @class */ (function () {
218
- function PostTemplate(kwargs) {
219
- if (!kwargs) {
220
- return;
221
- }
222
- Object.assign(this, kwargs);
223
- }
224
- /**
225
- * @param {?} proto
226
- * @return {?}
227
- */
228
- PostTemplate.fromProto = /**
229
- * @param {?} proto
230
- * @return {?}
231
- */
232
- function (proto) {
233
- /** @type {?} */
234
- var m = new PostTemplate();
235
- m = Object.assign(m, proto);
236
- if (proto.created) {
237
- m.created = new Date(proto.created);
238
- }
239
- if (proto.updated) {
240
- m.updated = new Date(proto.updated);
241
- }
242
- if (proto.postDateTime) {
243
- m.postDateTime = new Date(proto.postDateTime);
244
- }
245
- return m;
246
- };
247
- /**
248
- * @return {?}
249
- */
250
- PostTemplate.prototype.toApiJson = /**
251
- * @return {?}
252
- */
253
- function () {
254
- /** @type {?} */
255
- var toReturn = {};
256
- if (typeof this.accountGroupId !== 'undefined') {
257
- toReturn['accountGroupId'] = this.accountGroupId;
258
- }
259
- if (typeof this.templateId !== 'undefined') {
260
- toReturn['templateId'] = this.templateId;
261
- }
262
- if (typeof this.title !== 'undefined') {
263
- toReturn['title'] = this.title;
264
- }
265
- if (typeof this.created !== 'undefined' && this.created !== null) {
266
- toReturn['created'] = 'toApiJson' in this.created ? (( /** @type {?} */(this.created))).toApiJson() : this.created;
267
- }
268
- if (typeof this.updated !== 'undefined' && this.updated !== null) {
269
- toReturn['updated'] = 'toApiJson' in this.updated ? (( /** @type {?} */(this.updated))).toApiJson() : this.updated;
270
- }
271
- if (typeof this.postText !== 'undefined') {
272
- toReturn['postText'] = this.postText;
273
- }
274
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
275
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
276
- }
277
- if (typeof this.gmbPostCustomization !== 'undefined') {
278
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
279
- }
280
- if (typeof this.imageUrl !== 'undefined') {
281
- toReturn['imageUrl'] = this.imageUrl;
282
- }
283
- if (typeof this.imagePath !== 'undefined') {
284
- toReturn['imagePath'] = this.imagePath;
285
- }
286
- if (typeof this.imageSize !== 'undefined') {
287
- toReturn['imageSize'] = this.imageSize;
288
- }
289
- if (typeof this.previews !== 'undefined') {
290
- toReturn['previews'] = this.previews;
291
- }
292
- if (typeof this.options !== 'undefined') {
293
- toReturn['options'] = this.options;
294
- }
295
- if (typeof this.videoUrl !== 'undefined') {
296
- toReturn['videoUrl'] = this.videoUrl;
297
- }
298
- return toReturn;
299
- };
300
- return PostTemplate;
301
- }());
302
-
303
- /**
304
- * @fileoverview added by tsickle
305
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
306
- */
307
- // *********************************
308
- // Code generated by sdkgen
309
- // DO NOT EDIT!.
310
- //
311
- // Enums.
312
- // *********************************
313
- /** @enum {number} */
314
- var CallToActionCallToActionType = {
315
- LEARN_MORE: 0,
316
- BOOK: 1,
317
- ORDER: 2,
318
- SHOP: 3,
319
- SIGN_UP: 4,
320
- GET_OFFER: 5,
321
- CALL: 6,
322
- };
323
- CallToActionCallToActionType[CallToActionCallToActionType.LEARN_MORE] = 'LEARN_MORE';
324
- CallToActionCallToActionType[CallToActionCallToActionType.BOOK] = 'BOOK';
325
- CallToActionCallToActionType[CallToActionCallToActionType.ORDER] = 'ORDER';
326
- CallToActionCallToActionType[CallToActionCallToActionType.SHOP] = 'SHOP';
327
- CallToActionCallToActionType[CallToActionCallToActionType.SIGN_UP] = 'SIGN_UP';
328
- CallToActionCallToActionType[CallToActionCallToActionType.GET_OFFER] = 'GET_OFFER';
329
- CallToActionCallToActionType[CallToActionCallToActionType.CALL] = 'CALL';
330
- /** @enum {number} */
331
- var SocialPostDeletionStatus = {
332
- NONE: 0,
333
- FAILED: 1,
334
- IN_PROGRESS: 2,
335
- };
336
- SocialPostDeletionStatus[SocialPostDeletionStatus.NONE] = 'NONE';
337
- SocialPostDeletionStatus[SocialPostDeletionStatus.FAILED] = 'FAILED';
338
- SocialPostDeletionStatus[SocialPostDeletionStatus.IN_PROGRESS] = 'IN_PROGRESS';
339
- /** @enum {number} */
340
- var PostingStatus = {
341
- POSTING_IN_PROGRESS: 0,
342
- POSTING_FAILED: 1,
343
- POSTING_COMPLETED: 2,
344
- };
345
- PostingStatus[PostingStatus.POSTING_IN_PROGRESS] = 'POSTING_IN_PROGRESS';
346
- PostingStatus[PostingStatus.POSTING_FAILED] = 'POSTING_FAILED';
347
- PostingStatus[PostingStatus.POSTING_COMPLETED] = 'POSTING_COMPLETED';
348
- /** @enum {number} */
349
- var SocialPostService = {
350
- TWITTER: 0,
351
- FACEBOOK: 1,
352
- LINKED_IN: 2,
353
- GOOGLE_PLUS: 3,
354
- GOOGLE_MY_BUSINESS: 4,
355
- UNKNOWN: 5,
356
- INSTAGRAM: 6,
357
- };
358
- SocialPostService[SocialPostService.TWITTER] = 'TWITTER';
359
- SocialPostService[SocialPostService.FACEBOOK] = 'FACEBOOK';
360
- SocialPostService[SocialPostService.LINKED_IN] = 'LINKED_IN';
361
- SocialPostService[SocialPostService.GOOGLE_PLUS] = 'GOOGLE_PLUS';
362
- SocialPostService[SocialPostService.GOOGLE_MY_BUSINESS] = 'GOOGLE_MY_BUSINESS';
363
- SocialPostService[SocialPostService.UNKNOWN] = 'UNKNOWN';
364
- SocialPostService[SocialPostService.INSTAGRAM] = 'INSTAGRAM';
365
-
366
- /**
367
- * @fileoverview added by tsickle
368
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
369
- */
370
- // *********************************
371
- // Code generated by sdkgen
372
- // DO NOT EDIT!.
373
- //
374
- // Enums.
375
- // *********************************
376
- /** @enum {number} */
377
- var RemoveReason = {
378
- REMOVE_REASON_EDIT: 0,
379
- REMOVE_REASON_DELETE: 1,
380
- };
381
- RemoveReason[RemoveReason.REMOVE_REASON_EDIT] = 'REMOVE_REASON_EDIT';
382
- RemoveReason[RemoveReason.REMOVE_REASON_DELETE] = 'REMOVE_REASON_DELETE';
383
-
384
- /**
385
- * @fileoverview added by tsickle
386
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
387
- */
388
-
389
- /**
390
- * @fileoverview added by tsickle
391
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
392
- */
393
- /**
394
- * @template E
395
- * @param {?} enumRef
396
- * @param {?} value
397
- * @return {?}
398
- */
399
- function enumStringToValue$3(enumRef, value) {
400
- if (typeof value === 'number') {
401
- return value;
402
- }
403
- return enumRef[value];
404
- }
405
- var CallToAction = /** @class */ (function () {
406
- function CallToAction(kwargs) {
407
- if (!kwargs) {
408
- return;
409
- }
410
- Object.assign(this, kwargs);
411
- }
412
- /**
413
- * @param {?} proto
414
- * @return {?}
415
- */
416
- CallToAction.fromProto = /**
417
- * @param {?} proto
418
- * @return {?}
419
- */
420
- function (proto) {
421
- /** @type {?} */
422
- var m = new CallToAction();
423
- m = Object.assign(m, proto);
424
- if (proto.actionType) {
425
- m.actionType = enumStringToValue$3(CallToActionCallToActionType, proto.actionType);
426
- }
427
- return m;
428
- };
429
- /**
430
- * @return {?}
431
- */
432
- CallToAction.prototype.toApiJson = /**
433
- * @return {?}
434
- */
435
- function () {
436
- /** @type {?} */
437
- var toReturn = {};
438
- if (typeof this.url !== 'undefined') {
439
- toReturn['url'] = this.url;
440
- }
441
- if (typeof this.actionType !== 'undefined') {
442
- toReturn['actionType'] = this.actionType;
443
- }
444
- return toReturn;
445
- };
446
- return CallToAction;
447
- }());
448
- var Error = /** @class */ (function () {
449
- function Error(kwargs) {
450
- if (!kwargs) {
451
- return;
452
- }
453
- Object.assign(this, kwargs);
454
- }
455
- /**
456
- * @param {?} proto
457
- * @return {?}
458
- */
459
- Error.fromProto = /**
460
- * @param {?} proto
461
- * @return {?}
462
- */
463
- function (proto) {
464
- /** @type {?} */
465
- var m = new Error();
466
- m = Object.assign(m, proto);
467
- return m;
468
- };
469
- /**
470
- * @return {?}
471
- */
472
- Error.prototype.toApiJson = /**
473
- * @return {?}
474
- */
475
- function () {
476
- /** @type {?} */
477
- var toReturn = {};
478
- if (typeof this.reason !== 'undefined') {
479
- toReturn['reason'] = this.reason;
480
- }
481
- if (typeof this.category !== 'undefined') {
482
- toReturn['category'] = this.category;
483
- }
484
- return toReturn;
485
- };
486
- return Error;
487
- }());
488
- var Event = /** @class */ (function () {
489
- function Event(kwargs) {
490
- if (!kwargs) {
491
- return;
492
- }
493
- Object.assign(this, kwargs);
494
- }
495
- /**
496
- * @param {?} proto
497
- * @return {?}
498
- */
499
- Event.fromProto = /**
500
- * @param {?} proto
501
- * @return {?}
502
- */
503
- function (proto) {
504
- /** @type {?} */
505
- var m = new Event();
506
- m = Object.assign(m, proto);
507
- if (proto.startDatetime) {
508
- m.startDatetime = new Date(proto.startDatetime);
509
- }
510
- if (proto.endDatetime) {
511
- m.endDatetime = new Date(proto.endDatetime);
512
- }
513
- return m;
514
- };
515
- /**
516
- * @return {?}
517
- */
518
- Event.prototype.toApiJson = /**
519
- * @return {?}
520
- */
521
- function () {
522
- /** @type {?} */
523
- var toReturn = {};
524
- if (typeof this.title !== 'undefined') {
525
- toReturn['title'] = this.title;
526
- }
527
- if (typeof this.startDatetime !== 'undefined' && this.startDatetime !== null) {
528
- toReturn['startDatetime'] = 'toApiJson' in this.startDatetime ? (( /** @type {?} */(this.startDatetime))).toApiJson() : this.startDatetime;
529
- }
530
- if (typeof this.endDatetime !== 'undefined' && this.endDatetime !== null) {
531
- toReturn['endDatetime'] = 'toApiJson' in this.endDatetime ? (( /** @type {?} */(this.endDatetime))).toApiJson() : this.endDatetime;
532
- }
533
- return toReturn;
534
- };
535
- return Event;
536
- }());
537
- var SchedulePostStatus = /** @class */ (function () {
538
- function SchedulePostStatus(kwargs) {
539
- if (!kwargs) {
540
- return;
541
- }
542
- Object.assign(this, kwargs);
543
- }
544
- /**
545
- * @param {?} proto
546
- * @return {?}
547
- */
548
- SchedulePostStatus.fromProto = /**
549
- * @param {?} proto
550
- * @return {?}
551
- */
552
- function (proto) {
553
- /** @type {?} */
554
- var m = new SchedulePostStatus();
555
- m = Object.assign(m, proto);
556
- if (proto.error) {
557
- m.error = Error.fromProto(proto.error);
558
- }
559
- return m;
560
- };
561
- /**
562
- * @return {?}
563
- */
564
- SchedulePostStatus.prototype.toApiJson = /**
565
- * @return {?}
566
- */
567
- function () {
568
- /** @type {?} */
569
- var toReturn = {};
570
- if (typeof this.socialPostId !== 'undefined') {
571
- toReturn['socialPostId'] = this.socialPostId;
572
- }
573
- if (typeof this.socialServiceId !== 'undefined') {
574
- toReturn['socialServiceId'] = this.socialServiceId;
575
- }
576
- if (typeof this.socialServiceLabel !== 'undefined') {
577
- toReturn['socialServiceLabel'] = this.socialServiceLabel;
578
- }
579
- if (typeof this.error !== 'undefined' && this.error !== null) {
580
- toReturn['error'] = 'toApiJson' in this.error ? (( /** @type {?} */(this.error))).toApiJson() : this.error;
581
- }
582
- return toReturn;
583
- };
584
- return SchedulePostStatus;
585
- }());
586
- var SocialPost = /** @class */ (function () {
587
- function SocialPost(kwargs) {
588
- if (!kwargs) {
589
- return;
590
- }
591
- Object.assign(this, kwargs);
592
- }
593
- /**
594
- * @param {?} proto
595
- * @return {?}
596
- */
597
- SocialPost.fromProto = /**
598
- * @param {?} proto
599
- * @return {?}
600
- */
601
- function (proto) {
602
- /** @type {?} */
603
- var m = new SocialPost();
604
- m = Object.assign(m, proto);
605
- if (proto.posted) {
606
- m.posted = new Date(proto.posted);
607
- }
608
- if (proto.deletionStatus) {
609
- m.deletionStatus = enumStringToValue$3(SocialPostDeletionStatus, proto.deletionStatus);
610
- }
611
- if (proto.service) {
612
- m.service = enumStringToValue$3(SocialPostService, proto.service);
613
- }
614
- if (proto.created) {
615
- m.created = new Date(proto.created);
616
- }
617
- if (proto.scheduled) {
618
- m.scheduled = new Date(proto.scheduled);
619
- }
620
- if (proto.status) {
621
- m.status = enumStringToValue$3(PostingStatus, proto.status);
622
- }
623
- if (proto.event) {
624
- m.event = Event.fromProto(proto.event);
625
- }
626
- if (proto.callToAction) {
627
- m.callToAction = CallToAction.fromProto(proto.callToAction);
628
- }
629
- if (proto.error) {
630
- m.error = Error.fromProto(proto.error);
631
- }
632
- return m;
633
- };
634
- /**
635
- * @return {?}
636
- */
637
- SocialPost.prototype.toApiJson = /**
638
- * @return {?}
639
- */
640
- function () {
641
- /** @type {?} */
642
- var toReturn = {};
643
- if (typeof this.businessId !== 'undefined') {
644
- toReturn['businessId'] = this.businessId;
645
- }
646
- if (typeof this.socialPostId !== 'undefined') {
647
- toReturn['socialPostId'] = this.socialPostId;
648
- }
649
- if (typeof this.postText !== 'undefined') {
650
- toReturn['postText'] = this.postText;
651
- }
652
- if (typeof this.posted !== 'undefined' && this.posted !== null) {
653
- toReturn['posted'] = 'toApiJson' in this.posted ? (( /** @type {?} */(this.posted))).toApiJson() : this.posted;
654
- }
655
- if (typeof this.isError !== 'undefined') {
656
- toReturn['isError'] = this.isError;
657
- }
658
- if (typeof this.deletionStatus !== 'undefined') {
659
- toReturn['deletionStatus'] = this.deletionStatus;
660
- }
661
- if (typeof this.service !== 'undefined') {
662
- toReturn['service'] = this.service;
663
- }
664
- if (typeof this.permalink !== 'undefined') {
665
- toReturn['permalink'] = this.permalink;
666
- }
667
- if (typeof this.created !== 'undefined' && this.created !== null) {
668
- toReturn['created'] = 'toApiJson' in this.created ? (( /** @type {?} */(this.created))).toApiJson() : this.created;
669
- }
670
- if (typeof this.profileUrl !== 'undefined') {
671
- toReturn['profileUrl'] = this.profileUrl;
672
- }
673
- if (typeof this.profileImageUrl !== 'undefined') {
674
- toReturn['profileImageUrl'] = this.profileImageUrl;
675
- }
676
- if (typeof this.scheduled !== 'undefined' && this.scheduled !== null) {
677
- toReturn['scheduled'] = 'toApiJson' in this.scheduled ? (( /** @type {?} */(this.scheduled))).toApiJson() : this.scheduled;
678
- }
679
- if (typeof this.status !== 'undefined') {
680
- toReturn['status'] = this.status;
681
- }
682
- if (typeof this.imageUrl !== 'undefined') {
683
- toReturn['imageUrl'] = this.imageUrl;
684
- }
685
- if (typeof this.name !== 'undefined') {
686
- toReturn['name'] = this.name;
687
- }
688
- if (typeof this.username !== 'undefined') {
689
- toReturn['username'] = this.username;
690
- }
691
- if (typeof this.parentId !== 'undefined') {
692
- toReturn['parentId'] = this.parentId;
693
- }
694
- if (typeof this.socialServiceId !== 'undefined') {
695
- toReturn['socialServiceId'] = this.socialServiceId;
696
- }
697
- if (typeof this.event !== 'undefined' && this.event !== null) {
698
- toReturn['event'] = 'toApiJson' in this.event ? (( /** @type {?} */(this.event))).toApiJson() : this.event;
699
- }
700
- if (typeof this.callToAction !== 'undefined' && this.callToAction !== null) {
701
- toReturn['callToAction'] = 'toApiJson' in this.callToAction ? (( /** @type {?} */(this.callToAction))).toApiJson() : this.callToAction;
702
- }
703
- if (typeof this.videoUrl !== 'undefined') {
704
- toReturn['videoUrl'] = this.videoUrl;
705
- }
706
- if (typeof this.error !== 'undefined' && this.error !== null) {
707
- toReturn['error'] = 'toApiJson' in this.error ? (( /** @type {?} */(this.error))).toApiJson() : this.error;
708
- }
709
- if (typeof this.imageUrls !== 'undefined') {
710
- toReturn['imageUrls'] = this.imageUrls;
711
- }
712
- if (typeof this.linkPreviewImageUrl !== 'undefined') {
713
- toReturn['linkPreviewImageUrl'] = this.linkPreviewImageUrl;
714
- }
715
- if (typeof this.brandId !== 'undefined') {
716
- toReturn['brandId'] = this.brandId;
717
- }
718
- if (typeof this.multilocationPostId !== 'undefined') {
719
- toReturn['multilocationPostId'] = this.multilocationPostId;
720
- }
721
- return toReturn;
722
- };
723
- return SocialPost;
724
- }());
725
- var SocialPostData = /** @class */ (function () {
726
- function SocialPostData(kwargs) {
727
- if (!kwargs) {
728
- return;
729
- }
730
- Object.assign(this, kwargs);
731
- }
732
- /**
733
- * @param {?} proto
734
- * @return {?}
735
- */
736
- SocialPostData.fromProto = /**
737
- * @param {?} proto
738
- * @return {?}
739
- */
740
- function (proto) {
741
- /** @type {?} */
742
- var m = new SocialPostData();
743
- m = Object.assign(m, proto);
744
- if (proto.scheduleFor) {
745
- m.scheduleFor = new Date(proto.scheduleFor);
746
- }
747
- return m;
748
- };
749
- /**
750
- * @return {?}
751
- */
752
- SocialPostData.prototype.toApiJson = /**
753
- * @return {?}
754
- */
755
- function () {
756
- /** @type {?} */
757
- var toReturn = {};
758
- if (typeof this.postText !== 'undefined') {
759
- toReturn['postText'] = this.postText;
760
- }
761
- if (typeof this.imageUrl !== 'undefined') {
762
- toReturn['imageUrl'] = this.imageUrl;
763
- }
764
- if (typeof this.scheduleFor !== 'undefined' && this.scheduleFor !== null) {
765
- toReturn['scheduleFor'] = 'toApiJson' in this.scheduleFor ? (( /** @type {?} */(this.scheduleFor))).toApiJson() : this.scheduleFor;
766
- }
767
- return toReturn;
768
- };
769
- return SocialPostData;
770
- }());
771
-
772
- /**
773
- * @fileoverview added by tsickle
774
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
775
- */
776
- var FacebookPostStats = /** @class */ (function () {
777
- function FacebookPostStats(kwargs) {
778
- if (!kwargs) {
779
- return;
780
- }
781
- Object.assign(this, kwargs);
782
- }
783
- /**
784
- * @param {?} proto
785
- * @return {?}
786
- */
787
- FacebookPostStats.fromProto = /**
788
- * @param {?} proto
789
- * @return {?}
790
- */
791
- function (proto) {
792
- /** @type {?} */
793
- var m = new FacebookPostStats();
794
- m = Object.assign(m, proto);
795
- if (proto.commentCount) {
796
- m.commentCount = parseInt(proto.commentCount, 10);
797
- }
798
- if (proto.shareCount) {
799
- m.shareCount = parseInt(proto.shareCount, 10);
800
- }
801
- if (proto.likeCount) {
802
- m.likeCount = parseInt(proto.likeCount, 10);
803
- }
804
- if (proto.reactions) {
805
- m.reactions = parseInt(proto.reactions, 10);
806
- }
807
- if (proto.peopleReached) {
808
- m.peopleReached = parseInt(proto.peopleReached, 10);
809
- }
810
- return m;
811
- };
812
- /**
813
- * @return {?}
814
- */
815
- FacebookPostStats.prototype.toApiJson = /**
816
- * @return {?}
817
- */
818
- function () {
819
- /** @type {?} */
820
- var toReturn = {};
821
- if (typeof this.commentCount !== 'undefined') {
822
- toReturn['commentCount'] = this.commentCount;
823
- }
824
- if (typeof this.shareCount !== 'undefined') {
825
- toReturn['shareCount'] = this.shareCount;
826
- }
827
- if (typeof this.likeCount !== 'undefined') {
828
- toReturn['likeCount'] = this.likeCount;
829
- }
830
- if (typeof this.hasLike !== 'undefined') {
831
- toReturn['hasLike'] = this.hasLike;
832
- }
833
- if (typeof this.canLike !== 'undefined') {
834
- toReturn['canLike'] = this.canLike;
835
- }
836
- if (typeof this.reactions !== 'undefined') {
837
- toReturn['reactions'] = this.reactions;
838
- }
839
- if (typeof this.peopleReached !== 'undefined') {
840
- toReturn['peopleReached'] = this.peopleReached;
841
- }
842
- return toReturn;
843
- };
844
- return FacebookPostStats;
845
- }());
846
- var SocialPostStats = /** @class */ (function () {
847
- function SocialPostStats(kwargs) {
848
- if (!kwargs) {
849
- return;
850
- }
851
- Object.assign(this, kwargs);
852
- }
853
- /**
854
- * @param {?} proto
855
- * @return {?}
856
- */
857
- SocialPostStats.fromProto = /**
858
- * @param {?} proto
859
- * @return {?}
860
- */
861
- function (proto) {
862
- /** @type {?} */
863
- var m = new SocialPostStats();
864
- m = Object.assign(m, proto);
865
- if (proto.facebookPostStats) {
866
- m.facebookPostStats = FacebookPostStats.fromProto(proto.facebookPostStats);
867
- }
868
- if (proto.twitterPostStats) {
869
- m.twitterPostStats = TwitterPostStats.fromProto(proto.twitterPostStats);
870
- }
871
- return m;
872
- };
873
- /**
874
- * @return {?}
875
- */
876
- SocialPostStats.prototype.toApiJson = /**
877
- * @return {?}
878
- */
879
- function () {
880
- /** @type {?} */
881
- var toReturn = {};
882
- if (typeof this.internalPostId !== 'undefined') {
883
- toReturn['internalPostId'] = this.internalPostId;
884
- }
885
- if (typeof this.facebookPostStats !== 'undefined' && this.facebookPostStats !== null) {
886
- toReturn['facebookPostStats'] = 'toApiJson' in this.facebookPostStats ? (( /** @type {?} */(this.facebookPostStats))).toApiJson() : this.facebookPostStats;
887
- }
888
- if (typeof this.twitterPostStats !== 'undefined' && this.twitterPostStats !== null) {
889
- toReturn['twitterPostStats'] = 'toApiJson' in this.twitterPostStats ? (( /** @type {?} */(this.twitterPostStats))).toApiJson() : this.twitterPostStats;
890
- }
891
- return toReturn;
892
- };
893
- return SocialPostStats;
894
- }());
895
- var TwitterPostStats = /** @class */ (function () {
896
- function TwitterPostStats(kwargs) {
897
- if (!kwargs) {
898
- return;
899
- }
900
- Object.assign(this, kwargs);
901
- }
902
- /**
903
- * @param {?} proto
904
- * @return {?}
905
- */
906
- TwitterPostStats.fromProto = /**
907
- * @param {?} proto
908
- * @return {?}
909
- */
910
- function (proto) {
911
- /** @type {?} */
912
- var m = new TwitterPostStats();
913
- m = Object.assign(m, proto);
914
- if (proto.favourites) {
915
- m.favourites = parseInt(proto.favourites, 10);
916
- }
917
- if (proto.retweets) {
918
- m.retweets = parseInt(proto.retweets, 10);
919
- }
920
- return m;
921
- };
922
- /**
923
- * @return {?}
924
- */
925
- TwitterPostStats.prototype.toApiJson = /**
926
- * @return {?}
927
- */
928
- function () {
929
- /** @type {?} */
930
- var toReturn = {};
931
- if (typeof this.favourites !== 'undefined') {
932
- toReturn['favourites'] = this.favourites;
933
- }
934
- if (typeof this.hasFavourited !== 'undefined') {
935
- toReturn['hasFavourited'] = this.hasFavourited;
936
- }
937
- if (typeof this.retweets !== 'undefined') {
938
- toReturn['retweets'] = this.retweets;
939
- }
940
- if (typeof this.hasRetweeted !== 'undefined') {
941
- toReturn['hasRetweeted'] = this.hasRetweeted;
942
- }
943
- return toReturn;
944
- };
945
- return TwitterPostStats;
946
- }());
947
-
948
- /**
949
- * @fileoverview added by tsickle
950
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
951
- */
952
- /**
953
- * @template E
954
- * @param {?} enumRef
955
- * @param {?} value
956
- * @return {?}
957
- */
958
- function enumStringToValue$5(enumRef, value) {
959
- if (typeof value === 'number') {
960
- return value;
961
- }
962
- return enumRef[value];
963
- }
964
- var CreateMultilocationPostRequest = /** @class */ (function () {
965
- function CreateMultilocationPostRequest(kwargs) {
966
- if (!kwargs) {
967
- return;
968
- }
969
- Object.assign(this, kwargs);
970
- }
971
- /**
972
- * @param {?} proto
973
- * @return {?}
974
- */
975
- CreateMultilocationPostRequest.fromProto = /**
976
- * @param {?} proto
977
- * @return {?}
978
- */
979
- function (proto) {
980
- /** @type {?} */
981
- var m = new CreateMultilocationPostRequest();
982
- m = Object.assign(m, proto);
983
- if (proto.scheduledDate) {
984
- m.scheduledDate = new Date(proto.scheduledDate);
985
- }
986
- if (proto.locations) {
987
- m.locations = proto.locations.map(Location.fromProto);
988
- }
989
- return m;
990
- };
991
- /**
992
- * @return {?}
993
- */
994
- CreateMultilocationPostRequest.prototype.toApiJson = /**
995
- * @return {?}
996
- */
997
- function () {
998
- /** @type {?} */
999
- var toReturn = {};
1000
- if (typeof this.brandId !== 'undefined') {
1001
- toReturn['brandId'] = this.brandId;
1002
- }
1003
- if (typeof this.text !== 'undefined') {
1004
- toReturn['text'] = this.text;
1005
- }
1006
- if (typeof this.media !== 'undefined') {
1007
- toReturn['media'] = this.media;
1008
- }
1009
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1010
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? (( /** @type {?} */(this.scheduledDate))).toApiJson() : this.scheduledDate;
1011
- }
1012
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1013
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
1014
- }
1015
- if (typeof this.gifs !== 'undefined') {
1016
- toReturn['gifs'] = this.gifs;
1017
- }
1018
- if (typeof this.videos !== 'undefined') {
1019
- toReturn['videos'] = this.videos;
1020
- }
1021
- return toReturn;
1022
- };
1023
- return CreateMultilocationPostRequest;
1024
- }());
1025
- var CreateMultilocationPostResponse = /** @class */ (function () {
1026
- function CreateMultilocationPostResponse(kwargs) {
1027
- if (!kwargs) {
1028
- return;
1029
- }
1030
- Object.assign(this, kwargs);
1031
- }
1032
- /**
1033
- * @param {?} proto
1034
- * @return {?}
1035
- */
1036
- CreateMultilocationPostResponse.fromProto = /**
1037
- * @param {?} proto
1038
- * @return {?}
1039
- */
1040
- function (proto) {
1041
- /** @type {?} */
1042
- var m = new CreateMultilocationPostResponse();
1043
- m = Object.assign(m, proto);
1044
- if (proto.post) {
1045
- m.post = MultilocationPost.fromProto(proto.post);
1046
- }
1047
- if (proto.errors) {
1048
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1049
- }
1050
- return m;
1051
- };
1052
- /**
1053
- * @return {?}
1054
- */
1055
- CreateMultilocationPostResponse.prototype.toApiJson = /**
1056
- * @return {?}
1057
- */
1058
- function () {
1059
- /** @type {?} */
1060
- var toReturn = {};
1061
- if (typeof this.post !== 'undefined' && this.post !== null) {
1062
- toReturn['post'] = 'toApiJson' in this.post ? (( /** @type {?} */(this.post))).toApiJson() : this.post;
1063
- }
1064
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1065
- toReturn['errors'] = 'toApiJson' in this.errors ? (( /** @type {?} */(this.errors))).toApiJson() : this.errors;
1066
- }
1067
- return toReturn;
1068
- };
1069
- return CreateMultilocationPostResponse;
1070
- }());
1071
- var CreatePostTemplateRequest = /** @class */ (function () {
1072
- function CreatePostTemplateRequest(kwargs) {
1073
- if (!kwargs) {
1074
- return;
1075
- }
1076
- Object.assign(this, kwargs);
1077
- }
1078
- /**
1079
- * @param {?} proto
1080
- * @return {?}
1081
- */
1082
- CreatePostTemplateRequest.fromProto = /**
1083
- * @param {?} proto
1084
- * @return {?}
1085
- */
1086
- function (proto) {
1087
- /** @type {?} */
1088
- var m = new CreatePostTemplateRequest();
1089
- m = Object.assign(m, proto);
1090
- if (proto.postDateTime) {
1091
- m.postDateTime = new Date(proto.postDateTime);
1092
- }
1093
- return m;
1094
- };
1095
- /**
1096
- * @return {?}
1097
- */
1098
- CreatePostTemplateRequest.prototype.toApiJson = /**
1099
- * @return {?}
1100
- */
1101
- function () {
1102
- /** @type {?} */
1103
- var toReturn = {};
1104
- if (typeof this.accountGroupId !== 'undefined') {
1105
- toReturn['accountGroupId'] = this.accountGroupId;
1106
- }
1107
- if (typeof this.title !== 'undefined') {
1108
- toReturn['title'] = this.title;
1109
- }
1110
- if (typeof this.postText !== 'undefined') {
1111
- toReturn['postText'] = this.postText;
1112
- }
1113
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
1114
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
1115
- }
1116
- if (typeof this.gmbPostCustomization !== 'undefined') {
1117
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
1118
- }
1119
- if (typeof this.imageUrl !== 'undefined') {
1120
- toReturn['imageUrl'] = this.imageUrl;
1121
- }
1122
- if (typeof this.imagePath !== 'undefined') {
1123
- toReturn['imagePath'] = this.imagePath;
1124
- }
1125
- if (typeof this.imageSize !== 'undefined') {
1126
- toReturn['imageSize'] = this.imageSize;
1127
- }
1128
- if (typeof this.previews !== 'undefined') {
1129
- toReturn['previews'] = this.previews;
1130
- }
1131
- if (typeof this.options !== 'undefined') {
1132
- toReturn['options'] = this.options;
1133
- }
1134
- if (typeof this.videoUrl !== 'undefined') {
1135
- toReturn['videoUrl'] = this.videoUrl;
1136
- }
1137
- return toReturn;
1138
- };
1139
- return CreatePostTemplateRequest;
1140
- }());
1141
- var CreatePostTemplateResponse = /** @class */ (function () {
1142
- function CreatePostTemplateResponse(kwargs) {
1143
- if (!kwargs) {
1144
- return;
1145
- }
1146
- Object.assign(this, kwargs);
1147
- }
1148
- /**
1149
- * @param {?} proto
1150
- * @return {?}
1151
- */
1152
- CreatePostTemplateResponse.fromProto = /**
1153
- * @param {?} proto
1154
- * @return {?}
1155
- */
1156
- function (proto) {
1157
- /** @type {?} */
1158
- var m = new CreatePostTemplateResponse();
1159
- m = Object.assign(m, proto);
1160
- return m;
1161
- };
1162
- /**
1163
- * @return {?}
1164
- */
1165
- CreatePostTemplateResponse.prototype.toApiJson = /**
1166
- * @return {?}
1167
- */
1168
- function () {
1169
- /** @type {?} */
1170
- var toReturn = {};
1171
- if (typeof this.templateId !== 'undefined') {
1172
- toReturn['templateId'] = this.templateId;
1173
- }
1174
- return toReturn;
1175
- };
1176
- return CreatePostTemplateResponse;
1177
- }());
1178
- var DateRangeFilter = /** @class */ (function () {
1179
- function DateRangeFilter(kwargs) {
1180
- if (!kwargs) {
1181
- return;
1182
- }
1183
- Object.assign(this, kwargs);
1184
- }
1185
- /**
1186
- * @param {?} proto
1187
- * @return {?}
1188
- */
1189
- DateRangeFilter.fromProto = /**
1190
- * @param {?} proto
1191
- * @return {?}
1192
- */
1193
- function (proto) {
1194
- /** @type {?} */
1195
- var m = new DateRangeFilter();
1196
- m = Object.assign(m, proto);
1197
- if (proto.beginRange) {
1198
- m.beginRange = new Date(proto.beginRange);
1199
- }
1200
- if (proto.endRange) {
1201
- m.endRange = new Date(proto.endRange);
1202
- }
1203
- return m;
1204
- };
1205
- /**
1206
- * @return {?}
1207
- */
1208
- DateRangeFilter.prototype.toApiJson = /**
1209
- * @return {?}
1210
- */
1211
- function () {
1212
- /** @type {?} */
1213
- var toReturn = {};
1214
- if (typeof this.beginRange !== 'undefined' && this.beginRange !== null) {
1215
- toReturn['beginRange'] = 'toApiJson' in this.beginRange ? (( /** @type {?} */(this.beginRange))).toApiJson() : this.beginRange;
1216
- }
1217
- if (typeof this.endRange !== 'undefined' && this.endRange !== null) {
1218
- toReturn['endRange'] = 'toApiJson' in this.endRange ? (( /** @type {?} */(this.endRange))).toApiJson() : this.endRange;
1219
- }
1220
- return toReturn;
1221
- };
1222
- return DateRangeFilter;
1223
- }());
1224
- var DeleteMultilocationPostRequest = /** @class */ (function () {
1225
- function DeleteMultilocationPostRequest(kwargs) {
1226
- if (!kwargs) {
1227
- return;
1228
- }
1229
- Object.assign(this, kwargs);
1230
- }
1231
- /**
1232
- * @param {?} proto
1233
- * @return {?}
1234
- */
1235
- DeleteMultilocationPostRequest.fromProto = /**
1236
- * @param {?} proto
1237
- * @return {?}
1238
- */
1239
- function (proto) {
1240
- /** @type {?} */
1241
- var m = new DeleteMultilocationPostRequest();
1242
- m = Object.assign(m, proto);
1243
- return m;
1244
- };
1245
- /**
1246
- * @return {?}
1247
- */
1248
- DeleteMultilocationPostRequest.prototype.toApiJson = /**
1249
- * @return {?}
1250
- */
1251
- function () {
1252
- /** @type {?} */
1253
- var toReturn = {};
1254
- if (typeof this.brandId !== 'undefined') {
1255
- toReturn['brandId'] = this.brandId;
1256
- }
1257
- if (typeof this.multilocationId !== 'undefined') {
1258
- toReturn['multilocationId'] = this.multilocationId;
1259
- }
1260
- return toReturn;
1261
- };
1262
- return DeleteMultilocationPostRequest;
1263
- }());
1264
- var DeletePostTemplateRequest = /** @class */ (function () {
1265
- function DeletePostTemplateRequest(kwargs) {
1266
- if (!kwargs) {
1267
- return;
1268
- }
1269
- Object.assign(this, kwargs);
1270
- }
1271
- /**
1272
- * @param {?} proto
1273
- * @return {?}
1274
- */
1275
- DeletePostTemplateRequest.fromProto = /**
1276
- * @param {?} proto
1277
- * @return {?}
1278
- */
1279
- function (proto) {
1280
- /** @type {?} */
1281
- var m = new DeletePostTemplateRequest();
1282
- m = Object.assign(m, proto);
1283
- return m;
1284
- };
1285
- /**
1286
- * @return {?}
1287
- */
1288
- DeletePostTemplateRequest.prototype.toApiJson = /**
1289
- * @return {?}
1290
- */
1291
- function () {
1292
- /** @type {?} */
1293
- var toReturn = {};
1294
- if (typeof this.accountGroupId !== 'undefined') {
1295
- toReturn['accountGroupId'] = this.accountGroupId;
1296
- }
1297
- if (typeof this.templateId !== 'undefined') {
1298
- toReturn['templateId'] = this.templateId;
1299
- }
1300
- return toReturn;
1301
- };
1302
- return DeletePostTemplateRequest;
1303
- }());
1304
- var DeleteSocialPostRequest = /** @class */ (function () {
1305
- function DeleteSocialPostRequest(kwargs) {
1306
- if (!kwargs) {
1307
- return;
1308
- }
1309
- Object.assign(this, kwargs);
1310
- }
1311
- /**
1312
- * @param {?} proto
1313
- * @return {?}
1314
- */
1315
- DeleteSocialPostRequest.fromProto = /**
1316
- * @param {?} proto
1317
- * @return {?}
1318
- */
1319
- function (proto) {
1320
- /** @type {?} */
1321
- var m = new DeleteSocialPostRequest();
1322
- m = Object.assign(m, proto);
1323
- return m;
1324
- };
1325
- /**
1326
- * @return {?}
1327
- */
1328
- DeleteSocialPostRequest.prototype.toApiJson = /**
1329
- * @return {?}
1330
- */
1331
- function () {
1332
- /** @type {?} */
1333
- var toReturn = {};
1334
- if (typeof this.businessId !== 'undefined') {
1335
- toReturn['businessId'] = this.businessId;
1336
- }
1337
- if (typeof this.socialPostId !== 'undefined') {
1338
- toReturn['socialPostId'] = this.socialPostId;
1339
- }
1340
- return toReturn;
1341
- };
1342
- return DeleteSocialPostRequest;
1343
- }());
1344
- var EditMultilocationPostRequest = /** @class */ (function () {
1345
- function EditMultilocationPostRequest(kwargs) {
1346
- if (!kwargs) {
1347
- return;
1348
- }
1349
- Object.assign(this, kwargs);
1350
- }
1351
- /**
1352
- * @param {?} proto
1353
- * @return {?}
1354
- */
1355
- EditMultilocationPostRequest.fromProto = /**
1356
- * @param {?} proto
1357
- * @return {?}
1358
- */
1359
- function (proto) {
1360
- /** @type {?} */
1361
- var m = new EditMultilocationPostRequest();
1362
- m = Object.assign(m, proto);
1363
- if (proto.scheduledDate) {
1364
- m.scheduledDate = new Date(proto.scheduledDate);
1365
- }
1366
- if (proto.fieldMask) {
1367
- m.fieldMask = FieldMask.fromProto(proto.fieldMask);
1368
- }
1369
- if (proto.locations) {
1370
- m.locations = proto.locations.map(Location.fromProto);
1371
- }
1372
- return m;
1373
- };
1374
- /**
1375
- * @return {?}
1376
- */
1377
- EditMultilocationPostRequest.prototype.toApiJson = /**
1378
- * @return {?}
1379
- */
1380
- function () {
1381
- /** @type {?} */
1382
- var toReturn = {};
1383
- if (typeof this.brandId !== 'undefined') {
1384
- toReturn['brandId'] = this.brandId;
1385
- }
1386
- if (typeof this.multilocationId !== 'undefined') {
1387
- toReturn['multilocationId'] = this.multilocationId;
1388
- }
1389
- if (typeof this.text !== 'undefined') {
1390
- toReturn['text'] = this.text;
1391
- }
1392
- if (typeof this.media !== 'undefined') {
1393
- toReturn['media'] = this.media;
1394
- }
1395
- if (typeof this.scheduledDate !== 'undefined' && this.scheduledDate !== null) {
1396
- toReturn['scheduledDate'] = 'toApiJson' in this.scheduledDate ? (( /** @type {?} */(this.scheduledDate))).toApiJson() : this.scheduledDate;
1397
- }
1398
- if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
1399
- toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? (( /** @type {?} */(this.fieldMask))).toApiJson() : this.fieldMask;
1400
- }
1401
- if (typeof this.gifs !== 'undefined') {
1402
- toReturn['gifs'] = this.gifs;
1403
- }
1404
- if (typeof this.videos !== 'undefined') {
1405
- toReturn['videos'] = this.videos;
1406
- }
1407
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
1408
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
1409
- }
1410
- return toReturn;
1411
- };
1412
- return EditMultilocationPostRequest;
1413
- }());
1414
- var EditMultilocationPostResponse = /** @class */ (function () {
1415
- function EditMultilocationPostResponse(kwargs) {
1416
- if (!kwargs) {
1417
- return;
1418
- }
1419
- Object.assign(this, kwargs);
1420
- }
1421
- /**
1422
- * @param {?} proto
1423
- * @return {?}
1424
- */
1425
- EditMultilocationPostResponse.fromProto = /**
1426
- * @param {?} proto
1427
- * @return {?}
1428
- */
1429
- function (proto) {
1430
- /** @type {?} */
1431
- var m = new EditMultilocationPostResponse();
1432
- m = Object.assign(m, proto);
1433
- if (proto.post) {
1434
- m.post = MultilocationPost.fromProto(proto.post);
1435
- }
1436
- if (proto.errors) {
1437
- m.errors = proto.errors.map(MultilocationPostError.fromProto);
1438
- }
1439
- return m;
1440
- };
1441
- /**
1442
- * @return {?}
1443
- */
1444
- EditMultilocationPostResponse.prototype.toApiJson = /**
1445
- * @return {?}
1446
- */
1447
- function () {
1448
- /** @type {?} */
1449
- var toReturn = {};
1450
- if (typeof this.post !== 'undefined' && this.post !== null) {
1451
- toReturn['post'] = 'toApiJson' in this.post ? (( /** @type {?} */(this.post))).toApiJson() : this.post;
1452
- }
1453
- if (typeof this.errors !== 'undefined' && this.errors !== null) {
1454
- toReturn['errors'] = 'toApiJson' in this.errors ? (( /** @type {?} */(this.errors))).toApiJson() : this.errors;
1455
- }
1456
- return toReturn;
1457
- };
1458
- return EditMultilocationPostResponse;
1459
- }());
1460
- var PartnerListScheduledSocialPostsRequestFilters = /** @class */ (function () {
1461
- function PartnerListScheduledSocialPostsRequestFilters(kwargs) {
1462
- if (!kwargs) {
1463
- return;
1464
- }
1465
- Object.assign(this, kwargs);
1466
- }
1467
- /**
1468
- * @param {?} proto
1469
- * @return {?}
1470
- */
1471
- PartnerListScheduledSocialPostsRequestFilters.fromProto = /**
1472
- * @param {?} proto
1473
- * @return {?}
1474
- */
1475
- function (proto) {
1476
- /** @type {?} */
1477
- var m = new PartnerListScheduledSocialPostsRequestFilters();
1478
- m = Object.assign(m, proto);
1479
- if (proto.dateRange) {
1480
- m.dateRange = DateRangeFilter.fromProto(proto.dateRange);
1481
- }
1482
- return m;
1483
- };
1484
- /**
1485
- * @return {?}
1486
- */
1487
- PartnerListScheduledSocialPostsRequestFilters.prototype.toApiJson = /**
1488
- * @return {?}
1489
- */
1490
- function () {
1491
- /** @type {?} */
1492
- var toReturn = {};
1493
- if (typeof this.dateRange !== 'undefined' && this.dateRange !== null) {
1494
- toReturn['dateRange'] = 'toApiJson' in this.dateRange ? (( /** @type {?} */(this.dateRange))).toApiJson() : this.dateRange;
1495
- }
1496
- if (typeof this.partnerId !== 'undefined') {
1497
- toReturn['partnerId'] = this.partnerId;
1498
- }
1499
- return toReturn;
1500
- };
1501
- return PartnerListScheduledSocialPostsRequestFilters;
1502
- }());
1503
- var GetMultiSocialPostStatsRequest = /** @class */ (function () {
1504
- function GetMultiSocialPostStatsRequest(kwargs) {
1505
- if (!kwargs) {
1506
- return;
1507
- }
1508
- Object.assign(this, kwargs);
1509
- }
1510
- /**
1511
- * @param {?} proto
1512
- * @return {?}
1513
- */
1514
- GetMultiSocialPostStatsRequest.fromProto = /**
1515
- * @param {?} proto
1516
- * @return {?}
1517
- */
1518
- function (proto) {
1519
- /** @type {?} */
1520
- var m = new GetMultiSocialPostStatsRequest();
1521
- m = Object.assign(m, proto);
1522
- return m;
1523
- };
1524
- /**
1525
- * @return {?}
1526
- */
1527
- GetMultiSocialPostStatsRequest.prototype.toApiJson = /**
1528
- * @return {?}
1529
- */
1530
- function () {
1531
- /** @type {?} */
1532
- var toReturn = {};
1533
- if (typeof this.internalPostIds !== 'undefined') {
1534
- toReturn['internalPostIds'] = this.internalPostIds;
1535
- }
1536
- if (typeof this.businessId !== 'undefined') {
1537
- toReturn['businessId'] = this.businessId;
1538
- }
1539
- if (typeof this.partnerId !== 'undefined') {
1540
- toReturn['partnerId'] = this.partnerId;
1541
- }
1542
- return toReturn;
1543
- };
1544
- return GetMultiSocialPostStatsRequest;
1545
- }());
1546
- var GetMultiSocialPostStatsResponse = /** @class */ (function () {
1547
- function GetMultiSocialPostStatsResponse(kwargs) {
1548
- if (!kwargs) {
1549
- return;
1550
- }
1551
- Object.assign(this, kwargs);
1552
- }
1553
- /**
1554
- * @param {?} proto
1555
- * @return {?}
1556
- */
1557
- GetMultiSocialPostStatsResponse.fromProto = /**
1558
- * @param {?} proto
1559
- * @return {?}
1560
- */
1561
- function (proto) {
1562
- /** @type {?} */
1563
- var m = new GetMultiSocialPostStatsResponse();
1564
- m = Object.assign(m, proto);
1565
- if (proto.socialPostStats) {
1566
- m.socialPostStats = proto.socialPostStats.map(SocialPostStats.fromProto);
1567
- }
1568
- return m;
1569
- };
1570
- /**
1571
- * @return {?}
1572
- */
1573
- GetMultiSocialPostStatsResponse.prototype.toApiJson = /**
1574
- * @return {?}
1575
- */
1576
- function () {
1577
- /** @type {?} */
1578
- var toReturn = {};
1579
- if (typeof this.socialPostStats !== 'undefined' && this.socialPostStats !== null) {
1580
- toReturn['socialPostStats'] = 'toApiJson' in this.socialPostStats ? (( /** @type {?} */(this.socialPostStats))).toApiJson() : this.socialPostStats;
1581
- }
1582
- return toReturn;
1583
- };
1584
- return GetMultiSocialPostStatsResponse;
1585
- }());
1586
- var GetMultiSocialPostsRequest = /** @class */ (function () {
1587
- function GetMultiSocialPostsRequest(kwargs) {
1588
- if (!kwargs) {
1589
- return;
1590
- }
1591
- Object.assign(this, kwargs);
1592
- }
1593
- /**
1594
- * @param {?} proto
1595
- * @return {?}
1596
- */
1597
- GetMultiSocialPostsRequest.fromProto = /**
1598
- * @param {?} proto
1599
- * @return {?}
1600
- */
1601
- function (proto) {
1602
- /** @type {?} */
1603
- var m = new GetMultiSocialPostsRequest();
1604
- m = Object.assign(m, proto);
1605
- return m;
1606
- };
1607
- /**
1608
- * @return {?}
1609
- */
1610
- GetMultiSocialPostsRequest.prototype.toApiJson = /**
1611
- * @return {?}
1612
- */
1613
- function () {
1614
- /** @type {?} */
1615
- var toReturn = {};
1616
- if (typeof this.businessId !== 'undefined') {
1617
- toReturn['businessId'] = this.businessId;
1618
- }
1619
- if (typeof this.internalPostIds !== 'undefined') {
1620
- toReturn['internalPostIds'] = this.internalPostIds;
1621
- }
1622
- return toReturn;
1623
- };
1624
- return GetMultiSocialPostsRequest;
1625
- }());
1626
- var GetMultiSocialPostsResponse = /** @class */ (function () {
1627
- function GetMultiSocialPostsResponse(kwargs) {
1628
- if (!kwargs) {
1629
- return;
1630
- }
1631
- Object.assign(this, kwargs);
1632
- }
1633
- /**
1634
- * @param {?} proto
1635
- * @return {?}
1636
- */
1637
- GetMultiSocialPostsResponse.fromProto = /**
1638
- * @param {?} proto
1639
- * @return {?}
1640
- */
1641
- function (proto) {
1642
- /** @type {?} */
1643
- var m = new GetMultiSocialPostsResponse();
1644
- m = Object.assign(m, proto);
1645
- if (proto.socialPosts) {
1646
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
1647
- }
1648
- return m;
1649
- };
1650
- /**
1651
- * @return {?}
1652
- */
1653
- GetMultiSocialPostsResponse.prototype.toApiJson = /**
1654
- * @return {?}
1655
- */
1656
- function () {
1657
- /** @type {?} */
1658
- var toReturn = {};
1659
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
1660
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
1661
- }
1662
- return toReturn;
1663
- };
1664
- return GetMultiSocialPostsResponse;
1665
- }());
1666
- var GetMultilocationPostRequest = /** @class */ (function () {
1667
- function GetMultilocationPostRequest(kwargs) {
1668
- if (!kwargs) {
1669
- return;
1670
- }
1671
- Object.assign(this, kwargs);
1672
- }
1673
- /**
1674
- * @param {?} proto
1675
- * @return {?}
1676
- */
1677
- GetMultilocationPostRequest.fromProto = /**
1678
- * @param {?} proto
1679
- * @return {?}
1680
- */
1681
- function (proto) {
1682
- /** @type {?} */
1683
- var m = new GetMultilocationPostRequest();
1684
- m = Object.assign(m, proto);
1685
- return m;
1686
- };
1687
- /**
1688
- * @return {?}
1689
- */
1690
- GetMultilocationPostRequest.prototype.toApiJson = /**
1691
- * @return {?}
1692
- */
1693
- function () {
1694
- /** @type {?} */
1695
- var toReturn = {};
1696
- if (typeof this.brandId !== 'undefined') {
1697
- toReturn['brandId'] = this.brandId;
1698
- }
1699
- if (typeof this.multilocationId !== 'undefined') {
1700
- toReturn['multilocationId'] = this.multilocationId;
1701
- }
1702
- return toReturn;
1703
- };
1704
- return GetMultilocationPostRequest;
1705
- }());
1706
- var GetMultilocationPostResponse = /** @class */ (function () {
1707
- function GetMultilocationPostResponse(kwargs) {
1708
- if (!kwargs) {
1709
- return;
1710
- }
1711
- Object.assign(this, kwargs);
1712
- }
1713
- /**
1714
- * @param {?} proto
1715
- * @return {?}
1716
- */
1717
- GetMultilocationPostResponse.fromProto = /**
1718
- * @param {?} proto
1719
- * @return {?}
1720
- */
1721
- function (proto) {
1722
- /** @type {?} */
1723
- var m = new GetMultilocationPostResponse();
1724
- m = Object.assign(m, proto);
1725
- if (proto.multilocationPost) {
1726
- m.multilocationPost = MultilocationPost.fromProto(proto.multilocationPost);
1727
- }
1728
- return m;
1729
- };
1730
- /**
1731
- * @return {?}
1732
- */
1733
- GetMultilocationPostResponse.prototype.toApiJson = /**
1734
- * @return {?}
1735
- */
1736
- function () {
1737
- /** @type {?} */
1738
- var toReturn = {};
1739
- if (typeof this.multilocationPost !== 'undefined' && this.multilocationPost !== null) {
1740
- toReturn['multilocationPost'] = 'toApiJson' in this.multilocationPost ? (( /** @type {?} */(this.multilocationPost))).toApiJson() : this.multilocationPost;
1741
- }
1742
- return toReturn;
1743
- };
1744
- return GetMultilocationPostResponse;
1745
- }());
1746
- var GetPostTemplateRequest = /** @class */ (function () {
1747
- function GetPostTemplateRequest(kwargs) {
1748
- if (!kwargs) {
1749
- return;
1750
- }
1751
- Object.assign(this, kwargs);
1752
- }
1753
- /**
1754
- * @param {?} proto
1755
- * @return {?}
1756
- */
1757
- GetPostTemplateRequest.fromProto = /**
1758
- * @param {?} proto
1759
- * @return {?}
1760
- */
1761
- function (proto) {
1762
- /** @type {?} */
1763
- var m = new GetPostTemplateRequest();
1764
- m = Object.assign(m, proto);
1765
- return m;
1766
- };
1767
- /**
1768
- * @return {?}
1769
- */
1770
- GetPostTemplateRequest.prototype.toApiJson = /**
1771
- * @return {?}
1772
- */
1773
- function () {
1774
- /** @type {?} */
1775
- var toReturn = {};
1776
- if (typeof this.accountGroupId !== 'undefined') {
1777
- toReturn['accountGroupId'] = this.accountGroupId;
1778
- }
1779
- if (typeof this.templateId !== 'undefined') {
1780
- toReturn['templateId'] = this.templateId;
1781
- }
1782
- return toReturn;
1783
- };
1784
- return GetPostTemplateRequest;
1785
- }());
1786
- var GetPostTemplateResponse = /** @class */ (function () {
1787
- function GetPostTemplateResponse(kwargs) {
1788
- if (!kwargs) {
1789
- return;
1790
- }
1791
- Object.assign(this, kwargs);
1792
- }
1793
- /**
1794
- * @param {?} proto
1795
- * @return {?}
1796
- */
1797
- GetPostTemplateResponse.fromProto = /**
1798
- * @param {?} proto
1799
- * @return {?}
1800
- */
1801
- function (proto) {
1802
- /** @type {?} */
1803
- var m = new GetPostTemplateResponse();
1804
- m = Object.assign(m, proto);
1805
- if (proto.postTemplate) {
1806
- m.postTemplate = PostTemplate.fromProto(proto.postTemplate);
1807
- }
1808
- return m;
1809
- };
1810
- /**
1811
- * @return {?}
1812
- */
1813
- GetPostTemplateResponse.prototype.toApiJson = /**
1814
- * @return {?}
1815
- */
1816
- function () {
1817
- /** @type {?} */
1818
- var toReturn = {};
1819
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
1820
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? (( /** @type {?} */(this.postTemplate))).toApiJson() : this.postTemplate;
1821
- }
1822
- return toReturn;
1823
- };
1824
- return GetPostTemplateResponse;
1825
- }());
1826
- var GetScheduledPostCountRequest = /** @class */ (function () {
1827
- function GetScheduledPostCountRequest(kwargs) {
1828
- if (!kwargs) {
1829
- return;
1830
- }
1831
- Object.assign(this, kwargs);
1832
- }
1833
- /**
1834
- * @param {?} proto
1835
- * @return {?}
1836
- */
1837
- GetScheduledPostCountRequest.fromProto = /**
1838
- * @param {?} proto
1839
- * @return {?}
1840
- */
1841
- function (proto) {
1842
- /** @type {?} */
1843
- var m = new GetScheduledPostCountRequest();
1844
- m = Object.assign(m, proto);
1845
- return m;
1846
- };
1847
- /**
1848
- * @return {?}
1849
- */
1850
- GetScheduledPostCountRequest.prototype.toApiJson = /**
1851
- * @return {?}
1852
- */
1853
- function () {
1854
- /** @type {?} */
1855
- var toReturn = {};
1856
- if (typeof this.partnerId !== 'undefined') {
1857
- toReturn['partnerId'] = this.partnerId;
1858
- }
1859
- if (typeof this.businessId !== 'undefined') {
1860
- toReturn['businessId'] = this.businessId;
1861
- }
1862
- if (typeof this.socialServiceIds !== 'undefined') {
1863
- toReturn['socialServiceIds'] = this.socialServiceIds;
1864
- }
1865
- return toReturn;
1866
- };
1867
- return GetScheduledPostCountRequest;
1868
- }());
1869
- var GetScheduledPostCountResponse = /** @class */ (function () {
1870
- function GetScheduledPostCountResponse(kwargs) {
1871
- if (!kwargs) {
1872
- return;
1873
- }
1874
- Object.assign(this, kwargs);
1875
- }
1876
- /**
1877
- * @param {?} proto
1878
- * @return {?}
1879
- */
1880
- GetScheduledPostCountResponse.fromProto = /**
1881
- * @param {?} proto
1882
- * @return {?}
1883
- */
1884
- function (proto) {
1885
- /** @type {?} */
1886
- var m = new GetScheduledPostCountResponse();
1887
- m = Object.assign(m, proto);
1888
- if (proto.count) {
1889
- m.count = parseInt(proto.count, 10);
1890
- }
1891
- return m;
1892
- };
1893
- /**
1894
- * @return {?}
1895
- */
1896
- GetScheduledPostCountResponse.prototype.toApiJson = /**
1897
- * @return {?}
1898
- */
1899
- function () {
1900
- /** @type {?} */
1901
- var toReturn = {};
1902
- if (typeof this.count !== 'undefined') {
1903
- toReturn['count'] = this.count;
1904
- }
1905
- return toReturn;
1906
- };
1907
- return GetScheduledPostCountResponse;
1908
- }());
1909
- var ListMultilocationPostsForBrandRequest = /** @class */ (function () {
1910
- function ListMultilocationPostsForBrandRequest(kwargs) {
1911
- if (!kwargs) {
1912
- return;
1913
- }
1914
- Object.assign(this, kwargs);
1915
- }
1916
- /**
1917
- * @param {?} proto
1918
- * @return {?}
1919
- */
1920
- ListMultilocationPostsForBrandRequest.fromProto = /**
1921
- * @param {?} proto
1922
- * @return {?}
1923
- */
1924
- function (proto) {
1925
- /** @type {?} */
1926
- var m = new ListMultilocationPostsForBrandRequest();
1927
- m = Object.assign(m, proto);
1928
- if (proto.startDate) {
1929
- m.startDate = new Date(proto.startDate);
1930
- }
1931
- if (proto.endDate) {
1932
- m.endDate = new Date(proto.endDate);
1933
- }
1934
- if (proto.pageSize) {
1935
- m.pageSize = parseInt(proto.pageSize, 10);
1936
- }
1937
- return m;
1938
- };
1939
- /**
1940
- * @return {?}
1941
- */
1942
- ListMultilocationPostsForBrandRequest.prototype.toApiJson = /**
1943
- * @return {?}
1944
- */
1945
- function () {
1946
- /** @type {?} */
1947
- var toReturn = {};
1948
- if (typeof this.brandId !== 'undefined') {
1949
- toReturn['brandId'] = this.brandId;
1950
- }
1951
- if (typeof this.startDate !== 'undefined' && this.startDate !== null) {
1952
- toReturn['startDate'] = 'toApiJson' in this.startDate ? (( /** @type {?} */(this.startDate))).toApiJson() : this.startDate;
1953
- }
1954
- if (typeof this.endDate !== 'undefined' && this.endDate !== null) {
1955
- toReturn['endDate'] = 'toApiJson' in this.endDate ? (( /** @type {?} */(this.endDate))).toApiJson() : this.endDate;
1956
- }
1957
- if (typeof this.cursor !== 'undefined') {
1958
- toReturn['cursor'] = this.cursor;
1959
- }
1960
- if (typeof this.pageSize !== 'undefined') {
1961
- toReturn['pageSize'] = this.pageSize;
1962
- }
1963
- return toReturn;
1964
- };
1965
- return ListMultilocationPostsForBrandRequest;
1966
- }());
1967
- var ListMultilocationPostsForBrandResponse = /** @class */ (function () {
1968
- function ListMultilocationPostsForBrandResponse(kwargs) {
1969
- if (!kwargs) {
1970
- return;
1971
- }
1972
- Object.assign(this, kwargs);
1973
- }
1974
- /**
1975
- * @param {?} proto
1976
- * @return {?}
1977
- */
1978
- ListMultilocationPostsForBrandResponse.fromProto = /**
1979
- * @param {?} proto
1980
- * @return {?}
1981
- */
1982
- function (proto) {
1983
- /** @type {?} */
1984
- var m = new ListMultilocationPostsForBrandResponse();
1985
- m = Object.assign(m, proto);
1986
- if (proto.multilocationPosts) {
1987
- m.multilocationPosts = proto.multilocationPosts.map(MultilocationPost.fromProto);
1988
- }
1989
- if (proto.failedSocialPosts) {
1990
- m.failedSocialPosts = proto.failedSocialPosts.map(SocialPost.fromProto);
1991
- }
1992
- return m;
1993
- };
1994
- /**
1995
- * @return {?}
1996
- */
1997
- ListMultilocationPostsForBrandResponse.prototype.toApiJson = /**
1998
- * @return {?}
1999
- */
2000
- function () {
2001
- /** @type {?} */
2002
- var toReturn = {};
2003
- if (typeof this.multilocationPosts !== 'undefined' && this.multilocationPosts !== null) {
2004
- toReturn['multilocationPosts'] = 'toApiJson' in this.multilocationPosts ? (( /** @type {?} */(this.multilocationPosts))).toApiJson() : this.multilocationPosts;
2005
- }
2006
- if (typeof this.nextCursor !== 'undefined') {
2007
- toReturn['nextCursor'] = this.nextCursor;
2008
- }
2009
- if (typeof this.hasMore !== 'undefined') {
2010
- toReturn['hasMore'] = this.hasMore;
2011
- }
2012
- if (typeof this.failedSocialPosts !== 'undefined' && this.failedSocialPosts !== null) {
2013
- toReturn['failedSocialPosts'] = 'toApiJson' in this.failedSocialPosts ? (( /** @type {?} */(this.failedSocialPosts))).toApiJson() : this.failedSocialPosts;
2014
- }
2015
- return toReturn;
2016
- };
2017
- return ListMultilocationPostsForBrandResponse;
2018
- }());
2019
- var ListPostTemplatesRequest = /** @class */ (function () {
2020
- function ListPostTemplatesRequest(kwargs) {
2021
- if (!kwargs) {
2022
- return;
2023
- }
2024
- Object.assign(this, kwargs);
2025
- }
2026
- /**
2027
- * @param {?} proto
2028
- * @return {?}
2029
- */
2030
- ListPostTemplatesRequest.fromProto = /**
2031
- * @param {?} proto
2032
- * @return {?}
2033
- */
2034
- function (proto) {
2035
- /** @type {?} */
2036
- var m = new ListPostTemplatesRequest();
2037
- m = Object.assign(m, proto);
2038
- if (proto.pageSize) {
2039
- m.pageSize = parseInt(proto.pageSize, 10);
2040
- }
2041
- return m;
2042
- };
2043
- /**
2044
- * @return {?}
2045
- */
2046
- ListPostTemplatesRequest.prototype.toApiJson = /**
2047
- * @return {?}
2048
- */
2049
- function () {
2050
- /** @type {?} */
2051
- var toReturn = {};
2052
- if (typeof this.accountGroupId !== 'undefined') {
2053
- toReturn['accountGroupId'] = this.accountGroupId;
2054
- }
2055
- if (typeof this.cursor !== 'undefined') {
2056
- toReturn['cursor'] = this.cursor;
2057
- }
2058
- if (typeof this.pageSize !== 'undefined') {
2059
- toReturn['pageSize'] = this.pageSize;
2060
- }
2061
- return toReturn;
2062
- };
2063
- return ListPostTemplatesRequest;
2064
- }());
2065
- var ListPostTemplatesResponse = /** @class */ (function () {
2066
- function ListPostTemplatesResponse(kwargs) {
2067
- if (!kwargs) {
2068
- return;
2069
- }
2070
- Object.assign(this, kwargs);
2071
- }
2072
- /**
2073
- * @param {?} proto
2074
- * @return {?}
2075
- */
2076
- ListPostTemplatesResponse.fromProto = /**
2077
- * @param {?} proto
2078
- * @return {?}
2079
- */
2080
- function (proto) {
2081
- /** @type {?} */
2082
- var m = new ListPostTemplatesResponse();
2083
- m = Object.assign(m, proto);
2084
- if (proto.postTemplate) {
2085
- m.postTemplate = proto.postTemplate.map(PostTemplate.fromProto);
2086
- }
2087
- return m;
2088
- };
2089
- /**
2090
- * @return {?}
2091
- */
2092
- ListPostTemplatesResponse.prototype.toApiJson = /**
2093
- * @return {?}
2094
- */
2095
- function () {
2096
- /** @type {?} */
2097
- var toReturn = {};
2098
- if (typeof this.postTemplate !== 'undefined' && this.postTemplate !== null) {
2099
- toReturn['postTemplate'] = 'toApiJson' in this.postTemplate ? (( /** @type {?} */(this.postTemplate))).toApiJson() : this.postTemplate;
2100
- }
2101
- if (typeof this.nextCursor !== 'undefined') {
2102
- toReturn['nextCursor'] = this.nextCursor;
2103
- }
2104
- if (typeof this.hasMore !== 'undefined') {
2105
- toReturn['hasMore'] = this.hasMore;
2106
- }
2107
- return toReturn;
2108
- };
2109
- return ListPostTemplatesResponse;
2110
- }());
2111
- var ListSocialPostsRequest = /** @class */ (function () {
2112
- function ListSocialPostsRequest(kwargs) {
2113
- if (!kwargs) {
2114
- return;
2115
- }
2116
- Object.assign(this, kwargs);
2117
- }
2118
- /**
2119
- * @param {?} proto
2120
- * @return {?}
2121
- */
2122
- ListSocialPostsRequest.fromProto = /**
2123
- * @param {?} proto
2124
- * @return {?}
2125
- */
2126
- function (proto) {
2127
- /** @type {?} */
2128
- var m = new ListSocialPostsRequest();
2129
- m = Object.assign(m, proto);
2130
- if (proto.start) {
2131
- m.start = new Date(proto.start);
2132
- }
2133
- if (proto.end) {
2134
- m.end = new Date(proto.end);
2135
- }
2136
- if (proto.pageSize) {
2137
- m.pageSize = parseInt(proto.pageSize, 10);
2138
- }
2139
- return m;
2140
- };
2141
- /**
2142
- * @return {?}
2143
- */
2144
- ListSocialPostsRequest.prototype.toApiJson = /**
2145
- * @return {?}
2146
- */
2147
- function () {
2148
- /** @type {?} */
2149
- var toReturn = {};
2150
- if (typeof this.start !== 'undefined' && this.start !== null) {
2151
- toReturn['start'] = 'toApiJson' in this.start ? (( /** @type {?} */(this.start))).toApiJson() : this.start;
2152
- }
2153
- if (typeof this.end !== 'undefined' && this.end !== null) {
2154
- toReturn['end'] = 'toApiJson' in this.end ? (( /** @type {?} */(this.end))).toApiJson() : this.end;
2155
- }
2156
- if (typeof this.businessId !== 'undefined') {
2157
- toReturn['businessId'] = this.businessId;
2158
- }
2159
- if (typeof this.partnerId !== 'undefined') {
2160
- toReturn['partnerId'] = this.partnerId;
2161
- }
2162
- if (typeof this.cursor !== 'undefined') {
2163
- toReturn['cursor'] = this.cursor;
2164
- }
2165
- if (typeof this.socialServiceIds !== 'undefined') {
2166
- toReturn['socialServiceIds'] = this.socialServiceIds;
2167
- }
2168
- if (typeof this.tags !== 'undefined') {
2169
- toReturn['tags'] = this.tags;
2170
- }
2171
- if (typeof this.pageSize !== 'undefined') {
2172
- toReturn['pageSize'] = this.pageSize;
2173
- }
2174
- return toReturn;
2175
- };
2176
- return ListSocialPostsRequest;
2177
- }());
2178
- var ListSocialPostsResponse = /** @class */ (function () {
2179
- function ListSocialPostsResponse(kwargs) {
2180
- if (!kwargs) {
2181
- return;
2182
- }
2183
- Object.assign(this, kwargs);
2184
- }
2185
- /**
2186
- * @param {?} proto
2187
- * @return {?}
2188
- */
2189
- ListSocialPostsResponse.fromProto = /**
2190
- * @param {?} proto
2191
- * @return {?}
2192
- */
2193
- function (proto) {
2194
- /** @type {?} */
2195
- var m = new ListSocialPostsResponse();
2196
- m = Object.assign(m, proto);
2197
- if (proto.socialPosts) {
2198
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2199
- }
2200
- return m;
2201
- };
2202
- /**
2203
- * @return {?}
2204
- */
2205
- ListSocialPostsResponse.prototype.toApiJson = /**
2206
- * @return {?}
2207
- */
2208
- function () {
2209
- /** @type {?} */
2210
- var toReturn = {};
2211
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2212
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
2213
- }
2214
- if (typeof this.nextCursor !== 'undefined') {
2215
- toReturn['nextCursor'] = this.nextCursor;
2216
- }
2217
- if (typeof this.hasMore !== 'undefined') {
2218
- toReturn['hasMore'] = this.hasMore;
2219
- }
2220
- return toReturn;
2221
- };
2222
- return ListSocialPostsResponse;
2223
- }());
2224
- var PartnerListScheduledPostsResponse = /** @class */ (function () {
2225
- function PartnerListScheduledPostsResponse(kwargs) {
2226
- if (!kwargs) {
2227
- return;
2228
- }
2229
- Object.assign(this, kwargs);
2230
- }
2231
- /**
2232
- * @param {?} proto
2233
- * @return {?}
2234
- */
2235
- PartnerListScheduledPostsResponse.fromProto = /**
2236
- * @param {?} proto
2237
- * @return {?}
2238
- */
2239
- function (proto) {
2240
- /** @type {?} */
2241
- var m = new PartnerListScheduledPostsResponse();
2242
- m = Object.assign(m, proto);
2243
- if (proto.socialPosts) {
2244
- m.socialPosts = proto.socialPosts.map(SocialPost.fromProto);
2245
- }
2246
- return m;
2247
- };
2248
- /**
2249
- * @return {?}
2250
- */
2251
- PartnerListScheduledPostsResponse.prototype.toApiJson = /**
2252
- * @return {?}
2253
- */
2254
- function () {
2255
- /** @type {?} */
2256
- var toReturn = {};
2257
- if (typeof this.socialPosts !== 'undefined' && this.socialPosts !== null) {
2258
- toReturn['socialPosts'] = 'toApiJson' in this.socialPosts ? (( /** @type {?} */(this.socialPosts))).toApiJson() : this.socialPosts;
2259
- }
2260
- if (typeof this.nextCursor !== 'undefined') {
2261
- toReturn['nextCursor'] = this.nextCursor;
2262
- }
2263
- if (typeof this.hasMore !== 'undefined') {
2264
- toReturn['hasMore'] = this.hasMore;
2265
- }
2266
- return toReturn;
2267
- };
2268
- return PartnerListScheduledPostsResponse;
2269
- }());
2270
- var PartnerListScheduledSocialPostsRequest = /** @class */ (function () {
2271
- function PartnerListScheduledSocialPostsRequest(kwargs) {
2272
- if (!kwargs) {
2273
- return;
2274
- }
2275
- Object.assign(this, kwargs);
2276
- }
2277
- /**
2278
- * @param {?} proto
2279
- * @return {?}
2280
- */
2281
- PartnerListScheduledSocialPostsRequest.fromProto = /**
2282
- * @param {?} proto
2283
- * @return {?}
2284
- */
2285
- function (proto) {
2286
- /** @type {?} */
2287
- var m = new PartnerListScheduledSocialPostsRequest();
2288
- m = Object.assign(m, proto);
2289
- if (proto.filters) {
2290
- m.filters = PartnerListScheduledSocialPostsRequestFilters.fromProto(proto.filters);
2291
- }
2292
- if (proto.pageSize) {
2293
- m.pageSize = parseInt(proto.pageSize, 10);
2294
- }
2295
- return m;
2296
- };
2297
- /**
2298
- * @return {?}
2299
- */
2300
- PartnerListScheduledSocialPostsRequest.prototype.toApiJson = /**
2301
- * @return {?}
2302
- */
2303
- function () {
2304
- /** @type {?} */
2305
- var toReturn = {};
2306
- if (typeof this.cursor !== 'undefined') {
2307
- toReturn['cursor'] = this.cursor;
2308
- }
2309
- if (typeof this.filters !== 'undefined' && this.filters !== null) {
2310
- toReturn['filters'] = 'toApiJson' in this.filters ? (( /** @type {?} */(this.filters))).toApiJson() : this.filters;
2311
- }
2312
- if (typeof this.pageSize !== 'undefined') {
2313
- toReturn['pageSize'] = this.pageSize;
2314
- }
2315
- return toReturn;
2316
- };
2317
- return PartnerListScheduledSocialPostsRequest;
2318
- }());
2319
- var RemoveFromMultilocationPostRequest = /** @class */ (function () {
2320
- function RemoveFromMultilocationPostRequest(kwargs) {
2321
- if (!kwargs) {
2322
- return;
2323
- }
2324
- Object.assign(this, kwargs);
2325
- }
2326
- /**
2327
- * @param {?} proto
2328
- * @return {?}
2329
- */
2330
- RemoveFromMultilocationPostRequest.fromProto = /**
2331
- * @param {?} proto
2332
- * @return {?}
2333
- */
2334
- function (proto) {
2335
- /** @type {?} */
2336
- var m = new RemoveFromMultilocationPostRequest();
2337
- m = Object.assign(m, proto);
2338
- if (proto.reason) {
2339
- m.reason = enumStringToValue$5(RemoveReason, proto.reason);
2340
- }
2341
- if (proto.locations) {
2342
- m.locations = proto.locations.map(Location.fromProto);
2343
- }
2344
- return m;
2345
- };
2346
- /**
2347
- * @return {?}
2348
- */
2349
- RemoveFromMultilocationPostRequest.prototype.toApiJson = /**
2350
- * @return {?}
2351
- */
2352
- function () {
2353
- /** @type {?} */
2354
- var toReturn = {};
2355
- if (typeof this.reason !== 'undefined') {
2356
- toReturn['reason'] = this.reason;
2357
- }
2358
- if (typeof this.brandId !== 'undefined') {
2359
- toReturn['brandId'] = this.brandId;
2360
- }
2361
- if (typeof this.multilocationId !== 'undefined') {
2362
- toReturn['multilocationId'] = this.multilocationId;
2363
- }
2364
- if (typeof this.locations !== 'undefined' && this.locations !== null) {
2365
- toReturn['locations'] = 'toApiJson' in this.locations ? (( /** @type {?} */(this.locations))).toApiJson() : this.locations;
2366
- }
2367
- return toReturn;
2368
- };
2369
- return RemoveFromMultilocationPostRequest;
2370
- }());
2371
- var SchedulePostRequest = /** @class */ (function () {
2372
- function SchedulePostRequest(kwargs) {
2373
- if (!kwargs) {
2374
- return;
2375
- }
2376
- Object.assign(this, kwargs);
2377
- }
2378
- /**
2379
- * @param {?} proto
2380
- * @return {?}
2381
- */
2382
- SchedulePostRequest.fromProto = /**
2383
- * @param {?} proto
2384
- * @return {?}
2385
- */
2386
- function (proto) {
2387
- /** @type {?} */
2388
- var m = new SchedulePostRequest();
2389
- m = Object.assign(m, proto);
2390
- if (proto.socialPost) {
2391
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2392
- }
2393
- return m;
2394
- };
2395
- /**
2396
- * @return {?}
2397
- */
2398
- SchedulePostRequest.prototype.toApiJson = /**
2399
- * @return {?}
2400
- */
2401
- function () {
2402
- /** @type {?} */
2403
- var toReturn = {};
2404
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2405
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? (( /** @type {?} */(this.socialPost))).toApiJson() : this.socialPost;
2406
- }
2407
- if (typeof this.socialServiceIds !== 'undefined') {
2408
- toReturn['socialServiceIds'] = this.socialServiceIds;
2409
- }
2410
- if (typeof this.partnerId !== 'undefined') {
2411
- toReturn['partnerId'] = this.partnerId;
2412
- }
2413
- if (typeof this.businessId !== 'undefined') {
2414
- toReturn['businessId'] = this.businessId;
2415
- }
2416
- return toReturn;
2417
- };
2418
- return SchedulePostRequest;
2419
- }());
2420
- var SchedulePostResponse = /** @class */ (function () {
2421
- function SchedulePostResponse(kwargs) {
2422
- if (!kwargs) {
2423
- return;
2424
- }
2425
- Object.assign(this, kwargs);
2426
- }
2427
- /**
2428
- * @param {?} proto
2429
- * @return {?}
2430
- */
2431
- SchedulePostResponse.fromProto = /**
2432
- * @param {?} proto
2433
- * @return {?}
2434
- */
2435
- function (proto) {
2436
- /** @type {?} */
2437
- var m = new SchedulePostResponse();
2438
- m = Object.assign(m, proto);
2439
- if (proto.statuses) {
2440
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2441
- }
2442
- return m;
2443
- };
2444
- /**
2445
- * @return {?}
2446
- */
2447
- SchedulePostResponse.prototype.toApiJson = /**
2448
- * @return {?}
2449
- */
2450
- function () {
2451
- /** @type {?} */
2452
- var toReturn = {};
2453
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2454
- toReturn['statuses'] = 'toApiJson' in this.statuses ? (( /** @type {?} */(this.statuses))).toApiJson() : this.statuses;
2455
- }
2456
- return toReturn;
2457
- };
2458
- return SchedulePostResponse;
2459
- }());
2460
- var ScheduleToAllPagesRequest = /** @class */ (function () {
2461
- function ScheduleToAllPagesRequest(kwargs) {
2462
- if (!kwargs) {
2463
- return;
2464
- }
2465
- Object.assign(this, kwargs);
2466
- }
2467
- /**
2468
- * @param {?} proto
2469
- * @return {?}
2470
- */
2471
- ScheduleToAllPagesRequest.fromProto = /**
2472
- * @param {?} proto
2473
- * @return {?}
2474
- */
2475
- function (proto) {
2476
- /** @type {?} */
2477
- var m = new ScheduleToAllPagesRequest();
2478
- m = Object.assign(m, proto);
2479
- if (proto.socialPost) {
2480
- m.socialPost = SocialPostData.fromProto(proto.socialPost);
2481
- }
2482
- return m;
2483
- };
2484
- /**
2485
- * @return {?}
2486
- */
2487
- ScheduleToAllPagesRequest.prototype.toApiJson = /**
2488
- * @return {?}
2489
- */
2490
- function () {
2491
- /** @type {?} */
2492
- var toReturn = {};
2493
- if (typeof this.socialPost !== 'undefined' && this.socialPost !== null) {
2494
- toReturn['socialPost'] = 'toApiJson' in this.socialPost ? (( /** @type {?} */(this.socialPost))).toApiJson() : this.socialPost;
2495
- }
2496
- if (typeof this.partnerId !== 'undefined') {
2497
- toReturn['partnerId'] = this.partnerId;
2498
- }
2499
- if (typeof this.businessId !== 'undefined') {
2500
- toReturn['businessId'] = this.businessId;
2501
- }
2502
- return toReturn;
2503
- };
2504
- return ScheduleToAllPagesRequest;
2505
- }());
2506
- var ScheduleToAllPagesResponse = /** @class */ (function () {
2507
- function ScheduleToAllPagesResponse(kwargs) {
2508
- if (!kwargs) {
2509
- return;
2510
- }
2511
- Object.assign(this, kwargs);
2512
- }
2513
- /**
2514
- * @param {?} proto
2515
- * @return {?}
2516
- */
2517
- ScheduleToAllPagesResponse.fromProto = /**
2518
- * @param {?} proto
2519
- * @return {?}
2520
- */
2521
- function (proto) {
2522
- /** @type {?} */
2523
- var m = new ScheduleToAllPagesResponse();
2524
- m = Object.assign(m, proto);
2525
- if (proto.statuses) {
2526
- m.statuses = proto.statuses.map(SchedulePostStatus.fromProto);
2527
- }
2528
- return m;
2529
- };
2530
- /**
2531
- * @return {?}
2532
- */
2533
- ScheduleToAllPagesResponse.prototype.toApiJson = /**
2534
- * @return {?}
2535
- */
2536
- function () {
2537
- /** @type {?} */
2538
- var toReturn = {};
2539
- if (typeof this.statuses !== 'undefined' && this.statuses !== null) {
2540
- toReturn['statuses'] = 'toApiJson' in this.statuses ? (( /** @type {?} */(this.statuses))).toApiJson() : this.statuses;
2541
- }
2542
- return toReturn;
2543
- };
2544
- return ScheduleToAllPagesResponse;
2545
- }());
2546
- var UpdatePostTemplateRequest = /** @class */ (function () {
2547
- function UpdatePostTemplateRequest(kwargs) {
2548
- if (!kwargs) {
2549
- return;
2550
- }
2551
- Object.assign(this, kwargs);
2552
- }
2553
- /**
2554
- * @param {?} proto
2555
- * @return {?}
2556
- */
2557
- UpdatePostTemplateRequest.fromProto = /**
2558
- * @param {?} proto
2559
- * @return {?}
2560
- */
2561
- function (proto) {
2562
- /** @type {?} */
2563
- var m = new UpdatePostTemplateRequest();
2564
- m = Object.assign(m, proto);
2565
- if (proto.postDateTime) {
2566
- m.postDateTime = new Date(proto.postDateTime);
2567
- }
2568
- return m;
2569
- };
2570
- /**
2571
- * @return {?}
2572
- */
2573
- UpdatePostTemplateRequest.prototype.toApiJson = /**
2574
- * @return {?}
2575
- */
2576
- function () {
2577
- /** @type {?} */
2578
- var toReturn = {};
2579
- if (typeof this.accountGroupId !== 'undefined') {
2580
- toReturn['accountGroupId'] = this.accountGroupId;
2581
- }
2582
- if (typeof this.templateId !== 'undefined') {
2583
- toReturn['templateId'] = this.templateId;
2584
- }
2585
- if (typeof this.title !== 'undefined') {
2586
- toReturn['title'] = this.title;
2587
- }
2588
- if (typeof this.postText !== 'undefined') {
2589
- toReturn['postText'] = this.postText;
2590
- }
2591
- if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
2592
- toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? (( /** @type {?} */(this.postDateTime))).toApiJson() : this.postDateTime;
2593
- }
2594
- if (typeof this.gmbPostCustomization !== 'undefined') {
2595
- toReturn['gmbPostCustomization'] = this.gmbPostCustomization;
2596
- }
2597
- if (typeof this.imageUrl !== 'undefined') {
2598
- toReturn['imageUrl'] = this.imageUrl;
2599
- }
2600
- if (typeof this.imagePath !== 'undefined') {
2601
- toReturn['imagePath'] = this.imagePath;
2602
- }
2603
- if (typeof this.imageSize !== 'undefined') {
2604
- toReturn['imageSize'] = this.imageSize;
2605
- }
2606
- if (typeof this.previews !== 'undefined') {
2607
- toReturn['previews'] = this.previews;
2608
- }
2609
- if (typeof this.options !== 'undefined') {
2610
- toReturn['options'] = this.options;
2611
- }
2612
- if (typeof this.videoUrl !== 'undefined') {
2613
- toReturn['videoUrl'] = this.videoUrl;
2614
- }
2615
- return toReturn;
2616
- };
2617
- return UpdatePostTemplateRequest;
2618
- }());
2619
-
2620
- /*! *****************************************************************************
2621
- Copyright (c) Microsoft Corporation.
2622
-
2623
- Permission to use, copy, modify, and/or distribute this software for any
2624
- purpose with or without fee is hereby granted.
2625
-
2626
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2627
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2628
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2629
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2630
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2631
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2632
- PERFORMANCE OF THIS SOFTWARE.
2633
- ***************************************************************************** */
2634
- var __assign = function () {
2635
- __assign = Object.assign || function __assign(t) {
2636
- for (var s, i = 1, n = arguments.length; i < n; i++) {
2637
- s = arguments[i];
2638
- for (var p in s)
2639
- if (Object.prototype.hasOwnProperty.call(s, p))
2640
- t[p] = s[p];
2641
- }
2642
- return t;
2643
- };
2644
- return __assign.apply(this, arguments);
2645
- };
2646
-
2647
- /**
2648
- * @fileoverview added by tsickle
2649
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2650
- */
2651
-
2652
- /**
2653
- * @fileoverview added by tsickle
2654
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2655
- */
2656
- var HostService = /** @class */ (function () {
2657
- function HostService(environmentService) {
2658
- this.environmentService = environmentService;
2659
- }
2660
- /**
2661
- * @return {?}
2662
- */
2663
- HostService.prototype.host = /**
2664
- * @return {?}
2665
- */
2666
- function () {
2667
- if (this._host) {
2668
- return this._host;
2669
- }
2670
- switch (this.environmentService.getEnvironment()) {
2671
- case i1.Environment.LOCAL:
2672
- this._host = 'social-post.vendasta-local.com';
2673
- break;
2674
- case i1.Environment.TEST:
2675
- this._host = '';
2676
- break;
2677
- case i1.Environment.DEMO:
2678
- this._host = 'social-posts-demo.apigateway.co';
2679
- break;
2680
- case i1.Environment.PROD:
2681
- this._host = 'social-posts-prod.apigateway.co';
2682
- break;
2683
- }
2684
- return this._host;
2685
- };
2686
- /**
2687
- * @return {?}
2688
- */
2689
- HostService.prototype.httpsHost = /**
2690
- * @return {?}
2691
- */
2692
- function () {
2693
- if (this._httpsHost) {
2694
- return this._httpsHost;
2695
- }
2696
- switch (this.environmentService.getEnvironment()) {
2697
- case i1.Environment.LOCAL:
2698
- this._httpsHost = 'social-post.vendasta-local.com';
2699
- break;
2700
- case i1.Environment.TEST:
2701
- this._httpsHost = '';
2702
- break;
2703
- case i1.Environment.DEMO:
2704
- this._httpsHost = 'social-posts-api-demo.apigateway.co';
2705
- break;
2706
- case i1.Environment.PROD:
2707
- this._httpsHost = 'social-posts-api-prod.apigateway.co';
2708
- break;
2709
- }
2710
- return this._httpsHost;
2711
- };
2712
- /**
2713
- * @return {?}
2714
- */
2715
- HostService.prototype.hostWithScheme = /**
2716
- * @return {?}
2717
- */
2718
- function () {
2719
- /** @type {?} */
2720
- var scheme = this.environmentService.getEnvironment() === i1.Environment.LOCAL ? 'http://' : 'https://';
2721
- return scheme + this.host();
2722
- };
2723
- /**
2724
- * @return {?}
2725
- */
2726
- HostService.prototype.httpsHostWithScheme = /**
2727
- * @return {?}
2728
- */
2729
- function () {
2730
- /** @type {?} */
2731
- var scheme = this.environmentService.getEnvironment() === i1.Environment.LOCAL ? 'http://' : 'https://';
2732
- return scheme + this.httpsHost();
2733
- };
2734
- HostService.decorators = [
2735
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
2736
- ];
2737
- /** @nocollapse */
2738
- HostService.ctorParameters = function () {
2739
- return [
2740
- { type: i1.EnvironmentService }
2741
- ];
2742
- };
2743
- /** @nocollapse */ HostService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function HostService_Factory() { return new HostService(i0.ɵɵinject(i1.EnvironmentService)); }, token: HostService, providedIn: "root" });
2744
- return HostService;
2745
- }());
2746
-
2747
- /**
2748
- * @fileoverview added by tsickle
2749
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2750
- */
2751
- var SocialPostsApiService = /** @class */ (function () {
2752
- function SocialPostsApiService(http, hostService) {
2753
- this.http = http;
2754
- this.hostService = hostService;
2755
- }
2756
- /**
2757
- * @private
2758
- * @return {?}
2759
- */
2760
- SocialPostsApiService.prototype.apiOptions = /**
2761
- * @private
2762
- * @return {?}
2763
- */
2764
- function () {
2765
- return {
2766
- headers: new i1$1.HttpHeaders({
2767
- 'Content-Type': 'application/json'
2768
- }),
2769
- withCredentials: true
2770
- };
2771
- };
2772
- /**
2773
- * @param {?} r
2774
- * @return {?}
2775
- */
2776
- SocialPostsApiService.prototype.list = /**
2777
- * @param {?} r
2778
- * @return {?}
2779
- */
2780
- function (r) {
2781
- /** @type {?} */
2782
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListSocialPostsRequest(r);
2783
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/List", request.toApiJson(), this.apiOptions())
2784
- .pipe(operators.map(( /**
2785
- * @param {?} resp
2786
- * @return {?}
2787
- */function (resp) { return ListSocialPostsResponse.fromProto(resp); })), operators.share());
2788
- };
2789
- /**
2790
- * @param {?} r
2791
- * @return {?}
2792
- */
2793
- SocialPostsApiService.prototype.deleteSocialPost = /**
2794
- * @param {?} r
2795
- * @return {?}
2796
- */
2797
- function (r) {
2798
- /** @type {?} */
2799
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeleteSocialPostRequest(r);
2800
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/DeleteSocialPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
2801
- };
2802
- /**
2803
- * @param {?} r
2804
- * @return {?}
2805
- */
2806
- SocialPostsApiService.prototype.scheduleToAllPages = /**
2807
- * @param {?} r
2808
- * @return {?}
2809
- */
2810
- function (r) {
2811
- /** @type {?} */
2812
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ScheduleToAllPagesRequest(r);
2813
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/ScheduleToAllPages", request.toApiJson(), this.apiOptions())
2814
- .pipe(operators.map(( /**
2815
- * @param {?} resp
2816
- * @return {?}
2817
- */function (resp) { return ScheduleToAllPagesResponse.fromProto(resp); })), operators.share());
2818
- };
2819
- /**
2820
- * @param {?} r
2821
- * @return {?}
2822
- */
2823
- SocialPostsApiService.prototype.schedule = /**
2824
- * @param {?} r
2825
- * @return {?}
2826
- */
2827
- function (r) {
2828
- /** @type {?} */
2829
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new SchedulePostRequest(r);
2830
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/Schedule", request.toApiJson(), this.apiOptions())
2831
- .pipe(operators.map(( /**
2832
- * @param {?} resp
2833
- * @return {?}
2834
- */function (resp) { return SchedulePostResponse.fromProto(resp); })), operators.share());
2835
- };
2836
- /**
2837
- * @param {?} r
2838
- * @return {?}
2839
- */
2840
- SocialPostsApiService.prototype.getMultiSocialPosts = /**
2841
- * @param {?} r
2842
- * @return {?}
2843
- */
2844
- function (r) {
2845
- /** @type {?} */
2846
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultiSocialPostsRequest(r);
2847
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPosts", request.toApiJson(), this.apiOptions())
2848
- .pipe(operators.map(( /**
2849
- * @param {?} resp
2850
- * @return {?}
2851
- */function (resp) { return GetMultiSocialPostsResponse.fromProto(resp); })), operators.share());
2852
- };
2853
- /**
2854
- * @param {?} r
2855
- * @return {?}
2856
- */
2857
- SocialPostsApiService.prototype.getMultiSocialPostStats = /**
2858
- * @param {?} r
2859
- * @return {?}
2860
- */
2861
- function (r) {
2862
- /** @type {?} */
2863
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultiSocialPostStatsRequest(r);
2864
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetMultiSocialPostStats", request.toApiJson(), this.apiOptions())
2865
- .pipe(operators.map(( /**
2866
- * @param {?} resp
2867
- * @return {?}
2868
- */function (resp) { return GetMultiSocialPostStatsResponse.fromProto(resp); })), operators.share());
2869
- };
2870
- /**
2871
- * @param {?} r
2872
- * @return {?}
2873
- */
2874
- SocialPostsApiService.prototype.getScheduledPostCount = /**
2875
- * @param {?} r
2876
- * @return {?}
2877
- */
2878
- function (r) {
2879
- /** @type {?} */
2880
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetScheduledPostCountRequest(r);
2881
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.SocialPosts/GetScheduledPostCount", request.toApiJson(), this.apiOptions())
2882
- .pipe(operators.map(( /**
2883
- * @param {?} resp
2884
- * @return {?}
2885
- */function (resp) { return GetScheduledPostCountResponse.fromProto(resp); })), operators.share());
2886
- };
2887
- SocialPostsApiService.decorators = [
2888
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
2889
- ];
2890
- /** @nocollapse */
2891
- SocialPostsApiService.ctorParameters = function () {
2892
- return [
2893
- { type: i1$1.HttpClient },
2894
- { type: HostService }
2895
- ];
2896
- };
2897
- /** @nocollapse */ SocialPostsApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SocialPostsApiService_Factory() { return new SocialPostsApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: SocialPostsApiService, providedIn: "root" });
2898
- return SocialPostsApiService;
2899
- }());
2900
-
2901
- /**
2902
- * @fileoverview added by tsickle
2903
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2904
- */
2905
- var SocialPostsService = /** @class */ (function () {
2906
- function SocialPostsService(socialPostsApiService) {
2907
- this.socialPostsApiService = socialPostsApiService;
2908
- }
2909
- /**
2910
- * @param {?} start
2911
- * @param {?} end
2912
- * @param {?} socialServiceIds
2913
- * @param {?} businessId
2914
- * @param {?} partnerId
2915
- * @param {?} cursor
2916
- * @param {?} tags
2917
- * @param {?} pageSize
2918
- * @return {?}
2919
- */
2920
- SocialPostsService.prototype.list = /**
2921
- * @param {?} start
2922
- * @param {?} end
2923
- * @param {?} socialServiceIds
2924
- * @param {?} businessId
2925
- * @param {?} partnerId
2926
- * @param {?} cursor
2927
- * @param {?} tags
2928
- * @param {?} pageSize
2929
- * @return {?}
2930
- */
2931
- function (start, end, socialServiceIds, businessId, partnerId, cursor, tags, pageSize) {
2932
- /** @type {?} */
2933
- var req = new ListSocialPostsRequest({
2934
- start: start,
2935
- end: end,
2936
- businessId: businessId,
2937
- partnerId: partnerId,
2938
- cursor: cursor,
2939
- socialServiceIds: socialServiceIds,
2940
- tags: tags,
2941
- pageSize: pageSize,
2942
- });
2943
- return this.socialPostsApiService.list(req);
2944
- };
2945
- /**
2946
- * @param {?} businessId
2947
- * @param {?} internalPostIds
2948
- * @return {?}
2949
- */
2950
- SocialPostsService.prototype.getMultiSocialPosts = /**
2951
- * @param {?} businessId
2952
- * @param {?} internalPostIds
2953
- * @return {?}
2954
- */
2955
- function (businessId, internalPostIds) {
2956
- if (!internalPostIds || internalPostIds.length === 0) {
2957
- /** @type {?} */
2958
- var res = new GetMultiSocialPostsResponse();
2959
- return rxjs.of(res);
2960
- }
2961
- /** @type {?} */
2962
- var req = new GetMultiSocialPostsRequest({ businessId: businessId, internalPostIds: internalPostIds });
2963
- return this.socialPostsApiService.getMultiSocialPosts(req);
2964
- };
2965
- /**
2966
- * @param {?} partnerId
2967
- * @param {?} businessId
2968
- * @param {?} socialServiceIds
2969
- * @return {?}
2970
- */
2971
- SocialPostsService.prototype.getScheduledPostCount = /**
2972
- * @param {?} partnerId
2973
- * @param {?} businessId
2974
- * @param {?} socialServiceIds
2975
- * @return {?}
2976
- */
2977
- function (partnerId, businessId, socialServiceIds) {
2978
- /** @type {?} */
2979
- var req = new GetScheduledPostCountRequest({ partnerId: partnerId, businessId: businessId, socialServiceIds: socialServiceIds });
2980
- return this.socialPostsApiService.getScheduledPostCount(req);
2981
- };
2982
- SocialPostsService.decorators = [
2983
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
2984
- ];
2985
- /** @nocollapse */
2986
- SocialPostsService.ctorParameters = function () {
2987
- return [
2988
- { type: SocialPostsApiService }
2989
- ];
2990
- };
2991
- /** @nocollapse */ SocialPostsService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function SocialPostsService_Factory() { return new SocialPostsService(i0.ɵɵinject(SocialPostsApiService)); }, token: SocialPostsService, providedIn: "root" });
2992
- return SocialPostsService;
2993
- }());
2994
-
2995
- /**
2996
- * @fileoverview added by tsickle
2997
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2998
- */
2999
- var PostTemplatesApiService = /** @class */ (function () {
3000
- function PostTemplatesApiService(http, hostService) {
3001
- this.http = http;
3002
- this.hostService = hostService;
3003
- }
3004
- /**
3005
- * @private
3006
- * @return {?}
3007
- */
3008
- PostTemplatesApiService.prototype.apiOptions = /**
3009
- * @private
3010
- * @return {?}
3011
- */
3012
- function () {
3013
- return {
3014
- headers: new i1$1.HttpHeaders({
3015
- 'Content-Type': 'application/json'
3016
- }),
3017
- withCredentials: true
3018
- };
3019
- };
3020
- /**
3021
- * @param {?} r
3022
- * @return {?}
3023
- */
3024
- PostTemplatesApiService.prototype.updatePostTemplate = /**
3025
- * @param {?} r
3026
- * @return {?}
3027
- */
3028
- function (r) {
3029
- /** @type {?} */
3030
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new UpdatePostTemplateRequest(r);
3031
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/UpdatePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3032
- };
3033
- /**
3034
- * @param {?} r
3035
- * @return {?}
3036
- */
3037
- PostTemplatesApiService.prototype.createPostTemplate = /**
3038
- * @param {?} r
3039
- * @return {?}
3040
- */
3041
- function (r) {
3042
- /** @type {?} */
3043
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new CreatePostTemplateRequest(r);
3044
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/CreatePostTemplate", request.toApiJson(), this.apiOptions())
3045
- .pipe(operators.map(( /**
3046
- * @param {?} resp
3047
- * @return {?}
3048
- */function (resp) { return CreatePostTemplateResponse.fromProto(resp); })), operators.share());
3049
- };
3050
- /**
3051
- * @param {?} r
3052
- * @return {?}
3053
- */
3054
- PostTemplatesApiService.prototype.getPostTemplate = /**
3055
- * @param {?} r
3056
- * @return {?}
3057
- */
3058
- function (r) {
3059
- /** @type {?} */
3060
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetPostTemplateRequest(r);
3061
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/GetPostTemplate", request.toApiJson(), this.apiOptions())
3062
- .pipe(operators.map(( /**
3063
- * @param {?} resp
3064
- * @return {?}
3065
- */function (resp) { return GetPostTemplateResponse.fromProto(resp); })), operators.share());
3066
- };
3067
- /**
3068
- * @param {?} r
3069
- * @return {?}
3070
- */
3071
- PostTemplatesApiService.prototype.listPostTemplates = /**
3072
- * @param {?} r
3073
- * @return {?}
3074
- */
3075
- function (r) {
3076
- /** @type {?} */
3077
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListPostTemplatesRequest(r);
3078
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/ListPostTemplates", request.toApiJson(), this.apiOptions())
3079
- .pipe(operators.map(( /**
3080
- * @param {?} resp
3081
- * @return {?}
3082
- */function (resp) { return ListPostTemplatesResponse.fromProto(resp); })), operators.share());
3083
- };
3084
- /**
3085
- * @param {?} r
3086
- * @return {?}
3087
- */
3088
- PostTemplatesApiService.prototype.deletePostTemplate = /**
3089
- * @param {?} r
3090
- * @return {?}
3091
- */
3092
- function (r) {
3093
- /** @type {?} */
3094
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeletePostTemplateRequest(r);
3095
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PostTemplates/DeletePostTemplate", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3096
- };
3097
- PostTemplatesApiService.decorators = [
3098
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3099
- ];
3100
- /** @nocollapse */
3101
- PostTemplatesApiService.ctorParameters = function () {
3102
- return [
3103
- { type: i1$1.HttpClient },
3104
- { type: HostService }
3105
- ];
3106
- };
3107
- /** @nocollapse */ PostTemplatesApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PostTemplatesApiService_Factory() { return new PostTemplatesApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: PostTemplatesApiService, providedIn: "root" });
3108
- return PostTemplatesApiService;
3109
- }());
3110
-
3111
- /**
3112
- * @fileoverview added by tsickle
3113
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3114
- */
3115
- var PostTemplatesService = /** @class */ (function () {
3116
- function PostTemplatesService(socialPostsApiService) {
3117
- this.socialPostsApiService = socialPostsApiService;
3118
- }
3119
- /**
3120
- * @param {?} accountGroupId
3121
- * @param {?} templateId
3122
- * @param {?} title
3123
- * @param {?} postText
3124
- * @param {?} postDateTime
3125
- * @param {?} gmbPostCustomization
3126
- * @param {?} imageUrl
3127
- * @param {?} imagePath
3128
- * @param {?} imageSize
3129
- * @param {?} previews
3130
- * @param {?} options
3131
- * @param {?} videoUrl
3132
- * @return {?}
3133
- */
3134
- PostTemplatesService.prototype.updatePostTemplate = /**
3135
- * @param {?} accountGroupId
3136
- * @param {?} templateId
3137
- * @param {?} title
3138
- * @param {?} postText
3139
- * @param {?} postDateTime
3140
- * @param {?} gmbPostCustomization
3141
- * @param {?} imageUrl
3142
- * @param {?} imagePath
3143
- * @param {?} imageSize
3144
- * @param {?} previews
3145
- * @param {?} options
3146
- * @param {?} videoUrl
3147
- * @return {?}
3148
- */
3149
- function (accountGroupId, templateId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3150
- /** @type {?} */
3151
- var req = new UpdatePostTemplateRequest({
3152
- accountGroupId: accountGroupId,
3153
- templateId: templateId,
3154
- title: title,
3155
- postText: postText,
3156
- postDateTime: postDateTime,
3157
- gmbPostCustomization: gmbPostCustomization,
3158
- imageUrl: imageUrl,
3159
- imagePath: imagePath,
3160
- imageSize: imageSize,
3161
- previews: previews,
3162
- options: options,
3163
- videoUrl: videoUrl
3164
- });
3165
- return this.socialPostsApiService.updatePostTemplate(req);
3166
- };
3167
- /**
3168
- * @param {?} accountGroupId
3169
- * @param {?} title
3170
- * @param {?} postText
3171
- * @param {?} postDateTime
3172
- * @param {?} gmbPostCustomization
3173
- * @param {?} imageUrl
3174
- * @param {?} imagePath
3175
- * @param {?} imageSize
3176
- * @param {?} previews
3177
- * @param {?} options
3178
- * @param {?} videoUrl
3179
- * @return {?}
3180
- */
3181
- PostTemplatesService.prototype.createPostTemplate = /**
3182
- * @param {?} accountGroupId
3183
- * @param {?} title
3184
- * @param {?} postText
3185
- * @param {?} postDateTime
3186
- * @param {?} gmbPostCustomization
3187
- * @param {?} imageUrl
3188
- * @param {?} imagePath
3189
- * @param {?} imageSize
3190
- * @param {?} previews
3191
- * @param {?} options
3192
- * @param {?} videoUrl
3193
- * @return {?}
3194
- */
3195
- function (accountGroupId, title, postText, postDateTime, gmbPostCustomization, imageUrl, imagePath, imageSize, previews, options, videoUrl) {
3196
- /** @type {?} */
3197
- var req = new CreatePostTemplateRequest({
3198
- accountGroupId: accountGroupId,
3199
- title: title,
3200
- postText: postText,
3201
- postDateTime: postDateTime,
3202
- gmbPostCustomization: gmbPostCustomization,
3203
- imageUrl: imageUrl,
3204
- imagePath: imagePath,
3205
- imageSize: imageSize,
3206
- previews: previews,
3207
- options: options,
3208
- videoUrl: videoUrl
3209
- });
3210
- return this.socialPostsApiService.createPostTemplate(req);
3211
- };
3212
- /**
3213
- * @param {?} accountGroupId
3214
- * @param {?} templateId
3215
- * @return {?}
3216
- */
3217
- PostTemplatesService.prototype.getPostTemplate = /**
3218
- * @param {?} accountGroupId
3219
- * @param {?} templateId
3220
- * @return {?}
3221
- */
3222
- function (accountGroupId, templateId) {
3223
- /** @type {?} */
3224
- var req = new GetPostTemplateRequest({
3225
- accountGroupId: accountGroupId,
3226
- templateId: templateId
3227
- });
3228
- return this.socialPostsApiService.getPostTemplate(req);
3229
- };
3230
- /**
3231
- * @param {?} accountGroupId
3232
- * @param {?} cursor
3233
- * @param {?} pageSize
3234
- * @return {?}
3235
- */
3236
- PostTemplatesService.prototype.listPostTemplates = /**
3237
- * @param {?} accountGroupId
3238
- * @param {?} cursor
3239
- * @param {?} pageSize
3240
- * @return {?}
3241
- */
3242
- function (accountGroupId, cursor, pageSize) {
3243
- /** @type {?} */
3244
- var req = new ListPostTemplatesRequest({
3245
- accountGroupId: accountGroupId,
3246
- cursor: cursor,
3247
- pageSize: pageSize
3248
- });
3249
- return this.socialPostsApiService.listPostTemplates(req);
3250
- };
3251
- /**
3252
- * @param {?} accountGroupId
3253
- * @param {?} templateId
3254
- * @return {?}
3255
- */
3256
- PostTemplatesService.prototype.deletePostTemplate = /**
3257
- * @param {?} accountGroupId
3258
- * @param {?} templateId
3259
- * @return {?}
3260
- */
3261
- function (accountGroupId, templateId) {
3262
- /** @type {?} */
3263
- var req = new DeletePostTemplateRequest({
3264
- accountGroupId: accountGroupId,
3265
- templateId: templateId
3266
- });
3267
- return this.socialPostsApiService.deletePostTemplate(req);
3268
- };
3269
- PostTemplatesService.decorators = [
3270
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3271
- ];
3272
- /** @nocollapse */
3273
- PostTemplatesService.ctorParameters = function () {
3274
- return [
3275
- { type: PostTemplatesApiService }
3276
- ];
3277
- };
3278
- /** @nocollapse */ PostTemplatesService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PostTemplatesService_Factory() { return new PostTemplatesService(i0.ɵɵinject(PostTemplatesApiService)); }, token: PostTemplatesService, providedIn: "root" });
3279
- return PostTemplatesService;
3280
- }());
3281
-
3282
- /**
3283
- * @fileoverview added by tsickle
3284
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3285
- */
3286
- var MultilocationPostApiService = /** @class */ (function () {
3287
- function MultilocationPostApiService(http, hostService) {
3288
- this.http = http;
3289
- this.hostService = hostService;
3290
- }
3291
- /**
3292
- * @private
3293
- * @return {?}
3294
- */
3295
- MultilocationPostApiService.prototype.apiOptions = /**
3296
- * @private
3297
- * @return {?}
3298
- */
3299
- function () {
3300
- return {
3301
- headers: new i1$1.HttpHeaders({
3302
- 'Content-Type': 'application/json'
3303
- }),
3304
- withCredentials: true
3305
- };
3306
- };
3307
- /**
3308
- * @param {?} r
3309
- * @return {?}
3310
- */
3311
- MultilocationPostApiService.prototype.createMultilocationPost = /**
3312
- * @param {?} r
3313
- * @return {?}
3314
- */
3315
- function (r) {
3316
- /** @type {?} */
3317
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new CreateMultilocationPostRequest(r);
3318
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/CreateMultilocationPost", request.toApiJson(), this.apiOptions())
3319
- .pipe(operators.map(( /**
3320
- * @param {?} resp
3321
- * @return {?}
3322
- */function (resp) { return CreateMultilocationPostResponse.fromProto(resp); })), operators.share());
3323
- };
3324
- /**
3325
- * @param {?} r
3326
- * @return {?}
3327
- */
3328
- MultilocationPostApiService.prototype.editMultilocationPost = /**
3329
- * @param {?} r
3330
- * @return {?}
3331
- */
3332
- function (r) {
3333
- /** @type {?} */
3334
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new EditMultilocationPostRequest(r);
3335
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/EditMultilocationPost", request.toApiJson(), this.apiOptions())
3336
- .pipe(operators.map(( /**
3337
- * @param {?} resp
3338
- * @return {?}
3339
- */function (resp) { return EditMultilocationPostResponse.fromProto(resp); })), operators.share());
3340
- };
3341
- /**
3342
- * @param {?} r
3343
- * @return {?}
3344
- */
3345
- MultilocationPostApiService.prototype.removeFromMultilocationPost = /**
3346
- * @param {?} r
3347
- * @return {?}
3348
- */
3349
- function (r) {
3350
- /** @type {?} */
3351
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new RemoveFromMultilocationPostRequest(r);
3352
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/RemoveFromMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3353
- };
3354
- /**
3355
- * @param {?} r
3356
- * @return {?}
3357
- */
3358
- MultilocationPostApiService.prototype.listMultilocationPostsForBrand = /**
3359
- * @param {?} r
3360
- * @return {?}
3361
- */
3362
- function (r) {
3363
- /** @type {?} */
3364
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new ListMultilocationPostsForBrandRequest(r);
3365
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/ListMultilocationPostsForBrand", request.toApiJson(), this.apiOptions())
3366
- .pipe(operators.map(( /**
3367
- * @param {?} resp
3368
- * @return {?}
3369
- */function (resp) { return ListMultilocationPostsForBrandResponse.fromProto(resp); })), operators.share());
3370
- };
3371
- /**
3372
- * @param {?} r
3373
- * @return {?}
3374
- */
3375
- MultilocationPostApiService.prototype.deleteMultilocationPost = /**
3376
- * @param {?} r
3377
- * @return {?}
3378
- */
3379
- function (r) {
3380
- /** @type {?} */
3381
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new DeleteMultilocationPostRequest(r);
3382
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/DeleteMultilocationPost", request.toApiJson(), __assign({}, this.apiOptions(), { observe: 'response' }));
3383
- };
3384
- /**
3385
- * @param {?} r
3386
- * @return {?}
3387
- */
3388
- MultilocationPostApiService.prototype.getMultilocationPost = /**
3389
- * @param {?} r
3390
- * @return {?}
3391
- */
3392
- function (r) {
3393
- /** @type {?} */
3394
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new GetMultilocationPostRequest(r);
3395
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.MultilocationPostService/GetMultilocationPost", request.toApiJson(), this.apiOptions())
3396
- .pipe(operators.map(( /**
3397
- * @param {?} resp
3398
- * @return {?}
3399
- */function (resp) { return GetMultilocationPostResponse.fromProto(resp); })), operators.share());
3400
- };
3401
- MultilocationPostApiService.decorators = [
3402
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3403
- ];
3404
- /** @nocollapse */
3405
- MultilocationPostApiService.ctorParameters = function () {
3406
- return [
3407
- { type: i1$1.HttpClient },
3408
- { type: HostService }
3409
- ];
3410
- };
3411
- /** @nocollapse */ MultilocationPostApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function MultilocationPostApiService_Factory() { return new MultilocationPostApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: MultilocationPostApiService, providedIn: "root" });
3412
- return MultilocationPostApiService;
3413
- }());
3414
-
3415
- /**
3416
- * @fileoverview added by tsickle
3417
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3418
- */
3419
- var MultilocationPostsService = /** @class */ (function () {
3420
- function MultilocationPostsService(multilocationApiService) {
3421
- this.multilocationApiService = multilocationApiService;
3422
- }
3423
- /**
3424
- * @param {?} brandId
3425
- * @param {?} text
3426
- * @param {?} media
3427
- * @param {?} gifs
3428
- * @param {?} videos
3429
- * @param {?} scheduledDate
3430
- * @param {?} locations
3431
- * @return {?}
3432
- */
3433
- MultilocationPostsService.prototype.createMultilocationPost = /**
3434
- * @param {?} brandId
3435
- * @param {?} text
3436
- * @param {?} media
3437
- * @param {?} gifs
3438
- * @param {?} videos
3439
- * @param {?} scheduledDate
3440
- * @param {?} locations
3441
- * @return {?}
3442
- */
3443
- function (brandId, text, media, gifs, videos, scheduledDate, locations) {
3444
- /** @type {?} */
3445
- var req = new CreateMultilocationPostRequest({
3446
- brandId: brandId,
3447
- text: text,
3448
- media: media,
3449
- gifs: gifs,
3450
- videos: videos,
3451
- scheduledDate: scheduledDate,
3452
- locations: locations
3453
- });
3454
- return this.multilocationApiService.createMultilocationPost(req);
3455
- };
3456
- /**
3457
- * @param {?} brandId
3458
- * @param {?} multilocationId
3459
- * @param {?} text
3460
- * @param {?} media
3461
- * @param {?} gifs
3462
- * @param {?} videos
3463
- * @param {?} scheduledDate
3464
- * @param {?} locations
3465
- * @param {?} fieldMask
3466
- * @return {?}
3467
- */
3468
- MultilocationPostsService.prototype.editMultilocationPost = /**
3469
- * @param {?} brandId
3470
- * @param {?} multilocationId
3471
- * @param {?} text
3472
- * @param {?} media
3473
- * @param {?} gifs
3474
- * @param {?} videos
3475
- * @param {?} scheduledDate
3476
- * @param {?} locations
3477
- * @param {?} fieldMask
3478
- * @return {?}
3479
- */
3480
- function (brandId, multilocationId, text, media, gifs, videos, scheduledDate, locations, fieldMask) {
3481
- /** @type {?} */
3482
- var req = new EditMultilocationPostRequest({
3483
- brandId: brandId,
3484
- multilocationId: multilocationId,
3485
- text: text,
3486
- media: media,
3487
- gifs: gifs,
3488
- videos: videos,
3489
- scheduledDate: scheduledDate,
3490
- locations: locations,
3491
- fieldMask: fieldMask
3492
- });
3493
- return this.multilocationApiService.editMultilocationPost(req);
3494
- };
3495
- /**
3496
- * @param {?} reason
3497
- * @param {?} brandId
3498
- * @param {?} multilocationId
3499
- * @param {?} locations
3500
- * @return {?}
3501
- */
3502
- MultilocationPostsService.prototype.removeFromMultilocationPost = /**
3503
- * @param {?} reason
3504
- * @param {?} brandId
3505
- * @param {?} multilocationId
3506
- * @param {?} locations
3507
- * @return {?}
3508
- */
3509
- function (reason, brandId, multilocationId, locations) {
3510
- /** @type {?} */
3511
- var req = new RemoveFromMultilocationPostRequest({
3512
- reason: reason,
3513
- brandId: brandId,
3514
- multilocationId: multilocationId,
3515
- locations: locations
3516
- });
3517
- return this.multilocationApiService.removeFromMultilocationPost(req);
3518
- };
3519
- /**
3520
- * @param {?} brandId
3521
- * @param {?} startDate
3522
- * @param {?} endDate
3523
- * @param {?} cursor
3524
- * @param {?} pageSize
3525
- * @return {?}
3526
- */
3527
- MultilocationPostsService.prototype.listMultilocationPostsForBrand = /**
3528
- * @param {?} brandId
3529
- * @param {?} startDate
3530
- * @param {?} endDate
3531
- * @param {?} cursor
3532
- * @param {?} pageSize
3533
- * @return {?}
3534
- */
3535
- function (brandId, startDate, endDate, cursor, pageSize) {
3536
- /** @type {?} */
3537
- var req = new ListMultilocationPostsForBrandRequest({
3538
- brandId: brandId,
3539
- startDate: startDate,
3540
- endDate: endDate,
3541
- cursor: cursor,
3542
- pageSize: pageSize
3543
- });
3544
- return this.multilocationApiService.listMultilocationPostsForBrand(req);
3545
- };
3546
- /**
3547
- * @param {?} brandId
3548
- * @param {?} multilocationId
3549
- * @return {?}
3550
- */
3551
- MultilocationPostsService.prototype.deleteMultilocationPost = /**
3552
- * @param {?} brandId
3553
- * @param {?} multilocationId
3554
- * @return {?}
3555
- */
3556
- function (brandId, multilocationId) {
3557
- /** @type {?} */
3558
- var req = new DeleteMultilocationPostRequest({
3559
- brandId: brandId,
3560
- multilocationId: multilocationId
3561
- });
3562
- return this.multilocationApiService.deleteMultilocationPost(req);
3563
- };
3564
- /**
3565
- * @param {?} brandId
3566
- * @param {?} multilocationId
3567
- * @return {?}
3568
- */
3569
- MultilocationPostsService.prototype.getMultilocationPost = /**
3570
- * @param {?} brandId
3571
- * @param {?} multilocationId
3572
- * @return {?}
3573
- */
3574
- function (brandId, multilocationId) {
3575
- /** @type {?} */
3576
- var req = new GetMultilocationPostRequest({
3577
- brandId: brandId,
3578
- multilocationId: multilocationId
3579
- });
3580
- return this.multilocationApiService.getMultilocationPost(req);
3581
- };
3582
- MultilocationPostsService.decorators = [
3583
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3584
- ];
3585
- /** @nocollapse */
3586
- MultilocationPostsService.ctorParameters = function () {
3587
- return [
3588
- { type: MultilocationPostApiService }
3589
- ];
3590
- };
3591
- /** @nocollapse */ MultilocationPostsService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function MultilocationPostsService_Factory() { return new MultilocationPostsService(i0.ɵɵinject(MultilocationPostApiService)); }, token: MultilocationPostsService, providedIn: "root" });
3592
- return MultilocationPostsService;
3593
- }());
3594
-
3595
- /**
3596
- * @fileoverview added by tsickle
3597
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3598
- */
3599
- var PartnerSocialPostsApiService = /** @class */ (function () {
3600
- function PartnerSocialPostsApiService(http, hostService) {
3601
- this.http = http;
3602
- this.hostService = hostService;
3603
- }
3604
- /**
3605
- * @private
3606
- * @return {?}
3607
- */
3608
- PartnerSocialPostsApiService.prototype.apiOptions = /**
3609
- * @private
3610
- * @return {?}
3611
- */
3612
- function () {
3613
- return {
3614
- headers: new i1$1.HttpHeaders({
3615
- 'Content-Type': 'application/json'
3616
- }),
3617
- withCredentials: true
3618
- };
3619
- };
3620
- /**
3621
- * @param {?} r
3622
- * @return {?}
3623
- */
3624
- PartnerSocialPostsApiService.prototype.listScheduled = /**
3625
- * @param {?} r
3626
- * @return {?}
3627
- */
3628
- function (r) {
3629
- /** @type {?} */
3630
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new PartnerListScheduledSocialPostsRequest(r);
3631
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduled", request.toApiJson(), this.apiOptions())
3632
- .pipe(operators.map(( /**
3633
- * @param {?} resp
3634
- * @return {?}
3635
- */function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), operators.share());
3636
- };
3637
- /**
3638
- * @param {?} r
3639
- * @return {?}
3640
- */
3641
- PartnerSocialPostsApiService.prototype.listScheduledByCreated = /**
3642
- * @param {?} r
3643
- * @return {?}
3644
- */
3645
- function (r) {
3646
- /** @type {?} */
3647
- var request = ((( /** @type {?} */(r))).toApiJson) ? (( /** @type {?} */(r))) : new PartnerListScheduledSocialPostsRequest(r);
3648
- return this.http.post(this.hostService.hostWithScheme() + "/socialposts.v1.PartnerSocialPosts/ListScheduledByCreated", request.toApiJson(), this.apiOptions())
3649
- .pipe(operators.map(( /**
3650
- * @param {?} resp
3651
- * @return {?}
3652
- */function (resp) { return PartnerListScheduledPostsResponse.fromProto(resp); })), operators.share());
3653
- };
3654
- PartnerSocialPostsApiService.decorators = [
3655
- { type: i0.Injectable, args: [{ providedIn: 'root' },] }
3656
- ];
3657
- /** @nocollapse */
3658
- PartnerSocialPostsApiService.ctorParameters = function () {
3659
- return [
3660
- { type: i1$1.HttpClient },
3661
- { type: HostService }
3662
- ];
3663
- };
3664
- /** @nocollapse */ PartnerSocialPostsApiService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PartnerSocialPostsApiService_Factory() { return new PartnerSocialPostsApiService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(HostService)); }, token: PartnerSocialPostsApiService, providedIn: "root" });
3665
- return PartnerSocialPostsApiService;
3666
- }());
3667
-
3668
- /**
3669
- * @fileoverview added by tsickle
3670
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3671
- */
3672
-
3673
- /**
3674
- * @fileoverview added by tsickle
3675
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3676
- */
3677
-
3678
- /**
3679
- * @fileoverview added by tsickle
3680
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3681
- */
3682
-
3683
- /**
3684
- * @fileoverview added by tsickle
3685
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3686
- */
3687
-
3688
- exports.SocialPostsService = SocialPostsService;
3689
- exports.PostTemplatesService = PostTemplatesService;
3690
- exports.MultilocationPostsService = MultilocationPostsService;
3691
- exports.FieldMask = FieldMask;
3692
- exports.Location = Location;
3693
- exports.MultilocationPost = MultilocationPost;
3694
- exports.PostingStatus = PostingStatus;
3695
- exports.RemoveReason = RemoveReason;
3696
- exports.MultilocationPostApiService = MultilocationPostApiService;
3697
- exports.GetMultilocationPostRequest = GetMultilocationPostRequest;
3698
- exports.DeleteMultilocationPostRequest = DeleteMultilocationPostRequest;
3699
- exports.ListMultilocationPostsForBrandRequest = ListMultilocationPostsForBrandRequest;
3700
- exports.ɵb = HostService;
3701
- exports.ɵd = MultilocationPostApiService;
3702
- exports.ɵc = PostTemplatesApiService;
3703
- exports.ɵa = SocialPostsApiService;
3704
-
3705
- Object.defineProperty(exports, '__esModule', { value: true });
3706
-
3707
- })));
3708
-
3709
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZGFzdGEtc29jaWFsLXBvc3RzLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvZmllbGQtbWFzay50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvbXVsdGlsb2NhdGlvbi1wb3N0LnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9wb3N0LXRlbXBsYXRlcy50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL2VudW1zL3NvY2lhbC1wb3N0cy5lbnVtLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvZW51bXMvbXVsdGlsb2NhdGlvbi1wb3N0LmVudW0udHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9vYmplY3RzL3NvY2lhbC1wb3N0cy50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL29iamVjdHMvc29jaWFsLXBvc3Qtc3RhdHMudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyIsIm5vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvc29jaWFsLXBvc3RzLmFwaS5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9zb2NpYWwtcG9zdHMuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL3NvY2lhbC1wb3N0cy9saWIvX2ludGVybmFsL3Bvc3QtdGVtcGxhdGVzLmFwaS5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9wb3N0LXRlbXBsYXRlcy5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9faW50ZXJuYWwvbXVsdGlsb2NhdGlvbi1wb3N0LmFwaS5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvc29jaWFsLXBvc3RzL2xpYi9tdWx0aWxvY2F0aW9uLXBvc3RzLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9zb2NpYWwtcG9zdHMvbGliL19pbnRlcm5hbC9wYXJ0bmVyLXNvY2lhbC1wb3N0cy5hcGkuc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFzayBpbXBsZW1lbnRzIGkuRmllbGRNYXNrSW50ZXJmYWNlIHtcbiAgICBwYXRoczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBGaWVsZE1hc2sge1xuICAgICAgICBsZXQgbSA9IG5ldyBGaWVsZE1hc2soKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkZpZWxkTWFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhdGhzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXRocyddID0gdGhpcy5wYXRoczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgTG9jYXRpb24gaW1wbGVtZW50cyBpLkxvY2F0aW9uSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTG9jYXRpb24ge1xuICAgICAgICBsZXQgbSA9IG5ldyBMb2NhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTG9jYXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWRzJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpbG9jYXRpb25Qb3N0IGltcGxlbWVudHMgaS5NdWx0aWxvY2F0aW9uUG9zdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25JZDogc3RyaW5nO1xuICAgIG9yaWdpbmFsVGV4dDogc3RyaW5nO1xuICAgIG9yaWdpbmFsU2NoZWR1bGVkRGF0ZTogRGF0ZTtcbiAgICBvcmlnaW5hbE1lZGlhOiBzdHJpbmdbXTtcbiAgICBvcmlnaW5hbExvY2F0aW9uczogTG9jYXRpb25bXTtcbiAgICBlZGl0ZWRMb2NhdGlvbnM6IExvY2F0aW9uW107XG4gICAgZGVsZXRlZExvY2F0aW9uczogTG9jYXRpb25bXTtcbiAgICBvcmlnaW5hbEdpZnM6IHN0cmluZ1tdO1xuICAgIG9yaWdpbmFsVmlkZW9zOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE11bHRpbG9jYXRpb25Qb3N0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTXVsdGlsb2NhdGlvblBvc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ub3JpZ2luYWxTY2hlZHVsZWREYXRlKSB7bS5vcmlnaW5hbFNjaGVkdWxlZERhdGUgPSBuZXcgRGF0ZShwcm90by5vcmlnaW5hbFNjaGVkdWxlZERhdGUpO31cbiAgICAgICAgaWYgKHByb3RvLm9yaWdpbmFsTG9jYXRpb25zKSB7bS5vcmlnaW5hbExvY2F0aW9ucyA9IHByb3RvLm9yaWdpbmFsTG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmVkaXRlZExvY2F0aW9ucykge20uZWRpdGVkTG9jYXRpb25zID0gcHJvdG8uZWRpdGVkTG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmRlbGV0ZWRMb2NhdGlvbnMpIHttLmRlbGV0ZWRMb2NhdGlvbnMgPSBwcm90by5kZWxldGVkTG9jYXRpb25zLm1hcChMb2NhdGlvbi5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NdWx0aWxvY2F0aW9uUG9zdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25JZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvcmlnaW5hbFRleHQnXSA9IHRoaXMub3JpZ2luYWxUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbFNjaGVkdWxlZERhdGUgIT09IG51bGwpIHt0b1JldHVyblsnb3JpZ2luYWxTY2hlZHVsZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSA/ICh0aGlzLm9yaWdpbmFsU2NoZWR1bGVkRGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5vcmlnaW5hbFNjaGVkdWxlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JpZ2luYWxNZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luYWxNZWRpYSddID0gdGhpcy5vcmlnaW5hbE1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsTG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsTG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ29yaWdpbmFsTG9jYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm9yaWdpbmFsTG9jYXRpb25zID8gKHRoaXMub3JpZ2luYWxMb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3JpZ2luYWxMb2NhdGlvbnM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdGVkTG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVkaXRlZExvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydlZGl0ZWRMb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZWRpdGVkTG9jYXRpb25zID8gKHRoaXMuZWRpdGVkTG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVkaXRlZExvY2F0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWxldGVkTG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRlbGV0ZWRMb2NhdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsnZGVsZXRlZExvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kZWxldGVkTG9jYXRpb25zID8gKHRoaXMuZGVsZXRlZExvY2F0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kZWxldGVkTG9jYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbmFsR2lmcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luYWxHaWZzJ10gPSB0aGlzLm9yaWdpbmFsR2lmczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbFZpZGVvcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luYWxWaWRlb3MnXSA9IHRoaXMub3JpZ2luYWxWaWRlb3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlsb2NhdGlvblBvc3RFcnJvciBpbXBsZW1lbnRzIGkuTXVsdGlsb2NhdGlvblBvc3RFcnJvckludGVyZmFjZSB7XG4gICAgc29jaWFsU2VydmljZUlkOiBzdHJpbmc7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBlcnJvclJlYXNvbjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTXVsdGlsb2NhdGlvblBvc3RFcnJvciB7XG4gICAgICAgIGxldCBtID0gbmV3IE11bHRpbG9jYXRpb25Qb3N0RXJyb3IoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk11bHRpbG9jYXRpb25Qb3N0RXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZCddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9yUmVhc29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlcnJvclJlYXNvbiddID0gdGhpcy5lcnJvclJlYXNvbjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgUG9zdFRlbXBsYXRlIGltcGxlbWVudHMgaS5Qb3N0VGVtcGxhdGVJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgdGVtcGxhdGVJZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY3JlYXRlZDogRGF0ZTtcbiAgICB1cGRhdGVkOiBEYXRlO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdERhdGVUaW1lOiBEYXRlO1xuICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBpbWFnZVBhdGg6IHN0cmluZztcbiAgICBpbWFnZVNpemU6IHN0cmluZztcbiAgICBwcmV2aWV3czogc3RyaW5nO1xuICAgIG9wdGlvbnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBQb3N0VGVtcGxhdGUge1xuICAgICAgICBsZXQgbSA9IG5ldyBQb3N0VGVtcGxhdGUoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY3JlYXRlZCkge20uY3JlYXRlZCA9IG5ldyBEYXRlKHByb3RvLmNyZWF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnVwZGF0ZWQpIHttLnVwZGF0ZWQgPSBuZXcgRGF0ZShwcm90by51cGRhdGVkKTt9XG4gICAgICAgIGlmIChwcm90by5wb3N0RGF0ZVRpbWUpIHttLnBvc3REYXRlVGltZSA9IG5ldyBEYXRlKHByb3RvLnBvc3REYXRlVGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlBvc3RUZW1wbGF0ZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZW1wbGF0ZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0ZW1wbGF0ZUlkJ10gPSB0aGlzLnRlbXBsYXRlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNyZWF0ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3JlYXRlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydjcmVhdGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNyZWF0ZWQgPyAodGhpcy5jcmVhdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy51cGRhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3VwZGF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudXBkYXRlZCA/ICh0aGlzLnVwZGF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudXBkYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdERhdGVUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3REYXRlVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0RGF0ZVRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdERhdGVUaW1lID8gKHRoaXMucG9zdERhdGVUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3REYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlUGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VQYXRoJ10gPSB0aGlzLmltYWdlUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlU2l6ZSddID0gdGhpcy5pbWFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEVudW1zLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBlbnVtIENhbGxUb0FjdGlvbkNhbGxUb0FjdGlvblR5cGUge1xuICAgIExFQVJOX01PUkUgPSAwLFxuICAgIEJPT0sgPSAxLFxuICAgIE9SREVSID0gMixcbiAgICBTSE9QID0gMyxcbiAgICBTSUdOX1VQID0gNCxcbiAgICBHRVRfT0ZGRVIgPSA1LFxuICAgIENBTEwgPSA2LFxufVxuXG5leHBvcnQgZW51bSBTb2NpYWxQb3N0RGVsZXRpb25TdGF0dXMge1xuICAgIE5PTkUgPSAwLFxuICAgIEZBSUxFRCA9IDEsXG4gICAgSU5fUFJPR1JFU1MgPSAyLFxufVxuXG5leHBvcnQgZW51bSBQb3N0aW5nU3RhdHVzIHtcbiAgICBQT1NUSU5HX0lOX1BST0dSRVNTID0gMCxcbiAgICBQT1NUSU5HX0ZBSUxFRCA9IDEsXG4gICAgUE9TVElOR19DT01QTEVURUQgPSAyLFxufVxuXG5leHBvcnQgZW51bSBTb2NpYWxQb3N0U2VydmljZSB7XG4gICAgVFdJVFRFUiA9IDAsXG4gICAgRkFDRUJPT0sgPSAxLFxuICAgIExJTktFRF9JTiA9IDIsXG4gICAgR09PR0xFX1BMVVMgPSAzLFxuICAgIEdPT0dMRV9NWV9CVVNJTkVTUyA9IDQsXG4gICAgVU5LTk9XTiA9IDUsXG4gICAgSU5TVEFHUkFNID0gNixcbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gRW51bXMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGVudW0gUmVtb3ZlUmVhc29uIHtcbiAgICBSRU1PVkVfUkVBU09OX0VESVQgPSAwLFxuICAgIFJFTU9WRV9SRUFTT05fREVMRVRFID0gMSxcbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FsbFRvQWN0aW9uIGltcGxlbWVudHMgaS5DYWxsVG9BY3Rpb25JbnRlcmZhY2Uge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGFjdGlvblR5cGU6IGUuQ2FsbFRvQWN0aW9uQ2FsbFRvQWN0aW9uVHlwZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENhbGxUb0FjdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IENhbGxUb0FjdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hY3Rpb25UeXBlKSB7bS5hY3Rpb25UeXBlID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5DYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlPihlLkNhbGxUb0FjdGlvbkNhbGxUb0FjdGlvblR5cGUsIHByb3RvLmFjdGlvblR5cGUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DYWxsVG9BY3Rpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VybCddID0gdGhpcy51cmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uVHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWN0aW9uVHlwZSddID0gdGhpcy5hY3Rpb25UeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yIGltcGxlbWVudHMgaS5FcnJvckludGVyZmFjZSB7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEVycm9yIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVycm9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVhc29uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWFzb24nXSA9IHRoaXMucmVhc29uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYXRlZ29yeSddID0gdGhpcy5jYXRlZ29yeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudCBpbXBsZW1lbnRzIGkuRXZlbnRJbnRlcmZhY2Uge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3RhcnREYXRldGltZTogRGF0ZTtcbiAgICBlbmREYXRldGltZTogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEV2ZW50IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRXZlbnQoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc3RhcnREYXRldGltZSkge20uc3RhcnREYXRldGltZSA9IG5ldyBEYXRlKHByb3RvLnN0YXJ0RGF0ZXRpbWUpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZERhdGV0aW1lKSB7bS5lbmREYXRldGltZSA9IG5ldyBEYXRlKHByb3RvLmVuZERhdGV0aW1lKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRXZlbnRJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGl0bGUnXSA9IHRoaXMudGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnREYXRldGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGFydERhdGV0aW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0RGF0ZXRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnREYXRldGltZSA/ICh0aGlzLnN0YXJ0RGF0ZXRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnREYXRldGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmREYXRldGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmREYXRldGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmREYXRldGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmREYXRldGltZSA/ICh0aGlzLmVuZERhdGV0aW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZERhdGV0aW1lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlUG9zdFN0YXR1cyBpbXBsZW1lbnRzIGkuU2NoZWR1bGVQb3N0U3RhdHVzSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0SWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlTGFiZWw6IHN0cmluZztcbiAgICBlcnJvcjogRXJyb3I7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTY2hlZHVsZVBvc3RTdGF0dXMge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVBvc3RTdGF0dXMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZXJyb3IpIHttLmVycm9yID0gRXJyb3IuZnJvbVByb3RvKHByb3RvLmVycm9yKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2NoZWR1bGVQb3N0U3RhdHVzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxQb3N0SWQnXSA9IHRoaXMuc29jaWFsUG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlTGFiZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VMYWJlbCddID0gdGhpcy5zb2NpYWxTZXJ2aWNlTGFiZWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3IgIT09IG51bGwpIHt0b1JldHVyblsnZXJyb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXJyb3IgPyAodGhpcy5lcnJvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lcnJvcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTb2NpYWxQb3N0IGltcGxlbWVudHMgaS5Tb2NpYWxQb3N0SW50ZXJmYWNlIHtcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG4gICAgc29jaWFsUG9zdElkOiBzdHJpbmc7XG4gICAgcG9zdFRleHQ6IHN0cmluZztcbiAgICBwb3N0ZWQ6IERhdGU7XG4gICAgaXNFcnJvcjogYm9vbGVhbjtcbiAgICBkZWxldGlvblN0YXR1czogZS5Tb2NpYWxQb3N0RGVsZXRpb25TdGF0dXM7XG4gICAgc2VydmljZTogZS5Tb2NpYWxQb3N0U2VydmljZTtcbiAgICBwZXJtYWxpbms6IHN0cmluZztcbiAgICBjcmVhdGVkOiBEYXRlO1xuICAgIHByb2ZpbGVVcmw6IHN0cmluZztcbiAgICBwcm9maWxlSW1hZ2VVcmw6IHN0cmluZztcbiAgICBzY2hlZHVsZWQ6IERhdGU7XG4gICAgc3RhdHVzOiBlLlBvc3RpbmdTdGF0dXM7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRJZDogc3RyaW5nO1xuICAgIHNvY2lhbFNlcnZpY2VJZDogc3RyaW5nO1xuICAgIGV2ZW50OiBFdmVudDtcbiAgICBjYWxsVG9BY3Rpb246IENhbGxUb0FjdGlvbjtcbiAgICB2aWRlb1VybDogc3RyaW5nO1xuICAgIGVycm9yOiBFcnJvcjtcbiAgICBpbWFnZVVybHM6IHN0cmluZ1tdO1xuICAgIGxpbmtQcmV2aWV3SW1hZ2VVcmw6IHN0cmluZztcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvblBvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU29jaWFsUG9zdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNvY2lhbFBvc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdGVkKSB7bS5wb3N0ZWQgPSBuZXcgRGF0ZShwcm90by5wb3N0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLmRlbGV0aW9uU3RhdHVzKSB7bS5kZWxldGlvblN0YXR1cyA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuU29jaWFsUG9zdERlbGV0aW9uU3RhdHVzPihlLlNvY2lhbFBvc3REZWxldGlvblN0YXR1cywgcHJvdG8uZGVsZXRpb25TdGF0dXMpO31cbiAgICAgICAgaWYgKHByb3RvLnNlcnZpY2UpIHttLnNlcnZpY2UgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNvY2lhbFBvc3RTZXJ2aWNlPihlLlNvY2lhbFBvc3RTZXJ2aWNlLCBwcm90by5zZXJ2aWNlKTt9XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVkKSB7bS5jcmVhdGVkID0gbmV3IERhdGUocHJvdG8uY3JlYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8uc2NoZWR1bGVkKSB7bS5zY2hlZHVsZWQgPSBuZXcgRGF0ZShwcm90by5zY2hlZHVsZWQpO31cbiAgICAgICAgaWYgKHByb3RvLnN0YXR1cykge20uc3RhdHVzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Qb3N0aW5nU3RhdHVzPihlLlBvc3RpbmdTdGF0dXMsIHByb3RvLnN0YXR1cyk7fVxuICAgICAgICBpZiAocHJvdG8uZXZlbnQpIHttLmV2ZW50ID0gRXZlbnQuZnJvbVByb3RvKHByb3RvLmV2ZW50KTt9XG4gICAgICAgIGlmIChwcm90by5jYWxsVG9BY3Rpb24pIHttLmNhbGxUb0FjdGlvbiA9IENhbGxUb0FjdGlvbi5mcm9tUHJvdG8ocHJvdG8uY2FsbFRvQWN0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5lcnJvcikge20uZXJyb3IgPSBFcnJvci5mcm9tUHJvdG8ocHJvdG8uZXJyb3IpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Tb2NpYWxQb3N0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsUG9zdElkJ10gPSB0aGlzLnNvY2lhbFBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3RlZCAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdGVkID8gKHRoaXMucG9zdGVkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3RlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0Vycm9yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpc0Vycm9yJ10gPSB0aGlzLmlzRXJyb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRpb25TdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RlbGV0aW9uU3RhdHVzJ10gPSB0aGlzLmRlbGV0aW9uU3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlcnZpY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlcnZpY2UnXSA9IHRoaXMuc2VydmljZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wZXJtYWxpbmsgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Blcm1hbGluayddID0gdGhpcy5wZXJtYWxpbms7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NyZWF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZCA/ICh0aGlzLmNyZWF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3JlYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9maWxlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcm9maWxlVXJsJ10gPSB0aGlzLnByb2ZpbGVVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvZmlsZUltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwcm9maWxlSW1hZ2VVcmwnXSA9IHRoaXMucHJvZmlsZUltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNjaGVkdWxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zY2hlZHVsZWQgIT09IG51bGwpIHt0b1JldHVyblsnc2NoZWR1bGVkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNjaGVkdWxlZCA/ICh0aGlzLnNjaGVkdWxlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zY2hlZHVsZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXMnXSA9IHRoaXMuc3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVVybCddID0gdGhpcy5pbWFnZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlcm5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXJuYW1lJ10gPSB0aGlzLnVzZXJuYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcmVudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJlbnRJZCddID0gdGhpcy5wYXJlbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZCddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXZlbnQgIT09IG51bGwpIHt0b1JldHVyblsnZXZlbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZXZlbnQgPyAodGhpcy5ldmVudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5ldmVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxsVG9BY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FsbFRvQWN0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NhbGxUb0FjdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYWxsVG9BY3Rpb24gPyAodGhpcy5jYWxsVG9BY3Rpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2FsbFRvQWN0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZGVvVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb1VybCddID0gdGhpcy52aWRlb1VybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lcnJvciAhPT0gbnVsbCkge3RvUmV0dXJuWydlcnJvciddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lcnJvciA/ICh0aGlzLmVycm9yIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVycm9yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlVXJscyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmxzJ10gPSB0aGlzLmltYWdlVXJsczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5saW5rUHJldmlld0ltYWdlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsaW5rUHJldmlld0ltYWdlVXJsJ10gPSB0aGlzLmxpbmtQcmV2aWV3SW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0SWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvblBvc3RJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTb2NpYWxQb3N0RGF0YSBpbXBsZW1lbnRzIGkuU29jaWFsUG9zdERhdGFJbnRlcmZhY2Uge1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBzY2hlZHVsZUZvcjogRGF0ZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNvY2lhbFBvc3REYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU29jaWFsUG9zdERhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc2NoZWR1bGVGb3IpIHttLnNjaGVkdWxlRm9yID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVGb3IpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Tb2NpYWxQb3N0RGF0YUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3N0VGV4dCddID0gdGhpcy5wb3N0VGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmwnXSA9IHRoaXMuaW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZWR1bGVGb3IgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc2NoZWR1bGVGb3IgIT09IG51bGwpIHt0b1JldHVyblsnc2NoZWR1bGVGb3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2NoZWR1bGVGb3IgPyAodGhpcy5zY2hlZHVsZUZvciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zY2hlZHVsZUZvcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgZSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtU3RyaW5nVG9WYWx1ZTxFPihlbnVtUmVmOiBhbnksIHZhbHVlOiBzdHJpbmcpOiBFIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGVudW1SZWZbdmFsdWVdO1xufVxuXG5leHBvcnQgY2xhc3MgRmFjZWJvb2tQb3N0U3RhdHMgaW1wbGVtZW50cyBpLkZhY2Vib29rUG9zdFN0YXRzSW50ZXJmYWNlIHtcbiAgICBjb21tZW50Q291bnQ6IG51bWJlcjtcbiAgICBzaGFyZUNvdW50OiBudW1iZXI7XG4gICAgbGlrZUNvdW50OiBudW1iZXI7XG4gICAgaGFzTGlrZTogYm9vbGVhbjtcbiAgICBjYW5MaWtlOiBib29sZWFuO1xuICAgIHJlYWN0aW9uczogbnVtYmVyO1xuICAgIHBlb3BsZVJlYWNoZWQ6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEZhY2Vib29rUG9zdFN0YXRzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRmFjZWJvb2tQb3N0U3RhdHMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29tbWVudENvdW50KSB7bS5jb21tZW50Q291bnQgPSBwYXJzZUludChwcm90by5jb21tZW50Q291bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5zaGFyZUNvdW50KSB7bS5zaGFyZUNvdW50ID0gcGFyc2VJbnQocHJvdG8uc2hhcmVDb3VudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmxpa2VDb3VudCkge20ubGlrZUNvdW50ID0gcGFyc2VJbnQocHJvdG8ubGlrZUNvdW50LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucmVhY3Rpb25zKSB7bS5yZWFjdGlvbnMgPSBwYXJzZUludChwcm90by5yZWFjdGlvbnMsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5wZW9wbGVSZWFjaGVkKSB7bS5wZW9wbGVSZWFjaGVkID0gcGFyc2VJbnQocHJvdG8ucGVvcGxlUmVhY2hlZCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5GYWNlYm9va1Bvc3RTdGF0c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1lbnRDb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tbWVudENvdW50J10gPSB0aGlzLmNvbW1lbnRDb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaGFyZUNvdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzaGFyZUNvdW50J10gPSB0aGlzLnNoYXJlQ291bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGlrZUNvdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydsaWtlQ291bnQnXSA9IHRoaXMubGlrZUNvdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc0xpa2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc0xpa2UnXSA9IHRoaXMuaGFzTGlrZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5MaWtlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYW5MaWtlJ10gPSB0aGlzLmNhbkxpa2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVhY3Rpb25zICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWFjdGlvbnMnXSA9IHRoaXMucmVhY3Rpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBlb3BsZVJlYWNoZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Blb3BsZVJlYWNoZWQnXSA9IHRoaXMucGVvcGxlUmVhY2hlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTb2NpYWxQb3N0U3RhdHMgaW1wbGVtZW50cyBpLlNvY2lhbFBvc3RTdGF0c0ludGVyZmFjZSB7XG4gICAgaW50ZXJuYWxQb3N0SWQ6IHN0cmluZztcbiAgICBmYWNlYm9va1Bvc3RTdGF0czogRmFjZWJvb2tQb3N0U3RhdHM7XG4gICAgdHdpdHRlclBvc3RTdGF0czogVHdpdHRlclBvc3RTdGF0cztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNvY2lhbFBvc3RTdGF0cyB7XG4gICAgICAgIGxldCBtID0gbmV3IFNvY2lhbFBvc3RTdGF0cygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5mYWNlYm9va1Bvc3RTdGF0cykge20uZmFjZWJvb2tQb3N0U3RhdHMgPSBGYWNlYm9va1Bvc3RTdGF0cy5mcm9tUHJvdG8ocHJvdG8uZmFjZWJvb2tQb3N0U3RhdHMpO31cbiAgICAgICAgaWYgKHByb3RvLnR3aXR0ZXJQb3N0U3RhdHMpIHttLnR3aXR0ZXJQb3N0U3RhdHMgPSBUd2l0dGVyUG9zdFN0YXRzLmZyb21Qcm90byhwcm90by50d2l0dGVyUG9zdFN0YXRzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU29jaWFsUG9zdFN0YXRzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludGVybmFsUG9zdElkJ10gPSB0aGlzLmludGVybmFsUG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZhY2Vib29rUG9zdFN0YXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZhY2Vib29rUG9zdFN0YXRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZhY2Vib29rUG9zdFN0YXRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZhY2Vib29rUG9zdFN0YXRzID8gKHRoaXMuZmFjZWJvb2tQb3N0U3RhdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmFjZWJvb2tQb3N0U3RhdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHdpdHRlclBvc3RTdGF0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50d2l0dGVyUG9zdFN0YXRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3R3aXR0ZXJQb3N0U3RhdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudHdpdHRlclBvc3RTdGF0cyA/ICh0aGlzLnR3aXR0ZXJQb3N0U3RhdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudHdpdHRlclBvc3RTdGF0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUd2l0dGVyUG9zdFN0YXRzIGltcGxlbWVudHMgaS5Ud2l0dGVyUG9zdFN0YXRzSW50ZXJmYWNlIHtcbiAgICBmYXZvdXJpdGVzOiBudW1iZXI7XG4gICAgaGFzRmF2b3VyaXRlZDogYm9vbGVhbjtcbiAgICByZXR3ZWV0czogbnVtYmVyO1xuICAgIGhhc1JldHdlZXRlZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFR3aXR0ZXJQb3N0U3RhdHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBUd2l0dGVyUG9zdFN0YXRzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmZhdm91cml0ZXMpIHttLmZhdm91cml0ZXMgPSBwYXJzZUludChwcm90by5mYXZvdXJpdGVzLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8ucmV0d2VldHMpIHttLnJldHdlZXRzID0gcGFyc2VJbnQocHJvdG8ucmV0d2VldHMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVHdpdHRlclBvc3RTdGF0c0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZhdm91cml0ZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Zhdm91cml0ZXMnXSA9IHRoaXMuZmF2b3VyaXRlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNGYXZvdXJpdGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNGYXZvdXJpdGVkJ10gPSB0aGlzLmhhc0Zhdm91cml0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0d2VldHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JldHdlZXRzJ10gPSB0aGlzLnJldHdlZXRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc1JldHdlZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzUmV0d2VldGVkJ10gPSB0aGlzLmhhc1JldHdlZXRlZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpZWxkTWFzayB9IGZyb20gJy4vZmllbGQtbWFzayc7XG5pbXBvcnQgeyBMb2NhdGlvbiwgTXVsdGlsb2NhdGlvblBvc3QsIE11bHRpbG9jYXRpb25Qb3N0RXJyb3IgfSBmcm9tICcuL211bHRpbG9jYXRpb24tcG9zdCc7XG5pbXBvcnQgeyBQb3N0VGVtcGxhdGUgfSBmcm9tICcuL3Bvc3QtdGVtcGxhdGVzJztcbmltcG9ydCB7IFNvY2lhbFBvc3QsIFNvY2lhbFBvc3REYXRhLCBTY2hlZHVsZVBvc3RTdGF0dXMgfSBmcm9tICcuL3NvY2lhbC1wb3N0cyc7XG5pbXBvcnQgeyBTb2NpYWxQb3N0U3RhdHMgfSBmcm9tICcuL3NvY2lhbC1wb3N0LXN0YXRzJztcbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG1lZGlhOiBzdHJpbmdbXTtcbiAgICBzY2hlZHVsZWREYXRlOiBEYXRlO1xuICAgIGxvY2F0aW9uczogTG9jYXRpb25bXTtcbiAgICBnaWZzOiBzdHJpbmdbXTtcbiAgICB2aWRlb3M6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNjaGVkdWxlZERhdGUpIHttLnNjaGVkdWxlZERhdGUgPSBuZXcgRGF0ZShwcm90by5zY2hlZHVsZWREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5sb2NhdGlvbnMpIHttLmxvY2F0aW9ucyA9IHByb3RvLmxvY2F0aW9ucy5tYXAoTG9jYXRpb24uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHQnXSA9IHRoaXMudGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWEnXSA9IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zY2hlZHVsZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2NoZWR1bGVkRGF0ZSA/ICh0aGlzLnNjaGVkdWxlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sb2NhdGlvbnMgPyAodGhpcy5sb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubG9jYXRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdpZnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dpZnMnXSA9IHRoaXMuZ2lmczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvcyddID0gdGhpcy52aWRlb3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcG9zdDogTXVsdGlsb2NhdGlvblBvc3Q7XG4gICAgZXJyb3JzOiBNdWx0aWxvY2F0aW9uUG9zdEVycm9yW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0KSB7bS5wb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLnBvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLmVycm9ycykge20uZXJyb3JzID0gcHJvdG8uZXJyb3JzLm1hcChNdWx0aWxvY2F0aW9uUG9zdEVycm9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3QgIT09IG51bGwpIHt0b1JldHVyblsncG9zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0ID8gKHRoaXMucG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lcnJvcnMgIT09IG51bGwpIHt0b1JldHVyblsnZXJyb3JzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVycm9ycyA/ICh0aGlzLmVycm9ycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lcnJvcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdERhdGVUaW1lOiBEYXRlO1xuICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBpbWFnZVBhdGg6IHN0cmluZztcbiAgICBpbWFnZVNpemU6IHN0cmluZztcbiAgICBwcmV2aWV3czogc3RyaW5nO1xuICAgIG9wdGlvbnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0RGF0ZVRpbWUpIHttLnBvc3REYXRlVGltZSA9IG5ldyBEYXRlKHByb3RvLnBvc3REYXRlVGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3N0VGV4dCddID0gdGhpcy5wb3N0VGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0RGF0ZVRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdERhdGVUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3REYXRlVGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0RGF0ZVRpbWUgPyAodGhpcy5wb3N0RGF0ZVRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdERhdGVUaW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnbWJQb3N0Q3VzdG9taXphdGlvbiddID0gdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VVcmwnXSA9IHRoaXMuaW1hZ2VVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VQYXRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbWFnZVBhdGgnXSA9IHRoaXMuaW1hZ2VQYXRoO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VTaXplJ10gPSB0aGlzLmltYWdlU2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2aWV3cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmlld3MnXSA9IHRoaXMucHJldmlld3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3B0aW9ucyddID0gdGhpcy5vcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpZGVvVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aWRlb1VybCddID0gdGhpcy52aWRlb1VybDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZUZpbHRlciBpbXBsZW1lbnRzIGkuRGF0ZVJhbmdlRmlsdGVySW50ZXJmYWNlIHtcbiAgICBiZWdpblJhbmdlOiBEYXRlO1xuICAgIGVuZFJhbmdlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGF0ZVJhbmdlRmlsdGVyIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGF0ZVJhbmdlRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmJlZ2luUmFuZ2UpIHttLmJlZ2luUmFuZ2UgPSBuZXcgRGF0ZShwcm90by5iZWdpblJhbmdlKTt9XG4gICAgICAgIGlmIChwcm90by5lbmRSYW5nZSkge20uZW5kUmFuZ2UgPSBuZXcgRGF0ZShwcm90by5lbmRSYW5nZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRhdGVSYW5nZUZpbHRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZ2luUmFuZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmVnaW5SYW5nZSAhPT0gbnVsbCkge3RvUmV0dXJuWydiZWdpblJhbmdlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmJlZ2luUmFuZ2UgPyAodGhpcy5iZWdpblJhbmdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJlZ2luUmFuZ2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kUmFuZ2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kUmFuZ2UgIT09IG51bGwpIHt0b1JldHVyblsnZW5kUmFuZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kUmFuZ2UgPyAodGhpcy5lbmRSYW5nZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmRSYW5nZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uSWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvbklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgdGVtcGxhdGVJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVTb2NpYWxQb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHNvY2lhbFBvc3RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlU29jaWFsUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVTb2NpYWxQb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxQb3N0SWQnXSA9IHRoaXMuc29jaWFsUG9zdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgbWVkaWE6IHN0cmluZ1tdO1xuICAgIHNjaGVkdWxlZERhdGU6IERhdGU7XG4gICAgZmllbGRNYXNrOiBGaWVsZE1hc2s7XG4gICAgZ2lmczogc3RyaW5nW107XG4gICAgdmlkZW9zOiBzdHJpbmdbXTtcbiAgICBsb2NhdGlvbnM6IExvY2F0aW9uW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zY2hlZHVsZWREYXRlKSB7bS5zY2hlZHVsZWREYXRlID0gbmV3IERhdGUocHJvdG8uc2NoZWR1bGVkRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8uZmllbGRNYXNrKSB7bS5maWVsZE1hc2sgPSBGaWVsZE1hc2suZnJvbVByb3RvKHByb3RvLmZpZWxkTWFzayk7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uSWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRleHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RleHQnXSA9IHRoaXMudGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVkaWEnXSA9IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2NoZWR1bGVkRGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zY2hlZHVsZWREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NjaGVkdWxlZERhdGUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc2NoZWR1bGVkRGF0ZSA/ICh0aGlzLnNjaGVkdWxlZERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc2NoZWR1bGVkRGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZE1hc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZmllbGRNYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpZWxkTWFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWVsZE1hc2sgPyAodGhpcy5maWVsZE1hc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmllbGRNYXNrO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdpZnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dpZnMnXSA9IHRoaXMuZ2lmczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ZpZGVvcyddID0gdGhpcy52aWRlb3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmxvY2F0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydsb2NhdGlvbnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubG9jYXRpb25zID8gKHRoaXMubG9jYXRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmxvY2F0aW9uczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSBpbXBsZW1lbnRzIGkuRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3Q6IE11bHRpbG9jYXRpb25Qb3N0O1xuICAgIGVycm9yczogTXVsdGlsb2NhdGlvblBvc3RFcnJvcltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0KSB7bS5wb3N0ID0gTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKHByb3RvLnBvc3QpO31cbiAgICAgICAgaWYgKHByb3RvLmVycm9ycykge20uZXJyb3JzID0gcHJvdG8uZXJyb3JzLm1hcChNdWx0aWxvY2F0aW9uUG9zdEVycm9yLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdCA/ICh0aGlzLnBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lcnJvcnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZXJyb3JzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Vycm9ycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lcnJvcnMgPyAodGhpcy5lcnJvcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZXJyb3JzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycyBpbXBsZW1lbnRzIGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIHtcbiAgICBkYXRlUmFuZ2U6IERhdGVSYW5nZUZpbHRlcjtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kYXRlUmFuZ2UpIHttLmRhdGVSYW5nZSA9IERhdGVSYW5nZUZpbHRlci5mcm9tUHJvdG8ocHJvdG8uZGF0ZVJhbmdlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0ZVJhbmdlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVSYW5nZSAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRlUmFuZ2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZGF0ZVJhbmdlID8gKHRoaXMuZGF0ZVJhbmdlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGVSYW5nZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludGVybmFsUG9zdElkczogc3RyaW5nW107XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnRlcm5hbFBvc3RJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludGVybmFsUG9zdElkcyddID0gdGhpcy5pbnRlcm5hbFBvc3RJZHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0U3RhdHM6IFNvY2lhbFBvc3RTdGF0c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29jaWFsUG9zdFN0YXRzKSB7bS5zb2NpYWxQb3N0U3RhdHMgPSBwcm90by5zb2NpYWxQb3N0U3RhdHMubWFwKFNvY2lhbFBvc3RTdGF0cy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdFN0YXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RTdGF0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0U3RhdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdFN0YXRzID8gKHRoaXMuc29jaWFsUG9zdFN0YXRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RTdGF0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBpbnRlcm5hbFBvc3RJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0lkJ10gPSB0aGlzLmJ1c2luZXNzSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW50ZXJuYWxQb3N0SWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnRlcm5hbFBvc3RJZHMnXSA9IHRoaXMuaW50ZXJuYWxQb3N0SWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3RzKSB7bS5zb2NpYWxQb3N0cyA9IHByb3RvLnNvY2lhbFBvc3RzLm1hcChTb2NpYWxQb3N0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RzID8gKHRoaXMuc29jaWFsUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJyYW5kSWQ6IHN0cmluZztcbiAgICBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtdWx0aWxvY2F0aW9uUG9zdDogTXVsdGlsb2NhdGlvblBvc3Q7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tdWx0aWxvY2F0aW9uUG9zdCkge20ubXVsdGlsb2NhdGlvblBvc3QgPSBNdWx0aWxvY2F0aW9uUG9zdC5mcm9tUHJvdG8ocHJvdG8ubXVsdGlsb2NhdGlvblBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgIT09IG51bGwpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvblBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubXVsdGlsb2NhdGlvblBvc3QgPyAodGhpcy5tdWx0aWxvY2F0aW9uUG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tdWx0aWxvY2F0aW9uUG9zdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlbXBsYXRlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RlbXBsYXRlSWQnXSA9IHRoaXMudGVtcGxhdGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBvc3RUZW1wbGF0ZTogUG9zdFRlbXBsYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0VGVtcGxhdGUpIHttLnBvc3RUZW1wbGF0ZSA9IFBvc3RUZW1wbGF0ZS5mcm9tUHJvdG8ocHJvdG8ucG9zdFRlbXBsYXRlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGVtcGxhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdFRlbXBsYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3RUZW1wbGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0VGVtcGxhdGUgPyAodGhpcy5wb3N0VGVtcGxhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdFRlbXBsYXRlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICBzb2NpYWxTZXJ2aWNlSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1c2luZXNzSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1c2luZXNzSWQnXSA9IHRoaXMuYnVzaW5lc3NJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxTZXJ2aWNlSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzb2NpYWxTZXJ2aWNlSWRzJ10gPSB0aGlzLnNvY2lhbFNlcnZpY2VJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBjb3VudDogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0U2NoZWR1bGVkUG9zdENvdW50UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb3VudCkge20uY291bnQgPSBwYXJzZUludChwcm90by5jb3VudCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudCddID0gdGhpcy5jb3VudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgc3RhcnREYXRlOiBEYXRlO1xuICAgIGVuZERhdGU6IERhdGU7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXJ0RGF0ZSkge20uc3RhcnREYXRlID0gbmV3IERhdGUocHJvdG8uc3RhcnREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5lbmREYXRlKSB7bS5lbmREYXRlID0gbmV3IERhdGUocHJvdG8uZW5kRGF0ZSk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnREYXRlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0RGF0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydERhdGUgPyAodGhpcy5zdGFydERhdGUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnREYXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZERhdGUgPyAodGhpcy5lbmREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJzb3InXSA9IHRoaXMuY3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYWdlU2l6ZSddID0gdGhpcy5wYWdlU2l6ZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIG11bHRpbG9jYXRpb25Qb3N0czogTXVsdGlsb2NhdGlvblBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgICBmYWlsZWRTb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tdWx0aWxvY2F0aW9uUG9zdHMpIHttLm11bHRpbG9jYXRpb25Qb3N0cyA9IHByb3RvLm11bHRpbG9jYXRpb25Qb3N0cy5tYXAoTXVsdGlsb2NhdGlvblBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5mYWlsZWRTb2NpYWxQb3N0cykge20uZmFpbGVkU29jaWFsUG9zdHMgPSBwcm90by5mYWlsZWRTb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvblBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyA/ICh0aGlzLm11bHRpbG9jYXRpb25Qb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tdWx0aWxvY2F0aW9uUG9zdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydmYWlsZWRTb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5mYWlsZWRTb2NpYWxQb3N0cyA/ICh0aGlzLmZhaWxlZFNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZhaWxlZFNvY2lhbFBvc3RzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcG9zdFRlbXBsYXRlOiBQb3N0VGVtcGxhdGVbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0UG9zdFRlbXBsYXRlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3RUZW1wbGF0ZSkge20ucG9zdFRlbXBsYXRlID0gcHJvdG8ucG9zdFRlbXBsYXRlLm1hcChQb3N0VGVtcGxhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3RUZW1wbGF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0VGVtcGxhdGUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdFRlbXBsYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3RUZW1wbGF0ZSA/ICh0aGlzLnBvc3RUZW1wbGF0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0VGVtcGxhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBlbmQ6IERhdGU7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdO1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGFydCkge20uc3RhcnQgPSBuZXcgRGF0ZShwcm90by5zdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8uZW5kKSB7bS5lbmQgPSBuZXcgRGF0ZShwcm90by5lbmQpO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGFydCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGFydCAhPT0gbnVsbCkge3RvUmV0dXJuWydzdGFydCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zdGFydCA/ICh0aGlzLnN0YXJ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnN0YXJ0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmQgIT09IG51bGwpIHt0b1JldHVyblsnZW5kJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVuZCA/ICh0aGlzLmVuZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5lbmQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsU2VydmljZUlkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsU2VydmljZUlkcyddID0gdGhpcy5zb2NpYWxTZXJ2aWNlSWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhZ3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RhZ3MnXSA9IHRoaXMudGFnczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0czogU29jaWFsUG9zdFtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0U29jaWFsUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFBvc3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3RzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNvY2lhbFBvc3RzID8gKHRoaXMuc29jaWFsUG9zdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2UgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc29jaWFsUG9zdHM6IFNvY2lhbFBvc3RbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0cykge20uc29jaWFsUG9zdHMgPSBwcm90by5zb2NpYWxQb3N0cy5tYXAoU29jaWFsUG9zdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5QYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydzb2NpYWxQb3N0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0cyA/ICh0aGlzLnNvY2lhbFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnNvY2lhbFBvc3RzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QgaW1wbGVtZW50cyBpLlBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBjdXJzb3I6IHN0cmluZztcbiAgICBmaWx0ZXJzOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdEZpbHRlcnM7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsdGVycykge20uZmlsdGVycyA9IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0RmlsdGVycy5mcm9tUHJvdG8ocHJvdG8uZmlsdGVycyk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnZVNpemUpIHttLnBhZ2VTaXplID0gcGFyc2VJbnQocHJvdG8ucGFnZVNpemUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ZpbHRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmlsdGVycyA/ICh0aGlzLmZpbHRlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZmlsdGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCBpbXBsZW1lbnRzIGkuUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgcmVhc29uOiBlLlJlbW92ZVJlYXNvbjtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvbklkOiBzdHJpbmc7XG4gICAgbG9jYXRpb25zOiBMb2NhdGlvbltdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucmVhc29uKSB7bS5yZWFzb24gPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlJlbW92ZVJlYXNvbj4oZS5SZW1vdmVSZWFzb24sIHByb3RvLnJlYXNvbik7fVxuICAgICAgICBpZiAocHJvdG8ubG9jYXRpb25zKSB7bS5sb2NhdGlvbnMgPSBwcm90by5sb2NhdGlvbnMubWFwKExvY2F0aW9uLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWFzb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlYXNvbiddID0gdGhpcy5yZWFzb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvbklkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25JZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sb2NhdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubG9jYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2xvY2F0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5sb2NhdGlvbnMgPyAodGhpcy5sb2NhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubG9jYXRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlUG9zdFJlcXVlc3QgaW1wbGVtZW50cyBpLlNjaGVkdWxlUG9zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNvY2lhbFBvc3Q6IFNvY2lhbFBvc3REYXRhO1xuICAgIHNvY2lhbFNlcnZpY2VJZHM6IHN0cmluZ1tdO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNjaGVkdWxlUG9zdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVBvc3RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnNvY2lhbFBvc3QpIHttLnNvY2lhbFBvc3QgPSBTb2NpYWxQb3N0RGF0YS5mcm9tUHJvdG8ocHJvdG8uc29jaWFsUG9zdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxQb3N0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNvY2lhbFBvc3QgIT09IG51bGwpIHt0b1JldHVyblsnc29jaWFsUG9zdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5zb2NpYWxQb3N0ID8gKHRoaXMuc29jaWFsUG9zdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zb2NpYWxQb3N0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNvY2lhbFNlcnZpY2VJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbFNlcnZpY2VJZHMnXSA9IHRoaXMuc29jaWFsU2VydmljZUlkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlUG9zdFJlc3BvbnNlIGltcGxlbWVudHMgaS5TY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzZXM6IFNjaGVkdWxlUG9zdFN0YXR1c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVQb3N0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVBvc3RSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoU2NoZWR1bGVQb3N0U3RhdHVzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlUG9zdFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhdHVzZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhdHVzZXMgPyAodGhpcy5zdGF0dXNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGF0dXNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBzb2NpYWxQb3N0OiBTb2NpYWxQb3N0RGF0YTtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBidXNpbmVzc0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zb2NpYWxQb3N0KSB7bS5zb2NpYWxQb3N0ID0gU29jaWFsUG9zdERhdGEuZnJvbVByb3RvKHByb3RvLnNvY2lhbFBvc3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsUG9zdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zb2NpYWxQb3N0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NvY2lhbFBvc3QnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc29jaWFsUG9zdCA/ICh0aGlzLnNvY2lhbFBvc3QgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc29jaWFsUG9zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5TY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3RhdHVzZXM6IFNjaGVkdWxlUG9zdFN0YXR1c1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2NoZWR1bGVUb0FsbFBhZ2VzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoU2NoZWR1bGVQb3N0U3RhdHVzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdHVzZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhdHVzZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3RhdHVzZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhdHVzZXMgPyAodGhpcy5zdGF0dXNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGF0dXNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHRlbXBsYXRlSWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHBvc3RUZXh0OiBzdHJpbmc7XG4gICAgcG9zdERhdGVUaW1lOiBEYXRlO1xuICAgIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmc7XG4gICAgaW1hZ2VVcmw6IHN0cmluZztcbiAgICBpbWFnZVBhdGg6IHN0cmluZztcbiAgICBpbWFnZVNpemU6IHN0cmluZztcbiAgICBwcmV2aWV3czogc3RyaW5nO1xuICAgIG9wdGlvbnM6IHN0cmluZ1tdO1xuICAgIHZpZGVvVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wb3N0RGF0ZVRpbWUpIHttLnBvc3REYXRlVGltZSA9IG5ldyBEYXRlKHByb3RvLnBvc3REYXRlVGltZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVtcGxhdGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGVtcGxhdGVJZCddID0gdGhpcy50ZW1wbGF0ZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpdGxlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0aXRsZSddID0gdGhpcy50aXRsZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncG9zdFRleHQnXSA9IHRoaXMucG9zdFRleHQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucG9zdERhdGVUaW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBvc3REYXRlVGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydwb3N0RGF0ZVRpbWUnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucG9zdERhdGVUaW1lID8gKHRoaXMucG9zdERhdGVUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBvc3REYXRlVGltZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2VVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlVXJsJ10gPSB0aGlzLmltYWdlVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlUGF0aCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW1hZ2VQYXRoJ10gPSB0aGlzLmltYWdlUGF0aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbWFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ltYWdlU2l6ZSddID0gdGhpcy5pbWFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndmlkZW9VcmwnXSA9IHRoaXMudmlkZW9Vcmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jcmVhdGVCaW5kaW5nKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEVudmlyb25tZW50IH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaG9zdDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2h0dHBzSG9zdDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSkge1xuICAgIH1cblxuICAgIGhvc3QoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2hvc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ob3N0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkxPQ0FMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnc29jaWFsLXBvc3QudmVuZGFzdGEtbG9jYWwuY29tJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuVEVTVDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkRFTU86XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9ICdzb2NpYWwtcG9zdHMtZGVtby5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuUFJPRDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJ3NvY2lhbC1wb3N0cy1wcm9kLmFwaWdhdGV3YXkuY28nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3N0O1xuICAgIH1cblxuICAgIGh0dHBzSG9zdCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5faHR0cHNIb3N0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cHNIb3N0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkxPQ0FMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdzb2NpYWwtcG9zdC52ZW5kYXN0YS1sb2NhbC5jb20nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5URVNUOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5ERU1POlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdzb2NpYWwtcG9zdHMtYXBpLWRlbW8uYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LlBST0Q6XG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cHNIb3N0ID0gJ3NvY2lhbC1wb3N0cy1hcGktcHJvZC5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cHNIb3N0O1xuICAgIH1cblxuICAgIGhvc3RXaXRoU2NoZW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNjaGVtZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVudmlyb25tZW50KCkgPT09IEVudmlyb25tZW50LkxPQ0FMID8gJ2h0dHA6Ly8nIDogJ2h0dHBzOi8vJztcbiAgICAgICAgcmV0dXJuIHNjaGVtZSArIHRoaXMuaG9zdCgpXG4gICAgfVxuXG4gICAgaHR0cHNIb3N0V2l0aFNjaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpID09PSBFbnZpcm9ubWVudC5MT0NBTCA/ICdodHRwOi8vJyA6ICdodHRwczovLyc7XG4gICAgICAgIHJldHVybiBzY2hlbWUgKyB0aGlzLmh0dHBzSG9zdCgpXG4gICAgfVxufVxuIiwiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBBUEkgU2VydmljZS5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgICAgIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3QsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0LFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3QsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0LFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXNwb25zZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVxdWVzdCxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVzcG9uc2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3QsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlLFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBMaXN0U29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgU2NoZWR1bGVQb3N0UmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBTb2NpYWxQb3N0c0FwaVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGhvc3RTZXJ2aWNlOiBIb3N0U2VydmljZSkge1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBpT3B0aW9ucygpOiB7aGVhZGVyczogSHR0cEhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbn0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxpc3QocjogTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCB8IExpc3RTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxMaXN0U29jaWFsUG9zdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPExpc3RTb2NpYWxQb3N0c1JlcXVlc3Q+cikgOiBuZXcgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9MaXN0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gTGlzdFNvY2lhbFBvc3RzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBkZWxldGVTb2NpYWxQb3N0KHI6IERlbGV0ZVNvY2lhbFBvc3RSZXF1ZXN0IHwgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8RGVsZXRlU29jaWFsUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8RGVsZXRlU29jaWFsUG9zdFJlcXVlc3Q+cikgOiBuZXcgRGVsZXRlU29jaWFsUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9EZWxldGVTb2NpYWxQb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHsuLi50aGlzLmFwaU9wdGlvbnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICAgIH1cbiAgICBzY2hlZHVsZVRvQWxsUGFnZXMocjogU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdCB8IFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxTY2hlZHVsZVRvQWxsUGFnZXNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFNjaGVkdWxlVG9BbGxQYWdlc1JlcXVlc3Q+cikgOiBuZXcgU2NoZWR1bGVUb0FsbFBhZ2VzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNjaGVkdWxlVG9BbGxQYWdlc1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9TY2hlZHVsZVRvQWxsUGFnZXNcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBTY2hlZHVsZVRvQWxsUGFnZXNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHNjaGVkdWxlKHI6IFNjaGVkdWxlUG9zdFJlcXVlc3QgfCBTY2hlZHVsZVBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxTY2hlZHVsZVBvc3RSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8U2NoZWR1bGVQb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxTY2hlZHVsZVBvc3RSZXF1ZXN0PnIpIDogbmV3IFNjaGVkdWxlUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY2hlZHVsZVBvc3RSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvU2NoZWR1bGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBTY2hlZHVsZVBvc3RSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldE11bHRpU29jaWFsUG9zdHMocjogR2V0TXVsdGlTb2NpYWxQb3N0c1JlcXVlc3QgfCBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdD5yKSA6IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuU29jaWFsUG9zdHMvR2V0TXVsdGlTb2NpYWxQb3N0c1wiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldE11bHRpU29jaWFsUG9zdHNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldE11bHRpU29jaWFsUG9zdFN0YXRzKHI6IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdCB8IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0TXVsdGlTb2NpYWxQb3N0U3RhdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVxdWVzdD5yKSA6IG5ldyBHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9HZXRNdWx0aVNvY2lhbFBvc3RTdGF0c1wiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEdldE11bHRpU29jaWFsUG9zdFN0YXRzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBnZXRTY2hlZHVsZWRQb3N0Q291bnQocjogR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdCB8IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSAoKDxHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Q+cikgOiBuZXcgR2V0U2NoZWR1bGVkUG9zdENvdW50UmVxdWVzdChyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Tb2NpYWxQb3N0cy9HZXRTY2hlZHVsZWRQb3N0Q291bnRcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIExpc3RTb2NpYWxQb3N0c1JlcXVlc3QsXG4gIExpc3RTb2NpYWxQb3N0c1Jlc3BvbnNlLFxuICBHZXRNdWx0aVNvY2lhbFBvc3RzUmVxdWVzdCxcbiAgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlLFxuICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXF1ZXN0LFxuICBHZXRTY2hlZHVsZWRQb3N0Q291bnRSZXNwb25zZSxcbn0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9hcGknO1xuaW1wb3J0IHsgU29jaWFsUG9zdHNBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvc29jaWFsLXBvc3RzLmFwaS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgU29jaWFsUG9zdHNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzb2NpYWxQb3N0c0FwaVNlcnZpY2U6IFNvY2lhbFBvc3RzQXBpU2VydmljZSkge1xuICB9XG5cbiAgbGlzdChcbiAgICAgc3RhcnQ6IERhdGUsXG4gICAgIGVuZDogRGF0ZSxcbiAgICAgc29jaWFsU2VydmljZUlkczogc3RyaW5nW10sXG4gICAgIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgICAgcGFydG5lcklkOiBzdHJpbmcsXG4gICAgIGN1cnNvcjogc3RyaW5nLFxuICAgICB0YWdzOiBzdHJpbmdbXSxcbiAgICAgcGFnZVNpemU6IG51bWJlclxuICApOlxuICAgIE9ic2VydmFibGU8TGlzdFNvY2lhbFBvc3RzUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgTGlzdFNvY2lhbFBvc3RzUmVxdWVzdCh7XG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGVuZCxcbiAgICAgIGJ1c2luZXNzSWQ6IGJ1c2luZXNzSWQsXG4gICAgICBwYXJ0bmVySWQ6IHBhcnRuZXJJZCxcbiAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgc29jaWFsU2VydmljZUlkczogc29jaWFsU2VydmljZUlkcyxcbiAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICBwYWdlU2l6ZTogcGFnZVNpemUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmxpc3QocmVxKTtcbiAgfVxuXG4gIGdldE11bHRpU29jaWFsUG9zdHMoYnVzaW5lc3NJZDogc3RyaW5nLCBpbnRlcm5hbFBvc3RJZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZXRNdWx0aVNvY2lhbFBvc3RzUmVzcG9uc2U+IHtcbiAgICBpZiAoIWludGVybmFsUG9zdElkcyB8fCBpbnRlcm5hbFBvc3RJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCByZXMgPSBuZXcgR2V0TXVsdGlTb2NpYWxQb3N0c1Jlc3BvbnNlKCk7XG4gICAgICByZXR1cm4gb2YocmVzKTtcbiAgICB9XG4gICAgY29uc3QgcmVxID0gbmV3IEdldE11bHRpU29jaWFsUG9zdHNSZXF1ZXN0KHtidXNpbmVzc0lkOiBidXNpbmVzc0lkLCBpbnRlcm5hbFBvc3RJZHM6IGludGVybmFsUG9zdElkc30pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5nZXRNdWx0aVNvY2lhbFBvc3RzKHJlcSk7XG4gIH1cblxuICBnZXRTY2hlZHVsZWRQb3N0Q291bnQocGFydG5lcklkOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZywgc29jaWFsU2VydmljZUlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEdldFNjaGVkdWxlZFBvc3RDb3VudFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IEdldFNjaGVkdWxlZFBvc3RDb3VudFJlcXVlc3Qoe3BhcnRuZXJJZDogcGFydG5lcklkLCBidXNpbmVzc0lkOiBidXNpbmVzc0lkLCBzb2NpYWxTZXJ2aWNlSWRzOiBzb2NpYWxTZXJ2aWNlSWRzfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmdldFNjaGVkdWxlZFBvc3RDb3VudChyZXEpO1xuICB9XG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEFQSSBTZXJ2aWNlLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICAgICAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCxcbiAgICAgICAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2UsXG4gICAgICAgIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gICAgICAgIEdldFBvc3RUZW1wbGF0ZVJlcXVlc3QsXG4gICAgICAgIEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlLFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QsXG4gICAgICAgIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UsXG4gICAgICAgIFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QsXG59IGZyb20gJy4vb2JqZWN0cy8nO1xuaW1wb3J0IHtcbiAgICAgICAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgQ3JlYXRlUG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldFBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuLi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBvc3RUZW1wbGF0ZXNBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB1cGRhdGVQb3N0VGVtcGxhdGUocjogVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB8IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8VXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxVcGRhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0PnIpIDogbmV3IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Qb3N0VGVtcGxhdGVzL1VwZGF0ZVBvc3RUZW1wbGF0ZVwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgY3JlYXRlUG9zdFRlbXBsYXRlKHI6IENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3QgfCBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8Q3JlYXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0PnIpIDogbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9DcmVhdGVQb3N0VGVtcGxhdGVcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldFBvc3RUZW1wbGF0ZShyOiBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0IHwgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8R2V0UG9zdFRlbXBsYXRlUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8R2V0UG9zdFRlbXBsYXRlUmVxdWVzdD5yKSA6IG5ldyBHZXRQb3N0VGVtcGxhdGVSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8R2V0UG9zdFRlbXBsYXRlUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBvc3RUZW1wbGF0ZXMvR2V0UG9zdFRlbXBsYXRlXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBsaXN0UG9zdFRlbXBsYXRlcyhyOiBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3QgfCBMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxMaXN0UG9zdFRlbXBsYXRlc1JlcXVlc3Q+cikgOiBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuUG9zdFRlbXBsYXRlcy9MaXN0UG9zdFRlbXBsYXRlc1wiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBkZWxldGVQb3N0VGVtcGxhdGUocjogRGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdCB8IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8RGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxEZWxldGVQb3N0VGVtcGxhdGVSZXF1ZXN0PnIpIDogbmV3IERlbGV0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudWxsPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5Qb3N0VGVtcGxhdGVzL0RlbGV0ZVBvc3RUZW1wbGF0ZVwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgXG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDcmVhdGVQb3N0VGVtcGxhdGVSZXF1ZXN0LFxuICBDcmVhdGVQb3N0VGVtcGxhdGVSZXNwb25zZSxcbiAgRGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdCxcbiAgR2V0UG9zdFRlbXBsYXRlUmVxdWVzdCxcbiAgR2V0UG9zdFRlbXBsYXRlUmVzcG9uc2UsXG4gIExpc3RQb3N0VGVtcGxhdGVzUmVxdWVzdCxcbiAgTGlzdFBvc3RUZW1wbGF0ZXNSZXNwb25zZSxcbiAgVXBkYXRlUG9zdFRlbXBsYXRlUmVxdWVzdCxcbn0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9hcGknO1xuaW1wb3J0IHsgUG9zdFRlbXBsYXRlc0FwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9wb3N0LXRlbXBsYXRlcy5hcGkuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBvc3RUZW1wbGF0ZXNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzb2NpYWxQb3N0c0FwaVNlcnZpY2U6IFBvc3RUZW1wbGF0ZXNBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICB1cGRhdGVQb3N0VGVtcGxhdGUoYWNjb3VudEdyb3VwSWQ6IHN0cmluZywgdGVtcGxhdGVJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBwb3N0VGV4dDogc3RyaW5nLCBwb3N0RGF0ZVRpbWU6IERhdGUsXG4gICAgICAgICAgICAgICAgICAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogc3RyaW5nLCBpbWFnZVVybDogc3RyaW5nLCBpbWFnZVBhdGg6IHN0cmluZywgaW1hZ2VTaXplOiBzdHJpbmcsIHByZXZpZXdzOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBzdHJpbmdbXSwgdmlkZW9Vcmw6IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IFVwZGF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qoe1xuICAgICAgYWNjb3VudEdyb3VwSWQ6IGFjY291bnRHcm91cElkLFxuICAgICAgdGVtcGxhdGVJZDogdGVtcGxhdGVJZCxcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIHBvc3RUZXh0OiBwb3N0VGV4dCxcbiAgICAgIHBvc3REYXRlVGltZTogcG9zdERhdGVUaW1lLFxuICAgICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IGdtYlBvc3RDdXN0b21pemF0aW9uLFxuICAgICAgaW1hZ2VVcmw6IGltYWdlVXJsLFxuICAgICAgaW1hZ2VQYXRoOiBpbWFnZVBhdGgsXG4gICAgICBpbWFnZVNpemU6IGltYWdlU2l6ZSxcbiAgICAgIHByZXZpZXdzOiBwcmV2aWV3cyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB2aWRlb1VybDogdmlkZW9VcmxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zb2NpYWxQb3N0c0FwaVNlcnZpY2UudXBkYXRlUG9zdFRlbXBsYXRlKHJlcSlcbiAgfVxuXG4gIGNyZWF0ZVBvc3RUZW1wbGF0ZShhY2NvdW50R3JvdXBJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBwb3N0VGV4dDogc3RyaW5nLCBwb3N0RGF0ZVRpbWU6IERhdGUsIGdtYlBvc3RDdXN0b21pemF0aW9uOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICBpbWFnZVVybDogc3RyaW5nLCBpbWFnZVBhdGg6IHN0cmluZywgaW1hZ2VTaXplOiBzdHJpbmcsIHByZXZpZXdzOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZ1tdLCB2aWRlb1VybDogc3RyaW5nKTpcbiAgICBPYnNlcnZhYmxlPENyZWF0ZVBvc3RUZW1wbGF0ZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IENyZWF0ZVBvc3RUZW1wbGF0ZVJlcXVlc3Qoe1xuICAgICAgYWNjb3VudEdyb3VwSWQ6IGFjY291bnRHcm91cElkLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgcG9zdFRleHQ6IHBvc3RUZXh0LFxuICAgICAgcG9zdERhdGVUaW1lOiBwb3N0RGF0ZVRpbWUsXG4gICAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogZ21iUG9zdEN1c3RvbWl6YXRpb24sXG4gICAgICBpbWFnZVVybDogaW1hZ2VVcmwsXG4gICAgICBpbWFnZVBhdGg6IGltYWdlUGF0aCxcbiAgICAgIGltYWdlU2l6ZTogaW1hZ2VTaXplLFxuICAgICAgcHJldmlld3M6IHByZXZpZXdzLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIHZpZGVvVXJsOiB2aWRlb1VybFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5jcmVhdGVQb3N0VGVtcGxhdGUocmVxKTtcbiAgfVxuXG4gIGdldFBvc3RUZW1wbGF0ZShhY2NvdW50R3JvdXBJZDogc3RyaW5nLCB0ZW1wbGF0ZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdldFBvc3RUZW1wbGF0ZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IEdldFBvc3RUZW1wbGF0ZVJlcXVlc3Qoe1xuICAgICAgYWNjb3VudEdyb3VwSWQ6IGFjY291bnRHcm91cElkLFxuICAgICAgdGVtcGxhdGVJZDogdGVtcGxhdGVJZFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFBvc3RzQXBpU2VydmljZS5nZXRQb3N0VGVtcGxhdGUocmVxKVxuICB9XG5cbiAgbGlzdFBvc3RUZW1wbGF0ZXMoYWNjb3VudEdyb3VwSWQ6IHN0cmluZywgY3Vyc29yOiBzdHJpbmcsIHBhZ2VTaXplOiBudW1iZXIpOiBPYnNlcnZhYmxlPExpc3RQb3N0VGVtcGxhdGVzUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgTGlzdFBvc3RUZW1wbGF0ZXNSZXF1ZXN0KHtcbiAgICAgIGFjY291bnRHcm91cElkOiBhY2NvdW50R3JvdXBJZCxcbiAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmxpc3RQb3N0VGVtcGxhdGVzKHJlcSk7XG4gIH1cblxuICBkZWxldGVQb3N0VGVtcGxhdGUoYWNjb3VudEdyb3VwSWQ6IHN0cmluZywgdGVtcGxhdGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgRGVsZXRlUG9zdFRlbXBsYXRlUmVxdWVzdCh7XG4gICAgICBhY2NvdW50R3JvdXBJZDogYWNjb3VudEdyb3VwSWQsXG4gICAgICB0ZW1wbGF0ZUlkOiB0ZW1wbGF0ZUlkXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsUG9zdHNBcGlTZXJ2aWNlLmRlbGV0ZVBvc3RUZW1wbGF0ZShyZXEpO1xuICB9XG5cbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gQVBJIFNlcnZpY2UuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgICAgICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gICAgICAgIENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UsXG4gICAgICAgIERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbiAgICAgICAgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbiAgICAgICAgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UsXG4gICAgICAgIEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCxcbiAgICAgICAgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZSxcbiAgICAgICAgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdCxcbiAgICAgICAgTGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVzcG9uc2UsXG4gICAgICAgIFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG59IGZyb20gJy4vb2JqZWN0cy8nO1xuaW1wb3J0IHtcbiAgICAgICAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgICAgIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgICAgICBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBNdWx0aWxvY2F0aW9uUG9zdEFwaVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGhvc3RTZXJ2aWNlOiBIb3N0U2VydmljZSkge1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBpT3B0aW9ucygpOiB7aGVhZGVyczogSHR0cEhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbn0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0KHI6IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCB8IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8Q3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKSA6IG5ldyBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5NdWx0aWxvY2F0aW9uUG9zdFNlcnZpY2UvQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZWRpdE11bHRpbG9jYXRpb25Qb3N0KHI6IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgfCBFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8RWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0PnIpIDogbmV3IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxFZGl0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL0VkaXRNdWx0aWxvY2F0aW9uUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgcmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0KHI6IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgfCBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8UmVtb3ZlRnJvbU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKSA6IG5ldyBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL1JlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgbGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kKHI6IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3QgfCBMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8TGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXF1ZXN0PnIpIDogbmV3IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxMaXN0TXVsdGlsb2NhdGlvblBvc3RzRm9yQnJhbmRSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL0xpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZGVsZXRlTXVsdGlsb2NhdGlvblBvc3QocjogRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0IHwgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPERlbGV0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikgOiBuZXcgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL0RlbGV0ZU11bHRpbG9jYXRpb25Qb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHsuLi50aGlzLmFwaU9wdGlvbnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xuICAgIH1cbiAgICBnZXRNdWx0aWxvY2F0aW9uUG9zdChyOiBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QgfCBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Q+cikgOiBuZXcgR2V0TXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8R2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvc29jaWFscG9zdHMudjEuTXVsdGlsb2NhdGlvblBvc3RTZXJ2aWNlL0dldE11bHRpbG9jYXRpb25Qb3N0XCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gR2V0TXVsdGlsb2NhdGlvblBvc3RSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIFxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxuICBDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICBEZWxldGVNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEVkaXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlLFxuICBHZXRNdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3QsXG4gIEdldE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2UsXG4gIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3QsXG4gIExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlLFxuICBSZW1vdmVGcm9tTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0LFxufSBmcm9tICcuL19pbnRlcm5hbC9vYmplY3RzL2FwaSc7XG5pbXBvcnQgeyBNdWx0aWxvY2F0aW9uUG9zdEFwaVNlcnZpY2UgfSBmcm9tICcuL19pbnRlcm5hbC9tdWx0aWxvY2F0aW9uLXBvc3QuYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9maWVsZC1tYXNrJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy9tdWx0aWxvY2F0aW9uLXBvc3QnO1xuaW1wb3J0IHsgUmVtb3ZlUmVhc29uIH0gZnJvbSAnLi9faW50ZXJuYWwvZW51bXMvbXVsdGlsb2NhdGlvbi1wb3N0LmVudW0nO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBNdWx0aWxvY2F0aW9uUG9zdHNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtdWx0aWxvY2F0aW9uQXBpU2VydmljZTogTXVsdGlsb2NhdGlvblBvc3RBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICBjcmVhdGVNdWx0aWxvY2F0aW9uUG9zdChicmFuZElkOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgbWVkaWE6IHN0cmluZ1tdLCBnaWZzOiBzdHJpbmdbXSwgdmlkZW9zOiBzdHJpbmdbXSwgc2NoZWR1bGVkRGF0ZTogRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zOiBMb2NhdGlvbltdKTogT2JzZXJ2YWJsZTxDcmVhdGVNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IENyZWF0ZU11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCh7XG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIGdpZnM6IGdpZnMsXG4gICAgICB2aWRlb3M6IHZpZGVvcyxcbiAgICAgIHNjaGVkdWxlZERhdGU6IHNjaGVkdWxlZERhdGUsXG4gICAgICBsb2NhdGlvbnM6IGxvY2F0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm11bHRpbG9jYXRpb25BcGlTZXJ2aWNlLmNyZWF0ZU11bHRpbG9jYXRpb25Qb3N0KHJlcSk7XG4gIH1cblxuICBlZGl0TXVsdGlsb2NhdGlvblBvc3QoYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCBtZWRpYTogc3RyaW5nW10sIGdpZnM6IHN0cmluZ1tdLCB2aWRlb3M6IHN0cmluZ1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkRGF0ZTogRGF0ZSwgbG9jYXRpb25zOiBMb2NhdGlvbltdLCBmaWVsZE1hc2s6IEZpZWxkTWFzayk6IE9ic2VydmFibGU8RWRpdE11bHRpbG9jYXRpb25Qb3N0UmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgRWRpdE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCh7XG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgbXVsdGlsb2NhdGlvbklkOiBtdWx0aWxvY2F0aW9uSWQsXG4gICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgZ2lmczogZ2lmcyxcbiAgICAgIHZpZGVvczogdmlkZW9zLFxuICAgICAgc2NoZWR1bGVkRGF0ZTogc2NoZWR1bGVkRGF0ZSxcbiAgICAgIGxvY2F0aW9uczogbG9jYXRpb25zLFxuICAgICAgZmllbGRNYXNrOiBmaWVsZE1hc2tcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5lZGl0TXVsdGlsb2NhdGlvblBvc3QocmVxKTtcbiAgfVxuXG4gIHJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdChyZWFzb246IFJlbW92ZVJlYXNvbiwgYnJhbmRJZDogc3RyaW5nLCBtdWx0aWxvY2F0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uczogTG9jYXRpb25bXSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IFJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdFJlcXVlc3Qoe1xuICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgbXVsdGlsb2NhdGlvbklkOiBtdWx0aWxvY2F0aW9uSWQsXG4gICAgICBsb2NhdGlvbnM6IGxvY2F0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm11bHRpbG9jYXRpb25BcGlTZXJ2aWNlLnJlbW92ZUZyb21NdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG5cbiAgbGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kKGJyYW5kSWQ6IHN0cmluZywgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBjdXJzb3I6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBudW1iZXIpOiBPYnNlcnZhYmxlPExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IExpc3RNdWx0aWxvY2F0aW9uUG9zdHNGb3JCcmFuZFJlcXVlc3Qoe1xuICAgICAgYnJhbmRJZDogYnJhbmRJZCxcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZTogZW5kRGF0ZSxcbiAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgcGFnZVNpemU6IHBhZ2VTaXplXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlsb2NhdGlvbkFwaVNlcnZpY2UubGlzdE11bHRpbG9jYXRpb25Qb3N0c0ZvckJyYW5kKHJlcSk7XG4gIH1cblxuICBkZWxldGVNdWx0aWxvY2F0aW9uUG9zdChicmFuZElkOiBzdHJpbmcsIG11bHRpbG9jYXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgRGVsZXRlTXVsdGlsb2NhdGlvblBvc3RSZXF1ZXN0KHtcbiAgICAgIGJyYW5kSWQ6IGJyYW5kSWQsXG4gICAgICBtdWx0aWxvY2F0aW9uSWQ6IG11bHRpbG9jYXRpb25JZFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm11bHRpbG9jYXRpb25BcGlTZXJ2aWNlLmRlbGV0ZU11bHRpbG9jYXRpb25Qb3N0KHJlcSk7XG4gIH1cblxuICBnZXRNdWx0aWxvY2F0aW9uUG9zdChicmFuZElkOiBzdHJpbmcsIG11bHRpbG9jYXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRNdWx0aWxvY2F0aW9uUG9zdFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxID0gbmV3IEdldE11bHRpbG9jYXRpb25Qb3N0UmVxdWVzdCh7XG4gICAgICBicmFuZElkOiBicmFuZElkLFxuICAgICAgbXVsdGlsb2NhdGlvbklkOiBtdWx0aWxvY2F0aW9uSWRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aWxvY2F0aW9uQXBpU2VydmljZS5nZXRNdWx0aWxvY2F0aW9uUG9zdChyZXEpO1xuICB9XG59XG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEFQSSBTZXJ2aWNlLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICAgICAgUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlLFxuICAgICAgICBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCxcbn0gZnJvbSAnLi9vYmplY3RzLyc7XG5pbXBvcnQge1xuICAgICAgICBQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvJztcbmltcG9ydCB7SHR0cEhlYWRlcnMsIEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtIb3N0U2VydmljZX0gZnJvbSAnLi4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQYXJ0bmVyU29jaWFsUG9zdHNBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsaXN0U2NoZWR1bGVkKHI6IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0IHwgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8UGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8UGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Q+cikgOiBuZXcgUGFydG5lckxpc3RTY2hlZHVsZWRTb2NpYWxQb3N0c1JlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL3NvY2lhbHBvc3RzLnYxLlBhcnRuZXJTb2NpYWxQb3N0cy9MaXN0U2NoZWR1bGVkXCIsIHJlcXVlc3QudG9BcGlKc29uKCksIHRoaXMuYXBpT3B0aW9ucygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3AgPT4gUGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgbGlzdFNjaGVkdWxlZEJ5Q3JlYXRlZChyOiBQYXJ0bmVyTGlzdFNjaGVkdWxlZFNvY2lhbFBvc3RzUmVxdWVzdCB8IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxQYXJ0bmVyTGlzdFNjaGVkdWxlZFBvc3RzUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0PnIpIDogbmV3IFBhcnRuZXJMaXN0U2NoZWR1bGVkU29jaWFsUG9zdHNSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UGFydG5lckxpc3RTY2hlZHVsZWRQb3N0c1Jlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9zb2NpYWxwb3N0cy52MS5QYXJ0bmVyU29jaWFsUG9zdHMvTGlzdFNjaGVkdWxlZEJ5Q3JlYXRlZFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IFBhcnRuZXJMaXN0U2NoZWR1bGVkUG9zdHNSZXNwb25zZS5mcm9tUHJvdG8ocmVzcCkpLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIFxufVxuIl0sIm5hbWVzIjpbImVudW1TdHJpbmdUb1ZhbHVlIiwiZS5DYWxsVG9BY3Rpb25DYWxsVG9BY3Rpb25UeXBlIiwiZS5Tb2NpYWxQb3N0RGVsZXRpb25TdGF0dXMiLCJlLlNvY2lhbFBvc3RTZXJ2aWNlIiwiZS5Qb3N0aW5nU3RhdHVzIiwiZS5SZW1vdmVSZWFzb24iLCJFbnZpcm9ubWVudCIsIkluamVjdGFibGUiLCJFbnZpcm9ubWVudFNlcnZpY2UiLCJIdHRwSGVhZGVycyIsIm1hcCIsInNoYXJlIiwiSHR0cENsaWVudCIsIm9mIl0sIm1h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