@merchi/product-form 1.19.37 → 1.19.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actions/jobs.d.ts +1 -1
- package/lib/components/DropzoneInput.d.ts +3 -1
- package/lib/components/DropzoneInput.js +4 -3
- package/lib/components/DynamicVariationInput.js +3 -1
- package/lib/components/VariationEmbroideryInput.d.ts +8 -0
- package/lib/components/VariationEmbroideryInput.js +419 -0
- package/lib/components/drafts/DraftDesignerSheet.js +50 -3
- package/lib/components/utils.js +2 -2
- package/lib/utils/draftExport.js +8 -1
- package/lib/utils/draftExport.test.js +12 -5
- package/lib/utils/draftTemplates.d.ts +1 -0
- package/lib/utils/draftTemplates.js +39 -7
- package/lib/utils/embroidery.d.ts +26 -0
- package/lib/utils/embroidery.js +98 -0
- package/lib/utils/selections.d.ts +1 -0
- package/lib/utils/selections.js +24 -6
- package/lib/utils/types.d.ts +2 -1
- package/lib/utils/types.js +2 -1
- package/package.json +2 -2
|
@@ -17,6 +17,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
17
17
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
18
18
|
import { BLANK_TEMPLATE_ID, DEFAULT_ARTBOARD, FieldType } from './types';
|
|
19
19
|
import { DEFAULT_DRAFT_FONT, cssFontFamily } from './draftFonts';
|
|
20
|
+
import { embroideryPixels, parseEmbroideryValue } from './embroidery';
|
|
20
21
|
import { productHasGroups } from './products';
|
|
21
22
|
import { pantoneByCode } from './pantoneColours';
|
|
22
23
|
export function productHasDraftTemplates(product) {
|
|
@@ -147,6 +148,12 @@ export function downloadableDraftTemplates(product, formValues) {
|
|
|
147
148
|
if (matched.length) return uniqueFileTemplates(matched);
|
|
148
149
|
return uniqueFileTemplates((product === null || product === void 0 ? void 0 : product.draftTemplates) || []);
|
|
149
150
|
}
|
|
151
|
+
export function canvasKindForField(field) {
|
|
152
|
+
if (parseInt(String(field === null || field === void 0 ? void 0 : field.fieldType), 10) === FieldType.EMBROIDERY) {
|
|
153
|
+
return (field === null || field === void 0 ? void 0 : field.embroideryInputMode) === 'text' ? 'text' : 'image';
|
|
154
|
+
}
|
|
155
|
+
return canvasKindForFieldType(field === null || field === void 0 ? void 0 : field.fieldType);
|
|
156
|
+
}
|
|
150
157
|
export function canvasKindForFieldType(fieldType) {
|
|
151
158
|
switch (parseInt(String(fieldType), 10)) {
|
|
152
159
|
case FieldType.TEXT_INPUT:
|
|
@@ -180,11 +187,25 @@ function optionById(variation, id) {
|
|
|
180
187
|
}
|
|
181
188
|
export function variationCanvasContent(variation) {
|
|
182
189
|
var field = variation === null || variation === void 0 ? void 0 : variation.variationField;
|
|
183
|
-
var kind =
|
|
190
|
+
var kind = canvasKindForField(field);
|
|
184
191
|
if (!kind) return {
|
|
185
192
|
kind: null
|
|
186
193
|
};
|
|
187
194
|
var type = parseInt(String(field.fieldType), 10);
|
|
195
|
+
if (type === FieldType.EMBROIDERY) {
|
|
196
|
+
var parsed = parseEmbroideryValue(variation === null || variation === void 0 ? void 0 : variation.value);
|
|
197
|
+
if (kind === 'image') {
|
|
198
|
+
var file = ((variation === null || variation === void 0 ? void 0 : variation.variationFiles) || [])[0];
|
|
199
|
+
return {
|
|
200
|
+
kind: kind,
|
|
201
|
+
src: (file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.cachedViewUrl) || ''
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
kind: kind,
|
|
206
|
+
text: (parsed === null || parsed === void 0 ? void 0 : parsed.text) || ''
|
|
207
|
+
};
|
|
208
|
+
}
|
|
188
209
|
if (kind === 'text') {
|
|
189
210
|
if (type === FieldType.SELECT || type === FieldType.RADIO || type === FieldType.CHECKBOX) {
|
|
190
211
|
var names = parseSelectedOptionIds(variation.value).map(function (id) {
|
|
@@ -211,10 +232,10 @@ export function variationCanvasContent(variation) {
|
|
|
211
232
|
}
|
|
212
233
|
var _ids = parseSelectedOptionIds(variation.value);
|
|
213
234
|
var _option = _ids.length ? optionById(variation, _ids[0]) : null;
|
|
214
|
-
var
|
|
235
|
+
var _file2 = _option === null || _option === void 0 ? void 0 : _option.linkedFile;
|
|
215
236
|
return {
|
|
216
237
|
kind: kind,
|
|
217
|
-
src: (
|
|
238
|
+
src: (_file2 === null || _file2 === void 0 ? void 0 : _file2.viewUrl) || (_file2 === null || _file2 === void 0 ? void 0 : _file2.cachedViewUrl) || ''
|
|
218
239
|
};
|
|
219
240
|
}
|
|
220
241
|
if (type === FieldType.COLOUR_PICKER) {
|
|
@@ -332,7 +353,7 @@ function isColourKind(kind) {
|
|
|
332
353
|
}
|
|
333
354
|
export function inferArtworkRole(field) {
|
|
334
355
|
var linkedFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
335
|
-
var kind =
|
|
356
|
+
var kind = canvasKindForField(field);
|
|
336
357
|
if (kind === 'image') return 'image';
|
|
337
358
|
if (kind === 'text') return 'text';
|
|
338
359
|
if (!isColourKind(kind)) return 'auto';
|
|
@@ -340,7 +361,7 @@ export function inferArtworkRole(field) {
|
|
|
340
361
|
if (/(text|font|letter|copy)/.test(name)) return 'text_fill';
|
|
341
362
|
if (/(wrist|band|base|body|ground|blank)/.test(name)) return 'body_colour_fill';
|
|
342
363
|
var hasText = linkedFields.some(function (item) {
|
|
343
|
-
return
|
|
364
|
+
return canvasKindForField(item) === 'text';
|
|
344
365
|
});
|
|
345
366
|
return hasText ? 'text_fill' : 'body_colour_fill';
|
|
346
367
|
}
|
|
@@ -357,7 +378,7 @@ export function inferTextTargetFieldId(field, template) {
|
|
|
357
378
|
var binding = bindingForField(fieldBindingsFrom(template), field === null || field === void 0 ? void 0 : field.id);
|
|
358
379
|
if ((binding === null || binding === void 0 ? void 0 : binding.targetFieldId) != null) return Number(binding.targetFieldId);
|
|
359
380
|
var textField = linkedFields.find(function (item) {
|
|
360
|
-
return
|
|
381
|
+
return canvasKindForField(item) === 'text' && (item === null || item === void 0 ? void 0 : item.id) != null;
|
|
361
382
|
});
|
|
362
383
|
return (textField === null || textField === void 0 ? void 0 : textField.id) != null ? Number(textField.id) : undefined;
|
|
363
384
|
}
|
|
@@ -555,6 +576,17 @@ export function seedOrSyncCanvas(existing, template, variations) {
|
|
|
555
576
|
return obj.merchiFieldId === fieldId;
|
|
556
577
|
});
|
|
557
578
|
if (found) {
|
|
579
|
+
if (parseInt(String(field === null || field === void 0 ? void 0 : field.fieldType), 10) === FieldType.EMBROIDERY) {
|
|
580
|
+
var parsed = parseEmbroideryValue(variation === null || variation === void 0 ? void 0 : variation.value);
|
|
581
|
+
var px = embroideryPixels(Number(parsed === null || parsed === void 0 ? void 0 : parsed.widthMm), Number(parsed === null || parsed === void 0 ? void 0 : parsed.heightMm), template);
|
|
582
|
+
if (px) {
|
|
583
|
+
found.width = px.width;
|
|
584
|
+
found.height = px.height;
|
|
585
|
+
}
|
|
586
|
+
if (content.kind === 'text') found.text = content.text || found.text;
|
|
587
|
+
if (content.kind === 'image' && content.src) found.src = content.src;
|
|
588
|
+
return 0; // continue
|
|
589
|
+
}
|
|
558
590
|
if (content.kind === 'text' && content.text != null) {
|
|
559
591
|
found.text = content.text;
|
|
560
592
|
Object.assign(found, fitTextBox(found));
|
|
@@ -633,4 +665,4 @@ export function printAreaGuides(template) {
|
|
|
633
665
|
return bboxToPixels(bbox, width, height);
|
|
634
666
|
});
|
|
635
667
|
}
|
|
636
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCTEFOS19URU1QTEFURV9JRCIsIkRFRkFVTFRfQVJUQk9BUkQiLCJGaWVsZFR5cGUiLCJERUZBVUxUX0RSQUZUX0ZPTlQiLCJjc3NGb250RmFtaWx5IiwicHJvZHVjdEhhc0dyb3VwcyIsInBhbnRvbmVCeUNvZGUiLCJwcm9kdWN0SGFzRHJhZnRUZW1wbGF0ZXMiLCJwcm9kdWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiZHJhZnRUZW1wbGF0ZXMiLCJsZW5ndGgiLCJwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduIiwiQm9vbGVhbiIsIm5lZWRzRHJhZnRpbmciLCJhbGxvd0NsaWVudERyYWZ0Q29udHJpYnV0aW9uIiwicHJvZHVjdEhhc1ZhcmlhdGlvbkdyb3VwcyIsImRlc2lnbkdyb3VwQ291bnQiLCJmb3JtVmFsdWVzIiwiZ3JvdXBzIiwidmFyaWF0aW9uc0dyb3VwcyIsInBhcnNlU2VsZWN0ZWRPcHRpb25JZHMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIlN0cmluZyIsInNwbGl0IiwibWFwIiwicyIsInBhcnNlSW50IiwidHJpbSIsImZpbHRlciIsIm4iLCJpc05hTiIsInNlbGVjdGVkT3B0aW9uSWRzRnJvbVZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zIiwiaWRzIiwiU2V0IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsImRvbmUiLCJ2YXJpYXRpb24iLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaWQiLCJhZGQiLCJlcnIiLCJlIiwiZiIsImlzVGVtcGxhdGVWaXNpYmxlIiwidGVtcGxhdGUiLCJzZWxlY3RlZE9wdGlvbklkcyIsInJlcXVpcmVkIiwic2VsZWN0ZWRCeVZhcmlhdGlvbkZpZWxkT3B0aW9ucyIsImV2ZXJ5Iiwib3B0IiwiaGFzIiwidmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwIiwiaW5kZXBlbmRlbnRWYXJpYXRpb25zIiwiZ3JvdXBWYXJpYXRpb25zIiwic2VsZWN0ZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJibGFua1RlbXBsYXRlIiwiX3Byb2R1Y3QkZHJhZnRUZW1wbGF0IiwiX3Byb2R1Y3QkZmVhdHVyZUltYWdlIiwiX3Byb2R1Y3QkZHJhZnRUZW1wbGF0MiIsIl9wcm9kdWN0JGZlYXR1cmVJbWFnZTIiLCJmcm9tUHJvZHVjdCIsIk51bWJlciIsIndpZHRoIiwiZmVhdHVyZUltYWdlIiwiaGVpZ2h0IiwibmFtZSIsImZpbGUiLCJlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkcyIsInRlbXBsYXRlc0Zvckdyb3VwIiwidmlzaWJsZSIsInRlbXBsYXRlSGFzRmlsZSIsImRvd25sb2FkVXJsIiwiY2FjaGVkRG93bmxvYWRVcmwiLCJ2aWV3VXJsIiwiY2FjaGVkVmlld1VybCIsInVuaXF1ZUZpbGVUZW1wbGF0ZXMiLCJ0ZW1wbGF0ZXMiLCJzZWVuIiwicmVzdWx0IiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImtleSIsInB1c2giLCJkb3dubG9hZGFibGVEcmFmdFRlbXBsYXRlcyIsImluZGVwZW5kZW50IiwibWF0Y2hlZCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJncm91cCIsImFwcGx5IiwiY2FudmFzS2luZEZvckZpZWxkVHlwZSIsImZpZWxkVHlwZSIsIlRFWFRfSU5QVVQiLCJURVhUX0FSRUEiLCJOVU1CRVJfSU5QVVQiLCJTRUxFQ1QiLCJSQURJTyIsIkNIRUNLQk9YIiwiRklMRV9VUExPQUQiLCJJTUFHRV9TRUxFQ1QiLCJDT0xPVVJfUElDS0VSIiwiQ09MT1VSX1NFTEVDVCIsIkNPTE9VUl9FWFRSQUNUIiwiUEFOVE9ORV9DT0xPVVJfU0VMRUNUIiwib3B0aW9uQnlJZCIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsImZyb21TZWxlY3RhYmxlIiwic2VsZWN0YWJsZU9wdGlvbnMiLCJmaW5kIiwib3B0aW9uIiwib3B0aW9uSWQiLCJ2YXJpYXRpb25GaWVsZCIsIm9wdGlvbnMiLCJ2YXJpYXRpb25DYW52YXNDb250ZW50IiwiZmllbGQiLCJraW5kIiwidHlwZSIsIm5hbWVzIiwiX29wdGlvbkJ5SWQiLCJ0ZXh0Iiwiam9pbiIsInZhcmlhdGlvbkZpbGVzIiwic3JjIiwibGlua2VkRmlsZSIsImZpbGwiLCJub3JtYWxpc2VDc3NDb2xvdXIiLCJhbGxvd0FsbFBhbnRvbmVzIiwiX3BhbnRvbmVCeUNvZGUiLCJoZXgiLCJzZWxlY3RlZE9wdGlvbnMiLCJjb2xvdXIiLCJIRVhfQ09MT1VSIiwiQ1NTX0ZVTkNUSU9OX0NPTE9VUiIsIl9sZW4iLCJhcmd1bWVudHMiLCJjYW5kaWRhdGVzIiwiX2tleSIsIl9pIiwiX2NhbmRpZGF0ZXMiLCJyYXciLCJ0ZXN0IiwibGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlIiwibGlua2VkSWRzIiwic2l6ZSIsIl92YXJpYXRpb24kdmFyaWF0aW9uRjIiLCJ2YXJpYXRpb25zRm9yR3JvdXAiLCJncm91cEluZGV4IiwiX2Zvcm1WYWx1ZXMkdmFyaWF0aW9uIiwiaXNWYWxpZEJib3giLCJiYm94IiwiX2Jib3gkbWFwIiwiX2Jib3gkbWFwMiIsIl9zbGljZWRUb0FycmF5IiwieCIsInkiLCJ3IiwiaCIsInJlZ2lvbnNGb3JSb2xlIiwiY3VzdG9taXNhdGlvbk1hcCIsInJvbGUiLCJyZWdpb25zIiwicmVnaW9uIiwiYmJveFRvUGl4ZWxzIiwiX2Jib3giLCJmaWVsZEJpbmRpbmdzRnJvbSIsIl90ZW1wbGF0ZSRjdXN0b21pc2F0aSIsImZpZWxkQmluZGluZ3MiLCJpdGVtIiwiZmllbGRJZCIsImJpbmRpbmdGb3JGaWVsZCIsImJpbmRpbmdzIiwiZmllbGROYW1lIiwidG9Mb3dlckNhc2UiLCJpc0NvbG91cktpbmQiLCJpbmZlckFydHdvcmtSb2xlIiwibGlua2VkRmllbGRzIiwiaGFzVGV4dCIsInNvbWUiLCJyZXNvbHZlQXJ0d29ya1JvbGUiLCJpbmZlcnJlZCIsImJpbmRpbmciLCJpbmZlclRleHRUYXJnZXRGaWVsZElkIiwidGFyZ2V0RmllbGRJZCIsInRleHRGaWVsZCIsImZpdEluc2lkZSIsImJveCIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJsb2NrQXNwZWN0UmF0aW8iLCJfb2JqZWN0U3ByZWFkIiwic2NhbGUiLCJNYXRoIiwibWluIiwic2hvdWxkTG9ja0ltYWdlQXNwZWN0IiwiYXNwZWN0UmF0aW9Mb2NrIiwiaXNCYWNrZ3JvdW5kRmlsbCIsIm9iaiIsImlzRnVsbEFydGJvYXJkRmlsbCIsImFydFdpZHRoIiwiYXJ0SGVpZ2h0IiwibWVhc3VyZURyYWZ0VGV4dCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsImxpbmVzIiwibWF4IiwiZG9jdW1lbnQiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZvbnQiLCJsaW5lIiwibWVhc3VyZVRleHQiLCJjZWlsIiwiZml0VGV4dEJveCIsIm1lYXN1cmVkIiwicHJldlciLCJwcmV2SCIsInBsYWNlbWVudEJveGVzIiwiYm9keSIsInByaW50IiwicGxhY2Vob2xkZXJzIiwiZGVmYXVsdFBsYWNlbWVudCIsImluZGV4IiwicGFkIiwiY3JlYXRlT2JqZWN0SWQiLCJEYXRlIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsInNlZWRPclN5bmNDYW52YXMiLCJleGlzdGluZyIsIm9iamVjdHMiLCJkZXRhY2hlZCIsImRldGFjaGVkRmllbGRJZHMiLCJsaW5rZWQiLCJ1c2VkUmVnaW9ucyIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJfbG9vcCIsImZpbmRJbmRleCIsIm1lcmNoaUZpZWxkSWQiLCJzcGxpY2UiLCJhcHBseUNvbG91clRvVGV4dCIsImNvbG91ckZpZWxkSWQiLCJ0ZXh0T2JqIiwicGxhY2VPYmplY3QiLCJjb250ZW50IiwiYm94ZXMiLCJyZWdpb25JbmRleCIsInBsYWNlIiwibmV4dCIsImFydHdvcmtSb2xlIiwibG9ja2VkIiwicm90YXRpb24iLCJzY2FsZVgiLCJzY2FsZVkiLCJyb3VuZCIsIk9iamVjdCIsImFzc2lnbiIsInVuc2hpZnQiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiX2xvb3AyIiwiZm91bmQiLCJfcmV0IiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsInRhcmdldElkIiwiZnJvbSIsImRldGFjaEZpZWxkIiwic3RhdGUiLCJvYmplY3RJZCIsInRhcmdldCIsImluY2x1ZGVzIiwicHJpbnRBcmVhR3VpZGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2RyYWZ0VGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJMQU5LX1RFTVBMQVRFX0lELFxuICBERUZBVUxUX0FSVEJPQVJELFxuICBEcmFmdEFydHdvcmtSb2xlLFxuICBEcmFmdENhbnZhc09iamVjdCxcbiAgRHJhZnRDYW52YXNPYmplY3RUeXBlLFxuICBEcmFmdENhbnZhc1N0YXRlLFxuICBEcmFmdEZpZWxkQmluZGluZyxcbiAgRmllbGRUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERFRkFVTFRfRFJBRlRfRk9OVCwgY3NzRm9udEZhbWlseSB9IGZyb20gJy4vZHJhZnRGb250cyc7XG5pbXBvcnQgeyBwcm9kdWN0SGFzR3JvdXBzIH0gZnJvbSAnLi9wcm9kdWN0cyc7XG5pbXBvcnQgeyBwYW50b25lQnlDb2RlIH0gZnJvbSAnLi9wYW50b25lQ29sb3Vycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0SGFzRHJhZnRUZW1wbGF0ZXMocHJvZHVjdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHByb2R1Y3Q/LmRyYWZ0VGVtcGxhdGVzKSAmJiBwcm9kdWN0LmRyYWZ0VGVtcGxhdGVzLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduKHByb2R1Y3Q6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBwcm9kdWN0Py5uZWVkc0RyYWZ0aW5nXG4gICAgJiYgcHJvZHVjdD8uYWxsb3dDbGllbnREcmFmdENvbnRyaWJ1dGlvblxuICAgICYmIHByb2R1Y3RIYXNEcmFmdFRlbXBsYXRlcyhwcm9kdWN0KSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RIYXNWYXJpYXRpb25Hcm91cHMocHJvZHVjdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9kdWN0SGFzR3JvdXBzKHByb2R1Y3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzaWduR3JvdXBDb3VudChwcm9kdWN0OiBhbnksIGZvcm1WYWx1ZXM6IGFueSk6IG51bWJlciB7XG4gIGlmICghcHJvZHVjdEhhc1ZhcmlhdGlvbkdyb3Vwcyhwcm9kdWN0KSkgcmV0dXJuIDE7XG4gIGNvbnN0IGdyb3VwcyA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnNHcm91cHM7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGdyb3VwcykgJiYgZ3JvdXBzLmxlbmd0aCA+IDAgPyBncm91cHMubGVuZ3RoIDogMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VsZWN0ZWRPcHRpb25JZHModmFsdWU6IGFueSk6IG51bWJlcltdIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gW107XG4gIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKChzKSA9PiBwYXJzZUludChzLnRyaW0oKSwgMTApKVxuICAgIC5maWx0ZXIoKG4pID0+ICFpc05hTihuKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RlZE9wdGlvbklkc0Zyb21WYXJpYXRpb25zKHZhcmlhdGlvbnM6IGFueVtdKTogU2V0PG51bWJlcj4ge1xuICBjb25zdCBpZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCB2YXJpYXRpb24gb2YgdmFyaWF0aW9ucyB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgaWQgb2YgcGFyc2VTZWxlY3RlZE9wdGlvbklkcyh2YXJpYXRpb24/LnZhbHVlKSkge1xuICAgICAgaWRzLmFkZChpZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlVmlzaWJsZShcbiAgdGVtcGxhdGU6IGFueSxcbiAgc2VsZWN0ZWRPcHRpb25JZHM6IFNldDxudW1iZXI+LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJlcXVpcmVkID0gdGVtcGxhdGU/LnNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnM7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXF1aXJlZCkgfHwgcmVxdWlyZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHJlcXVpcmVkLmV2ZXJ5KChvcHQ6IGFueSkgPT4gb3B0Py5pZCAmJiBzZWxlY3RlZE9wdGlvbklkcy5oYXMob3B0LmlkKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlVGVtcGxhdGVzRm9yR3JvdXAoXG4gIHByb2R1Y3Q6IGFueSxcbiAgaW5kZXBlbmRlbnRWYXJpYXRpb25zOiBhbnlbXSxcbiAgZ3JvdXBWYXJpYXRpb25zOiBhbnlbXSxcbik6IGFueVtdIHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbklkc0Zyb21WYXJpYXRpb25zKFtcbiAgICAuLi4oaW5kZXBlbmRlbnRWYXJpYXRpb25zIHx8IFtdKSxcbiAgICAuLi4oZ3JvdXBWYXJpYXRpb25zIHx8IFtdKSxcbiAgXSk7XG4gIHJldHVybiAocHJvZHVjdD8uZHJhZnRUZW1wbGF0ZXMgfHwgW10pLmZpbHRlcigodGVtcGxhdGU6IGFueSkgPT5cbiAgICBpc1RlbXBsYXRlVmlzaWJsZSh0ZW1wbGF0ZSwgc2VsZWN0ZWQpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibGFua1RlbXBsYXRlKHByb2R1Y3Q/OiBhbnkpIHtcbiAgY29uc3QgZnJvbVByb2R1Y3QgPSBOdW1iZXIocHJvZHVjdD8uZHJhZnRUZW1wbGF0ZXM/LlswXT8ud2lkdGgpXG4gICAgfHwgTnVtYmVyKHByb2R1Y3Q/LmZlYXR1cmVJbWFnZT8ud2lkdGgpXG4gICAgfHwgREVGQVVMVF9BUlRCT0FSRC53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gTnVtYmVyKHByb2R1Y3Q/LmRyYWZ0VGVtcGxhdGVzPy5bMF0/LmhlaWdodClcbiAgICB8fCBOdW1iZXIocHJvZHVjdD8uZmVhdHVyZUltYWdlPy5oZWlnaHQpXG4gICAgfHwgREVGQVVMVF9BUlRCT0FSRC5oZWlnaHQ7XG4gIHJldHVybiB7XG4gICAgaWQ6IEJMQU5LX1RFTVBMQVRFX0lELFxuICAgIG5hbWU6ICdBcnR3b3JrJyxcbiAgICB3aWR0aDogZnJvbVByb2R1Y3QsXG4gICAgaGVpZ2h0LFxuICAgIGZpbGU6IG51bGwsXG4gICAgZWRpdGVkQnlWYXJpYXRpb25GaWVsZHM6IFtdLFxuICAgIHNlbGVjdGVkQnlWYXJpYXRpb25GaWVsZE9wdGlvbnM6IFtdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVzRm9yR3JvdXAoXG4gIHByb2R1Y3Q6IGFueSxcbiAgaW5kZXBlbmRlbnRWYXJpYXRpb25zOiBhbnlbXSxcbiAgZ3JvdXBWYXJpYXRpb25zOiBhbnlbXSxcbik6IGFueVtdIHtcbiAgY29uc3QgdmlzaWJsZSA9IHZpc2libGVUZW1wbGF0ZXNGb3JHcm91cChcbiAgICBwcm9kdWN0LFxuICAgIGluZGVwZW5kZW50VmFyaWF0aW9ucyxcbiAgICBncm91cFZhcmlhdGlvbnMsXG4gICk7XG4gIHJldHVybiB2aXNpYmxlLmxlbmd0aCA/IHZpc2libGUgOiBbYmxhbmtUZW1wbGF0ZShwcm9kdWN0KV07XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlSGFzRmlsZSh0ZW1wbGF0ZTogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGZpbGUgPSB0ZW1wbGF0ZT8uZmlsZTtcbiAgaWYgKCFmaWxlKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGZpbGUuaWRcbiAgICB8fCBmaWxlLmRvd25sb2FkVXJsXG4gICAgfHwgZmlsZS5jYWNoZWREb3dubG9hZFVybFxuICAgIHx8IGZpbGUudmlld1VybFxuICAgIHx8IGZpbGUuY2FjaGVkVmlld1VybCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gdW5pcXVlRmlsZVRlbXBsYXRlcyh0ZW1wbGF0ZXM6IGFueVtdKTogYW55W10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgZm9yIChjb25zdCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICBpZiAoIXRlbXBsYXRlSGFzRmlsZSh0ZW1wbGF0ZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZpbGUgPSB0ZW1wbGF0ZS5maWxlIHx8IHt9O1xuICAgIGNvbnN0IGtleSA9IHRlbXBsYXRlPy5pZCAhPSBudWxsXG4gICAgICA/IGBpZDoke3RlbXBsYXRlLmlkfWBcbiAgICAgIDogYGZpbGU6JHtmaWxlLmlkIHx8IGZpbGUuZG93bmxvYWRVcmwgfHwgZmlsZS52aWV3VXJsfWA7XG4gICAgaWYgKHNlZW4uaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKGtleSk7XG4gICAgcmVzdWx0LnB1c2godGVtcGxhdGUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBCbGFuayB0ZW1wbGF0ZXMgdGhlIGN1c3RvbWVyIGNhbiBkb3dubG9hZCBmb3IgdGhlIG9wdGlvbnMgY3VycmVudGx5IHNlbGVjdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkYWJsZURyYWZ0VGVtcGxhdGVzKHByb2R1Y3Q6IGFueSwgZm9ybVZhbHVlczogYW55KTogYW55W10ge1xuICBjb25zdCBpbmRlcGVuZGVudCA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnMgfHwgW107XG4gIGNvbnN0IGdyb3VwcyA9IHByb2R1Y3RIYXNWYXJpYXRpb25Hcm91cHMocHJvZHVjdClcbiAgICAmJiBBcnJheS5pc0FycmF5KGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnNHcm91cHMpXG4gICAgJiYgZm9ybVZhbHVlcy52YXJpYXRpb25zR3JvdXBzLmxlbmd0aFxuICAgID8gZm9ybVZhbHVlcy52YXJpYXRpb25zR3JvdXBzXG4gICAgOiBbe31dO1xuICBjb25zdCBtYXRjaGVkOiBhbnlbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgIG1hdGNoZWQucHVzaCguLi52aXNpYmxlVGVtcGxhdGVzRm9yR3JvdXAoXG4gICAgICBwcm9kdWN0LFxuICAgICAgaW5kZXBlbmRlbnQsXG4gICAgICBncm91cD8udmFyaWF0aW9ucyB8fCBbXSxcbiAgICApKTtcbiAgfVxuICBpZiAobWF0Y2hlZC5sZW5ndGgpIHJldHVybiB1bmlxdWVGaWxlVGVtcGxhdGVzKG1hdGNoZWQpO1xuICByZXR1cm4gdW5pcXVlRmlsZVRlbXBsYXRlcyhwcm9kdWN0Py5kcmFmdFRlbXBsYXRlcyB8fCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW52YXNLaW5kRm9yRmllbGRUeXBlKFxuICBmaWVsZFR5cGU6IGFueSxcbik6IERyYWZ0Q2FudmFzT2JqZWN0VHlwZSB8IG51bGwge1xuICBzd2l0Y2ggKHBhcnNlSW50KFN0cmluZyhmaWVsZFR5cGUpLCAxMCkpIHtcbiAgICBjYXNlIEZpZWxkVHlwZS5URVhUX0lOUFVUOlxuICAgIGNhc2UgRmllbGRUeXBlLlRFWFRfQVJFQTpcbiAgICBjYXNlIEZpZWxkVHlwZS5OVU1CRVJfSU5QVVQ6XG4gICAgY2FzZSBGaWVsZFR5cGUuU0VMRUNUOlxuICAgIGNhc2UgRmllbGRUeXBlLlJBRElPOlxuICAgIGNhc2UgRmllbGRUeXBlLkNIRUNLQk9YOlxuICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICBjYXNlIEZpZWxkVHlwZS5GSUxFX1VQTE9BRDpcbiAgICBjYXNlIEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1Q6XG4gICAgICByZXR1cm4gJ2ltYWdlJztcbiAgICBjYXNlIEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSOlxuICAgIGNhc2UgRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1Q6XG4gICAgY2FzZSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1Q6XG4gICAgY2FzZSBGaWVsZFR5cGUuUEFOVE9ORV9DT0xPVVJfU0VMRUNUOlxuICAgICAgcmV0dXJuICdyZWN0JztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gb3B0aW9uQnlJZCh2YXJpYXRpb246IGFueSwgaWQ6IG51bWJlcik6IGFueSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZyb21TZWxlY3RhYmxlID0gKHZhcmlhdGlvbj8uc2VsZWN0YWJsZU9wdGlvbnMgfHwgW10pLmZpbmQoXG4gICAgKG9wdGlvbjogYW55KSA9PiBvcHRpb24ub3B0aW9uSWQgPT09IGlkIHx8IG9wdGlvbi5pZCA9PT0gaWRcbiAgKTtcbiAgaWYgKGZyb21TZWxlY3RhYmxlKSByZXR1cm4gZnJvbVNlbGVjdGFibGU7XG4gIHJldHVybiAodmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8ub3B0aW9ucyB8fCBbXSkuZmluZChcbiAgICAob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5pZCA9PT0gaWQgfHwgb3B0aW9uLm9wdGlvbklkID09PSBpZFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWF0aW9uQ2FudmFzQ29udGVudCh2YXJpYXRpb246IGFueSk6IHtcbiAga2luZDogRHJhZnRDYW52YXNPYmplY3RUeXBlIHwgbnVsbDtcbiAgdGV4dD86IHN0cmluZztcbiAgc3JjPzogc3RyaW5nO1xuICBmaWxsPzogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZDtcbiAgY29uc3Qga2luZCA9IGNhbnZhc0tpbmRGb3JGaWVsZFR5cGUoZmllbGQ/LmZpZWxkVHlwZSk7XG4gIGlmICgha2luZCkgcmV0dXJuIHsga2luZDogbnVsbCB9O1xuXG4gIGNvbnN0IHR5cGUgPSBwYXJzZUludChTdHJpbmcoZmllbGQuZmllbGRUeXBlKSwgMTApO1xuXG4gIGlmIChraW5kID09PSAndGV4dCcpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSBGaWVsZFR5cGUuU0VMRUNUXG4gICAgICB8fCB0eXBlID09PSBGaWVsZFR5cGUuUkFESU9cbiAgICAgIHx8IHR5cGUgPT09IEZpZWxkVHlwZS5DSEVDS0JPWFxuICAgICkge1xuICAgICAgY29uc3QgbmFtZXMgPSBwYXJzZVNlbGVjdGVkT3B0aW9uSWRzKHZhcmlhdGlvbi52YWx1ZSlcbiAgICAgICAgLm1hcCgoaWQpID0+IG9wdGlvbkJ5SWQodmFyaWF0aW9uLCBpZCk/LnZhbHVlKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHsga2luZCwgdGV4dDogbmFtZXMuam9pbignLCAnKSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2luZCxcbiAgICAgIHRleHQ6IHZhcmlhdGlvbj8udmFsdWUgIT0gbnVsbCAmJiB2YXJpYXRpb24udmFsdWUgIT09ICcnXG4gICAgICAgID8gU3RyaW5nKHZhcmlhdGlvbi52YWx1ZSlcbiAgICAgICAgOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09ICdpbWFnZScpIHtcbiAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkZJTEVfVVBMT0FEKSB7XG4gICAgICBjb25zdCBmaWxlID0gKHZhcmlhdGlvbj8udmFyaWF0aW9uRmlsZXMgfHwgW10pWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZCxcbiAgICAgICAgc3JjOiBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmNhY2hlZFZpZXdVcmwgfHwgJycsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpZHMgPSBwYXJzZVNlbGVjdGVkT3B0aW9uSWRzKHZhcmlhdGlvbi52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uID0gaWRzLmxlbmd0aCA/IG9wdGlvbkJ5SWQodmFyaWF0aW9uLCBpZHNbMF0pIDogbnVsbDtcbiAgICBjb25zdCBmaWxlID0gb3B0aW9uPy5saW5rZWRGaWxlO1xuICAgIHJldHVybiB7IGtpbmQsIHNyYzogZmlsZT8udmlld1VybCB8fCBmaWxlPy5jYWNoZWRWaWV3VXJsIHx8ICcnIH07XG4gIH1cblxuICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9QSUNLRVIpIHtcbiAgICByZXR1cm4geyBraW5kLCBmaWxsOiBub3JtYWxpc2VDc3NDb2xvdXIodmFyaWF0aW9uPy52YWx1ZSkgfHwgJyMwMDAwMDAnIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5QQU5UT05FX0NPTE9VUl9TRUxFQ1QgJiYgZmllbGQ/LmFsbG93QWxsUGFudG9uZXMpIHtcbiAgICByZXR1cm4geyBraW5kLCBmaWxsOiBwYW50b25lQnlDb2RlKHZhcmlhdGlvbj8udmFsdWUpPy5oZXggfHwgJyNjY2NjY2MnIH07XG4gIH1cbiAgY29uc3QgaWRzID0gcGFyc2VTZWxlY3RlZE9wdGlvbklkcyh2YXJpYXRpb24udmFsdWUpO1xuICBjb25zdCBvcHRpb24gPSBpZHMubGVuZ3RoID8gb3B0aW9uQnlJZCh2YXJpYXRpb24sIGlkc1swXSkgOiBudWxsO1xuICBjb25zdCBzZWxlY3RlZCA9ICh2YXJpYXRpb24/LnNlbGVjdGVkT3B0aW9ucyB8fCBbXSlbMF07XG4gIHJldHVybiB7XG4gICAga2luZCxcbiAgICBmaWxsOiBub3JtYWxpc2VDc3NDb2xvdXIoXG4gICAgICBvcHRpb24/LmNvbG91cixcbiAgICAgIHNlbGVjdGVkPy5jb2xvdXIsXG4gICAgICBvcHRpb24/LnZhbHVlLFxuICAgICAgc2VsZWN0ZWQ/LnZhbHVlLFxuICAgICAgdmFyaWF0aW9uPy52YWx1ZSxcbiAgICApLFxuICB9O1xufVxuXG5jb25zdCBIRVhfQ09MT1VSID0gL14jKFswLTlhLWZdezN9fFswLTlhLWZdezZ9fFswLTlhLWZdezh9KSQvaTtcbmNvbnN0IENTU19GVU5DVElPTl9DT0xPVVIgPSAvXihyZ2JhP3xoc2xhPylcXCgvaTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZUNzc0NvbG91ciguLi5jYW5kaWRhdGVzOiBhbnlbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgY29udGludWU7XG4gICAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XG4gICAgaWYgKCFyYXcgfHwgL15cXGQrJC8udGVzdChyYXcpKSBjb250aW51ZTtcbiAgICBpZiAoSEVYX0NPTE9VUi50ZXN0KHJhdykpIHtcbiAgICAgIGlmIChyYXcubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHJldHVybiBgIyR7cmF3WzFdfSR7cmF3WzFdfSR7cmF3WzJdfSR7cmF3WzJdfSR7cmF3WzNdfSR7cmF3WzNdfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICBpZiAoQ1NTX0ZVTkNUSU9OX0NPTE9VUi50ZXN0KHJhdykpIHJldHVybiByYXc7XG4gICAgaWYgKC9eW2Etel1bYS16XFxzLV17Mix9JC9pLnRlc3QocmF3KSkgcmV0dXJuIHJhdztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlKFxuICB0ZW1wbGF0ZTogYW55LFxuICB2YXJpYXRpb25zOiBhbnlbXSxcbik6IGFueVtdIHtcbiAgY29uc3QgbGlua2VkSWRzID0gbmV3IFNldChcbiAgICAodGVtcGxhdGU/LmVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzIHx8IFtdKVxuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4gZmllbGQ/LmlkKVxuICAgICAgLmZpbHRlcigoaWQ6IGFueSkgPT4gaWQgIT0gbnVsbClcbiAgKTtcbiAgaWYgKCFsaW5rZWRJZHMuc2l6ZSkgcmV0dXJuIFtdO1xuICByZXR1cm4gKHZhcmlhdGlvbnMgfHwgW10pLmZpbHRlcigodmFyaWF0aW9uKSA9PlxuICAgIGxpbmtlZElkcy5oYXModmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uaWQpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYXRpb25zRm9yR3JvdXAoXG4gIGZvcm1WYWx1ZXM6IGFueSxcbiAgZ3JvdXBJbmRleDogbnVtYmVyLFxuKTogYW55W10ge1xuICBjb25zdCBpbmRlcGVuZGVudCA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnMgfHwgW107XG4gIGNvbnN0IGdyb3VwID0gZm9ybVZhbHVlcz8udmFyaWF0aW9uc0dyb3Vwcz8uW2dyb3VwSW5kZXhdPy52YXJpYXRpb25zIHx8IFtdO1xuICByZXR1cm4gWy4uLmluZGVwZW5kZW50LCAuLi5ncm91cF07XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRCYm94KGJib3g6IGFueSk6IGJib3ggaXMgbnVtYmVyW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkgfHwgYmJveC5sZW5ndGggIT09IDQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveC5tYXAoTnVtYmVyKTtcbiAgcmV0dXJuIHcgPiAwICYmIGggPiAwICYmIHggPj0gMCAmJiB4IDw9IDEgJiYgeSA+PSAwICYmIHkgPD0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbnNGb3JSb2xlKGN1c3RvbWlzYXRpb25NYXA6IGFueSwgcm9sZTogc3RyaW5nKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHJlZ2lvbnMgPSBjdXN0b21pc2F0aW9uTWFwPy5yZWdpb25zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVnaW9ucykpIHJldHVybiBbXTtcbiAgcmV0dXJuIHJlZ2lvbnNcbiAgICAuZmlsdGVyKChyZWdpb246IGFueSkgPT4gcmVnaW9uPy5yb2xlID09PSByb2xlICYmIGlzVmFsaWRCYm94KHJlZ2lvbi5iYm94KSlcbiAgICAubWFwKChyZWdpb246IGFueSkgPT4gcmVnaW9uLmJib3gubWFwKE51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmJveFRvUGl4ZWxzKFxuICBiYm94OiBudW1iZXJbXSxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDtcbiAgcmV0dXJuIHtcbiAgICB4OiB4ICogd2lkdGgsXG4gICAgeTogeSAqIGhlaWdodCxcbiAgICB3aWR0aDogdyAqIHdpZHRoLFxuICAgIGhlaWdodDogaCAqIGhlaWdodCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkQmluZGluZ3NGcm9tKHRlbXBsYXRlOiBhbnkpOiBEcmFmdEZpZWxkQmluZGluZ1tdIHtcbiAgY29uc3QgcmF3ID0gdGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXA/LmZpZWxkQmluZGluZ3M7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXcpKSByZXR1cm4gW107XG4gIHJldHVybiByYXcuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gJiYgaXRlbS5maWVsZElkICE9IG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0ZvckZpZWxkKFxuICBiaW5kaW5nczogRHJhZnRGaWVsZEJpbmRpbmdbXSxcbiAgZmllbGRJZDogYW55LFxuKTogRHJhZnRGaWVsZEJpbmRpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBpZCA9IE51bWJlcihmaWVsZElkKTtcbiAgcmV0dXJuIGJpbmRpbmdzLmZpbmQoKGl0ZW0pID0+IE51bWJlcihpdGVtLmZpZWxkSWQpID09PSBpZCk7XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZShmaWVsZDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyhmaWVsZD8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gaXNDb2xvdXJLaW5kKGtpbmQ6IERyYWZ0Q2FudmFzT2JqZWN0VHlwZSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtpbmQgPT09ICdyZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmVyQXJ0d29ya1JvbGUoXG4gIGZpZWxkOiBhbnksXG4gIGxpbmtlZEZpZWxkczogYW55W10gPSBbXSxcbik6IERyYWZ0QXJ0d29ya1JvbGUge1xuICBjb25zdCBraW5kID0gY2FudmFzS2luZEZvckZpZWxkVHlwZShmaWVsZD8uZmllbGRUeXBlKTtcbiAgaWYgKGtpbmQgPT09ICdpbWFnZScpIHJldHVybiAnaW1hZ2UnO1xuICBpZiAoa2luZCA9PT0gJ3RleHQnKSByZXR1cm4gJ3RleHQnO1xuICBpZiAoIWlzQ29sb3VyS2luZChraW5kKSkgcmV0dXJuICdhdXRvJztcbiAgY29uc3QgbmFtZSA9IGZpZWxkTmFtZShmaWVsZCk7XG4gIGlmICgvKHRleHR8Zm9udHxsZXR0ZXJ8Y29weSkvLnRlc3QobmFtZSkpIHJldHVybiAndGV4dF9maWxsJztcbiAgaWYgKC8od3Jpc3R8YmFuZHxiYXNlfGJvZHl8Z3JvdW5kfGJsYW5rKS8udGVzdChuYW1lKSkgcmV0dXJuICdib2R5X2NvbG91cl9maWxsJztcbiAgY29uc3QgaGFzVGV4dCA9IGxpbmtlZEZpZWxkcy5zb21lKFxuICAgIChpdGVtKSA9PiBjYW52YXNLaW5kRm9yRmllbGRUeXBlKGl0ZW0/LmZpZWxkVHlwZSkgPT09ICd0ZXh0J1xuICApO1xuICByZXR1cm4gaGFzVGV4dCA/ICd0ZXh0X2ZpbGwnIDogJ2JvZHlfY29sb3VyX2ZpbGwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFydHdvcmtSb2xlKFxuICBmaWVsZDogYW55LFxuICB0ZW1wbGF0ZTogYW55LFxuICBsaW5rZWRGaWVsZHM6IGFueVtdID0gW10sXG4pOiBEcmFmdEFydHdvcmtSb2xlIHtcbiAgY29uc3QgaW5mZXJyZWQgPSBpbmZlckFydHdvcmtSb2xlKGZpZWxkLCBsaW5rZWRGaWVsZHMpO1xuICBpZiAoaW5mZXJyZWQgPT09ICdib2R5X2NvbG91cl9maWxsJykgcmV0dXJuICdib2R5X2NvbG91cl9maWxsJztcbiAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdGb3JGaWVsZChmaWVsZEJpbmRpbmdzRnJvbSh0ZW1wbGF0ZSksIGZpZWxkPy5pZCk7XG4gIGlmIChiaW5kaW5nPy5yb2xlICYmIGJpbmRpbmcucm9sZSAhPT0gJ2F1dG8nKSByZXR1cm4gYmluZGluZy5yb2xlO1xuICByZXR1cm4gaW5mZXJyZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclRleHRUYXJnZXRGaWVsZElkKFxuICBmaWVsZDogYW55LFxuICB0ZW1wbGF0ZTogYW55LFxuICBsaW5rZWRGaWVsZHM6IGFueVtdID0gW10sXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0ZvckZpZWxkKGZpZWxkQmluZGluZ3NGcm9tKHRlbXBsYXRlKSwgZmllbGQ/LmlkKTtcbiAgaWYgKGJpbmRpbmc/LnRhcmdldEZpZWxkSWQgIT0gbnVsbCkgcmV0dXJuIE51bWJlcihiaW5kaW5nLnRhcmdldEZpZWxkSWQpO1xuICBjb25zdCB0ZXh0RmllbGQgPSBsaW5rZWRGaWVsZHMuZmluZChcbiAgICAoaXRlbSkgPT4gY2FudmFzS2luZEZvckZpZWxkVHlwZShpdGVtPy5maWVsZFR5cGUpID09PSAndGV4dCcgJiYgaXRlbT8uaWQgIT0gbnVsbFxuICApO1xuICByZXR1cm4gdGV4dEZpZWxkPy5pZCAhPSBudWxsID8gTnVtYmVyKHRleHRGaWVsZC5pZCkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRJbnNpZGUoXG4gIGJveDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgY29udGVudFdpZHRoOiBudW1iZXIsXG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlcixcbiAgbG9ja0FzcGVjdFJhdGlvID0gdHJ1ZSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICBpZiAoXG4gICAgIWxvY2tBc3BlY3RSYXRpb1xuICAgIHx8ICEoY29udGVudFdpZHRoID4gMClcbiAgICB8fCAhKGNvbnRlbnRIZWlnaHQgPiAwKVxuICAgIHx8ICEoYm94LndpZHRoID4gMClcbiAgICB8fCAhKGJveC5oZWlnaHQgPiAwKVxuICApIHtcbiAgICByZXR1cm4geyAuLi5ib3ggfTtcbiAgfVxuICBjb25zdCBzY2FsZSA9IE1hdGgubWluKGJveC53aWR0aCAvIGNvbnRlbnRXaWR0aCwgYm94LmhlaWdodCAvIGNvbnRlbnRIZWlnaHQpO1xuICBjb25zdCB3aWR0aCA9IGNvbnRlbnRXaWR0aCAqIHNjYWxlO1xuICBjb25zdCBoZWlnaHQgPSBjb250ZW50SGVpZ2h0ICogc2NhbGU7XG4gIHJldHVybiB7XG4gICAgeDogYm94LnggKyAoYm94LndpZHRoIC0gd2lkdGgpIC8gMixcbiAgICB5OiBib3gueSArIChib3guaGVpZ2h0IC0gaGVpZ2h0KSAvIDIsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkTG9ja0ltYWdlQXNwZWN0KGZpZWxkOiBhbnksIHRlbXBsYXRlPzogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRm9yRmllbGQoZmllbGRCaW5kaW5nc0Zyb20odGVtcGxhdGUpLCBmaWVsZD8uaWQpO1xuICBpZiAodHlwZW9mIGJpbmRpbmc/LmxvY2tBc3BlY3RSYXRpbyA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYmluZGluZy5sb2NrQXNwZWN0UmF0aW87XG4gIGlmICh0eXBlb2YgZmllbGQ/LmFzcGVjdFJhdGlvTG9jayA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gZmllbGQuYXNwZWN0UmF0aW9Mb2NrO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmFja2dyb3VuZEZpbGwob2JqOiB7IHR5cGU/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqPy50eXBlID09PSAncmVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxBcnRib2FyZEZpbGwoXG4gIG9iajogeyB4PzogbnVtYmVyOyB5PzogbnVtYmVyOyB3aWR0aD86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyIH0sXG4gIGFydFdpZHRoOiBudW1iZXIsXG4gIGFydEhlaWdodDogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKG9iai53aWR0aCkgPj0gYXJ0V2lkdGggKiAwLjlcbiAgICAmJiBOdW1iZXIob2JqLmhlaWdodCkgPj0gYXJ0SGVpZ2h0ICogMC45XG4gICAgJiYgTnVtYmVyKG9iai54KSA8PSBhcnRXaWR0aCAqIDAuMDVcbiAgICAmJiBOdW1iZXIob2JqLnkpIDw9IGFydEhlaWdodCAqIDAuMDVcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVEcmFmdFRleHQoXG4gIHRleHQ6IHN0cmluZyxcbiAgZm9udFNpemUgPSA0OCxcbiAgZm9udEZhbWlseT86IHN0cmluZyxcbik6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IGxpbmVzID0gU3RyaW5nKHRleHQgfHwgJ1RleHQnKS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHNpemUgPSBNYXRoLm1heCgxMiwgTnVtYmVyKGZvbnRTaXplKSB8fCA0OCk7XG4gIGxldCB3aWR0aCA9IDA7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgY3R4LmZvbnQgPSBgJHtzaXplfXB4ICR7Y3NzRm9udEZhbWlseShmb250RmFtaWx5KX1gO1xuICAgICAgd2lkdGggPSBNYXRoLm1heCguLi5saW5lcy5tYXAoKGxpbmUpID0+IGN0eC5tZWFzdXJlVGV4dChsaW5lIHx8ICcgJykud2lkdGgpLCAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCEod2lkdGggPiAwKSkge1xuICAgIHdpZHRoID0gTWF0aC5tYXgoLi4ubGluZXMubWFwKChsaW5lKSA9PiAobGluZSB8fCAnICcpLmxlbmd0aCksIDEpICogc2l6ZSAqIDAuNjI7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogTWF0aC5jZWlsKHdpZHRoICsgc2l6ZSAqIDAuMTYpLFxuICAgIGhlaWdodDogTWF0aC5jZWlsKE1hdGgubWF4KDEsIGxpbmVzLmxlbmd0aCkgKiBzaXplICogMS4xNSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRUZXh0Qm94KFxuICBvYmo6IFBpY2s8RHJhZnRDYW52YXNPYmplY3QsICd4JyB8ICd5JyB8ICd3aWR0aCcgfCAnaGVpZ2h0JyB8ICd0ZXh0JyB8ICdmb250U2l6ZScgfCAnZm9udEZhbWlseSc+LFxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZURyYWZ0VGV4dChvYmoudGV4dCB8fCAnVGV4dCcsIG9iai5mb250U2l6ZSwgb2JqLmZvbnRGYW1pbHkpO1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDI0LCBtZWFzdXJlZC53aWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDIwLCBtZWFzdXJlZC5oZWlnaHQpO1xuICBjb25zdCBwcmV2VyA9IE51bWJlcihvYmoud2lkdGgpID4gMCA/IE51bWJlcihvYmoud2lkdGgpIDogd2lkdGg7XG4gIGNvbnN0IHByZXZIID0gTnVtYmVyKG9iai5oZWlnaHQpID4gMCA/IE51bWJlcihvYmouaGVpZ2h0KSA6IGhlaWdodDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogKE51bWJlcihvYmoueCkgfHwgMCkgKyAocHJldlcgLSB3aWR0aCkgLyAyLFxuICAgIHk6IChOdW1iZXIob2JqLnkpIHx8IDApICsgKHByZXZIIC0gaGVpZ2h0KSAvIDIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBsYWNlbWVudEJveGVzKFxuICByb2xlOiBEcmFmdEFydHdvcmtSb2xlLFxuICBraW5kOiBEcmFmdENhbnZhc09iamVjdFR5cGUsXG4gIHRlbXBsYXRlOiBhbnksXG4pOiBudW1iZXJbXVtdIHtcbiAgaWYgKHJvbGUgPT09ICdib2R5X2NvbG91cl9maWxsJyB8fCBraW5kID09PSAncmVjdCcpIHtcbiAgICBjb25zdCBib2R5ID0gcmVnaW9uc0ZvclJvbGUodGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXAsICdib2R5X2NvbG91cl9maWxsJyk7XG4gICAgaWYgKGJvZHkubGVuZ3RoKSByZXR1cm4gYm9keTtcbiAgICBjb25zdCBwcmludCA9IHJlZ2lvbnNGb3JSb2xlKHRlbXBsYXRlPy5jdXN0b21pc2F0aW9uTWFwLCAncHJpbnRfYXJlYScpO1xuICAgIGlmIChwcmludC5sZW5ndGgpIHJldHVybiBwcmludDtcbiAgICByZXR1cm4gW1swLCAwLCAxLCAxXV07XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0ZXh0Jykge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHJlZ2lvbnNGb3JSb2xlKHRlbXBsYXRlPy5jdXN0b21pc2F0aW9uTWFwLCAndGV4dF9wbGFjZWhvbGRlcicpO1xuICAgIGlmIChwbGFjZWhvbGRlcnMubGVuZ3RoKSByZXR1cm4gcGxhY2Vob2xkZXJzO1xuICAgIHJldHVybiByZWdpb25zRm9yUm9sZSh0ZW1wbGF0ZT8uY3VzdG9taXNhdGlvbk1hcCwgJ3ByaW50X2FyZWEnKTtcbiAgfVxuICByZXR1cm4gcmVnaW9uc0ZvclJvbGUodGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXAsICdwcmludF9hcmVhJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0UGxhY2VtZW50KFxuICBraW5kOiBEcmFmdENhbnZhc09iamVjdFR5cGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIGFydFdpZHRoOiBudW1iZXIsXG4gIGFydEhlaWdodDogbnVtYmVyLFxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KDI0LCBhcnRXaWR0aCAqIDAuMDQpO1xuICBpZiAoa2luZCA9PT0gJ2ltYWdlJykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBhcnRXaWR0aCAqIDAuMixcbiAgICAgIHk6IGFydEhlaWdodCAqIDAuMixcbiAgICAgIHdpZHRoOiBhcnRXaWR0aCAqIDAuNixcbiAgICAgIGhlaWdodDogYXJ0SGVpZ2h0ICogMC42LFxuICAgIH07XG4gIH1cbiAgaWYgKGtpbmQgPT09ICdyZWN0Jykge1xuICAgIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiBhcnRXaWR0aCwgaGVpZ2h0OiBhcnRIZWlnaHQgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHBhZCxcbiAgICB5OiBwYWQgKyBpbmRleCAqIE1hdGgubWF4KDY0LCBhcnRIZWlnaHQgKiAwLjA4KSxcbiAgICB3aWR0aDogYXJ0V2lkdGggLSBwYWQgKiAyLFxuICAgIGhlaWdodDogTWF0aC5tYXgoNTYsIGFydEhlaWdodCAqIDAuMDcpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT2JqZWN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBvYmotJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWVkT3JTeW5jQ2FudmFzKFxuICBleGlzdGluZzogRHJhZnRDYW52YXNTdGF0ZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHRlbXBsYXRlOiBhbnksXG4gIHZhcmlhdGlvbnM6IGFueVtdLFxuKTogRHJhZnRDYW52YXNTdGF0ZSB7XG4gIGNvbnN0IHdpZHRoID0gTnVtYmVyKHRlbXBsYXRlPy53aWR0aCkgfHwgREVGQVVMVF9BUlRCT0FSRC53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gTnVtYmVyKHRlbXBsYXRlPy5oZWlnaHQpIHx8IERFRkFVTFRfQVJUQk9BUkQuaGVpZ2h0O1xuICBjb25zdCBvYmplY3RzOiBEcmFmdENhbnZhc09iamVjdFtdID0gKGV4aXN0aW5nPy5vYmplY3RzIHx8IFtdKS5tYXAoKG9iaikgPT4gKFxuICAgIG9iai50eXBlID09PSAndGV4dCcgPyB7IC4uLm9iaiwgLi4uZml0VGV4dEJveChvYmopIH0gOiB7IC4uLm9iaiB9XG4gICkpO1xuICBjb25zdCBkZXRhY2hlZCA9IG5ldyBTZXQoZXhpc3Rpbmc/LmRldGFjaGVkRmllbGRJZHMgfHwgW10pO1xuICBjb25zdCBsaW5rZWQgPSBsaW5rZWRWYXJpYXRpb25zRm9yVGVtcGxhdGUodGVtcGxhdGUsIHZhcmlhdGlvbnMpO1xuICBjb25zdCBsaW5rZWRGaWVsZHMgPSBsaW5rZWQubWFwKCh2YXJpYXRpb24pID0+IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQpLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgdXNlZFJlZ2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBmb3IgKGNvbnN0IHZhcmlhdGlvbiBvZiBsaW5rZWQpIHtcbiAgICBjb25zdCBmaWVsZCA9IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ7XG4gICAgaWYgKHJlc29sdmVBcnR3b3JrUm9sZShmaWVsZCwgdGVtcGxhdGUsIGxpbmtlZEZpZWxkcykgIT09ICd0ZXh0X2ZpbGwnKSBjb250aW51ZTtcbiAgICBjb25zdCBpbmRleCA9IG9iamVjdHMuZmluZEluZGV4KFxuICAgICAgKG9iaikgPT4gb2JqLm1lcmNoaUZpZWxkSWQgPT09IGZpZWxkPy5pZCAmJiBvYmoudHlwZSA9PT0gJ3JlY3QnXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgb2JqZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgY29uc3QgYXBwbHlDb2xvdXJUb1RleHQgPSAodGFyZ2V0RmllbGRJZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBmaWxsPzogc3RyaW5nLCBjb2xvdXJGaWVsZElkPzogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFmaWxsIHx8IHRhcmdldEZpZWxkSWQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHRleHRPYmogPSBvYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLm1lcmNoaUZpZWxkSWQgPT09IHRhcmdldEZpZWxkSWQgJiYgb2JqLnR5cGUgPT09ICd0ZXh0Jyk7XG4gICAgaWYgKCF0ZXh0T2JqKSByZXR1cm4gZmFsc2U7XG4gICAgdGV4dE9iai5maWxsID0gZmlsbDtcbiAgICB0ZXh0T2JqLmNvbG91ckZpZWxkSWQgPSBjb2xvdXJGaWVsZElkO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHBsYWNlT2JqZWN0ID0gKFxuICAgIGtpbmQ6IERyYWZ0Q2FudmFzT2JqZWN0VHlwZSxcbiAgICByb2xlOiBEcmFmdEFydHdvcmtSb2xlLFxuICAgIGZpZWxkOiBhbnksXG4gICAgZmllbGRJZDogbnVtYmVyLFxuICAgIGNvbnRlbnQ6IFJldHVyblR5cGU8dHlwZW9mIHZhcmlhdGlvbkNhbnZhc0NvbnRlbnQ+LFxuICApID0+IHtcbiAgICBjb25zdCBib3hlcyA9IHBsYWNlbWVudEJveGVzKHJvbGUsIGtpbmQsIHRlbXBsYXRlKTtcbiAgICBjb25zdCBrZXkgPSBgJHtyb2xlfToke2tpbmR9YDtcbiAgICBjb25zdCByZWdpb25JbmRleCA9IHVzZWRSZWdpb25zW2tleV0gfHwgMDtcbiAgICB1c2VkUmVnaW9uc1trZXldID0gcmVnaW9uSW5kZXggKyAxO1xuICAgIGNvbnN0IGJveCA9IGJveGVzW3JlZ2lvbkluZGV4XSB8fCBib3hlc1swXTtcbiAgICBjb25zdCBwbGFjZSA9IGJveFxuICAgICAgPyBiYm94VG9QaXhlbHMoYm94LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgOiBkZWZhdWx0UGxhY2VtZW50KGtpbmQsIG9iamVjdHMubGVuZ3RoLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBsb2NrQXNwZWN0UmF0aW8gPSBraW5kID09PSAnaW1hZ2UnID8gc2hvdWxkTG9ja0ltYWdlQXNwZWN0KGZpZWxkLCB0ZW1wbGF0ZSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbmV4dDogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZDogY3JlYXRlT2JqZWN0SWQoKSxcbiAgICAgIHR5cGU6IGtpbmQsXG4gICAgICBtZXJjaGlGaWVsZElkOiBmaWVsZElkLFxuICAgICAgYXJ0d29ya1JvbGU6IHJvbGUsXG4gICAgICBsb2NrZWQ6IGtpbmQgPT09ICdyZWN0JyxcbiAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgc2NhbGVYOiAxLFxuICAgICAgc2NhbGVZOiAxLFxuICAgICAgbG9ja0FzcGVjdFJhdGlvLFxuICAgICAgLi4ucGxhY2UsXG4gICAgICB0ZXh0OiBjb250ZW50LnRleHQsXG4gICAgICBzcmM6IGNvbnRlbnQuc3JjLFxuICAgICAgZmlsbDogY29udGVudC5maWxsIHx8IChraW5kID09PSAndGV4dCcgPyAnIzExMTExMScgOiB1bmRlZmluZWQpLFxuICAgICAgZm9udEZhbWlseToga2luZCA9PT0gJ3RleHQnID8gREVGQVVMVF9EUkFGVF9GT05UIDogdW5kZWZpbmVkLFxuICAgICAgZm9udFNpemU6IE1hdGgubWF4KDI4LCBNYXRoLnJvdW5kKHBsYWNlLmhlaWdodCAqIDAuNjIpKSxcbiAgICB9O1xuICAgIGlmIChraW5kID09PSAndGV4dCcpIE9iamVjdC5hc3NpZ24obmV4dCwgZml0VGV4dEJveChuZXh0KSk7XG4gICAgaWYgKGtpbmQgPT09ICdyZWN0Jykgb2JqZWN0cy51bnNoaWZ0KG5leHQpO1xuICAgIGVsc2Ugb2JqZWN0cy5wdXNoKG5leHQpO1xuICB9O1xuXG4gIGZvciAoY29uc3QgdmFyaWF0aW9uIG9mIGxpbmtlZCkge1xuICAgIGNvbnN0IGZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZDtcbiAgICBjb25zdCBmaWVsZElkID0gZmllbGQ/LmlkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB2YXJpYXRpb25DYW52YXNDb250ZW50KHZhcmlhdGlvbik7XG4gICAgaWYgKCFjb250ZW50LmtpbmQgfHwgZmllbGRJZCA9PSBudWxsIHx8IGRldGFjaGVkLmhhcyhmaWVsZElkKSkgY29udGludWU7XG4gICAgY29uc3Qgcm9sZSA9IHJlc29sdmVBcnR3b3JrUm9sZShmaWVsZCwgdGVtcGxhdGUsIGxpbmtlZEZpZWxkcyk7XG4gICAgaWYgKHJvbGUgPT09ICd0ZXh0X2ZpbGwnKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGZvdW5kID0gb2JqZWN0cy5maW5kKChvYmopID0+IG9iai5tZXJjaGlGaWVsZElkID09PSBmaWVsZElkKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGlmIChjb250ZW50LmtpbmQgPT09ICd0ZXh0JyAmJiBjb250ZW50LnRleHQgIT0gbnVsbCkge1xuICAgICAgICBmb3VuZC50ZXh0ID0gY29udGVudC50ZXh0O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZvdW5kLCBmaXRUZXh0Qm94KGZvdW5kKSk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGVudC5raW5kID09PSAnaW1hZ2UnICYmIGNvbnRlbnQuc3JjKSBmb3VuZC5zcmMgPSBjb250ZW50LnNyYztcbiAgICAgIGlmIChjb250ZW50LmtpbmQgPT09ICdyZWN0JyAmJiBjb250ZW50LmZpbGwpIGZvdW5kLmZpbGwgPSBjb250ZW50LmZpbGw7XG4gICAgICBpZiAoZm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICBmb3VuZC5sb2NrQXNwZWN0UmF0aW8gPSBzaG91bGRMb2NrSW1hZ2VBc3BlY3QoZmllbGQsIHRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZC50eXBlID09PSAncmVjdCcpIHtcbiAgICAgICAgZm91bmQubG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgZm91bmQuYXJ0d29ya1JvbGUgPSByb2xlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnQua2luZCA9PT0gJ3RleHQnICYmICFjb250ZW50LnRleHQpIGNvbnRpbnVlO1xuICAgIGlmIChjb250ZW50LmtpbmQgPT09ICdpbWFnZScgJiYgIWNvbnRlbnQuc3JjKSBjb250aW51ZTtcbiAgICBpZiAoY29udGVudC5raW5kID09PSAncmVjdCcgJiYgIWNvbnRlbnQuZmlsbCkgY29udGludWU7XG4gICAgcGxhY2VPYmplY3QoY29udGVudC5raW5kLCByb2xlLCBmaWVsZCwgZmllbGRJZCwgY29udGVudCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHZhcmlhdGlvbiBvZiBsaW5rZWQpIHtcbiAgICBjb25zdCBmaWVsZCA9IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ7XG4gICAgY29uc3QgZmllbGRJZCA9IGZpZWxkPy5pZDtcbiAgICBjb25zdCBjb250ZW50ID0gdmFyaWF0aW9uQ2FudmFzQ29udGVudCh2YXJpYXRpb24pO1xuICAgIGlmIChmaWVsZElkID09IG51bGwgfHwgZGV0YWNoZWQuaGFzKGZpZWxkSWQpIHx8ICFjb250ZW50LmZpbGwpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJvbGUgPSByZXNvbHZlQXJ0d29ya1JvbGUoZmllbGQsIHRlbXBsYXRlLCBsaW5rZWRGaWVsZHMpO1xuICAgIGlmIChyb2xlICE9PSAndGV4dF9maWxsJykgY29udGludWU7XG4gICAgY29uc3QgdGFyZ2V0SWQgPSBpbmZlclRleHRUYXJnZXRGaWVsZElkKGZpZWxkLCB0ZW1wbGF0ZSwgbGlua2VkRmllbGRzKTtcbiAgICBhcHBseUNvbG91clRvVGV4dCh0YXJnZXRJZCwgY29udGVudC5maWxsLCBmaWVsZElkKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIG9iamVjdHMsXG4gICAgZGV0YWNoZWRGaWVsZElkczogQXJyYXkuZnJvbShkZXRhY2hlZCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRhY2hGaWVsZChcbiAgc3RhdGU6IERyYWZ0Q2FudmFzU3RhdGUsXG4gIG9iamVjdElkOiBzdHJpbmcsXG4pOiBEcmFmdENhbnZhc1N0YXRlIHtcbiAgY29uc3QgdGFyZ2V0ID0gc3RhdGUub2JqZWN0cy5maW5kKChvYmopID0+IG9iai5pZCA9PT0gb2JqZWN0SWQpO1xuICBjb25zdCBkZXRhY2hlZEZpZWxkSWRzID0gWy4uLihzdGF0ZS5kZXRhY2hlZEZpZWxkSWRzIHx8IFtdKV07XG4gIGlmICh0YXJnZXQ/Lm1lcmNoaUZpZWxkSWQgIT0gbnVsbCAmJiAhZGV0YWNoZWRGaWVsZElkcy5pbmNsdWRlcyh0YXJnZXQubWVyY2hpRmllbGRJZCkpIHtcbiAgICBkZXRhY2hlZEZpZWxkSWRzLnB1c2godGFyZ2V0Lm1lcmNoaUZpZWxkSWQpO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgb2JqZWN0czogc3RhdGUub2JqZWN0cy5maWx0ZXIoKG9iaikgPT4gb2JqLmlkICE9PSBvYmplY3RJZCksXG4gICAgZGV0YWNoZWRGaWVsZElkcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50QXJlYUd1aWRlcyh0ZW1wbGF0ZTogYW55KTogQXJyYXk8e1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59PiB7XG4gIGNvbnN0IHdpZHRoID0gTnVtYmVyKHRlbXBsYXRlPy53aWR0aCkgfHwgREVGQVVMVF9BUlRCT0FSRC53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gTnVtYmVyKHRlbXBsYXRlPy5oZWlnaHQpIHx8IERFRkFVTFRfQVJUQk9BUkQuaGVpZ2h0O1xuICByZXR1cm4gcmVnaW9uc0ZvclJvbGUodGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXAsICdwcmludF9hcmVhJykubWFwKChiYm94KSA9PlxuICAgIGJib3hUb1BpeGVscyhiYm94LCB3aWR0aCwgaGVpZ2h0KVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFNBQ0VBLGlCQUFpQixFQUNqQkMsZ0JBQWdC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
|
|
668
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCTEFOS19URU1QTEFURV9JRCIsIkRFRkFVTFRfQVJUQk9BUkQiLCJGaWVsZFR5cGUiLCJERUZBVUxUX0RSQUZUX0ZPTlQiLCJjc3NGb250RmFtaWx5IiwiZW1icm9pZGVyeVBpeGVscyIsInBhcnNlRW1icm9pZGVyeVZhbHVlIiwicHJvZHVjdEhhc0dyb3VwcyIsInBhbnRvbmVCeUNvZGUiLCJwcm9kdWN0SGFzRHJhZnRUZW1wbGF0ZXMiLCJwcm9kdWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiZHJhZnRUZW1wbGF0ZXMiLCJsZW5ndGgiLCJwcm9kdWN0QWxsb3dzQ2xpZW50RGVzaWduIiwiQm9vbGVhbiIsIm5lZWRzRHJhZnRpbmciLCJhbGxvd0NsaWVudERyYWZ0Q29udHJpYnV0aW9uIiwicHJvZHVjdEhhc1ZhcmlhdGlvbkdyb3VwcyIsImRlc2lnbkdyb3VwQ291bnQiLCJmb3JtVmFsdWVzIiwiZ3JvdXBzIiwidmFyaWF0aW9uc0dyb3VwcyIsInBhcnNlU2VsZWN0ZWRPcHRpb25JZHMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIlN0cmluZyIsInNwbGl0IiwibWFwIiwicyIsInBhcnNlSW50IiwidHJpbSIsImZpbHRlciIsIm4iLCJpc05hTiIsInNlbGVjdGVkT3B0aW9uSWRzRnJvbVZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zIiwiaWRzIiwiU2V0IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsImRvbmUiLCJ2YXJpYXRpb24iLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaWQiLCJhZGQiLCJlcnIiLCJlIiwiZiIsImlzVGVtcGxhdGVWaXNpYmxlIiwidGVtcGxhdGUiLCJzZWxlY3RlZE9wdGlvbklkcyIsInJlcXVpcmVkIiwic2VsZWN0ZWRCeVZhcmlhdGlvbkZpZWxkT3B0aW9ucyIsImV2ZXJ5Iiwib3B0IiwiaGFzIiwidmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwIiwiaW5kZXBlbmRlbnRWYXJpYXRpb25zIiwiZ3JvdXBWYXJpYXRpb25zIiwic2VsZWN0ZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJibGFua1RlbXBsYXRlIiwiX3Byb2R1Y3QkZHJhZnRUZW1wbGF0IiwiX3Byb2R1Y3QkZmVhdHVyZUltYWdlIiwiX3Byb2R1Y3QkZHJhZnRUZW1wbGF0MiIsIl9wcm9kdWN0JGZlYXR1cmVJbWFnZTIiLCJmcm9tUHJvZHVjdCIsIk51bWJlciIsIndpZHRoIiwiZmVhdHVyZUltYWdlIiwiaGVpZ2h0IiwibmFtZSIsImZpbGUiLCJlZGl0ZWRCeVZhcmlhdGlvbkZpZWxkcyIsInRlbXBsYXRlc0Zvckdyb3VwIiwidmlzaWJsZSIsInRlbXBsYXRlSGFzRmlsZSIsImRvd25sb2FkVXJsIiwiY2FjaGVkRG93bmxvYWRVcmwiLCJ2aWV3VXJsIiwiY2FjaGVkVmlld1VybCIsInVuaXF1ZUZpbGVUZW1wbGF0ZXMiLCJ0ZW1wbGF0ZXMiLCJzZWVuIiwicmVzdWx0IiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImtleSIsInB1c2giLCJkb3dubG9hZGFibGVEcmFmdFRlbXBsYXRlcyIsImluZGVwZW5kZW50IiwibWF0Y2hlZCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJncm91cCIsImFwcGx5IiwiY2FudmFzS2luZEZvckZpZWxkIiwiZmllbGQiLCJmaWVsZFR5cGUiLCJFTUJST0lERVJZIiwiZW1icm9pZGVyeUlucHV0TW9kZSIsImNhbnZhc0tpbmRGb3JGaWVsZFR5cGUiLCJURVhUX0lOUFVUIiwiVEVYVF9BUkVBIiwiTlVNQkVSX0lOUFVUIiwiU0VMRUNUIiwiUkFESU8iLCJDSEVDS0JPWCIsIkZJTEVfVVBMT0FEIiwiSU1BR0VfU0VMRUNUIiwiQ09MT1VSX1BJQ0tFUiIsIkNPTE9VUl9TRUxFQ1QiLCJDT0xPVVJfRVhUUkFDVCIsIlBBTlRPTkVfQ09MT1VSX1NFTEVDVCIsIm9wdGlvbkJ5SWQiLCJfdmFyaWF0aW9uJHZhcmlhdGlvbkYiLCJmcm9tU2VsZWN0YWJsZSIsInNlbGVjdGFibGVPcHRpb25zIiwiZmluZCIsIm9wdGlvbiIsIm9wdGlvbklkIiwidmFyaWF0aW9uRmllbGQiLCJvcHRpb25zIiwidmFyaWF0aW9uQ2FudmFzQ29udGVudCIsImtpbmQiLCJ0eXBlIiwicGFyc2VkIiwidmFyaWF0aW9uRmlsZXMiLCJzcmMiLCJ0ZXh0IiwibmFtZXMiLCJfb3B0aW9uQnlJZCIsImpvaW4iLCJsaW5rZWRGaWxlIiwiZmlsbCIsIm5vcm1hbGlzZUNzc0NvbG91ciIsImFsbG93QWxsUGFudG9uZXMiLCJfcGFudG9uZUJ5Q29kZSIsImhleCIsInNlbGVjdGVkT3B0aW9ucyIsImNvbG91ciIsIkhFWF9DT0xPVVIiLCJDU1NfRlVOQ1RJT05fQ09MT1VSIiwiX2xlbiIsImFyZ3VtZW50cyIsImNhbmRpZGF0ZXMiLCJfa2V5IiwiX2kiLCJfY2FuZGlkYXRlcyIsInJhdyIsInRlc3QiLCJsaW5rZWRWYXJpYXRpb25zRm9yVGVtcGxhdGUiLCJsaW5rZWRJZHMiLCJzaXplIiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GMiIsInZhcmlhdGlvbnNGb3JHcm91cCIsImdyb3VwSW5kZXgiLCJfZm9ybVZhbHVlcyR2YXJpYXRpb24iLCJpc1ZhbGlkQmJveCIsImJib3giLCJfYmJveCRtYXAiLCJfYmJveCRtYXAyIiwiX3NsaWNlZFRvQXJyYXkiLCJ4IiwieSIsInciLCJoIiwicmVnaW9uc0ZvclJvbGUiLCJjdXN0b21pc2F0aW9uTWFwIiwicm9sZSIsInJlZ2lvbnMiLCJyZWdpb24iLCJiYm94VG9QaXhlbHMiLCJfYmJveCIsImZpZWxkQmluZGluZ3NGcm9tIiwiX3RlbXBsYXRlJGN1c3RvbWlzYXRpIiwiZmllbGRCaW5kaW5ncyIsIml0ZW0iLCJmaWVsZElkIiwiYmluZGluZ0ZvckZpZWxkIiwiYmluZGluZ3MiLCJmaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImlzQ29sb3VyS2luZCIsImluZmVyQXJ0d29ya1JvbGUiLCJsaW5rZWRGaWVsZHMiLCJoYXNUZXh0Iiwic29tZSIsInJlc29sdmVBcnR3b3JrUm9sZSIsImluZmVycmVkIiwiYmluZGluZyIsImluZmVyVGV4dFRhcmdldEZpZWxkSWQiLCJ0YXJnZXRGaWVsZElkIiwidGV4dEZpZWxkIiwiZml0SW5zaWRlIiwiYm94IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsImxvY2tBc3BlY3RSYXRpbyIsIl9vYmplY3RTcHJlYWQiLCJzY2FsZSIsIk1hdGgiLCJtaW4iLCJzaG91bGRMb2NrSW1hZ2VBc3BlY3QiLCJhc3BlY3RSYXRpb0xvY2siLCJpc0JhY2tncm91bmRGaWxsIiwib2JqIiwiaXNGdWxsQXJ0Ym9hcmRGaWxsIiwiYXJ0V2lkdGgiLCJhcnRIZWlnaHQiLCJtZWFzdXJlRHJhZnRUZXh0IiwiZm9udFNpemUiLCJmb250RmFtaWx5IiwibGluZXMiLCJtYXgiLCJkb2N1bWVudCIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJjdHgiLCJnZXRDb250ZXh0IiwiZm9udCIsImxpbmUiLCJtZWFzdXJlVGV4dCIsImNlaWwiLCJmaXRUZXh0Qm94IiwibWVhc3VyZWQiLCJwcmV2VyIsInByZXZIIiwicGxhY2VtZW50Qm94ZXMiLCJib2R5IiwicHJpbnQiLCJwbGFjZWhvbGRlcnMiLCJkZWZhdWx0UGxhY2VtZW50IiwiaW5kZXgiLCJwYWQiLCJjcmVhdGVPYmplY3RJZCIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsInNsaWNlIiwic2VlZE9yU3luY0NhbnZhcyIsImV4aXN0aW5nIiwib2JqZWN0cyIsImRldGFjaGVkIiwiZGV0YWNoZWRGaWVsZElkcyIsImxpbmtlZCIsInVzZWRSZWdpb25zIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsIl9sb29wIiwiZmluZEluZGV4IiwibWVyY2hpRmllbGRJZCIsInNwbGljZSIsImFwcGx5Q29sb3VyVG9UZXh0IiwiY29sb3VyRmllbGRJZCIsInRleHRPYmoiLCJwbGFjZU9iamVjdCIsImNvbnRlbnQiLCJib3hlcyIsInJlZ2lvbkluZGV4IiwicGxhY2UiLCJuZXh0IiwiYXJ0d29ya1JvbGUiLCJsb2NrZWQiLCJyb3RhdGlvbiIsInNjYWxlWCIsInNjYWxlWSIsInJvdW5kIiwiT2JqZWN0IiwiYXNzaWduIiwidW5zaGlmdCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJfbG9vcDIiLCJmb3VuZCIsInB4Iiwid2lkdGhNbSIsImhlaWdodE1tIiwiX3JldCIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJ0YXJnZXRJZCIsImZyb20iLCJkZXRhY2hGaWVsZCIsInN0YXRlIiwib2JqZWN0SWQiLCJ0YXJnZXQiLCJpbmNsdWRlcyIsInByaW50QXJlYUd1aWRlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kcmFmdFRlbXBsYXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCTEFOS19URU1QTEFURV9JRCxcbiAgREVGQVVMVF9BUlRCT0FSRCxcbiAgRHJhZnRBcnR3b3JrUm9sZSxcbiAgRHJhZnRDYW52YXNPYmplY3QsXG4gIERyYWZ0Q2FudmFzT2JqZWN0VHlwZSxcbiAgRHJhZnRDYW52YXNTdGF0ZSxcbiAgRHJhZnRGaWVsZEJpbmRpbmcsXG4gIEZpZWxkVHlwZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBERUZBVUxUX0RSQUZUX0ZPTlQsIGNzc0ZvbnRGYW1pbHkgfSBmcm9tICcuL2RyYWZ0Rm9udHMnO1xuaW1wb3J0IHsgZW1icm9pZGVyeVBpeGVscywgcGFyc2VFbWJyb2lkZXJ5VmFsdWUgfSBmcm9tICcuL2VtYnJvaWRlcnknO1xuaW1wb3J0IHsgcHJvZHVjdEhhc0dyb3VwcyB9IGZyb20gJy4vcHJvZHVjdHMnO1xuaW1wb3J0IHsgcGFudG9uZUJ5Q29kZSB9IGZyb20gJy4vcGFudG9uZUNvbG91cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEhhc0RyYWZ0VGVtcGxhdGVzKHByb2R1Y3Q6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9kdWN0Py5kcmFmdFRlbXBsYXRlcykgJiYgcHJvZHVjdC5kcmFmdFRlbXBsYXRlcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZHVjdEFsbG93c0NsaWVudERlc2lnbihwcm9kdWN0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgcHJvZHVjdD8ubmVlZHNEcmFmdGluZ1xuICAgICYmIHByb2R1Y3Q/LmFsbG93Q2xpZW50RHJhZnRDb250cmlidXRpb25cbiAgICAmJiBwcm9kdWN0SGFzRHJhZnRUZW1wbGF0ZXMocHJvZHVjdCksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWN0SGFzVmFyaWF0aW9uR3JvdXBzKHByb2R1Y3Q6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvZHVjdEhhc0dyb3Vwcyhwcm9kdWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2lnbkdyb3VwQ291bnQocHJvZHVjdDogYW55LCBmb3JtVmFsdWVzOiBhbnkpOiBudW1iZXIge1xuICBpZiAoIXByb2R1Y3RIYXNWYXJpYXRpb25Hcm91cHMocHJvZHVjdCkpIHJldHVybiAxO1xuICBjb25zdCBncm91cHMgPSBmb3JtVmFsdWVzPy52YXJpYXRpb25zR3JvdXBzO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShncm91cHMpICYmIGdyb3Vwcy5sZW5ndGggPiAwID8gZ3JvdXBzLmxlbmd0aCA6IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbGVjdGVkT3B0aW9uSWRzKHZhbHVlOiBhbnkpOiBudW1iZXJbXSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIFtdO1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgocykgPT4gcGFyc2VJbnQocy50cmltKCksIDEwKSlcbiAgICAuZmlsdGVyKChuKSA9PiAhaXNOYU4obikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0ZWRPcHRpb25JZHNGcm9tVmFyaWF0aW9ucyh2YXJpYXRpb25zOiBhbnlbXSk6IFNldDxudW1iZXI+IHtcbiAgY29uc3QgaWRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgdmFyaWF0aW9uIG9mIHZhcmlhdGlvbnMgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHBhcnNlU2VsZWN0ZWRPcHRpb25JZHModmFyaWF0aW9uPy52YWx1ZSkpIHtcbiAgICAgIGlkcy5hZGQoaWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVZpc2libGUoXG4gIHRlbXBsYXRlOiBhbnksXG4gIHNlbGVjdGVkT3B0aW9uSWRzOiBTZXQ8bnVtYmVyPixcbik6IGJvb2xlYW4ge1xuICBjb25zdCByZXF1aXJlZCA9IHRlbXBsYXRlPy5zZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWlyZWQpIHx8IHJlcXVpcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiByZXF1aXJlZC5ldmVyeSgob3B0OiBhbnkpID0+IG9wdD8uaWQgJiYgc2VsZWN0ZWRPcHRpb25JZHMuaGFzKG9wdC5pZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwKFxuICBwcm9kdWN0OiBhbnksXG4gIGluZGVwZW5kZW50VmFyaWF0aW9uczogYW55W10sXG4gIGdyb3VwVmFyaWF0aW9uczogYW55W10sXG4pOiBhbnlbXSB7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRPcHRpb25JZHNGcm9tVmFyaWF0aW9ucyhbXG4gICAgLi4uKGluZGVwZW5kZW50VmFyaWF0aW9ucyB8fCBbXSksXG4gICAgLi4uKGdyb3VwVmFyaWF0aW9ucyB8fCBbXSksXG4gIF0pO1xuICByZXR1cm4gKHByb2R1Y3Q/LmRyYWZ0VGVtcGxhdGVzIHx8IFtdKS5maWx0ZXIoKHRlbXBsYXRlOiBhbnkpID0+XG4gICAgaXNUZW1wbGF0ZVZpc2libGUodGVtcGxhdGUsIHNlbGVjdGVkKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxhbmtUZW1wbGF0ZShwcm9kdWN0PzogYW55KSB7XG4gIGNvbnN0IGZyb21Qcm9kdWN0ID0gTnVtYmVyKHByb2R1Y3Q/LmRyYWZ0VGVtcGxhdGVzPy5bMF0/LndpZHRoKVxuICAgIHx8IE51bWJlcihwcm9kdWN0Py5mZWF0dXJlSW1hZ2U/LndpZHRoKVxuICAgIHx8IERFRkFVTFRfQVJUQk9BUkQud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IE51bWJlcihwcm9kdWN0Py5kcmFmdFRlbXBsYXRlcz8uWzBdPy5oZWlnaHQpXG4gICAgfHwgTnVtYmVyKHByb2R1Y3Q/LmZlYXR1cmVJbWFnZT8uaGVpZ2h0KVxuICAgIHx8IERFRkFVTFRfQVJUQk9BUkQuaGVpZ2h0O1xuICByZXR1cm4ge1xuICAgIGlkOiBCTEFOS19URU1QTEFURV9JRCxcbiAgICBuYW1lOiAnQXJ0d29yaycsXG4gICAgd2lkdGg6IGZyb21Qcm9kdWN0LFxuICAgIGhlaWdodCxcbiAgICBmaWxlOiBudWxsLFxuICAgIGVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzOiBbXSxcbiAgICBzZWxlY3RlZEJ5VmFyaWF0aW9uRmllbGRPcHRpb25zOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlc0Zvckdyb3VwKFxuICBwcm9kdWN0OiBhbnksXG4gIGluZGVwZW5kZW50VmFyaWF0aW9uczogYW55W10sXG4gIGdyb3VwVmFyaWF0aW9uczogYW55W10sXG4pOiBhbnlbXSB7XG4gIGNvbnN0IHZpc2libGUgPSB2aXNpYmxlVGVtcGxhdGVzRm9yR3JvdXAoXG4gICAgcHJvZHVjdCxcbiAgICBpbmRlcGVuZGVudFZhcmlhdGlvbnMsXG4gICAgZ3JvdXBWYXJpYXRpb25zLFxuICApO1xuICByZXR1cm4gdmlzaWJsZS5sZW5ndGggPyB2aXNpYmxlIDogW2JsYW5rVGVtcGxhdGUocHJvZHVjdCldO1xufVxuXG5mdW5jdGlvbiB0ZW1wbGF0ZUhhc0ZpbGUodGVtcGxhdGU6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBmaWxlID0gdGVtcGxhdGU/LmZpbGU7XG4gIGlmICghZmlsZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBmaWxlLmlkXG4gICAgfHwgZmlsZS5kb3dubG9hZFVybFxuICAgIHx8IGZpbGUuY2FjaGVkRG93bmxvYWRVcmxcbiAgICB8fCBmaWxlLnZpZXdVcmxcbiAgICB8fCBmaWxlLmNhY2hlZFZpZXdVcmwsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZUZpbGVUZW1wbGF0ZXModGVtcGxhdGVzOiBhbnlbXSk6IGFueVtdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZUhhc0ZpbGUodGVtcGxhdGUpKSBjb250aW51ZTtcbiAgICBjb25zdCBmaWxlID0gdGVtcGxhdGUuZmlsZSB8fCB7fTtcbiAgICBjb25zdCBrZXkgPSB0ZW1wbGF0ZT8uaWQgIT0gbnVsbFxuICAgICAgPyBgaWQ6JHt0ZW1wbGF0ZS5pZH1gXG4gICAgICA6IGBmaWxlOiR7ZmlsZS5pZCB8fCBmaWxlLmRvd25sb2FkVXJsIHx8IGZpbGUudmlld1VybH1gO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIHJlc3VsdC5wdXNoKHRlbXBsYXRlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogQmxhbmsgdGVtcGxhdGVzIHRoZSBjdXN0b21lciBjYW4gZG93bmxvYWQgZm9yIHRoZSBvcHRpb25zIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZGFibGVEcmFmdFRlbXBsYXRlcyhwcm9kdWN0OiBhbnksIGZvcm1WYWx1ZXM6IGFueSk6IGFueVtdIHtcbiAgY29uc3QgaW5kZXBlbmRlbnQgPSBmb3JtVmFsdWVzPy52YXJpYXRpb25zIHx8IFtdO1xuICBjb25zdCBncm91cHMgPSBwcm9kdWN0SGFzVmFyaWF0aW9uR3JvdXBzKHByb2R1Y3QpXG4gICAgJiYgQXJyYXkuaXNBcnJheShmb3JtVmFsdWVzPy52YXJpYXRpb25zR3JvdXBzKVxuICAgICYmIGZvcm1WYWx1ZXMudmFyaWF0aW9uc0dyb3Vwcy5sZW5ndGhcbiAgICA/IGZvcm1WYWx1ZXMudmFyaWF0aW9uc0dyb3Vwc1xuICAgIDogW3t9XTtcbiAgY29uc3QgbWF0Y2hlZDogYW55W10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICBtYXRjaGVkLnB1c2goLi4udmlzaWJsZVRlbXBsYXRlc0Zvckdyb3VwKFxuICAgICAgcHJvZHVjdCxcbiAgICAgIGluZGVwZW5kZW50LFxuICAgICAgZ3JvdXA/LnZhcmlhdGlvbnMgfHwgW10sXG4gICAgKSk7XG4gIH1cbiAgaWYgKG1hdGNoZWQubGVuZ3RoKSByZXR1cm4gdW5pcXVlRmlsZVRlbXBsYXRlcyhtYXRjaGVkKTtcbiAgcmV0dXJuIHVuaXF1ZUZpbGVUZW1wbGF0ZXMocHJvZHVjdD8uZHJhZnRUZW1wbGF0ZXMgfHwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FudmFzS2luZEZvckZpZWxkKGZpZWxkOiBhbnkpOiBEcmFmdENhbnZhc09iamVjdFR5cGUgfCBudWxsIHtcbiAgaWYgKHBhcnNlSW50KFN0cmluZyhmaWVsZD8uZmllbGRUeXBlKSwgMTApID09PSBGaWVsZFR5cGUuRU1CUk9JREVSWSkge1xuICAgIHJldHVybiBmaWVsZD8uZW1icm9pZGVyeUlucHV0TW9kZSA9PT0gJ3RleHQnID8gJ3RleHQnIDogJ2ltYWdlJztcbiAgfVxuICByZXR1cm4gY2FudmFzS2luZEZvckZpZWxkVHlwZShmaWVsZD8uZmllbGRUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc0tpbmRGb3JGaWVsZFR5cGUoXG4gIGZpZWxkVHlwZTogYW55LFxuKTogRHJhZnRDYW52YXNPYmplY3RUeXBlIHwgbnVsbCB7XG4gIHN3aXRjaCAocGFyc2VJbnQoU3RyaW5nKGZpZWxkVHlwZSksIDEwKSkge1xuICAgIGNhc2UgRmllbGRUeXBlLlRFWFRfSU5QVVQ6XG4gICAgY2FzZSBGaWVsZFR5cGUuVEVYVF9BUkVBOlxuICAgIGNhc2UgRmllbGRUeXBlLk5VTUJFUl9JTlBVVDpcbiAgICBjYXNlIEZpZWxkVHlwZS5TRUxFQ1Q6XG4gICAgY2FzZSBGaWVsZFR5cGUuUkFESU86XG4gICAgY2FzZSBGaWVsZFR5cGUuQ0hFQ0tCT1g6XG4gICAgICByZXR1cm4gJ3RleHQnO1xuICAgIGNhc2UgRmllbGRUeXBlLkZJTEVfVVBMT0FEOlxuICAgIGNhc2UgRmllbGRUeXBlLklNQUdFX1NFTEVDVDpcbiAgICAgIHJldHVybiAnaW1hZ2UnO1xuICAgIGNhc2UgRmllbGRUeXBlLkNPTE9VUl9QSUNLRVI6XG4gICAgY2FzZSBGaWVsZFR5cGUuQ09MT1VSX1NFTEVDVDpcbiAgICBjYXNlIEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVDpcbiAgICBjYXNlIEZpZWxkVHlwZS5QQU5UT05FX0NPTE9VUl9TRUxFQ1Q6XG4gICAgICByZXR1cm4gJ3JlY3QnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBvcHRpb25CeUlkKHZhcmlhdGlvbjogYW55LCBpZDogbnVtYmVyKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZnJvbVNlbGVjdGFibGUgPSAodmFyaWF0aW9uPy5zZWxlY3RhYmxlT3B0aW9ucyB8fCBbXSkuZmluZChcbiAgICAob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5vcHRpb25JZCA9PT0gaWQgfHwgb3B0aW9uLmlkID09PSBpZFxuICApO1xuICBpZiAoZnJvbVNlbGVjdGFibGUpIHJldHVybiBmcm9tU2VsZWN0YWJsZTtcbiAgcmV0dXJuICh2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkPy5vcHRpb25zIHx8IFtdKS5maW5kKFxuICAgIChvcHRpb246IGFueSkgPT4gb3B0aW9uLmlkID09PSBpZCB8fCBvcHRpb24ub3B0aW9uSWQgPT09IGlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYXRpb25DYW52YXNDb250ZW50KHZhcmlhdGlvbjogYW55KToge1xuICBraW5kOiBEcmFmdENhbnZhc09iamVjdFR5cGUgfCBudWxsO1xuICB0ZXh0Pzogc3RyaW5nO1xuICBzcmM/OiBzdHJpbmc7XG4gIGZpbGw/OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgZmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkO1xuICBjb25zdCBraW5kID0gY2FudmFzS2luZEZvckZpZWxkKGZpZWxkKTtcbiAgaWYgKCFraW5kKSByZXR1cm4geyBraW5kOiBudWxsIH07XG5cbiAgY29uc3QgdHlwZSA9IHBhcnNlSW50KFN0cmluZyhmaWVsZC5maWVsZFR5cGUpLCAxMCk7XG5cbiAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FTUJST0lERVJZKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VFbWJyb2lkZXJ5VmFsdWUodmFyaWF0aW9uPy52YWx1ZSk7XG4gICAgaWYgKGtpbmQgPT09ICdpbWFnZScpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSAodmFyaWF0aW9uPy52YXJpYXRpb25GaWxlcyB8fCBbXSlbMF07XG4gICAgICByZXR1cm4geyBraW5kLCBzcmM6IGZpbGU/LnZpZXdVcmwgfHwgZmlsZT8uY2FjaGVkVmlld1VybCB8fCAnJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBraW5kLCB0ZXh0OiBwYXJzZWQ/LnRleHQgfHwgJycgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSAndGV4dCcpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSBGaWVsZFR5cGUuU0VMRUNUXG4gICAgICB8fCB0eXBlID09PSBGaWVsZFR5cGUuUkFESU9cbiAgICAgIHx8IHR5cGUgPT09IEZpZWxkVHlwZS5DSEVDS0JPWFxuICAgICkge1xuICAgICAgY29uc3QgbmFtZXMgPSBwYXJzZVNlbGVjdGVkT3B0aW9uSWRzKHZhcmlhdGlvbi52YWx1ZSlcbiAgICAgICAgLm1hcCgoaWQpID0+IG9wdGlvbkJ5SWQodmFyaWF0aW9uLCBpZCk/LnZhbHVlKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHsga2luZCwgdGV4dDogbmFtZXMuam9pbignLCAnKSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2luZCxcbiAgICAgIHRleHQ6IHZhcmlhdGlvbj8udmFsdWUgIT0gbnVsbCAmJiB2YXJpYXRpb24udmFsdWUgIT09ICcnXG4gICAgICAgID8gU3RyaW5nKHZhcmlhdGlvbi52YWx1ZSlcbiAgICAgICAgOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09ICdpbWFnZScpIHtcbiAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkZJTEVfVVBMT0FEKSB7XG4gICAgICBjb25zdCBmaWxlID0gKHZhcmlhdGlvbj8udmFyaWF0aW9uRmlsZXMgfHwgW10pWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZCxcbiAgICAgICAgc3JjOiBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmNhY2hlZFZpZXdVcmwgfHwgJycsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpZHMgPSBwYXJzZVNlbGVjdGVkT3B0aW9uSWRzKHZhcmlhdGlvbi52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uID0gaWRzLmxlbmd0aCA/IG9wdGlvbkJ5SWQodmFyaWF0aW9uLCBpZHNbMF0pIDogbnVsbDtcbiAgICBjb25zdCBmaWxlID0gb3B0aW9uPy5saW5rZWRGaWxlO1xuICAgIHJldHVybiB7IGtpbmQsIHNyYzogZmlsZT8udmlld1VybCB8fCBmaWxlPy5jYWNoZWRWaWV3VXJsIHx8ICcnIH07XG4gIH1cblxuICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9QSUNLRVIpIHtcbiAgICByZXR1cm4geyBraW5kLCBmaWxsOiBub3JtYWxpc2VDc3NDb2xvdXIodmFyaWF0aW9uPy52YWx1ZSkgfHwgJyMwMDAwMDAnIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5QQU5UT05FX0NPTE9VUl9TRUxFQ1QgJiYgZmllbGQ/LmFsbG93QWxsUGFudG9uZXMpIHtcbiAgICByZXR1cm4geyBraW5kLCBmaWxsOiBwYW50b25lQnlDb2RlKHZhcmlhdGlvbj8udmFsdWUpPy5oZXggfHwgJyNjY2NjY2MnIH07XG4gIH1cbiAgY29uc3QgaWRzID0gcGFyc2VTZWxlY3RlZE9wdGlvbklkcyh2YXJpYXRpb24udmFsdWUpO1xuICBjb25zdCBvcHRpb24gPSBpZHMubGVuZ3RoID8gb3B0aW9uQnlJZCh2YXJpYXRpb24sIGlkc1swXSkgOiBudWxsO1xuICBjb25zdCBzZWxlY3RlZCA9ICh2YXJpYXRpb24/LnNlbGVjdGVkT3B0aW9ucyB8fCBbXSlbMF07XG4gIHJldHVybiB7XG4gICAga2luZCxcbiAgICBmaWxsOiBub3JtYWxpc2VDc3NDb2xvdXIoXG4gICAgICBvcHRpb24/LmNvbG91cixcbiAgICAgIHNlbGVjdGVkPy5jb2xvdXIsXG4gICAgICBvcHRpb24/LnZhbHVlLFxuICAgICAgc2VsZWN0ZWQ/LnZhbHVlLFxuICAgICAgdmFyaWF0aW9uPy52YWx1ZSxcbiAgICApLFxuICB9O1xufVxuXG5jb25zdCBIRVhfQ09MT1VSID0gL14jKFswLTlhLWZdezN9fFswLTlhLWZdezZ9fFswLTlhLWZdezh9KSQvaTtcbmNvbnN0IENTU19GVU5DVElPTl9DT0xPVVIgPSAvXihyZ2JhP3xoc2xhPylcXCgvaTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGlzZUNzc0NvbG91ciguLi5jYW5kaWRhdGVzOiBhbnlbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgY2FuZGlkYXRlcykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykgY29udGludWU7XG4gICAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbHVlKS50cmltKCk7XG4gICAgaWYgKCFyYXcgfHwgL15cXGQrJC8udGVzdChyYXcpKSBjb250aW51ZTtcbiAgICBpZiAoSEVYX0NPTE9VUi50ZXN0KHJhdykpIHtcbiAgICAgIGlmIChyYXcubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHJldHVybiBgIyR7cmF3WzFdfSR7cmF3WzFdfSR7cmF3WzJdfSR7cmF3WzJdfSR7cmF3WzNdfSR7cmF3WzNdfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICBpZiAoQ1NTX0ZVTkNUSU9OX0NPTE9VUi50ZXN0KHJhdykpIHJldHVybiByYXc7XG4gICAgaWYgKC9eW2Etel1bYS16XFxzLV17Mix9JC9pLnRlc3QocmF3KSkgcmV0dXJuIHJhdztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua2VkVmFyaWF0aW9uc0ZvclRlbXBsYXRlKFxuICB0ZW1wbGF0ZTogYW55LFxuICB2YXJpYXRpb25zOiBhbnlbXSxcbik6IGFueVtdIHtcbiAgY29uc3QgbGlua2VkSWRzID0gbmV3IFNldChcbiAgICAodGVtcGxhdGU/LmVkaXRlZEJ5VmFyaWF0aW9uRmllbGRzIHx8IFtdKVxuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4gZmllbGQ/LmlkKVxuICAgICAgLmZpbHRlcigoaWQ6IGFueSkgPT4gaWQgIT0gbnVsbClcbiAgKTtcbiAgaWYgKCFsaW5rZWRJZHMuc2l6ZSkgcmV0dXJuIFtdO1xuICByZXR1cm4gKHZhcmlhdGlvbnMgfHwgW10pLmZpbHRlcigodmFyaWF0aW9uKSA9PlxuICAgIGxpbmtlZElkcy5oYXModmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZD8uaWQpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYXRpb25zRm9yR3JvdXAoXG4gIGZvcm1WYWx1ZXM6IGFueSxcbiAgZ3JvdXBJbmRleDogbnVtYmVyLFxuKTogYW55W10ge1xuICBjb25zdCBpbmRlcGVuZGVudCA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnMgfHwgW107XG4gIGNvbnN0IGdyb3VwID0gZm9ybVZhbHVlcz8udmFyaWF0aW9uc0dyb3Vwcz8uW2dyb3VwSW5kZXhdPy52YXJpYXRpb25zIHx8IFtdO1xuICByZXR1cm4gWy4uLmluZGVwZW5kZW50LCAuLi5ncm91cF07XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRCYm94KGJib3g6IGFueSk6IGJib3ggaXMgbnVtYmVyW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkgfHwgYmJveC5sZW5ndGggIT09IDQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveC5tYXAoTnVtYmVyKTtcbiAgcmV0dXJuIHcgPiAwICYmIGggPiAwICYmIHggPj0gMCAmJiB4IDw9IDEgJiYgeSA+PSAwICYmIHkgPD0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvbnNGb3JSb2xlKGN1c3RvbWlzYXRpb25NYXA6IGFueSwgcm9sZTogc3RyaW5nKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHJlZ2lvbnMgPSBjdXN0b21pc2F0aW9uTWFwPy5yZWdpb25zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVnaW9ucykpIHJldHVybiBbXTtcbiAgcmV0dXJuIHJlZ2lvbnNcbiAgICAuZmlsdGVyKChyZWdpb246IGFueSkgPT4gcmVnaW9uPy5yb2xlID09PSByb2xlICYmIGlzVmFsaWRCYm94KHJlZ2lvbi5iYm94KSlcbiAgICAubWFwKChyZWdpb246IGFueSkgPT4gcmVnaW9uLmJib3gubWFwKE51bWJlcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmJveFRvUGl4ZWxzKFxuICBiYm94OiBudW1iZXJbXSxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDtcbiAgcmV0dXJuIHtcbiAgICB4OiB4ICogd2lkdGgsXG4gICAgeTogeSAqIGhlaWdodCxcbiAgICB3aWR0aDogdyAqIHdpZHRoLFxuICAgIGhlaWdodDogaCAqIGhlaWdodCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkQmluZGluZ3NGcm9tKHRlbXBsYXRlOiBhbnkpOiBEcmFmdEZpZWxkQmluZGluZ1tdIHtcbiAgY29uc3QgcmF3ID0gdGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXA/LmZpZWxkQmluZGluZ3M7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXcpKSByZXR1cm4gW107XG4gIHJldHVybiByYXcuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gJiYgaXRlbS5maWVsZElkICE9IG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0ZvckZpZWxkKFxuICBiaW5kaW5nczogRHJhZnRGaWVsZEJpbmRpbmdbXSxcbiAgZmllbGRJZDogYW55LFxuKTogRHJhZnRGaWVsZEJpbmRpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBpZCA9IE51bWJlcihmaWVsZElkKTtcbiAgcmV0dXJuIGJpbmRpbmdzLmZpbmQoKGl0ZW0pID0+IE51bWJlcihpdGVtLmZpZWxkSWQpID09PSBpZCk7XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZShmaWVsZDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIFN0cmluZyhmaWVsZD8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gaXNDb2xvdXJLaW5kKGtpbmQ6IERyYWZ0Q2FudmFzT2JqZWN0VHlwZSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtpbmQgPT09ICdyZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmVyQXJ0d29ya1JvbGUoXG4gIGZpZWxkOiBhbnksXG4gIGxpbmtlZEZpZWxkczogYW55W10gPSBbXSxcbik6IERyYWZ0QXJ0d29ya1JvbGUge1xuICBjb25zdCBraW5kID0gY2FudmFzS2luZEZvckZpZWxkKGZpZWxkKTtcbiAgaWYgKGtpbmQgPT09ICdpbWFnZScpIHJldHVybiAnaW1hZ2UnO1xuICBpZiAoa2luZCA9PT0gJ3RleHQnKSByZXR1cm4gJ3RleHQnO1xuICBpZiAoIWlzQ29sb3VyS2luZChraW5kKSkgcmV0dXJuICdhdXRvJztcbiAgY29uc3QgbmFtZSA9IGZpZWxkTmFtZShmaWVsZCk7XG4gIGlmICgvKHRleHR8Zm9udHxsZXR0ZXJ8Y29weSkvLnRlc3QobmFtZSkpIHJldHVybiAndGV4dF9maWxsJztcbiAgaWYgKC8od3Jpc3R8YmFuZHxiYXNlfGJvZHl8Z3JvdW5kfGJsYW5rKS8udGVzdChuYW1lKSkgcmV0dXJuICdib2R5X2NvbG91cl9maWxsJztcbiAgY29uc3QgaGFzVGV4dCA9IGxpbmtlZEZpZWxkcy5zb21lKFxuICAgIChpdGVtKSA9PiBjYW52YXNLaW5kRm9yRmllbGQoaXRlbSkgPT09ICd0ZXh0J1xuICApO1xuICByZXR1cm4gaGFzVGV4dCA/ICd0ZXh0X2ZpbGwnIDogJ2JvZHlfY29sb3VyX2ZpbGwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFydHdvcmtSb2xlKFxuICBmaWVsZDogYW55LFxuICB0ZW1wbGF0ZTogYW55LFxuICBsaW5rZWRGaWVsZHM6IGFueVtdID0gW10sXG4pOiBEcmFmdEFydHdvcmtSb2xlIHtcbiAgY29uc3QgaW5mZXJyZWQgPSBpbmZlckFydHdvcmtSb2xlKGZpZWxkLCBsaW5rZWRGaWVsZHMpO1xuICBpZiAoaW5mZXJyZWQgPT09ICdib2R5X2NvbG91cl9maWxsJykgcmV0dXJuICdib2R5X2NvbG91cl9maWxsJztcbiAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdGb3JGaWVsZChmaWVsZEJpbmRpbmdzRnJvbSh0ZW1wbGF0ZSksIGZpZWxkPy5pZCk7XG4gIGlmIChiaW5kaW5nPy5yb2xlICYmIGJpbmRpbmcucm9sZSAhPT0gJ2F1dG8nKSByZXR1cm4gYmluZGluZy5yb2xlO1xuICByZXR1cm4gaW5mZXJyZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclRleHRUYXJnZXRGaWVsZElkKFxuICBmaWVsZDogYW55LFxuICB0ZW1wbGF0ZTogYW55LFxuICBsaW5rZWRGaWVsZHM6IGFueVtdID0gW10sXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0ZvckZpZWxkKGZpZWxkQmluZGluZ3NGcm9tKHRlbXBsYXRlKSwgZmllbGQ/LmlkKTtcbiAgaWYgKGJpbmRpbmc/LnRhcmdldEZpZWxkSWQgIT0gbnVsbCkgcmV0dXJuIE51bWJlcihiaW5kaW5nLnRhcmdldEZpZWxkSWQpO1xuICBjb25zdCB0ZXh0RmllbGQgPSBsaW5rZWRGaWVsZHMuZmluZChcbiAgICAoaXRlbSkgPT4gY2FudmFzS2luZEZvckZpZWxkKGl0ZW0pID09PSAndGV4dCcgJiYgaXRlbT8uaWQgIT0gbnVsbFxuICApO1xuICByZXR1cm4gdGV4dEZpZWxkPy5pZCAhPSBudWxsID8gTnVtYmVyKHRleHRGaWVsZC5pZCkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRJbnNpZGUoXG4gIGJveDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgY29udGVudFdpZHRoOiBudW1iZXIsXG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlcixcbiAgbG9ja0FzcGVjdFJhdGlvID0gdHJ1ZSxcbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICBpZiAoXG4gICAgIWxvY2tBc3BlY3RSYXRpb1xuICAgIHx8ICEoY29udGVudFdpZHRoID4gMClcbiAgICB8fCAhKGNvbnRlbnRIZWlnaHQgPiAwKVxuICAgIHx8ICEoYm94LndpZHRoID4gMClcbiAgICB8fCAhKGJveC5oZWlnaHQgPiAwKVxuICApIHtcbiAgICByZXR1cm4geyAuLi5ib3ggfTtcbiAgfVxuICBjb25zdCBzY2FsZSA9IE1hdGgubWluKGJveC53aWR0aCAvIGNvbnRlbnRXaWR0aCwgYm94LmhlaWdodCAvIGNvbnRlbnRIZWlnaHQpO1xuICBjb25zdCB3aWR0aCA9IGNvbnRlbnRXaWR0aCAqIHNjYWxlO1xuICBjb25zdCBoZWlnaHQgPSBjb250ZW50SGVpZ2h0ICogc2NhbGU7XG4gIHJldHVybiB7XG4gICAgeDogYm94LnggKyAoYm94LndpZHRoIC0gd2lkdGgpIC8gMixcbiAgICB5OiBib3gueSArIChib3guaGVpZ2h0IC0gaGVpZ2h0KSAvIDIsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkTG9ja0ltYWdlQXNwZWN0KGZpZWxkOiBhbnksIHRlbXBsYXRlPzogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRm9yRmllbGQoZmllbGRCaW5kaW5nc0Zyb20odGVtcGxhdGUpLCBmaWVsZD8uaWQpO1xuICBpZiAodHlwZW9mIGJpbmRpbmc/LmxvY2tBc3BlY3RSYXRpbyA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYmluZGluZy5sb2NrQXNwZWN0UmF0aW87XG4gIGlmICh0eXBlb2YgZmllbGQ/LmFzcGVjdFJhdGlvTG9jayA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gZmllbGQuYXNwZWN0UmF0aW9Mb2NrO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmFja2dyb3VuZEZpbGwob2JqOiB7IHR5cGU/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqPy50eXBlID09PSAncmVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxBcnRib2FyZEZpbGwoXG4gIG9iajogeyB4PzogbnVtYmVyOyB5PzogbnVtYmVyOyB3aWR0aD86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyIH0sXG4gIGFydFdpZHRoOiBudW1iZXIsXG4gIGFydEhlaWdodDogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKG9iai53aWR0aCkgPj0gYXJ0V2lkdGggKiAwLjlcbiAgICAmJiBOdW1iZXIob2JqLmhlaWdodCkgPj0gYXJ0SGVpZ2h0ICogMC45XG4gICAgJiYgTnVtYmVyKG9iai54KSA8PSBhcnRXaWR0aCAqIDAuMDVcbiAgICAmJiBOdW1iZXIob2JqLnkpIDw9IGFydEhlaWdodCAqIDAuMDVcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVEcmFmdFRleHQoXG4gIHRleHQ6IHN0cmluZyxcbiAgZm9udFNpemUgPSA0OCxcbiAgZm9udEZhbWlseT86IHN0cmluZyxcbik6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IGxpbmVzID0gU3RyaW5nKHRleHQgfHwgJ1RleHQnKS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHNpemUgPSBNYXRoLm1heCgxMiwgTnVtYmVyKGZvbnRTaXplKSB8fCA0OCk7XG4gIGxldCB3aWR0aCA9IDA7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgY3R4LmZvbnQgPSBgJHtzaXplfXB4ICR7Y3NzRm9udEZhbWlseShmb250RmFtaWx5KX1gO1xuICAgICAgd2lkdGggPSBNYXRoLm1heCguLi5saW5lcy5tYXAoKGxpbmUpID0+IGN0eC5tZWFzdXJlVGV4dChsaW5lIHx8ICcgJykud2lkdGgpLCAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCEod2lkdGggPiAwKSkge1xuICAgIHdpZHRoID0gTWF0aC5tYXgoLi4ubGluZXMubWFwKChsaW5lKSA9PiAobGluZSB8fCAnICcpLmxlbmd0aCksIDEpICogc2l6ZSAqIDAuNjI7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogTWF0aC5jZWlsKHdpZHRoICsgc2l6ZSAqIDAuMTYpLFxuICAgIGhlaWdodDogTWF0aC5jZWlsKE1hdGgubWF4KDEsIGxpbmVzLmxlbmd0aCkgKiBzaXplICogMS4xNSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRUZXh0Qm94KFxuICBvYmo6IFBpY2s8RHJhZnRDYW52YXNPYmplY3QsICd4JyB8ICd5JyB8ICd3aWR0aCcgfCAnaGVpZ2h0JyB8ICd0ZXh0JyB8ICdmb250U2l6ZScgfCAnZm9udEZhbWlseSc+LFxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZURyYWZ0VGV4dChvYmoudGV4dCB8fCAnVGV4dCcsIG9iai5mb250U2l6ZSwgb2JqLmZvbnRGYW1pbHkpO1xuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDI0LCBtZWFzdXJlZC53aWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDIwLCBtZWFzdXJlZC5oZWlnaHQpO1xuICBjb25zdCBwcmV2VyA9IE51bWJlcihvYmoud2lkdGgpID4gMCA/IE51bWJlcihvYmoud2lkdGgpIDogd2lkdGg7XG4gIGNvbnN0IHByZXZIID0gTnVtYmVyKG9iai5oZWlnaHQpID4gMCA/IE51bWJlcihvYmouaGVpZ2h0KSA6IGhlaWdodDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogKE51bWJlcihvYmoueCkgfHwgMCkgKyAocHJldlcgLSB3aWR0aCkgLyAyLFxuICAgIHk6IChOdW1iZXIob2JqLnkpIHx8IDApICsgKHByZXZIIC0gaGVpZ2h0KSAvIDIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBsYWNlbWVudEJveGVzKFxuICByb2xlOiBEcmFmdEFydHdvcmtSb2xlLFxuICBraW5kOiBEcmFmdENhbnZhc09iamVjdFR5cGUsXG4gIHRlbXBsYXRlOiBhbnksXG4pOiBudW1iZXJbXVtdIHtcbiAgaWYgKHJvbGUgPT09ICdib2R5X2NvbG91cl9maWxsJyB8fCBraW5kID09PSAncmVjdCcpIHtcbiAgICBjb25zdCBib2R5ID0gcmVnaW9uc0ZvclJvbGUodGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXAsICdib2R5X2NvbG91cl9maWxsJyk7XG4gICAgaWYgKGJvZHkubGVuZ3RoKSByZXR1cm4gYm9keTtcbiAgICBjb25zdCBwcmludCA9IHJlZ2lvbnNGb3JSb2xlKHRlbXBsYXRlPy5jdXN0b21pc2F0aW9uTWFwLCAncHJpbnRfYXJlYScpO1xuICAgIGlmIChwcmludC5sZW5ndGgpIHJldHVybiBwcmludDtcbiAgICByZXR1cm4gW1swLCAwLCAxLCAxXV07XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0ZXh0Jykge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHJlZ2lvbnNGb3JSb2xlKHRlbXBsYXRlPy5jdXN0b21pc2F0aW9uTWFwLCAndGV4dF9wbGFjZWhvbGRlcicpO1xuICAgIGlmIChwbGFjZWhvbGRlcnMubGVuZ3RoKSByZXR1cm4gcGxhY2Vob2xkZXJzO1xuICAgIHJldHVybiByZWdpb25zRm9yUm9sZSh0ZW1wbGF0ZT8uY3VzdG9taXNhdGlvbk1hcCwgJ3ByaW50X2FyZWEnKTtcbiAgfVxuICByZXR1cm4gcmVnaW9uc0ZvclJvbGUodGVtcGxhdGU/LmN1c3RvbWlzYXRpb25NYXAsICdwcmludF9hcmVhJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0UGxhY2VtZW50KFxuICBraW5kOiBEcmFmdENhbnZhc09iamVjdFR5cGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIGFydFdpZHRoOiBudW1iZXIsXG4gIGFydEhlaWdodDogbnVtYmVyLFxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KDI0LCBhcnRXaWR0aCAqIDAuMDQpO1xuICBpZiAoa2luZCA9PT0gJ2ltYWdlJykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBhcnRXaWR0aCAqIDAuMixcbiAgICAgIHk6IGFydEhlaWdodCAqIDAuMixcbiAgICAgIHdpZHRoOiBhcnRXaWR0aCAqIDAuNixcbiAgICAgIGhlaWdodDogYXJ0SGVpZ2h0ICogMC42LFxuICAgIH07XG4gIH1cbiAgaWYgKGtpbmQgPT09ICdyZWN0Jykge1xuICAgIHJldHVybiB7IHg6IDAsIHk6IDAsIHdpZHRoOiBhcnRXaWR0aCwgaGVpZ2h0OiBhcnRIZWlnaHQgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHBhZCxcbiAgICB5OiBwYWQgKyBpbmRleCAqIE1hdGgubWF4KDY0LCBhcnRIZWlnaHQgKiAwLjA4KSxcbiAgICB3aWR0aDogYXJ0V2lkdGggLSBwYWQgKiAyLFxuICAgIGhlaWdodDogTWF0aC5tYXgoNTYsIGFydEhlaWdodCAqIDAuMDcpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT2JqZWN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBvYmotJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWVkT3JTeW5jQ2FudmFzKFxuICBleGlzdGluZzogRHJhZnRDYW52YXNTdGF0ZSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHRlbXBsYXRlOiBhbnksXG4gIHZhcmlhdGlvbnM6IGFueVtdLFxuKTogRHJhZnRDYW52YXNTdGF0ZSB7XG4gIGNvbnN0IHdpZHRoID0gTnVtYmVyKHRlbXBsYXRlPy53aWR0aCkgfHwgREVGQVVMVF9BUlRCT0FSRC53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gTnVtYmVyKHRlbXBsYXRlPy5oZWlnaHQpIHx8IERFRkFVTFRfQVJUQk9BUkQuaGVpZ2h0O1xuICBjb25zdCBvYmplY3RzOiBEcmFmdENhbnZhc09iamVjdFtdID0gKGV4aXN0aW5nPy5vYmplY3RzIHx8IFtdKS5tYXAoKG9iaikgPT4gKFxuICAgIG9iai50eXBlID09PSAndGV4dCcgPyB7IC4uLm9iaiwgLi4uZml0VGV4dEJveChvYmopIH0gOiB7IC4uLm9iaiB9XG4gICkpO1xuICBjb25zdCBkZXRhY2hlZCA9IG5ldyBTZXQoZXhpc3Rpbmc/LmRldGFjaGVkRmllbGRJZHMgfHwgW10pO1xuICBjb25zdCBsaW5rZWQgPSBsaW5rZWRWYXJpYXRpb25zRm9yVGVtcGxhdGUodGVtcGxhdGUsIHZhcmlhdGlvbnMpO1xuICBjb25zdCBsaW5rZWRGaWVsZHMgPSBsaW5rZWQubWFwKCh2YXJpYXRpb24pID0+IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQpLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgdXNlZFJlZ2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBmb3IgKGNvbnN0IHZhcmlhdGlvbiBvZiBsaW5rZWQpIHtcbiAgICBjb25zdCBmaWVsZCA9IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ7XG4gICAgaWYgKHJlc29sdmVBcnR3b3JrUm9sZShmaWVsZCwgdGVtcGxhdGUsIGxpbmtlZEZpZWxkcykgIT09ICd0ZXh0X2ZpbGwnKSBjb250aW51ZTtcbiAgICBjb25zdCBpbmRleCA9IG9iamVjdHMuZmluZEluZGV4KFxuICAgICAgKG9iaikgPT4gb2JqLm1lcmNoaUZpZWxkSWQgPT09IGZpZWxkPy5pZCAmJiBvYmoudHlwZSA9PT0gJ3JlY3QnXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgb2JqZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgY29uc3QgYXBwbHlDb2xvdXJUb1RleHQgPSAodGFyZ2V0RmllbGRJZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBmaWxsPzogc3RyaW5nLCBjb2xvdXJGaWVsZElkPzogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFmaWxsIHx8IHRhcmdldEZpZWxkSWQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHRleHRPYmogPSBvYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLm1lcmNoaUZpZWxkSWQgPT09IHRhcmdldEZpZWxkSWQgJiYgb2JqLnR5cGUgPT09ICd0ZXh0Jyk7XG4gICAgaWYgKCF0ZXh0T2JqKSByZXR1cm4gZmFsc2U7XG4gICAgdGV4dE9iai5maWxsID0gZmlsbDtcbiAgICB0ZXh0T2JqLmNvbG91ckZpZWxkSWQgPSBjb2xvdXJGaWVsZElkO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHBsYWNlT2JqZWN0ID0gKFxuICAgIGtpbmQ6IERyYWZ0Q2FudmFzT2JqZWN0VHlwZSxcbiAgICByb2xlOiBEcmFmdEFydHdvcmtSb2xlLFxuICAgIGZpZWxkOiBhbnksXG4gICAgZmllbGRJZDogbnVtYmVyLFxuICAgIGNvbnRlbnQ6IFJldHVyblR5cGU8dHlwZW9mIHZhcmlhdGlvbkNhbnZhc0NvbnRlbnQ+LFxuICApID0+IHtcbiAgICBjb25zdCBib3hlcyA9IHBsYWNlbWVudEJveGVzKHJvbGUsIGtpbmQsIHRlbXBsYXRlKTtcbiAgICBjb25zdCBrZXkgPSBgJHtyb2xlfToke2tpbmR9YDtcbiAgICBjb25zdCByZWdpb25JbmRleCA9IHVzZWRSZWdpb25zW2tleV0gfHwgMDtcbiAgICB1c2VkUmVnaW9uc1trZXldID0gcmVnaW9uSW5kZXggKyAxO1xuICAgIGNvbnN0IGJveCA9IGJveGVzW3JlZ2lvbkluZGV4XSB8fCBib3hlc1swXTtcbiAgICBjb25zdCBwbGFjZSA9IGJveFxuICAgICAgPyBiYm94VG9QaXhlbHMoYm94LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgOiBkZWZhdWx0UGxhY2VtZW50KGtpbmQsIG9iamVjdHMubGVuZ3RoLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBsb2NrQXNwZWN0UmF0aW8gPSBraW5kID09PSAnaW1hZ2UnID8gc2hvdWxkTG9ja0ltYWdlQXNwZWN0KGZpZWxkLCB0ZW1wbGF0ZSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbmV4dDogRHJhZnRDYW52YXNPYmplY3QgPSB7XG4gICAgICBpZDogY3JlYXRlT2JqZWN0SWQoKSxcbiAgICAgIHR5cGU6IGtpbmQsXG4gICAgICBtZXJjaGlGaWVsZElkOiBmaWVsZElkLFxuICAgICAgYXJ0d29ya1JvbGU6IHJvbGUsXG4gICAgICBsb2NrZWQ6IGtpbmQgPT09ICdyZWN0JyxcbiAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgc2NhbGVYOiAxLFxuICAgICAgc2NhbGVZOiAxLFxuICAgICAgbG9ja0FzcGVjdFJhdGlvLFxuICAgICAgLi4ucGxhY2UsXG4gICAgICB0ZXh0OiBjb250ZW50LnRleHQsXG4gICAgICBzcmM6IGNvbnRlbnQuc3JjLFxuICAgICAgZmlsbDogY29udGVudC5maWxsIHx8IChraW5kID09PSAndGV4dCcgPyAnIzExMTExMScgOiB1bmRlZmluZWQpLFxuICAgICAgZm9udEZhbWlseToga2luZCA9PT0gJ3RleHQnID8gREVGQVVMVF9EUkFGVF9GT05UIDogdW5kZWZpbmVkLFxuICAgICAgZm9udFNpemU6IE1hdGgubWF4KDI4LCBNYXRoLnJvdW5kKHBsYWNlLmhlaWdodCAqIDAuNjIpKSxcbiAgICB9O1xuICAgIGlmIChraW5kID09PSAndGV4dCcpIE9iamVjdC5hc3NpZ24obmV4dCwgZml0VGV4dEJveChuZXh0KSk7XG4gICAgaWYgKGtpbmQgPT09ICdyZWN0Jykgb2JqZWN0cy51bnNoaWZ0KG5leHQpO1xuICAgIGVsc2Ugb2JqZWN0cy5wdXNoKG5leHQpO1xuICB9O1xuXG4gIGZvciAoY29uc3QgdmFyaWF0aW9uIG9mIGxpbmtlZCkge1xuICAgIGNvbnN0IGZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZDtcbiAgICBjb25zdCBmaWVsZElkID0gZmllbGQ/LmlkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB2YXJpYXRpb25DYW52YXNDb250ZW50KHZhcmlhdGlvbik7XG4gICAgaWYgKCFjb250ZW50LmtpbmQgfHwgZmllbGRJZCA9PSBudWxsIHx8IGRldGFjaGVkLmhhcyhmaWVsZElkKSkgY29udGludWU7XG4gICAgY29uc3Qgcm9sZSA9IHJlc29sdmVBcnR3b3JrUm9sZShmaWVsZCwgdGVtcGxhdGUsIGxpbmtlZEZpZWxkcyk7XG4gICAgaWYgKHJvbGUgPT09ICd0ZXh0X2ZpbGwnKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGZvdW5kID0gb2JqZWN0cy5maW5kKChvYmopID0+IG9iai5tZXJjaGlGaWVsZElkID09PSBmaWVsZElkKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGlmIChwYXJzZUludChTdHJpbmcoZmllbGQ/LmZpZWxkVHlwZSksIDEwKSA9PT0gRmllbGRUeXBlLkVNQlJPSURFUlkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VFbWJyb2lkZXJ5VmFsdWUodmFyaWF0aW9uPy52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHB4ID0gZW1icm9pZGVyeVBpeGVscyhcbiAgICAgICAgICBOdW1iZXIocGFyc2VkPy53aWR0aE1tKSxcbiAgICAgICAgICBOdW1iZXIocGFyc2VkPy5oZWlnaHRNbSksXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChweCkge1xuICAgICAgICAgIGZvdW5kLndpZHRoID0gcHgud2lkdGg7XG4gICAgICAgICAgZm91bmQuaGVpZ2h0ID0gcHguaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50LmtpbmQgPT09ICd0ZXh0JykgZm91bmQudGV4dCA9IGNvbnRlbnQudGV4dCB8fCBmb3VuZC50ZXh0O1xuICAgICAgICBpZiAoY29udGVudC5raW5kID09PSAnaW1hZ2UnICYmIGNvbnRlbnQuc3JjKSBmb3VuZC5zcmMgPSBjb250ZW50LnNyYztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY29udGVudC5raW5kID09PSAndGV4dCcgJiYgY29udGVudC50ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgZm91bmQudGV4dCA9IGNvbnRlbnQudGV4dDtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmb3VuZCwgZml0VGV4dEJveChmb3VuZCkpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnQua2luZCA9PT0gJ2ltYWdlJyAmJiBjb250ZW50LnNyYykgZm91bmQuc3JjID0gY29udGVudC5zcmM7XG4gICAgICBpZiAoY29udGVudC5raW5kID09PSAncmVjdCcgJiYgY29udGVudC5maWxsKSBmb3VuZC5maWxsID0gY29udGVudC5maWxsO1xuICAgICAgaWYgKGZvdW5kLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgZm91bmQubG9ja0FzcGVjdFJhdGlvID0gc2hvdWxkTG9ja0ltYWdlQXNwZWN0KGZpZWxkLCB0ZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQudHlwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgIGZvdW5kLmxvY2tlZCA9IHRydWU7XG4gICAgICAgIGZvdW5kLmFydHdvcmtSb2xlID0gcm9sZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjb250ZW50LmtpbmQgPT09ICd0ZXh0JyAmJiAhY29udGVudC50ZXh0KSBjb250aW51ZTtcbiAgICBpZiAoY29udGVudC5raW5kID09PSAnaW1hZ2UnICYmICFjb250ZW50LnNyYykgY29udGludWU7XG4gICAgaWYgKGNvbnRlbnQua2luZCA9PT0gJ3JlY3QnICYmICFjb250ZW50LmZpbGwpIGNvbnRpbnVlO1xuICAgIHBsYWNlT2JqZWN0KGNvbnRlbnQua2luZCwgcm9sZSwgZmllbGQsIGZpZWxkSWQsIGNvbnRlbnQpO1xuICB9XG5cbiAgZm9yIChjb25zdCB2YXJpYXRpb24gb2YgbGlua2VkKSB7XG4gICAgY29uc3QgZmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkO1xuICAgIGNvbnN0IGZpZWxkSWQgPSBmaWVsZD8uaWQ7XG4gICAgY29uc3QgY29udGVudCA9IHZhcmlhdGlvbkNhbnZhc0NvbnRlbnQodmFyaWF0aW9uKTtcbiAgICBpZiAoZmllbGRJZCA9PSBudWxsIHx8IGRldGFjaGVkLmhhcyhmaWVsZElkKSB8fCAhY29udGVudC5maWxsKSBjb250aW51ZTtcbiAgICBjb25zdCByb2xlID0gcmVzb2x2ZUFydHdvcmtSb2xlKGZpZWxkLCB0ZW1wbGF0ZSwgbGlua2VkRmllbGRzKTtcbiAgICBpZiAocm9sZSAhPT0gJ3RleHRfZmlsbCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHRhcmdldElkID0gaW5mZXJUZXh0VGFyZ2V0RmllbGRJZChmaWVsZCwgdGVtcGxhdGUsIGxpbmtlZEZpZWxkcyk7XG4gICAgYXBwbHlDb2xvdXJUb1RleHQodGFyZ2V0SWQsIGNvbnRlbnQuZmlsbCwgZmllbGRJZCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBvYmplY3RzLFxuICAgIGRldGFjaGVkRmllbGRJZHM6IEFycmF5LmZyb20oZGV0YWNoZWQpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0YWNoRmllbGQoXG4gIHN0YXRlOiBEcmFmdENhbnZhc1N0YXRlLFxuICBvYmplY3RJZDogc3RyaW5nLFxuKTogRHJhZnRDYW52YXNTdGF0ZSB7XG4gIGNvbnN0IHRhcmdldCA9IHN0YXRlLm9iamVjdHMuZmluZCgob2JqKSA9PiBvYmouaWQgPT09IG9iamVjdElkKTtcbiAgY29uc3QgZGV0YWNoZWRGaWVsZElkcyA9IFsuLi4oc3RhdGUuZGV0YWNoZWRGaWVsZElkcyB8fCBbXSldO1xuICBpZiAodGFyZ2V0Py5tZXJjaGlGaWVsZElkICE9IG51bGwgJiYgIWRldGFjaGVkRmllbGRJZHMuaW5jbHVkZXModGFyZ2V0Lm1lcmNoaUZpZWxkSWQpKSB7XG4gICAgZGV0YWNoZWRGaWVsZElkcy5wdXNoKHRhcmdldC5tZXJjaGlGaWVsZElkKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG9iamVjdHM6IHN0YXRlLm9iamVjdHMuZmlsdGVyKChvYmopID0+IG9iai5pZCAhPT0gb2JqZWN0SWQpLFxuICAgIGRldGFjaGVkRmllbGRJZHMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEFyZWFHdWlkZXModGVtcGxhdGU6IGFueSk6IEFycmF5PHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufT4ge1xuICBjb25zdCB3aWR0aCA9IE51bWJlcih0ZW1wbGF0ZT8ud2lkdGgpIHx8IERFRkFVTFRfQVJUQk9BUkQud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IE51bWJlcih0ZW1wbGF0ZT8uaGVpZ2h0KSB8fCBERUZBVUxUX0FSVEJPQVJELmhlaWdodDtcbiAgcmV0dXJuIHJlZ2lvbnNGb3JSb2xlKHRlbXBsYXRlPy5jdXN0b21pc2F0aW9uTWFwLCAncHJpbnRfYXJlYScpLm1hcCgoYmJveCkgPT5cbiAgICBiYm94VG9QaXhlbHMoYmJveCwgd2lkdGgsIGhlaWdodClcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUNFQSxpQkFBaUIsRUFDakJDLGdCQUFnQixFQU1oQkMsU0FBUyxRQUNKLFNBQVM7QUFDaEIsU0FBU0Msa0JBQWtCLEVBQUVDLGFBQWEsUUFBUSxjQUFjO0FBQ2hFLFNBQVNDLGdCQUFnQixFQUFFQyxvQkFBb0IsUUFBUSxjQUFjO0FBQ3JFLFNBQVNDLGdCQUFnQixRQUFRLFlBQVk7QUFDN0MsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUVoRCxPQUFPLFNBQVNDLHdCQUF3QkEsQ0FBQ0MsT0FBWSxFQUFXO0VBQzlELE9BQU9DLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUcsY0FBYyxDQUFDLElBQUlILE9BQU8sQ0FBQ0csY0FBYyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztBQUNwRjtBQUVBLE9BQU8sU0FBU0MseUJBQXlCQSxDQUFDTCxPQUFZLEVBQVc7RUFDL0QsT0FBT00sT0FBTyxDQUNaLENBQUFOLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFTyxhQUFhLE1BQ25CUCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8s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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const EMBROIDERY = 16;
|
|
2
|
+
export declare const MIN_EMBROIDERY_DPI = 100;
|
|
3
|
+
export interface EmbroideryValue {
|
|
4
|
+
text?: string;
|
|
5
|
+
widthMm?: number;
|
|
6
|
+
heightMm?: number;
|
|
7
|
+
colours?: string[];
|
|
8
|
+
coverage?: number;
|
|
9
|
+
pixelWidth?: number;
|
|
10
|
+
pixelHeight?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function parseEmbroideryValue(value: any): EmbroideryValue | null;
|
|
13
|
+
export declare function embroideryValueJson(value: EmbroideryValue): string;
|
|
14
|
+
export declare function roundMm(value: number): number;
|
|
15
|
+
export declare function effectiveDpi(pixels?: number, mm?: number): number | null;
|
|
16
|
+
export declare function embroideryQualityWarning(value: EmbroideryValue | null): string | null;
|
|
17
|
+
export declare function embroiderySummary(value: any): string;
|
|
18
|
+
export declare function variationValuePath(formValues: any, fieldId: number): string | null;
|
|
19
|
+
export declare function embroideryMillimetres(widthPx: number, heightPx: number, template: any): {
|
|
20
|
+
widthMm: number;
|
|
21
|
+
heightMm: number;
|
|
22
|
+
} | null;
|
|
23
|
+
export declare function embroideryPixels(widthMm: number, heightMm: number, template: any): {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
} | null;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
5
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
6
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
7
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
8
|
+
export var EMBROIDERY = 16;
|
|
9
|
+
export var MIN_EMBROIDERY_DPI = 100;
|
|
10
|
+
export function parseEmbroideryValue(value) {
|
|
11
|
+
if (value == null || value === '') return null;
|
|
12
|
+
if (_typeof(value) === 'object') return value;
|
|
13
|
+
try {
|
|
14
|
+
var parsed = JSON.parse(String(value));
|
|
15
|
+
return parsed && _typeof(parsed) === 'object' ? parsed : null;
|
|
16
|
+
} catch (_unused) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function embroideryValueJson(value) {
|
|
21
|
+
return JSON.stringify(value);
|
|
22
|
+
}
|
|
23
|
+
export function roundMm(value) {
|
|
24
|
+
return Math.round(value * 10) / 10;
|
|
25
|
+
}
|
|
26
|
+
export function effectiveDpi(pixels, mm) {
|
|
27
|
+
if (!pixels || !mm || mm <= 0) return null;
|
|
28
|
+
return pixels / (mm / 25.4);
|
|
29
|
+
}
|
|
30
|
+
export function embroideryQualityWarning(value) {
|
|
31
|
+
if (!value) return null;
|
|
32
|
+
var dpiW = effectiveDpi(value.pixelWidth, value.widthMm);
|
|
33
|
+
var dpiH = effectiveDpi(value.pixelHeight, value.heightMm);
|
|
34
|
+
var values = [dpiW, dpiH].filter(function (item) {
|
|
35
|
+
return item != null;
|
|
36
|
+
});
|
|
37
|
+
if (!values.length) return null;
|
|
38
|
+
var dpi = Math.round(Math.min.apply(Math, _toConsumableArray(values)));
|
|
39
|
+
if (dpi >= MIN_EMBROIDERY_DPI) return null;
|
|
40
|
+
return "Low quality at this size (".concat(dpi, " dpi). Upload a larger image, or reduce the size.");
|
|
41
|
+
}
|
|
42
|
+
export function embroiderySummary(value) {
|
|
43
|
+
var _parsed$colours;
|
|
44
|
+
var parsed = parseEmbroideryValue(value);
|
|
45
|
+
if (!parsed) return value ? String(value) : '';
|
|
46
|
+
var parts = [];
|
|
47
|
+
if (parsed.text) parts.push(String(parsed.text));
|
|
48
|
+
if (parsed.widthMm && parsed.heightMm) {
|
|
49
|
+
parts.push("".concat(parsed.widthMm, " \xD7 ").concat(parsed.heightMm, " mm"));
|
|
50
|
+
}
|
|
51
|
+
var colours = ((_parsed$colours = parsed.colours) === null || _parsed$colours === void 0 ? void 0 : _parsed$colours.length) || 0;
|
|
52
|
+
if (colours) parts.push(colours === 1 ? '1 colour' : "".concat(colours, " colours"));
|
|
53
|
+
return parts.join(' · ');
|
|
54
|
+
}
|
|
55
|
+
export function variationValuePath(formValues, fieldId) {
|
|
56
|
+
var independent = (formValues === null || formValues === void 0 ? void 0 : formValues.variations) || [];
|
|
57
|
+
var top = independent.findIndex(function (variation) {
|
|
58
|
+
var _variation$variationF;
|
|
59
|
+
return Number(variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.id) === Number(fieldId);
|
|
60
|
+
});
|
|
61
|
+
if (top >= 0) return "variations.".concat(top, ".value");
|
|
62
|
+
var groups = (formValues === null || formValues === void 0 ? void 0 : formValues.variationsGroups) || [];
|
|
63
|
+
for (var groupIndex = 0; groupIndex < groups.length; groupIndex += 1) {
|
|
64
|
+
var _groups$groupIndex;
|
|
65
|
+
var variations = ((_groups$groupIndex = groups[groupIndex]) === null || _groups$groupIndex === void 0 ? void 0 : _groups$groupIndex.variations) || [];
|
|
66
|
+
var index = variations.findIndex(function (variation) {
|
|
67
|
+
var _variation$variationF2;
|
|
68
|
+
return Number(variation === null || variation === void 0 || (_variation$variationF2 = variation.variationField) === null || _variation$variationF2 === void 0 ? void 0 : _variation$variationF2.id) === Number(fieldId);
|
|
69
|
+
});
|
|
70
|
+
if (index >= 0) return "variationsGroups.".concat(groupIndex, ".variations.").concat(index, ".value");
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
export function embroideryMillimetres(widthPx, heightPx, template) {
|
|
75
|
+
var artW = Number(template === null || template === void 0 ? void 0 : template.width);
|
|
76
|
+
var artH = Number(template === null || template === void 0 ? void 0 : template.height);
|
|
77
|
+
var realW = Number(template === null || template === void 0 ? void 0 : template.widthMm);
|
|
78
|
+
var realH = Number(template === null || template === void 0 ? void 0 : template.heightMm);
|
|
79
|
+
if (!(artW > 0 && artH > 0 && realW > 0 && realH > 0)) return null;
|
|
80
|
+
if (!(widthPx > 0 && heightPx > 0)) return null;
|
|
81
|
+
return {
|
|
82
|
+
widthMm: roundMm(widthPx / artW * realW),
|
|
83
|
+
heightMm: roundMm(heightPx / artH * realH)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function embroideryPixels(widthMm, heightMm, template) {
|
|
87
|
+
var artW = Number(template === null || template === void 0 ? void 0 : template.width);
|
|
88
|
+
var artH = Number(template === null || template === void 0 ? void 0 : template.height);
|
|
89
|
+
var realW = Number(template === null || template === void 0 ? void 0 : template.widthMm);
|
|
90
|
+
var realH = Number(template === null || template === void 0 ? void 0 : template.heightMm);
|
|
91
|
+
if (!(artW > 0 && artH > 0 && realW > 0 && realH > 0)) return null;
|
|
92
|
+
if (!(widthMm > 0 && heightMm > 0)) return null;
|
|
93
|
+
return {
|
|
94
|
+
width: widthMm / realW * artW,
|
|
95
|
+
height: heightMm / realH * artH
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFTUJST0lERVJZIiwiTUlOX0VNQlJPSURFUllfRFBJIiwicGFyc2VFbWJyb2lkZXJ5VmFsdWUiLCJ2YWx1ZSIsIl90eXBlb2YiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJTdHJpbmciLCJfdW51c2VkIiwiZW1icm9pZGVyeVZhbHVlSnNvbiIsInN0cmluZ2lmeSIsInJvdW5kTW0iLCJNYXRoIiwicm91bmQiLCJlZmZlY3RpdmVEcGkiLCJwaXhlbHMiLCJtbSIsImVtYnJvaWRlcnlRdWFsaXR5V2FybmluZyIsImRwaVciLCJwaXhlbFdpZHRoIiwid2lkdGhNbSIsImRwaUgiLCJwaXhlbEhlaWdodCIsImhlaWdodE1tIiwidmFsdWVzIiwiZmlsdGVyIiwiaXRlbSIsImxlbmd0aCIsImRwaSIsIm1pbiIsImFwcGx5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY29uY2F0IiwiZW1icm9pZGVyeVN1bW1hcnkiLCJfcGFyc2VkJGNvbG91cnMiLCJwYXJ0cyIsInRleHQiLCJwdXNoIiwiY29sb3VycyIsImpvaW4iLCJ2YXJpYXRpb25WYWx1ZVBhdGgiLCJmb3JtVmFsdWVzIiwiZmllbGRJZCIsImluZGVwZW5kZW50IiwidmFyaWF0aW9ucyIsInRvcCIsImZpbmRJbmRleCIsInZhcmlhdGlvbiIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIk51bWJlciIsInZhcmlhdGlvbkZpZWxkIiwiaWQiLCJncm91cHMiLCJ2YXJpYXRpb25zR3JvdXBzIiwiZ3JvdXBJbmRleCIsIl9ncm91cHMkZ3JvdXBJbmRleCIsImluZGV4IiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GMiIsImVtYnJvaWRlcnlNaWxsaW1ldHJlcyIsIndpZHRoUHgiLCJoZWlnaHRQeCIsInRlbXBsYXRlIiwiYXJ0VyIsIndpZHRoIiwiYXJ0SCIsImhlaWdodCIsInJlYWxXIiwicmVhbEgiLCJlbWJyb2lkZXJ5UGl4ZWxzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2VtYnJvaWRlcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEVNQlJPSURFUlkgPSAxNjtcbmV4cG9ydCBjb25zdCBNSU5fRU1CUk9JREVSWV9EUEkgPSAxMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1icm9pZGVyeVZhbHVlIHtcbiAgdGV4dD86IHN0cmluZztcbiAgd2lkdGhNbT86IG51bWJlcjtcbiAgaGVpZ2h0TW0/OiBudW1iZXI7XG4gIGNvbG91cnM/OiBzdHJpbmdbXTtcbiAgY292ZXJhZ2U/OiBudW1iZXI7XG4gIHBpeGVsV2lkdGg/OiBudW1iZXI7XG4gIHBpeGVsSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbWJyb2lkZXJ5VmFsdWUodmFsdWU6IGFueSk6IEVtYnJvaWRlcnlWYWx1ZSB8IG51bGwge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBudWxsO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgcmV0dXJuIHBhcnNlZCAmJiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyA/IHBhcnNlZCA6IG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJyb2lkZXJ5VmFsdWVKc29uKHZhbHVlOiBFbWJyb2lkZXJ5VmFsdWUpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRNbSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxMCkgLyAxMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdGl2ZURwaShwaXhlbHM/OiBudW1iZXIsIG1tPzogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghcGl4ZWxzIHx8ICFtbSB8fCBtbSA8PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHBpeGVscyAvIChtbSAvIDI1LjQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1icm9pZGVyeVF1YWxpdHlXYXJuaW5nKHZhbHVlOiBFbWJyb2lkZXJ5VmFsdWUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICBjb25zdCBkcGlXID0gZWZmZWN0aXZlRHBpKHZhbHVlLnBpeGVsV2lkdGgsIHZhbHVlLndpZHRoTW0pO1xuICBjb25zdCBkcGlIID0gZWZmZWN0aXZlRHBpKHZhbHVlLnBpeGVsSGVpZ2h0LCB2YWx1ZS5oZWlnaHRNbSk7XG4gIGNvbnN0IHZhbHVlcyA9IFtkcGlXLCBkcGlIXS5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIG51bWJlciA9PiBpdGVtICE9IG51bGwpO1xuICBpZiAoIXZhbHVlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICBjb25zdCBkcGkgPSBNYXRoLnJvdW5kKE1hdGgubWluKC4uLnZhbHVlcykpO1xuICBpZiAoZHBpID49IE1JTl9FTUJST0lERVJZX0RQSSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBgTG93IHF1YWxpdHkgYXQgdGhpcyBzaXplICgke2RwaX0gZHBpKS4gVXBsb2FkIGEgbGFyZ2VyIGltYWdlLCBvciByZWR1Y2UgdGhlIHNpemUuYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYnJvaWRlcnlTdW1tYXJ5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUVtYnJvaWRlcnlWYWx1ZSh2YWx1ZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAocGFyc2VkLnRleHQpIHBhcnRzLnB1c2goU3RyaW5nKHBhcnNlZC50ZXh0KSk7XG4gIGlmIChwYXJzZWQud2lkdGhNbSAmJiBwYXJzZWQuaGVpZ2h0TW0pIHtcbiAgICBwYXJ0cy5wdXNoKGAke3BhcnNlZC53aWR0aE1tfSDDlyAke3BhcnNlZC5oZWlnaHRNbX0gbW1gKTtcbiAgfVxuICBjb25zdCBjb2xvdXJzID0gcGFyc2VkLmNvbG91cnM/Lmxlbmd0aCB8fCAwO1xuICBpZiAoY29sb3VycykgcGFydHMucHVzaChjb2xvdXJzID09PSAxID8gJzEgY29sb3VyJyA6IGAke2NvbG91cnN9IGNvbG91cnNgKTtcbiAgcmV0dXJuIHBhcnRzLmpvaW4oJyDCtyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvblZhbHVlUGF0aChmb3JtVmFsdWVzOiBhbnksIGZpZWxkSWQ6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpbmRlcGVuZGVudCA9IGZvcm1WYWx1ZXM/LnZhcmlhdGlvbnMgfHwgW107XG4gIGNvbnN0IHRvcCA9IGluZGVwZW5kZW50LmZpbmRJbmRleChcbiAgICAodmFyaWF0aW9uOiBhbnkpID0+IE51bWJlcih2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkPy5pZCkgPT09IE51bWJlcihmaWVsZElkKVxuICApO1xuICBpZiAodG9wID49IDApIHJldHVybiBgdmFyaWF0aW9ucy4ke3RvcH0udmFsdWVgO1xuICBjb25zdCBncm91cHMgPSBmb3JtVmFsdWVzPy52YXJpYXRpb25zR3JvdXBzIHx8IFtdO1xuICBmb3IgKGxldCBncm91cEluZGV4ID0gMDsgZ3JvdXBJbmRleCA8IGdyb3Vwcy5sZW5ndGg7IGdyb3VwSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHZhcmlhdGlvbnMgPSBncm91cHNbZ3JvdXBJbmRleF0/LnZhcmlhdGlvbnMgfHwgW107XG4gICAgY29uc3QgaW5kZXggPSB2YXJpYXRpb25zLmZpbmRJbmRleChcbiAgICAgICh2YXJpYXRpb246IGFueSkgPT4gTnVtYmVyKHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ/LmlkKSA9PT0gTnVtYmVyKGZpZWxkSWQpXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIGB2YXJpYXRpb25zR3JvdXBzLiR7Z3JvdXBJbmRleH0udmFyaWF0aW9ucy4ke2luZGV4fS52YWx1ZWA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWJyb2lkZXJ5TWlsbGltZXRyZXMoXG4gIHdpZHRoUHg6IG51bWJlcixcbiAgaGVpZ2h0UHg6IG51bWJlcixcbiAgdGVtcGxhdGU6IGFueSxcbik6IHsgd2lkdGhNbTogbnVtYmVyOyBoZWlnaHRNbTogbnVtYmVyIH0gfCBudWxsIHtcbiAgY29uc3QgYXJ0VyA9IE51bWJlcih0ZW1wbGF0ZT8ud2lkdGgpO1xuICBjb25zdCBhcnRIID0gTnVtYmVyKHRlbXBsYXRlPy5oZWlnaHQpO1xuICBjb25zdCByZWFsVyA9IE51bWJlcih0ZW1wbGF0ZT8ud2lkdGhNbSk7XG4gIGNvbnN0IHJlYWxIID0gTnVtYmVyKHRlbXBsYXRlPy5oZWlnaHRNbSk7XG4gIGlmICghKGFydFcgPiAwICYmIGFydEggPiAwICYmIHJlYWxXID4gMCAmJiByZWFsSCA+IDApKSByZXR1cm4gbnVsbDtcbiAgaWYgKCEod2lkdGhQeCA+IDAgJiYgaGVpZ2h0UHggPiAwKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgd2lkdGhNbTogcm91bmRNbSgod2lkdGhQeCAvIGFydFcpICogcmVhbFcpLFxuICAgIGhlaWdodE1tOiByb3VuZE1tKChoZWlnaHRQeCAvIGFydEgpICogcmVhbEgpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1icm9pZGVyeVBpeGVscyhcbiAgd2lkdGhNbTogbnVtYmVyLFxuICBoZWlnaHRNbTogbnVtYmVyLFxuICB0ZW1wbGF0ZTogYW55LFxuKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB7XG4gIGNvbnN0IGFydFcgPSBOdW1iZXIodGVtcGxhdGU/LndpZHRoKTtcbiAgY29uc3QgYXJ0SCA9IE51bWJlcih0ZW1wbGF0ZT8uaGVpZ2h0KTtcbiAgY29uc3QgcmVhbFcgPSBOdW1iZXIodGVtcGxhdGU/LndpZHRoTW0pO1xuICBjb25zdCByZWFsSCA9IE51bWJlcih0ZW1wbGF0ZT8uaGVpZ2h0TW0pO1xuICBpZiAoIShhcnRXID4gMCAmJiBhcnRIID4gMCAmJiByZWFsVyA+IDAgJiYgcmVhbEggPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKHdpZHRoTW0gPiAwICYmIGhlaWdodE1tID4gMCkpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiAod2lkdGhNbSAvIHJlYWxXKSAqIGFydFcsXG4gICAgaGVpZ2h0OiAoaGVpZ2h0TW0gLyByZWFsSCkgKiBhcnRILFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBTyxJQUFNQSxVQUFVLEdBQUcsRUFBRTtBQUM1QixPQUFPLElBQU1DLGtCQUFrQixHQUFHLEdBQUc7QUFZckMsT0FBTyxTQUFTQyxvQkFBb0JBLENBQUNDLEtBQVUsRUFBMEI7RUFDdkUsSUFBSUEsS0FBSyxJQUFJLElBQUksSUFBSUEsS0FBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUk7RUFDOUMsSUFBSUMsT0FBQSxDQUFPRCxLQUFLLE1BQUssUUFBUSxFQUFFLE9BQU9BLEtBQUs7RUFDM0MsSUFBSTtJQUNGLElBQU1FLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0wsS0FBSyxDQUFDLENBQUM7SUFDeEMsT0FBT0UsTUFBTSxJQUFJRCxPQUFBLENBQU9DLE1BQU0sTUFBSyxRQUFRLEdBQUdBLE1BQU0sR0FBRyxJQUFJO0VBQzdELENBQUMsQ0FBQyxPQUFBSSxPQUFBLEVBQU07SUFDTixPQUFPLElBQUk7RUFDYjtBQUNGO0FBRUEsT0FBTyxTQUFTQyxtQkFBbUJBLENBQUNQLEtBQXNCLEVBQVU7RUFDbEUsT0FBT0csSUFBSSxDQUFDSyxTQUFTLENBQUNSLEtBQUssQ0FBQztBQUM5QjtBQUVBLE9BQU8sU0FBU1MsT0FBT0EsQ0FBQ1QsS0FBYSxFQUFVO0VB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
|