UNPKG

30.8 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.codepageBySortId = exports.codepageByLanguageId = exports.Flags = exports.Collation = void 0;
7// http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx
8const codepageByLanguageId = exports.codepageByLanguageId = {
9 // Arabic_*
10 [0x0401]: 'CP1256',
11 // Chinese_Taiwan_Stroke_*
12 // Chinese_Traditional_Stroke_Count_*
13 // Chinese_Taiwan_Bopomofo_*
14 // Chinese_Traditional_Bopomofo_*
15 [0x0404]: 'CP950',
16 // Czech_*
17 [0x0405]: 'CP1250',
18 // Danish_Greenlandic_*
19 // Danish_Norwegian_*
20 [0x0406]: 'CP1252',
21 // Greek_*
22 [0x0408]: 'CP1253',
23 // Latin1_General_*
24 [0x0409]: 'CP1252',
25 // Traditional_Spanish_*
26 [0x040A]: 'CP1252',
27 // Finnish_Swedish_*
28 [0x040B]: 'CP1252',
29 // French_*
30 [0x040C]: 'CP1252',
31 // Hebrew_*
32 [0x040D]: 'CP1255',
33 // Hungarian_*
34 // Hungarian_Technical_*
35 [0x040E]: 'CP1250',
36 // Icelandic_*
37 [0x040F]: 'CP1252',
38 // Japanese_*
39 // Japanese_XJIS_*
40 // Japanese_Unicode_*
41 // Japanese_Bushu_Kakusu_*
42 [0x0411]: 'CP932',
43 // Korean_*
44 // Korean_Wansung_*
45 [0x0412]: 'CP949',
46 // Norwegian_*
47 [0x0414]: 'CP1252',
48 // Polish_*
49 [0x0415]: 'CP1250',
50 // Romansh_*
51 [0x0417]: 'CP1252',
52 // Romanian_*
53 [0x0418]: 'CP1250',
54 // Cyrillic_*
55 [0x0419]: 'CP1251',
56 // Croatian_*
57 [0x041A]: 'CP1250',
58 // Slovak_*
59 [0x041B]: 'CP1250',
60 // Albanian_*
61 [0x041C]: 'CP1250',
62 // Thai_*
63 [0x041E]: 'CP874',
64 // Turkish_*
65 [0x041F]: 'CP1254',
66 // Urdu_*
67 [0x0420]: 'CP1256',
68 // Ukrainian_*
69 [0x0422]: 'CP1251',
70 // Slovenian_*
71 [0x0424]: 'CP1250',
72 // Estonian_*
73 [0x0425]: 'CP1257',
74 // Latvian_*
75 [0x0426]: 'CP1257',
76 // Lithuanian_*
77 [0x0427]: 'CP1257',
78 // Persian_*
79 [0x0429]: 'CP1256',
80 // Vietnamese_*
81 [0x042A]: 'CP1258',
82 // Azeri_Latin_*
83 [0x042C]: 'CP1254',
84 // Upper_Sorbian_*
85 [0x042E]: 'CP1252',
86 // Macedonian_FYROM_*
87 [0x042F]: 'CP1251',
88 // Sami_Norway_*
89 [0x043B]: 'CP1252',
90 // Kazakh_*
91 [0x043F]: 'CP1251',
92 // Turkmen_*
93 [0x0442]: 'CP1250',
94 // Uzbek_Latin_*
95 [0x0443]: 'CP1254',
96 // Tatar_*
97 [0x0444]: 'CP1251',
98 // Welsh_*
99 [0x0452]: 'CP1252',
100 // Frisian_*
101 [0x0462]: 'CP1252',
102 // Bashkir_*
103 [0x046D]: 'CP1251',
104 // Mapudungan_*
105 [0x047A]: 'CP1252',
106 // Mohawk_*
107 [0x047C]: 'CP1252',
108 // Breton_*
109 [0x047E]: 'CP1252',
110 // Uighur_*
111 [0x0480]: 'CP1256',
112 // Corsican_*
113 [0x0483]: 'CP1252',
114 // Yakut_*
115 [0x0485]: 'CP1251',
116 // Dari_*
117 [0x048C]: 'CP1256',
118 // Chinese_PRC_*
119 // Chinese_Simplified_Pinyin_*
120 // Chinese_PRC_Stroke_*
121 // Chinese_Simplified_Stroke_Order_*
122 [0x0804]: 'CP936',
123 // Serbian_Latin_*
124 [0x081A]: 'CP1250',
125 // Azeri_Cyrillic_*
126 [0x082C]: 'CP1251',
127 // Sami_Sweden_Finland_*
128 [0x083B]: 'CP1252',
129 // Tamazight_*
130 [0x085F]: 'CP1252',
131 // Chinese_Hong_Kong_Stroke_*
132 [0x0C04]: 'CP950',
133 // Modern_Spanish_*
134 [0x0C0A]: 'CP1252',
135 // Serbian_Cyrillic_*
136 [0x0C1A]: 'CP1251',
137 // Chinese_Traditional_Pinyin_*
138 // Chinese_Traditional_Stroke_Order_*
139 [0x1404]: 'CP950',
140 // Bosnian_Latin_*
141 [0x141A]: 'CP1250',
142 // Bosnian_Cyrillic_*
143 [0x201A]: 'CP1251',
144 // German
145 // German_PhoneBook_*
146 [0x0407]: 'CP1252',
147 // Georgian_Modern_Sort_*
148 [0x0437]: 'CP1252'
149};
150const codepageBySortId = exports.codepageBySortId = {
151 [30]: 'CP437',
152 // SQL_Latin1_General_CP437_BIN
153 [31]: 'CP437',
154 // SQL_Latin1_General_CP437_CS_AS
155 [32]: 'CP437',
156 // SQL_Latin1_General_CP437_CI_AS
157 [33]: 'CP437',
158 // SQL_Latin1_General_Pref_CP437_CI_AS
159 [34]: 'CP437',
160 // SQL_Latin1_General_CP437_CI_AI
161 [40]: 'CP850',
162 // SQL_Latin1_General_CP850_BIN
163 [41]: 'CP850',
164 // SQL_Latin1_General_CP850_CS_AS
165 [42]: 'CP850',
166 // SQL_Latin1_General_CP850_CI_AS
167 [43]: 'CP850',
168 // SQL_Latin1_General_Pref_CP850_CI_AS
169 [44]: 'CP850',
170 // SQL_Latin1_General_CP850_CI_AI
171 [49]: 'CP850',
172 // SQL_1xCompat_CP850_CI_AS
173 [51]: 'CP1252',
174 // SQL_Latin1_General_Cp1_CS_AS_KI_WI
175 [52]: 'CP1252',
176 // SQL_Latin1_General_Cp1_CI_AS_KI_WI
177 [53]: 'CP1252',
178 // SQL_Latin1_General_Pref_Cp1_CI_AS_KI_WI
179 [54]: 'CP1252',
180 // SQL_Latin1_General_Cp1_CI_AI_KI_WI
181 [55]: 'CP850',
182 // SQL_AltDiction_CP850_CS_AS
183 [56]: 'CP850',
184 // SQL_AltDiction_Pref_CP850_CI_AS
185 [57]: 'CP850',
186 // SQL_AltDiction_CP850_CI_AI
187 [58]: 'CP850',
188 // SQL_Scandinavian_Pref_CP850_CI_AS
189 [59]: 'CP850',
190 // SQL_Scandinavian_CP850_CS_AS
191 [60]: 'CP850',
192 // SQL_Scandinavian_CP850_CI_AS
193 [61]: 'CP850',
194 // SQL_AltDiction_CP850_CI_AS
195 [80]: 'CP1250',
196 // SQL_Latin1_General_1250_BIN
197 [81]: 'CP1250',
198 // SQL_Latin1_General_CP1250_CS_AS
199 [82]: 'CP1250',
200 // SQL_Latin1_General_Cp1250_CI_AS_KI_WI
201 [83]: 'CP1250',
202 // SQL_Czech_Cp1250_CS_AS_KI_WI
203 [84]: 'CP1250',
204 // SQL_Czech_Cp1250_CI_AS_KI_WI
205 [85]: 'CP1250',
206 // SQL_Hungarian_Cp1250_CS_AS_KI_WI
207 [86]: 'CP1250',
208 // SQL_Hungarian_Cp1250_CI_AS_KI_WI
209 [87]: 'CP1250',
210 // SQL_Polish_Cp1250_CS_AS_KI_WI
211 [88]: 'CP1250',
212 // SQL_Polish_Cp1250_CI_AS_KI_WI
213 [89]: 'CP1250',
214 // SQL_Romanian_Cp1250_CS_AS_KI_WI
215 [90]: 'CP1250',
216 // SQL_Romanian_Cp1250_CI_AS_KI_WI
217 [91]: 'CP1250',
218 // SQL_Croatian_Cp1250_CS_AS_KI_WI
219 [92]: 'CP1250',
220 // SQL_Croatian_Cp1250_CI_AS_KI_WI
221 [93]: 'CP1250',
222 // SQL_Slovak_Cp1250_CS_AS_KI_WI
223 [94]: 'CP1250',
224 // SQL_Slovak_Cp1250_CI_AS_KI_WI
225 [95]: 'CP1250',
226 // SQL_Slovenian_Cp1250_CS_AS_KI_WI
227 [96]: 'CP1250',
228 // SQL_Slovenian_Cp1250_CI_AS_KI_WI
229 [104]: 'CP1251',
230 // SQL_Latin1_General_1251_BIN
231 [105]: 'CP1251',
232 // SQL_Latin1_General_CP1251_CS_AS
233 [106]: 'CP1251',
234 // SQL_Latin1_General_CP1251_CI_AS
235 [107]: 'CP1251',
236 // SQL_Ukrainian_Cp1251_CS_AS_KI_WI
237 [108]: 'CP1251',
238 // SQL_Ukrainian_Cp1251_CI_AS_KI_WI
239 [112]: 'CP1253',
240 // SQL_Latin1_General_1253_BIN
241 [113]: 'CP1253',
242 // SQL_Latin1_General_CP1253_CS_AS
243 [114]: 'CP1253',
244 // SQL_Latin1_General_CP1253_CI_AS
245 [120]: 'CP1253',
246 // SQL_MixDiction_CP1253_CS_AS
247 [121]: 'CP1253',
248 // SQL_AltDiction_CP1253_CS_AS
249 [122]: 'CP1253',
250 // SQL_AltDiction2_CP1253_CS_AS
251 [124]: 'CP1253',
252 // SQL_Latin1_General_CP1253_CI_AI
253 [128]: 'CP1254',
254 // SQL_Latin1_General_1254_BIN
255 [129]: 'CP1254',
256 // SQL_Latin1_General_Cp1254_CS_AS_KI_WI
257 [130]: 'CP1254',
258 // SQL_Latin1_General_Cp1254_CI_AS_KI_WI
259 [136]: 'CP1255',
260 // SQL_Latin1_General_1255_BIN
261 [137]: 'CP1255',
262 // SQL_Latin1_General_CP1255_CS_AS
263 [138]: 'CP1255',
264 // SQL_Latin1_General_CP1255_CI_AS
265 [144]: 'CP1256',
266 // SQL_Latin1_General_1256_BIN
267 [145]: 'CP1256',
268 // SQL_Latin1_General_CP1256_CS_AS
269 [146]: 'CP1256',
270 // SQL_Latin1_General_CP1256_CI_AS
271 [152]: 'CP1257',
272 // SQL_Latin1_General_1257_BIN
273 [153]: 'CP1257',
274 // SQL_Latin1_General_CP1257_CS_AS
275 [154]: 'CP1257',
276 // SQL_Latin1_General_CP1257_CI_AS
277 [155]: 'CP1257',
278 // SQL_Estonian_Cp1257_CS_AS_KI_WI
279 [156]: 'CP1257',
280 // SQL_Estonian_Cp1257_CI_AS_KI_WI
281 [157]: 'CP1257',
282 // SQL_Latvian_Cp1257_CS_AS_KI_WI
283 [158]: 'CP1257',
284 // SQL_Latvian_Cp1257_CI_AS_KI_WI
285 [159]: 'CP1257',
286 // SQL_Lithuanian_Cp1257_CS_AS_KI_WI
287 [160]: 'CP1257',
288 // SQL_Lithuanian_Cp1257_CI_AS_KI_WI
289 [183]: 'CP1252',
290 // SQL_Danish_Pref_Cp1_CI_AS_KI_WI
291 [184]: 'CP1252',
292 // SQL_SwedishPhone_Pref_Cp1_CI_AS_KI_WI
293 [185]: 'CP1252',
294 // SQL_SwedishStd_Pref_Cp1_CI_AS_KI_WI
295 [186]: 'CP1252' // SQL_Icelandic_Pref_Cp1_CI_AS_KI_WI
296};
297const Flags = exports.Flags = {
298 IGNORE_CASE: 1 << 0,
299 IGNORE_ACCENT: 1 << 1,
300 IGNORE_KANA: 1 << 2,
301 IGNORE_WIDTH: 1 << 3,
302 BINARY: 1 << 4,
303 BINARY2: 1 << 5,
304 UTF8: 1 << 6
305};
306class Collation {
307 static fromBuffer(buffer, offset = 0) {
308 let lcid = (buffer[offset + 2] & 0x0F) << 16;
309 lcid |= buffer[offset + 1] << 8;
310 lcid |= buffer[offset + 0];
311 let flags = (buffer[offset + 3] & 0x0F) << 4;
312 flags |= (buffer[offset + 2] & 0xF0) >>> 4;
313 const version = (buffer[offset + 3] & 0xF0) >>> 4;
314 const sortId = buffer[offset + 4];
315 return new this(lcid, flags, version, sortId);
316 }
317 constructor(lcid, flags, version, sortId) {
318 this.buffer = undefined;
319 this.lcid = lcid;
320 this.flags = flags;
321 this.version = version;
322 this.sortId = sortId;
323 if (this.flags & Flags.UTF8) {
324 this.codepage = 'utf-8';
325 } else if (this.sortId) {
326 this.codepage = codepageBySortId[this.sortId];
327 } else {
328 // The last 16 bits of the LCID are the language id.
329 // The first 4 bits define additional sort orders.
330 const languageId = this.lcid & 0xFFFF;
331 this.codepage = codepageByLanguageId[languageId];
332 }
333 }
334 toBuffer() {
335 if (this.buffer) {
336 return this.buffer;
337 }
338 this.buffer = Buffer.alloc(5);
339 this.buffer[0] = this.lcid & 0xFF;
340 this.buffer[1] = this.lcid >>> 8 & 0xFF;
341 this.buffer[2] = this.lcid >>> 16 & 0x0F | (this.flags & 0x0F) << 4;
342 this.buffer[3] = (this.flags & 0xF0) >>> 4 | (this.version & 0x0F) << 4;
343 this.buffer[4] = this.sortId & 0xFF;
344 return this.buffer;
345 }
346}
347exports.Collation = Collation;
348//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcGFnZUJ5TGFuZ3VhZ2VJZCIsImV4cG9ydHMiLCJjb2RlcGFnZUJ5U29ydElkIiwiRmxhZ3MiLCJJR05PUkVfQ0FTRSIsIklHTk9SRV9BQ0NFTlQiLCJJR05PUkVfS0FOQSIsIklHTk9SRV9XSURUSCIsIkJJTkFSWSIsIkJJTkFSWTIiLCJVVEY4IiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsImJ1ZmZlciIsIm9mZnNldCIsImxjaWQiLCJmbGFncyIsInZlcnNpb24iLCJzb3J0SWQiLCJjb25zdHJ1Y3RvciIsInVuZGVmaW5lZCIsImNvZGVwYWdlIiwibGFuZ3VhZ2VJZCIsInRvQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgRW5jb2RpbmcgPSAndXRmLTgnIHwgJ0NQNDM3JyB8ICdDUDg1MCcgfCAnQ1A4NzQnIHwgJ0NQOTMyJyB8ICdDUDkzNicgfCAnQ1A5NDknIHwgJ0NQOTUwJyB8ICdDUDEyNTAnIHwgJ0NQMTI1MScgfCAnQ1AxMjUyJyB8ICdDUDEyNTMnIHwgJ0NQMTI1NCcgfCAnQ1AxMjU1JyB8ICdDUDEyNTYnIHwgJ0NQMTI1NycgfCAnQ1AxMjU4JztcblxuLy8gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMTc2NTUzKHY9c3FsLjgwKS5hc3B4XG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeUxhbmd1YWdlSWQ6IHsgW2tleTogbnVtYmVyXTogRW5jb2RpbmcgfSA9IHtcbiAgLy8gQXJhYmljXypcbiAgWzB4MDQwMV06ICdDUDEyNTYnLFxuXG4gIC8vIENoaW5lc2VfVGFpd2FuX1N0cm9rZV8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX0NvdW50XypcbiAgLy8gQ2hpbmVzZV9UYWl3YW5fQm9wb21vZm9fKlxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX0JvcG9tb2ZvXypcbiAgWzB4MDQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQ3plY2hfKlxuICBbMHgwNDA1XTogJ0NQMTI1MCcsXG5cbiAgLy8gRGFuaXNoX0dyZWVubGFuZGljXypcbiAgLy8gRGFuaXNoX05vcndlZ2lhbl8qXG4gIFsweDA0MDZdOiAnQ1AxMjUyJyxcblxuICAvLyBHcmVla18qXG4gIFsweDA0MDhdOiAnQ1AxMjUzJyxcblxuICAvLyBMYXRpbjFfR2VuZXJhbF8qXG4gIFsweDA0MDldOiAnQ1AxMjUyJyxcblxuICAvLyBUcmFkaXRpb25hbF9TcGFuaXNoXypcbiAgWzB4MDQwQV06ICdDUDEyNTInLFxuXG4gIC8vIEZpbm5pc2hfU3dlZGlzaF8qXG4gIFsweDA0MEJdOiAnQ1AxMjUyJyxcblxuICAvLyBGcmVuY2hfKlxuICBbMHgwNDBDXTogJ0NQMTI1MicsXG5cbiAgLy8gSGVicmV3XypcbiAgWzB4MDQwRF06ICdDUDEyNTUnLFxuXG4gIC8vIEh1bmdhcmlhbl8qXG4gIC8vIEh1bmdhcmlhbl9UZWNobmljYWxfKlxuICBbMHgwNDBFXTogJ0NQMTI1MCcsXG5cbiAgLy8gSWNlbGFuZGljXypcbiAgWzB4MDQwRl06ICdDUDEyNTInLFxuXG4gIC8vIEphcGFuZXNlXypcbiAgLy8gSmFwYW5lc2VfWEpJU18qXG4gIC8vIEphcGFuZXNlX1VuaWNvZGVfKlxuICAvLyBKYXBhbmVzZV9CdXNodV9LYWt1c3VfKlxuICBbMHgwNDExXTogJ0NQOTMyJyxcblxuICAvLyBLb3JlYW5fKlxuICAvLyBLb3JlYW5fV2Fuc3VuZ18qXG4gIFsweDA0MTJdOiAnQ1A5NDknLFxuXG4gIC8vIE5vcndlZ2lhbl8qXG4gIFsweDA0MTRdOiAnQ1AxMjUyJyxcblxuICAvLyBQb2xpc2hfKlxuICBbMHgwNDE1XTogJ0NQMTI1MCcsXG5cbiAgLy8gUm9tYW5zaF8qXG4gIFsweDA0MTddOiAnQ1AxMjUyJyxcblxuICAvLyBSb21hbmlhbl8qXG4gIFsweDA0MThdOiAnQ1AxMjUwJyxcblxuICAvLyBDeXJpbGxpY18qXG4gIFsweDA0MTldOiAnQ1AxMjUxJyxcblxuICAvLyBDcm9hdGlhbl8qXG4gIFsweDA0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBTbG92YWtfKlxuICBbMHgwNDFCXTogJ0NQMTI1MCcsXG5cbiAgLy8gQWxiYW5pYW5fKlxuICBbMHgwNDFDXTogJ0NQMTI1MCcsXG5cbiAgLy8gVGhhaV8qXG4gIFsweDA0MUVdOiAnQ1A4NzQnLFxuXG4gIC8vIFR1cmtpc2hfKlxuICBbMHgwNDFGXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXJkdV8qXG4gIFsweDA0MjBdOiAnQ1AxMjU2JyxcblxuICAvLyBVa3JhaW5pYW5fKlxuICBbMHgwNDIyXTogJ0NQMTI1MScsXG5cbiAgLy8gU2xvdmVuaWFuXypcbiAgWzB4MDQyNF06ICdDUDEyNTAnLFxuXG4gIC8vIEVzdG9uaWFuXypcbiAgWzB4MDQyNV06ICdDUDEyNTcnLFxuXG4gIC8vIExhdHZpYW5fKlxuICBbMHgwNDI2XTogJ0NQMTI1NycsXG5cbiAgLy8gTGl0aHVhbmlhbl8qXG4gIFsweDA0MjddOiAnQ1AxMjU3JyxcblxuICAvLyBQZXJzaWFuXypcbiAgWzB4MDQyOV06ICdDUDEyNTYnLFxuXG4gIC8vIFZpZXRuYW1lc2VfKlxuICBbMHgwNDJBXTogJ0NQMTI1OCcsXG5cbiAgLy8gQXplcmlfTGF0aW5fKlxuICBbMHgwNDJDXTogJ0NQMTI1NCcsXG5cbiAgLy8gVXBwZXJfU29yYmlhbl8qXG4gIFsweDA0MkVdOiAnQ1AxMjUyJyxcblxuICAvLyBNYWNlZG9uaWFuX0ZZUk9NXypcbiAgWzB4MDQyRl06ICdDUDEyNTEnLFxuXG4gIC8vIFNhbWlfTm9yd2F5XypcbiAgWzB4MDQzQl06ICdDUDEyNTInLFxuXG4gIC8vIEthemFraF8qXG4gIFsweDA0M0ZdOiAnQ1AxMjUxJyxcblxuICAvLyBUdXJrbWVuXypcbiAgWzB4MDQ0Ml06ICdDUDEyNTAnLFxuXG4gIC8vIFV6YmVrX0xhdGluXypcbiAgWzB4MDQ0M106ICdDUDEyNTQnLFxuXG4gIC8vIFRhdGFyXypcbiAgWzB4MDQ0NF06ICdDUDEyNTEnLFxuXG4gIC8vIFdlbHNoXypcbiAgWzB4MDQ1Ml06ICdDUDEyNTInLFxuXG4gIC8vIEZyaXNpYW5fKlxuICBbMHgwNDYyXTogJ0NQMTI1MicsXG5cbiAgLy8gQmFzaGtpcl8qXG4gIFsweDA0NkRdOiAnQ1AxMjUxJyxcblxuICAvLyBNYXB1ZHVuZ2FuXypcbiAgWzB4MDQ3QV06ICdDUDEyNTInLFxuXG4gIC8vIE1vaGF3a18qXG4gIFsweDA0N0NdOiAnQ1AxMjUyJyxcblxuICAvLyBCcmV0b25fKlxuICBbMHgwNDdFXTogJ0NQMTI1MicsXG5cbiAgLy8gVWlnaHVyXypcbiAgWzB4MDQ4MF06ICdDUDEyNTYnLFxuXG4gIC8vIENvcnNpY2FuXypcbiAgWzB4MDQ4M106ICdDUDEyNTInLFxuXG4gIC8vIFlha3V0XypcbiAgWzB4MDQ4NV06ICdDUDEyNTEnLFxuXG4gIC8vIERhcmlfKlxuICBbMHgwNDhDXTogJ0NQMTI1NicsXG5cbiAgLy8gQ2hpbmVzZV9QUkNfKlxuICAvLyBDaGluZXNlX1NpbXBsaWZpZWRfUGlueWluXypcbiAgLy8gQ2hpbmVzZV9QUkNfU3Ryb2tlXypcbiAgLy8gQ2hpbmVzZV9TaW1wbGlmaWVkX1N0cm9rZV9PcmRlcl8qXG4gIFsweDA4MDRdOiAnQ1A5MzYnLFxuXG4gIC8vIFNlcmJpYW5fTGF0aW5fKlxuICBbMHgwODFBXTogJ0NQMTI1MCcsXG5cbiAgLy8gQXplcmlfQ3lyaWxsaWNfKlxuICBbMHgwODJDXTogJ0NQMTI1MScsXG5cbiAgLy8gU2FtaV9Td2VkZW5fRmlubGFuZF8qXG4gIFsweDA4M0JdOiAnQ1AxMjUyJyxcblxuICAvLyBUYW1hemlnaHRfKlxuICBbMHgwODVGXTogJ0NQMTI1MicsXG5cbiAgLy8gQ2hpbmVzZV9Ib25nX0tvbmdfU3Ryb2tlXypcbiAgWzB4MEMwNF06ICdDUDk1MCcsXG5cbiAgLy8gTW9kZXJuX1NwYW5pc2hfKlxuICBbMHgwQzBBXTogJ0NQMTI1MicsXG5cbiAgLy8gU2VyYmlhbl9DeXJpbGxpY18qXG4gIFsweDBDMUFdOiAnQ1AxMjUxJyxcblxuICAvLyBDaGluZXNlX1RyYWRpdGlvbmFsX1Bpbnlpbl8qXG4gIC8vIENoaW5lc2VfVHJhZGl0aW9uYWxfU3Ryb2tlX09yZGVyXypcbiAgWzB4MTQwNF06ICdDUDk1MCcsXG5cbiAgLy8gQm9zbmlhbl9MYXRpbl8qXG4gIFsweDE0MUFdOiAnQ1AxMjUwJyxcblxuICAvLyBCb3NuaWFuX0N5cmlsbGljXypcbiAgWzB4MjAxQV06ICdDUDEyNTEnLFxuXG4gIC8vIEdlcm1hblxuICAvLyBHZXJtYW5fUGhvbmVCb29rXypcbiAgWzB4MDQwN106ICdDUDEyNTInLFxuXG4gIC8vIEdlb3JnaWFuX01vZGVybl9Tb3J0XypcbiAgWzB4MDQzN106ICdDUDEyNTInXG59O1xuXG5leHBvcnQgY29uc3QgY29kZXBhZ2VCeVNvcnRJZDogeyBba2V5OiBudW1iZXJdOiBFbmNvZGluZyB9ID0ge1xuICBbMzBdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQklOXG4gIFszMV06ICdDUDQzNycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDQzN19DU19BU1xuICBbMzJdOiAnQ1A0MzcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A0MzdfQ0lfQVNcbiAgWzMzXTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX1ByZWZfQ1A0MzdfQ0lfQVNcbiAgWzM0XTogJ0NQNDM3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQNDM3X0NJX0FJXG4gIFs0MF06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9CSU5cbiAgWzQxXTogJ0NQODUwJywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQODUwX0NTX0FTXG4gIFs0Ml06ICdDUDg1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDg1MF9DSV9BU1xuICBbNDNdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DUDg1MF9DSV9BU1xuICBbNDRdOiAnQ1A4NTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1A4NTBfQ0lfQUlcbiAgWzQ5XTogJ0NQODUwJywgLy8gU1FMXzF4Q29tcGF0X0NQODUwX0NJX0FTXG4gIFs1MV06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NTX0FTX0tJX1dJXG4gIFs1Ml06ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxX0NJX0FTX0tJX1dJXG4gIFs1M106ICdDUDEyNTInLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzU0XTogJ0NQMTI1MicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDFfQ0lfQUlfS0lfV0lcbiAgWzU1XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fQ1A4NTBfQ1NfQVNcbiAgWzU2XTogJ0NQODUwJywgLy8gU1FMX0FsdERpY3Rpb25fUHJlZl9DUDg1MF9DSV9BU1xuICBbNTddOiAnQ1A4NTAnLCAvLyBTUUxfQWx0RGljdGlvbl9DUDg1MF9DSV9BSVxuICBbNThdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX1ByZWZfQ1A4NTBfQ0lfQVNcbiAgWzU5XTogJ0NQODUwJywgLy8gU1FMX1NjYW5kaW5hdmlhbl9DUDg1MF9DU19BU1xuICBbNjBdOiAnQ1A4NTAnLCAvLyBTUUxfU2NhbmRpbmF2aWFuX0NQODUwX0NJX0FTXG4gIFs2MV06ICdDUDg1MCcsIC8vIFNRTF9BbHREaWN0aW9uX0NQODUwX0NJX0FTXG4gIFs4MF06ICdDUDEyNTAnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1MF9CSU5cbiAgWzgxXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTBfQ1NfQVNcbiAgWzgyXTogJ0NQMTI1MCcsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzgzXTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg0XTogJ0NQMTI1MCcsIC8vIFNRTF9DemVjaF9DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzg1XTogJ0NQMTI1MCcsIC8vIFNRTF9IdW5nYXJpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs4Nl06ICdDUDEyNTAnLCAvLyBTUUxfSHVuZ2FyaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbODddOiAnQ1AxMjUwJywgLy8gU1FMX1BvbGlzaF9DcDEyNTBfQ1NfQVNfS0lfV0lcbiAgWzg4XTogJ0NQMTI1MCcsIC8vIFNRTF9Qb2xpc2hfQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs4OV06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5MF06ICdDUDEyNTAnLCAvLyBTUUxfUm9tYW5pYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5MV06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Ml06ICdDUDEyNTAnLCAvLyBTUUxfQ3JvYXRpYW5fQ3AxMjUwX0NJX0FTX0tJX1dJXG4gIFs5M106ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmFrX0NwMTI1MF9DU19BU19LSV9XSVxuICBbOTRdOiAnQ1AxMjUwJywgLy8gU1FMX1Nsb3Zha19DcDEyNTBfQ0lfQVNfS0lfV0lcbiAgWzk1XTogJ0NQMTI1MCcsIC8vIFNRTF9TbG92ZW5pYW5fQ3AxMjUwX0NTX0FTX0tJX1dJXG4gIFs5Nl06ICdDUDEyNTAnLCAvLyBTUUxfU2xvdmVuaWFuX0NwMTI1MF9DSV9BU19LSV9XSVxuICBbMTA0XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUxX0JJTlxuICBbMTA1XTogJ0NQMTI1MScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTFfQ1NfQVNcbiAgWzEwNl06ICdDUDEyNTEnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUxX0NJX0FTXG4gIFsxMDddOiAnQ1AxMjUxJywgLy8gU1FMX1VrcmFpbmlhbl9DcDEyNTFfQ1NfQVNfS0lfV0lcbiAgWzEwOF06ICdDUDEyNTEnLCAvLyBTUUxfVWtyYWluaWFuX0NwMTI1MV9DSV9BU19LSV9XSVxuICBbMTEyXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjUzX0JJTlxuICBbMTEzXTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ1NfQVNcbiAgWzExNF06ICdDUDEyNTMnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjUzX0NJX0FTXG4gIFsxMjBdOiAnQ1AxMjUzJywgLy8gU1FMX01peERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjFdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb25fQ1AxMjUzX0NTX0FTXG4gIFsxMjJdOiAnQ1AxMjUzJywgLy8gU1FMX0FsdERpY3Rpb24yX0NQMTI1M19DU19BU1xuICBbMTI0XTogJ0NQMTI1MycsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTNfQ0lfQUlcbiAgWzEyOF06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1NF9CSU5cbiAgWzEyOV06ICdDUDEyNTQnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ3AxMjU0X0NTX0FTX0tJX1dJXG4gIFsxMzBdOiAnQ1AxMjU0JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NwMTI1NF9DSV9BU19LSV9XSVxuICBbMTM2XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF8xMjU1X0JJTlxuICBbMTM3XTogJ0NQMTI1NScsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTVfQ1NfQVNcbiAgWzEzOF06ICdDUDEyNTUnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU1X0NJX0FTXG4gIFsxNDRdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsXzEyNTZfQklOXG4gIFsxNDVdOiAnQ1AxMjU2JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1Nl9DU19BU1xuICBbMTQ2XTogJ0NQMTI1NicsIC8vIFNRTF9MYXRpbjFfR2VuZXJhbF9DUDEyNTZfQ0lfQVNcbiAgWzE1Ml06ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfMTI1N19CSU5cbiAgWzE1M106ICdDUDEyNTcnLCAvLyBTUUxfTGF0aW4xX0dlbmVyYWxfQ1AxMjU3X0NTX0FTXG4gIFsxNTRdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdGluMV9HZW5lcmFsX0NQMTI1N19DSV9BU1xuICBbMTU1XTogJ0NQMTI1NycsIC8vIFNRTF9Fc3Rvbmlhbl9DcDEyNTdfQ1NfQVNfS0lfV0lcbiAgWzE1Nl06ICdDUDEyNTcnLCAvLyBTUUxfRXN0b25pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTddOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNThdOiAnQ1AxMjU3JywgLy8gU1FMX0xhdHZpYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxNTldOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NTX0FTX0tJX1dJXG4gIFsxNjBdOiAnQ1AxMjU3JywgLy8gU1FMX0xpdGh1YW5pYW5fQ3AxMjU3X0NJX0FTX0tJX1dJXG4gIFsxODNdOiAnQ1AxMjUyJywgLy8gU1FMX0RhbmlzaF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg0XTogJ0NQMTI1MicsIC8vIFNRTF9Td2VkaXNoUGhvbmVfUHJlZl9DcDFfQ0lfQVNfS0lfV0lcbiAgWzE4NV06ICdDUDEyNTInLCAvLyBTUUxfU3dlZGlzaFN0ZF9QcmVmX0NwMV9DSV9BU19LSV9XSVxuICBbMTg2XTogJ0NQMTI1MicgLy8gU1FMX0ljZWxhbmRpY19QcmVmX0NwMV9DSV9BU19LSV9XSVxufTtcblxuZXhwb3J0IGNvbnN0IEZsYWdzID0ge1xuICBJR05PUkVfQ0FTRTogMSA8PCAwLFxuICBJR05PUkVfQUNDRU5UOiAxIDw8IDEsXG4gIElHTk9SRV9LQU5BOiAxIDw8IDIsXG4gIElHTk9SRV9XSURUSDogMSA8PCAzLFxuICBCSU5BUlk6IDEgPDwgNCxcbiAgQklOQVJZMjogMSA8PCA1LFxuICBVVEY4OiAxIDw8IDYsXG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGF0aW9uIHtcbiAgZGVjbGFyZSByZWFkb25seSBsY2lkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZmxhZ3M6IG51bWJlcjtcbiAgZGVjbGFyZSByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgc29ydElkOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgY29kZXBhZ2U6IEVuY29kaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgcHJpdmF0ZSBidWZmZXI6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICAgIGxldCBsY2lkID0gKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MEYpIDw8IDE2O1xuICAgIGxjaWQgfD0gYnVmZmVyW29mZnNldCArIDFdIDw8IDg7XG4gICAgbGNpZCB8PSBidWZmZXJbb2Zmc2V0ICsgMF07XG5cbiAgICBsZXQgZmxhZ3MgPSAoYnVmZmVyW29mZnNldCArIDNdICYgMHgwRikgPDwgNDtcbiAgICBmbGFncyB8PSAoYnVmZmVyW29mZnNldCArIDJdICYgMHhGMCkgPj4+IDQ7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gKGJ1ZmZlcltvZmZzZXQgKyAzXSAmIDB4RjApID4+PiA0O1xuXG4gICAgY29uc3Qgc29ydElkID0gYnVmZmVyW29mZnNldCArIDRdO1xuXG4gICAgcmV0dXJuIG5ldyB0aGlzKGxjaWQsIGZsYWdzLCB2ZXJzaW9uLCBzb3J0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGNpZDogbnVtYmVyLCBmbGFnczogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNvcnRJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmxjaWQgPSBsY2lkO1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMuc29ydElkID0gc29ydElkO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MgJiBGbGFncy5VVEY4KSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gJ3V0Zi04JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydElkKSB7XG4gICAgICB0aGlzLmNvZGVwYWdlID0gY29kZXBhZ2VCeVNvcnRJZFt0aGlzLnNvcnRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBsYXN0IDE2IGJpdHMgb2YgdGhlIExDSUQgYXJlIHRoZSBsYW5ndWFnZSBpZC5cbiAgICAgIC8vIFRoZSBmaXJzdCA0IGJpdHMgZGVmaW5lIGFkZGl0aW9uYWwgc29ydCBvcmRlcnMuXG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sY2lkICYgMHhGRkZGO1xuICAgICAgdGhpcy5jb2RlcGFnZSA9IGNvZGVwYWdlQnlMYW5ndWFnZUlkW2xhbmd1YWdlSWRdO1xuICAgIH1cbiAgfVxuXG4gIHRvQnVmZmVyKCk6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG5cbiAgICB0aGlzLmJ1ZmZlclswXSA9IHRoaXMubGNpZCAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMV0gPSAodGhpcy5sY2lkID4+PiA4KSAmIDB4RkY7XG4gICAgdGhpcy5idWZmZXJbMl0gPSAoKHRoaXMubGNpZCA+Pj4gMTYpICYgMHgwRikgfCAoKHRoaXMuZmxhZ3MgJiAweDBGKSA8PCA0KTtcbiAgICB0aGlzLmJ1ZmZlclszXSA9ICgodGhpcy5mbGFncyAmIDB4RjApID4+PiA0KSB8ICgodGhpcy52ZXJzaW9uICYgMHgwRikgPDwgNCk7XG4gICAgdGhpcy5idWZmZXJbNF0gPSB0aGlzLnNvcnRJZCAmIDB4RkY7XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7QUFDTyxNQUFNQSxvQkFBaUQsR0FBQUMsT0FBQSxDQUFBRCxvQkFBQSxHQUFHO0VBQy9EO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQTtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQTtFQUNBO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxPQUFPO0VBRWpCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBLENBQUMsTUFBTSxHQUFHLE9BQU87RUFFakI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsUUFBUTtFQUVsQjtFQUNBO0VBQ0EsQ0FBQyxNQUFNLEdBQUcsT0FBTztFQUVqQjtFQUNBLENBQUMsTUFBTSxHQUFHLFFBQVE7RUFFbEI7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0E7RUFDQSxDQUFDLE1BQU0sR0FBRyxRQUFRO0VBRWxCO0VBQ0EsQ0FBQyxNQUFNLEdBQUc7QUFDWixDQUFDO0FBRU0sTUFBTUUsZ0JBQTZDLEdBQUFELE9BQUEsQ0FBQUMsZ0JBQUEsR0FBRztFQUMzRCxDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxPQUFPO0VBQUU7RUFDZixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsT0FBTztFQUFFO0VBQ2YsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEVBQUUsR0FBRyxRQUFRO0VBQUU7RUFDaEIsQ0FBQyxFQUFFLEdBQUcsUUFBUTtFQUFFO0VBQ2hCLENBQUMsRUFBRSxHQUFHLFFBQVE7RUFBRTtFQUNoQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FBRyxRQUFRO0VBQUU7RUFDakIsQ0FBQyxHQUFHLEdBQUcsUUFBUTtFQUFFO0VBQ2pCLENBQUMsR0FBRyxHQUFHLFFBQVE7RUFBRTtFQUNqQixDQUFDLEdBQUcsR0FB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
\No newline at end of file