-
Notifications
You must be signed in to change notification settings - Fork 5
/
TP4-Rapport.html
358 lines (321 loc) · 456 KB
/
TP4-Rapport.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Alexandre Combessie, Saad Machraoui" />
<title>Apprentissage Statistique - Compte rendu du TP4</title>
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4wIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPSIiLnRyaW0sbD17fSxtPSIxLjExLjAiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChhLGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9eLW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3RydWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2godGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4uZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2hdKSlmb3IoZCBpbiBlKWE9Z1tkXSxjPWVbZF0sZyE9PWMmJihqJiZjJiYobi5pc1BsYWluT2JqZWN0KGMpfHwoYj1uLmlzQXJyYXkoYykpKT8oYj8oYj0hMSxmPWEmJm4uaXNBcnJheShhKT9hOltdKTpmPWEmJm4uaXNQbGFpbk9iamVjdChhKT9hOnt9LGdbZF09bi5leHRlbmQoaixmLGMpKTp2b2lkIDAhPT1jJiYoZ1tkXT1jKSk7cmV0dXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuImFycmF5Ij09PW4udHlwZShhKX0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEtcGFyc2VGbG9hdChhKT49MH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2lmKCFhfHwib2JqZWN0IiE9PW4udHlwZShhKXx8YS5ub2RlVHlwZXx8bi5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhai5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9aWYobC5vd25MYXN0KWZvcihiIGluIGEpcmV0dXJuIGouY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxqLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aFtpLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZuLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9MCxmPWEubGVuZ3RoLGc9cyhhKTtpZihjKXtpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTprJiYhay5jYWxsKCJcdWZlZmZceGEwIik/ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6ay5jYWxsKGEpfTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShvLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zi5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGcpcmV0dXJuIGcuY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPTAsZz1hLmxlbmd0aCxoPXMoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKylkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtlbHNlIGZvcihmIGluIGEpZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7cmV0dXJuIGUuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9Ziksbi5pc0Z1bmN0aW9uKGEpPyhjPWQuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omx9KSxuLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHMoYSl7dmFyIGI9YS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6MT09PWEubm9kZVR5cGUmJmI/ITA6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzPSJzaXp6bGUiKy1uZXcgRGF0ZSx0PWEuZG9jdW1lbnQsdT0wLHY9MCx3PWViKCkseD1lYigpLHk9ZWIoKSx6PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1iJiYoaj0hMCksMH0sQT0idW5kZWZpbmVkIixCPTE8PDMxLEM9e30uaGFzT3duUHJvcGVydHksRD1bXSxFPUQucG9wLEY9RC5wdXNoLEc9RC5wdXNoLEg9RC5zbGljZSxJPUQuaW5kZXhPZnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz10aGlzLmxlbmd0aDtjPmI7YisrKWlmKHRoaXNbYl09PT1hKXJldHVybiBiO3JldHVybi0xfSxKPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsSz0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTD0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE09TC5yZXBsYWNlKCJ3IiwidyMiKSxOPSJcXFsiK0srIiooIitMKyIpIitLKyIqKD86KFsqXiR8IX5dPz0pIitLKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIitNKyIpfCl8KSIrSysiKlxcXSIsTz0iOigiK0wrIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK04ucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLFA9bmV3IFJlZ0V4cCgiXiIrSysiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitLKyIrJCIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0srIiosIitLKyIqIiksUj1uZXcgUmVnRXhwKCJeIitLKyIqKFs+K35dfCIrSysiKSIrSysiKiIpLFM9bmV3IFJlZ0V4cCgiPSIrSysiKihbXlxcXSdcIl0qPykiK0srIipcXF0iLCJnIiksVD1uZXcgUmVnRXhwKE8pLFU9bmV3IFJlZ0V4cCgiXiIrTSsiJCIpLFY9e0lEOm5ldyBSZWdFeHAoIl4jKCIrTCsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitMKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitMLnJlcGxhY2UoInciLCJ3KiIpKyIpIiksQVRUUjpuZXcgUmVnRXhwKCJeIitOKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrTyksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitLKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitLKyIqKD86KFsrLV18KSIrSysiKihcXGQrKXwpKSIrSysiKlxcKXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrSisiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK0srIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrSysiKigoPzotXFxkKT9cXGQqKSIrSysiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sVz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFg9L15oXGQkL2ksWT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLCQ9L1srfl0vLF89Lyd8XFwvZyxhYj1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0srIj98KCIrSysiKXwuKSIsImlnIiksYmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3RyeXtHLmFwcGx5KEQ9SC5jYWxsKHQuY2hpbGROb2RlcyksdC5jaGlsZE5vZGVzKSxEW3QuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGNiKXtHPXthcHBseTpELmxlbmd0aD9mdW5jdGlvbihhLGIpe0YuYXBwbHkoYSxILmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBkYihhLGIsZCxlKXt2YXIgZixnLGgsaSxqLG0scCxxLHUsdjtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dCkhPT1sJiZrKGIpLGI9Ynx8bCxkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGQ7aWYoMSE9PShpPWIubm9kZVR5cGUpJiY5IT09aSlyZXR1cm5bXTtpZihuJiYhZSl7aWYoZj1aLmV4ZWMoYSkpaWYoaD1mWzFdKXtpZig5PT09aSl7aWYoZz1iLmdldEVsZW1lbnRCeUlkKGgpLCFnfHwhZy5wYXJlbnROb2RlKXJldHVybiBkO2lmKGcuaWQ9PT1oKXJldHVybiBkLnB1c2goZyksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGc9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpKSYmcihiLGcpJiZnLmlkPT09aClyZXR1cm4gZC5wdXNoKGcpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBHLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaD1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEcuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaCkpLGR9aWYoYy5xc2EmJighb3x8IW8udGVzdChhKSkpe2lmKHE9cD1zLHU9Yix2PTk9PT1pJiZhLDE9PT1pJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bT1vYihhKSwocD1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/cT1wLnJlcGxhY2UoXywiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscSkscT0iW2lkPSciK3ErIiddICIsaj1tLmxlbmd0aDt3aGlsZShqLS0pbVtqXT1xK3BiKG1bal0pO3U9JC50ZXN0KGEpJiZtYihiLnBhcmVudE5vZGUpfHxiLHY9bS5qb2luKCIsIil9aWYodil0cnl7cmV0dXJuIEcuYXBwbHkoZCx1LnF1ZXJ5U2VsZWN0b3JBbGwodikpLGR9Y2F0Y2godyl7fWZpbmFsbHl7cHx8Yi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4geGIoYS5yZXBsYWNlKFAsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGViKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBmYihhKXtyZXR1cm4gYVtzXT0hMCxhfWZ1bmN0aW9uIGdiKGEpe3ZhciBiPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gaGIoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gaWIoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEIpLSh+YS5zb3VyY2VJbmRleHx8Qik7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIGpiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIGtiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBsYihhKXtyZXR1cm4gZmIoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsZmIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBtYihhKXtyZXR1cm4gYSYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1BJiZhfWM9ZGIuc3VwcG9ydD17fSxmPWRiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxrPWRiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9hLm93bmVyRG9jdW1lbnR8fGE6dCxnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1sJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KGw9ZSxtPWUuZG9jdW1lbnRFbGVtZW50LG49IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExpc3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe2soKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe2soKX0pKSxjLmF0dHJpYnV0ZXM9Z2IoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1nYihmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1ZLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmZ2IoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0QnlJZD1nYihmdW5jdGlvbihhKXtyZXR1cm4gbS5hcHBlbmRDaGlsZChhKS5pZD1zLCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZShzKS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QSYmbil7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShhYixiYik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGFiLGJiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9PUEmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09QT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUEmJm4/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scD1bXSxvPVtdLChjLnFzYT1ZLnRlc3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihnYihmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdCB0PScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixhLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJm8ucHVzaCgiWypeJF09IitLKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fG8ucHVzaCgiXFxbIitLKyIqKD86dmFsdWV8IitKKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8by5wdXNoKCI6Y2hlY2tlZCIpfSksZ2IoZnVuY3Rpb24oYSl7dmFyIGI9ZS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmby5wdXNoKCJuYW1lIitLKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fG8ucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxvLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9WS50ZXN0KHE9bS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG0ubW96TWF0Y2hlc1NlbGVjdG9yfHxtLm9NYXRjaGVzU2VsZWN0b3J8fG0ubXNNYXRjaGVzU2VsZWN0b3IpKSYmZ2IoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1xLmNhbGwoYSwiZGl2IikscS5jYWxsKGEsIltzIT0nJ106eCIpLHAucHVzaCgiIT0iLE8pfSksbz1vLmxlbmd0aCYmbmV3IFJlZ0V4cChvLmpvaW4oInwiKSkscD1wLmxlbmd0aCYmbmV3IFJlZ0V4cChwLmpvaW4oInwiKSksYj1ZLnRlc3QobS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikscj1ifHxZLnRlc3QobS5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSx6PWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gaj0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1lfHxhLm93bmVyRG9jdW1lbnQ9PT10JiZyKHQsYSk/LTE6Yj09PWV8fGIub3duZXJEb2N1bWVudD09PXQmJnIodCxiKT8xOmk/SS5jYWxsKGksYSktSS5jYWxsKGksYik6MDo0JmQ/LTE6MSl9OmZ1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGo9ITAsMDt2YXIgYyxkPTAsZj1hLnBhcmVudE5vZGUsZz1iLnBhcmVudE5vZGUsaD1bYV0saz1bYl07aWYoIWZ8fCFnKXJldHVybiBhPT09ZT8tMTpiPT09ZT8xOmY/LTE6Zz8xOmk/SS5jYWxsKGksYSktSS5jYWxsKGksYik6MDtpZihmPT09ZylyZXR1cm4gaWIoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlrLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWtbZF0pZCsrO3JldHVybiBkP2liKGhbZF0sa1tkXSk6aFtkXT09PXQ/LTE6a1tkXT09PXQ/MTowfSxlKTpsfSxkYi5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGRiKGEsbnVsbCxudWxsLGIpfSxkYi5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PWwmJmsoYSksYj1iLnJlcGxhY2UoUywiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFufHxwJiZwLnRlc3QoYil8fG8mJm8udGVzdChiKSkpdHJ5e3ZhciBkPXEuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGRiKGIsbCxudWxsLFthXSkubGVuZ3RoPjB9LGRiLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1sJiZrKGEpLHIoYSxiKX0sZGIuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09bCYmayhhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkMuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhbik6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhbj9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGRiLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZGIudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYoaj0hYy5kZXRlY3REdXBsaWNhdGVzLGk9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoeiksail7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGk9bnVsbCxhfSxlPWRiLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1kYi5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpmYixtYXRjaDpWLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYWIsYmIpLGFbM109KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGFiLGJiKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZGIuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZGIuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNV0mJmFbMl07cmV0dXJuIFYuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdJiZ2b2lkIDAhPT1hWzRdP2FbMl09YVs0XTpjJiZULnRlc3QoYykmJihiPW9iKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShhYixiYikudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9d1thKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrSysiKSIrYSsiKCIrSysifCQpIikpJiZ3KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8dHlwZW9mIGEuZ2V0QXR0cmlidXRlIT09QSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZGIuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHQ9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmdCl7az1xW3NdfHwocVtzXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT11JiZqWzFdLG09alswXT09PXUmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3UsbixtXTticmVha319ZWxzZSBpZih0JiYoaj0oYltzXXx8KGJbc109e30pKVthXSkmJmpbMF09PT11KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJih0JiYoKGxbc118fChsW3NdPXt9KSlbYV09W3UsbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8ZGIuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVtzXT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9mYihmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SS5jYWxsKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmZiKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1nKGEucmVwbGFjZShQLCIkMSIpKTtyZXR1cm4gZFtzXT9mYihmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSwhYy5wb3AoKX19KSxoYXM6ZmIoZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBkYihhLGIpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmZiKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzpmYihmdW5jdGlvbihhKXtyZXR1cm4gVS50ZXN0KGF8fCIiKXx8ZGIuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoYWIsYmIpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1uP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW19LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bC5hY3RpdmVFbGVtZW50JiYoIWwuaGFzRm9jdXN8fGwuaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBYLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBXLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0OmxiKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpsYihmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6bGIoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpsYihmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpsYihmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0OmxiKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6bGIoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPWpiKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPWtiKGIpO2Z1bmN0aW9uIG5iKCl7fW5iLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgbmI7ZnVuY3Rpb24gb2IoYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXhbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1RLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9Ui5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShQLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9VltnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2RiLmVycm9yKGEpOngoYSxpKS5zbGljZSgwKX1mdW5jdGlvbiBwYihhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHFiKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj12Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3UsZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbc118fChiW3NdPXt9KSwoaD1pW2RdKSYmaFswXT09PXUmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiByYihhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiBzYihhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHRiKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbc10mJihkPXRiKGQpKSxlJiYhZVtzXSYmKGU9dGIoZSxmKSksZmIoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8d2IoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6c2IocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXNiKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9JLmNhbGwoZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXNiKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpHLmFwcGx5KGcscil9KX1mdW5jdGlvbiB1YihhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saT1nfHxkLnJlbGF0aXZlWyIgIl0saj1nPzE6MCxrPXFiKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saSwhMCksbD1xYihmdW5jdGlvbihhKXtyZXR1cm4gSS5jYWxsKGIsYSk+LTF9LGksITApLG09W2Z1bmN0aW9uKGEsYyxkKXtyZXR1cm4hZyYmKGR8fGMhPT1oKXx8KChiPWMpLm5vZGVUeXBlP2soYSxjLGQpOmwoYSxjLGQpKX1dO2Y+ajtqKyspaWYoYz1kLnJlbGF0aXZlW2Fbal0udHlwZV0pbT1bcWIocmIobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2pdLnR5cGVdLmFwcGx5KG51bGwsYVtqXS5tYXRjaGVzKSxjW3NdKXtmb3IoZT0rK2o7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHRiKGo+MSYmcmIobSksaj4xJiZwYihhLnNsaWNlKDAsai0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbai0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFAsIiQxIiksYyxlPmomJnViKGEuc2xpY2UoaixlKSksZj5lJiZ1YihhPWEuc2xpY2UoZSkpLGY+ZSYmcGIoYSkpfW0ucHVzaChjKX1yZXR1cm4gcmIobSl9ZnVuY3Rpb24gdmIoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxpLGosayl7dmFyIG0sbixvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1oLHY9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdz11Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD12Lmxlbmd0aDtmb3IoayYmKGg9ZyE9PWwmJmcpO3EhPT14JiZudWxsIT0obT12W3FdKTtxKyspe2lmKGUmJm0pe249MDt3aGlsZShvPWFbbisrXSlpZihvKG0sZyxpKSl7ai5wdXNoKG0pO2JyZWFrfWsmJih1PXcpfWMmJigobT0hbyYmbSkmJnAtLSxmJiZyLnB1c2gobSkpfWlmKHArPXEsYyYmcSE9PXApe249MDt3aGlsZShvPWJbbisrXSlvKHIscyxnLGkpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09RS5jYWxsKGopKTtzPXNiKHMpfUcuYXBwbHkoaixzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZkYi51bmlxdWVTb3J0KGopfXJldHVybiBrJiYodT13LGg9dCkscn07cmV0dXJuIGM/ZmIoZik6Zn1nPWRiLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj15W2ErIiAiXTtpZighZil7Ynx8KGI9b2IoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9dWIoYltjXSksZltzXT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9eShhLHZiKGUsZCkpfXJldHVybiBmfTtmdW5jdGlvbiB3YihhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWRiKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB4YihhLGIsZSxmKXt2YXIgaCxpLGosayxsLG09b2IoYSk7aWYoIWYmJjE9PT1tLmxlbmd0aCl7aWYoaT1tWzBdPW1bMF0uc2xpY2UoMCksaS5sZW5ndGg+MiYmIklEIj09PShqPWlbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJm4mJmQucmVsYXRpdmVbaVsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGoubWF0Y2hlc1swXS5yZXBsYWNlKGFiLGJiKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO2E9YS5zbGljZShpLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1oPVYubmVlZHNDb250ZXh0LnRlc3QoYSk/MDppLmxlbmd0aDt3aGlsZShoLS0pe2lmKGo9aVtoXSxkLnJlbGF0aXZlW2s9ai50eXBlXSlicmVhaztpZigobD1kLmZpbmRba10pJiYoZj1sKGoubWF0Y2hlc1swXS5yZXBsYWNlKGFiLGJiKSwkLnRlc3QoaVswXS50eXBlKSYmbWIoYi5wYXJlbnROb2RlKXx8YikpKXtpZihpLnNwbGljZShoLDEpLGE9Zi5sZW5ndGgmJnBiKGkpLCFhKXJldHVybiBHLmFwcGx5KGUsZiksZTticmVha319fXJldHVybiBnKGEsbSkoZixiLCFuLGUsJC50ZXN0KGEpJiZtYihiLnBhcmVudE5vZGUpfHxiKSxlfXJldHVybiBjLnNvcnRTdGFibGU9cy5zcGxpdCgiIikuc29ydCh6KS5qb2luKCIiKT09PXMsYy5kZXRlY3REdXBsaWNhdGVzPSEhaixrKCksYy5zb3J0RGV0YWNoZWQ9Z2IoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGdiKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGhiKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmdiKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGhiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGdiKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxoYihKLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxkYn0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNYTUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNGdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1uLmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gbi5pbkFycmF5KGEsYik+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkPXRoaXMsZT1kLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtlPmI7YisrKWlmKG4uY29udGFpbnMoZFtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2U+YjtiKyspbi5maW5kKGEsZFtiXSxjKTtyZXR1cm4gYz10aGlzLnB1c2hTdGFjayhlPjE/bi51bmlxdWUoYyk6YyksYy5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxjfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHksej1hLmRvY3VtZW50LEE9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxCPW4uZm4uaW5pdD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7aWYoIWEpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBhKXtpZihjPSI8Ij09PWEuY2hhckF0KDApJiYiPiI9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTpBLmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6eiwhMCkpLHYudGVzdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9aWYoZD16LmdldEVsZW1lbnRCeUlkKGNbMl0pLGQmJmQucGFyZW50Tm9kZSl7aWYoZC5pZCE9PWNbMl0pcmV0dXJuIHkuZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZH1yZXR1cm4gdGhpcy5jb250ZXh0PXosdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShuKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07Qi5wcm90b3R5cGU9bi5mbix5PW4oeik7dmFyIEM9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sRD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPWFbYl07d2hpbGUoZSYmOSE9PWUubm9kZVR5cGUmJih2b2lkIDA9PT1jfHwxIT09ZS5ub2RlVHlwZXx8IW4oZSkuaXMoYykpKTE9PT1lLm5vZGVUeXBlJiZkLnB1c2goZSksZT1lW2JdO3JldHVybiBkfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRTaWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pLG4uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1uKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2Q+YjtiKyspaWYobi5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP24uaW5BcnJheSh0aGlzWzBdLG4oYSkpOm4uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJnZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRShhLGIpe2RvIGE9YVtiXTt3aGlsZShhJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBFKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEUoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihEW2FdfHwoZT1uLnVuaXF1ZShlKSksQy50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBGPS9cUysvZyxHPXt9O2Z1bmN0aW9uIEgoYSl7dmFyIGI9R1thXT17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRil8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/R1thXXx8SChhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmLGcsaD1bXSxpPSFhLm9uY2UmJltdLGo9ZnVuY3Rpb24obCl7Zm9yKGM9YS5tZW1vcnkmJmwsZD0hMCxmPWd8fDAsZz0wLGU9aC5sZW5ndGgsYj0hMDtoJiZlPmY7ZisrKWlmKGhbZl0uYXBwbHkobFswXSxsWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlKXtjPSExO2JyZWFrfWI9ITEsaCYmKGk/aS5sZW5ndGgmJmooaS5zaGlmdCgpKTpjP2g9W106ay5kaXNhYmxlKCkpfSxrPXthZGQ6ZnVuY3Rpb24oKXtpZihoKXt2YXIgZD1oLmxlbmd0aDshZnVuY3Rpb24gZihiKXtuLmVhY2goYixmdW5jdGlvbihiLGMpe3ZhciBkPW4udHlwZShjKTsiZnVuY3Rpb24iPT09ZD9hLnVuaXF1ZSYmay5oYXMoYyl8fGgucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1kJiZmKGMpfSl9KGFyZ3VtZW50cyksYj9lPWgubGVuZ3RoOmMmJihnPWQsaihjKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBoJiZuLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYyl7dmFyIGQ7d2hpbGUoKGQ9bi5pbkFycmF5KGMsaCxkKSk+LTEpaC5zcGxpY2UoZCwxKSxiJiYoZT49ZCYmZS0tLGY+PWQmJmYtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bi5pbkFycmF5KGEsaCk+LTE6ISghaHx8IWgubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxlPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBoPWk9Yz12b2lkIDAsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haH0sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPXZvaWQgMCxjfHxrLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4haHx8ZCYmIWl8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sYj9pLnB1c2goYyk6aihjKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBrLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBrfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1kLmNhbGwoYXJndW1lbnRzKSxlPWMubGVuZ3RoLGY9MSE9PWV8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2U6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihlKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6ZSxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGU+MSlmb3IoaT1uZXcgQXJyYXkoZSksaj1uZXcgQXJyYXkoZSksaz1uZXcgQXJyYXkoZSk7ZT5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsaixpKSk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITA/IS0tbi5yZWFkeVdhaXQ6IW4uaXNSZWFkeSl7aWYoIXouYm9keSlyZXR1cm4gc2V0VGltZW91dChuLnJlYWR5KTtuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0PjB8fChJLnJlc29sdmVXaXRoKHosW25dKSxuLmZuLnRyaWdnZXImJm4oeikudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5IikpfX19KTtmdW5jdGlvbiBKKCl7ei5hZGRFdmVudExpc3RlbmVyPyh6LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEssITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSywhMSkpOih6LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEspLGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsSykpfWZ1bmN0aW9uIEsoKXsoei5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1ldmVudC50eXBlfHwiY29tcGxldGUiPT09ei5yZWFkeVN0YXRlKSYmKEooKSxuLnJlYWR5KCkpfW4ucmVhZHkucHJvbWlzZT1mdW5jdGlvbihiKXtpZighSSlpZihJPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09ei5yZWFkeVN0YXRlKXNldFRpbWVvdXQobi5yZWFkeSk7ZWxzZSBpZih6LmFkZEV2ZW50TGlzdGVuZXIpei5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixLLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEssITEpO2Vsc2V7ei5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixLKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLEspO3ZhciBjPSExO3RyeXtjPW51bGw9PWEuZnJhbWVFbGVtZW50JiZ6LmRvY3VtZW50RWxlbWVudH1jYXRjaChkKXt9YyYmYy5kb1Njcm9sbCYmIWZ1bmN0aW9uIGUoKXtpZighbi5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGUsNTApfUooKSxuLnJlYWR5KCl9fSgpfXJldHVybiBJLnByb21pc2UoYil9O3ZhciBMPSJ1bmRlZmluZWQiLE07Zm9yKE0gaW4gbihsKSlicmVhaztsLm93bkxhc3Q9IjAiIT09TSxsLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsbihmdW5jdGlvbigpe3ZhciBhLGIsYz16LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YyYmKGE9ei5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixiPXouY3JlYXRlRWxlbWVudCgiZGl2IiksYy5hcHBlbmRDaGlsZChhKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09TCYmKGIuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsKGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD0zPT09Yi5vZmZzZXRXaWR0aCkmJihjLnN0eWxlLnpvb209MSkpLGMucmVtb3ZlQ2hpbGQoYSksYT1iPW51bGwpfSksZnVuY3Rpb24oKXt2YXIgYT16LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKG51bGw9PWwuZGVsZXRlRXhwYW5kbyl7bC5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2wuZGVsZXRlRXhwYW5kbz0hMX19YT1udWxsfSgpLG4uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXt2YXIgYj1uLm5vRGF0YVsoYS5ub2RlTmFtZSsiICIpLnRvTG93ZXJDYXNlKCldLGM9K2Eubm9kZVR5cGV8fDE7cmV0dXJuIDEhPT1jJiY5IT09Yz8hMTohYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn07dmFyIE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE8sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpOLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bi5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwfXJldHVybiBjfWZ1bmN0aW9uIFEoYSl7dmFyIGI7Zm9yKGIgaW4gYSlpZigoImRhdGEiIT09Ynx8IW4uaXNFbXB0eU9iamVjdChhW2JdKSkmJiJ0b0pTT04iIT09YilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSKGEsYixkLGUpe2lmKG4uYWNjZXB0RGF0YShhKSl7dmFyIGYsZyxoPW4uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP24uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoO2lmKGsmJmpba10mJihlfHxqW2tdLmRhdGEpfHx2b2lkIDAhPT1kfHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGt8fChrPWk/YVtoXT1jLnBvcCgpfHxuLmd1aWQrKzpoKSxqW2tdfHwoaltrXT1pP3t9Ont0b0pTT046bi5ub29wfSksKCJvYmplY3QiPT10eXBlb2YgYnx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoZT9qW2tdPW4uZXh0ZW5kKGpba10sYik6altrXS5kYXRhPW4uZXh0ZW5kKGpba10uZGF0YSxiKSksZz1qW2tdLGV8fChnLmRhdGF8fChnLmRhdGE9e30pLGc9Zy5kYXRhKSx2b2lkIDAhPT1kJiYoZ1tuLmNhbWVsQ2FzZShiKV09ZCksInN0cmluZyI9PXR5cGVvZiBiPyhmPWdbYl0sbnVsbD09ZiYmKGY9Z1tuLmNhbWVsQ2FzZShiKV0pKTpmPWcsZgp9fWZ1bmN0aW9uIFMoYSxiLGMpe2lmKG4uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP24uY2FjaGU6YSxoPWY/YVtuLmV4cGFuZG9dOm4uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bi5pc0FycmF5KGIpP2I9Yi5jb25jYXQobi5tYXAoYixuLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1uLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFRKGQpOiFuLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxRKGdbaF0pKSkmJihmP24uY2xlYW5EYXRhKFthXSwhMCk6bC5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bi5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP24uY2FjaGVbYVtuLmV4cGFuZG9dXTphW24uZXhwYW5kb10sISFhJiYhUShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFIoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBSKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyhhLGIsITApfX0pLG4uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bi5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbi5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSksUChmLGQsZVtkXSkpO24uX2RhdGEoZiwicGFyc2VkQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kYXRhKHRoaXMsYSl9KTphcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kYXRhKHRoaXMsYSxiKX0pOmY/UChmLGEsbi5kYXRhKGYsYSkpOnZvaWQgMH0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9bi5fZGF0YShhLGIpLGMmJighZHx8bi5pc0FycmF5KGMpP2Q9bi5fZGF0YShhLGIsbi5tYWtlQXJyYXkoYykpOmQucHVzaChjKSksZHx8W10pOnZvaWQgMH0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8ImZ4Ijt2YXIgYz1uLnF1ZXVlKGEsYiksZD1jLmxlbmd0aCxlPWMuc2hpZnQoKSxmPW4uX3F1ZXVlSG9va3MoYSxiKSxnPWZ1bmN0aW9uKCl7bi5kZXF1ZXVlKGEsYil9OyJpbnByb2dyZXNzIj09PWUmJihlPWMuc2hpZnQoKSxkLS0pLGUmJigiZngiPT09YiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIGYuc3RvcCxlLmNhbGwoYSxnLGYpKSwhZCYmZiYmZi5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGEsYil7dmFyIGM9YisicXVldWVIb29rcyI7cmV0dXJuIG4uX2RhdGEoYSxjKXx8bi5fZGF0YShhLGMse2VtcHR5Om4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe24uX3JlbW92ZURhdGEoYSxiKyJxdWV1ZSIpLG4uX3JlbW92ZURhdGEoYSxjKX0pfSl9fSksbi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT0iZngiLGMtLSksYXJndW1lbnRzLmxlbmd0aDxjP24ucXVldWUodGhpc1swXSxhKTp2b2lkIDA9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bi5xdWV1ZSh0aGlzLGEsYik7bi5fcXVldWVIb29rcyh0aGlzLGEpLCJmeCI9PT1hJiYiaW5wcm9ncmVzcyIhPT1jWzBdJiZuLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRlcXVldWUodGhpcyxhKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0xLGU9bi5EZWZlcnJlZCgpLGY9dGhpcyxnPXRoaXMubGVuZ3RoLGg9ZnVuY3Rpb24oKXstLWR8fGUucmVzb2x2ZVdpdGgoZixbZl0pfTsic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGE9YXx8ImZ4Ijt3aGlsZShnLS0pYz1uLl9kYXRhKGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBUPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFU9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxWPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVz1uLmFjY2Vzcz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKCJvYmplY3QiPT09bi50eXBlKGMpKXtlPSEwO2ZvcihoIGluIGMpbi5hY2Nlc3MoYSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbi5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKG4oYSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn0sWD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaTshZnVuY3Rpb24oKXt2YXIgYT16LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxiPXouY3JlYXRlRWxlbWVudCgiZGl2IiksYz16LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7aWYoYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+IixsLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsbC50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsbC5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxsLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09ei5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxjLnR5cGU9ImNoZWNrYm94IixjLmNoZWNrZWQ9ITAsYS5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoZWNrZWQ9Yy5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixsLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYS5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixsLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsbC5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7bC5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09bC5kZWxldGVFeHBhbmRvKXtsLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7bC5kZWxldGVFeHBhbmRvPSExfX1hPWI9Yz1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGIsYyxkPXouY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGIgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSljPSJvbiIrYiwobFtiKyJCdWJibGVzIl09YyBpbiBhKXx8KGQuc2V0QXR0cmlidXRlKGMsInQiKSxsW2IrIkJ1YmJsZXMiXT1kLmF0dHJpYnV0ZXNbY10uZXhwYW5kbz09PSExKTtkPW51bGx9KCk7dmFyIFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pLFo9L15rZXkvLCQ9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLF89L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLGFiPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYmIoKXtyZXR1cm4hMH1mdW5jdGlvbiBjYigpe3JldHVybiExfWZ1bmN0aW9uIGRiKCl7dHJ5e3JldHVybiB6LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW4uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2Ygbj09PUx8fGEmJm4uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDpuLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEYpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9YWIuZXhlYyhiW2hdKXx8W10sbz1xPWZbMV0scD0oZlsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8mJihqPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZT9qLmRlbGVnYXRlVHlwZTpqLmJpbmRUeXBlKXx8byxqPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbD1uLmV4dGVuZCh7dHlwZTpvLG9yaWdUeXBlOnEsZGF0YTpkLGhhbmRsZXI6YyxndWlkOmMuZ3VpZCxzZWxlY3RvcjplLG5lZWRzQ29udGV4dDplJiZuLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoZSksbmFtZXNwYWNlOnAuam9pbigiLiIpfSxpKSwobT1nW29dKXx8KG09Z1tvXT1bXSxtLmRlbGVnYXRlQ291bnQ9MCxqLnNldHVwJiZqLnNldHVwLmNhbGwoYSxkLHAsaykhPT0hMXx8KGEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobyxrLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbyxrKSkpLGouYWRkJiYoai5hZGQuY2FsbChhLGwpLGwuaGFuZGxlci5ndWlkfHwobC5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGwpOm0ucHVzaChsKSxuLmV2ZW50Lmdsb2JhbFtvXT0hMCk7YT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uaGFzRGF0YShhKSYmbi5fZGF0YShhKTtpZihyJiYoaz1yLmV2ZW50cykpe2I9KGJ8fCIiKS5tYXRjaChGKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSlpZihoPWFiLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8byxtPWtbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxpPWY9bS5sZW5ndGg7d2hpbGUoZi0tKWc9bVtmXSwhZSYmcSE9PWcub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWcuZ3VpZHx8aCYmIWgudGVzdChnLm5hbWVzcGFjZSl8fGQmJmQhPT1nLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFnLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksZy5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxnKSk7aSYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBrW29dKX1lbHNlIGZvcihvIGluIGspbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaykmJihkZWxldGUgci5oYW5kbGUsbi5fcmVtb3ZlRGF0YShhLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmLGcsaCxpLGssbCxtLG89W2R8fHpdLHA9ai5jYWxsKGIsInR5cGUiKT9iLnR5cGU6YixxPWouY2FsbChiLCJuYW1lc3BhY2UiKT9iLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGg9bD1kPWR8fHosMyE9PWQubm9kZVR5cGUmJjghPT1kLm5vZGVUeXBlJiYhXy50ZXN0KHArbi5ldmVudC50cmlnZ2VyZWQpJiYocC5pbmRleE9mKCIuIik+PTAmJihxPXAuc3BsaXQoIi4iKSxwPXEuc2hpZnQoKSxxLnNvcnQoKSksZz1wLmluZGV4T2YoIjoiKTwwJiYib24iK3AsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChwLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9ZT8yOjMsYi5uYW1lc3BhY2U9cS5qb2luKCIuIiksYi5uYW1lc3BhY2VfcmU9Yi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrcS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWQpLGM9bnVsbD09Yz9bYl06bi5tYWtlQXJyYXkoYyxbYl0pLGs9bi5ldmVudC5zcGVjaWFsW3BdfHx7fSxlfHwhay50cmlnZ2VyfHxrLnRyaWdnZXIuYXBwbHkoZCxjKSE9PSExKSl7aWYoIWUmJiFrLm5vQnViYmxlJiYhbi5pc1dpbmRvdyhkKSl7Zm9yKGk9ay5kZWxlZ2F0ZVR5cGV8fHAsXy50ZXN0KGkrcCl8fChoPWgucGFyZW50Tm9kZSk7aDtoPWgucGFyZW50Tm9kZSlvLnB1c2goaCksbD1oO2w9PT0oZC5vd25lckRvY3VtZW50fHx6KSYmby5wdXNoKGwuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93fHxhKX1tPTA7d2hpbGUoKGg9b1ttKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSliLnR5cGU9bT4xP2k6ay5iaW5kVHlwZXx8cCxmPShuLl9kYXRhKGgsImV2ZW50cyIpfHx7fSlbYi50eXBlXSYmbi5fZGF0YShoLCJoYW5kbGUiKSxmJiZmLmFwcGx5KGgsYyksZj1nJiZoW2ddLGYmJmYuYXBwbHkmJm4uYWNjZXB0RGF0YShoKSYmKGIucmVzdWx0PWYuYXBwbHkoaCxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO2lmKGIudHlwZT1wLCFlJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFrLl9kZWZhdWx0fHxrLl9kZWZhdWx0LmFwcGx5KG8ucG9wKCksYyk9PT0hMSkmJm4uYWNjZXB0RGF0YShkKSYmZyYmZFtwXSYmIW4uaXNXaW5kb3coZCkpe2w9ZFtnXSxsJiYoZFtnXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1wO3RyeXtkW3BdKCl9Y2F0Y2gocil7fW4uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxsJiYoZFtnXT1sKX1yZXR1cm4gYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW4uZXZlbnQuZml4KGEpO3ZhciBiLGMsZSxmLGcsaD1bXSxpPWQuY2FsbChhcmd1bWVudHMpLGo9KG4uX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVthLnR5cGVdfHxbXSxrPW4uZXZlbnQuc3BlY2lhbFthLnR5cGVdfHx7fTtpZihpWzBdPWEsYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFrLnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSE9PSExKXtoPW4uZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGEsaiksYj0wO3doaWxlKChmPWhbYisrXSkmJiFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2EuY3VycmVudFRhcmdldD1mLmVsZW0sZz0wO3doaWxlKChlPWYuaGFuZGxlcnNbZysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFhLm5hbWVzcGFjZV9yZXx8YS5uYW1lc3BhY2VfcmUudGVzdChlLm5hbWVzcGFjZSkpJiYoYS5oYW5kbGVPYmo9ZSxhLmRhdGE9ZS5kYXRhLGM9KChuLmV2ZW50LnNwZWNpYWxbZS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGUuaGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWMmJihhLnJlc3VsdD1jKT09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlzcGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXSxoPWIuZGVsZWdhdGVDb3VudCxpPWEudGFyZ2V0O2lmKGgmJmkubm9kZVR5cGUmJighYS5idXR0b258fCJjbGljayIhPT1hLnR5cGUpKWZvcig7aSE9dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZigxPT09aS5ub2RlVHlwZSYmKGkuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWEudHlwZSkpe2ZvcihlPVtdLGY9MDtoPmY7ZisrKWQ9YltmXSxjPWQuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWVbY10mJihlW2NdPWQubmVlZHNDb250ZXh0P24oYyx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQoYyx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGVbY10mJmUucHVzaChkKTtlLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZX0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30sZml4OmZ1bmN0aW9uKGEpe2lmKGFbbi5leHBhbmRvXSlyZXR1cm4gYTt2YXIgYixjLGQsZT1hLnR5cGUsZj1hLGc9dGhpcy5maXhIb29rc1tlXTtnfHwodGhpcy5maXhIb29rc1tlXT1nPSQudGVzdChlKT90aGlzLm1vdXNlSG9va3M6Wi50ZXN0KGUpP3RoaXMua2V5SG9va3M6e30pLGQ9Zy5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChnLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IG4uRXZlbnQoZiksYj1kLmxlbmd0aDt3aGlsZShiLS0pYz1kW2JdLGFbY109ZltjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1mLnNyY0VsZW1lbnR8fHopLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT0hIWEubWV0YUtleSxnLmZpbHRlcj9nLmZpbHRlcihhLGYpOmF9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1hLndoaWNoJiYoYS53aGljaD1udWxsIT1iLmNoYXJDb2RlP2IuY2hhckNvZGU6Yi5rZXlDb2RlKSxhfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1iLmJ1dHRvbixnPWIuZnJvbUVsZW1lbnQ7cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGQ9YS50YXJnZXQub3duZXJEb2N1bWVudHx8eixlPWQuZG9jdW1lbnRFbGVtZW50LGM9ZC5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhlJiZlLnNjcm9sbExlZnR8fGMmJmMuc2Nyb2xsTGVmdHx8MCktKGUmJmUuY2xpZW50TGVmdHx8YyYmYy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZSYmZS5zY3JvbGxUb3B8fGMmJmMuc2Nyb2xsVG9wfHwwKS0oZSYmZS5jbGllbnRUb3B8fGMmJmMuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmZyYmKGEucmVsYXRlZFRhcmdldD1nPT09YS50YXJnZXQ/Yi50b0VsZW1lbnQ6ZyksYS53aGljaHx8dm9pZCAwPT09Znx8KGEud2hpY2g9MSZmPzE6MiZmPzM6NCZmPzI6MCksYX19LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1kYigpJiZ0aGlzLmZvY3VzKXRyeXtyZXR1cm4gdGhpcy5mb2N1cygpLCExfWNhdGNoKGEpe319LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWRiKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBuLm5vZGVOYW1lKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bi5leHRlbmQobmV3IG4uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP24uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbi5yZW1vdmVFdmVudD16LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09TCYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiYoYS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCkpP2JiOmNiKTp0aGlzLnR5cGU9YSxiJiZuLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxuLm5vdygpLHZvaWQodGhpc1tuLmV4cGFuZG9dPSEwKSk6bmV3IG4uRXZlbnQoYSxiKX0sbi5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpjYixpc1Byb3BhZ2F0aW9uU3RvcHBlZDpjYixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpjYixwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1iYixhJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWJiLGEmJihhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YmIsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7bi5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4oIWV8fGUhPT1kJiYhbi5jb250YWlucyhkLGUpKSYmKGEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YiksY319fSksbC5zdWJtaXRCdWJibGVzfHwobi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBuLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9bi5ub2RlTmFtZShiLCJpbnB1dCIpfHxuLm5vZGVOYW1lKGIsImJ1dHRvbiIpP2IuZm9ybTp2b2lkIDA7YyYmIW4uX2RhdGEoYywic3VibWl0QnViYmxlcyIpJiYobi5ldmVudC5hZGQoYywic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxuLl9kYXRhKGMsInN1Ym1pdEJ1YmJsZXMiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmbi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG4uZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksbC5jaGFuZ2VCdWJibGVzfHwobi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gWS50ZXN0KHRoaXMubm9kZU5hbWUpPygoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSkmJihuLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXsiY2hlY2tlZCI9PT1hLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLG4uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSxuLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCl9KSksITEpOnZvaWQgbi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7WS50ZXN0KGIubm9kZU5hbWUpJiYhbi5fZGF0YShiLCJjaGFuZ2VCdWJibGVzIikmJihuLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7IXRoaXMucGFyZW50Tm9kZXx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fG4uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksbi5fZGF0YShiLCJjaGFuZ2VCdWJibGVzIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtyZXR1cm4gdGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHwicmFkaW8iIT09Yi50eXBlJiYiY2hlY2tib3giIT09Yi50eXBlP2EuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnZvaWQgMH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gbi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhWS50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGwuZm9jdXNpbkJ1YmJsZXN8fG4uZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXtuLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsbi5ldmVudC5maXgoYSksITApfTtuLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9bi5fZGF0YShkLGIpO2V8fGQuYWRkRXZlbnRMaXN0ZW5lcihhLGMsITApLG4uX2RhdGEoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1uLl9kYXRhKGQsYiktMTtlP24uX2RhdGEoZCxiLGUpOihkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKSxuLl9yZW1vdmVEYXRhKGQsYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1jfHxiLGI9dm9pZCAwKTtmb3IoZiBpbiBhKXRoaXMub24oZixiLGMsYVtmXSxlKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQgMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPWNiO2Vsc2UgaWYoIWQpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1lJiYoZz1kLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4oKS5vZmYoYSksZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuZ3VpZD1nLmd1aWR8fChnLmd1aWQ9bi5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LmFkZCh0aGlzLGEsZCxjLGIpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybihiPT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGM9YixiPXZvaWQgMCksYz09PSExJiYoYz1jYiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC5yZW1vdmUodGhpcyxhLGMsYil9KX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc1swXTtyZXR1cm4gYz9uLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KTtmdW5jdGlvbiBlYihhKXt2YXIgYj1mYi5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY312YXIgZmI9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGdiPS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csaGI9bmV3IFJlZ0V4cCgiPCg/OiIrZmIrIilbXFxzLz5dIiwiaSIpLGliPS9eXHMrLyxqYj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGtiPS88KFtcdzpdKykvLGxiPS88dGJvZHkvaSxtYj0vPHwmIz9cdys7LyxuYj0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLG9iPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHBiPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxxYj0vXnRydWVcLyguKikvLHJiPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxzYj17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6bC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19LHRiPWViKHopLHViPXRiLmFwcGVuZENoaWxkKHouY3JlYXRlRWxlbWVudCgiZGl2IikpO3NiLm9wdGdyb3VwPXNiLm9wdGlvbixzYi50Ym9keT1zYi50Zm9vdD1zYi5jb2xncm91cD1zYi5jYXB0aW9uPXNiLnRoZWFkLHNiLnRoPXNiLnRkO2Z1bmN0aW9uIHZiKGEsYil7dmFyIGMsZCxlPTAsZj10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PUw/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPT1MP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOnZvaWQgMDtpZighZilmb3IoZj1bXSxjPWEuY2hpbGROb2Rlc3x8YTtudWxsIT0oZD1jW2VdKTtlKyspIWJ8fG4ubm9kZU5hbWUoZCxiKT9mLnB1c2goZCk6bi5tZXJnZShmLHZiKGQsYikpO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sZik6Zn1mdW5jdGlvbiB3YihhKXtYLnRlc3QoYS50eXBlKSYmKGEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkKX1mdW5jdGlvbiB4YihhLGIpe3JldHVybiBuLm5vZGVOYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24geWIoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PW4uZmluZC5hdHRyKGEsInR5cGUiKSkrIi8iK2EudHlwZSxhfWZ1bmN0aW9uIHpiKGEpe3ZhciBiPXFiLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGF9ZnVuY3Rpb24gQWIoYSxiKXtmb3IodmFyIGMsZD0wO251bGwhPShjPWFbZF0pO2QrKyluLl9kYXRhKGMsImdsb2JhbEV2YWwiLCFifHxuLl9kYXRhKGJbZF0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gQmIoYSxiKXtpZigxPT09Yi5ub2RlVHlwZSYmbi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZj1uLl9kYXRhKGEpLGc9bi5fZGF0YShiLGYpLGg9Zi5ldmVudHM7aWYoaCl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihjIGluIGgpZm9yKGQ9MCxlPWhbY10ubGVuZ3RoO2U+ZDtkKyspbi5ldmVudC5hZGQoYixjLGhbY11bZF0pfWcuZGF0YSYmKGcuZGF0YT1uLmV4dGVuZCh7fSxnLmRhdGEpKX19ZnVuY3Rpb24gQ2IoYSxiKXt2YXIgYyxkLGU7aWYoMT09PWIubm9kZVR5cGUpe2lmKGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCFsLm5vQ2xvbmVFdmVudCYmYltuLmV4cGFuZG9dKXtlPW4uX2RhdGEoYik7Zm9yKGQgaW4gZS5ldmVudHMpbi5yZW1vdmVFdmVudChiLGQsZS5oYW5kbGUpO2IucmVtb3ZlQXR0cmlidXRlKG4uZXhwYW5kbyl9InNjcmlwdCI9PT1jJiZiLnRleHQhPT1hLnRleHQ/KHliKGIpLnRleHQ9YS50ZXh0LHpiKGIpKToib2JqZWN0Ij09PWM/KGIucGFyZW50Tm9kZSYmKGIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MKSxsLmh0bWw1Q2xvbmUmJmEuaW5uZXJIVE1MJiYhbi50cmltKGIuaW5uZXJIVE1MKSYmKGIuaW5uZXJIVE1MPWEuaW5uZXJIVE1MKSk6ImlucHV0Ij09PWMmJlgudGVzdChhLnR5cGUpPyhiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQsYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpKToib3B0aW9uIj09PWM/Yi5kZWZhdWx0U2VsZWN0ZWQ9Yi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX19bi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk9bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYobC5odG1sNUNsb25lfHxuLmlzWE1MRG9jKGEpfHwhaGIudGVzdCgiPCIrYS5ub2RlTmFtZSsiPiIpP2Y9YS5jbG9uZU5vZGUoITApOih1Yi5pbm5lckhUTUw9YS5vdXRlckhUTUwsdWIucmVtb3ZlQ2hpbGQoZj11Yi5maXJzdENoaWxkKSksIShsLm5vQ2xvbmVFdmVudCYmbC5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8bi5pc1hNTERvYyhhKSkpZm9yKGQ9dmIoZiksaD12YihhKSxnPTA7bnVsbCE9KGU9aFtnXSk7KytnKWRbZ10mJkNiKGUsZFtnXSk7aWYoYilpZihjKWZvcihoPWh8fHZiKGEpLGQ9ZHx8dmIoZiksZz0wO251bGwhPShlPWhbZ10pO2crKylCYihlLGRbZ10pO2Vsc2UgQmIoYSxmKTtyZXR1cm4gZD12YihmLCJzY3JpcHQiKSxkLmxlbmd0aD4wJiZBYihkLCFpJiZ2YihhLCJzY3JpcHQiKSksZD1oPWU9bnVsbCxmfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxmLGcsaCxpLGosayxtPWEubGVuZ3RoLG89ZWIoYikscD1bXSxxPTA7bT5xO3ErKylpZihmPWFbcV0sZnx8MD09PWYpaWYoIm9iamVjdCI9PT1uLnR5cGUoZikpbi5tZXJnZShwLGYubm9kZVR5cGU/W2ZdOmYpO2Vsc2UgaWYobWIudGVzdChmKSl7aD1ofHxvLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGk9KGtiLmV4ZWMoZil8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksaz1zYltpXXx8c2IuX2RlZmF1bHQsaC5pbm5lckhUTUw9a1sxXStmLnJlcGxhY2UoamIsIjwkMT48LyQyPiIpK2tbMl0sZT1rWzBdO3doaWxlKGUtLSloPWgubGFzdENoaWxkO2lmKCFsLmxlYWRpbmdXaGl0ZXNwYWNlJiZpYi50ZXN0KGYpJiZwLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShpYi5leGVjKGYpWzBdKSksIWwudGJvZHkpe2Y9InRhYmxlIiE9PWl8fGxiLnRlc3QoZik/Ijx0YWJsZT4iIT09a1sxXXx8bGIudGVzdChmKT8wOmg6aC5maXJzdENoaWxkLGU9ZiYmZi5jaGlsZE5vZGVzLmxlbmd0aDt3aGlsZShlLS0pbi5ub2RlTmFtZShqPWYuY2hpbGROb2Rlc1tlXSwidGJvZHkiKSYmIWouY2hpbGROb2Rlcy5sZW5ndGgmJmYucmVtb3ZlQ2hpbGQoail9bi5tZXJnZShwLGguY2hpbGROb2RlcyksaC50ZXh0Q29udGVudD0iIjt3aGlsZShoLmZpcnN0Q2hpbGQpaC5yZW1vdmVDaGlsZChoLmZpcnN0Q2hpbGQpO2g9by5sYXN0Q2hpbGR9ZWxzZSBwLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShmKSk7aCYmby5yZW1vdmVDaGlsZChoKSxsLmFwcGVuZENoZWNrZWR8fG4uZ3JlcCh2YihwLCJpbnB1dCIpLHdiKSxxPTA7d2hpbGUoZj1wW3ErK10paWYoKCFkfHwtMT09PW4uaW5BcnJheShmLGQpKSYmKGc9bi5jb250YWlucyhmLm93bmVyRG9jdW1lbnQsZiksaD12YihvLmFwcGVuZENoaWxkKGYpLCJzY3JpcHQiKSxnJiZBYihoKSxjKSl7ZT0wO3doaWxlKGY9aFtlKytdKXBiLnRlc3QoZi50eXBlfHwiIikmJmMucHVzaChmKX1yZXR1cm4gaD1udWxsLG99LGNsZWFuRGF0YTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZCxlLGYsZyxoPTAsaT1uLmV4cGFuZG8saj1uLmNhY2hlLGs9bC5kZWxldGVFeHBhbmRvLG09bi5ldmVudC5zcGVjaWFsO251bGwhPShkPWFbaF0pO2grKylpZigoYnx8bi5hY2NlcHREYXRhKGQpKSYmKGY9ZFtpXSxnPWYmJmpbZl0pKXtpZihnLmV2ZW50cylmb3IoZSBpbiBnLmV2ZW50cyltW2VdP24uZXZlbnQucmVtb3ZlKGQsZSk6bi5yZW1vdmVFdmVudChkLGUsZy5oYW5kbGUpO2pbZl0mJihkZWxldGUgaltmXSxrP2RlbGV0ZSBkW2ldOnR5cGVvZiBkLnJlbW92ZUF0dHJpYnV0ZSE9PUw/ZC5yZW1vdmVBdHRyaWJ1dGUoaSk6ZFtpXT1udWxsLGMucHVzaChmKSl9fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBXKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8eikuY3JlYXRlVGV4dE5vZGUoYSkpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9eGIodGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj14Yih0aGlzLGEpO2IuaW5zZXJ0QmVmb3JlKGEsYi5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPWE/bi5maWx0ZXIoYSx0aGlzKTp0aGlzLGU9MDtudWxsIT0oYz1kW2VdKTtlKyspYnx8MSE9PWMubm9kZVR5cGV8fG4uY2xlYW5EYXRhKHZiKGMpKSxjLnBhcmVudE5vZGUmJihiJiZuLmNvbnRhaW5zKGMub3duZXJEb2N1bWVudCxjKSYmQWIodmIoYywic2NyaXB0IikpLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9MDtudWxsIT0oYT10aGlzW2JdKTtiKyspezE9PT1hLm5vZGVUeXBlJiZuLmNsZWFuRGF0YSh2YihhLCExKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTthLm9wdGlvbnMmJm4ubm9kZU5hbWUoYSwic2VsZWN0IikmJihhLm9wdGlvbnMubGVuZ3RoPTApfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hKXJldHVybiAxPT09Yi5ub2RlVHlwZT9iLmlubmVySFRNTC5yZXBsYWNlKGdiLCIiKTp2b2lkIDA7aWYoISgic3RyaW5nIiE9dHlwZW9mIGF8fG5iLnRlc3QoYSl8fCFsLmh0bWxTZXJpYWxpemUmJmhiLnRlc3QoYSl8fCFsLmxlYWRpbmdXaGl0ZXNwYWNlJiZpYi50ZXN0KGEpfHxzYlsoa2IuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKXthPWEucmVwbGFjZShqYiwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEodmIoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGIpe2E9dGhpcy5wYXJlbnROb2RlLG4uY2xlYW5EYXRhKHZiKHRoaXMpKSxhJiZhLnJlcGxhY2VDaGlsZChiLHRoaXMpfSksYSYmKGEubGVuZ3RofHxhLm5vZGVUeXBlKT90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYil7YT1lLmFwcGx5KFtdLGEpO3ZhciBjLGQsZixnLGgsaSxqPTAsaz10aGlzLmxlbmd0aCxtPXRoaXMsbz1rLTEscD1hWzBdLHE9bi5pc0Z1bmN0aW9uKHApO2lmKHF8fGs+MSYmInN0cmluZyI9PXR5cGVvZiBwJiYhbC5jaGVja0Nsb25lJiZvYi50ZXN0KHApKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9bS5lcShjKTtxJiYoYVswXT1wLmNhbGwodGhpcyxjLGQuaHRtbCgpKSksZC5kb21NYW5pcChhLGIpfSk7aWYoayYmKGk9bi5idWlsZEZyYWdtZW50KGEsdGhpc1swXS5vd25lckRvY3VtZW50LCExLHRoaXMpLGM9aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3RoJiYoaT1jKSxjKSl7Zm9yKGc9bi5tYXAodmIoaSwic2NyaXB0IikseWIpLGY9Zy5sZW5ndGg7az5qO2orKylkPWksaiE9PW8mJihkPW4uY2xvbmUoZCwhMCwhMCksZiYmbi5tZXJnZShnLHZiKGQsInNjcmlwdCIpKSksYi5jYWxsKHRoaXNbal0sZCxqKTtpZihmKWZvcihoPWdbZy5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxuLm1hcChnLHpiKSxqPTA7Zj5qO2orKylkPWdbal0scGIudGVzdChkLnR5cGV8fCIiKSYmIW4uX2RhdGEoZCwiZ2xvYmFsRXZhbCIpJiZuLmNvbnRhaW5zKGgsZCkmJihkLnNyYz9uLl9ldmFsVXJsJiZuLl9ldmFsVXJsKGQuc3JjKTpuLmdsb2JhbEV2YWwoKGQudGV4dHx8ZC50ZXh0Q29udGVudHx8ZC5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKHJiLCIiKSkpO2k9Yz1udWxsfXJldHVybiB0aGlzfX0pLG4uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD0wLGU9W10sZz1uKGEpLGg9Zy5sZW5ndGgtMTtoPj1kO2QrKyljPWQ9PT1oP3RoaXM6dGhpcy5jbG9uZSghMCksbihnW2RdKVtiXShjKSxmLmFwcGx5KGUsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBEYixFYj17fTtmdW5jdGlvbiBGYihiLGMpe3ZhciBkPW4oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLGU9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZT9hLmdldERlZmF1bHRDb21wdXRlZFN0eWxlKGRbMF0pLmRpc3BsYXk6bi5jc3MoZFswXSwiZGlzcGxheSIpO3JldHVybiBkLmRldGFjaCgpLGV9ZnVuY3Rpb24gR2IoYSl7dmFyIGI9eixjPUViW2FdO3JldHVybiBjfHwoYz1GYihhLGIpLCJub25lIiE9PWMmJmN8fChEYj0oRGJ8fG4oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9KERiWzBdLmNvbnRlbnRXaW5kb3d8fERiWzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPUZiKGEsYiksRGIuZGV0YWNoKCkpLEViW2FdPWMpLGN9IWZ1bmN0aW9uKCl7dmFyIGEsYixjPXouY3JlYXRlRWxlbWVudCgiZGl2IiksZD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowIjtjLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxhLnN0eWxlLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsbC5vcGFjaXR5PS9eMC41Ly50ZXN0KGEuc3R5bGUub3BhY2l0eSksbC5jc3NGbG9hdD0hIWEuc3R5bGUuY3NzRmxvYXQsYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGMuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixsLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Yy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxhPWM9bnVsbCxsLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXt2YXIgYSxjLGUsZjtpZihudWxsPT1iKXtpZihhPXouZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSwhYSlyZXR1cm47Zj0iYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHgiLGM9ei5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPXouY3JlYXRlRWxlbWVudCgiZGl2IiksYS5hcHBlbmRDaGlsZChjKS5hcHBlbmRDaGlsZChlKSxiPSExLHR5cGVvZiBlLnN0eWxlLnpvb20hPT1MJiYoZS5zdHlsZS5jc3NUZXh0PWQrIjt3aWR0aDoxcHg7cGFkZGluZzoxcHg7em9vbToxIixlLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iLGUuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iNXB4IixiPTMhPT1lLm9mZnNldFdpZHRoKSxhLnJlbW92ZUNoaWxkKGMpLGE9Yz1lPW51bGx9cmV0dXJuIGJ9fSgpO3ZhciBIYj0vXm1hcmdpbi8sSWI9bmV3IFJlZ0V4cCgiXigiK1QrIikoPyFweClbYS16JV0rJCIsImkiKSxKYixLYixMYj0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhKYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX0sS2I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxKYihhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCxjJiYoIiIhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSxJYi50ZXN0KGcpJiZIYi50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDA9PT1nP2c6ZysiIn0pOnouZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKEpiPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sS2I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxKYihhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksSWIudGVzdChnKSYmIUxiLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBNYihhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXt2YXIgYz1hKCk7aWYobnVsbCE9YylyZXR1cm4gYz92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixnLGg9ei5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6LTk5OTlweCIsaj0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowIjtoLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixiPWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxiLnN0eWxlLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsbC5vcGFjaXR5PS9eMC41Ly50ZXN0KGIuc3R5bGUub3BhY2l0eSksbC5jc3NGbG9hdD0hIWIuc3R5bGUuY3NzRmxvYXQsaC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGguY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixsLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxiPWg9bnVsbCxuLmV4dGVuZChsLHtyZWxpYWJsZUhpZGRlbk9mZnNldHM6ZnVuY3Rpb24oKXtpZihudWxsIT1jKXJldHVybiBjO3ZhciBhLGIsZCxlPXouY3JlYXRlRWxlbWVudCgiZGl2IiksZj16LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoZilyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxlLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPXouY3JlYXRlRWxlbWVudCgiZGl2IiksYS5zdHlsZS5jc3NUZXh0PWksZi5hcHBlbmRDaGlsZChhKS5hcHBlbmRDaGlsZChlKSxlLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsYj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGJbMF0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSIsZD0wPT09YlswXS5vZmZzZXRIZWlnaHQsYlswXS5zdHlsZS5kaXNwbGF5PSIiLGJbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsYz1kJiYwPT09YlswXS5vZmZzZXRIZWlnaHQsZi5yZW1vdmVDaGlsZChhKSxlPWY9bnVsbCxjfSxib3hTaXppbmc6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZCYmaygpLGR9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWUmJmsoKSxlfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWYmJmsoKSxmfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGIsYyxkLGU7aWYobnVsbD09ZyYmYS5nZXRDb21wdXRlZFN0eWxlKXtpZihiPXouZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSwhYilyZXR1cm47Yz16LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9ei5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLnN0eWxlLmNzc1RleHQ9aSxiLmFwcGVuZENoaWxkKGMpLmFwcGVuZENoaWxkKGQpLGU9ZC5hcHBlbmRDaGlsZCh6LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxlLnN0eWxlLmNzc1RleHQ9ZC5zdHlsZS5jc3NUZXh0PWosZS5zdHlsZS5tYXJnaW5SaWdodD1lLnN0eWxlLndpZHRoPSIwIixkLnN0eWxlLndpZHRoPSIxcHgiLGc9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpLGIucmVtb3ZlQ2hpbGQoYyl9cmV0dXJuIGd9fSk7ZnVuY3Rpb24gaygpe3ZhciBiLGMsaD16LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aCYmKGI9ei5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPXouY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zdHlsZS5jc3NUZXh0PWksaC5hcHBlbmRDaGlsZChiKS5hcHBlbmRDaGlsZChjKSxjLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7dG9wOjElIixuLnN3YXAoaCxudWxsIT1oLnN0eWxlLnpvb20/e3pvb206MX06e30sZnVuY3Rpb24oKXtkPTQ9PT1jLm9mZnNldFdpZHRofSksZT0hMCxmPSExLGc9ITAsYS5nZXRDb21wdXRlZFN0eWxlJiYoZj0iMSUiIT09KGEuZ2V0Q29tcHV0ZWRTdHlsZShjLG51bGwpfHx7fSkudG9wLGU9IjRweCI9PT0oYS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoKSxoLnJlbW92ZUNoaWxkKGIpLGM9aD1udWxsKX19KCksbi5zd2FwPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfTt2YXIgTmI9L2FscGhhXChbXildKlwpL2ksT2I9L29wYWNpdHlccyo9XHMqKFteKV0qKS8sUGI9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFFiPW5ldyBSZWdFeHAoIl4oIitUKyIpKC4qKSQiLCJpIiksUmI9bmV3IFJlZ0V4cCgiXihbKy1dKT0oIitUKyIpIiwiaSIpLFNiPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxUYj17bGV0dGVyU3BhY2luZzowLGZvbnRXZWlnaHQ6NDAwfSxVYj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIFZiKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1VYi5sZW5ndGg7d2hpbGUoZS0tKWlmKGI9VWJbZV0rYyxiIGluIGEpcmV0dXJuIGI7cmV0dXJuIGR9ZnVuY3Rpb24gV2IoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bi5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlYoZCkmJihmW2ddPW4uX2RhdGEoZCwib2xkZGlzcGxheSIsR2IoZC5ub2RlTmFtZSkpKSk6ZltnXXx8KGU9VihkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZuLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzpuLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIFhiKGEsYixjKXt2YXIgZD1RYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIFliKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrVVtmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1VbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrVVtmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1VbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrVVtmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWmIoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUpiKGEpLGc9bC5ib3hTaXppbmcoKSYmImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUtiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksSWIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihsLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrWWIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW4uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9S2IoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6bC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1WYihpLGgpKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sdm9pZCAwPT09YylyZXR1cm4gZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl07aWYoZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVJiLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQobi5jc3MoYSxiKSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIiE9PWZ8fG4uY3NzTnVtYmVyW2hdfHwoYys9InB4IiksbC5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09IiIsaVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYik7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4uY3NzUHJvcHNbaF09VmIoYS5zdHlsZSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9S2IoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gVGImJihmPVRiW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fG4uaXNOdW1lcmljKGUpP2V8fDA6Zik6Zn19KSxuLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz8wPT09YS5vZmZzZXRXaWR0aCYmUGIudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpP24uc3dhcChhLFNiLGZ1bmN0aW9uKCl7cmV0dXJuIFpiKGEsYixkKX0pOlpiKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmSmIoYSk7cmV0dXJuIFhiKGEsYyxkP1liKGEsYixkLGwuYm94U2l6aW5nKCkmJiJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZSksZSk6MCl9fX0pLGwub3BhY2l0eXx8KG4uY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIE9iLnRlc3QoKGImJmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnN0eWxlLGQ9YS5jdXJyZW50U3R5bGUsZT1uLmlzTnVtZXJpYyhiKT8iYWxwaGEob3BhY2l0eT0iKzEwMCpiKyIpIjoiIixmPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29tPTEsKGI+PTF8fCIiPT09YikmJiIiPT09bi50cmltKGYucmVwbGFjZShOYiwiIikpJiZjLnJlbW92ZUF0dHJpYnV0ZSYmKGMucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PWJ8fGQmJiFkLmZpbHRlcil8fChjLmZpbHRlcj1OYi50ZXN0KGYpP2YucmVwbGFjZShOYixlKTpmKyIgIitlKX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0PU1iKGwucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxLYixbYSwibWFyZ2luUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVVtkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxIYi50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1YYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFcodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPUpiKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpCn0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gV2IodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gV2IodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Vih0aGlzKT9uKHRoaXMpLnNob3coKTpuKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uICRiKGEsYixjLGQsZSl7cmV0dXJuIG5ldyAkYi5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW4uVHdlZW49JGIsJGIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjokYixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPSRiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTokYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz0kYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9Yj10aGlzLm9wdGlvbnMuZHVyYXRpb24/bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6YSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqYit0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxjJiZjLnNldD9jLnNldCh0aGlzKTokYi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSwkYi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9JGIucHJvdG90eXBlLCRiLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbnVsbD09YS5lbGVtW2EucHJvcF18fGEuZWxlbS5zdHlsZSYmbnVsbCE9YS5lbGVtLnN0eWxlW2EucHJvcF0/KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApOmEuZWxlbVthLnByb3BdfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6YS5lbGVtLnN0eWxlJiYobnVsbCE9YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV18fG4uY3NzSG9va3NbYS5wcm9wXSk/bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCk6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0sJGIucHJvcEhvb2tzLnNjcm9sbFRvcD0kYi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9fSxuLmZ4PSRiLnByb3RvdHlwZS5pbml0LG4uZnguc3RlcD17fTt2YXIgX2IsYWMsYmM9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNjPW5ldyBSZWdFeHAoIl4oPzooWystXSk9fCkoIitUKyIpKFthLXolXSopJCIsImkiKSxkYz0vcXVldWVIb29rcyQvLGVjPVtqY10sZmM9eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYiksZD1jLmN1cigpLGU9Y2MuZXhlYyhiKSxmPWUmJmVbM118fChuLmNzc051bWJlclthXT8iIjoicHgiKSxnPShuLmNzc051bWJlclthXXx8InB4IiE9PWYmJitkKSYmY2MuZXhlYyhuLmNzcyhjLmVsZW0sYSkpLGg9MSxpPTIwO2lmKGcmJmdbM10hPT1mKXtmPWZ8fGdbM10sZT1lfHxbXSxnPStkfHwxO2RvIGg9aHx8Ii41IixnLz1oLG4uc3R5bGUoYy5lbGVtLGEsZytmKTt3aGlsZShoIT09KGg9Yy5jdXIoKS9kKSYmMSE9PWgmJi0taSl9cmV0dXJuIGUmJihnPWMuc3RhcnQ9K2d8fCtkfHwwLGMudW5pdD1mLGMuZW5kPWVbMV0/ZysoZVsxXSsxKSplWzJdOitlWzJdKSxjfV19O2Z1bmN0aW9uIGdjKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtfYj12b2lkIDB9KSxfYj1uLm5vdygpfWZ1bmN0aW9uIGhjKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VVtlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIGljKGEsYixjKXtmb3IodmFyIGQsZT0oZmNbYl18fFtdKS5jb25jYXQoZmNbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gamMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbT10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVihhKSxyPW4uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG0uYWx3YXlzKGZ1bmN0aW9uKCl7bS5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz1HYihhLm5vZGVOYW1lKSwibm9uZSI9PT1qJiYoaj1rKSwiaW5saW5lIj09PWomJiJub25lIj09PW4uY3NzKGEsImZsb2F0IikmJihsLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09az9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLnNocmlua1dyYXBCbG9ja3MoKXx8bS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGJjLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG4uc3R5bGUoYSxkKX1pZighbi5pc0VtcHR5T2JqZWN0KG8pKXtyPyJoaWRkZW4iaW4gciYmKHE9ci5oaWRkZW4pOnI9bi5fZGF0YShhLCJmeHNob3ciLHt9KSxmJiYoci5oaWRkZW49IXEpLHE/bihhKS5zaG93KCk6bS5kb25lKGZ1bmN0aW9uKCl7bihhKS5oaWRlKCl9KSxtLmRvbmUoZnVuY3Rpb24oKXt2YXIgYjtuLl9yZW1vdmVEYXRhKGEsImZ4c2hvdyIpO2ZvcihiIGluIG8pbi5zdHlsZShhLGIsb1tiXSl9KTtmb3IoZCBpbiBvKWc9aWMocT9yW2RdOjAsZCxtKSxkIGluIHJ8fChyW2RdPWcuc3RhcnQscSYmKGcuZW5kPWcuc3RhcnQsZy5zdGFydD0id2lkdGgiPT09ZHx8ImhlaWdodCI9PT1kPzE6MCkpfX1mdW5jdGlvbiBrYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSlpZihkPW4uY2FtZWxDYXNlKGMpLGU9YltkXSxmPWFbY10sbi5pc0FycmF5KGYpJiYoZT1mWzFdLGY9YVtjXT1mWzBdKSxjIT09ZCYmKGFbZF09ZixkZWxldGUgYVtjXSksZz1uLmNzc0hvb2tzW2RdLGcmJiJleHBhbmQiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIGxjKGEsYixjKXt2YXIgZCxlLGY9MCxnPWVjLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPV9ifHxnYygpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxjKSxvcmlnaW5hbFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFydFRpbWU6X2J8fGdjKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1uLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiP2gucmVzb2x2ZVdpdGgoYSxbaixiXSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihrYyhrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9ZWNbZl0uY2FsbChqLGEsayxqLm9wdHMpKXJldHVybiBkO3JldHVybiBuLm1hcChrLGljLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQobGMse3R3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtuLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEuc3BsaXQoIiAiKTtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyljPWFbZF0sZmNbY109ZmNbY118fFtdLGZjW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/ZWMudW5zaGlmdChhKTplYy5wdXNoKGEpfX0pLG4uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbi5meC5zcGVlZHM/bi5meC5zcGVlZHNbZC5kdXJhdGlvbl06bi5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PWQucXVldWV8fGQucXVldWU9PT0hMCkmJihkLnF1ZXVlPSJmeCIpLGQub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbigpe24uaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSYmbi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LG4uZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKFYpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4uaXNFbXB0eU9iamVjdChhKSxmPW4uc3BlZWQoYixjLGQpLGc9ZnVuY3Rpb24oKXt2YXIgYj1sYyh0aGlzLG4uZXh0ZW5kKHt9LGEpLGYpOyhlfHxuLl9kYXRhKHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1uLl9kYXRhKHRoaXMpO2lmKGUpZ1tlXSYmZ1tlXS5zdG9wJiZkKGdbZV0pO2Vsc2UgZm9yKGUgaW4gZylnW2VdJiZnW2VdLnN0b3AmJmRjLnRlc3QoZSkmJmQoZ1tlXSk7Zm9yKGU9Zi5sZW5ndGg7ZS0tOylmW2VdLmVsZW0hPT10aGlzfHxudWxsIT1hJiZmW2VdLnF1ZXVlIT09YXx8KGZbZV0uYW5pbS5zdG9wKGMpLGI9ITEsZi5zcGxpY2UoZSwxKSk7KGJ8fCFjKSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9bi5fZGF0YSh0aGlzKSxkPWNbYSsicXVldWUiXSxlPWNbYSsicXVldWVIb29rcyJdLGY9bi50aW1lcnMsZz1kP2QubGVuZ3RoOjA7Zm9yKGMuZmluaXNoPSEwLG4ucXVldWUodGhpcyxhLFtdKSxlJiZlLnN0b3AmJmUuc3RvcC5jYWxsKHRoaXMsITApLGI9Zi5sZW5ndGg7Yi0tOylmW2JdLmVsZW09PT10aGlzJiZmW2JdLnF1ZXVlPT09YSYmKGZbYl0uYW5pbS5zdG9wKCEwKSxmLnNwbGljZShiLDEpKTtmb3IoYj0wO2c+YjtiKyspZFtiXSYmZFtiXS5maW5pc2gmJmRbYl0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGMuZmluaXNofSl9fSksbi5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihhLGIpe3ZhciBjPW4uZm5bYl07bi5mbltiXT1mdW5jdGlvbihhLGQsZSl7cmV0dXJuIG51bGw9PWF8fCJib29sZWFuIj09dHlwZW9mIGE/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGhjKGIsITApLGEsZCxlKX19KSxuLmVhY2goe3NsaWRlRG93bjpoYygic2hvdyIpLHNsaWRlVXA6aGMoImhpZGUiKSxzbGlkZVRvZ2dsZTpoYygidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksbi50aW1lcnM9W10sbi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGEsYj1uLnRpbWVycyxjPTA7Zm9yKF9iPW4ubm93KCk7YzxiLmxlbmd0aDtjKyspYT1iW2NdLGEoKXx8YltjXSE9PWF8fGIuc3BsaWNlKGMtLSwxKTtiLmxlbmd0aHx8bi5meC5zdG9wKCksX2I9dm9pZCAwfSxuLmZ4LnRpbWVyPWZ1bmN0aW9uKGEpe24udGltZXJzLnB1c2goYSksYSgpP24uZnguc3RhcnQoKTpuLnRpbWVycy5wb3AoKX0sbi5meC5pbnRlcnZhbD0xMyxuLmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7YWN8fChhYz1zZXRJbnRlcnZhbChuLmZ4LnRpY2ssbi5meC5pbnRlcnZhbCkpfSxuLmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGFjKSxhYz1udWxsfSxuLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxuLmZuLmRlbGF5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bi5meD9uLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4Iix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU9ei5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLGUuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGE9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9ei5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxkPWMuYXBwZW5kQ2hpbGQoei5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksYj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLGEuc3R5bGUuY3NzVGV4dD0idG9wOjFweCIsbC5nZXRTZXRBdHRyaWJ1dGU9InQiIT09ZS5jbGFzc05hbWUsbC5zdHlsZT0vdG9wLy50ZXN0KGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxsLmhyZWZOb3JtYWxpemVkPSIvYSI9PT1hLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGwuY2hlY2tPbj0hIWIudmFsdWUsbC5vcHRTZWxlY3RlZD1kLnNlbGVjdGVkLGwuZW5jdHlwZT0hIXouY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsYy5kaXNhYmxlZD0hMCxsLm9wdERpc2FibGVkPSFkLmRpc2FibGVkLGI9ei5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGIuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLGwuaW5wdXQ9IiI9PT1iLmdldEF0dHJpYnV0ZSgidmFsdWUiKSxiLnZhbHVlPSJ0IixiLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksbC5yYWRpb1ZhbHVlPSJ0Ij09PWIudmFsdWUsYT1iPWM9ZD1lPW51bGx9KCk7dmFyIG1jPS9cci9nO24uZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZD1uLmlzRnVuY3Rpb24oYSksdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBlOzE9PT10aGlzLm5vZGVUeXBlJiYoZT1kP2EuY2FsbCh0aGlzLGMsbih0aGlzKS52YWwoKSk6YSxudWxsPT1lP2U9IiI6Im51bWJlciI9PXR5cGVvZiBlP2UrPSIiOm4uaXNBcnJheShlKSYmKGU9bi5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphKyIifSkpLGI9bi52YWxIb29rc1t0aGlzLnR5cGVdfHxuLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmInNldCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0aGlzLGUsInZhbHVlIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9bi52YWxIb29rc1tlLnR5cGVdfHxuLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmImdldCJpbiBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLCJ2YWx1ZSIpKT9jOihjPWUudmFsdWUsInN0cmluZyI9PXR5cGVvZiBjP2MucmVwbGFjZShtYywiIik6bnVsbD09Yz8iIjpjKX19fSksbi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1uLmZpbmQuYXR0cihhLCJ2YWx1ZSIpO3JldHVybiBudWxsIT1iP2I6bi50ZXh0KGEpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChsLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxuLmluQXJyYXkobi52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bi52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uaXNBcnJheShiKT9hLmNoZWNrZWQ9bi5pbkFycmF5KG4oYSkudmFsKCksYik+PTA6dm9pZCAwfX0sbC5jaGVja09ufHwobi52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBuYyxvYyxwYz1uLmV4cHIuYXR0ckhhbmRsZSxxYz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHJjPWwuZ2V0U2V0QXR0cmlidXRlLHNjPWwuaW5wdXQ7bi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVyh0aGlzLG4uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09TD9uLnByb3AoYSxiLGMpOigxPT09ZiYmbi5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bi5hdHRySG9va3NbYl18fChuLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP29jOm5jKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBuLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRik7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKT9zYyYmcmN8fCFxYy50ZXN0KGMpP2FbZF09ITE6YVtuLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm4uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHJjP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWwucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm4ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksb2M9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9uLnJlbW92ZUF0dHIoYSxjKTpzYyYmcmN8fCFxYy50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFyYyYmbi5wcm9wRml4W2NdfHxjLGMpOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9cGNbYl18fG4uZmluZC5hdHRyO3BjW2JdPXNjJiZyY3x8IXFjLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPXBjW2JdLHBjW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxwY1tiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSksc2MmJnJjfHwobi5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm5jJiZuYy5zZXQoYSxiLGMpfX0pLHJjfHwobmM9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxwYy5pZD1wYy5uYW1lPXBjLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG4udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bmMuc2V0fSxuLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bmMuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxuLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bi5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGwuc3R5bGV8fChuLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciB0Yz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx1Yz0vXig/OmF8YXJlYSkkL2k7bi5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVyh0aGlzLG4ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1uLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxuLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW4uaXNYTUxEb2MoYSksZiYmKGI9bi5wcm9wRml4W2JdfHxiLGU9bi5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW4uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6dGMudGVzdChhLm5vZGVOYW1lKXx8dWMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxsLmhyZWZOb3JtYWxpemVkfHxuLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXtuLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxuLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe24ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxsLmVuY3R5cGV8fChuLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdmM9L1tcdFxyXG5cZl0vZztuLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEYpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodmMsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW4udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChGKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHZjLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP24udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG4uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1uKHRoaXMpLGY9YS5tYXRjaChGKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09THx8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpuLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodmMsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG4uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG4uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHdjPW4ubm93KCkseGM9L1w/Lyx5Yz0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO24ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bi50cmltKGIrIiIpO3JldHVybiBlJiYhbi50cmltKGUucmVwbGFjZSh5YyxmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTpuLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG4ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bi5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHpjLEFjLEJjPS8jLiokLyxDYz0vKFs/Jl0pXz1bXiZdKi8sRGM9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxFYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxGYz0vXig/OkdFVHxIRUFEKSQvLEdjPS9eXC9cLy8sSGM9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSWM9e30sSmM9e30sS2M9IiovIi5jb25jYXQoIioiKTt0cnl7QWM9bG9jYXRpb24uaHJlZn1jYXRjaChMYyl7QWM9ei5jcmVhdGVFbGVtZW50KCJhIiksQWMuaHJlZj0iIixBYz1BYy5ocmVmfXpjPUhjLmV4ZWMoQWMudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIE1jKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEYpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTmMoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SmM7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBPYyhhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZuLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gUGMoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUWMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6QWMsdHlwZToiR0VUIixpc0xvY2FsOkVjLnRlc3QoemNbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6S2MsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4dCB4bWwiOm4ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP09jKE9jKGEsbi5hamF4U2V0dGluZ3MpLGIpOk9jKG4uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOk1jKEljKSxhamF4VHJhbnNwb3J0Ok1jKEpjKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1uLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxtPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9uKGwpOm4uZXZlbnQsbz1uLkRlZmVycmVkKCkscD1uLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPURjLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fEFjKSsiIikucmVwbGFjZShCYywiIikucmVwbGFjZShHYyx6Y1sxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1uLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEYpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUhjLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09emNbMV0mJmNbMl09PT16Y1syXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oemNbM118fCgiaHR0cDoiPT09emNbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1uLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTmMoSWMsayxiLHYpLDI9PT10KXJldHVybiB2O2g9ay5nbG9iYWwsaCYmMD09PW4uYWN0aXZlKysmJm4uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRmMudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHhjLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUNjLnRlc3QoZSk/ZS5yZXBsYWNlKENjLCIkMV89Iit3YysrKTplKyh4Yy50ZXN0KGUpPyImIjoiPyIpKyJfPSIrd2MrKykpLGsuaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixuLmxhc3RNb2RpZmllZFtlXSksbi5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG4uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0tjKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1OYyhKYyxrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm0udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PVBjKGssdixjKSksdT1RYyhrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobi5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG4uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZtLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihtLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG4uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bi5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG4uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbi5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW4oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG4uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXtuKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1uLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG4odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG4uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFsLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxuLmNzcyhhLCJkaXNwbGF5IikpfSxuLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFuLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBSYz0vJTIwL2csU2M9L1xbXF0kLyxUYz0vXHI/XG4vZyxVYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVmM9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFdjKGEsYixjLGQpe3ZhciBlO2lmKG4uaXNBcnJheShiKSluLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFNjLnRlc3QoYSk/ZChhLGUpOldjKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1uLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilXYyhhKyJbIitlKyJdIixiW2VdLGMsZCl9bi5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bi5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW4uYWpheFNldHRpbmdzJiZuLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW4uaXNQbGFpbk9iamVjdChhKSluLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVdjKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFJjLCIrIil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP24ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW4odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZWYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVWMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVgudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1uKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bi5pc0FycmF5KGMpP24ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShUYywiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoVGMsIlxyXG4iKX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmJGMoKXx8X2MoKX06JGM7dmFyIFhjPTAsWWM9e30sWmM9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5BY3RpdmVYT2JqZWN0JiZuKGEpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFljKVljW2FdKHZvaWQgMCwhMCl9KSxsLmNvcnM9ISFaYyYmIndpdGhDcmVkZW50aWFscyJpbiBaYyxaYz1sLmFqYXg9ISFaYyxaYyYmbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxsLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytYYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFljW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW4ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WWNbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gX2MoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1uLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXouaGVhZHx8bigiaGVhZCIpWzBdfHx6LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9ei5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgYWQ9W10sYmQ9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9YWQucG9wKCl8fG4uZXhwYW5kbysiXyIrd2MrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGJkLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYmQudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGJkLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh4Yy50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssYWQucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHo7dmFyIGQ9di5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW4uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbihlKS5yZW1vdmUoKSxuLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgY2Q9bi5mbi5sb2FkO24uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZjZClyZXR1cm4gY2QuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9YS5zbGljZShoLGEubGVuZ3RoKSxhPWEuc2xpY2UoMCxoKSksbi5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJiJvYmplY3QiPT10eXBlb2YgYiYmKGY9IlBPU1QiKSxnLmxlbmd0aD4wJiZuLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtlPWFyZ3VtZW50cyxnLmh0bWwoZD9uKCI8ZGl2PiIpLmFwcGVuZChuLnBhcnNlSFRNTChhKSkuZmluZChkKTphKX0pLmNvbXBsZXRlKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGMsZXx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSksdGhpc30sbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07dmFyIGRkPWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIGVkKGEpe3JldHVybiBuLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGU/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ITF9bi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaz1uLmNzcyhhLCJwb3NpdGlvbiIpLGw9bihhKSxtPXt9OyJzdGF0aWMiPT09ayYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9bi5jc3MoYSwidG9wIiksaT1uLmNzcyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhlZCI9PT1rKSYmbi5pbkFycmF5KCJhdXRvIixbZixpXSk+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLG4uaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxoKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixlKT8odHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09TCYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1lZChmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3Atbi5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW4uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8ZGQ7d2hpbGUoYSYmIW4ubm9kZU5hbWUoYSwiaHRtbCIpJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8ZGR9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz0vWS8udGVzdChiKTtuLmZuW2FdPWZ1bmN0aW9uKGQpe3JldHVybiBXKHRoaXMsZnVuY3Rpb24oYSxkLGUpe3ZhciBmPWVkKGEpO3JldHVybiB2b2lkIDA9PT1lP2Y/YiBpbiBmP2ZbYl06Zi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF06YVtkXTp2b2lkKGY/Zi5zY3JvbGxUbyhjP24oZikuc2Nyb2xsTGVmdCgpOmUsYz9lOm4oZikuc2Nyb2xsVG9wKCkpOmFbZF09ZSl9LGEsZCxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLG4uZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09TWIobC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9S2IoYSxiKSxJYi50ZXN0KGMpP24oYSkucG9zaXRpb24oKVtiXSsicHgiOmMpOnZvaWQgMH0pfSksbi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFcodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxuLmZuLmFuZFNlbGY9bi5mbi5hZGRCYWNrLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIGZkPWEualF1ZXJ5LGdkPWEuJDtyZXR1cm4gbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKGIpe3JldHVybiBhLiQ9PT1uJiYoYS4kPWdkKSxiJiZhLmpRdWVyeT09PW4mJihhLmpRdWVyeT1mZCksbn0sdHlwZW9mIGI9PT1MJiYoYS5qUXVlcnk9YS4kPW4pLG59KTsK"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="data:application/x-javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjEgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE0IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICovCmlmKCJ1bmRlZmluZWQiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkiKTsrZnVuY3Rpb24oYSl7dmFyIGI9YS5mbi5qcXVlcnkuc3BsaXQoIiAiKVswXS5zcGxpdCgiLiIpO2lmKGJbMF08MiYmYlsxXTw5fHwxPT1iWzBdJiY5PT1iWzFdJiZiWzJdPDEpdGhyb3cgbmV3IEVycm9yKCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeSB2ZXJzaW9uIDEuOS4xIG9yIGhpZ2hlciIpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLGI9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9O2Zvcih2YXIgYyBpbiBiKWlmKHZvaWQgMCE9PWEuc3R5bGVbY10pcmV0dXJue2VuZDpiW2NdfTtyZXR1cm4hMX1hLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKGIpe3ZhciBjPSExLGQ9dGhpczthKHRoaXMpLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmdW5jdGlvbigpe2M9ITB9KTt2YXIgZT1mdW5jdGlvbigpe2N8fGEoZCkudHJpZ2dlcihhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfTtyZXR1cm4gc2V0VGltZW91dChlLGIpLHRoaXN9LGEoZnVuY3Rpb24oKXthLnN1cHBvcnQudHJhbnNpdGlvbj1iKCksYS5zdXBwb3J0LnRyYW5zaXRpb24mJihhLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oYil7cmV0dXJuIGEoYi50YXJnZXQpLmlzKHRoaXMpP2IuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnZvaWQgMH19KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuYWxlcnQiKTtlfHxjLmRhdGEoImJzLmFsZXJ0IixlPW5ldyBkKHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0uY2FsbChjKX0pfXZhciBjPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrIixjLHRoaXMuY2xvc2UpfTtkLlZFUlNJT049IjMuMy4xIixkLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXtnLmRldGFjaCgpLnRyaWdnZXIoImNsb3NlZC5icy5hbGVydCIpLnJlbW92ZSgpfXZhciBlPWEodGhpcyksZj1lLmF0dHIoImRhdGEtdGFyZ2V0Iik7Znx8KGY9ZS5hdHRyKCJocmVmIiksZj1mJiZmLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3ZhciBnPWEoZik7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGcubGVuZ3RofHwoZz1lLmNsb3Nlc3QoIi5hbGVydCIpKSxnLnRyaWdnZXIoYj1hLkV2ZW50KCJjbG9zZS5icy5hbGVydCIpKSxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoZy5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZy5oYXNDbGFzcygiZmFkZSIpP2cub25lKCJic1RyYW5zaXRpb25FbmQiLGMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6YygpKX07dmFyIGU9YS5mbi5hbGVydDthLmZuLmFsZXJ0PWIsYS5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1kLGEuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFsZXJ0PWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpIixjLGQucHJvdG90eXBlLmNsb3NlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmJ1dHRvbiIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiO2V8fGQuZGF0YSgiYnMuYnV0dG9uIixlPW5ldyBjKHRoaXMsZikpLCJ0b2dnbGUiPT1iP2UudG9nZ2xlKCk6YiYmZS5zZXRTdGF0ZShiKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuaXNMb2FkaW5nPSExfTtjLlZFUlNJT049IjMuMy4xIixjLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9LGMucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGIpe3ZhciBjPSJkaXNhYmxlZCIsZD10aGlzLiRlbGVtZW50LGU9ZC5pcygiaW5wdXQiKT8idmFsIjoiaHRtbCIsZj1kLmRhdGEoKTtiKz0iVGV4dCIsbnVsbD09Zi5yZXNldFRleHQmJmQuZGF0YSgicmVzZXRUZXh0IixkW2VdKCkpLHNldFRpbWVvdXQoYS5wcm94eShmdW5jdGlvbigpe2RbZV0obnVsbD09ZltiXT90aGlzLm9wdGlvbnNbYl06ZltiXSksImxvYWRpbmdUZXh0Ij09Yj8odGhpcy5pc0xvYWRpbmc9ITAsZC5hZGRDbGFzcyhjKS5hdHRyKGMsYykpOnRoaXMuaXNMb2FkaW5nJiYodGhpcy5pc0xvYWRpbmc9ITEsZC5yZW1vdmVDbGFzcyhjKS5yZW1vdmVBdHRyKGMpKX0sdGhpcyksMCl9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBhPSEwLGI9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoImlucHV0Iik7InJhZGlvIj09Yy5wcm9wKCJ0eXBlIikmJihjLnByb3AoImNoZWNrZWQiKSYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIik/YT0hMTpiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikpLGEmJmMucHJvcCgiY2hlY2tlZCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKS50cmlnZ2VyKCJjaGFuZ2UiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiYWN0aXZlIikpO2EmJnRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5idXR0b24uZGF0YS1hcGkiLCdbZGF0YS10b2dnbGVePSJidXR0b24iXScsZnVuY3Rpb24oYyl7dmFyIGQ9YShjLnRhcmdldCk7ZC5oYXNDbGFzcygiYnRuIil8fChkPWQuY2xvc2VzdCgiLmJ0biIpKSxiLmNhbGwoZCwidG9nZ2xlIiksYy5wcmV2ZW50RGVmYXVsdCgpfSkub24oImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KCIuYnRuIikudG9nZ2xlQ2xhc3MoImZvY3VzIiwvXmZvY3VzKGluKT8kLy50ZXN0KGIudHlwZSkpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5jYXJvdXNlbCIpLGY9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxkLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGc9InN0cmluZyI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoImJzLmNhcm91c2VsIixlPW5ldyBjKHRoaXMsZikpLCJudW1iZXIiPT10eXBlb2YgYj9lLnRvKGIpOmc/ZVtnXSgpOmYuaW50ZXJ2YWwmJmUucGF1c2UoKS5jeWNsZSgpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy4kaW5kaWNhdG9ycz10aGlzLiRlbGVtZW50LmZpbmQoIi5jYXJvdXNlbC1pbmRpY2F0b3JzIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9dGhpcy5zbGlkaW5nPXRoaXMuaW50ZXJ2YWw9dGhpcy4kYWN0aXZlPXRoaXMuJGl0ZW1zPW51bGwsdGhpcy5vcHRpb25zLmtleWJvYXJkJiZ0aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duLmJzLmNhcm91c2VsIixhLnByb3h5KHRoaXMua2V5ZG93bix0aGlzKSksImhvdmVyIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmdGhpcy4kZWxlbWVudC5vbigibW91c2VlbnRlci5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbigibW91c2VsZWF2ZS5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPSIzLjMuMSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTYwMCxjLkRFRkFVTFRTPXtpbnRlcnZhbDo1ZTMscGF1c2U6ImhvdmVyIix3cmFwOiEwLGtleWJvYXJkOiEwfSxjLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGEudGFyZ2V0LnRhZ05hbWUpKXtzd2l0Y2goYS53aGljaCl7Y2FzZSAzNzp0aGlzLnByZXYoKTticmVhaztjYXNlIDM5OnRoaXMubmV4dCgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWEucHJldmVudERlZmF1bHQoKX19LGMucHJvdG90eXBlLmN5Y2xlPWZ1bmN0aW9uKGIpe3JldHVybiBifHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMuaW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpcy5vcHRpb25zLmludGVydmFsJiYhdGhpcy5wYXVzZWQmJih0aGlzLmludGVydmFsPXNldEludGVydmFsKGEucHJveHkodGhpcy5uZXh0LHRoaXMpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCkpLHRoaXN9LGMucHJvdG90eXBlLmdldEl0ZW1JbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kaXRlbXM9YS5wYXJlbnQoKS5jaGlsZHJlbigiLml0ZW0iKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9InByZXYiPT1hPy0xOjEsZD10aGlzLmdldEl0ZW1JbmRleChiKSxlPShkK2MpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZSl9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSk7cmV0dXJuIGE+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fDA+YT92b2lkIDA6dGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKCJzbGlkLmJzLmNhcm91c2VsIixmdW5jdGlvbigpe2IudG8oYSl9KTpjPT1hP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYT5jPyJuZXh0IjoicHJldiIsdGhpcy4kaXRlbXMuZXEoYSkpfSxjLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQoIi5uZXh0LCAucHJldiIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJuZXh0Iil9LGMucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJwcmV2Iil9LGMucHJvdG90eXBlLnNsaWRlPWZ1bmN0aW9uKGIsZCl7dmFyIGU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSxmPWR8fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihiLGUpLGc9dGhpcy5pbnRlcnZhbCxoPSJuZXh0Ij09Yj8ibGVmdCI6InJpZ2h0IixpPSJuZXh0Ij09Yj8iZmlyc3QiOiJsYXN0IixqPXRoaXM7aWYoIWYubGVuZ3RoKXtpZighdGhpcy5vcHRpb25zLndyYXApcmV0dXJuO2Y9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbSIpW2ldKCl9aWYoZi5oYXNDbGFzcygiYWN0aXZlIikpcmV0dXJuIHRoaXMuc2xpZGluZz0hMTt2YXIgaz1mWzBdLGw9YS5FdmVudCgic2xpZGUuYnMuY2Fyb3VzZWwiLHtyZWxhdGVkVGFyZ2V0OmssZGlyZWN0aW9uOmh9KTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIobCksIWwuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKHRoaXMuc2xpZGluZz0hMCxnJiZ0aGlzLnBhdXNlKCksdGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgpe3RoaXMuJGluZGljYXRvcnMuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTt2YXIgbT1hKHRoaXMuJGluZGljYXRvcnMuY2hpbGRyZW4oKVt0aGlzLmdldEl0ZW1JbmRleChmKV0pO20mJm0uYWRkQ2xhc3MoImFjdGl2ZSIpfXZhciBuPWEuRXZlbnQoInNsaWQuYnMuY2Fyb3VzZWwiLHtyZWxhdGVkVGFyZ2V0OmssZGlyZWN0aW9uOmh9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIik/KGYuYWRkQ2xhc3MoYiksZlswXS5vZmZzZXRXaWR0aCxlLmFkZENsYXNzKGgpLGYuYWRkQ2xhc3MoaCksZS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtmLnJlbW92ZUNsYXNzKFtiLGhdLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLGUucmVtb3ZlQ2xhc3MoWyJhY3RpdmUiLGhdLmpvaW4oIiAiKSksai5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtqLiRlbGVtZW50LnRyaWdnZXIobil9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KGUucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGYuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIobikpLGcmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIGQ9YS5mbi5jYXJvdXNlbDthLmZuLmNhcm91c2VsPWIsYS5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1jLGEuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNhcm91c2VsPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7dmFyIGQsZT1hKHRoaXMpLGY9YShlLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChkPWUuYXR0cigiaHJlZiIpKSYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKTtpZihmLmhhc0NsYXNzKCJjYXJvdXNlbCIpKXt2YXIgZz1hLmV4dGVuZCh7fSxmLmRhdGEoKSxlLmRhdGEoKSksaD1lLmF0dHIoImRhdGEtc2xpZGUtdG8iKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKCJicy5jYXJvdXNlbCIpLnRvKGgpLGMucHJldmVudERlZmF1bHQoKX19O2EoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlXSIsZSkub24oImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpIiwiW2RhdGEtc2xpZGUtdG9dIixlKSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtcmlkZT0iY2Fyb3VzZWwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpO2IuY2FsbChjLGMuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjLGQ9Yi5hdHRyKCJkYXRhLXRhcmdldCIpfHwoYz1iLmF0dHIoImhyZWYiKSkmJmMucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKTtyZXR1cm4gYShkKX1mdW5jdGlvbiBjKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5jb2xsYXBzZSIpLGY9YS5leHRlbmQoe30sZC5ERUZBVUxUUyxjLmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmInNob3ciPT1iJiYoZi50b2dnbGU9ITEpLGV8fGMuZGF0YSgiYnMuY29sbGFwc2UiLGU9bmV3IGQodGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgZD1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sZC5ERUZBVUxUUyxjKSx0aGlzLiR0cmlnZ2VyPWEodGhpcy5vcHRpb25zLnRyaWdnZXIpLmZpbHRlcignW2hyZWY9IiMnK2IuaWQrJyJdLCBbZGF0YS10YXJnZXQ9IiMnK2IuaWQrJyJdJyksdGhpcy50cmFuc2l0aW9uaW5nPW51bGwsdGhpcy5vcHRpb25zLnBhcmVudD90aGlzLiRwYXJlbnQ9dGhpcy5nZXRQYXJlbnQoKTp0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LHRoaXMuJHRyaWdnZXIpLHRoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O2QuVkVSU0lPTj0iMy4zLjEiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0zNTAsZC5ERUZBVUxUUz17dG9nZ2xlOiEwLHRyaWdnZXI6J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXSd9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQoIj4gLnBhbmVsIikuY2hpbGRyZW4oIi5pbiwgLmNvbGxhcHNpbmciKTtpZighKGUmJmUubGVuZ3RoJiYoYj1lLmRhdGEoImJzLmNvbGxhcHNlIiksYiYmYi50cmFuc2l0aW9uaW5nKSkpe3ZhciBmPWEuRXZlbnQoInNob3cuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoZiksIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe2UmJmUubGVuZ3RoJiYoYy5jYWxsKGUsImhpZGUiKSxifHxlLmRhdGEoImJzLmNvbGxhcHNlIixudWxsKSk7dmFyIGc9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIilbZ10oMCkuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgaD1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UgaW4iKVtnXSgiIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93bi5icy5jb2xsYXBzZSIpfTtpZighYS5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIGguY2FsbCh0aGlzKTt2YXIgaT1hLmNhbWVsQ2FzZShbInNjcm9sbCIsZ10uam9pbigiLSIpKTt0aGlzLiRlbGVtZW50Lm9uZSgiYnNUcmFuc2l0aW9uRW5kIixhLnByb3h5KGgsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTilbZ10odGhpcy4kZWxlbWVudFswXVtpXSl9fX19LGQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYj1hLkV2ZW50KCJoaWRlLmJzLmNvbGxhcHNlIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpLCFiLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgYz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbY10odGhpcy4kZWxlbWVudFtjXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiY29sbGFwc2luZyIpLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSBpbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKCJjb2xsYXBzZWQiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGU9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIikuYWRkQ2xhc3MoImNvbGxhcHNlIikudHJpZ2dlcigiaGlkZGVuLmJzLmNvbGxhcHNlIil9O3JldHVybiBhLnN1cHBvcnQudHJhbnNpdGlvbj92b2lkIHRoaXMuJGVsZW1lbnRbY10oMCkub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoZSx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTplLmNhbGwodGhpcyl9fX0sZC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpPyJoaWRlIjoic2hvdyJdKCl9LGQucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLm9wdGlvbnMucGFyZW50KyciXScpLmVhY2goYS5wcm94eShmdW5jdGlvbihjLGQpe3ZhciBlPWEoZCk7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoYihlKSxlKX0sdGhpcykpLmVuZCgpfSxkLnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmhhc0NsYXNzKCJpbiIpO2EuYXR0cigiYXJpYS1leHBhbmRlZCIsYyksYi50b2dnbGVDbGFzcygiY29sbGFwc2VkIiwhYykuYXR0cigiYXJpYS1leHBhbmRlZCIsYyl9O3ZhciBlPWEuZm4uY29sbGFwc2U7YS5mbi5jb2xsYXBzZT1jLGEuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9ZCxhLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jb2xsYXBzZT1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXScsZnVuY3Rpb24oZCl7dmFyIGU9YSh0aGlzKTtlLmF0dHIoImRhdGEtdGFyZ2V0Iil8fGQucHJldmVudERlZmF1bHQoKTt2YXIgZj1iKGUpLGc9Zi5kYXRhKCJicy5jb2xsYXBzZSIpLGg9Zz8idG9nZ2xlIjphLmV4dGVuZCh7fSxlLmRhdGEoKSx7dHJpZ2dlcjp0aGlzfSk7Yy5jYWxsKGYsaCl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7YiYmMz09PWIud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1jKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoZS50cmlnZ2VyKGI9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSl9KSl9ZnVuY3Rpb24gYyhiKXt2YXIgYz1iLmF0dHIoImRhdGEtdGFyZ2V0Iik7Y3x8KGM9Yi5hdHRyKCJocmVmIiksYz1jJiYvI1tBLVphLXpdLy50ZXN0KGMpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpO3ZhciBkPWMmJmEoYyk7cmV0dXJuIGQmJmQubGVuZ3RoP2Q6Yi5wYXJlbnQoKX1mdW5jdGlvbiBkKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy5kYXRhKCJicy5kcm9wZG93biIpO2R8fGMuZGF0YSgiYnMuZHJvcGRvd24iLGQ9bmV3IGcodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZFtiXS5jYWxsKGMpfSl9dmFyIGU9Ii5kcm9wZG93bi1iYWNrZHJvcCIsZj0nW2RhdGEtdG9nZ2xlPSJkcm9wZG93biJdJyxnPWZ1bmN0aW9uKGIpe2EoYikub24oImNsaWNrLmJzLmRyb3Bkb3duIix0aGlzLnRvZ2dsZSl9O2cuVkVSU0lPTj0iMy4zLjEiLGcucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXt2YXIgZj1jKGUpLGc9Zi5oYXNDbGFzcygib3BlbiIpO2lmKGIoKSwhZyl7Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFmLmNsb3Nlc3QoIi5uYXZiYXItbmF2IikubGVuZ3RoJiZhKCc8ZGl2IGNsYXNzPSJkcm9wZG93bi1iYWNrZHJvcCIvPicpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYik7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGIpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGIud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChiLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YyhkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWIud2hpY2h8fGcmJjI3PT1iLndoaWNoKXJldHVybiAyNz09Yi53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEiLGk9ZS5maW5kKCdbcm9sZT0ibWVudSJdJytoKycsIFtyb2xlPSJsaXN0Ym94Il0nK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGIudGFyZ2V0KTszOD09Yi53aGljaCYmaj4wJiZqLS0sNDA9PWIud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYikub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsJ1tyb2xlPSJtZW51Il0nLGcucHJvdG90eXBlLmtleWRvd24pLm9uKCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwnW3JvbGU9Imxpc3Rib3giXScsZy5wcm90b3R5cGUua2V5ZG93bil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIsZCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcyksZj1lLmRhdGEoImJzLm1vZGFsIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYik7Znx8ZS5kYXRhKCJicy5tb2RhbCIsZj1uZXcgYyh0aGlzLGcpKSwic3RyaW5nIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRiYWNrZHJvcD10aGlzLmlzU2hvd249bnVsbCx0aGlzLnNjcm9sbGJhcldpZHRoPTAsdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9kYWwtY29udGVudCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSxhLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJsb2FkZWQuYnMubW9kYWwiKX0sdGhpcykpfTtjLlZFUlNJT049IjMuMy4xIixjLlRSQU5TSVRJT05fRFVSQVRJT049MzAwLGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5ERUZBVUxUUz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KGEpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT1hLkV2ZW50KCJzaG93LmJzLm1vZGFsIix7cmVsYXRlZFRhcmdldDpifSk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLHRoaXMuaXNTaG93bnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuaXNTaG93bj0hMCx0aGlzLmNoZWNrU2Nyb2xsYmFyKCksdGhpcy5zZXRTY3JvbGxiYXIoKSx0aGlzLiRib2R5LmFkZENsYXNzKCJtb2RhbC1vcGVuIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oImNsaWNrLmRpc21pc3MuYnMubW9kYWwiLCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJyxhLnByb3h5KHRoaXMuaGlkZSx0aGlzKSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQub3B0aW9ucy5iYWNrZHJvcCYmZC5hZGp1c3RCYWNrZHJvcCgpLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMSksZC5lbmZvcmNlRm9jdXMoKTt2YXIgZj1hLkV2ZW50KCJzaG93bi5icy5tb2RhbCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO2U/ZC4kZWxlbWVudC5maW5kKCIubW9kYWwtZGlhbG9nIikub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmQuJGVsZW1lbnQudHJpZ2dlcigiZm9jdXMiKS50cmlnZ2VyKGYpfSkpfSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGIpe2ImJmIucHJldmVudERlZmF1bHQoKSxiPWEuRXZlbnQoImhpZGUuYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksdGhpcy5pc1Nob3duJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKHRoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksYShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITApLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy4kZWxlbWVudC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eSh0aGlzLmhpZGVNb2RhbCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTp0aGlzLmhpZGVNb2RhbCgpKX0sYy5wcm90b3R5cGUuZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7YShkb2N1bWVudCkub2ZmKCJmb2N1c2luLmJzLm1vZGFsIikub24oImZvY3VzaW4uYnMubW9kYWwiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIil9LHRoaXMpKX0sYy5wcm90b3R5cGUuZXNjYXBlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpezI3PT1hLndoaWNoJiZ0aGlzLmhpZGUoKX0sdGhpcykpOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIpfSxjLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/YSh3aW5kb3cpLm9uKCJyZXNpemUuYnMubW9kYWwiLGEucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsdGhpcykpOmEod2luZG93KS5vZmYoInJlc2l6ZS5icy5tb2RhbCIpfSxjLnByb3RvdHlwZS5oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXthLiRib2R5LnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIiksYS5yZXNldEFkanVzdG1lbnRzKCksYS5yZXNldFNjcm9sbGJhcigpLGEuJGVsZW1lbnQudHJpZ2dlcigiaGlkZGVuLmJzLm1vZGFsIil9KX0sYy5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0sYy5wcm90b3R5cGUuYmFja2Ryb3A9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT8iZmFkZSI6IiI7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBmPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZlO2lmKHRoaXMuJGJhY2tkcm9wPWEoJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wICcrZSsnIiAvPicpLnByZXBlbmRUbyh0aGlzLiRlbGVtZW50KS5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXthLnRhcmdldD09PWEuY3VycmVudFRhcmdldCYmKCJzdGF0aWMiPT10aGlzLm9wdGlvbnMuYmFja2Ryb3A/dGhpcy4kZWxlbWVudFswXS5mb2N1cy5jYWxsKHRoaXMuJGVsZW1lbnRbMF0pOnRoaXMuaGlkZS5jYWxsKHRoaXMpKX0sdGhpcykpLGYmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpLCFiKXJldHVybjtmP3RoaXMuJGJhY2tkcm9wLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixiKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmIoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKTt2YXIgZz1mdW5jdGlvbigpe2QucmVtb3ZlQmFja2Ryb3AoKSxiJiZiKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGcpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6ZygpfWVsc2UgYiYmYigpfSxjLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYmFja2Ryb3AmJnRoaXMuYWRqdXN0QmFja2Ryb3AoKSx0aGlzLmFkanVzdERpYWxvZygpfSxjLnByb3RvdHlwZS5hZGp1c3RCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wLmNzcygiaGVpZ2h0IiwwKS5jc3MoImhlaWdodCIsdGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQpfSxjLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmYT90aGlzLnNjcm9sbGJhcldpZHRoOiIiLHBhZGRpbmdSaWdodDp0aGlzLmJvZHlJc092ZXJmbG93aW5nJiYhYT90aGlzLnNjcm9sbGJhcldpZHRoOiIifSl9LGMucHJvdG90eXBlLnJlc2V0QWRqdXN0bWVudHM9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IiIscGFkZGluZ1JpZ2h0OiIifSl9LGMucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy5ib2R5SXNPdmVyZmxvd2luZz1kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0IixhK3RoaXMuc2Nyb2xsYmFyV2lkdGgpfSxjLnByb3RvdHlwZS5yZXNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3RoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0IiwiIil9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmNsYXNzTmFtZT0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHRoaXMuJGJvZHkuYXBwZW5kKGEpO3ZhciBiPWEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aDtyZXR1cm4gdGhpcy4kYm9keVswXS5yZW1vdmVDaGlsZChhKSxifTt2YXIgZD1hLmZuLm1vZGFsO2EuZm4ubW9kYWw9YixhLmZuLm1vZGFsLkNvbnN0cnVjdG9yPWMsYS5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ubW9kYWw9ZCx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMubW9kYWwuZGF0YS1hcGkiLCdbZGF0YS10b2dnbGU9Im1vZGFsIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcyksZT1kLmF0dHIoImhyZWYiKSxmPWEoZC5hdHRyKCJkYXRhLXRhcmdldCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLGc9Zi5kYXRhKCJicy5tb2RhbCIpPyJ0b2dnbGUiOmEuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGUpJiZlfSxmLmRhdGEoKSxkLmRhdGEoKSk7ZC5pcygiYSIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoInNob3cuYnMubW9kYWwiLGZ1bmN0aW9uKGEpe2EuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYub25lKCJoaWRkZW4uYnMubW9kYWwiLGZ1bmN0aW9uKCl7ZC5pcygiOnZpc2libGUiKSYmZC50cmlnZ2VyKCJmb2N1cyIpfSl9KSxiLmNhbGwoZixnLHRoaXMpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50b29sdGlwIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmIsZz1mJiZmLnNlbGVjdG9yOyhlfHwiZGVzdHJveSIhPWIpJiYoZz8oZXx8ZC5kYXRhKCJicy50b29sdGlwIixlPXt9KSxlW2ddfHwoZVtnXT1uZXcgYyh0aGlzLGYpKSk6ZXx8ZC5kYXRhKCJicy50b29sdGlwIixlPW5ldyBjKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy50eXBlPXRoaXMub3B0aW9ucz10aGlzLmVuYWJsZWQ9dGhpcy50aW1lb3V0PXRoaXMuaG92ZXJTdGF0ZT10aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy4xIixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXt0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKHRoaXMub3B0aW9ucy52aWV3cG9ydC5zZWxlY3Rvcnx8dGhpcy5vcHRpb25zLnZpZXdwb3J0KTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGMmJmMuJHRpcCYmYy4kdGlwLmlzKCI6dmlzaWJsZSIpP3ZvaWQoYy5ob3ZlclN0YXRlPSJpbiIpOihjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9ImluIixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4iPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KCJzaG93LmJzLiIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYik7dmFyIGQ9YS5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFkKXJldHVybjt2YXIgZT10aGlzLGY9dGhpcy50aXAoKSxnPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCksZi5hdHRyKCJpZCIsZyksdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixnKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZmLmFkZENsYXNzKCJmYWRlIik7dmFyIGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZlswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGk9L1xzP2F1dG8/XHM/L2ksaj1pLnRlc3QoaCk7aiYmKGg9aC5yZXBsYWNlKGksIiIpfHwidG9wIiksZi5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5hZGRDbGFzcyhoKS5kYXRhKCJicy4iK3RoaXMudHlwZSx0aGlzKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyP2YuYXBwZW5kVG8odGhpcy5vcHRpb25zLmNvbnRhaW5lcik6Zi5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KTt2YXIgaz10aGlzLmdldFBvc2l0aW9uKCksbD1mWzBdLm9mZnNldFdpZHRoLG09ZlswXS5vZmZzZXRIZWlnaHQ7aWYoail7dmFyIG49aCxvPXRoaXMub3B0aW9ucy5jb250YWluZXI/YSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTp0aGlzLiRlbGVtZW50LnBhcmVudCgpLHA9dGhpcy5nZXRQb3NpdGlvbihvKTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPnAuYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPHAudG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5wLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPHAubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcT10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChxLGgpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscikuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpyKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wPWIudG9wK2csYi5sZWZ0PWIubGVmdCtoLGEub2Zmc2V0LnNldE9mZnNldChkWzBdLGEuZXh0ZW5kKHt1c2luZzpmdW5jdGlvbihhKXtkLmNzcyh7dG9wOk1hdGgucm91bmQoYS50b3ApLGxlZnQ6TWF0aC5yb3VuZChhLmxlZnQpfSl9fSxiKSwwKSxkLmFkZENsYXNzKCJpbiIpO3ZhciBpPWRbMF0ub2Zmc2V0V2lkdGgsaj1kWzBdLm9mZnNldEhlaWdodDsidG9wIj09YyYmaiE9ZiYmKGIudG9wPWIudG9wK2Ytaik7dmFyIGs9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoYyxiLGksaik7ay5sZWZ0P2IubGVmdCs9ay5sZWZ0OmIudG9wKz1rLnRvcDt2YXIgbD0vdG9wfGJvdHRvbS8udGVzdChjKSxtPWw/MiprLmxlZnQtZStpOjIqay50b3AtZitqLG49bD8ib2Zmc2V0V2lkdGgiOiJvZmZzZXRIZWlnaHQiO2Qub2Zmc2V0KGIpLHRoaXMucmVwbGFjZUFycm93KG0sZFswXVtuXSxsKX0sYy5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFycm93KCkuY3NzKGM/ImxlZnQiOiJ0b3AiLDUwKigxLWEvYikrIiUiKS5jc3MoYz8idG9wIjoibGVmdCIsIiIpfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYiksYS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtmdW5jdGlvbiBkKCl7ImluIiE9ZS5ob3ZlclN0YXRlJiZmLmRldGFjaCgpLGUuJGVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpLnRyaWdnZXIoImhpZGRlbi5icy4iK2UudHlwZSksYiYmYigpfXZhciBlPXRoaXMsZj10aGlzLnRpcCgpLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZCkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkKCksdGhpcy5ob3ZlclN0YXRlPW51bGwsdGhpcyl9LGMucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudDsoYS5hdHRyKCJ0aXRsZSIpfHwic3RyaW5nIiE9dHlwZW9mIGEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSYmYS5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIixhLmF0dHIoInRpdGxlIil8fCIiKS5hdHRyKCJ0aXRsZSIsIiIpfSxjLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oYil7Yj1ifHx0aGlzLiRlbGVtZW50O3ZhciBjPWJbMF0sZD0iQk9EWSI9PWMudGFnTmFtZSxlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09ZS53aWR0aCYmKGU9YS5leHRlbmQoe30sZSx7d2lkdGg6ZS5yaWdodC1lLmxlZnQsaGVpZ2h0OmUuYm90dG9tLWUudG9wfSkpO3ZhciBmPWQ/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKSxnPXtzY3JvbGw6ZD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDpiLnNjcm9sbFRvcCgpfSxoPWQ/e3dpZHRoOmEod2luZG93KS53aWR0aCgpLGhlaWdodDphKHdpbmRvdykuaGVpZ2h0KCl9Om51bGw7cmV0dXJuIGEuZXh0ZW5kKHt9LGUsZyxoLGYpfSxjLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiJib3R0b20iPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQsbGVmdDpiLmxlZnQrYi53aWR0aC8yLWMvMn06InRvcCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJsZWZ0Ij09YT97dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0LWN9Ont0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQrYi53aWR0aH19LGMucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIGU7dmFyIGY9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxnPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2lmKC9yaWdodHxsZWZ0Ly50ZXN0KGEpKXt2YXIgaD1iLnRvcC1mLWcuc2Nyb2xsLGk9Yi50b3ArZi1nLnNjcm9sbCtkO2g8Zy50b3A/ZS50b3A9Zy50b3AtaDppPmcudG9wK2cuaGVpZ2h0JiYoZS50b3A9Zy50b3ArZy5oZWlnaHQtaSl9ZWxzZXt2YXIgaj1iLmxlZnQtZixrPWIubGVmdCtmK2M7ajxnLmxlZnQ/ZS5sZWZ0PWcubGVmdC1qOms+Zy53aWR0aCYmKGUubGVmdD1nLmxlZnQrZy53aWR0aC1rKX1yZXR1cm4gZX0sYy5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJGVsZW1lbnQsYz10aGlzLm9wdGlvbnM7cmV0dXJuIGE9Yi5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGlwPXRoaXMuJHRpcHx8YSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKCIudG9vbHRpcC1hcnJvdyIpfSxjLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGMucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YiYmKGM9YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSksYy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKX0pfTt2YXIgZD1hLmZuLnRvb2x0aXA7YS5mbi50b29sdGlwPWIsYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWMsYS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50b29sdGlwPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5wb3BvdmVyIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmIsZz1mJiZmLnNlbGVjdG9yOyhlfHwiZGVzdHJveSIhPWIpJiYoZz8oZXx8ZC5kYXRhKCJicy5wb3BvdmVyIixlPXt9KSxlW2ddfHwoZVtnXT1uZXcgYyh0aGlzLGYpKSk6ZXx8ZC5kYXRhKCJicy5wb3BvdmVyIixlPW5ldyBjKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KCJwb3BvdmVyIixhLGIpfTtpZighYS5mbi50b29sdGlwKXRocm93IG5ldyBFcnJvcigiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzIik7Yy5WRVJTSU9OPSIzLjMuMSIsYy5ERUZBVUxUUz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6ImNsaWNrIixjb250ZW50OiIiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJwb3BvdmVyIiByb2xlPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIj48L2gzPjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PC9kaXY+PC9kaXY+J30pLGMucHJvdG90eXBlPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpLGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMsYy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5ERUZBVUxUU30sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCksYz10aGlzLmdldENvbnRlbnQoKTthLmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYiksYS5maW5kKCIucG9wb3Zlci1jb250ZW50IikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD8ic3RyaW5nIj09dHlwZW9mIGM/Imh0bWwiOiJhcHBlbmQiOiJ0ZXh0Il0oYyksYS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKSxhLmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaHRtbCgpfHxhLmZpbmQoIi5wb3BvdmVyLXRpdGxlIikuaGlkZSgpfSxjLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5nZXRDb250ZW50KCl9LGMucHJvdG90eXBlLmdldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50LGI9dGhpcy5vcHRpb25zO3JldHVybiBhLmF0dHIoImRhdGEtY29udGVudCIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGIuY29udGVudD9iLmNvbnRlbnQuY2FsbChhWzBdKTpiLmNvbnRlbnQpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKCIuYXJyb3ciKX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH07dmFyIGQ9YS5mbi5wb3BvdmVyO2EuZm4ucG9wb3Zlcj1iLGEuZm4ucG9wb3Zlci5Db25zdHJ1Y3Rvcj1jLGEuZm4ucG9wb3Zlci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ucG9wb3Zlcj1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihjLGQpe3ZhciBlPWEucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpO3RoaXMuJGJvZHk9YSgiYm9keSIpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKCJib2R5Iik/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5zY3JvbGxIZWlnaHQ9MCx0aGlzLiRzY3JvbGxFbGVtZW50Lm9uKCJzY3JvbGwuYnMuc2Nyb2xsc3B5IixlKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBjKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy5zY3JvbGxzcHkiKSxmPSJvYmplY3QiPT10eXBlb2YgYyYmYztlfHxkLmRhdGEoImJzLnNjcm9sbHNweSIsZT1uZXcgYih0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGMmJmVbY10oKX0pfWIuVkVSU0lPTj0iMy4zLjEiLGIuREVGQVVMVFM9e29mZnNldDoxMH0sYi5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHxNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KX0sYi5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciBiPSJvZmZzZXQiLGM9MDthLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYj0icG9zaXRpb24iLGM9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSksdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLnNjcm9sbEhlaWdodD10aGlzLmdldFNjcm9sbEhlaWdodCgpO3ZhciBkPXRoaXM7dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoInRhcmdldCIpfHxkLmF0dHIoImhyZWYiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKCI6dmlzaWJsZSIpJiZbW2ZbYl0oKS50b3ArYyxlXV18fG51bGx9KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0tYlswXX0pLmVhY2goZnVuY3Rpb24oKXtkLm9mZnNldHMucHVzaCh0aGlzWzBdKSxkLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfSxiLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMub3B0aW9ucy5vZmZzZXQsYz10aGlzLmdldFNjcm9sbEhlaWdodCgpLGQ9dGhpcy5vcHRpb25zLm9mZnNldCtjLXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCksZT10aGlzLm9mZnNldHMsZj10aGlzLnRhcmdldHMsZz10aGlzLmFjdGl2ZVRhcmdldDtpZih0aGlzLnNjcm9sbEhlaWdodCE9YyYmdGhpcy5yZWZyZXNoKCksYj49ZClyZXR1cm4gZyE9KGE9ZltmLmxlbmd0aC0xXSkmJnRoaXMuYWN0aXZhdGUoYSk7aWYoZyYmYjxlWzBdKXJldHVybiB0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuY2xlYXIoKTtmb3IoYT1lLmxlbmd0aDthLS07KWchPWZbYV0mJmI+PWVbYV0mJighZVthKzFdfHxiPD1lW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXt0aGlzLmFjdGl2ZVRhcmdldD1iLHRoaXMuY2xlYXIoKTt2YXIgYz10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXQ9IicrYisnIl0sJyt0aGlzLnNlbGVjdG9yKydbaHJlZj0iJytiKyciXScsZD1hKGMpLnBhcmVudHMoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpO2QucGFyZW50KCIuZHJvcGRvd24tbWVudSIpLmxlbmd0aCYmKGQ9ZC5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSksZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuMSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pCn0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJ0YWIiXScpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSxiLmFkZENsYXNzKCJhY3RpdmUiKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLGg/KGJbMF0ub2Zmc2V0V2lkdGgsYi5hZGRDbGFzcygiaW4iKSk6Yi5yZW1vdmVDbGFzcygiZmFkZSIpLGIucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPXRoaXMudW5waW49dGhpcy5waW5uZWRPZmZzZXQ9bnVsbCx0aGlzLmNoZWNrUG9zaXRpb24oKX07Yy5WRVJTSU9OPSIzLjMuMSIsYy5SRVNFVD0iYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSIsYy5ERUZBVUxUUz17b2Zmc2V0OjAsdGFyZ2V0OndpbmRvd30sYy5wcm90b3R5cGUuZ2V0U3RhdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGY9dGhpcy4kZWxlbWVudC5vZmZzZXQoKSxnPXRoaXMuJHRhcmdldC5oZWlnaHQoKTtpZihudWxsIT1jJiYidG9wIj09dGhpcy5hZmZpeGVkKXJldHVybiBjPmU/InRvcCI6ITE7aWYoImJvdHRvbSI9PXRoaXMuYWZmaXhlZClyZXR1cm4gbnVsbCE9Yz9lK3RoaXMudW5waW48PWYudG9wPyExOiJib3R0b20iOmEtZD49ZStnPyExOiJib3R0b20iO3ZhciBoPW51bGw9PXRoaXMuYWZmaXhlZCxpPWg/ZTpmLnRvcCxqPWg/ZzpiO3JldHVybiBudWxsIT1jJiZjPj1pPyJ0b3AiOm51bGwhPWQmJmkraj49YS1kPyJib3R0b20iOiExfSxjLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcygiYWZmaXgiKTt2YXIgYT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksYj10aGlzLiRlbGVtZW50Lm9mZnNldCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD1iLnRvcC1hfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXt2YXIgYj10aGlzLiRlbGVtZW50LmhlaWdodCgpLGQ9dGhpcy5vcHRpb25zLm9mZnNldCxlPWQudG9wLGY9ZC5ib3R0b20sZz1hKCJib2R5IikuaGVpZ2h0KCk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script>
<script src="data:application/x-javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script>
<script src="data:application/x-javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Ow=="></script>
<style type="text/css">
/*!
* Bootstrap v3.3.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
</style>
<style type="text/css">code{white-space: pre;}</style>
<link href="data:text/css;charset=utf-8,pre%20%2Eoperator%2C%0Apre%20%2Eparen%20%7B%0Acolor%3A%20rgb%28104%2C%20118%2C%20135%29%0A%7D%0Apre%20%2Eliteral%20%7B%0Acolor%3A%20%23990073%0A%7D%0Apre%20%2Enumber%20%7B%0Acolor%3A%20%23099%3B%0A%7D%0Apre%20%2Ecomment%20%7B%0Acolor%3A%20%23998%3B%0Afont%2Dstyle%3A%20italic%0A%7D%0Apre%20%2Ekeyword%20%7B%0Acolor%3A%20%23900%3B%0Afont%2Dweight%3A%20bold%0A%7D%0Apre%20%2Eidentifier%20%7B%0Acolor%3A%20rgb%280%2C%200%2C%200%29%3B%0A%7D%0Apre%20%2Estring%20%7B%0Acolor%3A%20%23d14%3B%0A%7D%0A" rel="stylesheet" type="text/css" />
<script src="data:application/x-javascript;base64,CnZhciBobGpzPW5ldyBmdW5jdGlvbigpe2Z1bmN0aW9uIG0ocCl7cmV0dXJuIHAucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC88L2dtLCImbHQ7Iil9ZnVuY3Rpb24gZihyLHEscCl7cmV0dXJuIFJlZ0V4cChxLCJtIisoci5jST8iaSI6IiIpKyhwPyJnIjoiIikpfWZ1bmN0aW9uIGIocil7Zm9yKHZhciBwPTA7cDxyLmNoaWxkTm9kZXMubGVuZ3RoO3ArKyl7dmFyIHE9ci5jaGlsZE5vZGVzW3BdO2lmKHEubm9kZU5hbWU9PSJDT0RFIil7cmV0dXJuIHF9aWYoIShxLm5vZGVUeXBlPT0zJiZxLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgodCxzKXt2YXIgcD0iIjtmb3IodmFyIHI9MDtyPHQuY2hpbGROb2Rlcy5sZW5ndGg7cisrKXtpZih0LmNoaWxkTm9kZXNbcl0ubm9kZVR5cGU9PTMpe3ZhciBxPXQuY2hpbGROb2Rlc1tyXS5ub2RlVmFsdWU7aWYocyl7cT1xLnJlcGxhY2UoL1xuL2csIiIpfXArPXF9ZWxzZXtpZih0LmNoaWxkTm9kZXNbcl0ubm9kZU5hbWU9PSJCUiIpe3ArPSJcbiJ9ZWxzZXtwKz1oKHQuY2hpbGROb2Rlc1tyXSl9fX1pZigvTVNJRSBbNjc4XS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7cD1wLnJlcGxhY2UoL1xyL2csIlxuIil9cmV0dXJuIHB9ZnVuY3Rpb24gYShzKXt2YXIgcj1zLmNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7cj1yLmNvbmNhdChzLnBhcmVudE5vZGUuY2xhc3NOYW1lLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBxPTA7cTxyLmxlbmd0aDtxKyspe3ZhciBwPXJbcV0ucmVwbGFjZSgvXmxhbmd1YWdlLS8sIiIpO2lmKGVbcF0pe3JldHVybiBwfX19ZnVuY3Rpb24gYyhxKXt2YXIgcD1bXTsoZnVuY3Rpb24ocyx0KXtmb3IodmFyIHI9MDtyPHMuY2hpbGROb2Rlcy5sZW5ndGg7cisrKXtpZihzLmNoaWxkTm9kZXNbcl0ubm9kZVR5cGU9PTMpe3QrPXMuY2hpbGROb2Rlc1tyXS5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYocy5jaGlsZE5vZGVzW3JdLm5vZGVOYW1lPT0iQlIiKXt0Kz0xfWVsc2V7aWYocy5jaGlsZE5vZGVzW3JdLm5vZGVUeXBlPT0xKXtwLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnQsbm9kZTpzLmNoaWxkTm9kZXNbcl19KTt0PWFyZ3VtZW50cy5jYWxsZWUocy5jaGlsZE5vZGVzW3JdLHQpO3AucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDp0LG5vZGU6cy5jaGlsZE5vZGVzW3JdfSl9fX19cmV0dXJuIHR9KShxLDApO3JldHVybiBwfWZ1bmN0aW9uIGsoeSx3LHgpe3ZhciBxPTA7dmFyIHo9IiI7dmFyIHM9W107ZnVuY3Rpb24gdSgpe2lmKHkubGVuZ3RoJiZ3Lmxlbmd0aCl7aWYoeVswXS5vZmZzZXQhPXdbMF0ub2Zmc2V0KXtyZXR1cm4oeVswXS5vZmZzZXQ8d1swXS5vZmZzZXQpP3k6d31lbHNle3JldHVybiB3WzBdLmV2ZW50PT0ic3RhcnQiP3k6d319ZWxzZXtyZXR1cm4geS5sZW5ndGg/eTp3fX1mdW5jdGlvbiB0KEQpe3ZhciBBPSI8IitELm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Zm9yKHZhciBCPTA7QjxELmF0dHJpYnV0ZXMubGVuZ3RoO0IrKyl7dmFyIEM9RC5hdHRyaWJ1dGVzW0JdO0ErPSIgIitDLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoQy52YWx1ZSE9PXVuZGVmaW5lZCYmQy52YWx1ZSE9PWZhbHNlJiZDLnZhbHVlIT09bnVsbCl7QSs9Jz0iJyttKEMudmFsdWUpKyciJ319cmV0dXJuIEErIj4ifXdoaWxlKHkubGVuZ3RofHx3Lmxlbmd0aCl7dmFyIHY9dSgpLnNwbGljZSgwLDEpWzBdO3orPW0oeC5zdWJzdHIocSx2Lm9mZnNldC1xKSk7cT12Lm9mZnNldDtpZih2LmV2ZW50PT0ic3RhcnQiKXt6Kz10KHYubm9kZSk7cy5wdXNoKHYubm9kZSl9ZWxzZXtpZih2LmV2ZW50PT0ic3RvcCIpe3ZhciBwLHI9cy5sZW5ndGg7ZG97ci0tO3A9c1tyXTt6Kz0oIjwvIitwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4iKX13aGlsZShwIT12Lm5vZGUpO3Muc3BsaWNlKHIsMSk7d2hpbGUocjxzLmxlbmd0aCl7eis9dChzW3JdKTtyKyt9fX19cmV0dXJuIHorbSh4LnN1YnN0cihxKSl9ZnVuY3Rpb24gaigpe2Z1bmN0aW9uIHEoeCx5LHYpe2lmKHguY29tcGlsZWQpe3JldHVybn12YXIgdTt2YXIgcz1bXTtpZih4Lmspe3gubFI9Zih5LHgubHx8aGxqcy5JUix0cnVlKTtmb3IodmFyIHcgaW4geC5rKXtpZigheC5rLmhhc093blByb3BlcnR5KHcpKXtjb250aW51ZX1pZih4Lmtbd10gaW5zdGFuY2VvZiBPYmplY3Qpe3U9eC5rW3ddfWVsc2V7dT14Lms7dz0ia2V5d29yZCJ9Zm9yKHZhciByIGluIHUpe2lmKCF1Lmhhc093blByb3BlcnR5KHIpKXtjb250aW51ZX14Lmtbcl09W3csdVtyXV07cy5wdXNoKHIpfX19aWYoIXYpe2lmKHguYldLKXt4LmI9IlxcYigiK3Muam9pbigifCIpKyIpXFxzIn14LmJSPWYoeSx4LmI/eC5iOiJcXEJ8XFxiIik7aWYoIXguZSYmIXguZVcpe3guZT0iXFxCfFxcYiJ9aWYoeC5lKXt4LmVSPWYoeSx4LmUpfX1pZih4Lmkpe3guaVI9Zih5LHguaSl9aWYoeC5yPT09dW5kZWZpbmVkKXt4LnI9MX1pZigheC5jKXt4LmM9W119eC5jb21waWxlZD10cnVlO2Zvcih2YXIgdD0wO3Q8eC5jLmxlbmd0aDt0Kyspe2lmKHguY1t0XT09InNlbGYiKXt4LmNbdF09eH1xKHguY1t0XSx5LGZhbHNlKX1pZih4LnN0YXJ0cyl7cSh4LnN0YXJ0cyx5LGZhbHNlKX19Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX1xKGVbcF0uZE0sZVtwXSx0cnVlKX19ZnVuY3Rpb24gZChCLEMpe2lmKCFqLmNhbGxlZCl7aigpO2ouY2FsbGVkPXRydWV9ZnVuY3Rpb24gcShyLE0pe2Zvcih2YXIgTD0wO0w8TS5jLmxlbmd0aDtMKyspe2lmKChNLmNbTF0uYlIuZXhlYyhyKXx8W251bGxdKVswXT09cil7cmV0dXJuIE0uY1tMXX19fWZ1bmN0aW9uIHYoTCxyKXtpZihEW0xdLmUmJkRbTF0uZVIudGVzdChyKSl7cmV0dXJuIDF9aWYoRFtMXS5lVyl7dmFyIE09dihMLTEscik7cmV0dXJuIE0/TSsxOjB9cmV0dXJuIDB9ZnVuY3Rpb24gdyhyLEwpe3JldHVybiBMLmkmJkwuaVIudGVzdChyKX1mdW5jdGlvbiBLKE4sTyl7dmFyIE09W107Zm9yKHZhciBMPTA7TDxOLmMubGVuZ3RoO0wrKyl7TS5wdXNoKE4uY1tMXS5iKX12YXIgcj1ELmxlbmd0aC0xO2Rve2lmKERbcl0uZSl7TS5wdXNoKERbcl0uZSl9ci0tfXdoaWxlKERbcisxXS5lVyk7aWYoTi5pKXtNLnB1c2goTi5pKX1yZXR1cm4gZihPLE0uam9pbigifCIpLHRydWUpfWZ1bmN0aW9uIHAoTSxMKXt2YXIgTj1EW0QubGVuZ3RoLTFdO2lmKCFOLnQpe04udD1LKE4sRSl9Ti50Lmxhc3RJbmRleD1MO3ZhciByPU4udC5leGVjKE0pO3JldHVybiByP1tNLnN1YnN0cihMLHIuaW5kZXgtTCksclswXSxmYWxzZV06W00uc3Vic3RyKEwpLCIiLHRydWVdfWZ1bmN0aW9uIHooTixyKXt2YXIgTD1FLmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3ZhciBNPU4ua1tMXTtpZihNJiZNIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiBNfXJldHVybiBmYWxzZX1mdW5jdGlvbiBGKEwsUCl7TD1tKEwpO2lmKCFQLmspe3JldHVybiBMfXZhciByPSIiO3ZhciBPPTA7UC5sUi5sYXN0SW5kZXg9MDt2YXIgTT1QLmxSLmV4ZWMoTCk7d2hpbGUoTSl7cis9TC5zdWJzdHIoTyxNLmluZGV4LU8pO3ZhciBOPXooUCxNKTtpZihOKXt4Kz1OWzFdO3IrPSc8c3BhbiBjbGFzcz0iJytOWzBdKyciPicrTVswXSsiPC9zcGFuPiJ9ZWxzZXtyKz1NWzBdfU89UC5sUi5sYXN0SW5kZXg7TT1QLmxSLmV4ZWMoTCl9cmV0dXJuIHIrTC5zdWJzdHIoTyxMLmxlbmd0aC1PKX1mdW5jdGlvbiBKKEwsTSl7aWYoTS5zTCYmZVtNLnNMXSl7dmFyIHI9ZChNLnNMLEwpO3grPXIua2V5d29yZF9jb3VudDtyZXR1cm4gci52YWx1ZX1lbHNle3JldHVybiBGKEwsTSl9fWZ1bmN0aW9uIEkoTSxyKXt2YXIgTD1NLmNOPyc8c3BhbiBjbGFzcz0iJytNLmNOKyciPic6IiI7aWYoTS5yQil7eSs9TDtNLmJ1ZmZlcj0iIn1lbHNle2lmKE0uZUIpe3krPW0ocikrTDtNLmJ1ZmZlcj0iIn1lbHNle3krPUw7TS5idWZmZXI9cn19RC5wdXNoKE0pO0ErPU0ucn1mdW5jdGlvbiBHKE4sTSxRKXt2YXIgUj1EW0QubGVuZ3RoLTFdO2lmKFEpe3krPUooUi5idWZmZXIrTixSKTtyZXR1cm4gZmFsc2V9dmFyIFA9cShNLFIpO2lmKFApe3krPUooUi5idWZmZXIrTixSKTtJKFAsTSk7cmV0dXJuIFAuckJ9dmFyIEw9dihELmxlbmd0aC0xLE0pO2lmKEwpe3ZhciBPPVIuY04/Ijwvc3Bhbj4iOiIiO2lmKFIuckUpe3krPUooUi5idWZmZXIrTixSKStPfWVsc2V7aWYoUi5lRSl7eSs9SihSLmJ1ZmZlcitOLFIpK08rbShNKX1lbHNle3krPUooUi5idWZmZXIrTitNLFIpK099fXdoaWxlKEw+MSl7Tz1EW0QubGVuZ3RoLTJdLmNOPyI8L3NwYW4+IjoiIjt5Kz1PO0wtLTtELmxlbmd0aC0tfXZhciByPURbRC5sZW5ndGgtMV07RC5sZW5ndGgtLTtEW0QubGVuZ3RoLTFdLmJ1ZmZlcj0iIjtpZihyLnN0YXJ0cyl7SShyLnN0YXJ0cywiIil9cmV0dXJuIFIuckV9aWYodyhNLFIpKXt0aHJvdyJJbGxlZ2FsIn19dmFyIEU9ZVtCXTt2YXIgRD1bRS5kTV07dmFyIEE9MDt2YXIgeD0wO3ZhciB5PSIiO3RyeXt2YXIgcyx1PTA7RS5kTS5idWZmZXI9IiI7ZG97cz1wKEMsdSk7dmFyIHQ9RyhzWzBdLHNbMV0sc1syXSk7dSs9c1swXS5sZW5ndGg7aWYoIXQpe3UrPXNbMV0ubGVuZ3RofX13aGlsZSghc1syXSk7aWYoRC5sZW5ndGg+MSl7dGhyb3ciSWxsZWdhbCJ9cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OngsdmFsdWU6eX19Y2F0Y2goSCl7aWYoSD09IklsbGVnYWwiKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTptKEMpfX1lbHNle3Rocm93IEh9fX1mdW5jdGlvbiBnKHQpe3ZhciBwPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOm0odCl9O3ZhciByPXA7Zm9yKHZhciBxIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHEpKXtjb250aW51ZX12YXIgcz1kKHEsdCk7cy5sYW5ndWFnZT1xO2lmKHMua2V5d29yZF9jb3VudCtzLnI+ci5rZXl3b3JkX2NvdW50K3Iucil7cj1zfWlmKHMua2V5d29yZF9jb3VudCtzLnI+cC5rZXl3b3JkX2NvdW50K3Aucil7cj1wO3A9c319aWYoci5sYW5ndWFnZSl7cC5zZWNvbmRfYmVzdD1yfXJldHVybiBwfWZ1bmN0aW9uIGkocixxLHApe2lmKHEpe3I9ci5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHQsdyx2LHUpe3JldHVybiB3LnJlcGxhY2UoL1x0L2cscSl9KX1pZihwKXtyPXIucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiByfWZ1bmN0aW9uIG4odCx3LHIpe3ZhciB4PWgodCxyKTt2YXIgdj1hKHQpO3ZhciB5LHM7aWYodil7eT1kKHYseCl9ZWxzZXtyZXR1cm59dmFyIHE9Yyh0KTtpZihxLmxlbmd0aCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTtzLmlubmVySFRNTD15LnZhbHVlO3kudmFsdWU9ayhxLGMocykseCl9eS52YWx1ZT1pKHkudmFsdWUsdyxyKTt2YXIgdT10LmNsYXNzTmFtZTtpZighdS5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdisiKFxcc3wkKSIpKXt1PXU/KHUrIiAiK3YpOnZ9aWYoL01TSUUgWzY3OF0vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnQudGFnTmFtZT09IkNPREUiJiZ0LnBhcmVudE5vZGUudGFnTmFtZT09IlBSRSIpe3M9dC5wYXJlbnROb2RlO3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuaW5uZXJIVE1MPSI8cHJlPjxjb2RlPiIreS52YWx1ZSsiPC9jb2RlPjwvcHJlPiI7dD1wLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDtwLmZpcnN0Q2hpbGQuY049cy5jTjtzLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHAuZmlyc3RDaGlsZCxzKX1lbHNle3QuaW5uZXJIVE1MPXkudmFsdWV9dC5jbGFzc05hbWU9dTt0LnJlc3VsdD17bGFuZ3VhZ2U6dixrdzp5LmtleXdvcmRfY291bnQscmU6eS5yfTtpZih5LnNlY29uZF9iZXN0KXt0LnNlY29uZF9iZXN0PXtsYW5ndWFnZTp5LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Onkuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp5LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBvKCl7aWYoby5jYWxsZWQpe3JldHVybn1vLmNhbGxlZD10cnVlO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKTtmb3IodmFyIHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIHE9YihyW3BdKTtpZihxKXtuKHEsaGxqcy50YWJSZXBsYWNlKX19fWZ1bmN0aW9uIGwoKXtpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG8sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixvLGZhbHNlKX1lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2luZG93LmF0dGFjaEV2ZW50KCJvbmxvYWQiLG8pfWVsc2V7d2luZG93Lm9ubG9hZD1vfX19dmFyIGU9e307dGhpcy5MQU5HVUFHRVM9ZTt0aGlzLmhpZ2hsaWdodD1kO3RoaXMuaGlnaGxpZ2h0QXV0bz1nO3RoaXMuZml4TWFya3VwPWk7dGhpcy5oaWdobGlnaHRCbG9jaz1uO3RoaXMuaW5pdEhpZ2hsaWdodGluZz1vO3RoaXMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZD1sO3RoaXMuSVI9IlthLXpBLVpdW2EtekEtWjAtOV9dKiI7dGhpcy5VSVI9IlthLXpBLVpfXVthLXpBLVowLTlfXSoiO3RoaXMuTlI9IlxcYlxcZCsoXFwuXFxkKyk/Ijt0aGlzLkNOUj0iXFxiKDBbeFhdW2EtZkEtRjAtOV0rfChcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIjt0aGlzLkJOUj0iXFxiKDBiWzAxXSspIjt0aGlzLlJTUj0iIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wvPXw6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlzLkVSPSIoPyFbXFxzXFxTXSkiO3RoaXMuQkU9e2I6IlxcXFwuIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocixzKXt2YXIgcD17fTtmb3IodmFyIHEgaW4gcil7cFtxXT1yW3FdfWlmKHMpe2Zvcih2YXIgcSBpbiBzKXtwW3FdPXNbcV19fXJldHVybiBwfX0oKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oKXt2YXIgYT17a2V5d29yZDp7ImZhbHNlIjoxLCJpbnQiOjEsImZsb2F0IjoxLCJ3aGlsZSI6MSwicHJpdmF0ZSI6MSwiY2hhciI6MSwiY2F0Y2giOjEsImV4cG9ydCI6MSx2aXJ0dWFsOjEsb3BlcmF0b3I6MixzaXplb2Y6MixkeW5hbWljX2Nhc3Q6Mix0eXBlZGVmOjIsY29uc3RfY2FzdDoyLCJjb25zdCI6MSxzdHJ1Y3Q6MSwiZm9yIjoxLHN0YXRpY19jYXN0OjIsdW5pb246MSxuYW1lc3BhY2U6MSx1bnNpZ25lZDoxLCJsb25nIjoxLCJ0aHJvdyI6MSwidm9sYXRpbGUiOjIsInN0YXRpYyI6MSwicHJvdGVjdGVkIjoxLGJvb2w6MSx0ZW1wbGF0ZToxLG11dGFibGU6MSwiaWYiOjEsInB1YmxpYyI6MSxmcmllbmQ6MiwiZG8iOjEsInJldHVybiI6MSwiZ290byI6MSxhdXRvOjEsInZvaWQiOjIsImVudW0iOjEsImVsc2UiOjEsImJyZWFrIjoxLCJuZXciOjEsZXh0ZXJuOjEsdXNpbmc6MSwidHJ1ZSI6MSwiY2xhc3MiOjEsYXNtOjEsImNhc2UiOjEsdHlwZWlkOjEsInNob3J0IjoxLHJlaW50ZXJwcmV0X2Nhc3Q6MiwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHJlZ2lzdGVyOjEsZXhwbGljaXQ6MSxzaWduZWQ6MSx0eXBlbmFtZToxLCJ0cnkiOjEsInRoaXMiOjEsInN3aXRjaCI6MSwiY29udGludWUiOjEsd2NoYXJfdDoxLGlubGluZToxLCJkZWxldGUiOjEsYWxpZ25vZjoxLGNoYXIxNl90OjEsY2hhcjMyX3Q6MSxjb25zdGV4cHI6MSxkZWNsdHlwZToxLG5vZXhjZXB0OjEsbnVsbHB0cjoxLHN0YXRpY19hc3NlcnQ6MSx0aHJlYWRfbG9jYWw6MSxyZXN0cmljdDoxLF9Cb29sOjEsY29tcGxleDoxfSxidWlsdF9pbjp7c3RkOjEsc3RyaW5nOjEsY2luOjEsY291dDoxLGNlcnI6MSxjbG9nOjEsc3RyaW5nc3RyZWFtOjEsaXN0cmluZ3N0cmVhbToxLG9zdHJpbmdzdHJlYW06MSxhdXRvX3B0cjoxLGRlcXVlOjEsbGlzdDoxLHF1ZXVlOjEsc3RhY2s6MSx2ZWN0b3I6MSxtYXA6MSxzZXQ6MSxiaXRzZXQ6MSxtdWx0aXNldDoxLG11bHRpbWFwOjEsdW5vcmRlcmVkX3NldDoxLHVub3JkZXJlZF9tYXA6MSx1bm9yZGVyZWRfbXVsdGlzZXQ6MSx1bm9yZGVyZWRfbXVsdGltYXA6MSxhcnJheToxLHNoYXJlZF9wdHI6MX19O3JldHVybntkTTp7azphLGk6IjwvIixjOltobGpzLkNMQ00saGxqcy5DQkxDTE0saGxqcy5RU00se2NOOiJzdHJpbmciLGI6IidcXFxcPy4iLGU6IiciLGk6Ii4ifSx7Y046Im51bWJlciIsYjoiXFxiKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKSJ9LGhsanMuQ05NLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJzdGxfY29udGFpbmVyIixiOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLGU6Ij4iLGs6YSxyOjEwLGM6WyJzZWxmIl19XX19fSgpO2hsanMuTEFOR1VBR0VTLnI9e2RNOntjOltobGpzLkhDTSx7Y046Im51bWJlciIsYjoiXFxiMFt4WF1bMC05YS1mQS1GXStbTGldP1xcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjB9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9MXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcYlxcZCtcXC4oPyFcXGQpKD86aVxcYik/IixlOmhsanMuSU1NRURJQVRFX1JFLHI6MX0se2NOOiJudW1iZXIiLGI6IlxcYlxcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH0se2NOOiJudW1iZXIiLGI6IlxcLlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MX0se2NOOiJrZXl3b3JkIixiOiIoPzp0cnlDYXRjaHxsaWJyYXJ5fHNldEdlbmVyaWN8c2V0R3JvdXBHZW5lcmljKVxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjEwfSx7Y046ImtleXdvcmQiLGI6IlxcLlxcLlxcLiIsZTpobGpzLklNTUVESUFURV9SRSxyOjEwfSx7Y046ImtleXdvcmQiLGI6IlxcLlxcLlxcZCsoPyFbXFx3Ll0pIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MTB9LHtjTjoia2V5d29yZCIsYjoiXFxiKD86ZnVuY3Rpb24pIixlOmhsanMuSU1NRURJQVRFX1JFLHI6Mn0se2NOOiJrZXl3b3JkIixiOiIoPzppZnxpbnxicmVha3xuZXh0fHJlcGVhdHxlbHNlfGZvcnxyZXR1cm58c3dpdGNofHdoaWxlfHRyeXxzdG9wfHdhcm5pbmd8cmVxdWlyZXxhdHRhY2h8ZGV0YWNofHNvdXJjZXxzZXRNZXRob2R8c2V0Q2xhc3MpXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MX0se2NOOiJsaXRlcmFsIixiOiIoPzpOQXxOQV9pbnRlZ2VyX3xOQV9yZWFsX3xOQV9jaGFyYWN0ZXJffE5BX2NvbXBsZXhfKVxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjEwfSx7Y046ImxpdGVyYWwiLGI6Iig/Ok5VTEx8VFJVRXxGQUxTRXxUfEZ8SW5mfE5hTilcXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxfSx7Y046ImlkZW50aWZpZXIiLGI6IlthLXpBLVouXVthLXpBLVowLTkuX10qXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH0se2NOOiJvcGVyYXRvciIsYjoiPFxcLSg/IVxccypcXGQpIixlOmhsanMuSU1NRURJQVRFX1JFLHI6Mn0se2NOOiJvcGVyYXRvciIsYjoiXFwtPnw8XFwtIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MX0se2NOOiJvcGVyYXRvciIsYjoiJSV8fiIsZTpobGpzLklNTUVESUFURV9SRX0se2NOOiJvcGVyYXRvciIsYjoiPj18PD18PT18IT18XFx8XFx8fCYmfD18XFwrfFxcLXxcXCp8L3xcXF58Pnw8fCF8JnxcXHx8XFwkfDoiLGU6aGxqcy5JTU1FRElBVEVfUkUscjowfSx7Y046Im9wZXJhdG9yIixiOiIlIixlOiIlIixpOiJcXG4iLHI6MX0se2NOOiJpZGVudGlmaWVyIixiOiJgIixlOiJgIixyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltobGpzLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltobGpzLkJFXSxyOjB9LHtjTjoicGFyZW4iLGI6IltbKHtcXF0pfV0iLGU6aGxqcy5JTU1FRElBVEVfUkUscjowfV19fTsKaGxqcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCk7Cgo="></script>
<style type="text/css">
pre:not([class]) {
background-color: white;
}
</style>
<script type="text/javascript">
if (window.hljs && document.readyState && document.readyState === "complete") {
window.setTimeout(function() {
hljs.initHighlighting();
}, 0);
}
</script>
</head>
<body>
<style type="text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
code {
color: inherit;
background-color: rgba(0, 0, 0, 0.04);
}
img {
max-width:100%;
height: auto;
}
</style>
<div class="container-fluid main-container">
<div id="header">
<h1 class="title">Apprentissage Statistique - Compte rendu du TP4</h1>
<h4 class="author"><em>Alexandre Combessie, Saad Machraoui</em></h4>
</div>
<div id="introduction" class="section level1">
<h1>Introduction</h1>
<div id="sujet-et-donnees-choisies" class="section level2">
<h2>Sujet et données choisies</h2>
<p>Pour ce dernier TP du cours d’Apprentissage Statistique, nous avons décidé de relever un défi sur le site <em>Kaggle</em>, une plateforme d’organisation web organisant des challenges de Data Science. Plus précisément, nous avons participé à une compétition pour <em>Airbnb</em>, dont le but est de prédire dans quel pays se fera la première réservation d’un nouvel utilisateur.</p>
<p>Pour cela, Airbnb fournit une base de donnée d’entraînement sur un échantillon de 213 451 utilisateurs américains de Airbnb, dont des données démographiques, le web-tracking du processus de création du compte utilisateur, ainsi que les enregistrements des sessions de navigation. Il s’agit donc d’un problème d’apprentissage supervisé, avec 12 classes à prédire sur 62 096 utilisateurs. Pour plus d’information, vous pouvez vous référer au site de la compétition : <a href="https://www.kaggle.com/c/airbnb-recruiting-new-user-bookings" class="uri">https://www.kaggle.com/c/airbnb-recruiting-new-user-bookings</a>.</p>
</div>
<div id="demarche-employee" class="section level2">
<h2>Démarche employée</h2>
<p>Pour ce projet, nous avons employée la méthodologie classique <em>CRISP-DM</em> (Cross Industry Standard Process for Data Mining). Cela permet de trouver des solutions à des problèmes d’analyse de données de manière itérative. Une illustration de cette méthodologie est fournie ci-dessous par l’éditeur de logiciel Dataiku.</p>
<p><img src="data:image/png;base64,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" alt="alt text" /></p>
<p>Ce rapport présente ainsi les résultats de plusieurs itérations de ce processus, selon les différentes étapes présentées ci-dessus. Nous discuterons en conclusion de ce rapport des pistes de travail pour améliorer nos résultats lors de futures itérations.</p>
</div>
</div>
<div id="chargement-des-donnees-et-de-lenvironnement-de-travail" class="section level1">
<h1>1. Chargement des données et de l’environnement de travail</h1>
<p>Tout d’abord, nous importons les librairies R que nous allons utiliser par la suite:</p>
<pre class="r"><code>lib<-c("DMwR","e1071", "nnet", "randomForest", "adabag")
sapply(lib, require, character.only = TRUE, quietly=T)</code></pre>
<p>Ensuite, nous importons les bases de données (fournies en format CSV) en format <code>data.frame</code>, en prenant soin de spécifier les types attendus pour chaque colonne, et les tags des valeurs manquantes.</p>
<pre class="r"><code>totalclasses<-c("character","Date","character","Date","factor","numeric",rep("factor",10))
df_train<-read.csv("./Kaggle-Data/train_users_2.csv",
stringsAsFactors=TRUE,na.strings=c("","-unknown-"),
colClasses = totalclasses)
df_test<-read.csv("./Kaggle-Data/test_users.csv",
stringsAsFactors=TRUE,na.strings=c("","-unknown-"),
colClasses = head(totalclasses,-1))
#session<-read.csv(unzip("./Kaggle-Data/sessions.csv.zip"))</code></pre>
</div>
<div id="exploration-et-comprehension-des-donnees" class="section level1">
<h1>2. Exploration et compréhension des données</h1>
<p>Nous avons plusieurs bases de données: le <em>training set</em> <code>df_train</code> et le <em>test set</em> <code>df_test</code>contenant les mêmes informations, sauf la variable à prédire (le pays de destination), et la base <code>session</code> contenant le log de navigation web des utilisateurs du training et test set. Les training et test sets sont séparées par date. Dans le test test, on va prédire pour tous les nouveaux utilisateurs dont les premières activités sont après 01/07/2014. Pas souci de limitation du temps de calcul, nous n’avons pas utilisé la base <code>session</code>, qui est beaucoup plus volumineuse (600MB contre 30MB). Cependant la logique serait la même, cela reviendrait à ajouter des features supplémentaires.</p>
<p>Intéressons nous à la structure du <em>training set</em>. Nous avons 16 colonnes :</p>
<ul>
<li>Identifiant utilisateur,</li>
<li>Plusieurs dates : création du compte, activation du compte, première réservation,</li>
<li>Données démographiques : genre, âge</li>
<li>Données de web-tracking de création du compte : méthode de signup, langue, canal d’affiliation, fournisseur affilié, application utilisée, type de device, type de navigateur Internet</li>
<li>Pays de destination (la variable à prédire)</li>
</ul>
<p>Voici de manière simplifiée les distributions des valeurs dans le training set :</p>
<pre class="r"><code>summary(df_train)</code></pre>
<pre><code>## id date_account_created timestamp_first_active
## Length:213451 Min. :2010-01-01 Length:213451
## Class :character 1st Qu.:2012-12-26 Class :character
## Mode :character Median :2013-09-11 Mode :character
## Mean :2013-06-25
## 3rd Qu.:2014-03-06
## Max. :2014-06-30
##
## date_first_booking gender age signup_method
## Min. :2010-01-02 FEMALE:63041 Min. : 1.00 basic :152897
## 1st Qu.:2012-12-02 MALE :54440 1st Qu.: 28.00 facebook: 60008
## Median :2013-09-11 OTHER : 282 Median : 34.00 google : 546
## Mean :2013-07-04 NA's :95688 Mean : 49.67
## 3rd Qu.:2014-04-04 3rd Qu.: 43.00
## Max. :2015-06-29 Max. :2014.00
## NA's :124543 NA's :87990
## signup_flow language affiliate_channel
## 0 :164739 en :206314 direct :137727
## 25 : 14659 zh : 1632 sem-brand : 26045
## 12 : 9329 fr : 1172 sem-non-brand: 18844
## 3 : 8822 es : 915 other : 8961
## 2 : 6881 ko : 747 seo : 8663
## 24 : 4328 de : 732 api : 8167
## (Other): 4693 (Other): 1939 (Other) : 5044
## affiliate_provider first_affiliate_tracked signup_app
## direct :137426 untracked :109232 Android: 5454
## google : 51693 linked : 46287 iOS : 19019
## other : 12549 omg : 43982 Moweb : 6261
## craigslist: 3471 tracked-other: 6156 Web :182717
## bing : 2328 product : 1556
## facebook : 2273 (Other) : 173
## (Other) : 3711 NA's : 6065
## first_device_type first_browser country_destination
## Mac Desktop :89600 Chrome :63845 NDF :124543
## Windows Desktop:72716 Safari :45169 US : 62376
## iPhone :20759 Firefox :33655 other : 10094
## iPad :14339 IE :21068 FR : 5023
## Other/Unknown :10667 Mobile Safari:19274 IT : 2835
## Android Phone : 2803 (Other) : 3174 GB : 2324
## (Other) : 2567 NA's :27266 (Other): 6256</code></pre>
<p>Notons qu’il y a 12 modalités possibles pour le pays de destination : USA, France, Canada, Grande Bretagne, Espagne, Italie, Portugal, Pays-Bas, Allemagne, Australie, other pour “autres pays” et NDF pour “Pas de destination trouvé”. On remarque que pour les données de web-tracking, il existe de nombreuses modalités avec de faibles fréquences.</p>
</div>
<div id="preparation-des-donnees" class="section level1">
<h1>3. Préparation des données</h1>
<p>Tout d’abord, nous transformons les données de date en variables utilisables par un modèle d’apprentissage: le mois et jour de la semaine correspondant à la création du compte, le mois et jour de la semaine correspondant à l’activation du compte, et le nombre d’heures entre la création du compte et la première activité.</p>
<pre class="r"><code>date_preparation<-function(x){
x[,"month_account_created"]<-as.factor(months(x[,"date_account_created"]))
x[,"weekday_account_created"]<-as.factor(weekdays(x[,"date_account_created"]))
x[,"day_account_created"]<-as.factor(format(x[,"date_account_created"],"%d"))
x[,"timestamp_first_active"]<-as.Date(as.POSIXct(x[,"timestamp_first_active"],
format="%Y%m%d%H%M%S"))
x[,"month_first_active"]<-as.factor(months(x[,"timestamp_first_active"]))
x[,"weekday_first_active"]<-as.factor(weekdays(x[,"timestamp_first_active"]))
x[,"day_first_active"]<-as.factor(format(x[,"timestamp_first_active"],"%d"))
x[,"diff_account_active"]<-numeric(difftime(x[,"timestamp_first_active"],
x[,"date_account_created"],units="hours"))
return(x)}
df_train<-date_preparation(df_train)
df_test<-date_preparation(df_test)</code></pre>
<p>De plus, nous allons simplifier les modalités à faible fréquence en une seule modalité, afin de simplifier le problème au niveau computationnel. Notamment, le modèle <code>randomForest</code> ne peut prendre de facteurs avec plus de 32 modalités. Cela implique de faire une harmonisation des modalités possibles entre le training et test set. Nous choisissons le paramètre de 1/1000 pour filter les modalités de fréquence trop faible.</p>
<pre class="r"><code>get_rare_classes<-function(df,tx){
rare_classes<-list()
for(r in colnames(df)) {
if(class(df[,r])=="factor"){
rare_classes[[r]]<-names(which(summary(df[,r])<tx*sum(!is.na(df[,r]))))}}
return(rare_classes)}
rare_classes<-get_rare_classes(df_train,0.001)
simplify_classes<-function(df,rares_classes){
for(r in names(rare_classes)){
if(length(rare_classes[[r]])>1){
otherclass<-paste(rare_classes[[r]],collapse="+")
levels(df[,r]) <- c(levels(df[,r]), otherclass)
df[df[,r] %in% rare_classes[[r]], r]<- otherclass
df[,r]<-droplevels(df[,r])}}
return(df)}
df_train<-simplify_classes(df_train,rare_classes)
df_test<-simplify_classes(df_test,rare_classes)
harmonize_levels<-function(train,test){
for(r in colnames(test)) {
if(class(test[,r])=="factor"){
test[,r] <- factor(test[,r], levels=levels(train[,r]))}}
return(test)}
df_test<-harmonize_levels(df_train,df_test)</code></pre>
<p>Enfin, nous allons éliminer les valeurs extrêmes pour l’âge, en considérant que les utilisateurs ne peuvent pas avoir moins de 18 ans ou plus de 100 ans. Dans ce cas, nous imputons l’âge médian.</p>
<pre class="r"><code>extreme_age <- !(df_train[,"age"] > 17 & df_train[,"age"] < 100) & !is.na(df_train[,"age"])
df_train[extreme_age,"age"] <- NA</code></pre>
<p>Finalement, afin d’éviter de perdre l’information des individus avec des valeur manquantes, nous allons imputer sur l’ensemble du training et test set, en utilisant les k-Nearest Neighbors sur les colonnes des prédicteurs. On choisit k=10, ce qui induit un certain temps de calcul (plus de 24 heures pour le training set) mais permet d’avoir des résultats robustes.</p>
<pre class="r"><code>Predictors<-c("gender","age","signup_method","signup_flow","language",
"affiliate_channel","affiliate_provider","first_affiliate_tracked",
"signup_app","first_device_type","first_browser",
"month_account_created","weekday_account_created","month_first_active",
"weekday_first_active","diff_account_active")
df_test_imputed<-knnImputation(df_test[,Predictors], k=10, meth="median")
df_train_imputed<-cbind(knnImputation(df_train[,Predictors], k=10, meth="median"),
country_destination=df_train[,"country_destination"])</code></pre>
</div>
<div id="creation-des-modeles-dapprentissage" class="section level1">
<h1>4. Création des modèles d’apprentissage</h1>
<p>Dans le cadre de nos itérations, nous avons testé de nombreux modèles avec une combinaison de paramètres. Nous reportons ici les 5 meilleurs par rapport à la performance mesurée par Kaggle sur le test set (voir section suivante). Il s’agit des classifieurs suivants :</p>
<ul>
<li>Naive Bayes</li>
<li>Logit Multinomial</li>
<li>Random Forest sans poids (300 arbres)</li>
<li>Random Forest avec poids inverse des fréquences des modalités (300 arbres)</li>
<li>Réseau de neurones (1 couche cachée avec 50 neurones)</li>
</ul>
<p>L’ajout de poids au modèle Random Forest a pour but de pallier au problème de déséquilibre des classes. En effet, les analyses de distribution de la section 2 ont montré qu’une large majorité des classes à prédire dans le training set sont “US” ou “NDF”. Cela entraîne de mauvaises performances de classification pour les autres “petites” classes.</p>
<p>A noter que le temps de calcul de chaque modèle peut aller jusqu’à plusieurs heures. Nous avons du modifier les valeurs par défaut de plusieurs modèles pour adapter le nombre maximal de poids et d’itérations. D’autres modèles ont été abandonnés à cause de temps de calcul trop longs, notamment pour le Boosting.</p>
<pre class="r"><code>fit_naivebayes_imputed<-naiveBayes(formula_predictors,data=df_train_imputed)
fit_multinomlogit_imputed<-multinom(formula_predictors,data=df_train_imputed,
MaxNWts = 2000, maxit=1000,na.action=na.omit)
fit_randomforest_imputed<-randomForest(formula_predictors,data=df_train_imputed,
na.action = na.omit, importance=TRUE,
do.trace=1,keep.forest=TRUE,ntree=300)
class_weights<-1/(table(df_train[,"country_destination"])
/sum(table(df_train[,"country_destination"])))
fit_randomforest_weighted<-randomForest(formula_predictors,data=df_train,
na.action = na.omit, importance=TRUE,
do.trace=1,keep.forest=TRUE,
ntree=500,classwt=class_weights)
fit_nnet_imputed<-nnet(formula_predictors,data=df_train_imputed,
size=50, MaxNWts = 6000, maxit=1000, na.action=na.omit)</code></pre>
<p>Une fois que les classifieurs ont appris du training set, nous les appliquons à notre test set. Compte tenu de la métrique d’évaluation, nous allons extraire le Top 5 des prédictions par ordre décroissant de probabilité.</p>
<pre class="r"><code>get_top5<-function(df,x){
paste(colnames(df)[sort(x,decreasing = T,index.return=T)$ix[1:5]],collapse=' ')}
predicted_naivebayes_imputed<-predict(fit_naivebayes_imputed,df_test_imputed,"raw")
predicted_top5_naivebayes_imputed<-strsplit(apply(
predicted_naivebayes_imputed,MARGIN=1,
function(x) get_top5(predicted_naivebayes_imputed,x)),split=" ")
predicted_multinomlogit_imputed<-predict(fit_multinomlogit_imputed,df_test_imputed,"probs")
predicted_top5_multinomlogit_imputed<-strsplit(apply(
predicted_multinomlogit_imputed,MARGIN=1,
function(x) get_top5(predicted_multinomlogit_imputed,x)),split=" ")
predicted_randomforest_imputed<-predict(fit_randomforest_imputed,df_test_imputed,"prob")
predicted_top5_randomforest_imputed<-strsplit(apply(
predicted_randomforest_imputed,MARGIN=1,
function(x) get_top5(predicted_randomforest_imputed,x)),split=" ")
predicted_randomforest_weighted<-predict(fit_randomforest_weighted,df_test_imputed,"prob")
predicted_top5_randomforest_weighted<-strsplit(apply(
predicted_randomforest_weighted,MARGIN=1,
function(x) get_top5(predicted_randomforest_weighted,x)),split=" ")
predicted_nnet_imputed<-predict(fit_nnet_imputed,df_test_imputed,"raw")
predicted_top5_nnet_imputed<-strsplit(apply(
predicted_multinomlogit_imputed,MARGIN=1,
function(x) get_top5(predicted_nnet_imputed,x)),split=" ")</code></pre>
<div id="evaluation" class="section level2">
<h2>5. Evaluation</h2>
<p>Pour cette compétition Kaggle, Airbnb a choisi d’utiliser une métrique d’évaluation particulière, le <span class="math inline">\(NDCG_k\)</span> (Normalized Discounted Cumulative Gain) sur le Top 5 des modalités prédites par ordre de probabilité. Cette métrique est définie de la manière suivante :</p>
<p><span class="math display">\[ DCG_k=\sum_{i=1}^k\frac{2^{rel_i}-1}{\log_2{\left(i+1\right)}} \]</span> <span class="math display">\[ NDCG_k=\frac{DCG_k}{IDCG_k} \]</span></p>
<p>où <span class="math inline">\(rel_i\)</span> est la pertinence du résultat à la position <span class="math inline">\(i\)</span>, c’est-à-dire 1 si le bon pays est prédit, et 0 sinon. <span class="math inline">\(IDCG_k\)</span> est le maximum du <span class="math inline">\(DCG_k\)</span>, ce qui permet de normaliser entre 0 et 1. Ci-dessous une implémentation simple de cette métrique à fin de cross-validation:</p>
<pre class="r"><code>dcg_at_k <- function (r, k=5) {
r <- as.vector(r)[1:k]
sum(( 2^r - 1 )/ log2( 2:(length(r)+1)) )}
ndcg_at_k <- function(r, k=5) {
r <- as.vector(r)[1:k]
if (sum(r) <= 0) return (0)
dcg_max = dcg_at_k(sort(r, decreasing=TRUE)[1:k], k)
return ( dcg_at_k(r, k) / dcg_max )}
ndcg_score <- function(predicted_top5, truth) {
predicted_top5 <- matrix(unlist(predicted_top5),ncol=5,byrow=T)
truth <- as.vector(truth)
stopifnot(length(truth) == nrow(predicted_top5))
score <- apply(cbind(truth, predicted_top5), 1, function(x) ifelse(x == x[1], 1, 0))[-1,]
if (ncol(predicted_top5) == 1) score <-rbind(score, score) #for 1d matrices
as.vector(apply(score, 2, ndcg_at_k) )}</code></pre>
<p>Nous présenterons ici les résultats du <span class="math inline">\(NDCG_k\)</span> donnés par Kaggle sur le test set, en passant par le chargement de fichiers CSV spécialement préparés:</p>
<pre class="r"><code>write.csv(data.frame(id=df_test[rep(1:nrow(df_test),each=5),"id"],
country=unlist(predicted_top5_naivebayes_imputed)),quote=F,row.names = F,
file="submission_naivebayes_imputed.csv")
write.csv(data.frame(id=df_test[rep(1:nrow(df_test),each=5),"id"],
country=unlist(predicted_top5_multinomlogit_imputed)),quote=F,row.names = F,
file="submission_multinomlogit_imputed.csv")
write.csv(data.frame(id=df_test[rep(1:nrow(df_test),each=5),"id"],
country=unlist(predicted_top5_randomforest_imputed)),quote=F,row.names = F,
file="submission_rf_imputed.csv")
write.csv(data.frame(id=df_test[rep(1:nrow(df_test),each=5),"id"],
country=unlist(predicted_top5_randomforest_weighted_imputed)),
quote=F,row.names = F, file="submission_rf_imputed.csv")
write.csv(data.frame(id=df_test[rep(1:nrow(df_test),each=5),"id"],
country=unlist(predicted_top5_nnet_imputed)),quote=F,row.names = F,
file="submission_nnet_imputed.csv")</code></pre>
<p>Les résultats sont reportés dans le graphique ci-dessus, par ordre décroissant de performance:</p>
<pre class="r"><code>results<-sort(c("Naive Bayes"=0.83874,"Logit Multinomial"=0.85337,"Random Forest"=0.82701,
"Random Forest avec poids"=0.69293,"Réseau de neurones"=0.83352),decreasing=T)
plotresults<-barplot(results,ylim=c(0.66,0.88),
xpd=F,cex.names=0.63,cex.axis=0.63)
grid(ny=NULL,nx=1,col="darkgrey")
text(x=plotresults,y=results,labels=results, pos=3,cex=0.8)</code></pre>
<p><img src="data:image/png;base64,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" title alt width="768" /></p>
<p>On voit que le modèle le plus performant est le Logit Multinomial. On constate également que la performance de la Random Forest avec poids est très décevante. Il s’agit d’une fausse piste de solution pour le déséquilibre des classes.</p>
<p>Cela nous place à la 566ème place de la compétition sur 860, sachant que la performance de la première équipe est de 0.88184 (classement au 10 janvier 2016). Les écarts entre équipes sont donc très faibles.</p>
</div>
</div>
<div id="conclusion-pour-aller-plus-loin" class="section level1">
<h1>Conclusion : pour aller plus loin</h1>
<p>Sachant que la compétition est ouverte jusqu’au 11 février, de nombreuses pistes s’offrent à nous pour améliorer les résultats de nos prédictions :</p>
<ul>
<li><p>Utiliser les données de navigation web de la base <code>session</code>, qui nous pas été intégrées jusqu’ici</p></li>
<li><p>Faire de la cross-validation sur le training set pour optimiser les paramètres des modèles. Pour l’instant cela a été fait manuellement par rapport aux résultats du test set, ce qui n’est pas optimal (le scoring est limité par Kaggle à 5 par jour)</p></li>
<li><p>Pallier aux problème de déséquilibre des classes en sur-échantillonant les petites classes (ou inversement en sous-échantillonant les grandes classes)</p></li>
<li><p>Implémenter de nouveaux modèles plus puissants comme le Boosting, Bagging et les Deep Neural Networks</p></li>
<li><p>Aggréger l’ensemble des classifieurs (blending)</p></li>
</ul>
</div>
</div>
<script>
// add bootstrap table styles to pandoc tables
$(document).ready(function () {
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
});
</script>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>