@nlabs/reaktor 1.16.0 → 1.18.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.
- package/README.md +186 -0
- package/docs/ASSISTANT.md +138 -0
- package/docs/GENERATION.md +29 -2
- package/docs/NATIVE_PUSH.md +56 -0
- package/lib/actions/alfredFaq.d.ts +80 -0
- package/lib/actions/alfredFaq.js +206 -0
- package/lib/actions/contentGeneration.d.ts +4 -1
- package/lib/actions/contentGeneration.js +83 -27
- package/lib/actions/contentGenerationErrors.js +1 -1
- package/lib/actions/conversations.d.ts +1 -1
- package/lib/actions/conversations.js +19 -9
- package/lib/actions/crud.js +26 -1
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.js +3 -1
- package/lib/actions/messages.js +23 -7
- package/lib/actions/phoneSupport.d.ts +18 -0
- package/lib/actions/phoneSupport.js +170 -0
- package/lib/actions/users.js +57 -4
- package/lib/assistant/core.d.ts +53 -0
- package/lib/assistant/core.js +123 -0
- package/lib/assistant/faq.d.ts +26 -0
- package/lib/assistant/faq.js +238 -0
- package/lib/assistant/faqCore.d.ts +23 -0
- package/lib/assistant/faqCore.js +20 -0
- package/lib/assistant/index.d.ts +7 -0
- package/lib/assistant/index.js +5 -0
- package/lib/assistant/service.d.ts +35 -0
- package/lib/assistant/service.js +201 -0
- package/lib/config.js +3 -2
- package/lib/durableChat/conversations.d.ts +62 -0
- package/lib/durableChat/conversations.js +729 -0
- package/lib/durableChat/errors.d.ts +6 -0
- package/lib/durableChat/errors.js +11 -0
- package/lib/durableChat/events.d.ts +22 -0
- package/lib/durableChat/events.js +50 -0
- package/lib/durableChat/index.d.ts +8 -0
- package/lib/durableChat/index.js +10 -0
- package/lib/durableChat/membership.d.ts +24 -0
- package/lib/durableChat/membership.js +85 -0
- package/lib/durableChat/messageTypes.d.ts +76 -0
- package/lib/durableChat/messageTypes.js +3 -0
- package/lib/durableChat/messages.d.ts +16 -0
- package/lib/durableChat/messages.js +257 -0
- package/lib/durableChat/transaction.d.ts +10 -0
- package/lib/durableChat/transaction.js +53 -0
- package/lib/durableChat/types.d.ts +81 -0
- package/lib/durableChat/types.js +3 -0
- package/lib/index.d.ts +4 -4
- package/lib/index.js +5 -3
- package/lib/lambdas/actions/websockets.js +4 -4
- package/lib/nativePush/graphql.d.ts +14 -0
- package/lib/nativePush/graphql.js +105 -0
- package/lib/nativePush/index.d.ts +7 -0
- package/lib/nativePush/index.js +9 -0
- package/lib/nativePush/migrations.d.ts +2 -0
- package/lib/nativePush/migrations.js +36 -0
- package/lib/nativePush/nativePushContract.fixture.d.ts +22 -0
- package/lib/nativePush/nativePushContract.fixture.js +27 -0
- package/lib/nativePush/payload.d.ts +2 -0
- package/lib/nativePush/payload.js +106 -0
- package/lib/nativePush/repository.d.ts +9 -0
- package/lib/nativePush/repository.js +120 -0
- package/lib/nativePush/service.d.ts +2 -0
- package/lib/nativePush/service.js +110 -0
- package/lib/nativePush/snsProvider.d.ts +17 -0
- package/lib/nativePush/snsProvider.js +165 -0
- package/lib/nativePush/types.d.ts +89 -0
- package/lib/nativePush/types.js +3 -0
- package/lib/organizations/accountLifecycle.d.ts +7 -0
- package/lib/organizations/accountLifecycle.js +106 -0
- package/lib/organizations/authorization.d.ts +9 -0
- package/lib/organizations/authorization.js +40 -0
- package/lib/organizations/billing.d.ts +38 -0
- package/lib/organizations/billing.js +277 -0
- package/lib/organizations/billingProvider.d.ts +4 -0
- package/lib/organizations/billingProvider.js +287 -0
- package/lib/organizations/billingUpdates.d.ts +9 -0
- package/lib/organizations/billingUpdates.js +388 -0
- package/lib/organizations/index.d.ts +10 -0
- package/lib/organizations/index.js +12 -0
- package/lib/organizations/mail.d.ts +10 -0
- package/lib/organizations/mail.js +60 -0
- package/lib/organizations/memberDirectory.d.ts +15 -0
- package/lib/organizations/memberDirectory.js +28 -0
- package/lib/organizations/membership.d.ts +19 -0
- package/lib/organizations/membership.js +248 -0
- package/lib/organizations/passwordRecovery.d.ts +9 -0
- package/lib/organizations/passwordRecovery.js +50 -0
- package/lib/organizations/plans.d.ts +6 -0
- package/lib/organizations/plans.js +40 -0
- package/lib/organizations/providerPagination.d.ts +6 -0
- package/lib/organizations/providerPagination.js +23 -0
- package/lib/organizations/reconciliation.d.ts +11 -0
- package/lib/organizations/reconciliation.js +400 -0
- package/lib/organizations/signup.d.ts +25 -0
- package/lib/organizations/signup.js +169 -0
- package/lib/organizations/store.d.ts +25 -0
- package/lib/organizations/store.js +167 -0
- package/lib/organizations/types.d.ts +138 -0
- package/lib/organizations/types.js +3 -0
- package/lib/organizations/verification.d.ts +3 -0
- package/lib/organizations/verification.js +51 -0
- package/package.json +16 -3
|
@@ -4,10 +4,16 @@ export { ContentGenerationRejectedError, ContentGenerationResponseError } from '
|
|
|
4
4
|
import { post } from '@nlabs/rip-hunter';
|
|
5
5
|
import { Config } from '../config.js';
|
|
6
6
|
const validMessageContent = (message)=>{
|
|
7
|
-
if (typeof message.content === 'string')
|
|
7
|
+
if (typeof message.content === 'string') {
|
|
8
|
+
return !!message.content.trim();
|
|
9
|
+
}
|
|
8
10
|
return Array.isArray(message.content) && message.content.length > 0 && message.content.every((part)=>{
|
|
9
|
-
if (!part)
|
|
10
|
-
|
|
11
|
+
if (!part) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (part.type === 'text') {
|
|
15
|
+
return typeof part.text === 'string' && !!part.text.trim();
|
|
16
|
+
}
|
|
11
17
|
return part.type === 'image' && message.role === 'user' && typeof part.url === 'string' && /^(https?:\/\/[^\s]+|data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/]+={0,2})$/.test(part.url) && (part.detail === undefined || [
|
|
12
18
|
'auto',
|
|
13
19
|
'high',
|
|
@@ -19,11 +25,22 @@ const validMessageContent = (message)=>{
|
|
|
19
25
|
if (![
|
|
20
26
|
'claude',
|
|
21
27
|
'gemini',
|
|
28
|
+
'grok',
|
|
22
29
|
'ollama',
|
|
23
30
|
'openai'
|
|
24
31
|
].includes(input.provider)) {
|
|
25
32
|
throw new ContentGenerationRejectedError('A supported provider is required.');
|
|
26
33
|
}
|
|
34
|
+
if (input.outputTextMode !== undefined && (![
|
|
35
|
+
'claude',
|
|
36
|
+
'openai',
|
|
37
|
+
'grok'
|
|
38
|
+
].includes(input.provider) || ![
|
|
39
|
+
'preserve',
|
|
40
|
+
'trim'
|
|
41
|
+
].includes(input.outputTextMode))) {
|
|
42
|
+
throw new ContentGenerationRejectedError('outputTextMode requires Claude, OpenAI or Grok and preserve or trim.');
|
|
43
|
+
}
|
|
27
44
|
if (input.messages !== undefined) {
|
|
28
45
|
if (input.prompt !== undefined || !Array.isArray(input.messages) || !input.messages.length || input.messages.some((message)=>!message || ![
|
|
29
46
|
'assistant',
|
|
@@ -36,8 +53,11 @@ const validMessageContent = (message)=>{
|
|
|
36
53
|
} else if (typeof input.prompt !== 'string' || !input.prompt.trim()) {
|
|
37
54
|
throw new ContentGenerationRejectedError('A non-empty prompt is required.');
|
|
38
55
|
}
|
|
39
|
-
if (input.provider !== 'openai' && (input.messages !== undefined || input.reasoningEffort !== undefined ||
|
|
40
|
-
|
|
56
|
+
if (input.provider !== 'openai' && (input.messages !== undefined || input.reasoningEffort !== undefined || [
|
|
57
|
+
'claude',
|
|
58
|
+
'grok'
|
|
59
|
+
].includes(input.provider) && input.responseFormat !== undefined)) {
|
|
60
|
+
throw new ContentGenerationRejectedError('Messages and reasoning effort require OpenAI; Claude and Grok do not support response format options.');
|
|
41
61
|
}
|
|
42
62
|
if (input.timeoutMs !== undefined && (!Number.isInteger(input.timeoutMs) || input.timeoutMs < 1 || input.timeoutMs > 2_147_483_647)) {
|
|
43
63
|
throw new ContentGenerationRejectedError('timeoutMs must be a positive 32-bit integer.');
|
|
@@ -67,8 +87,11 @@ const validMessageContent = (message)=>{
|
|
|
67
87
|
].includes(input.provider) && format !== undefined && (format.type === 'json_schema' || input.modality === 'image')) {
|
|
68
88
|
throw new ContentGenerationRejectedError('This provider supports text or json_object for text generation only.');
|
|
69
89
|
}
|
|
70
|
-
if (input.topP !== undefined && (
|
|
71
|
-
|
|
90
|
+
if (input.topP !== undefined && (![
|
|
91
|
+
'gemini',
|
|
92
|
+
'ollama'
|
|
93
|
+
].includes(input.provider) || input.modality === 'image' || !Number.isFinite(input.topP) || input.topP < 0 || input.topP > 1)) {
|
|
94
|
+
throw new ContentGenerationRejectedError('topP requires a Gemini or Ollama text request and a finite value between 0 and 1.');
|
|
72
95
|
}
|
|
73
96
|
if (input.temperature !== undefined && (![
|
|
74
97
|
'gemini',
|
|
@@ -79,7 +102,10 @@ const validMessageContent = (message)=>{
|
|
|
79
102
|
if (input.maxTokens !== undefined && (!Number.isInteger(input.maxTokens) || input.maxTokens < 1)) {
|
|
80
103
|
throw new ContentGenerationRejectedError('maxTokens must be a positive integer.');
|
|
81
104
|
}
|
|
82
|
-
if (input.provider !== 'gemini' && (input.
|
|
105
|
+
if (input.provider !== 'gemini' && (input.images?.length && ![
|
|
106
|
+
'grok',
|
|
107
|
+
'ollama'
|
|
108
|
+
].includes(input.provider) || input.modality === 'image' || input.search)) {
|
|
83
109
|
throw new ContentGenerationRejectedError('This provider operation supports text input and output only.');
|
|
84
110
|
}
|
|
85
111
|
if (input.provider === 'ollama') return generateOllamaContent(input, config);
|
|
@@ -114,8 +140,17 @@ const validMessageContent = (message)=>{
|
|
|
114
140
|
].includes(response.error.type || '')) {
|
|
115
141
|
throw new ContentGenerationRejectedError('Claude rejected the request. Check the model and account access.');
|
|
116
142
|
}
|
|
117
|
-
const
|
|
118
|
-
if (
|
|
143
|
+
const preserve = input.outputTextMode === 'preserve';
|
|
144
|
+
if (preserve && (!Array.isArray(response.content) || response.content.some((part)=>!part || ![
|
|
145
|
+
'text',
|
|
146
|
+
'thinking',
|
|
147
|
+
'redacted_thinking'
|
|
148
|
+
].includes(part.type || '') || part.type === 'text' && typeof part.text !== 'string'))) {
|
|
149
|
+
throw new ContentGenerationResponseError('Claude response could not be confirmed.');
|
|
150
|
+
}
|
|
151
|
+
const chunks = response.content?.filter((part)=>part.type === 'text').map((part)=>part.text || '') || [];
|
|
152
|
+
const text = preserve ? chunks.join('') : chunks.join('\n').trim();
|
|
153
|
+
if (response.error || response.type !== 'message' || response.stop_reason !== 'end_turn' || !text.trim()) {
|
|
119
154
|
throw new ContentGenerationResponseError('Claude response could not be confirmed.');
|
|
120
155
|
}
|
|
121
156
|
return {
|
|
@@ -123,12 +158,28 @@ const validMessageContent = (message)=>{
|
|
|
123
158
|
text
|
|
124
159
|
};
|
|
125
160
|
}
|
|
126
|
-
if (input.provider === 'openai') {
|
|
127
|
-
|
|
128
|
-
|
|
161
|
+
if (input.provider === 'openai' || input.provider === 'grok') {
|
|
162
|
+
const grok = input.provider === 'grok';
|
|
163
|
+
const key = grok ? config.grokKey : config.openaiKey;
|
|
164
|
+
if (!key) {
|
|
165
|
+
throw new ContentGenerationRejectedError(`${grok ? 'Grok' : 'OpenAI'} is not configured on this server.`);
|
|
129
166
|
}
|
|
130
|
-
const response = await post('https://api.openai.com/v1/responses', {
|
|
131
|
-
input:
|
|
167
|
+
const response = await post(grok ? 'https://api.x.ai/v1/responses' : 'https://api.openai.com/v1/responses', {
|
|
168
|
+
input: grok && images.length ? [
|
|
169
|
+
{
|
|
170
|
+
content: [
|
|
171
|
+
{
|
|
172
|
+
text: prompt,
|
|
173
|
+
type: 'input_text'
|
|
174
|
+
},
|
|
175
|
+
...images.map((image)=>({
|
|
176
|
+
image_url: `data:${image.mime};base64,${image.bytes.toString('base64')}`,
|
|
177
|
+
type: 'input_image'
|
|
178
|
+
}))
|
|
179
|
+
],
|
|
180
|
+
role: 'user'
|
|
181
|
+
}
|
|
182
|
+
] : input.messages?.map((message)=>({
|
|
132
183
|
content: typeof message.content === 'string' ? message.content : message.content.map((part)=>part.type === 'text' ? {
|
|
133
184
|
text: part.text,
|
|
134
185
|
type: 'input_text'
|
|
@@ -141,7 +192,7 @@ const validMessageContent = (message)=>{
|
|
|
141
192
|
})) ?? prompt,
|
|
142
193
|
instructions: input.system,
|
|
143
194
|
max_output_tokens: input.maxTokens ?? 4096,
|
|
144
|
-
model: input.model || config.openaiModel || 'gpt-6-astra',
|
|
195
|
+
model: input.model || (grok ? config.grokModel || 'grok-4.7' : config.openaiModel || 'gpt-6-astra'),
|
|
145
196
|
...input.reasoningEffort ? {
|
|
146
197
|
reasoning: {
|
|
147
198
|
effort: input.reasoningEffort
|
|
@@ -153,11 +204,13 @@ const validMessageContent = (message)=>{
|
|
|
153
204
|
format
|
|
154
205
|
}
|
|
155
206
|
} : {},
|
|
156
|
-
|
|
207
|
+
...!grok ? {
|
|
208
|
+
truncation: 'disabled'
|
|
209
|
+
} : {}
|
|
157
210
|
}, {
|
|
158
211
|
cache: false,
|
|
159
212
|
headers: new Headers({
|
|
160
|
-
Authorization: `Bearer ${
|
|
213
|
+
Authorization: `Bearer ${key}`
|
|
161
214
|
}),
|
|
162
215
|
timeout: input.timeoutMs ?? 120_000
|
|
163
216
|
});
|
|
@@ -166,27 +219,27 @@ const validMessageContent = (message)=>{
|
|
|
166
219
|
'authentication_error',
|
|
167
220
|
'permission_error'
|
|
168
221
|
].includes(response.error.type || '')) {
|
|
169
|
-
throw new ContentGenerationRejectedError('OpenAI rejected the request. Check the model and account access
|
|
222
|
+
throw new ContentGenerationRejectedError(`${grok ? 'Grok' : 'OpenAI'} rejected the request. Check the model and account access.`);
|
|
170
223
|
}
|
|
171
224
|
if (response.error || response.status !== 'completed' || response.output?.some((item)=>item.status === 'incomplete')) {
|
|
172
|
-
throw new ContentGenerationResponseError('OpenAI response could not be confirmed: generation did not complete
|
|
225
|
+
throw new ContentGenerationResponseError(`${grok ? 'Grok' : 'OpenAI'} response could not be confirmed: generation did not complete.`);
|
|
173
226
|
}
|
|
174
227
|
if (response.output?.some((item)=>item.content?.some((part)=>part.type === 'refusal'))) {
|
|
175
|
-
throw new ContentGenerationResponseError('OpenAI declined the request
|
|
228
|
+
throw new ContentGenerationResponseError(`${grok ? 'Grok' : 'OpenAI'} declined the request.`);
|
|
176
229
|
}
|
|
177
230
|
if (response.output?.some((item)=>item.type && ![
|
|
178
231
|
'message',
|
|
179
232
|
'reasoning'
|
|
180
233
|
].includes(item.type))) {
|
|
181
|
-
throw new ContentGenerationResponseError('OpenAI returned an unsupported output item
|
|
234
|
+
throw new ContentGenerationResponseError(`${grok ? 'Grok' : 'OpenAI'} returned an unsupported output item.`);
|
|
182
235
|
}
|
|
183
|
-
const text = response.output?.filter((item)=>item.type === 'message').flatMap((item)=>item.content || []).filter((part)=>part.type === 'output_text').map((part)=>part.text || '').join('')
|
|
184
|
-
if (!text) {
|
|
185
|
-
throw new ContentGenerationResponseError('OpenAI returned empty output
|
|
236
|
+
const text = response.output?.filter((item)=>item.type === 'message' || grok && !item.type).flatMap((item)=>item.content || []).filter((part)=>part.type === 'output_text').map((part)=>part.text || '').join('') || '';
|
|
237
|
+
if (!text.trim()) {
|
|
238
|
+
throw new ContentGenerationResponseError(`${grok ? 'Grok' : 'OpenAI'} returned empty output.`);
|
|
186
239
|
}
|
|
187
240
|
return {
|
|
188
241
|
sources: [],
|
|
189
|
-
text
|
|
242
|
+
text: input.outputTextMode === 'preserve' ? text : text.trim()
|
|
190
243
|
};
|
|
191
244
|
}
|
|
192
245
|
if (!config.geminiKey) {
|
|
@@ -240,6 +293,9 @@ const validMessageContent = (message)=>{
|
|
|
240
293
|
} : {},
|
|
241
294
|
...input.temperature !== undefined ? {
|
|
242
295
|
temperature: input.temperature
|
|
296
|
+
} : {},
|
|
297
|
+
...input.topP !== undefined ? {
|
|
298
|
+
topP: input.topP
|
|
243
299
|
} : {}
|
|
244
300
|
},
|
|
245
301
|
...input.search ? {
|
|
@@ -312,4 +368,4 @@ const validMessageContent = (message)=>{
|
|
|
312
368
|
};
|
|
313
369
|
};
|
|
314
370
|
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dlbmVyYXRlT2xsYW1hQ29udGVudH0gZnJvbSAnLi9vbGxhbWFHZW5lcmF0aW9uLmpzJztcbmltcG9ydCB7Q29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yLCBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3J9IGZyb20gJy4vY29udGVudEdlbmVyYXRpb25FcnJvcnMuanMnO1xuZXhwb3J0IHtDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IsIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcn0gZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbkVycm9ycy5qcyc7XG5pbXBvcnQge3Bvc3R9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25Db25maWcge1xuICBjbGF1ZGVLZXk/OiBzdHJpbmc7XG4gIGNsYXVkZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlJbWFnZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBvbGxhbWE/OiB7ZW5kcG9pbnQ6IHN0cmluZzsgcHJvdG9jb2w6ICdnZW5lcmF0ZScgfCAnY2hhdCcgfCAnb3BlbmFpLWNoYXQnfTtcbiAgb3BlbmFpS2V5Pzogc3RyaW5nO1xuICBvcGVuYWlNb2RlbD86IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUGFydCA9IHt0ZXh0OiBzdHJpbmc7IHR5cGU6ICd0ZXh0J30gfCB7XG4gIGRldGFpbD86ICdhdXRvJyB8ICdoaWdoJyB8ICdsb3cnO1xuICB0eXBlOiAnaW1hZ2UnO1xuICB1cmw6IHN0cmluZztcbn07XG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRHZW5lcmF0aW9uTWVzc2FnZSB7XG4gIGNvbnRlbnQ6IHN0cmluZyB8IENvbnRlbnRHZW5lcmF0aW9uUGFydFtdO1xuICByb2xlOiAnYXNzaXN0YW50JyB8ICdkZXZlbG9wZXInIHwgJ3N5c3RlbScgfCAndXNlcic7XG59XG5leHBvcnQgdHlwZSBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRm9ybWF0ID0ge3R5cGU6ICdqc29uX29iamVjdCcgfCAndGV4dCd9IHwge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdHJpY3Q/OiBib29sZWFuO1xuICB0eXBlOiAnanNvbl9zY2hlbWEnO1xufTtcbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUmVhc29uaW5nRWZmb3J0ID0gJ25vbmUnIHwgJ21pbmltYWwnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICd4aGlnaCcgfCAnbWF4JztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50R2VuZXJhdGlvbklucHV0IHtcbiAgYXNwZWN0UmF0aW8/OiBzdHJpbmc7XG4gIGltYWdlcz86IHtieXRlczogQnVmZmVyOyBtaW1lOiBzdHJpbmd9W107XG4gIG1heFRva2Vucz86IG51bWJlcjtcbiAgbWVzc2FnZXM/OiBDb250ZW50R2VuZXJhdGlvbk1lc3NhZ2VbXTtcbiAgbW9kYWxpdHk/OiAnaW1hZ2UnIHwgJ3RleHQnO1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvbXB0Pzogc3RyaW5nO1xuICBwcm92aWRlcjogJ2NsYXVkZScgfCAnZ2VtaW5pJyB8ICdvbGxhbWEnIHwgJ29wZW5haSc7XG4gIHJlYXNvbmluZ0VmZm9ydD86IENvbnRlbnRHZW5lcmF0aW9uUmVhc29uaW5nRWZmb3J0O1xuICByZXNwb25zZUZvcm1hdD86IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VGb3JtYXQ7XG4gIHNlYXJjaD86IGJvb2xlYW47XG4gIHN5c3RlbT86IHN0cmluZztcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgdG9wUD86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVkQ29udGVudCB7XG4gIGltYWdlPzoge2J5dGVzOiBCdWZmZXI7IG1pbWU6ICdpbWFnZS9qcGVnJyB8ICdpbWFnZS9wbmcnfTtcbiAgc2VhcmNoU3VnZ2VzdGlvbnNIdG1sPzogc3RyaW5nO1xuICBzb3VyY2VzOiB7dGl0bGU6IHN0cmluZzsgdXJsOiBzdHJpbmd9W107XG4gIHRleHQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBHZW1pbmlQYXJ0IHtpbmxpbmVEYXRhPzoge2RhdGE6IHN0cmluZzsgbWltZVR5cGU6IHN0cmluZ307IHRleHQ/OiBzdHJpbmc7IHRob3VnaHQ/OiBib29sZWFufVxuaW50ZXJmYWNlIEdlbWluaVJlc3BvbnNlIHtcbiAgY2FuZGlkYXRlcz86IHtcbiAgICBjb250ZW50Pzoge3BhcnRzPzogR2VtaW5pUGFydFtdfTtcbiAgICBmaW5pc2hSZWFzb24/OiBzdHJpbmc7XG4gICAgZ3JvdW5kaW5nTWV0YWRhdGE/OiB7XG4gICAgICBncm91bmRpbmdDaHVua3M/OiB7d2ViPzoge3RpdGxlPzogc3RyaW5nOyB1cmk/OiBzdHJpbmd9fVtdO1xuICAgICAgc2VhcmNoRW50cnlQb2ludD86IHtyZW5kZXJlZENvbnRlbnQ/OiBzdHJpbmd9O1xuICAgIH07XG4gIH1bXTtcbiAgZXJyb3I/OiB7Y29kZT86IG51bWJlcn07XG4gIHByb21wdEZlZWRiYWNrPzoge2Jsb2NrUmVhc29uPzogc3RyaW5nfTtcbn1cblxuY29uc3QgdmFsaWRNZXNzYWdlQ29udGVudCA9IChtZXNzYWdlOiBDb250ZW50R2VuZXJhdGlvbk1lc3NhZ2UpOiBib29sZWFuID0+IHtcbiAgaWYodHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpIHJldHVybiAhIW1lc3NhZ2UuY29udGVudC50cmltKCk7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkgJiYgbWVzc2FnZS5jb250ZW50Lmxlbmd0aCA+IDAgJiYgbWVzc2FnZS5jb250ZW50LmV2ZXJ5KChwYXJ0KSA9PiB7XG4gICAgaWYoIXBhcnQpIHJldHVybiBmYWxzZTtcbiAgICBpZihwYXJ0LnR5cGUgPT09ICd0ZXh0JykgcmV0dXJuIHR5cGVvZiBwYXJ0LnRleHQgPT09ICdzdHJpbmcnICYmICEhcGFydC50ZXh0LnRyaW0oKTtcbiAgICByZXR1cm4gcGFydC50eXBlID09PSAnaW1hZ2UnICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ3VzZXInICYmIHR5cGVvZiBwYXJ0LnVybCA9PT0gJ3N0cmluZydcbiAgICAgICYmIC9eKGh0dHBzPzpcXC9cXC9bXlxcc10rfGRhdGE6aW1hZ2VcXC8ocG5nfGpwZWd8d2VicHxnaWYpO2Jhc2U2NCxbQS1aYS16MC05Ky9dKz17MCwyfSkkLy50ZXN0KHBhcnQudXJsKVxuICAgICAgJiYgKHBhcnQuZGV0YWlsID09PSB1bmRlZmluZWQgfHwgWydhdXRvJywgJ2hpZ2gnLCAnbG93J10uaW5jbHVkZXMocGFydC5kZXRhaWwpKTtcbiAgfSk7XG59O1xuXG4vKiogU2luZ2xlIHN1Ym1pc3Npb24gdGhyb3VnaCBSaXAtSHVudGVyOyBjYWxsZXJzIG93biBkdXJhYmxlIGpvYnMgYW5kIHJlY29uY2lsaWF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29udGVudCA9IGFzeW5jIChcbiAgaW5wdXQ6IENvbnRlbnRHZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogQ29udGVudEdlbmVyYXRpb25Db25maWcgPSBDb25maWcuZ2V0PENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnPignY29udGVudEdlbmVyYXRpb24nKSB8fCB7fVxuKTogUHJvbWlzZTxHZW5lcmF0ZWRDb250ZW50PiA9PiB7XG4gIGlmKCFbJ2NsYXVkZScsICdnZW1pbmknLCAnb2xsYW1hJywgJ29wZW5haSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0Egc3VwcG9ydGVkIHByb3ZpZGVyIGlzIHJlcXVpcmVkLicpO1xuICB9XG4gIGlmKGlucHV0Lm1lc3NhZ2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZihpbnB1dC5wcm9tcHQgIT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShpbnB1dC5tZXNzYWdlcykgfHwgIWlucHV0Lm1lc3NhZ2VzLmxlbmd0aCB8fCBpbnB1dC5tZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PlxuICAgICAgIW1lc3NhZ2UgfHwgIVsnYXNzaXN0YW50JywgJ2RldmVsb3BlcicsICdzeXN0ZW0nLCAndXNlciddLmluY2x1ZGVzKG1lc3NhZ2Uucm9sZSkgfHwgIXZhbGlkTWVzc2FnZUNvbnRlbnQobWVzc2FnZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdTdXBwbHkgZWl0aGVyIGEgbm9uLWVtcHR5IHByb21wdCBvciBub24tZW1wdHkgdGV4dCBtZXNzYWdlcyB3aXRoIHN1cHBvcnRlZCByb2xlcy4nKTtcbiAgICB9XG4gIH0gZWxzZSBpZih0eXBlb2YgaW5wdXQucHJvbXB0ICE9PSAnc3RyaW5nJyB8fCAhaW5wdXQucHJvbXB0LnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0Egbm9uLWVtcHR5IHByb21wdCBpcyByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciAhPT0gJ29wZW5haScgJiYgKGlucHV0Lm1lc3NhZ2VzICE9PSB1bmRlZmluZWQgfHwgaW5wdXQucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWQgfHwgKGlucHV0LnByb3ZpZGVyID09PSAnY2xhdWRlJyAmJiBpbnB1dC5yZXNwb25zZUZvcm1hdCAhPT0gdW5kZWZpbmVkKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdNZXNzYWdlcyBhbmQgcmVhc29uaW5nIGVmZm9ydCByZXF1aXJlIE9wZW5BSTsgQ2xhdWRlIGRvZXMgbm90IHN1cHBvcnQgcmVzcG9uc2UgZm9ybWF0IG9wdGlvbnMuJyk7XG4gIH1cbiAgaWYoaW5wdXQudGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlucHV0LnRpbWVvdXRNcykgfHwgaW5wdXQudGltZW91dE1zIDwgMSB8fCBpbnB1dC50aW1lb3V0TXMgPiAyXzE0N180ODNfNjQ3KSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RpbWVvdXRNcyBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIuJyk7XG4gIH1cbiAgaWYoaW5wdXQucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWQgJiYgIVsnbm9uZScsICdtaW5pbWFsJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICd4aGlnaCcsICdtYXgnXS5pbmNsdWRlcyhpbnB1dC5yZWFzb25pbmdFZmZvcnQpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignVW5zdXBwb3J0ZWQgcmVhc29uaW5nIGVmZm9ydC4nKTtcbiAgfVxuICBjb25zdCBmb3JtYXQgPSBpbnB1dC5yZXNwb25zZUZvcm1hdDtcbiAgaWYoZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKCFmb3JtYXQgfHwgIVsndGV4dCcsICdqc29uX29iamVjdCcsICdqc29uX3NjaGVtYSddLmluY2x1ZGVzKGZvcm1hdC50eXBlKSB8fCAoZm9ybWF0LnR5cGUgPT09ICdqc29uX3NjaGVtYScgJiYgKFxuICAgIHR5cGVvZiBmb3JtYXQubmFtZSAhPT0gJ3N0cmluZycgfHwgIS9eW2EtekEtWjAtOV8tXXsxLDY0fSQvLnRlc3QoZm9ybWF0Lm5hbWUpIHx8ICFmb3JtYXQuc2NoZW1hIHx8IHR5cGVvZiBmb3JtYXQuc2NoZW1hICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGZvcm1hdC5zY2hlbWEpXG4gICAgfHwgKGZvcm1hdC5zdHJpY3QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZm9ybWF0LnN0cmljdCAhPT0gJ2Jvb2xlYW4nKVxuICApKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGZvcm1hdC4gSlNPTiBzY2hlbWFzIHJlcXVpcmUgYSBuYW1lIGFuZCBzY2hlbWEgb2JqZWN0LicpO1xuICB9XG4gIGlmKFsnZ2VtaW5pJywgJ29sbGFtYSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSAmJiBmb3JtYXQgIT09IHVuZGVmaW5lZCAmJiAoZm9ybWF0LnR5cGUgPT09ICdqc29uX3NjaGVtYScgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignVGhpcyBwcm92aWRlciBzdXBwb3J0cyB0ZXh0IG9yIGpzb25fb2JqZWN0IGZvciB0ZXh0IGdlbmVyYXRpb24gb25seS4nKTtcbiAgfVxuICBpZihpbnB1dC50b3BQICE9PSB1bmRlZmluZWQgJiYgKGlucHV0LnByb3ZpZGVyICE9PSAnb2xsYW1hJyB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCAhTnVtYmVyLmlzRmluaXRlKGlucHV0LnRvcFApIHx8IGlucHV0LnRvcFAgPCAwIHx8IGlucHV0LnRvcFAgPiAxKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RvcFAgcmVxdWlyZXMgYW4gT2xsYW1hIHRleHQgcmVxdWVzdCBhbmQgYSBmaW5pdGUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLicpO1xuICB9XG4gIGlmKGlucHV0LnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQgJiYgKCFbJ2dlbWluaScsICdvbGxhbWEnXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgIU51bWJlci5pc0Zpbml0ZShpbnB1dC50ZW1wZXJhdHVyZSkgfHwgaW5wdXQudGVtcGVyYXR1cmUgPCAwIHx8IChpbnB1dC5wcm92aWRlciA9PT0gJ2dlbWluaScgJiYgaW5wdXQudGVtcGVyYXR1cmUgPiAyKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCd0ZW1wZXJhdHVyZSByZXF1aXJlcyBhIG5vbm5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSBmb3IgT2xsYW1hIHRleHQgb3IgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDIgZm9yIEdlbWluaSB0ZXh0LicpO1xuICB9XG4gIGlmKGlucHV0Lm1heFRva2VucyAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzSW50ZWdlcihpbnB1dC5tYXhUb2tlbnMpIHx8IGlucHV0Lm1heFRva2VucyA8IDEpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignbWF4VG9rZW5zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLicpO1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyICE9PSAnZ2VtaW5pJyAmJiAoKGlucHV0LnByb3ZpZGVyICE9PSAnb2xsYW1hJyAmJiBpbnB1dC5pbWFnZXM/Lmxlbmd0aCkgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgaW5wdXQuc2VhcmNoKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ1RoaXMgcHJvdmlkZXIgb3BlcmF0aW9uIHN1cHBvcnRzIHRleHQgaW5wdXQgYW5kIG91dHB1dCBvbmx5LicpO1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnb2xsYW1hJykgcmV0dXJuIGdlbmVyYXRlT2xsYW1hQ29udGVudChpbnB1dCwgY29uZmlnKTtcbiAgY29uc3Qge3Byb21wdCwgaW1hZ2VzID0gW119ID0gaW5wdXQ7XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnY2xhdWRlJykge1xuICAgIGlmKCFjb25maWcuY2xhdWRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdDbGF1ZGUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCgnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcycsIHtcbiAgICAgIG1heF90b2tlbnM6IGlucHV0Lm1heFRva2VucyA/PyA0MDk2LFxuICAgICAgbWVzc2FnZXM6IFt7Y29udGVudDogcHJvbXB0LCByb2xlOiAndXNlcid9XSxcbiAgICAgIG1vZGVsOiBpbnB1dC5tb2RlbCB8fCBjb25maWcuY2xhdWRlTW9kZWwgfHwgJ2NsYXVkZS1zb25uZXQtNScsXG4gICAgICBzeXN0ZW06IGlucHV0LnN5c3RlbVxuICAgIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsnYW50aHJvcGljLXZlcnNpb24nOiAnMjAyMy0wNi0wMScsICd4LWFwaS1rZXknOiBjb25maWcuY2xhdWRlS2V5fSksIHRpbWVvdXQ6IGlucHV0LnRpbWVvdXRNcyA/PyAxMjBfMDAwfSkgYXMge1xuICAgICAgY29udGVudD86IHt0ZXh0Pzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdO1xuICAgICAgZXJyb3I/OiB7dHlwZT86IHN0cmluZ307XG4gICAgICBzdG9wX3JlYXNvbj86IHN0cmluZztcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBpZihyZXNwb25zZS5lcnJvciAmJiBbJ2F1dGhlbnRpY2F0aW9uX2Vycm9yJywgJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicsICdub3RfZm91bmRfZXJyb3InLCAncGVybWlzc2lvbl9lcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLnR5cGUgfHwgJycpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdDbGF1ZGUgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSBtb2RlbCBhbmQgYWNjb3VudCBhY2Nlc3MuJyk7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSByZXNwb25zZS5jb250ZW50Py5maWx0ZXIoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuam9pbignXFxuJykudHJpbSgpO1xuICAgIGlmKHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnR5cGUgIT09ICdtZXNzYWdlJyB8fCByZXNwb25zZS5zdG9wX3JlYXNvbiAhPT0gJ2VuZF90dXJuJyB8fCAhdGV4dCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignQ2xhdWRlIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHR9O1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnb3BlbmFpJykge1xuICAgIGlmKCFjb25maWcub3BlbmFpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdPcGVuQUkgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCgnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9yZXNwb25zZXMnLCB7XG4gICAgICBpbnB1dDogaW5wdXQubWVzc2FnZXM/Lm1hcCgobWVzc2FnZSkgPT4gKHtjb250ZW50OiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UuY29udGVudCA6IG1lc3NhZ2UuY29udGVudC5tYXAoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ3RleHQnXG4gICAgICAgID8ge3RleHQ6IHBhcnQudGV4dCwgdHlwZTogJ2lucHV0X3RleHQnfSA6IHtkZXRhaWw6IHBhcnQuZGV0YWlsID8/ICdhdXRvJywgaW1hZ2VfdXJsOiBwYXJ0LnVybCwgdHlwZTogJ2lucHV0X2ltYWdlJ30pLCByb2xlOiBtZXNzYWdlLnJvbGUgPT09ICdzeXN0ZW0nID8gJ2RldmVsb3BlcicgOiBtZXNzYWdlLnJvbGV9KSkgPz8gcHJvbXB0LFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnB1dC5zeXN0ZW0sXG4gICAgICBtYXhfb3V0cHV0X3Rva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICBtb2RlbDogaW5wdXQubW9kZWwgfHwgY29uZmlnLm9wZW5haU1vZGVsIHx8ICdncHQtNi1hc3RyYScsXG4gICAgICAuLi4oaW5wdXQucmVhc29uaW5nRWZmb3J0ID8ge3JlYXNvbmluZzoge2VmZm9ydDogaW5wdXQucmVhc29uaW5nRWZmb3J0fX0gOiB7fSksXG4gICAgICBzdG9yZTogZmFsc2UsXG4gICAgICAuLi4oZm9ybWF0ID8ge3RleHQ6IHtmb3JtYXR9fSA6IHt9KSxcbiAgICAgIHRydW5jYXRpb246ICdkaXNhYmxlZCdcbiAgICB9LCB7Y2FjaGU6IGZhbHNlLCBoZWFkZXJzOiBuZXcgSGVhZGVycyh7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy5vcGVuYWlLZXl9YH0pLCB0aW1lb3V0OiBpbnB1dC50aW1lb3V0TXMgPz8gMTIwXzAwMH0pIGFzIHtcbiAgICAgIGVycm9yPzoge2NvZGU/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9O1xuICAgICAgb3V0cHV0Pzoge2NvbnRlbnQ/OiB7dGV4dD86IHN0cmluZzsgdHlwZT86IHN0cmluZ31bXTsgc3RhdHVzPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfVtdO1xuICAgICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIH07XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWydpbnZhbGlkX3JlcXVlc3RfZXJyb3InLCAnYXV0aGVudGljYXRpb25fZXJyb3InLCAncGVybWlzc2lvbl9lcnJvciddLmluY2x1ZGVzKHJlc3BvbnNlLmVycm9yLnR5cGUgfHwgJycpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdPcGVuQUkgcmVqZWN0ZWQgdGhlIHJlcXVlc3QuIENoZWNrIHRoZSBtb2RlbCBhbmQgYWNjb3VudCBhY2Nlc3MuJyk7XG4gICAgfVxuICAgIGlmKHJlc3BvbnNlLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcgfHwgcmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2luY29tcGxldGUnKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignT3BlbkFJIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ6IGdlbmVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZS4nKTtcbiAgICB9XG4gICAgaWYocmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLmNvbnRlbnQ/LnNvbWUoKHBhcnQpID0+IHBhcnQudHlwZSA9PT0gJ3JlZnVzYWwnKSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ09wZW5BSSBkZWNsaW5lZCB0aGUgcmVxdWVzdC4nKTtcbiAgICB9XG4gICAgaWYocmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLnR5cGUgJiYgIVsnbWVzc2FnZScsICdyZWFzb25pbmcnXS5pbmNsdWRlcyhpdGVtLnR5cGUpKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignT3BlbkFJIHJldHVybmVkIGFuIHVuc3VwcG9ydGVkIG91dHB1dCBpdGVtLicpO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gcmVzcG9uc2Uub3V0cHV0Py5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ21lc3NhZ2UnKS5mbGF0TWFwKChpdGVtKSA9PiBpdGVtLmNvbnRlbnQgfHwgW10pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdvdXRwdXRfdGV4dCcpLm1hcCgocGFydCkgPT4gcGFydC50ZXh0IHx8ICcnKS5qb2luKCcnKS50cmltKCk7XG4gICAgaWYoIXRleHQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ09wZW5BSSByZXR1cm5lZCBlbXB0eSBvdXRwdXQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHR9O1xuICB9XG4gIGlmKCFjb25maWcuZ2VtaW5pS2V5KSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignR2VtaW5pIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoaXMgc2VydmVyLicpO1xuICB9XG4gIGNvbnN0IHBhcnRzOiB1bmtub3duW10gPSBbe3RleHQ6IHByb21wdH0sIC4uLmltYWdlcy5tYXAoKGltYWdlKSA9PiAoe2lubGluZURhdGE6IHtkYXRhOiBpbWFnZS5ieXRlcy50b1N0cmluZygnYmFzZTY0JyksIG1pbWVUeXBlOiBpbWFnZS5taW1lfX0pKV07XG4gIGNvbnN0IG1vZGVsID0gaW5wdXQubW9kZWwgfHwgKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gY29uZmlnLmdlbWluaUltYWdlTW9kZWwgfHwgJ2dlbWluaS0zLjEtZmxhc2gtaW1hZ2UnIDogY29uZmlnLmdlbWluaU1vZGVsIHx8ICdnZW1pbmktMy44LWZsYXNoJyk7XG4gIGlmKCEvXlthLXpBLVowLTkuXy1dKyQvLnRlc3QobW9kZWwpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignSW52YWxpZCBHZW1pbmkgbW9kZWwgY29uZmlndXJhdGlvbi4nKTtcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoYGh0dHBzOi8vZ2VuZXJhdGl2ZWxhbmd1YWdlLmdvb2dsZWFwaXMuY29tL3YxYmV0YS9tb2RlbHMvJHttb2RlbH06Z2VuZXJhdGVDb250ZW50YCwge1xuICAgIGNvbnRlbnRzOiBbe3BhcnRzLCByb2xlOiAndXNlcid9XSxcbiAgICAuLi4oaW5wdXQuc3lzdGVtID8ge3N5c3RlbUluc3RydWN0aW9uOiB7cGFydHM6IFt7dGV4dDogaW5wdXQuc3lzdGVtfV19fSA6IHt9KSxcbiAgICBnZW5lcmF0aW9uQ29uZmlnOiBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyA/IHsuLi4oaW5wdXQuYXNwZWN0UmF0aW8gPyB7aW1hZ2VDb25maWc6IHthc3BlY3RSYXRpbzogaW5wdXQuYXNwZWN0UmF0aW99fSA6IHt9KSwgcmVzcG9uc2VNb2RhbGl0aWVzOiBbJ1RFWFQnLCAnSU1BR0UnXX0gOiB7XG4gICAgICBtYXhPdXRwdXRUb2tlbnM6IGlucHV0Lm1heFRva2VucyA/PyA0MDk2LFxuICAgICAgLi4uKGZvcm1hdCA/IHtyZXNwb25zZU1pbWVUeXBlOiBmb3JtYXQudHlwZSA9PT0gJ2pzb25fb2JqZWN0JyA/ICdhcHBsaWNhdGlvbi9qc29uJyA6ICd0ZXh0L3BsYWluJ30gOiB7fSksXG4gICAgICAuLi4oaW5wdXQudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCA/IHt0ZW1wZXJhdHVyZTogaW5wdXQudGVtcGVyYXR1cmV9IDoge30pXG4gICAgfSxcbiAgICAuLi4oaW5wdXQuc2VhcmNoID8ge3Rvb2xzOiBbe2dvb2dsZVNlYXJjaDoge319XX0gOiB7fSlcbiAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoeyd4LWdvb2ctYXBpLWtleSc6IGNvbmZpZy5nZW1pbmlLZXl9KSwgdGltZW91dDogaW5wdXQudGltZW91dE1zID8/IDEyMF8wMDB9KSBhcyBHZW1pbmlSZXNwb25zZTtcbiAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWzQwMCwgNDAxLCA0MDMsIDQwNF0uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IuY29kZSB8fCAwKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIHJlZmVyZW5jZSBmb3JtYXQgYW5kIG1vZGVsIGFjY2Vzcy4nKTtcbiAgfVxuICBpZihyZXNwb25zZS5wcm9tcHRGZWVkYmFjaz8uYmxvY2tSZWFzb24gfHwgcmVzcG9uc2UuZXJyb3IgfHwgIXJlc3BvbnNlLmNhbmRpZGF0ZXM/Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0dlbWluaSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkLicpO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHJlc3BvbnNlLmNhbmRpZGF0ZXNbMF0hO1xuICBpZihjYW5kaWRhdGUuZmluaXNoUmVhc29uICE9PSAnU1RPUCcpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdHZW1pbmkgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZDogZ2VuZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlLicpO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IChjYW5kaWRhdGUuY29udGVudD8ucGFydHMgfHwgW10pLmZpbHRlcigocGFydCkgPT4gIXBhcnQudGhvdWdodCk7XG4gIGNvbnN0IGlubGluZSA9IG91dHB1dC5maW5kKChwYXJ0KSA9PiBwYXJ0LmlubGluZURhdGEpPy5pbmxpbmVEYXRhO1xuICBsZXQgaW1hZ2U6IEdlbmVyYXRlZENvbnRlbnRbJ2ltYWdlJ107XG4gIGlmKGlubGluZSAmJiBbJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJ10uaW5jbHVkZXMoaW5saW5lLm1pbWVUeXBlKSkge1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20oaW5saW5lLmRhdGEsICdiYXNlNjQnKTtcbiAgICBpZighYnl0ZXMubGVuZ3RoIHx8IGJ5dGVzLmxlbmd0aCA+IDIwICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0ludmFsaWQgaW1hZ2Ugb3V0cHV0LicpO1xuICAgIH1cbiAgICBpbWFnZSA9IHtieXRlcywgbWltZTogaW5saW5lLm1pbWVUeXBlIGFzICdpbWFnZS9wbmcnIHwgJ2ltYWdlL2pwZWcnfTtcbiAgfVxuICBjb25zdCB0ZXh0ID0gb3V0cHV0Lm1hcCgocGFydCkgPT4gcGFydC50ZXh0IHx8ICcnKS5qb2luKCdcXG4nKS50cmltKCk7XG4gIGlmKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gIWltYWdlIDogIXRleHQpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdUaGUgcmVxdWVzdGVkIG91dHB1dCB3YXMgbm90IHJldHVybmVkLicpO1xuICB9XG4gIGNvbnN0IHNvdXJjZXMgPSAoY2FuZGlkYXRlLmdyb3VuZGluZ01ldGFkYXRhPy5ncm91bmRpbmdDaHVua3MgfHwgW10pLmZsYXRNYXAoKHt3ZWJ9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2ViPy51cmkgfHwgJycpO1xuICAgICAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBbe3RpdGxlOiB3ZWI/LnRpdGxlIHx8IHVybC5ob3N0bmFtZSwgdXJsOiB1cmwuaHJlZn1dIDogW107XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGltYWdlLCBzZWFyY2hTdWdnZXN0aW9uc0h0bWw6IGNhbmRpZGF0ZS5ncm91bmRpbmdNZXRhZGF0YT8uc2VhcmNoRW50cnlQb2ludD8ucmVuZGVyZWRDb250ZW50LCBzb3VyY2VzLCB0ZXh0XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbImdlbmVyYXRlT2xsYW1hQ29udGVudCIsIkNvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciIsIkNvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvciIsInBvc3QiLCJDb25maWciLCJ2YWxpZE1lc3NhZ2VDb250ZW50IiwibWVzc2FnZSIsImNvbnRlbnQiLCJ0cmltIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZXZlcnkiLCJwYXJ0IiwidHlwZSIsInRleHQiLCJyb2xlIiwidXJsIiwidGVzdCIsImRldGFpbCIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGVDb250ZW50IiwiaW5wdXQiLCJjb25maWciLCJnZXQiLCJwcm92aWRlciIsIm1lc3NhZ2VzIiwicHJvbXB0Iiwic29tZSIsInJlYXNvbmluZ0VmZm9ydCIsInJlc3BvbnNlRm9ybWF0IiwidGltZW91dE1zIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiZm9ybWF0IiwibmFtZSIsInNjaGVtYSIsInN0cmljdCIsIm1vZGFsaXR5IiwidG9wUCIsImlzRmluaXRlIiwidGVtcGVyYXR1cmUiLCJtYXhUb2tlbnMiLCJpbWFnZXMiLCJzZWFyY2giLCJjbGF1ZGVLZXkiLCJyZXNwb25zZSIsIm1heF90b2tlbnMiLCJtb2RlbCIsImNsYXVkZU1vZGVsIiwic3lzdGVtIiwiY2FjaGUiLCJoZWFkZXJzIiwiSGVhZGVycyIsInRpbWVvdXQiLCJlcnJvciIsImZpbHRlciIsIm1hcCIsImpvaW4iLCJzdG9wX3JlYXNvbiIsInNvdXJjZXMiLCJvcGVuYWlLZXkiLCJpbWFnZV91cmwiLCJpbnN0cnVjdGlvbnMiLCJtYXhfb3V0cHV0X3Rva2VucyIsIm9wZW5haU1vZGVsIiwicmVhc29uaW5nIiwiZWZmb3J0Iiwic3RvcmUiLCJ0cnVuY2F0aW9uIiwiQXV0aG9yaXphdGlvbiIsInN0YXR1cyIsIm91dHB1dCIsIml0ZW0iLCJmbGF0TWFwIiwiZ2VtaW5pS2V5IiwicGFydHMiLCJpbWFnZSIsImlubGluZURhdGEiLCJkYXRhIiwiYnl0ZXMiLCJ0b1N0cmluZyIsIm1pbWVUeXBlIiwibWltZSIsImdlbWluaUltYWdlTW9kZWwiLCJnZW1pbmlNb2RlbCIsImNvbnRlbnRzIiwic3lzdGVtSW5zdHJ1Y3Rpb24iLCJnZW5lcmF0aW9uQ29uZmlnIiwiYXNwZWN0UmF0aW8iLCJpbWFnZUNvbmZpZyIsInJlc3BvbnNlTW9kYWxpdGllcyIsIm1heE91dHB1dFRva2VucyIsInJlc3BvbnNlTWltZVR5cGUiLCJ0b29scyIsImdvb2dsZVNlYXJjaCIsImNvZGUiLCJwcm9tcHRGZWVkYmFjayIsImJsb2NrUmVhc29uIiwiY2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsImZpbmlzaFJlYXNvbiIsInRob3VnaHQiLCJpbmxpbmUiLCJmaW5kIiwiQnVmZmVyIiwiZnJvbSIsImdyb3VuZGluZ01ldGFkYXRhIiwiZ3JvdW5kaW5nQ2h1bmtzIiwid2ViIiwiVVJMIiwidXJpIiwicHJvdG9jb2wiLCJ0aXRsZSIsImhvc3RuYW1lIiwiaHJlZiIsInNlYXJjaFN1Z2dlc3Rpb25zSHRtbCIsInNlYXJjaEVudHJ5UG9pbnQiLCJyZW5kZXJlZENvbnRlbnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLHFCQUFxQixRQUFPLHdCQUF3QjtBQUM1RCxTQUFRQyw4QkFBOEIsRUFBRUMsOEJBQThCLFFBQU8sK0JBQStCO0FBQzVHLFNBQVFELDhCQUE4QixFQUFFQyw4QkFBOEIsUUFBTywrQkFBK0I7QUFDNUcsU0FBUUMsSUFBSSxRQUFPLG9CQUFvQjtBQUV2QyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQW1FcEMsTUFBTUMsc0JBQXNCLENBQUNDO0lBQzNCLElBQUcsT0FBT0EsUUFBUUMsT0FBTyxLQUFLLFVBQVUsT0FBTyxDQUFDLENBQUNELFFBQVFDLE9BQU8sQ0FBQ0MsSUFBSTtJQUNyRSxPQUFPQyxNQUFNQyxPQUFPLENBQUNKLFFBQVFDLE9BQU8sS0FBS0QsUUFBUUMsT0FBTyxDQUFDSSxNQUFNLEdBQUcsS0FBS0wsUUFBUUMsT0FBTyxDQUFDSyxLQUFLLENBQUMsQ0FBQ0M7UUFDNUYs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
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dlbmVyYXRlT2xsYW1hQ29udGVudH0gZnJvbSAnLi9vbGxhbWFHZW5lcmF0aW9uLmpzJztcbmltcG9ydCB7Q29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yLCBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3J9IGZyb20gJy4vY29udGVudEdlbmVyYXRpb25FcnJvcnMuanMnO1xuZXhwb3J0IHtDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IsIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcn0gZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbkVycm9ycy5qcyc7XG5pbXBvcnQge3Bvc3R9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25Db25maWcge1xuICBjbGF1ZGVLZXk/OiBzdHJpbmc7XG4gIGNsYXVkZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlJbWFnZU1vZGVsPzogc3RyaW5nO1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBncm9rS2V5Pzogc3RyaW5nO1xuICBncm9rTW9kZWw/OiBzdHJpbmc7XG4gIG9sbGFtYT86IHtlbmRwb2ludDogc3RyaW5nOyBwcm90b2NvbDogJ2dlbmVyYXRlJyB8ICdjaGF0JyB8ICdvcGVuYWktY2hhdCd9O1xuICBvcGVuYWlLZXk/OiBzdHJpbmc7XG4gIG9wZW5haU1vZGVsPzogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgQ29udGVudEdlbmVyYXRpb25QYXJ0ID0ge3RleHQ6IHN0cmluZzsgdHlwZTogJ3RleHQnfSB8IHtcbiAgZGV0YWlsPzogJ2F1dG8nIHwgJ2hpZ2gnIHwgJ2xvdyc7XG4gIHR5cGU6ICdpbWFnZSc7XG4gIHVybDogc3RyaW5nO1xufTtcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEdlbmVyYXRpb25NZXNzYWdlIHtcbiAgY29udGVudDogc3RyaW5nIHwgQ29udGVudEdlbmVyYXRpb25QYXJ0W107XG4gIHJvbGU6ICdhc3Npc3RhbnQnIHwgJ2RldmVsb3BlcicgfCAnc3lzdGVtJyB8ICd1c2VyJztcbn1cbmV4cG9ydCB0eXBlIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VGb3JtYXQgPSB7dHlwZTogJ2pzb25fb2JqZWN0JyB8ICd0ZXh0J30gfCB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0cmljdD86IGJvb2xlYW47XG4gIHR5cGU6ICdqc29uX3NjaGVtYSc7XG59O1xuZXhwb3J0IHR5cGUgQ29udGVudEdlbmVyYXRpb25SZWFzb25pbmdFZmZvcnQgPSAnbm9uZScgfCAnbWluaW1hbCcgfCAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ3hoaWdoJyB8ICdtYXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRHZW5lcmF0aW9uSW5wdXQge1xuICBhc3BlY3RSYXRpbz86IHN0cmluZztcbiAgaW1hZ2VzPzoge2J5dGVzOiBCdWZmZXI7IG1pbWU6IHN0cmluZ31bXTtcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICBtZXNzYWdlcz86IENvbnRlbnRHZW5lcmF0aW9uTWVzc2FnZVtdO1xuICBtb2RhbGl0eT86ICdpbWFnZScgfCAndGV4dCc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBvdXRwdXRUZXh0TW9kZT86ICdwcmVzZXJ2ZScgfCAndHJpbSc7XG4gIHByb21wdD86IHN0cmluZztcbiAgcHJvdmlkZXI6ICdjbGF1ZGUnIHwgJ2dlbWluaScgfCAnZ3JvaycgfCAnb2xsYW1hJyB8ICdvcGVuYWknO1xuICByZWFzb25pbmdFZmZvcnQ/OiBDb250ZW50R2VuZXJhdGlvblJlYXNvbmluZ0VmZm9ydDtcbiAgcmVzcG9uc2VGb3JtYXQ/OiBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRm9ybWF0O1xuICBzZWFyY2g/OiBib29sZWFuO1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHRvcFA/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZENvbnRlbnQge1xuICBpbWFnZT86IHtieXRlczogQnVmZmVyOyBtaW1lOiAnaW1hZ2UvanBlZycgfCAnaW1hZ2UvcG5nJ307XG4gIHNlYXJjaFN1Z2dlc3Rpb25zSHRtbD86IHN0cmluZztcbiAgc291cmNlczoge3RpdGxlOiBzdHJpbmc7IHVybDogc3RyaW5nfVtdO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgR2VtaW5pUGFydCB7aW5saW5lRGF0YT86IHtkYXRhOiBzdHJpbmc7IG1pbWVUeXBlOiBzdHJpbmd9OyB0ZXh0Pzogc3RyaW5nOyB0aG91Z2h0PzogYm9vbGVhbn1cbmludGVyZmFjZSBHZW1pbmlSZXNwb25zZSB7XG4gIGNhbmRpZGF0ZXM/OiB7XG4gICAgY29udGVudD86IHtwYXJ0cz86IEdlbWluaVBhcnRbXX07XG4gICAgZmluaXNoUmVhc29uPzogc3RyaW5nO1xuICAgIGdyb3VuZGluZ01ldGFkYXRhPzoge1xuICAgICAgZ3JvdW5kaW5nQ2h1bmtzPzoge3dlYj86IHt0aXRsZT86IHN0cmluZzsgdXJpPzogc3RyaW5nfX1bXTtcbiAgICAgIHNlYXJjaEVudHJ5UG9pbnQ/OiB7cmVuZGVyZWRDb250ZW50Pzogc3RyaW5nfTtcbiAgICB9O1xuICB9W107XG4gIGVycm9yPzoge2NvZGU/OiBudW1iZXJ9O1xuICBwcm9tcHRGZWVkYmFjaz86IHtibG9ja1JlYXNvbj86IHN0cmluZ307XG59XG5cbmNvbnN0IHZhbGlkTWVzc2FnZUNvbnRlbnQgPSAobWVzc2FnZTogQ29udGVudEdlbmVyYXRpb25NZXNzYWdlKTogYm9vbGVhbiA9PiB7XG4gIGlmKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICEhbWVzc2FnZS5jb250ZW50LnRyaW0oKTtcbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpICYmIG1lc3NhZ2UuY29udGVudC5sZW5ndGggPiAwICYmIG1lc3NhZ2UuY29udGVudC5ldmVyeSgocGFydCkgPT4ge1xuICAgIGlmKCFwYXJ0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmKHBhcnQudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnQudGV4dCA9PT0gJ3N0cmluZycgJiYgISFwYXJ0LnRleHQudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydC50eXBlID09PSAnaW1hZ2UnICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ3VzZXInICYmIHR5cGVvZiBwYXJ0LnVybCA9PT0gJ3N0cmluZydcbiAgICAgICYmIC9eKGh0dHBzPzpcXC9cXC9bXlxcc10rfGRhdGE6aW1hZ2VcXC8ocG5nfGpwZWd8d2VicHxnaWYpO2Jhc2U2NCxbQS1aYS16MC05Ky9dKz17MCwyfSkkLy50ZXN0KHBhcnQudXJsKVxuICAgICAgJiYgKHBhcnQuZGV0YWlsID09PSB1bmRlZmluZWQgfHwgWydhdXRvJywgJ2hpZ2gnLCAnbG93J10uaW5jbHVkZXMocGFydC5kZXRhaWwpKTtcbiAgfSk7XG59O1xuXG4vKiogU2luZ2xlIHN1Ym1pc3Npb24gdGhyb3VnaCBSaXAtSHVudGVyOyBjYWxsZXJzIG93biBkdXJhYmxlIGpvYnMgYW5kIHJlY29uY2lsaWF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29udGVudCA9IGFzeW5jIChcbiAgaW5wdXQ6IENvbnRlbnRHZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogQ29udGVudEdlbmVyYXRpb25Db25maWcgPSBDb25maWcuZ2V0PENvbnRlbnRHZW5lcmF0aW9uQ29uZmlnPignY29udGVudEdlbmVyYXRpb24nKSB8fCB7fVxuKTogUHJvbWlzZTxHZW5lcmF0ZWRDb250ZW50PiA9PiB7XG4gIGlmKCFbJ2NsYXVkZScsICdnZW1pbmknLCAnZ3JvaycsICdvbGxhbWEnLCAnb3BlbmFpJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignQSBzdXBwb3J0ZWQgcHJvdmlkZXIgaXMgcmVxdWlyZWQuJyk7XG4gIH1cbiAgaWYoaW5wdXQub3V0cHV0VGV4dE1vZGUgIT09IHVuZGVmaW5lZFxuICAgICYmICghWydjbGF1ZGUnLCAnb3BlbmFpJywgJ2dyb2snXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgfHwgIVsncHJlc2VydmUnLCAndHJpbSddLmluY2x1ZGVzKGlucHV0Lm91dHB1dFRleHRNb2RlKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdvdXRwdXRUZXh0TW9kZSByZXF1aXJlcyBDbGF1ZGUsIE9wZW5BSSBvciBHcm9rIGFuZCBwcmVzZXJ2ZSBvciB0cmltLicpO1xuICB9XG4gIGlmKGlucHV0Lm1lc3NhZ2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZihpbnB1dC5wcm9tcHQgIT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShpbnB1dC5tZXNzYWdlcykgfHwgIWlucHV0Lm1lc3NhZ2VzLmxlbmd0aFxuICAgICAgfHwgaW5wdXQubWVzc2FnZXMuc29tZSgobWVzc2FnZSkgPT5cbiAgICAgICAgIW1lc3NhZ2UgfHwgIVsnYXNzaXN0YW50JywgJ2RldmVsb3BlcicsICdzeXN0ZW0nLCAndXNlciddLmluY2x1ZGVzKG1lc3NhZ2Uucm9sZSkgfHwgIXZhbGlkTWVzc2FnZUNvbnRlbnQobWVzc2FnZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdTdXBwbHkgZWl0aGVyIGEgbm9uLWVtcHR5IHByb21wdCBvciBub24tZW1wdHkgdGV4dCBtZXNzYWdlcyB3aXRoIHN1cHBvcnRlZCByb2xlcy4nKTtcbiAgICB9XG4gIH0gZWxzZSBpZih0eXBlb2YgaW5wdXQucHJvbXB0ICE9PSAnc3RyaW5nJyB8fCAhaW5wdXQucHJvbXB0LnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0Egbm9uLWVtcHR5IHByb21wdCBpcyByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciAhPT0gJ29wZW5haSdcbiAgICAmJiAoaW5wdXQubWVzc2FnZXMgIT09IHVuZGVmaW5lZCB8fCBpbnB1dC5yZWFzb25pbmdFZmZvcnQgIT09IHVuZGVmaW5lZFxuICAgICAgfHwgKFsnY2xhdWRlJywgJ2dyb2snXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgJiYgaW5wdXQucmVzcG9uc2VGb3JtYXQgIT09IHVuZGVmaW5lZCkpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcihcbiAgICAgICdNZXNzYWdlcyBhbmQgcmVhc29uaW5nIGVmZm9ydCByZXF1aXJlIE9wZW5BSTsgQ2xhdWRlIGFuZCBHcm9rIGRvIG5vdCBzdXBwb3J0IHJlc3BvbnNlIGZvcm1hdCBvcHRpb25zLidcbiAgICApO1xuICB9XG4gIGlmKGlucHV0LnRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlucHV0LnRpbWVvdXRNcykgfHwgaW5wdXQudGltZW91dE1zIDwgMSB8fCBpbnB1dC50aW1lb3V0TXMgPiAyXzE0N180ODNfNjQ3KSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ3RpbWVvdXRNcyBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIuJyk7XG4gIH1cbiAgaWYoaW5wdXQucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWQgJiYgIVsnbm9uZScsICdtaW5pbWFsJywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICd4aGlnaCcsICdtYXgnXS5pbmNsdWRlcyhpbnB1dC5yZWFzb25pbmdFZmZvcnQpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignVW5zdXBwb3J0ZWQgcmVhc29uaW5nIGVmZm9ydC4nKTtcbiAgfVxuICBjb25zdCBmb3JtYXQgPSBpbnB1dC5yZXNwb25zZUZvcm1hdDtcbiAgaWYoZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKCFmb3JtYXQgfHwgIVsndGV4dCcsICdqc29uX29iamVjdCcsICdqc29uX3NjaGVtYSddLmluY2x1ZGVzKGZvcm1hdC50eXBlKSB8fCAoZm9ybWF0LnR5cGUgPT09ICdqc29uX3NjaGVtYScgJiYgKFxuICAgIHR5cGVvZiBmb3JtYXQubmFtZSAhPT0gJ3N0cmluZycgfHwgIS9eW2EtekEtWjAtOV8tXXsxLDY0fSQvLnRlc3QoZm9ybWF0Lm5hbWUpIHx8ICFmb3JtYXQuc2NoZW1hIHx8IHR5cGVvZiBmb3JtYXQuc2NoZW1hICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGZvcm1hdC5zY2hlbWEpXG4gICAgfHwgKGZvcm1hdC5zdHJpY3QgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZm9ybWF0LnN0cmljdCAhPT0gJ2Jvb2xlYW4nKVxuICApKSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGZvcm1hdC4gSlNPTiBzY2hlbWFzIHJlcXVpcmUgYSBuYW1lIGFuZCBzY2hlbWEgb2JqZWN0LicpO1xuICB9XG4gIGlmKFsnZ2VtaW5pJywgJ29sbGFtYSddLmluY2x1ZGVzKGlucHV0LnByb3ZpZGVyKSAmJiBmb3JtYXQgIT09IHVuZGVmaW5lZCAmJiAoZm9ybWF0LnR5cGUgPT09ICdqc29uX3NjaGVtYScgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignVGhpcyBwcm92aWRlciBzdXBwb3J0cyB0ZXh0IG9yIGpzb25fb2JqZWN0IGZvciB0ZXh0IGdlbmVyYXRpb24gb25seS4nKTtcbiAgfVxuICBpZihpbnB1dC50b3BQICE9PSB1bmRlZmluZWQgJiYgKCFbJ2dlbWluaScsICdvbGxhbWEnXS5pbmNsdWRlcyhpbnB1dC5wcm92aWRlcikgfHwgaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgfHwgIU51bWJlci5pc0Zpbml0ZShpbnB1dC50b3BQKSB8fCBpbnB1dC50b3BQIDwgMCB8fCBpbnB1dC50b3BQID4gMSkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCd0b3BQIHJlcXVpcmVzIGEgR2VtaW5pIG9yIE9sbGFtYSB0ZXh0IHJlcXVlc3QgYW5kIGEgZmluaXRlIHZhbHVlIGJldHdlZW4gMCBhbmQgMS4nKTtcbiAgfVxuICBpZihpbnB1dC50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkICYmICghWydnZW1pbmknLCAnb2xsYW1hJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpIHx8IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnIHx8ICFOdW1iZXIuaXNGaW5pdGUoaW5wdXQudGVtcGVyYXR1cmUpIHx8IGlucHV0LnRlbXBlcmF0dXJlIDwgMCB8fCAoaW5wdXQucHJvdmlkZXIgPT09ICdnZW1pbmknICYmIGlucHV0LnRlbXBlcmF0dXJlID4gMikpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcigndGVtcGVyYXR1cmUgcmVxdWlyZXMgYSBub25uZWdhdGl2ZSBmaW5pdGUgdmFsdWUgZm9yIE9sbGFtYSB0ZXh0IG9yIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyIGZvciBHZW1pbmkgdGV4dC4nKTtcbiAgfVxuICBpZihpbnB1dC5tYXhUb2tlbnMgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQubWF4VG9rZW5zKSB8fCBpbnB1dC5tYXhUb2tlbnMgPCAxKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ21heFRva2VucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTtcbiAgfVxuICBpZihpbnB1dC5wcm92aWRlciAhPT0gJ2dlbWluaSdcbiAgICAmJiAoKGlucHV0LmltYWdlcz8ubGVuZ3RoICYmICFbJ2dyb2snLCAnb2xsYW1hJ10uaW5jbHVkZXMoaW5wdXQucHJvdmlkZXIpKSB8fCBpbnB1dC5tb2RhbGl0eSA9PT0gJ2ltYWdlJyB8fCBpbnB1dC5zZWFyY2gpKSB7XG4gICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignVGhpcyBwcm92aWRlciBvcGVyYXRpb24gc3VwcG9ydHMgdGV4dCBpbnB1dCBhbmQgb3V0cHV0IG9ubHkuJyk7XG4gIH1cbiAgaWYoaW5wdXQucHJvdmlkZXIgPT09ICdvbGxhbWEnKSByZXR1cm4gZ2VuZXJhdGVPbGxhbWFDb250ZW50KGlucHV0LCBjb25maWcpO1xuICBjb25zdCB7cHJvbXB0LCBpbWFnZXMgPSBbXX0gPSBpbnB1dDtcbiAgaWYoaW5wdXQucHJvdmlkZXIgPT09ICdjbGF1ZGUnKSB7XG4gICAgaWYoIWNvbmZpZy5jbGF1ZGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0NsYXVkZSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGlzIHNlcnZlci4nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwb3N0KCdodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzJywge1xuICAgICAgbWF4X3Rva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICBtZXNzYWdlczogW3tjb250ZW50OiBwcm9tcHQsIHJvbGU6ICd1c2VyJ31dLFxuICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsIHx8IGNvbmZpZy5jbGF1ZGVNb2RlbCB8fCAnY2xhdWRlLXNvbm5ldC01JyxcbiAgICAgIHN5c3RlbTogaW5wdXQuc3lzdGVtXG4gICAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoeydhbnRocm9waWMtdmVyc2lvbic6ICcyMDIzLTA2LTAxJywgJ3gtYXBpLWtleSc6IGNvbmZpZy5jbGF1ZGVLZXl9KSwgdGltZW91dDogaW5wdXQudGltZW91dE1zID8/IDEyMF8wMDB9KSBhcyB7XG4gICAgICBjb250ZW50Pzoge3RleHQ/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9W107XG4gICAgICBlcnJvcj86IHt0eXBlPzogc3RyaW5nfTtcbiAgICAgIHN0b3BfcmVhc29uPzogc3RyaW5nO1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICB9O1xuICAgIGlmKHJlc3BvbnNlLmVycm9yICYmIFsnYXV0aGVudGljYXRpb25fZXJyb3InLCAnaW52YWxpZF9yZXF1ZXN0X2Vycm9yJywgJ25vdF9mb3VuZF9lcnJvcicsICdwZXJtaXNzaW9uX2Vycm9yJ10uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IudHlwZSB8fCAnJykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0NsYXVkZSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIG1vZGVsIGFuZCBhY2NvdW50IGFjY2Vzcy4nKTtcbiAgICB9XG4gICAgY29uc3QgcHJlc2VydmUgPSBpbnB1dC5vdXRwdXRUZXh0TW9kZSA9PT0gJ3ByZXNlcnZlJztcbiAgICBpZihwcmVzZXJ2ZSAmJiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuY29udGVudCkgfHwgcmVzcG9uc2UuY29udGVudC5zb21lKChwYXJ0KSA9PlxuICAgICAgIXBhcnQgfHwgIVsndGV4dCcsICd0aGlua2luZycsICdyZWRhY3RlZF90aGlua2luZyddLmluY2x1ZGVzKHBhcnQudHlwZSB8fCAnJykgfHwgKHBhcnQudHlwZSA9PT0gJ3RleHQnICYmIHR5cGVvZiBwYXJ0LnRleHQgIT09ICdzdHJpbmcnKSkpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdDbGF1ZGUgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZC4nKTtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtzID0gcmVzcG9uc2UuY29udGVudD8uZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICd0ZXh0JykubWFwKChwYXJ0KSA9PiBwYXJ0LnRleHQgfHwgJycpIHx8IFtdO1xuICAgIGNvbnN0IHRleHQgPSBwcmVzZXJ2ZSA/IGNodW5rcy5qb2luKCcnKSA6IGNodW5rcy5qb2luKCdcXG4nKS50cmltKCk7XG4gICAgaWYocmVzcG9uc2UuZXJyb3IgfHwgcmVzcG9uc2UudHlwZSAhPT0gJ21lc3NhZ2UnIHx8IHJlc3BvbnNlLnN0b3BfcmVhc29uICE9PSAnZW5kX3R1cm4nIHx8ICF0ZXh0LnRyaW0oKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvcignQ2xhdWRlIHJlc3BvbnNlIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7c291cmNlczogW10sIHRleHR9O1xuICB9XG4gIGlmKGlucHV0LnByb3ZpZGVyID09PSAnb3BlbmFpJyB8fCBpbnB1dC5wcm92aWRlciA9PT0gJ2dyb2snKSB7XG4gICAgY29uc3QgZ3JvayA9IGlucHV0LnByb3ZpZGVyID09PSAnZ3Jvayc7XG4gICAgY29uc3Qga2V5ID0gZ3JvayA/IGNvbmZpZy5ncm9rS2V5IDogY29uZmlnLm9wZW5haUtleTtcbiAgICBpZigha2V5KSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuYCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdChncm9rID8gJ2h0dHBzOi8vYXBpLnguYWkvdjEvcmVzcG9uc2VzJyA6ICdodHRwczovL2FwaS5vcGVuYWkuY29tL3YxL3Jlc3BvbnNlcycsIHtcbiAgICAgIGlucHV0OiBncm9rICYmIGltYWdlcy5sZW5ndGggPyBbe2NvbnRlbnQ6IFt7dGV4dDogcHJvbXB0LCB0eXBlOiAnaW5wdXRfdGV4dCd9LCAuLi5pbWFnZXMubWFwKChpbWFnZSkgPT4gKHtpbWFnZV91cmw6IGBkYXRhOiR7aW1hZ2UubWltZX07YmFzZTY0LCR7aW1hZ2UuYnl0ZXMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsIHR5cGU6ICdpbnB1dF9pbWFnZSd9KSldLCByb2xlOiAndXNlcid9XSA6IGlucHV0Lm1lc3NhZ2VzPy5tYXAoKG1lc3NhZ2UpID0+ICh7Y29udGVudDogdHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycgPyBtZXNzYWdlLmNvbnRlbnQgOiBtZXNzYWdlLmNvbnRlbnQubWFwKChwYXJ0KSA9PiAocGFydC50eXBlID09PSAndGV4dCdcbiAgICAgICAgPyB7dGV4dDogcGFydC50ZXh0LCB0eXBlOiAnaW5wdXRfdGV4dCd9IDoge2RldGFpbDogcGFydC5kZXRhaWwgPz8gJ2F1dG8nLCBpbWFnZV91cmw6IHBhcnQudXJsLCB0eXBlOiAnaW5wdXRfaW1hZ2UnfSkpLCByb2xlOiBtZXNzYWdlLnJvbGUgPT09ICdzeXN0ZW0nID8gJ2RldmVsb3BlcicgOiBtZXNzYWdlLnJvbGV9KSkgPz8gcHJvbXB0LFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnB1dC5zeXN0ZW0sXG4gICAgICBtYXhfb3V0cHV0X3Rva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICBtb2RlbDogaW5wdXQubW9kZWwgfHwgKGdyb2sgPyBjb25maWcuZ3Jva01vZGVsIHx8ICdncm9rLTQuNycgOiBjb25maWcub3BlbmFpTW9kZWwgfHwgJ2dwdC02LWFzdHJhJyksXG4gICAgICAuLi4oaW5wdXQucmVhc29uaW5nRWZmb3J0ID8ge3JlYXNvbmluZzoge2VmZm9ydDogaW5wdXQucmVhc29uaW5nRWZmb3J0fX0gOiB7fSksXG4gICAgICBzdG9yZTogZmFsc2UsXG4gICAgICAuLi4oZm9ybWF0ID8ge3RleHQ6IHtmb3JtYXR9fSA6IHt9KSxcbiAgICAgIC4uLighZ3JvayA/IHt0cnVuY2F0aW9uOiAnZGlzYWJsZWQnfSA6IHt9KVxuICAgIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7a2V5fWB9KSwgdGltZW91dDogaW5wdXQudGltZW91dE1zID8/IDEyMF8wMDB9KSBhcyB7XG4gICAgICBlcnJvcj86IHtjb2RlPzogc3RyaW5nOyB0eXBlPzogc3RyaW5nfTtcbiAgICAgIG91dHB1dD86IHtjb250ZW50Pzoge3RleHQ/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9W107IHN0YXR1cz86IHN0cmluZzsgdHlwZT86IHN0cmluZ31bXTtcbiAgICAgIHN0YXR1cz86IHN0cmluZztcbiAgICB9O1xuICAgIGlmKHJlc3BvbnNlLmVycm9yICYmIFsnaW52YWxpZF9yZXF1ZXN0X2Vycm9yJywgJ2F1dGhlbnRpY2F0aW9uX2Vycm9yJywgJ3Blcm1pc3Npb25fZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5lcnJvci50eXBlIHx8ICcnKSkge1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcihgJHtncm9rID8gJ0dyb2snIDogJ09wZW5BSSd9IHJlamVjdGVkIHRoZSByZXF1ZXN0LiBDaGVjayB0aGUgbW9kZWwgYW5kIGFjY291bnQgYWNjZXNzLmApO1xuICAgIH1cbiAgICBpZihyZXNwb25zZS5lcnJvciB8fCByZXNwb25zZS5zdGF0dXMgIT09ICdjb21wbGV0ZWQnIHx8IHJlc3BvbnNlLm91dHB1dD8uc29tZSgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdpbmNvbXBsZXRlJykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkOiBnZW5lcmF0aW9uIGRpZCBub3QgY29tcGxldGUuYCk7XG4gICAgfVxuICAgIGlmKHJlc3BvbnNlLm91dHB1dD8uc29tZSgoaXRlbSkgPT4gaXRlbS5jb250ZW50Py5zb21lKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdyZWZ1c2FsJykpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gZGVjbGluZWQgdGhlIHJlcXVlc3QuYCk7XG4gICAgfVxuICAgIGlmKHJlc3BvbnNlLm91dHB1dD8uc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlICYmICFbJ21lc3NhZ2UnLCAncmVhc29uaW5nJ10uaW5jbHVkZXMoaXRlbS50eXBlKSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoYCR7Z3JvayA/ICdHcm9rJyA6ICdPcGVuQUknfSByZXR1cm5lZCBhbiB1bnN1cHBvcnRlZCBvdXRwdXQgaXRlbS5gKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IHJlc3BvbnNlLm91dHB1dD8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09ICdtZXNzYWdlJyB8fCAoZ3JvayAmJiAhaXRlbS50eXBlKSkuZmxhdE1hcCgoaXRlbSkgPT4gaXRlbS5jb250ZW50IHx8IFtdKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydC50eXBlID09PSAnb3V0cHV0X3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuam9pbignJykgfHwgJyc7XG4gICAgaWYoIXRleHQudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKGAke2dyb2sgPyAnR3JvaycgOiAnT3BlbkFJJ30gcmV0dXJuZWQgZW1wdHkgb3V0cHV0LmApO1xuICAgIH1cbiAgICByZXR1cm4ge3NvdXJjZXM6IFtdLCB0ZXh0OiBpbnB1dC5vdXRwdXRUZXh0TW9kZSA9PT0gJ3ByZXNlcnZlJyA/IHRleHQgOiB0ZXh0LnRyaW0oKX07XG4gIH1cbiAgaWYoIWNvbmZpZy5nZW1pbmlLZXkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdHZW1pbmkgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBzZXJ2ZXIuJyk7XG4gIH1cbiAgY29uc3QgcGFydHM6IHVua25vd25bXSA9IFt7dGV4dDogcHJvbXB0fSwgLi4uaW1hZ2VzLm1hcCgoaW1hZ2UpID0+ICh7aW5saW5lRGF0YToge2RhdGE6IGltYWdlLmJ5dGVzLnRvU3RyaW5nKCdiYXNlNjQnKSwgbWltZVR5cGU6IGltYWdlLm1pbWV9fSkpXTtcbiAgY29uc3QgbW9kZWwgPSBpbnB1dC5tb2RlbCB8fCAoaW5wdXQubW9kYWxpdHkgPT09ICdpbWFnZScgPyBjb25maWcuZ2VtaW5pSW1hZ2VNb2RlbCB8fCAnZ2VtaW5pLTMuMS1mbGFzaC1pbWFnZScgOiBjb25maWcuZ2VtaW5pTW9kZWwgfHwgJ2dlbWluaS0zLjgtZmxhc2gnKTtcbiAgaWYoIS9eW2EtekEtWjAtOS5fLV0rJC8udGVzdChtb2RlbCkpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdJbnZhbGlkIEdlbWluaSBtb2RlbCBjb25maWd1cmF0aW9uLicpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdChgaHR0cHM6Ly9nZW5lcmF0aXZlbGFuZ3VhZ2UuZ29vZ2xlYXBpcy5jb20vdjFiZXRhL21vZGVscy8ke21vZGVsfTpnZW5lcmF0ZUNvbnRlbnRgLCB7XG4gICAgY29udGVudHM6IFt7cGFydHMsIHJvbGU6ICd1c2VyJ31dLFxuICAgIC4uLihpbnB1dC5zeXN0ZW0gPyB7c3lzdGVtSW5zdHJ1Y3Rpb246IHtwYXJ0czogW3t0ZXh0OiBpbnB1dC5zeXN0ZW19XX19IDoge30pLFxuICAgIGdlbmVyYXRpb25Db25maWc6IGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gey4uLihpbnB1dC5hc3BlY3RSYXRpbyA/IHtpbWFnZUNvbmZpZzoge2FzcGVjdFJhdGlvOiBpbnB1dC5hc3BlY3RSYXRpb319IDoge30pLCByZXNwb25zZU1vZGFsaXRpZXM6IFsnVEVYVCcsICdJTUFHRSddfSA6IHtcbiAgICAgIG1heE91dHB1dFRva2VuczogaW5wdXQubWF4VG9rZW5zID8/IDQwOTYsXG4gICAgICAuLi4oZm9ybWF0ID8ge3Jlc3BvbnNlTWltZVR5cGU6IGZvcm1hdC50eXBlID09PSAnanNvbl9vYmplY3QnID8gJ2FwcGxpY2F0aW9uL2pzb24nIDogJ3RleHQvcGxhaW4nfSA6IHt9KSxcbiAgICAgIC4uLihpbnB1dC50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkID8ge3RlbXBlcmF0dXJlOiBpbnB1dC50ZW1wZXJhdHVyZX0gOiB7fSksXG4gICAgICAuLi4oaW5wdXQudG9wUCAhPT0gdW5kZWZpbmVkID8ge3RvcFA6IGlucHV0LnRvcFB9IDoge30pXG4gICAgfSxcbiAgICAuLi4oaW5wdXQuc2VhcmNoID8ge3Rvb2xzOiBbe2dvb2dsZVNlYXJjaDoge319XX0gOiB7fSlcbiAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoeyd4LWdvb2ctYXBpLWtleSc6IGNvbmZpZy5nZW1pbmlLZXl9KSwgdGltZW91dDogaW5wdXQudGltZW91dE1zID8/IDEyMF8wMDB9KSBhcyBHZW1pbmlSZXNwb25zZTtcbiAgaWYocmVzcG9uc2UuZXJyb3IgJiYgWzQwMCwgNDAxLCA0MDMsIDQwNF0uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IuY29kZSB8fCAwKSkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IoJ0dlbWluaSByZWplY3RlZCB0aGUgcmVxdWVzdC4gQ2hlY2sgdGhlIHJlZmVyZW5jZSBmb3JtYXQgYW5kIG1vZGVsIGFjY2Vzcy4nKTtcbiAgfVxuICBpZihyZXNwb25zZS5wcm9tcHRGZWVkYmFjaz8uYmxvY2tSZWFzb24gfHwgcmVzcG9uc2UuZXJyb3IgfHwgIXJlc3BvbnNlLmNhbmRpZGF0ZXM/Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0dlbWluaSByZXNwb25zZSBjb3VsZCBub3QgYmUgY29uZmlybWVkLicpO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHJlc3BvbnNlLmNhbmRpZGF0ZXNbMF0hO1xuICBpZihjYW5kaWRhdGUuZmluaXNoUmVhc29uICE9PSAnU1RPUCcpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdHZW1pbmkgcmVzcG9uc2UgY291bGQgbm90IGJlIGNvbmZpcm1lZDogZ2VuZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlLicpO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IChjYW5kaWRhdGUuY29udGVudD8ucGFydHMgfHwgW10pLmZpbHRlcigocGFydCkgPT4gIXBhcnQudGhvdWdodCk7XG4gIGNvbnN0IGlubGluZSA9IG91dHB1dC5maW5kKChwYXJ0KSA9PiBwYXJ0LmlubGluZURhdGEpPy5pbmxpbmVEYXRhO1xuICBsZXQgaW1hZ2U6IEdlbmVyYXRlZENvbnRlbnRbJ2ltYWdlJ107XG4gIGlmKGlubGluZSAmJiBbJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJ10uaW5jbHVkZXMoaW5saW5lLm1pbWVUeXBlKSkge1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20oaW5saW5lLmRhdGEsICdiYXNlNjQnKTtcbiAgICBpZighYnl0ZXMubGVuZ3RoIHx8IGJ5dGVzLmxlbmd0aCA+IDIwICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IoJ0ludmFsaWQgaW1hZ2Ugb3V0cHV0LicpO1xuICAgIH1cbiAgICBpbWFnZSA9IHtieXRlcywgbWltZTogaW5saW5lLm1pbWVUeXBlIGFzICdpbWFnZS9wbmcnIHwgJ2ltYWdlL2pwZWcnfTtcbiAgfVxuICBjb25zdCB0ZXh0ID0gb3V0cHV0Lm1hcCgocGFydCkgPT4gcGFydC50ZXh0IHx8ICcnKS5qb2luKCdcXG4nKS50cmltKCk7XG4gIGlmKGlucHV0Lm1vZGFsaXR5ID09PSAnaW1hZ2UnID8gIWltYWdlIDogIXRleHQpIHtcbiAgICB0aHJvdyBuZXcgQ29udGVudEdlbmVyYXRpb25SZXNwb25zZUVycm9yKCdUaGUgcmVxdWVzdGVkIG91dHB1dCB3YXMgbm90IHJldHVybmVkLicpO1xuICB9XG4gIGNvbnN0IHNvdXJjZXMgPSAoY2FuZGlkYXRlLmdyb3VuZGluZ01ldGFkYXRhPy5ncm91bmRpbmdDaHVua3MgfHwgW10pLmZsYXRNYXAoKHt3ZWJ9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2ViPy51cmkgfHwgJycpO1xuICAgICAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBbe3RpdGxlOiB3ZWI/LnRpdGxlIHx8IHVybC5ob3N0bmFtZSwgdXJsOiB1cmwuaHJlZn1dIDogW107XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGltYWdlLCBzZWFyY2hTdWdnZXN0aW9uc0h0bWw6IGNhbmRpZGF0ZS5ncm91bmRpbmdNZXRhZGF0YT8uc2VhcmNoRW50cnlQb2ludD8ucmVuZGVyZWRDb250ZW50LCBzb3VyY2VzLCB0ZXh0XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbImdlbmVyYXRlT2xsYW1hQ29udGVudCIsIkNvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciIsIkNvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvciIsInBvc3QiLCJDb25maWciLCJ2YWxpZE1lc3NhZ2VDb250ZW50IiwibWVzc2FnZSIsImNvbnRlbnQiLCJ0cmltIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZXZlcnkiLCJwYXJ0IiwidHlwZSIsInRleHQiLCJyb2xlIiwidXJsIiwidGVzdCIsImRldGFpbCIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwiZ2VuZXJhdGVDb250ZW50IiwiaW5wdXQiLCJjb25maWciLCJnZXQiLCJwcm92aWRlciIsIm91dHB1dFRleHRNb2RlIiwibWVzc2FnZXMiLCJwcm9tcHQiLCJzb21lIiwicmVhc29uaW5nRWZmb3J0IiwicmVzcG9uc2VGb3JtYXQiLCJ0aW1lb3V0TXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJmb3JtYXQiLCJuYW1lIiwic2NoZW1hIiwic3RyaWN0IiwibW9kYWxpdHkiLCJ0b3BQIiwiaXNGaW5pdGUiLCJ0ZW1wZXJhdHVyZSIsIm1heFRva2VucyIsImltYWdlcyIsInNlYXJjaCIsImNsYXVkZUtleSIsInJlc3BvbnNlIiwibWF4X3Rva2VucyIsIm1vZGVsIiwiY2xhdWRlTW9kZWwiLCJzeXN0ZW0iLCJjYWNoZSIsImhlYWRlcnMiLCJIZWFkZXJzIiwidGltZW91dCIsImVycm9yIiwicHJlc2VydmUiLCJjaHVua3MiLCJmaWx0ZXIiLCJtYXAiLCJqb2luIiwic3RvcF9yZWFzb24iLCJzb3VyY2VzIiwiZ3JvayIsImtleSIsImdyb2tLZXkiLCJvcGVuYWlLZXkiLCJpbWFnZSIsImltYWdlX3VybCIsIm1pbWUiLCJieXRlcyIsInRvU3RyaW5nIiwiaW5zdHJ1Y3Rpb25zIiwibWF4X291dHB1dF90b2tlbnMiLCJncm9rTW9kZWwiLCJvcGVuYWlNb2RlbCIsInJlYXNvbmluZyIsImVmZm9ydCIsInN0b3JlIiwidHJ1bmNhdGlvbiIsIkF1dGhvcml6YXRpb24iLCJzdGF0dXMiLCJvdXRwdXQiLCJpdGVtIiwiZmxhdE1hcCIsImdlbWluaUtleSIsInBhcnRzIiwiaW5saW5lRGF0YSIsImRhdGEiLCJtaW1lVHlwZSIsImdlbWluaUltYWdlTW9kZWwiLCJnZW1pbmlNb2RlbCIsImNvbnRlbnRzIiwic3lzdGVtSW5zdHJ1Y3Rpb24iLCJnZW5lcmF0aW9uQ29uZmlnIiwiYXNwZWN0UmF0aW8iLCJpbWFnZUNvbmZpZyIsInJlc3BvbnNlTW9kYWxpdGllcyIsIm1heE91dHB1dFRva2VucyIsInJlc3BvbnNlTWltZVR5cGUiLCJ0b29scyIsImdvb2dsZVNlYXJjaCIsImNvZGUiLCJwcm9tcHRGZWVkYmFjayIsImJsb2NrUmVhc29uIiwiY2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsImZpbmlzaFJlYXNvbiIsInRob3VnaHQiLCJpbmxpbmUiLCJmaW5kIiwiQnVmZmVyIiwiZnJvbSIsImdyb3VuZGluZ01ldGFkYXRhIiwiZ3JvdW5kaW5nQ2h1bmtzIiwid2ViIiwiVVJMIiwidXJpIiwicHJvdG9jb2wiLCJ0aXRsZSIsImhvc3RuYW1lIiwiaHJlZiIsInNlYXJjaFN1Z2dlc3Rpb25zSHRtbCIsInNlYXJjaEVudHJ5UG9pbnQiLCJyZW5kZXJlZENvbnRlbnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLHFCQUFxQixRQUFPLHdCQUF3QjtBQUM1RCxTQUFRQyw4QkFBOEIsRUFBRUMsOEJBQThCLFFBQU8sK0JBQStCO0FBQzVHLFNBQVFELDhCQUE4QixFQUFFQyw4QkFBOEIsUUFBTywrQkFBK0I7QUFDNUcsU0FBUUMsSUFBSSxRQUFPLG9CQUFvQjtBQUV2QyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQXNFcEMsTUFBTUMsc0JBQXNCLENBQUNDO0lBQzNCLElBQUcsT0FBT0EsUUFBUUMsT0FBTyxLQUFLLFVBQVU7UUFDdEMsT0FBTyxDQUFDLENBQUNELFFBQVFDLE9BQU8sQ0FBQ0MsSUFBSTtJQUMvQjtJQUNBLE9BQU9DLE1BQU1DLE9BQU8sQ0FBQ0osUUFBUUMsT0FBTyxLQUFLRCxRQUFRQyxPQUFPLENBQUNJLE1BQU0sR0FBRyxLQUFLTCxRQUFRQyxPQUFPLENBQUNLLEtBQUssQ0FBQyxDQUFDQztRQUM1RixJQUFHLENBQUNBLE1BQU07WUFDUixPQUFPO1FBQ1Q7UUFDQSxJQUFHQSxLQUFLQyxJQUFJLEtBQUssUUFBUTtZQUN2QixPQUFPLE9BQU9ELEtBQUtFLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQ0YsS0FBS0UsSUFBSSxDQUFDUCxJQUFJO1FBQzFEO1FBQ0EsT0FBT0ssS0FBS0MsSUFBSSxLQUFLLFdBQVdSLFFBQVFVLElBQUksS0FBSyxVQUFVLE9BQU9ILEtBQUtJLEdBQUcsS0FBSyxZQUMxRSxvRkFBb0ZDLElBQUksQ0FBQ0wsS0FBS0ksR0FBRyxLQUNoR0osQ0FBQUEsS0FBS00sTUFBTSxLQUFLQyxhQUFhO1lBQUM7WUFBUTtZQUFRO1NBQU0sQ0FBQ0MsUUFBUSxDQUFDUixLQUFLTSxNQUFNLENBQUE7SUFDakY7QUFDRjtBQUVBLHVGQUF1RixHQUN2RixPQUFPLE1BQU1HLGtCQUFrQixPQUM3QkMsT0FDQUMsU0FBa0NwQixPQUFPcUIsR0FBRyxDQUEwQix3QkFBd0IsQ0FBQyxDQUFDO0lBRWhHLElBQUcsQ0FBQztRQUFDO1FBQVU7UUFBVTtRQUFRO1FBQVU7S0FBUyxDQUFDSixRQUFRLENBQUNFLE1BQU1HLFFBQVEsR0FBRztRQUM3RSxNQUFNLElBQUl6QiwrQkFBK0I7SUFDM0M7SUFDQSxJQUFHc0IsTUFBTUksY0FBYyxLQUFLUCxhQUN0QixDQUFBLENBQUM7UUFBQztRQUFVO1FBQVU7S0FBTyxDQUFDQyxRQUFRLENBQUNFLE1BQU1HLFFBQVEsS0FBSyxDQUFDO1FBQUM7UUFBWTtLQUFPLENBQUNMLFFBQVEsQ0FBQ0UsTUFBTUksY0FBYyxDQUFBLEdBQUk7UUFDckgsTUFBTSxJQUFJMUIsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1LLFFBQVEsS0FBS1IsV0FBVztRQUMvQixJQUFHRyxNQUFNTSxNQUFNLEtBQUtULGFBQWEsQ0FBQ1gsTUFBTUMsT0FBTyxDQUFDYSxNQUFNSyxRQUFRLEtBQUssQ0FBQ0wsTUFBTUssUUFBUSxDQUFDakIsTUFBTSxJQUNwRlksTUFBTUssUUFBUSxDQUFDRSxJQUFJLENBQUMsQ0FBQ3hCLFVBQ3RCLENBQUNBLFdBQVcsQ0FBQztnQkFBQztnQkFBYTtnQkFBYTtnQkFBVTthQUFPLENBQUNlLFFBQVEsQ0FBQ2YsUUFBUVUsSUFBSSxLQUFLLENBQUNYLG9CQUFvQkMsV0FBVztZQUN0SCxNQUFNLElBQUlMLCtCQUErQjtRQUMzQztJQUNGLE9BQU8sSUFBRyxPQUFPc0IsTUFBTU0sTUFBTSxLQUFLLFlBQVksQ0FBQ04sTUFBTU0sTUFBTSxDQUFDckIsSUFBSSxJQUFJO1FBQ2xFLE1BQU0sSUFBSVAsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1HLFFBQVEsS0FBSyxZQUNoQkgsQ0FBQUEsTUFBTUssUUFBUSxLQUFLUixhQUFhRyxNQUFNUSxlQUFlLEtBQUtYLGFBQ3hEO1FBQUM7UUFBVTtLQUFPLENBQUNDLFFBQVEsQ0FBQ0UsTUFBTUcsUUFBUSxLQUFLSCxNQUFNUyxjQUFjLEtBQUtaLFNBQVMsR0FBSTtRQUMzRixNQUFNLElBQUluQiwrQkFDUjtJQUVKO0lBQ0EsSUFBR3NCLE1BQU1VLFNBQVMsS0FBS2IsYUFDakIsQ0FBQSxDQUFDYyxPQUFPQyxTQUFTLENBQUNaLE1BQU1VLFNBQVMsS0FBS1YsTUFBTVUsU0FBUyxHQUFHLEtBQUtWLE1BQU1VLFNBQVMsR0FBRyxhQUFZLEdBQUk7UUFDbkcsTUFBTSxJQUFJaEMsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1RLGVBQWUsS0FBS1gsYUFBYSxDQUFDO1FBQUM7UUFBUTtRQUFXO1FBQU87UUFBVTtRQUFRO1FBQVM7S0FBTSxDQUFDQyxRQUFRLENBQUNFLE1BQU1RLGVBQWUsR0FBRztRQUN2SSxNQUFNLElBQUk5QiwrQkFBK0I7SUFDM0M7SUFDQSxNQUFNbUMsU0FBU2IsTUFBTVMsY0FBYztJQUNuQyxJQUFHSSxXQUFXaEIsYUFBYyxDQUFBLENBQUNnQixVQUFVLENBQUM7UUFBQztRQUFRO1FBQWU7S0FBYyxDQUFDZixRQUFRLENBQUNlLE9BQU90QixJQUFJLEtBQU1zQixPQUFPdEIsSUFBSSxLQUFLLGlCQUN2SCxDQUFBLE9BQU9zQixPQUFPQyxJQUFJLEtBQUssWUFBWSxDQUFDLHdCQUF3Qm5CLElBQUksQ0FBQ2tCLE9BQU9DLElBQUksS0FBSyxDQUFDRCxPQUFPRSxNQUFNLElBQUksT0FBT0YsT0FBT0UsTUFBTSxLQUFLLFlBQVk3QixNQUFNQyxPQUFPLENBQUMwQixPQUFPRSxNQUFNLEtBQy9KRixPQUFPRyxNQUFNLEtBQUtuQixhQUFhLE9BQU9nQixPQUFPRyxNQUFNLEtBQUssU0FBUyxDQUN0RSxHQUFJO1FBQ0gsTUFBTSxJQUFJdEMsK0JBQStCO0lBQzNDO0lBQ0EsSUFBRztRQUFDO1FBQVU7S0FBUyxDQUFDb0IsUUFBUSxDQUFDRSxNQUFNRyxRQUFRLEtBQUtVLFdBQVdoQixhQUFjZ0IsQ0FBQUEsT0FBT3RCLElBQUksS0FBSyxpQkFBaUJTLE1BQU1pQixRQUFRLEtBQUssT0FBTSxHQUFJO1FBQ3pJLE1BQU0sSUFBSXZDLCtCQUErQjtJQUMzQztJQUNBLElBQUdzQixNQUFNa0IsSUFBSSxLQUFLckIsYUFBYyxDQUFBLENBQUM7UUFBQztRQUFVO0tBQVMsQ0FBQ0MsUUFBUSxDQUFDRSxNQUFNRyxRQUFRLEtBQUtILE1BQU1pQixRQUFRLEtBQUssV0FBVyxDQUFDTixPQUFPUSxRQUFRLENBQUNuQixNQUFNa0IsSUFBSSxLQUFLbEIsTUFBTWtCLElBQUksR0FBRyxLQUFLbEIsTUFBTWtCLElBQUksR0FBRyxDQUFBLEdBQUk7UUFDakwsTUFBTSxJQUFJeEMsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1vQixXQUFXLEtBQUt2QixhQUFjLENBQUEsQ0FBQztRQUFDO1FBQVU7S0FBUyxDQUFDQyxRQUFRLENBQUNFLE1BQU1HLFFBQVEsS0FBS0gsTUFBTWlCLFFBQVEsS0FBSyxXQUFXLENBQUNOLE9BQU9RLFFBQVEsQ0FBQ25CLE1BQU1vQixXQUFXLEtBQUtwQixNQUFNb0IsV0FBVyxHQUFHLEtBQU1wQixNQUFNRyxRQUFRLEtBQUssWUFBWUgsTUFBTW9CLFdBQVcsR0FBRyxDQUFDLEdBQUk7UUFDOU8sTUFBTSxJQUFJMUMsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1xQixTQUFTLEtBQUt4QixhQUFjLENBQUEsQ0FBQ2MsT0FBT0MsU0FBUyxDQUFDWixNQUFNcUIsU0FBUyxLQUFLckIsTUFBTXFCLFNBQVMsR0FBRyxDQUFBLEdBQUk7UUFDL0YsTUFBTSxJQUFJM0MsK0JBQStCO0lBQzNDO0lBQ0EsSUFBR3NCLE1BQU1HLFFBQVEsS0FBSyxZQUNoQixDQUFBLEFBQUNILE1BQU1zQixNQUFNLEVBQUVsQyxVQUFVLENBQUM7UUFBQztRQUFRO0tBQVMsQ0FBQ1UsUUFBUSxDQUFDRSxNQUFNRyxRQUFRLEtBQU1ILE1BQU1pQixRQUFRLEtBQUssV0FBV2pCLE1BQU11QixNQUFNLEFBQUQsR0FBSTtRQUMzSCxNQUFNLElBQUk3QywrQkFBK0I7SUFDM0M7SUFDQSxJQUFHc0IsTUFBTUcsUUFBUSxLQUFLLFVBQVUsT0FBTzFCLHNCQUFzQnVCLE9BQU9DO0lBQ3BFLE1BQU0sRUFBQ0ssTUFBTSxFQUFFZ0IsU0FBUyxFQUFFLEVBQUMsR0FBR3RCO0lBQzlCLElBQUdBLE1BQU1HLFFBQVEsS0FBSyxVQUFVO1FBQzlCLElBQUcsQ0FBQ0YsT0FBT3VCLFNBQVMsRUFBRTtZQUNwQixNQUFNLElBQUk5QywrQkFBK0I7UUFDM0M7UUFDQSxNQUFNK0MsV0FBVyxNQUFNN0MsS0FBSyx5Q0FBeUM7WUFDbkU4QyxZQUFZMUIsTUFBTXFCLFNBQVMsSUFBSTtZQUMvQmhCLFVBQVU7Z0JBQUM7b0JBQUNyQixTQUFTc0I7b0JBQVFiLE1BQU07Z0JBQU07YUFBRTtZQUMzQ2tDLE9BQU8zQixNQUFNMkIsS0FBSyxJQUFJMUIsT0FBTzJCLFdBQVcsSUFBSTtZQUM1Q0MsUUFBUTdCLE1BQU02QixNQUFNO1FBQ3RCLEdBQUc7WUFBQ0MsT0FBTztZQUFPQyxTQUFTLElBQUlDLFFBQVE7Z0JBQUMscUJBQXFCO2dCQUFjLGFBQWEvQixPQUFPdUIsU0FBUztZQUFBO1lBQUlTLFNBQVNqQyxNQUFNVSxTQUFTLElBQUk7UUFBTztRQU0vSSxJQUFHZSxTQUFTUyxLQUFLLElBQUk7WUFBQztZQUF3QjtZQUF5QjtZQUFtQjtTQUFtQixDQUFDcEMsUUFBUSxDQUFDMkIsU0FBU1MsS0FBSyxDQUFDM0MsSUFBSSxJQUFJLEtBQUs7WUFDakosTUFBTSxJQUFJYiwrQkFBK0I7UUFDM0M7UUFDQSxNQUFNeUQsV0FBV25DLE1BQU1JLGNBQWMsS0FBSztRQUMxQyxJQUFHK0IsWUFBYSxDQUFBLENBQUNqRCxNQUFNQyxPQUFPLENBQUNzQyxTQUFTekMsT0FBTyxLQUFLeUMsU0FBU3pDLE9BQU8sQ0FBQ3VCLElBQUksQ0FBQyxDQUFDakIsT0FDekUsQ0FBQ0EsUUFBUSxDQUFDO2dCQUFDO2dCQUFRO2dCQUFZO2FBQW9CLENBQUNRLFFBQVEsQ0FBQ1IsS0FBS0MsSUFBSSxJQUFJLE9BQVFELEtBQUtDLElBQUksS0FBSyxVQUFVLE9BQU9ELEtBQUtFLElBQUksS0FBSyxTQUFTLEdBQUk7WUFDNUksTUFBTSxJQUFJYiwrQkFBK0I7UUFDM0M7UUFDQSxNQUFNeUQsU0FBU1gsU0FBU3pDLE9BQU8sRUFBRXFELE9BQU8sQ0FBQy9DLE9BQVNBLEtBQUtDLElBQUksS0FBSyxRQUFRK0MsSUFBSSxDQUFDaEQsT0FBU0EsS0FBS0UsSUFBSSxJQUFJLE9BQU8sRUFBRTtRQUM1RyxNQUFNQSxPQUFPMkMsV0FBV0MsT0FBT0csSUFBSSxDQUFDLE1BQU1ILE9BQU9HLElBQUksQ0FBQyxNQUFNdEQsSUFBSTtRQUNoRSxJQUFHd0MsU0FBU1MsS0FBSyxJQUFJVCxTQUFTbEMsSUFBSSxLQUFLLGFBQWFrQyxTQUFTZSxXQUFXLEtBQUssY0FBYyxDQUFDaEQsS0FBS1AsSUFBSSxJQUFJO1lBQ3ZHLE1BQU0sSUFBSU4sK0JBQStCO1FBQzNDO1FBQ0EsT0FBTztZQUFDOEQsU0FBUyxFQUFFO1lBQUVqRDtRQUFJO0lBQzNCO0lBQ0EsSUFBR1EsTUFBTUcsUUFBUSxLQUFLLFlBQVlILE1BQU1HLFFBQVEsS0FBSyxRQUFRO1FBQzNELE1BQU11QyxPQUFPMUMsTUFBTUcsUUFBUSxLQUFLO1FBQ2hDLE1BQU13QyxNQUFNRCxPQUFPekMsT0FBTzJDLE9BQU8sR0FBRzNDLE9BQU80QyxTQUFTO1FBQ3BELElBQUcsQ0FBQ0YsS0FBSztZQUNQLE1BQU0sSUFBSWpFLCtCQUErQixHQUFHZ0UsT0FBTyxTQUFTLFNBQVMsa0NBQWtDLENBQUM7UUFDMUc7UUFDQSxNQUFNakIsV0FBVyxNQUFNN0MsS0FBSzhELE9BQU8sa0NBQWtDLHVDQUF1QztZQUMxRzFDLE9BQU8wQyxRQUFRcEIsT0FBT2xDLE1BQU0sR0FBRztnQkFBQztvQkFBQ0osU0FBUzt3QkFBQzs0QkFBQ1EsTUFBTWM7NEJBQVFmLE1BQU07d0JBQVk7MkJBQU0rQixPQUFPZ0IsR0FBRyxDQUFDLENBQUNRLFFBQVcsQ0FBQTtnQ0FBQ0MsV0FBVyxDQUFDLEtBQUssRUFBRUQsTUFBTUUsSUFBSSxDQUFDLFFBQVEsRUFBRUYsTUFBTUcsS0FBSyxDQUFDQyxRQUFRLENBQUMsV0FBVztnQ0FBRTNELE1BQU07NEJBQWEsQ0FBQTtxQkFBSTtvQkFBRUUsTUFBTTtnQkFBTTthQUFFLEdBQUdPLE1BQU1LLFFBQVEsRUFBRWlDLElBQUksQ0FBQ3ZELFVBQWEsQ0FBQTtvQkFBQ0MsU0FBUyxPQUFPRCxRQUFRQyxPQUFPLEtBQUssV0FBV0QsUUFBUUMsT0FBTyxHQUFHRCxRQUFRQyxPQUFPLENBQUNzRCxHQUFHLENBQUMsQ0FBQ2hELE9BQVVBLEtBQUtDLElBQUksS0FBSyxTQUMzVzs0QkFBQ0MsTUFBTUYsS0FBS0UsSUFBSTs0QkFBRUQsTUFBTTt3QkFBWSxJQUFJOzRCQUFDSyxRQUFRTixLQUFLTSxNQUFNLElBQUk7NEJBQVFtRCxXQUFXekQsS0FBS0ksR0FBRzs0QkFBRUgsTUFBTTt3QkFBYTtvQkFBS0UsTUFBTVYsUUFBUVUsSUFBSSxLQUFLLFdBQVcsY0FBY1YsUUFBUVUsSUFBSTtnQkFBQSxDQUFBLE1BQU9hO1lBQzVMNkMsY0FBY25ELE1BQU02QixNQUFNO1lBQzFCdUIsbUJBQW1CcEQsTUFBTXFCLFNBQVMsSUFBSTtZQUN0Q00sT0FBTzNCLE1BQU0yQixLQUFLLElBQUtlLENBQUFBLE9BQU96QyxPQUFPb0QsU0FBUyxJQUFJLGFBQWFwRCxPQUFPcUQsV0FBVyxJQUFJLGFBQVk7WUFDakcsR0FBSXRELE1BQU1RLGVBQWUsR0FBRztnQkFBQytDLFdBQVc7b0JBQUNDLFFBQVF4RCxNQUFNUSxlQUFlO2dCQUFBO1lBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0VpRCxPQUFPO1lBQ1AsR0FBSTVDLFNBQVM7Z0JBQUNyQixNQUFNO29CQUFDcUI7Z0JBQU07WUFBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxHQUFJLENBQUM2QixPQUFPO2dCQUFDZ0IsWUFBWTtZQUFVLElBQUksQ0FBQyxDQUFDO1FBQzNDLEdBQUc7WUFBQzVCLE9BQU87WUFBT0MsU0FBUyxJQUFJQyxRQUFRO2dCQUFDMkIsZUFBZSxDQUFDLE9BQU8sRUFBRWhCLEtBQUs7WUFBQTtZQUFJVixTQUFTakMsTUFBTVUsU0FBUyxJQUFJO1FBQU87UUFLN0csSUFBR2UsU0FBU1MsS0FBSyxJQUFJO1lBQUM7WUFBeUI7WUFBd0I7U0FBbUIsQ0FBQ3BDLFFBQVEsQ0FBQzJCLFNBQVNTLEtBQUssQ0FBQzNDLElBQUksSUFBSSxLQUFLO1lBQzlILE1BQU0sSUFBSWIsK0JBQStCLEdBQUdnRSxPQUFPLFNBQVMsU0FBUywwREFBMEQsQ0FBQztRQUNsSTtRQUNBLElBQUdqQixTQUFTUyxLQUFLLElBQUlULFNBQVNtQyxNQUFNLEtBQUssZUFBZW5DLFNBQVNvQyxNQUFNLEVBQUV0RCxLQUFLLENBQUN1RCxPQUFTQSxLQUFLRixNQUFNLEtBQUssZUFBZTtZQUNySCxNQUFNLElBQUlqRiwrQkFBK0IsR0FBRytELE9BQU8sU0FBUyxTQUFTLDhEQUE4RCxDQUFDO1FBQ3RJO1FBQ0EsSUFBR2pCLFNBQVNvQyxNQUFNLEVBQUV0RCxLQUFLLENBQUN1RCxPQUFTQSxLQUFLOUUsT0FBTyxFQUFFdUIsS0FBSyxDQUFDakIsT0FBU0EsS0FBS0MsSUFBSSxLQUFLLGFBQWE7WUFDekYsTUFBTSxJQUFJWiwrQkFBK0IsR0FBRytELE9BQU8sU0FBUyxTQUFTLHNCQUFzQixDQUFDO1FBQzlGO1FBQ0EsSUFBR2pCLFNBQVNvQyxNQUFNLEVBQUV0RCxLQUFLLENBQUN1RCxPQUFTQSxLQUFLdkUsSUFBSSxJQUFJLENBQUM7Z0JBQUM7Z0JBQVc7YUFBWSxDQUFDTyxRQUFRLENBQUNnRSxLQUFLdkUsSUFBSSxJQUFJO1lBQzlGLE1BQU0sSUFBSVosK0JBQStCLEdBQUcrRCxPQUFPLFNBQVMsU0FBUyxxQ0FBcUMsQ0FBQztRQUM3RztRQUNBLE1BQU1sRCxPQUFPaUMsU0FBU29DLE1BQU0sRUFBRXhCLE9BQU8sQ0FBQ3lCLE9BQVNBLEtBQUt2RSxJQUFJLEtBQUssYUFBY21ELFFBQVEsQ0FBQ29CLEtBQUt2RSxJQUFJLEVBQUd3RSxRQUFRLENBQUNELE9BQVNBLEtBQUs5RSxPQUFPLElBQUksRUFBRSxFQUNqSXFELE9BQU8sQ0FBQy9DLE9BQVNBLEtBQUtDLElBQUksS0FBSyxlQUFlK0MsSUFBSSxDQUFDaEQsT0FBU0EsS0FBS0UsSUFBSSxJQUFJLElBQUkrQyxLQUFLLE9BQU87UUFDNUYsSUFBRyxDQUFDL0MsS0FBS1AsSUFBSSxJQUFJO1lBQ2YsTUFBTSxJQUFJTiwrQkFBK0IsR0FBRytELE9BQU8sU0FBUyxTQUFTLHVCQUF1QixDQUFDO1FBQy9GO1FBQ0EsT0FBTztZQUFDRCxTQUFTLEVBQUU7WUFBRWpELE1BQU1RLE1BQU1JLGNBQWMsS0FBSyxhQUFhWixPQUFPQSxLQUFLUCxJQUFJO1FBQUU7SUFDckY7SUFDQSxJQUFHLENBQUNnQixPQUFPK0QsU0FBUyxFQUFFO1FBQ3BCLE1BQU0sSUFBSXRGLCtCQUErQjtJQUMzQztJQUNBLE1BQU11RixRQUFtQjtRQUFDO1lBQUN6RSxNQUFNYztRQUFNO1dBQU1nQixPQUFPZ0IsR0FBRyxDQUFDLENBQUNRLFFBQVcsQ0FBQTtnQkFBQ29CLFlBQVk7b0JBQUNDLE1BQU1yQixNQUFNRyxLQUFLLENBQUNDLFFBQVEsQ0FBQztvQkFBV2tCLFVBQVV0QixNQUFNRSxJQUFJO2dCQUFBO1lBQUMsQ0FBQTtLQUFJO0lBQ2pKLE1BQU1yQixRQUFRM0IsTUFBTTJCLEtBQUssSUFBSzNCLENBQUFBLE1BQU1pQixRQUFRLEtBQUssVUFBVWhCLE9BQU9vRSxnQkFBZ0IsSUFBSSwyQkFBMkJwRSxPQUFPcUUsV0FBVyxJQUFJLGtCQUFpQjtJQUN4SixJQUFHLENBQUMsb0JBQW9CM0UsSUFBSSxDQUFDZ0MsUUFBUTtRQUNuQyxNQUFNLElBQUlqRCwrQkFBK0I7SUFDM0M7SUFDQSxNQUFNK0MsV0FBVyxNQUFNN0MsS0FBSyxDQUFDLHdEQUF3RCxFQUFFK0MsTUFBTSxnQkFBZ0IsQ0FBQyxFQUFFO1FBQzlHNEMsVUFBVTtZQUFDO2dCQUFDTjtnQkFBT3hFLE1BQU07WUFBTTtTQUFFO1FBQ2pDLEdBQUlPLE1BQU02QixNQUFNLEdBQUc7WUFBQzJDLG1CQUFtQjtnQkFBQ1AsT0FBTztvQkFBQzt3QkFBQ3pFLE1BQU1RLE1BQU02QixNQUFNO29CQUFBO2lCQUFFO1lBQUE7UUFBQyxJQUFJLENBQUMsQ0FBQztRQUM1RTRDLGtCQUFrQnpFLE1BQU1pQixRQUFRLEtBQUssVUFBVTtZQUFDLEdBQUlqQixNQUFNMEUsV0FBVyxHQUFHO2dCQUFDQyxhQUFhO29CQUFDRCxhQUFhMUUsTUFBTTBFLFdBQVc7Z0JBQUE7WUFBQyxJQUFJLENBQUMsQ0FBQztZQUFHRSxvQkFBb0I7Z0JBQUM7Z0JBQVE7YUFBUTtRQUFBLElBQUk7WUFDdEtDLGlCQUFpQjdFLE1BQU1xQixTQUFTLElBQUk7WUFDcEMsR0FBSVIsU0FBUztnQkFBQ2lFLGtCQUFrQmpFLE9BQU90QixJQUFJLEtBQUssZ0JBQWdCLHFCQUFxQjtZQUFZLElBQUksQ0FBQyxDQUFDO1lBQ3ZHLEdBQUlTLE1BQU1vQixXQUFXLEtBQUt2QixZQUFZO2dCQUFDdUIsYUFBYXBCLE1BQU1vQixXQUFXO1lBQUEsSUFBSSxDQUFDLENBQUM7WUFDM0UsR0FBSXBCLE1BQU1rQixJQUFJLEtBQUtyQixZQUFZO2dCQUFDcUIsTUFBTWxCLE1BQU1rQixJQUFJO1lBQUEsSUFBSSxDQUFDLENBQUM7UUFDeEQ7UUFDQSxHQUFJbEIsTUFBTXVCLE1BQU0sR0FBRztZQUFDd0QsT0FBTztnQkFBQztvQkFBQ0MsY0FBYyxDQUFDO2dCQUFDO2FBQUU7UUFBQSxJQUFJLENBQUMsQ0FBQztJQUN2RCxHQUFHO1FBQUNsRCxPQUFPO1FBQU9DLFNBQVMsSUFBSUMsUUFBUTtZQUFDLGtCQUFrQi9CLE9BQU8rRCxTQUFTO1FBQUE7UUFBSS9CLFNBQVNqQyxNQUFNVSxTQUFTLElBQUk7SUFBTztJQUNqSCxJQUFHZSxTQUFTUyxLQUFLLElBQUk7UUFBQztRQUFLO1FBQUs7UUFBSztLQUFJLENBQUNwQyxRQUFRLENBQUMyQixTQUFTUyxLQUFLLENBQUMrQyxJQUFJLElBQUksSUFBSTtRQUM1RSxNQUFNLElBQUl2RywrQkFBK0I7SUFDM0M7SUFDQSxJQUFHK0MsU0FBU3lELGNBQWMsRUFBRUMsZUFBZTFELFNBQVNTLEtBQUssSUFBSSxDQUFDVCxTQUFTMkQsVUFBVSxFQUFFaEcsUUFBUTtRQUN6RixNQUFNLElBQUlULCtCQUErQjtJQUMzQztJQUNBLE1BQU0wRyxZQUFZNUQsU0FBUzJELFVBQVUsQ0FBQyxFQUFFO0lBQ3hDLElBQUdDLFVBQVVDLFlBQVksS0FBSyxRQUFRO1FBQ3BDLE1BQU0sSUFBSTNHLCtCQUErQjtJQUMzQztJQUNBLE1BQU1rRixTQUFTLEFBQUN3QixDQUFBQSxVQUFVckcsT0FBTyxFQUFFaUYsU0FBUyxFQUFFLEFBQUQsRUFBRzVCLE1BQU0sQ0FBQyxDQUFDL0MsT0FBUyxDQUFDQSxLQUFLaUcsT0FBTztJQUM5RSxNQUFNQyxTQUFTM0IsT0FBTzRCLElBQUksQ0FBQyxDQUFDbkcsT0FBU0EsS0FBSzRFLFVBQVUsR0FBR0E7SUFDdkQsSUFBSXBCO0lBQ0osSUFBRzBDLFVBQVU7UUFBQztRQUFhO0tBQWEsQ0FBQzFGLFFBQVEsQ0FBQzBGLE9BQU9wQixRQUFRLEdBQUc7UUFDbEUsTUFBTW5CLFFBQVF5QyxPQUFPQyxJQUFJLENBQUNILE9BQU9yQixJQUFJLEVBQUU7UUFDdkMsSUFBRyxDQUFDbEIsTUFBTTdELE1BQU0sSUFBSTZELE1BQU03RCxNQUFNLEdBQUcsS0FBSyxPQUFPLE1BQU07WUFDbkQsTUFBTSxJQUFJVCwrQkFBK0I7UUFDM0M7UUFDQW1FLFFBQVE7WUFBQ0c7WUFBT0QsTUFBTXdDLE9BQU9wQixRQUFRO1FBQThCO0lBQ3JFO0lBQ0EsTUFBTTVFLE9BQU9xRSxPQUFPdkIsR0FBRyxDQUFDLENBQUNoRCxPQUFTQSxLQUFLRSxJQUFJLElBQUksSUFBSStDLElBQUksQ0FBQyxNQUFNdEQsSUFBSTtJQUNsRSxJQUFHZSxNQUFNaUIsUUFBUSxLQUFLLFVBQVUsQ0FBQzZCLFFBQVEsQ0FBQ3RELE1BQU07UUFDOUMsTUFBTSxJQUFJYiwrQkFBK0I7SUFDM0M7SUFDQSxNQUFNOEQsVUFBVSxBQUFDNEMsQ0FBQUEsVUFBVU8saUJBQWlCLEVBQUVDLG1CQUFtQixFQUFFLEFBQUQsRUFBRzlCLE9BQU8sQ0FBQyxDQUFDLEVBQUMrQixHQUFHLEVBQUM7UUFDakYsSUFBSTtZQUNGLE1BQU1wRyxNQUFNLElBQUlxRyxJQUFJRCxLQUFLRSxPQUFPO1lBQ2hDLE9BQU90RyxJQUFJdUcsUUFBUSxLQUFLLFdBQVc7Z0JBQUM7b0JBQUNDLE9BQU9KLEtBQUtJLFNBQVN4RyxJQUFJeUcsUUFBUTtvQkFBRXpHLEtBQUtBLElBQUkwRyxJQUFJO2dCQUFBO2FBQUUsR0FBRyxFQUFFO1FBQzlGLEVBQUUsT0FBSztZQUNMLE9BQU8sRUFBRTtRQUNYO0lBQ0Y7SUFDQSxPQUFPO1FBQ0x0RDtRQUFPdUQsdUJBQXVCaEIsVUFBVU8saUJBQWlCLEVBQUVVLGtCQUFrQkM7UUFBaUI5RDtRQUFTakQ7SUFDekc7QUFDRixFQUFFIn0=
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
/** An accepted generation did not produce usable output; do not automatically resubmit it. */ export class ContentGenerationResponseError extends Error {
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jb250ZW50R2VuZXJhdGlvbkVycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBjb25maXJtZWQgcmVqZWN0aW9uIGlzIGRpc3RpbmN0IGZyb20gYW4gdW5rbm93biBwYWlkIHN1Ym1pc3Npb24gb3V0Y29tZS4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuLyoqIEFuIGFjY2VwdGVkIGdlbmVyYXRpb24gZGlkIG5vdCBwcm9kdWNlIHVzYWJsZSBvdXRwdXQ7IGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlc3VibWl0IGl0LiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRHZW5lcmF0aW9uUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHt9XG4iXSwibmFtZXMiOlsiQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiRXJyb3IiLCJDb250ZW50R2VuZXJhdGlvblJlc3BvbnNlRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLCtFQUErRSxHQUMvRSxPQUFPLE1BQU1BLHVDQUF1Q0M7QUFBTztBQUMzRCw0RkFBNEYsR0FDNUYsT0FBTyxNQUFNQyx1Q0FBdUNEO0FBQU8ifQ==
|
|
@@ -6,7 +6,7 @@ export declare const ensureConversationMessagingAllowed: (context: ApiContext, c
|
|
|
6
6
|
export declare const parseConversationOptions: (options?: ConversationOptions) => {
|
|
7
7
|
limit: ArangoDbLimit;
|
|
8
8
|
};
|
|
9
|
-
export declare const getConversationListByUser: (context: ApiContext, userId: string, options?:
|
|
9
|
+
export declare const getConversationListByUser: (context: ApiContext, userId: string, options?: ConversationOptions) => Promise<ConversationType[]>;
|
|
10
10
|
export declare const getDirectConversation: (context: ApiContext, { fromId, toId, toUser }: DirectConversationParams) => Promise<ConversationType>;
|
|
11
11
|
export declare const addDirectConversation: (context: ApiContext, { fromId, toId, toUser }: DirectConversationParams) => Promise<ConversationType>;
|
|
12
12
|
export declare const getConnectionUserList: (context: ApiContext, { conversationId, includeAll, isDirect }: ConversationUsersParams) => Promise<ConnectionType[]>;
|