@adstore/templates 2.0.16 → 2.0.18
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/CHANGELOG.md +6 -0
- package/dist/templates.es.js +108 -112
- package/dist/templates.umd.js +108 -112
- package/package.json +1 -1
package/dist/templates.es.js
CHANGED
@@ -365,100 +365,6 @@ options.diffed = function(n) {
|
|
365
365
|
var t2 = n.props, e2 = n.__e;
|
366
366
|
null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
|
367
367
|
};
|
368
|
-
const root$i = "_root_24bq9_1";
|
369
|
-
const icon$1 = "_icon_24bq9_5";
|
370
|
-
const iconTarget$1 = "_iconTarget_24bq9_17";
|
371
|
-
const body$6 = "_body_24bq9_22";
|
372
|
-
const bodyOpen$1 = "_bodyOpen_24bq9_30";
|
373
|
-
const simpleGift_in = "_simpleGift_in_24bq9_1";
|
374
|
-
const close$1 = "_close_24bq9_43";
|
375
|
-
const arrow$1 = "_arrow_24bq9_57";
|
376
|
-
const container$2 = "_container_24bq9_68";
|
377
|
-
const inner$1 = "_inner_24bq9_74";
|
378
|
-
const logo$6 = "_logo_24bq9_81";
|
379
|
-
const text$4 = "_text_24bq9_88";
|
380
|
-
const button$6 = "_button_24bq9_103";
|
381
|
-
const buttonAnimated = "_buttonAnimated_24bq9_112";
|
382
|
-
const increase$1 = "_increase_24bq9_1";
|
383
|
-
const legalGap = "_legalGap_24bq9_116";
|
384
|
-
const legalOpen$1 = "_legalOpen_24bq9_120";
|
385
|
-
const legal$5 = "_legal_24bq9_116";
|
386
|
-
const legalText$1 = "_legalText_24bq9_148";
|
387
|
-
const legalButton$1 = "_legalButton_24bq9_166";
|
388
|
-
const fadein$1 = "_fadein_24bq9_1";
|
389
|
-
const pulse$1 = "_pulse_24bq9_1";
|
390
|
-
const gradient$1 = "_gradient_24bq9_1";
|
391
|
-
const wiggle$1 = "_wiggle_24bq9_1";
|
392
|
-
const styles$d = {
|
393
|
-
root: root$i,
|
394
|
-
icon: icon$1,
|
395
|
-
iconTarget: iconTarget$1,
|
396
|
-
body: body$6,
|
397
|
-
bodyOpen: bodyOpen$1,
|
398
|
-
simpleGift_in,
|
399
|
-
close: close$1,
|
400
|
-
arrow: arrow$1,
|
401
|
-
container: container$2,
|
402
|
-
inner: inner$1,
|
403
|
-
logo: logo$6,
|
404
|
-
text: text$4,
|
405
|
-
button: button$6,
|
406
|
-
buttonAnimated,
|
407
|
-
increase: increase$1,
|
408
|
-
legalGap,
|
409
|
-
legalOpen: legalOpen$1,
|
410
|
-
legal: legal$5,
|
411
|
-
legalText: legalText$1,
|
412
|
-
legalButton: legalButton$1,
|
413
|
-
fadein: fadein$1,
|
414
|
-
pulse: pulse$1,
|
415
|
-
gradient: gradient$1,
|
416
|
-
wiggle: wiggle$1
|
417
|
-
};
|
418
|
-
const useGiftOpen = (delay = 1e3) => {
|
419
|
-
const [isOpen, setIsOpen] = h(false);
|
420
|
-
const timerRef = _$1(null);
|
421
|
-
const onToggle = () => {
|
422
|
-
clearTimeout(timerRef.current);
|
423
|
-
setIsOpen((prev) => !prev);
|
424
|
-
};
|
425
|
-
p(() => {
|
426
|
-
timerRef.current = setTimeout(() => {
|
427
|
-
setIsOpen(true);
|
428
|
-
}, delay);
|
429
|
-
return () => clearTimeout(timerRef.current);
|
430
|
-
}, [delay]);
|
431
|
-
return {
|
432
|
-
isOpen,
|
433
|
-
onToggle
|
434
|
-
};
|
435
|
-
};
|
436
|
-
var _ = 0;
|
437
|
-
function o(o2, e2, n, t2, f2, l2) {
|
438
|
-
var s2, u2, a2 = {};
|
439
|
-
for (u2 in e2)
|
440
|
-
"ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
|
441
|
-
var i2 = { type: o2, props: a2, key: n, ref: s2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: --_, __source: f2, __self: l2 };
|
442
|
-
if ("function" == typeof o2 && (s2 = o2.defaultProps))
|
443
|
-
for (u2 in s2)
|
444
|
-
void 0 === a2[u2] && (a2[u2] = s2[u2]);
|
445
|
-
return options.vnode && options.vnode(i2), i2;
|
446
|
-
}
|
447
|
-
const State = createContext();
|
448
|
-
const StateContext = ({
|
449
|
-
children,
|
450
|
-
value
|
451
|
-
}) => {
|
452
|
-
return o(State.Provider, {
|
453
|
-
value,
|
454
|
-
children
|
455
|
-
});
|
456
|
-
};
|
457
|
-
const render = (vNode) => (target, state) => render$1(o(StateContext, {
|
458
|
-
value: state,
|
459
|
-
children: vNode
|
460
|
-
}), target);
|
461
|
-
const useCurrentState = () => q$1(State);
|
462
368
|
function listCacheClear$1() {
|
463
369
|
this.__data__ = [];
|
464
370
|
this.size = 0;
|
@@ -559,10 +465,10 @@ var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && common
|
|
559
465
|
var _freeGlobal = freeGlobal$1;
|
560
466
|
var freeGlobal = _freeGlobal;
|
561
467
|
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
|
562
|
-
var root$
|
563
|
-
var _root = root$
|
564
|
-
var root$
|
565
|
-
var Symbol$3 = root$
|
468
|
+
var root$i = freeGlobal || freeSelf || Function("return this")();
|
469
|
+
var _root = root$i;
|
470
|
+
var root$h = _root;
|
471
|
+
var Symbol$3 = root$h.Symbol;
|
566
472
|
var _Symbol = Symbol$3;
|
567
473
|
var Symbol$2 = _Symbol;
|
568
474
|
var objectProto$a = Object.prototype;
|
@@ -618,8 +524,8 @@ function isFunction$3(value) {
|
|
618
524
|
return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
|
619
525
|
}
|
620
526
|
var isFunction_1 = isFunction$3;
|
621
|
-
var root$
|
622
|
-
var coreJsData$1 = root$
|
527
|
+
var root$g = _root;
|
528
|
+
var coreJsData$1 = root$g["__core-js_shared__"];
|
623
529
|
var _coreJsData = coreJsData$1;
|
624
530
|
var coreJsData = _coreJsData;
|
625
531
|
var maskSrcKey = function() {
|
@@ -673,8 +579,8 @@ function getNative$3(object, key) {
|
|
673
579
|
return baseIsNative(value) ? value : void 0;
|
674
580
|
}
|
675
581
|
var _getNative = getNative$3;
|
676
|
-
var getNative$2 = _getNative, root$
|
677
|
-
var Map$3 = getNative$2(root$
|
582
|
+
var getNative$2 = _getNative, root$f = _root;
|
583
|
+
var Map$3 = getNative$2(root$f, "Map");
|
678
584
|
var _Map = Map$3;
|
679
585
|
var getNative$1 = _getNative;
|
680
586
|
var nativeCreate$4 = getNative$1(Object, "create");
|
@@ -898,8 +804,8 @@ var _cloneBuffer = {
|
|
898
804
|
}
|
899
805
|
module.exports = cloneBuffer2;
|
900
806
|
})(_cloneBuffer, _cloneBufferExports);
|
901
|
-
var root$
|
902
|
-
var Uint8Array$1 = root$
|
807
|
+
var root$e = _root;
|
808
|
+
var Uint8Array$1 = root$e.Uint8Array;
|
903
809
|
var _Uint8Array = Uint8Array$1;
|
904
810
|
var Uint8Array = _Uint8Array;
|
905
811
|
function cloneArrayBuffer$1(arrayBuffer) {
|
@@ -1446,6 +1352,7 @@ const hexToRgb = (hex) => {
|
|
1446
1352
|
const isJsonSame = (...values) => {
|
1447
1353
|
return values.map((value) => JSON.stringify(value)).every((val, _2, arr) => val === arr[0]);
|
1448
1354
|
};
|
1355
|
+
const isValidTemplate = (data) => "id" in data && "root" in data;
|
1449
1356
|
const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
|
1450
1357
|
const devices = ["desktop", "laptop", "tablet", "mobile"];
|
1451
1358
|
const BREAKPOINTS = {
|
@@ -1454,6 +1361,100 @@ const BREAKPOINTS = {
|
|
1454
1361
|
laptop: 1024,
|
1455
1362
|
desktop: 1920
|
1456
1363
|
};
|
1364
|
+
const root$d = "_root_24bq9_1";
|
1365
|
+
const icon$1 = "_icon_24bq9_5";
|
1366
|
+
const iconTarget$1 = "_iconTarget_24bq9_17";
|
1367
|
+
const body$6 = "_body_24bq9_22";
|
1368
|
+
const bodyOpen$1 = "_bodyOpen_24bq9_30";
|
1369
|
+
const simpleGift_in = "_simpleGift_in_24bq9_1";
|
1370
|
+
const close$1 = "_close_24bq9_43";
|
1371
|
+
const arrow$1 = "_arrow_24bq9_57";
|
1372
|
+
const container$2 = "_container_24bq9_68";
|
1373
|
+
const inner$1 = "_inner_24bq9_74";
|
1374
|
+
const logo$6 = "_logo_24bq9_81";
|
1375
|
+
const text$4 = "_text_24bq9_88";
|
1376
|
+
const button$6 = "_button_24bq9_103";
|
1377
|
+
const buttonAnimated = "_buttonAnimated_24bq9_112";
|
1378
|
+
const increase$1 = "_increase_24bq9_1";
|
1379
|
+
const legalGap = "_legalGap_24bq9_116";
|
1380
|
+
const legalOpen$1 = "_legalOpen_24bq9_120";
|
1381
|
+
const legal$5 = "_legal_24bq9_116";
|
1382
|
+
const legalText$1 = "_legalText_24bq9_148";
|
1383
|
+
const legalButton$1 = "_legalButton_24bq9_166";
|
1384
|
+
const fadein$1 = "_fadein_24bq9_1";
|
1385
|
+
const pulse$1 = "_pulse_24bq9_1";
|
1386
|
+
const gradient$1 = "_gradient_24bq9_1";
|
1387
|
+
const wiggle$1 = "_wiggle_24bq9_1";
|
1388
|
+
const styles$d = {
|
1389
|
+
root: root$d,
|
1390
|
+
icon: icon$1,
|
1391
|
+
iconTarget: iconTarget$1,
|
1392
|
+
body: body$6,
|
1393
|
+
bodyOpen: bodyOpen$1,
|
1394
|
+
simpleGift_in,
|
1395
|
+
close: close$1,
|
1396
|
+
arrow: arrow$1,
|
1397
|
+
container: container$2,
|
1398
|
+
inner: inner$1,
|
1399
|
+
logo: logo$6,
|
1400
|
+
text: text$4,
|
1401
|
+
button: button$6,
|
1402
|
+
buttonAnimated,
|
1403
|
+
increase: increase$1,
|
1404
|
+
legalGap,
|
1405
|
+
legalOpen: legalOpen$1,
|
1406
|
+
legal: legal$5,
|
1407
|
+
legalText: legalText$1,
|
1408
|
+
legalButton: legalButton$1,
|
1409
|
+
fadein: fadein$1,
|
1410
|
+
pulse: pulse$1,
|
1411
|
+
gradient: gradient$1,
|
1412
|
+
wiggle: wiggle$1
|
1413
|
+
};
|
1414
|
+
const useGiftOpen = (delay = 1e3) => {
|
1415
|
+
const [isOpen, setIsOpen] = h(false);
|
1416
|
+
const timerRef = _$1(null);
|
1417
|
+
const onToggle = () => {
|
1418
|
+
clearTimeout(timerRef.current);
|
1419
|
+
setIsOpen((prev) => !prev);
|
1420
|
+
};
|
1421
|
+
p(() => {
|
1422
|
+
timerRef.current = setTimeout(() => {
|
1423
|
+
setIsOpen(true);
|
1424
|
+
}, delay);
|
1425
|
+
return () => clearTimeout(timerRef.current);
|
1426
|
+
}, [delay]);
|
1427
|
+
return {
|
1428
|
+
isOpen,
|
1429
|
+
onToggle
|
1430
|
+
};
|
1431
|
+
};
|
1432
|
+
var _ = 0;
|
1433
|
+
function o(o2, e2, n, t2, f2, l2) {
|
1434
|
+
var s2, u2, a2 = {};
|
1435
|
+
for (u2 in e2)
|
1436
|
+
"ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
|
1437
|
+
var i2 = { type: o2, props: a2, key: n, ref: s2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: --_, __source: f2, __self: l2 };
|
1438
|
+
if ("function" == typeof o2 && (s2 = o2.defaultProps))
|
1439
|
+
for (u2 in s2)
|
1440
|
+
void 0 === a2[u2] && (a2[u2] = s2[u2]);
|
1441
|
+
return options.vnode && options.vnode(i2), i2;
|
1442
|
+
}
|
1443
|
+
const State = createContext();
|
1444
|
+
const StateContext = ({
|
1445
|
+
children,
|
1446
|
+
value
|
1447
|
+
}) => {
|
1448
|
+
return o(State.Provider, {
|
1449
|
+
value,
|
1450
|
+
children
|
1451
|
+
});
|
1452
|
+
};
|
1453
|
+
const render = (vNode) => (target, state) => render$1(o(StateContext, {
|
1454
|
+
value: state,
|
1455
|
+
children: vNode
|
1456
|
+
}), target);
|
1457
|
+
const useCurrentState = () => q$1(State);
|
1457
1458
|
const isValidLayer = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
|
1458
1459
|
const getRules = (state, device) => {
|
1459
1460
|
if (!state)
|
@@ -1677,7 +1678,7 @@ const useGiftRules = (deviceState, animations) => {
|
|
1677
1678
|
};
|
1678
1679
|
};
|
1679
1680
|
const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
|
1680
|
-
const borderOptions = ["borderWidth", "borderColor"];
|
1681
|
+
const borderOptions = ["borderWidth", "borderColor", "borderStyle"];
|
1681
1682
|
const spacingOptions = ["marginTop", "marginBottom", "marginLeft", "marginRight", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight"];
|
1682
1683
|
const noopYaMetrika = (goal) => console.log(`Noop YaMektika reach goal: ${goal}`);
|
1683
1684
|
const noopAdFox = (goal) => console.log(`Noop AdFox reach goal: ${goal}`);
|
@@ -1731,9 +1732,6 @@ const SimpleGift = () => {
|
|
1731
1732
|
targetRef: rootRef
|
1732
1733
|
});
|
1733
1734
|
const deviceState = useGetRules(state, device);
|
1734
|
-
if (device === "mobile") {
|
1735
|
-
set(deviceState, "container.left", -215);
|
1736
|
-
}
|
1737
1735
|
const rules = useParseRules(deviceState);
|
1738
1736
|
const onClick = useMetrics(deviceState);
|
1739
1737
|
const {
|
@@ -1957,9 +1955,6 @@ const ComplexGift = () => {
|
|
1957
1955
|
targetRef: rootRef
|
1958
1956
|
});
|
1959
1957
|
const deviceState = useGetRules(state, device);
|
1960
|
-
if (device === "mobile") {
|
1961
|
-
set(deviceState, "container.left", -215);
|
1962
|
-
}
|
1963
1958
|
const rules = useParseRules(deviceState);
|
1964
1959
|
useExtractFonts(deviceState);
|
1965
1960
|
const {
|
@@ -2886,6 +2881,7 @@ export {
|
|
2886
2881
|
index$6 as SimpleGift,
|
2887
2882
|
index$4 as SimplePopup,
|
2888
2883
|
index as WideCard,
|
2884
|
+
isValidTemplate,
|
2889
2885
|
modifyState
|
2890
2886
|
};
|
2891
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9IDxUVmFsdWUgPSB1bmtub3duPigpID0+IHVzZUNvbnRleHQ8VFZhbHVlPihTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93biwgc3RyaW5nXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yLCBwYXRoPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwgaW5kZXhdLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIHJldHVybiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGtleV0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgfHwgdmFsdWUgPT09IG51bGxcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cbmV4cG9ydCBjb25zdCBib3JkZXJPcHRpb25zID0gWydib3JkZXJXaWR0aCcsICdib3JkZXJDb2xvciddXG5cbmV4cG9ydCBjb25zdCBzcGFjaW5nT3B0aW9ucyA9IFtcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5cbmV4cG9ydCBjb25zdCBub29wWWFNZXRyaWthID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgWWFNZWt0aWthIHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuZXhwb3J0IGNvbnN0IG5vb3BBZEZveCA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIEFkRm94IHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgaXNKc29uU2FtZSwgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgbm9vcEFkRm94LCBub29wWWFNZXRyaWthIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlTWV0cmljcyA9IChzdGF0ZTogdW5rbm93biwgbGF5ZXJOYW1lID0gJ3Jvb3QnKSA9PiB7XG4gIGNvbnN0IHNhdmVNZXRyaWNzID0gdXNlUmVmKClcbiAgY29uc3QgeWFSZWFjaEdvYWwgPSBzdGF0ZS55YVJlYWNoR29hbCB8fCBub29wWWFNZXRyaWthXG4gIGNvbnN0IGFkZm94UmVhY2hHb2FsID0gc3RhdGUuYWRmb3hSZWFjaEdvYWwgfHwgbm9vcEFkRm94XG4gIGNvbnN0IG1ldHJpY3MgPSBwaWNrKHN0YXRlW2xheWVyTmFtZV0sICd5YVNob3cnLCAneWFDbGljaycsICdhZGZveFNob3cnLCAnYWRmb3hDbGljaycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzSnNvblNhbWUoc2F2ZU1ldHJpY3MuY3VycmVudCwgbWV0cmljcykpIHtcbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhU2hvdylcbiAgICAgIH1cbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94U2hvdylcbiAgICAgIH1cbiAgICB9XG4gICAgc2F2ZU1ldHJpY3MuY3VycmVudCA9IG1ldHJpY3NcbiAgfSwgW21ldHJpY3NdKVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG1ldHJpY3MueWFDbGljaykge1xuICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YUNsaWNrKVxuICAgIH1cbiAgICBpZiAobWV0cmljcy5hZGZveENsaWNrKSB7XG4gICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94Q2xpY2spXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpbmplY3RMaW5rLCBpdGVyYXRvciB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjsgLy8gaHR0cHM6Ly9naXRodWIuY29tL0Rvd25sb2FkL3ByZWFjdC1oZWxtZXQvaXNzdWVzLzM0XG5cbmV4cG9ydCBjb25zdCB1c2VFeHRyYWN0Rm9udHMgPSAoc3RhdGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgZm9udHMgPSBuZXcgU2V0KFtdKVxuXG4gIGl0ZXJhdG9yKHN0YXRlLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdmb250RmFtaWx5Jykge1xuICAgICAgZm9udHMuYWRkKHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KVxuXG4gIGNvbnN0IGZvbnRMaW5rcyA9IHVzZU1lbW8oKCkgPT4gQXJyYXkuZnJvbShmb250cy52YWx1ZXMoKSkubWFwKGZvbnQgPT4gKHtcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBgaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PSR7Zm9udH06MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcGBcbiAgfSkpLCBbZm9udHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZm9udExpbmtzLmZvckVhY2goKGxpbmspID0+IGluamVjdExpbmsobGluaykpXG4gIH0sIFtmb250TGlua3NdKVxufVxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcbmltcG9ydCB7IHBpY2ssIHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgYm9yZGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBTaW1wbGVHaWZ0OiBGQzxTdGF0ZT4gPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuXG4gIC8qKlxuICAgKiDQndCwINC80L7QsdC40LvQtSDQvdGD0LbQvdC+INGB0LzQtdGJ0Y/RgtGMINC/0L7QtNCw0YDQvtC6XG4gICAqL1xuICBpZiAoZGV2aWNlID09PSAnbW9iaWxlJykge1xuICAgIHNldChkZXZpY2VTdGF0ZSwgJ2NvbnRhaW5lci5sZWZ0JywgLTIxNSlcbiAgfVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5KVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGxlZ2FsQm9yZGVyID0gbGVnYWxJc09wZW4gPyBwaWNrKHJ1bGVzLmNvbnRhaW5lciwgLi4uYm9yZGVyT3B0aW9ucykgOiB7fVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogbGVnYWxJc09wZW5cbiAgICAgIH0pfVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBzdHlsZT17cnVsZXMuYnV0dG9ufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsR2FwfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXt7IC4uLnJ1bGVzLmxlZ2FsLCAuLi5sZWdhbEJvcmRlciB9fT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPntydWxlcz8ubGVnYWw/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5SW5uZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICA8RGlzcGxheVRleHQ+e3J1bGVzLnRleHQ/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGV4dH0+e3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzQ2FyZFxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXNDYXJkIGZyb20gJy4vY29tcG9uZW50cy9Cb251c0NhcmQnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBwaWNrLCBzZXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcblxuICAvKipcbiAgICog0J3QsCDQvNC+0LHQuNC70LUg0L3Rg9C20L3QviDRgdC80LXRidGP0YLRjCDQv9C+0LTQsNGA0L7QulxuICAgKi9cbiAgaWYgKGRldmljZSA9PT0gJ21vYmlsZScpIHtcbiAgICBzZXQoZGV2aWNlU3RhdGUsICdjb250YWluZXIubGVmdCcsIC0yMTUpXG4gIH1cblxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIGNvbnN0IGhhc1RpdGxlSWNvbiA9IHJ1bGVzPy50aXRsZT8uaGFzSWNvblxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7XG4gICAgICAgICAgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e2JvZHlSdWxlc31cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgICAge2hhc1RpdGxlSWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259IHN0eWxlPXtwaWNrKHJ1bGVzLnRpdGxlLCAnY29sb3InKX0+XG4gICAgICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZFRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PntydWxlcy50aXRsZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcblxuLy8gaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tIFwic3JjXCI7XG4vLyBpbXBvcnQgeyBpc0VtcHR5VmFsdWUsIGlzVmFsdWUgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbi8vXG5cbi8vXG4vLyBleHBvcnQgZGVmYXVsdCAoZW1pdHRlcjogRW1pdHRlclR5cGUpID0+IHtcbi8vICAgZW1pdHRlci5vbigncmVuZGVyTm9kZScsICh7IHJ1bGUsIGxheWVyIH0pID0+IHtcbi8vICAgICBpZiAoJyRhbmltYXRpb25zJyBpbiBydWxlKSB7XG4vLyAgICAgICBjb25zdCBhbGxBbmltYXRpb25zID0gcnVsZS4kYW5pbWF0aW9uc1xuLy8gICAgICAgICAubWFwKChhbmltYXRpb246IGtleW9mIHR5cGVvZiBhbmltYXRpb25zTWFwKSA9PiBhbmltYXRpb25zTWFwW2FuaW1hdGlvbl0pXG4vLyAgICAgICAgIC5qb2luKCcsICcpXG4vL1xuLy8gICAgICAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4vLyAgICAgICAgIGlzVmFsdWUocnVsZS4kZ3JhZGllbnRDb2xvcikgJiYgcnVsZS4kYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuLy8gICAgICAgICAgID8ge1xuLy8gICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZS5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGUuJGdyYWRpZW50Q29sb3J9IDEwMCUpYCxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICA6IHt9XG4vL1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb246IHtcbi8vICAgICAgICAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4vLyAgICAgICAgICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnaWNvbicgJiYgIWlzRW1wdHlWYWx1ZShydWxlLmhhc0ljb24pKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvblRhcmdldDoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdmbGV4JyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAndGl0bGUnKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaGVhZGVySWNvbjoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdibG9jaycgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2NvbnRhaW5lcicpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBib2R5OiB7XG4vLyAgICAgICAgICAgJGRlbGF5OiBydWxlLmRlbGF5LFxuLy8gICAgICAgICAgIGxlZnQ6IHJ1bGUubGVmdFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBhcnJvdzoge1xuLy8gICAgICAgICAgIGxlZnQ6IGAkeysocnVsZS5sZWZ0IHx8IDApICogLTEgKyA4fWAsXG4vLyAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBydWxlLmJhY2tncm91bmRDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgfSlcbi8vIH1cbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChlbCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtlbH0+XG4gICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgIHtidXR0b25SdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge2xlZ2FsUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgc3BhY2luZ09wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3BpY2socnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9IOKAlCB7cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tICdzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgnXG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9jb21wb25lbnRzL01hdGNoJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b25XcmFwcGVyLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uV3JhcHBlcj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfSBzdHlsZT17Y29udGVudFJ1bGVzfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8TWF0Y2ggLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3RleHRSdWxlc30+XG4gICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbkhlYWQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2ssIGRldmljZXMgYXMgZGV2aWNlc0xpc3QsIGdldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICdzcmMvcHJvbW9zL1NpbXBsZUdpZnQvdHlwZXMnXG5cbmNvbnN0IG1vZGlmeVN0YXRlID0gKFxuICBzdGF0ZTogQW55U3RhdGUsXG4gIGxheWVyOiBzdHJpbmcsXG4gIHJ1bGU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24gfCBDYWxsYmFjazxbcHJldlZhbHVlOiB1bmtub3duXT4sXG4gIGRldmljZXMgPSBkZXZpY2VzTGlzdFxuKSA9PiB7XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG5cbiAgZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XG4gICAgbmV3U3RhdGVbbGF5ZXJdID0ge1xuICAgICAgLi4ubmV3U3RhdGVbbGF5ZXJdLFxuICAgICAgW2RldmljZV06IHtcbiAgICAgICAgLi4ubmV3U3RhdGVbbGF5ZXJdW2RldmljZV0sXG4gICAgICAgIFtydWxlXTogdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoZ2V0KG5ld1N0YXRlLCBgJHtsYXllcn0uJHtkZXZpY2V9LiR7cnVsZX1gKSkgOiB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG5ld1N0YXRlXG59XG5cbmV4cG9ydCB7IG1vZGlmeVN0YXRlIH1cbiJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiaSIsImlubmVyIiwibyIsIm4iLCJ0IiwidSIsIkIiLCJyIiwiZiIsImMiLCJlIiwiXyIsIkYiLCJxIiwidyIsImciLCJsIiwidXNlR2lmdE9wZW4iLCJkZWxheSIsImlzT3BlbiIsInNldElzT3BlbiIsInVzZVN0YXRlIiwidGltZXJSZWYiLCJ1c2VSZWYiLCJvblRvZ2dsZSIsImNsZWFyVGltZW91dCIsImN1cnJlbnQiLCJwcmV2IiwidXNlRWZmZWN0Iiwic2V0VGltZW91dCIsInMiLCJhIiwiU3RhdGUiLCJjcmVhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIsIl9qc3giLCJQcm92aWRlciIsInJlbmRlciIsInZOb2RlIiwidGFyZ2V0Iiwic3RhdGUiLCJwcmVhY3RSZW5kZXIiLCJ1c2VDdXJyZW50U3RhdGUiLCJ1c2VDb250ZXh0IiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInN0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiZGVmaW5lUHJvcGVydHkiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25NZXJnZVZhbHVlIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJjbG9uZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiYmFzZUNyZWF0ZSIsIm92ZXJBcmciLCJnZXRQcm90b3R5cGUiLCJpc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsImlzT2JqZWN0TGlrZSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyIsImlzQXJyYXkiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0Iiwic3R1YkZhbHNlIiwiaXNCdWZmZXIiLCJvYmplY3RUYWciLCJpc1BsYWluT2JqZWN0IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiaXNUeXBlZEFycmF5Iiwic2FmZUdldCIsImFzc2lnblZhbHVlIiwiY29weU9iamVjdCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJhcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiYmFzZUtleXNJbiIsImtleXNJbiIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJpZGVudGl0eSIsImFwcGx5Iiwib3ZlclJlc3QiLCJjb25zdGFudCIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJpbmplY3RMaW5rIiwib3B0aW9ucyIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImtleSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaXRlcmF0b3IiLCJpbnB1dCIsInZpc2l0b3IiLCJwYXRoIiwiQXJyYXkiLCJtYXAiLCJlbCIsIm5ld1BhdGgiLCJmaWx0ZXIiLCJpc1ZhbHVlIiwiam9pbiIsInJlZHVjZSIsImFjYyIsImlzRW1wdHlWYWx1ZSIsInVuZGVmaW5lZCIsInBpY2siLCJvYmoiLCJwcm9wcyIsInJlc3VsdCIsInByb3AiLCJvbWl0IiwiZ2V0IiwiZGVmVmFsdWUiLCJwYXRoQXJyYXkiLCJtYXRjaCIsInByZXZPYmoiLCJzZXQiLCJsZW5ndGgiLCJoZXhUb1JnYiIsImhleCIsImNoYXJzIiwic2xpY2UiLCJzcGxpdCIsInZhbCIsImV4ZWMiLCJwYXJzZUludCIsImIiLCJpc0pzb25TYW1lIiwidmFsdWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZXJ5IiwiYXJyIiwicmdiVG9SZ2JhIiwicmdiIiwiYWxwaGEiLCJyZXBsYWNlIiwiZGV2aWNlcyIsIkJSRUFLUE9JTlRTIiwibW9iaWxlIiwidGFibGV0IiwibGFwdG9wIiwiZGVza3RvcCIsImlzVmFsaWRMYXllciIsImRldmljZSIsImdldFJ1bGVzIiwiX2tleSIsInJlc3VsdFJ1bGVzIiwicGFyZW50IiwidXNlR2V0UnVsZXMiLCJ1c2VDb250YWluZXJEZXZpY2UiLCJ0YXJnZXRSZWYiLCJwYXJlbnRLZXkiLCJicmVha3BvaW50cyIsInNldERldmljZSIsImNoZWNrRGV2aWNlIiwicGFyZW50V2lkdGgiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInNvcnRlZEJyZWFrcG9pbnRzIiwic29ydCIsIl8xIiwidmFsdWVBIiwiXzIiLCJ2YWx1ZUIiLCJmaW5kRGV2aWNlIiwiZmluZCIsIm5leHRWYWx1ZSIsInVzZUxheW91dEVmZmVjdCIsInBhcmVudEVsZW1lbnQiLCJjbG9zZXN0IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImNvbG9yIiwiZm9udFNpemUiLCJwcm9wS2V5IiwicHJvcFZhbHVlIiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwiZGlzcGxheSIsImJvcmRlclN0eWxlIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZENvbG9yT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJ0ZXh0RGVjb3JhdGlvbiIsImlzVmFsaWRSdWxlIiwicnVsZSIsInVzZVBhcnNlUnVsZXMiLCJEaXNwbGF5VGV4dCIsInJlc3QiLCJmb3JtYXRWYWx1ZSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwidXNlVG9nZ2xlIiwiQ2xvc2VJY29uIiwieG1sbnMiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZCIsImZpbGwiLCJHaWZ0SWNvbiIsImZpbGxSdWxlIiwiYW5pbWF0aW9uc01hcCIsImFuaW1hdGlvbnMiLCJmYWRlIiwicHVsc2UiLCJ3aWdnbGUiLCJncmFkaWVudCIsInVzZUdpZnRSdWxlcyIsImRldmljZVN0YXRlIiwiZnVsbEFuaW1hdGlvbnMiLCJoYXNJY29uIiwiaWNvbiIsImFycm93UnVsZXMiLCJsZWZ0IiwiY29udGFpbmVyIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvZHlSdWxlcyIsImFsbEFuaW1hdGlvbnMiLCJhbmltYXRpb24iLCJiYWNrZ3JvdW5kU3R5bGVzIiwiZ3JhZGllbnRDb2xvciIsImJhY2tncm91bmQiLCJpY29uUnVsZXMiLCJiYWNrZ3JvdW5kT3B0aW9ucyIsImJvcmRlck9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwibGVnYWxCb3JkZXIiLCJfanN4cyIsImNsYXNzTmFtZSIsImxlZ2FsT3BlbiIsInJlZiIsInN0eWxlIiwiaWNvblRhcmdldCIsImJvZHkiLCJib2R5T3BlbiIsImFycm93IiwiY2xvc2UiLCJvZmZlciIsImxvZ28iLCJ0ZXh0IiwiYnV0dG9uIiwiYnV0dG9uQW5pbWF0ZWQiLCJpc0FuaW1hdGVkIiwibGVnYWxHYXAiLCJsZWdhbCIsImxlZ2FsVGV4dCIsImxlZ2FsQnV0dG9uIiwiYnV0dG9uT3BlblRleHQiLCJidXR0b25IaWRlVGV4dCIsIkJvbnVzQ2FyZCIsInZhcmlhbnQyIiwidmFyaWFudCIsImxpbmUiLCJib2R5SW5uZXIiLCJidXR0b25UZXh0IiwiQ29tcGxleEdpZnQiLCJoYXNUaXRsZUljb24iLCJ0aXRsZSIsInByb21vdGlvbiIsImhlYWRJY29uIiwiaGVhZFRpdGxlIiwiY2hpbGQiLCJzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgiLCJ0ZXh0QWxpZ24iLCJjZW50ZXIiLCJyaWdodCIsIkxpbmUiLCJTaW1wbGVQb3B1cCIsImFsaWduSXRlbXMiLCJhbGlnbiIsImJ1dHRvblJ1bGVzIiwianVzdGlmeUNvbnRlbnQiLCJsZWdhbFJ1bGVzIiwiQm9udXMiLCJoZWFkZXIiLCJ3cmFwcGVyIiwiTWF0Y2giLCJ0ZWFtcyIsImxlYWd1ZSIsIm5hbWUiLCJ0ZWFtQSIsInRlYW1CIiwidGVhbSIsInRlYW1Mb2dvIiwidGVhbU5hbWUiLCJvZGQiLCJvZGRMYWJlbCIsIm9kZFZhbHVlIiwiYnV0dG9uV3JhcHBlciIsImNvbnRlbnRSdWxlcyIsImNvbnRlbnQiLCJ0ZXh0UnVsZXMiLCJidXR0b25IZWFkIiwiYnV0dG9uVGFyZ2V0IiwidG9nZ2xlSXNPcGVuIiwicm93Rmlyc3QiLCJyb3dTZWNvbmQiLCJib29rbWFrZXIiLCJsZWdhbEluZm8iLCJsZWdhbEluZm9CdXR0b24iLCJvcGVuVGV4dCIsImNsb3NlVGV4dCIsIlRleHQiLCJNYXRjaGVzIiwicm9vdFJ1bGVzIiwib2RkTG9nbyIsInZhbHVlT25lIiwiY29lZiIsImNvZWZIZWFkIiwiY29lZlZhbHVlIiwidmFsdWVYIiwib2RkUmV2ZXJzZSIsInZhbHVlVHdvIiwiTWF0Y2hlc09uZVR3byIsInRpdGxlTGFiZWwiLCJ0aXRsZVZhbHVlIiwidGVhbTFOYW1lIiwidGVhbVZhbHVlIiwidmFsdWUxIiwidGVhbTJOYW1lIiwidmFsdWUyIiwidXNlQW5pbWF0ZWRMaXN0Iiwic2xpZGVzIiwiaXRlbXNDb3VudCIsImFuaW1hdGVkSWR4Iiwic2V0QW5pbWF0ZWRJZHgiLCJhbmltYXRpb25EdXJhdGlvbiIsImdvTmV4dCIsInRpbWVvdXQiLCJERUZBVUxUX0FOSU1BVElPTl9TUEVFRCIsIldpZGVDYXJkIiwiZ2V0Q2hpbGQiLCJtYXRjaGVzIiwibWF0Y2hlc09uZVR3byIsInNsaWRlc0xpc3QiLCJCb29sZWFuIiwic2xpZGUiLCJhbmltYXRpb25OYW1lIiwiY3VycmVudFNsaWRlIiwic2xpZGVSdWxlcyIsImJhY2tncm91bmRSdWxlcyIsImhhc0N1c3RvbUJhY2tncm91bmQiLCJtb2RpZnlTdGF0ZSIsImRldmljZXNMaXN0IiwibmV3U3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsR0FBQyxXQUFZO0FBR1osUUFBSSxTQUFTLENBQUUsRUFBQztBQUdoQixhQUFTQSxjQUFhO0FBQ3JCLFVBQUksVUFBVSxDQUFBO0FBRWQsZUFBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVUsUUFBUUEsTUFBSztBQUMxQyxZQUFJLE1BQU0sVUFBVUEsRUFBQztBQUNyQixZQUFJLENBQUM7QUFBSztBQUVWLFlBQUksVUFBVSxPQUFPO0FBRXJCLFlBQUksWUFBWSxZQUFZLFlBQVksVUFBVTtBQUNqRCxrQkFBUSxLQUFLLEdBQUc7QUFBQSxRQUNoQixXQUFVLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDOUIsY0FBSSxJQUFJLFFBQVE7QUFDZixnQkFBSUMsU0FBUUYsWUFBVyxNQUFNLE1BQU0sR0FBRztBQUN0QyxnQkFBSUUsUUFBTztBQUNWLHNCQUFRLEtBQUtBLE1BQUs7QUFBQSxZQUNsQjtBQUFBLFVBQ0Q7QUFBQSxRQUNMLFdBQWMsWUFBWSxVQUFVO0FBQ2hDLGNBQUksSUFBSSxhQUFhLE9BQU8sVUFBVSxZQUFZLENBQUMsSUFBSSxTQUFTLFNBQVEsRUFBRyxTQUFTLGVBQWUsR0FBRztBQUNyRyxvQkFBUSxLQUFLLElBQUksU0FBVSxDQUFBO0FBQzNCO0FBQUEsVUFDQTtBQUVELG1CQUFTLE9BQU8sS0FBSztBQUNwQixnQkFBSSxPQUFPLEtBQUssS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLEdBQUc7QUFDdEMsc0JBQVEsS0FBSyxHQUFHO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFRCxhQUFPLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFDdkI7QUFFRCxRQUFxQyxPQUFPLFNBQVM7QUFDcEQsTUFBQUYsWUFBVyxVQUFVQTtBQUNyQixhQUFBLFVBQWlCQTtBQUFBLElBQ25CLE9BS1E7QUFDTixhQUFPLGFBQWFBO0FBQUEsSUFDcEI7QUFBQSxFQUNGOzs7QUMzRGlDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRUcsTUFBRSxHQUFFLElBQUUsQ0FBQSxHQUFHLElBQUUsSUFBRyxJQUFFQyxRQUFFLEtBQUksSUFBRUEsUUFBRSxLQUFJLElBQUVBLFFBQUUsUUFBTyxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRTtBQUFRLFNBQVMsRUFBRUMsSUFBRUMsSUFBRTtBQUFDRixVQUFFLE9BQUtBLFFBQUUsSUFBSSxHQUFFQyxJQUFFRixPQUFHRyxFQUFDLEdBQUVILE1BQUU7QUFBRSxNQUFJRixLQUFFLEVBQUUsUUFBTSxFQUFFLE1BQUksRUFBQyxJQUFHLElBQUcsS0FBSSxDQUFFLEVBQUE7QUFBRyxTQUFPSSxNQUFHSixHQUFFLEdBQUcsVUFBUUEsR0FBRSxHQUFHLEtBQUssRUFBQyxLQUFJLEVBQUMsQ0FBQyxHQUFFQSxHQUFFLEdBQUdJLEVBQUM7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFO0FBQUMsU0FBT0YsTUFBRSxHQUFFLEVBQUVJLEtBQUUsQ0FBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUVELElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsTUFBR0EsR0FBRSxJQUFFLEdBQUUsQ0FBQ0EsR0FBRSxRQUFNQSxHQUFFLEtBQUcsQ0FBQ0YsS0FBRUEsR0FBRUssRUFBQyxJQUFFQyxJQUFFLFFBQU9ELEVBQUMsR0FBRSxTQUFTRixJQUFFO0FBQUMsUUFBSUMsS0FBRUYsR0FBRSxNQUFJQSxHQUFFLElBQUksQ0FBQyxJQUFFQSxHQUFFLEdBQUcsQ0FBQyxHQUFFSyxLQUFFTCxHQUFFLEVBQUVFLElBQUVELEVBQUM7QUFBRSxJQUFBQyxPQUFJRyxPQUFJTCxHQUFFLE1BQUksQ0FBQ0ssSUFBRUwsR0FBRSxHQUFHLENBQUMsQ0FBQyxHQUFFQSxHQUFFLElBQUksU0FBUyxDQUFFLENBQUE7QUFBQSxFQUFFLENBQUMsR0FBRUEsR0FBRSxNQUFJLEdBQUUsQ0FBQyxFQUFFLElBQUc7QUFBQyxRQUFJTSxLQUFFLFNBQVNMLElBQUVDLElBQUVHLElBQUU7QUFBQyxVQUFHLENBQUNMLEdBQUUsSUFBSTtBQUFJLGVBQU07QUFBRyxVQUFJRyxLQUFFSCxHQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sU0FBU0MsSUFBRTtBQUFDLGVBQU9BLEdBQUU7QUFBQSxNQUFHLENBQUM7QUFBRSxVQUFHRSxHQUFFLE1BQU0sU0FBU0YsSUFBRTtBQUFDLGVBQU0sQ0FBQ0EsR0FBRTtBQUFBLE1BQUcsQ0FBQztBQUFFLGVBQU0sQ0FBQ00sTUFBR0EsR0FBRSxLQUFLLE1BQUtOLElBQUVDLElBQUVHLEVBQUM7QUFBRSxVQUFJUCxLQUFFO0FBQUcsYUFBT0ssR0FBRSxRQUFRLFNBQVNGLElBQUU7QUFBQyxZQUFHQSxHQUFFLEtBQUk7QUFBQyxjQUFJQyxLQUFFRCxHQUFFLEdBQUcsQ0FBQztBQUFFLFVBQUFBLEdBQUUsS0FBR0EsR0FBRSxLQUFJQSxHQUFFLE1BQUksUUFBT0MsT0FBSUQsR0FBRSxHQUFHLENBQUMsTUFBSUgsS0FBRTtBQUFBLFFBQUc7QUFBQSxNQUFDLENBQUMsR0FBRSxFQUFFLENBQUNBLE1BQUdFLEdBQUUsSUFBSSxVQUFRQyxRQUFLLENBQUNNLE1BQUdBLEdBQUUsS0FBSyxNQUFLTixJQUFFQyxJQUFFRyxFQUFDO0FBQUEsSUFBRTtBQUFFLE1BQUUsSUFBRTtBQUFHLFFBQUlFLEtBQUUsRUFBRSx1QkFBc0JDLEtBQUUsRUFBRTtBQUFvQixNQUFFLHNCQUFvQixTQUFTUCxJQUFFQyxJQUFFRyxJQUFFO0FBQUMsVUFBRyxLQUFLLEtBQUk7QUFBQyxZQUFJRixLQUFFSTtBQUFFLFFBQUFBLEtBQUUsUUFBT0QsR0FBRUwsSUFBRUMsSUFBRUcsRUFBQyxHQUFFRSxLQUFFSjtBQUFBLE1BQUM7QUFBQyxNQUFBSyxNQUFHQSxHQUFFLEtBQUssTUFBS1AsSUFBRUMsSUFBRUcsRUFBQztBQUFBLElBQUMsR0FBRSxFQUFFLHdCQUFzQkM7QUFBQSxFQUFDO0FBQUMsU0FBT04sR0FBRSxPQUFLQSxHQUFFO0FBQUU7QUFBQyxTQUFTLEVBQUVHLElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsR0FBQ0MsUUFBRSxPQUFLLEVBQUVELEdBQUUsS0FBSUYsRUFBQyxNQUFJRSxHQUFFLEtBQUdHLElBQUVILEdBQUUsSUFBRUYsSUFBRSxFQUFFLElBQUksSUFBSSxLQUFLRSxFQUFDO0FBQUU7QUFBQyxTQUFTLEVBQUVHLElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsR0FBQ0MsUUFBRSxPQUFLLEVBQUVELEdBQUUsS0FBSUYsRUFBQyxNQUFJRSxHQUFFLEtBQUdHLElBQUVILEdBQUUsSUFBRUYsSUFBRSxFQUFFLElBQUksS0FBS0UsRUFBQztBQUFFO0FBQUMsU0FBU1MsSUFBRSxHQUFFO0FBQUMsU0FBT1QsTUFBRSxHQUFFVSxJQUFFLFdBQVU7QUFBQyxXQUFNLEVBQUMsU0FBUSxFQUFDO0FBQUEsRUFBQyxHQUFFLEVBQUU7QUFBQztBQUFzTCxTQUFTQSxJQUFFLEdBQUVMLElBQUU7QUFBQyxNQUFJRixLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsU0FBTyxFQUFFQSxHQUFFLEtBQUlFLEVBQUMsS0FBR0YsR0FBRSxNQUFJLEVBQUcsR0FBQ0EsR0FBRSxJQUFFRSxJQUFFRixHQUFFLE1BQUksR0FBRUEsR0FBRSxPQUFLQSxHQUFFO0FBQUU7QUFBc0QsU0FBU1EsSUFBRSxHQUFFO0FBQUMsTUFBSVIsS0FBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUVMLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxTQUFPQSxHQUFFLElBQUUsR0FBRUssTUFBRyxRQUFNTCxHQUFFLE9BQUtBLEdBQUUsS0FBRyxNQUFHSyxHQUFFLElBQUksQ0FBQyxJQUFHQSxHQUFFLE1BQU0sU0FBTyxFQUFFO0FBQUU7QUFBNlgsU0FBUyxJQUFHO0FBQUMsV0FBUUQsSUFBRUEsS0FBRSxFQUFFO0FBQVMsUUFBR0EsR0FBRSxPQUFLQSxHQUFFO0FBQUksVUFBRztBQUFDLFFBQUFBLEdBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFQSxHQUFFLElBQUksSUFBSSxRQUFRVSxHQUFDLEdBQUVWLEdBQUUsSUFBSSxNQUFJLENBQUE7QUFBQSxNQUFFLFNBQU9HLElBQU47QUFBUyxRQUFBSCxHQUFFLElBQUksTUFBSSxDQUFBLEdBQUdELFFBQUUsSUFBSUksSUFBRUgsR0FBRSxHQUFHO0FBQUEsTUFBQztBQUFDO0FBQUNELFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxNQUFFLE1BQUssS0FBRyxFQUFFLENBQUM7QUFBQyxHQUFFQSxRQUFFLE1BQUksU0FBUyxHQUFFO0FBQUMsT0FBRyxFQUFFLENBQUMsR0FBRSxJQUFFO0FBQUUsTUFBSUgsTUFBRyxJQUFFLEVBQUUsS0FBSztBQUFJLEVBQUFBLE9BQUksTUFBSSxLQUFHQSxHQUFFLE1BQUksQ0FBQSxHQUFHLEVBQUUsTUFBSSxDQUFBLEdBQUdBLEdBQUUsR0FBRyxRQUFRLFNBQVNHLElBQUU7QUFBQyxJQUFBQSxHQUFFLFFBQU1BLEdBQUUsS0FBR0EsR0FBRSxNQUFLQSxHQUFFLE1BQUksR0FBRUEsR0FBRSxNQUFJQSxHQUFFLElBQUU7QUFBQSxFQUFNLENBQUMsTUFBSUgsR0FBRSxJQUFJLFFBQVEsQ0FBQyxHQUFFQSxHQUFFLElBQUksUUFBUWMsR0FBQyxHQUFFZCxHQUFFLE1BQUksQ0FBQSxLQUFLLElBQUU7QUFBQyxHQUFFRyxRQUFFLFNBQU8sU0FBU0MsSUFBRTtBQUFDLE9BQUcsRUFBRUEsRUFBQztBQUFFLE1BQUlGLEtBQUVFLEdBQUU7QUFBSSxFQUFBRixNQUFHQSxHQUFFLFFBQU1BLEdBQUUsSUFBSSxJQUFJLFdBQVMsTUFBSSxFQUFFLEtBQUtBLEVBQUMsS0FBRyxNQUFJQyxRQUFFLDJCQUF5QixJQUFFQSxRQUFFLDBCQUF3QixHQUFHLENBQUMsSUFBR0QsR0FBRSxJQUFJLEdBQUcsUUFBUSxTQUFTLEdBQUU7QUFBQyxNQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsSUFBRyxFQUFFLFFBQU0sTUFBSSxFQUFFLEtBQUcsRUFBRSxNQUFLLEVBQUUsSUFBRSxRQUFPLEVBQUUsTUFBSTtBQUFBLEVBQUMsQ0FBQyxJQUFHLElBQUUsSUFBRTtBQUFJLEdBQUVDLFFBQUUsTUFBSSxTQUFTQyxJQUFFRyxJQUFFO0FBQUMsRUFBQUEsR0FBRSxLQUFLLFNBQVNILElBQUU7QUFBQyxRQUFHO0FBQUMsTUFBQUEsR0FBRSxJQUFJLFFBQVEsQ0FBQyxHQUFFQSxHQUFFLE1BQUlBLEdBQUUsSUFBSSxPQUFPLFNBQVMsR0FBRTtBQUFDLGVBQU0sQ0FBQyxFQUFFLE1BQUlVLElBQUUsQ0FBQztBQUFBLE1BQUMsQ0FBQztBQUFBLElBQUMsU0FBT1QsSUFBTjtBQUFTLE1BQUFFLEdBQUUsS0FBSyxTQUFTLEdBQUU7QUFBQyxVQUFFLFFBQU0sRUFBRSxNQUFJLENBQUE7QUFBQSxNQUFHLENBQUMsR0FBRUEsS0FBRSxJQUFHSixRQUFFLElBQUlFLElBQUVELEdBQUUsR0FBRztBQUFBLElBQUM7QUFBQSxFQUFDLENBQUMsR0FBRSxLQUFHLEVBQUVBLElBQUVHLEVBQUM7QUFBQyxHQUFFSixRQUFFLFVBQVEsU0FBU0MsSUFBRTtBQUFDLE9BQUcsRUFBRUEsRUFBQztBQUFFLE1BQUlHLElBQUVGLEtBQUVELEdBQUU7QUFBSSxFQUFBQyxNQUFHQSxHQUFFLFFBQU1BLEdBQUUsSUFBSSxHQUFHLFFBQVEsU0FBUyxHQUFFO0FB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LElBQUs7QUFBQSxFQUFBLENBQUMsR0FBRSxFQUFFLElBQUksTUFBSSxPQUFNLFNBQU8sSUFBRSxFQUFFLENBQUEsR0FBRyxDQUFDLEdBQUcsUUFBTSxFQUFFLElBQUksUUFBTU8sT0FBSSxFQUFFLElBQUksTUFBSU4sS0FBRyxFQUFFLE1BQUksT0FBTSxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVNELElBQUU7QUFBQyxXQUFPLEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxFQUFDLENBQUMsSUFBRztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUVOLElBQUVNLElBQUU7QUFBQyxTQUFPLE1BQUksRUFBRSxNQUFJLE1BQUssRUFBRSxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksSUFBSSxTQUFTUCxJQUFFO0FBQUMsV0FBTyxFQUFFQSxJQUFFQyxJQUFFTSxFQUFDO0FBQUEsRUFBQyxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNTixPQUFJLEVBQUUsT0FBS00sR0FBRSxhQUFhLEVBQUUsS0FBSSxFQUFFLEdBQUcsR0FBRSxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsSUFBSSxNQUFJQSxNQUFJO0FBQUM7QUFBQyxTQUFTLElBQUc7QUFBQyxPQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBSTtBQUFDLFNBQVMsRUFBRSxHQUFFO0FBQUMsTUFBSU4sS0FBRSxFQUFFLEdBQUc7QUFBSSxTQUFPQSxNQUFHQSxHQUFFLE9BQUtBLEdBQUUsSUFBSSxDQUFDO0FBQUM7QUFBcUwsU0FBUyxJQUFHO0FBQUMsT0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUk7QUFBQ00sUUFBRSxVQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUlOLEtBQUUsRUFBRTtBQUFJLEVBQUFBLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFHLEdBQUdBLE1BQUcsU0FBSyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sS0FBRyxFQUFFLENBQUM7QUFBQyxJQUFHLEVBQUUsWUFB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LFVBQWN6WixVQUNuQzRWLEVBQUEsT0FBQTtBQUFBLFlBQUtDLFdBQVdKLFNBQU9nQjtBQUFBQSxZQUFRVCxPQUFPL0csTUFBTXdIO0FBQUFBLFlBQU96VyxXQUNqREUsRUFBQSxPQUFBO0FBQUEsY0FBSzJWLFdBQVdKLFNBQU9jO0FBQUFBLGNBQU1QLE9BQU8vRyxNQUFNc0g7QUFBQUEsWUFBQUEsQ0FBSyxJQUM5Q3RILFdBQU13SCxXQUFOeEgsbUJBQWNqUCxRQUFRO0FBQUEsVUFBQSxDQUFBO0FBQUEsUUFBQSxDQUVyQixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FBRUEsTUFBZUksUUFBQUEsT0FBT0YsRUFBQ2ljLGFBQVc7QUNoR2xDLE1BQU1ZLGNBQWNBLENBQ2xCeGMsT0FDQTJPLE9BQ0F5QixNQUNBMVEsT0FDQWlNLFlBQVU4USxZQUNQO0FBQ0gsUUFBTUMsV0FBVztBQUFBLElBQUUsR0FBRzFjO0FBQUFBLEVBQUFBO0FBRXRCMkwsWUFBUW5ELFFBQVEwRCxDQUFVLFdBQUE7QUFDeEJ3USxhQUFTL04sS0FBSyxJQUFJO0FBQUEsTUFDaEIsR0FBRytOLFNBQVMvTixLQUFLO0FBQUEsTUFDakIsQ0FBQ3pDLE1BQU0sR0FBRztBQUFBLFFBQ1IsR0FBR3dRLFNBQVMvTixLQUFLLEVBQUV6QyxNQUFNO0FBQUEsUUFDekIsQ0FBQ2tFLElBQUksR0FBRyxPQUFPMVEsVUFBVSxhQUFhQSxNQUFNdUssSUFBSXlTLFVBQVcsR0FBRS9OLFNBQVN6QyxVQUFVa0UsTUFBTSxDQUFDLElBQUkxUTtBQUFBQSxNQUM3RjtBQUFBLElBQUE7QUFBQSxFQUNGLENBQ0Q7QUFDTWdkLFNBQUFBO0FBQ1Q7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119
|
2887
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduTWVyZ2VWYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VGb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2VPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NhZmVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9QbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZURlZXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUFzc2lnbmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZXJnZS5qcyIsIi4uLy4uL3V0aWxzL2RvbS50cyIsIi4uLy4uL3V0aWxzL2l0ZXJhdG9yLnRzIiwiLi4vLi4vdXRpbHMvaW5kZXgudHMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduTWVyZ2VWYWx1ZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCJ2YXIgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQXJyYXlCdWZmZXI7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcIl9fcHJvdG9fX1wiIG9yIFwiY29uc3RydWN0b3JcIi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LCBrZXkpIHtcbiAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJyAmJiB0eXBlb2Ygb2JqZWN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNhZmVHZXQ7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCJ2YXIgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5T2JqZWN0O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xuICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICovXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHZhbHVlLCBrZXlzSW4odmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1BsYWluT2JqZWN0O1xuIiwidmFyIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2VPYmplY3QnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5JyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKSxcbiAgICB0b1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi90b1BsYWluT2JqZWN0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgbWVyZ2VzIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbWVyZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFjaykge1xuICB2YXIgb2JqVmFsdWUgPSBzYWZlR2V0KG9iamVjdCwga2V5KSxcbiAgICAgIHNyY1ZhbHVlID0gc2FmZUdldChzb3VyY2UsIGtleSksXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcblxuICBpZiAoc3RhY2tlZCkge1xuICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHN0YWNrZWQpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgPyBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgdmFyIGlzQXJyID0gaXNBcnJheShzcmNWYWx1ZSksXG4gICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiBpc0J1ZmZlcihzcmNWYWx1ZSksXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkoc3JjVmFsdWUpO1xuXG4gICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcbiAgICAgIGlmIChpc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNBcnJheUxpa2VPYmplY3Qob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gY29weUFycmF5KG9ialZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lQnVmZmVyKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gW107XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpIHx8IGlzQXJndW1lbnRzKHNyY1ZhbHVlKSkge1xuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIGlmIChpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB0b1BsYWluT2JqZWN0KG9ialZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCFpc09iamVjdChvYmpWYWx1ZSkgfHwgaXNGdW5jdGlvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmIChpc0NvbW1vbikge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIG1lcmdlRnVuYyhuZXdWYWx1ZSwgc3JjVmFsdWUsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgfVxuICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1lcmdlRGVlcDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBiYXNlRm9yID0gcmVxdWlyZSgnLi9fYmFzZUZvcicpLFxuICAgIGJhc2VNZXJnZURlZXAgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2VEZWVwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAob2JqZWN0ID09PSBzb3VyY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYmFzZUZvcihzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIGlmIChpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgPyBjdXN0b21pemVyKHNhZmVHZXQob2JqZWN0LCBrZXkpLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH0sIGtleXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1lcmdlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmF0ZWVDYWxsO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBpc0l0ZXJhdGVlQ2FsbCA9IHJlcXVpcmUoJy4vX2lzSXRlcmF0ZWVDYWxsJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXNzaWduZXI7XG4iLCJ2YXIgYmFzZU1lcmdlID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlJyksXG4gICAgY3JlYXRlQXNzaWduZXIgPSByZXF1aXJlKCcuL19jcmVhdGVBc3NpZ25lcicpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBtZXJnZXMgb3duIGFuZFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZVxuICogc2tpcHBlZCBpZiBhIGRlc3RpbmF0aW9uIHZhbHVlIGV4aXN0cy4gQXJyYXkgYW5kIHBsYWluIG9iamVjdCBwcm9wZXJ0aWVzXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxuICogYXNzaWdubWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJzZXF1ZW50XG4gKiBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC41LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHtcbiAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAnZCc6IDQgfV1cbiAqIH07XG4gKlxuICogdmFyIG90aGVyID0ge1xuICogICAnYSc6IFt7ICdjJzogMyB9LCB7ICdlJzogNSB9XVxuICogfTtcbiAqXG4gKiBfLm1lcmdlKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxuICovXG52YXIgbWVyZ2UgPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcbiAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZTtcbiIsIlxuaW50ZXJmYWNlIEluamVjdExpbmtPcHRpb25zIHtcbiAgcmVsOiBzdHJpbmdcbiAgaHJlZjogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RMaW5rID0ob3B0aW9uczogSW5qZWN0TGlua09wdGlvbnMpID0+IHtcbiAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcblxuICBPYmplY3QuZW50cmllcyhvcHRpb25zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IGxpbmsuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpKVxuXG4gIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG59XG4iLCJpbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBpc1ZhbHVlIH0gZnJvbSBcIi4vaW5kZXhcIjtcblxudHlwZSBWaXNpdG9yID0gQ2FsbGJhY2s8W1Byb3BlcnR5S2V5LCB1bmtub3duLCBzdHJpbmddPlxuXG5leHBvcnQgY29uc3QgaXRlcmF0b3IgPSAoaW5wdXQ6IHVua25vd24sIHZpc2l0b3I6IFZpc2l0b3IsIHBhdGg/OiBzdHJpbmcpOiBhbnkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblxuICAgIHJldHVybiBpbnB1dC5tYXAoKGVsLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3UGF0aCA9IFtwYXRoLCBpbmRleF0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgcmV0dXJuIGl0ZXJhdG9yKHZpc2l0b3IoaW5kZXgsIGVsLCBuZXdQYXRoKSwgdmlzaXRvciwgbmV3UGF0aClcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwga2V5XS5maWx0ZXIoaXNWYWx1ZSkuam9pbignLicpXG4gICAgICBhY2Nba2V5XSA9IGl0ZXJhdG9yKHZpc2l0b3Ioa2V5LCB2YWx1ZSwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSBhcyBhbnkpXG4gIH1cblxuICByZXR1cm4gaW5wdXRcbn1cbiIsImltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgbG9kYXNoTWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlJ1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eVZhbHVlID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PlxuICAhdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG5leHBvcnQgY29uc3QgaXNWYWx1ZSA9IDxUPih2YWx1ZTogVCk6IHZhbHVlIGlzIEV4Y2x1ZGU8VCwgbnVsbCB8IHVuZGVmaW5lZD4gPT4gIWlzRW1wdHlWYWx1ZSh2YWx1ZSlcbmV4cG9ydCBjb25zdCBub29wID0gKCkgPT4gdW5kZWZpbmVkXG5cbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gPT5cbiAgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB8fCB2YWx1ZSA9PT0gbnVsbFxuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29uc3RhbnRzID0gPEsgZXh0ZW5kcyBzdHJpbmc+KC4uLmNvbnN0YW50czogS1tdKSA9PiB7XG4gIHJldHVybiBjb25zdGFudHMucmVkdWNlPHsgW1AgaW4gS106IFAgfT4oKGFjYywgY29uc3RhbnQpID0+IHtcbiAgICBhY2NbY29uc3RhbnRdID0gY29uc3RhbnRcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIHsgW1AgaW4gS106IFAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHBpY2sgPSA8VFZhbHVlIGV4dGVuZHMgQW55T2JqZWN0PihvYmo6IFRWYWx1ZSwgLi4ucHJvcHM6IChrZXlvZiBUVmFsdWUpW10pID0+IHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqW3Byb3BdXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCB7fSBhcyBhbnkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyBBbnlPYmplY3QsIFAgZXh0ZW5kcyBzdHJpbmdbXT4ob2JqOiBULCAuLi5wcm9wczogUCk6IE9taXQ8VCwgUFtudW1iZXJdPiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBkZWxldGUgcmVzdWx0W3Byb3BdXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCBkZWZWYWx1ZT86IHVua25vd24pOiBhbnkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG4gIGNvbnN0IHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKHByZXZPYmo6IEFueU9iamVjdCwga2V5OiBzdHJpbmcpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopXG4gIC8vIElmIGZvdW5kIHZhbHVlIGlzIHVuZGVmaW5lZCByZXR1cm4gZGVmYXVsdCB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiB0aGUgdmFsdWVcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmVmFsdWUgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHNldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cblxuICByZXR1cm4gcGF0aEFycmF5LnJlZHVjZSgoYWNjLCBrZXksIGkpID0+IHtcbiAgICBpZiAoYWNjW2tleV0gPT09IHVuZGVmaW5lZCkgYWNjW2tleV0gPSB7fVxuICAgIGlmIChpID09PSBwYXRoQXJyYXkubGVuZ3RoIC0gMSkgYWNjW2tleV0gPSB2YWx1ZVxuICAgIHJldHVybiBhY2Nba2V5XVxuICB9LCBvYmopXG59XG5cbmV4cG9ydCBjb25zdCBoZXhUb1JnYiA9IChoZXg6IHN0cmluZykgPT4ge1xuICBjb25zdCBjaGFycyA9IGhleC5zbGljZSgxKVxuXG4gIGlmIChjaGFycy5sZW5ndGggPT09IDMpIHtcbiAgICBoZXggPSBjaGFyc1xuICAgICAgLnNwbGl0KCcnKVxuICAgICAgLm1hcCh2YWwgPT4gYCR7dmFsfSR7dmFsfWApXG4gICAgICAuam9pbignJylcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpXG5cbiAgcmV0dXJuIHJlc3VsdFxuICAgID8ge1xuICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcbiAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXG4gICAgICAgIGI6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IGlzSnNvblNhbWUgPSAoLi4udmFsdWVzOiB1bmtub3duW10pID0+IHtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gSlNPTi5zdHJpbmdpZnkodmFsdWUpKS5ldmVyeSgodmFsLCBfLCBhcnIpID0+IHZhbCA9PT0gYXJyWzBdKVxufVxuXG5leHBvcnQgY29uc3QgaXNWYWxpZFRlbXBsYXRlID0gKGRhdGE6IEFueU9iamVjdCkgPT4gJ2lkJyBpbiBkYXRhICYmICdyb290JyBpbiBkYXRhXG5cbmV4cG9ydCBjb25zdCByZ2JUb1JnYmEgPSAocmdiOiBzdHJpbmcsIGFscGhhID0gMSk6IHN0cmluZyA9PiByZ2IucmVwbGFjZSgnKScsIGAsICR7YWxwaGF9KWApLnJlcGxhY2UoJ3JnYicsICdyZ2JhJylcblxuZXhwb3J0IGNvbnN0IG1lcmdlID0gbG9kYXNoTWVyZ2VcblxuZXhwb3J0IGNvbnN0IGRldmljZXMgPSBbJ2Rlc2t0b3AnLCAnbGFwdG9wJywgJ3RhYmxldCcsICdtb2JpbGUnXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQlJFQUtQT0lOVFMgPSB7XG4gIG1vYmlsZTogMzIwLFxuICB0YWJsZXQ6IDc2OCxcbiAgbGFwdG9wOiAxMDI0LFxuICBkZXNrdG9wOiAxOTIwXG59IGFzIGNvbnN0XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5leHBvcnQgKiBmcm9tICcuL2RvbSdcbmV4cG9ydCAqIGZyb20gJy4vaXRlcmF0b3InXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5leHBvcnQgY29uc3QgdXNlR2lmdE9wZW4gPSAoZGVsYXkgPSAxMDAwKSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWYobnVsbClcblxuICBjb25zdCBvblRvZ2dsZSA9ICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgICBzZXRJc09wZW4ocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfSwgZGVsYXkpXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gIH0sIFtkZWxheV0pXG5cbiAgcmV0dXJuIHtcbiAgICBpc09wZW4sXG4gICAgb25Ub2dnbGVcbiAgfVxufVxuIiwiaW1wb3J0e29wdGlvbnMgYXMgcn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIF89MDtmdW5jdGlvbiBvKG8sZSxuLHQsZixsKXt2YXIgcyx1LGE9e307Zm9yKHUgaW4gZSlcInJlZlwiPT11P3M9ZVt1XTphW3VdPWVbdV07dmFyIGk9e3R5cGU6byxwcm9wczphLGtleTpuLHJlZjpzLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19kOnZvaWQgMCxfX2M6bnVsbCxfX2g6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tXyxfX3NvdXJjZTpmLF9fc2VsZjpsfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvJiYocz1vLmRlZmF1bHRQcm9wcykpZm9yKHUgaW4gcyl2b2lkIDA9PT1hW3VdJiYoYVt1XT1zW3VdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShpKSxpfWV4cG9ydHtvIGFzIGpzeCxvIGFzIGpzeERFVixvIGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncHJlYWN0J1xuXG5leHBvcnQgY29uc3QgU3RhdGUgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgU3RhdGVDb250ZXh0ID0gKHsgY2hpbGRyZW4sIHZhbHVlIH0pID0+IHtcbiAgcmV0dXJuIDxTdGF0ZS5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L1N0YXRlLlByb3ZpZGVyPlxufVxuXG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRleHRcbiIsImltcG9ydCB7IENvbXBvbmVudENoaWxkLCBDb250YWluZXJOb2RlLCByZW5kZXIgYXMgcHJlYWN0UmVuZGVyIH0gZnJvbSAncHJlYWN0J1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9TdGF0ZUNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCByZW5kZXIgPSAodk5vZGU6IENvbXBvbmVudENoaWxkKSA9PiAodGFyZ2V0OiBDb250YWluZXJOb2RlLCBzdGF0ZT86IGFueSkgPT5cbiAgcHJlYWN0UmVuZGVyKDxTdGF0ZUNvbnRleHQgdmFsdWU9e3N0YXRlfT57dk5vZGV9PC9TdGF0ZUNvbnRleHQ+LCB0YXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSBcIi4uL1N0YXRlQ29udGV4dFwiO1xuXG5leHBvcnQgY29uc3QgdXNlQ3VycmVudFN0YXRlID0gPFRWYWx1ZSA9IHVua25vd24+KCkgPT4gdXNlQ29udGV4dDxUVmFsdWU+KFN0YXRlKVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBEZXZpY2UsIGRldmljZXMsIEV4dHJhY3RSdWxlcywgaXNWYWx1ZSwgaXRlcmF0b3IsIExheWVyLCBSdWxlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBpc1ZhbGlkTGF5ZXIgPSAoc3RhdGU6IEFueU9iamVjdCA9IHt9KTogc3RhdGUgaXMgTGF5ZXIgPT5cbiAgdHlwZW9mIHN0YXRlID09PSAnb2JqZWN0JyAmJiBpc1ZhbHVlKHN0YXRlKSAmJiBkZXZpY2VzLmV2ZXJ5KGRldmljZSA9PiBkZXZpY2UgaW4gc3RhdGUpXG5cbmV4cG9ydCBjb25zdCBnZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZSA9ICdkZXNrdG9wJz4oXG4gIHN0YXRlOiBUU3RhdGUsXG4gIGRldmljZTogVERldmljZVxuKTogRXh0cmFjdFJ1bGVzPFRTdGF0ZSwgVERldmljZT4gPT4ge1xuICBpZiAoIXN0YXRlKSByZXR1cm4gc3RhdGVcblxuICByZXR1cm4gaXRlcmF0b3Ioc3RhdGUsIChfa2V5LCB2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKGlzVmFsaWRMYXllcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFJ1bGVzID0gdmFsdWVbZGV2aWNlXVxuICAgICAgaWYgKCdwYXJlbnQnIGluIHJlc3VsdFJ1bGVzICYmIGlzVmFsdWUocmVzdWx0UnVsZXMucGFyZW50KSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbcmVzdWx0UnVsZXMucGFyZW50XVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdFJ1bGVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pIGFzIEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+XG59XG4iLCJpbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IGdldFJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9nZXREZXZpY2VTdGF0ZSdcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnLi4vcHJvbW9zL1NpbXBsZUdpZnQvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1c2VHZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZT4oc3RhdGU6IFRTdGF0ZSwgZGV2aWNlOiBURGV2aWNlKSA9PlxuICBnZXRSdWxlczxUU3RhdGUsIFREZXZpY2U+KHN0YXRlLCBkZXZpY2UpXG4iLCJpbXBvcnQgeyBCUkVBS1BPSU5UUywgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IE11dGFibGVSZWYgfSBmcm9tICdwcmVhY3QvaG9va3MnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgdGFyZ2V0UmVmOiBNdXRhYmxlUmVmPEhUTUxEaXZFbGVtZW50PlxuICAvKipcbiAgICogUHJvbW8g0LLRgdGC0YDQsNC40LLQsNC10YLRgdGPINCyINGA0LDQt9C90YvQtSBET00g0Lgg0LzRiyDQvdC1INC30L3QsNC10Lwg0YDQsNC30LzQtdGAINC60LDQutC+0LPQviDQutC+0L3RgtC10LnQvdC10YDQsFxuICAgKiDRj9Cy0LvRj9C10YLRgdGPINC90YPQttC90YvQvC4g0J3QsNC/0YDQuNC80LXRgCBHaWZ0KiDQt9Cw0L3QuNC80LDQtdGCINCy0YHQtdCz0L4gMzBweCwg0Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQuSDQutC+0L3RgtC10LnQvdC10YBcbiAgICog0LzQvtC20LXRgiDQvdCw0YXQvtC00LjRgtGM0YHRjyDQs9C+0YDQsNC30LTQviDQstGL0YjQtS5cbiAgICovXG4gIHBhcmVudEtleT86IHN0cmluZ1xuICBicmVha3BvaW50cz86IHR5cGVvZiBCUkVBS1BPSU5UU1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGFpbmVyRGV2aWNlID0gKHtcbiAgdGFyZ2V0UmVmLFxuICBwYXJlbnRLZXkgPSAnZGV2aWNlLWNvbnRhaW5lcicsXG4gIGJyZWFrcG9pbnRzID0gQlJFQUtQT0lOVFNcbn06IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgW2RldmljZSwgc2V0RGV2aWNlXSA9IHVzZVN0YXRlPERldmljZT4oJ2Rlc2t0b3AnKVxuXG4gIGNvbnN0IGNoZWNrRGV2aWNlID0gKHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwXG4gICAgY29uc3Qgc29ydGVkQnJlYWtwb2ludHMgPSBPYmplY3QuZW50cmllcyh7IC4uLmJyZWFrcG9pbnRzIH0pLnNvcnQoKFtfMSwgdmFsdWVBXSwgW18yLCB2YWx1ZUJdKSA9PiB2YWx1ZUEgLSB2YWx1ZUIpXG5cbiAgICBjb25zdCBmaW5kRGV2aWNlID1cbiAgICAgIChzb3J0ZWRCcmVha3BvaW50cy5maW5kKChbXzEsIHZhbHVlXSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW18yLCBuZXh0VmFsdWVdID0gc29ydGVkQnJlYWtwb2ludHNbaW5kZXggKyAxXSB8fCBbXVxuXG4gICAgICAgIHJldHVybiBwYXJlbnRXaWR0aCA+PSB2YWx1ZSAmJiBwYXJlbnRXaWR0aCA8IG5leHRWYWx1ZVxuICAgICAgfSk/LlswXSBhcyBEZXZpY2UpIHx8ICdkZXNrdG9wJ1xuXG4gICAgc2V0RGV2aWNlKGZpbmREZXZpY2UpXG4gIH1cblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0YXJnZXRSZWYuY3VycmVudC5jbG9zZXN0KGBbZGF0YS0ke3BhcmVudEtleX1dYClcblxuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50RWxlbWVudClcblxuICAgICAgY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHJldHVybiBkZXZpY2Vcbn1cbiIsImltcG9ydCB7IEFueU9iamVjdCwgZGV2aWNlcywgRml0T3B0aW9uLCBoZXhUb1JnYiwgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlLCByZ2JUb1JnYmEgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSAnc3JjL3JlbmRlckRyaXZlcidcbmltcG9ydCB7IGluamVjdFN0eWxlUnVsZXMsIFN0eWxlUnVsZXMgfSBmcm9tICdzcmMvdXRpbHMvaW5qZWN0U3R5bGVSdWxlcydcbmltcG9ydCB7IGlzVmFsaWRTdHlsZUtleSB9IGZyb20gJy4vaXNWYWxpZFN0eWxlS2V5J1xuXG4vKipcbiAqINCf0LvQsNCz0LjQvSDQv9GA0LjQvNC10L3Rj9C10YIg0L/RgNCw0LLQuNC70LA6INGB0YLQuNC70LgsIGlubmVyVGV4dCAuLi5cbiAqINCV0YHQu9C4INC60L7QvdGC0LXQvdGC0LAg0L3QtdGCLCDRgtC+INCd0L7QtNCwINGB0LrRgNGL0LLQsNC10YLRgdGPXG4gKi9cblxudHlwZSBDdXN0b21TdHlsZXMgPSBQYXJ0aWFsPFxuICBPbWl0PFN0eWxlUnVsZXMsICdib3JkZXJXaWR0aCcgfCAnbWluSGVpZ2h0JyB8ICdtaW5XaWR0aCcgfCAnZm9udFNpemUnPiAmIHtcbiAgICBtaW5IZWlnaHQ6IG51bWJlclxuICAgIG1pbldpZHRoOiBudW1iZXJcbiAgICBmb250U2l6ZTogbnVtYmVyXG4gIH1cbj5cblxuZGVjbGFyZSBtb2R1bGUgJ3NyYy9yZW5kZXJEcml2ZXInIHtcbiAgaW50ZXJmYWNlIFJlbmRlckRyaXZlclJ1bGUgZXh0ZW5kcyBDdXN0b21TdHlsZXMge1xuICAgIGlubmVySFRNTD86IHN0cmluZ1xuICAgIGlubmVyVGV4dD86IHN0cmluZ1xuICAgIGNvcm5lcj86IG51bWJlclxuICAgIGJhY2tncm91bmRGaXQ/OiBGaXRPcHRpb25cbiAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5PzogbnVtYmVyXG4gICAgaXNCb2xkPzogYm9vbGVhblxuICAgIGlzSXRhbGljPzogYm9vbGVhblxuICAgIGlzVGhyb3VnaD86IGJvb2xlYW5cbiAgICAkYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4gIH1cbn1cblxuY29uc3Qgd3JhcFRvID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVudGlsOiAnJScgfCAncHgnKSA9PiBgJHt2YWx1ZX0ke3VudGlsfWBcblxuY29uc3QgdG9QeCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3B4XycpXG5jb25zdCB0b1BlcmNlbnQgPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdwZXJjZW50XycpXG5cbmNvbnN0IGZvcm1hdFJ1bGUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgbGV0IG5ld0tleSA9IGtleVxuICBsZXQgbmV3VmFsdWUgPSB2YWx1ZVxuXG4gIGlmICh0b1B4KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncHhfJywgJycpXG4gICAgbmV3VmFsdWUgPSB3cmFwVG8odmFsdWUsICdweCcpXG4gIH1cbiAgaWYgKHRvUGVyY2VudChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3BlcmNlbnRfJywgJycpXG4gICAgbmV3VmFsdWUgPSB3cmFwVG8odmFsdWUsICclJylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5OiBuZXdLZXksXG4gICAgdmFsdWU6IG5ld1ZhbHVlXG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9UT19QWCA9IFtcbiAgJ2JvcmRlcldpZHRoJyxcbiAgJ2JvcmRlckxlZnRXaWR0aCcsXG4gICdib3JkZXJSaWdodFdpZHRoJyxcbiAgJ2JvcmRlclRvcFdpZHRoJyxcbiAgJ2JvcmRlckJvdHRvbVdpZHRoJyxcbiAgJ21pbkhlaWdodCcsXG4gICdtaW5XaWR0aCcsXG4gICdtYXhXaWR0aCcsXG4gICdtYXhIZWlnaHQnLFxuICAnZm9udFNpemUnLFxuICAnaGVpZ2h0JyxcbiAgJ3dpZHRoJyxcbiAgJ2xldHRlclNwYWNpbmcnLFxuICAnZm9udFNpemUnLFxuICAnbGVmdCcsXG4gICdyaWdodCcsXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5leHBvcnQgY29uc3QgcGFyc2VSdWxlcyA9IChydWxlczogQW55T2JqZWN0LCBsYXllcj86IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocnVsZXMpXG5cbiAgaWYgKGtleXMuaW5jbHVkZXMoJ2lubmVySFRNTCcpIHx8IGtleXMuaW5jbHVkZXMoJ2lubmVyVGV4dCcpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nISBJbm5lckhUTUwgYW5kIGlubmVyVGV4dCBpcyBkZXByZWNhdGVkLiBVc2UgXCJjaGlsZHJlblwiIHByb3BlcnR5LmAsIGxheWVyKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBydWxlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcnVsZXNcbiAgfVxuXG4gIGlmICgndHlwb2dyYXBoeScgaW4gcnVsZXMgJiYgJ2FjY2VudFR5cG9ncmFwaHknIGluIHJ1bGVzKSB7XG4gICAgY29uc3QgdHlwb2dyYXBoeSA9IHJ1bGVzLnR5cG9ncmFwaHlcbiAgICBjb25zdCBhY2NlbnRUeXBvZ3JhcGh5ID0gcnVsZXMuYWNjZW50VHlwb2dyYXBoeVxuXG4gICAgcnVsZXMgPSB7XG4gICAgICAuLi5ydWxlcyxcbiAgICAgIC4uLnR5cG9ncmFwaHksXG4gICAgICAnLS1mb250LWZhbWlseSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgICAgICctLWFjY2VudC1jb2xvcic6IGFjY2VudFR5cG9ncmFwaHkuY29sb3IsXG4gICAgICAncHhfLS1hY2NlbnQtc2l6ZSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udFNpemVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocnVsZXMpLnJlZHVjZSgoYWNjLCBbcHJvcEtleSwgcHJvcFZhbHVlXSkgPT4ge1xuICAgIGlmIChERUZBVUxUX1RPX1BYLmluY2x1ZGVzKHByb3BLZXkpKSB7XG4gICAgICBwcm9wVmFsdWUgPSB3cmFwVG8ocHJvcFZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gZm9ybWF0UnVsZShwcm9wS2V5LCBwcm9wVmFsdWUpXG4gICAgYWNjW2tleV0gPSB2YWx1ZVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGFjYy5pbm5lckhUTUwgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lclRleHQnKSB7XG4gICAgICBhY2MuaW5uZXJUZXh0ID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBhY2MuY2hpbGRyZW4gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnKSA6IHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgfHwga2V5ID09PSAnaW5uZXJUZXh0JyB8fCBrZXkgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfSBlbHNlIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGFjYy5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleS5pbmNsdWRlcygnYm9yZGVyV2lkdGgnKSkge1xuICAgICAgYWNjLmJvcmRlclN0eWxlID0gJ3NvbGlkJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjb3JuZXInKSB7XG4gICAgICBhY2MuYm9yZGVyUmFkaXVzID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kRml0Jykge1xuICAgICAgYWNjLmJhY2tncm91bmRTaXplID0gdmFsdWUgYXMgRml0T3B0aW9uXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRJbWFnZScgJiYgaXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7dmFsdWV9KWBcbiAgICAgIGFjYy5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSkgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yKSkge1xuICAgICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoYWNjLmJhY2tncm91bmRDb2xvcilcbiAgICAgIGlmIChyZ2IpIHtcbiAgICAgICAgYWNjLmJhY2tncm91bmRDb2xvciA9IHJnYlRvUmdiYShgcmdiKCR7cmdiLnJ9LCAke3JnYi5nfSwgJHtyZ2IuYn0pYCwgK2FjYy5iYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IC8gMTAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0JvbGQnKSB7XG4gICAgICBhY2MuZm9udFdlaWdodCA9IHZhbHVlID8gJ2JvbGQnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzSXRhbGljJykge1xuICAgICAgYWNjLmZvbnRTdHlsZSA9IHZhbHVlID8gJ2l0YWxpYycgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNUaHJvdWdoJykge1xuICAgICAgYWNjLnRleHREZWNvcmF0aW9uID0gdmFsdWUgPyAnbGluZS10aHJvdWdoJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIHJldHVybiBhY2NcbiAgfSwgcnVsZXMpXG59XG4iLCJpbXBvcnQgeyBwYXJzZVJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9wYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IGlzVmFsaWRSdWxlID0gKHJ1bGU6IEFueU9iamVjdCkgPT4gdHlwZW9mIHJ1bGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJ1bGUpICYmICdwYXJlbnQnIGluIHJ1bGVcblxuZXhwb3J0IGNvbnN0IHVzZVBhcnNlUnVsZXMgPSAoc3RhdGU6IHVua25vd24pID0+XG4gIE9iamVjdC5lbnRyaWVzKHN0YXRlKS5yZWR1Y2UoKGFjYywgW2xheWVyLCBydWxlXSkgPT4ge1xuICAgIGFjY1tsYXllcl0gPSBpc1ZhbGlkUnVsZShydWxlKSA/IHBhcnNlUnVsZXMoeyAuLi5zdGF0ZVtsYXllcl0gfSwgbGF5ZXIpIDogcnVsZVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IHN0cmluZ1xufVxuXG5jb25zdCBEaXNwbGF5VGV4dDogRkM8UHJvcHM+ID0gKHsgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICBjb25zdCBmb3JtYXRWYWx1ZSA9IGNoaWxkcmVuPy5yZXBsYWNlKCdzY3JpcHQnLCAnJyk/LnJlcGxhY2UoL3t7KC4qPyl9fS9nLCBgPHNwYW4+JDE8L3NwYW4+YClcblxuICByZXR1cm4gPGRpdiB7Li4ucmVzdH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBmb3JtYXRWYWx1ZSB9fSAvPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNwbGF5VGV4dFxuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5leHBvcnQgY29uc3QgdXNlVG9nZ2xlID0gKCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgcmV0dXJuIFtpc09wZW4sICgpID0+IHNldElzT3BlbihwcmV2ID0+ICFwcmV2KV1cbn1cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgQ2xvc2VJY29uOiBGQyA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDI0IDI0Jz5cbiAgICA8cGF0aFxuICAgICAgZD0nTTE3LjY1OSA0LjkyOWExIDEgMCAxIDEgMS40MTQgMS40MTRMMTMuNDE2IDEybDUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNSAxLjQxNGwtNS42NTYtNS42NTctNS42NTcgNS42NTdhMSAxIDAgMCAxLTEuNDE0LTEuNDE0TDEwLjU4NyAxMiA0LjkzMSA2LjM0M0ExIDEgMCAxIDEgNi4zNDUgNC45M2w1LjY1NyA1LjY1NyA1LjY1Ni01LjY1N1onXG4gICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgPjwvcGF0aD5cbiAgPC9zdmc+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IENsb3NlSWNvblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5jb25zdCBHaWZ0SWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgdmlld0JveD0nMCAwIDE2IDE2Jz5cbiAgICA8cGF0aFxuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgICAgZmlsbFJ1bGU9J2V2ZW5vZGQnXG4gICAgICBkPSdNMi4xMyA4SDd2Ny4zMUgzLjIyYTEuMDkgMS4wOSAwIDAxLTEuMDktMS4wOXpNOSAxNS4zNGgzLjgxYTEuMDkgMS4wOSAwIDAwMS4wOS0xLjA5VjhIOXptNS44LTkuOTR2MS4xOWEuNDguNDggMCAwMS0uNDguNDhIMS43MWEuNDguNDggMCAwMS0uNDgtLjQ4VjUuNGMwLS41OTYuNDg0LTEuMDggMS4wOC0xLjA4SDVhMi40OCAyLjQ4IDAgMDEtMS40Ny0xLjY1IDEuNjIgMS42MiAwIDAxLjI2LTEuNCAxLjU3IDEuNTcgMCAwMTEtLjU4Yy4xMS0uMDEuMjItLjAxLjMzIDBhMi41IDIuNSAwIDAxMiAxQTkgOSAwIDAxOCAzLjIyYTEwLjM4IDEwLjM4IDAgMDEuOTEtMS41NCAyLjQ5IDIuNDkgMCAwMTEuOTMtMWguMzZjLjM2OS4wNjUuNzAyLjI2Ljk0LjU1LjMxLjQwNy40MTQuOTM2LjI4IDEuNDNhMi40OCAyLjQ4IDAgMDEtMS40NSAxLjY0aDIuNzdhMS4wOCAxLjA4IDAgMDExLjAzIDEuMXpNOC42NiA0YTkuODEgOS44MSAwIDAwMS45LS41NSAxLjUyIDEuNTIgMCAwMC44OC0xIC42OC42OCAwIDAwLS4xLS41OS42LjYgMCAwMC0uMzQtLjIyLjU4LjU4IDAgMDAtLjE4IDAgMS41MiAxLjUyIDAgMDAtMS4xNy42M0E5LjA2IDkuMDYgMCAwMDguNjYgNHptLTMuMzItLjU4QTkuNjIgOS42MiAwIDAwNy4yNSA0YTguNTkgOC41OSAwIDAwLTEtMS43MiAxLjUxIDEuNTEgMCAwMC0xLjE4LS42M2gtLjEzYS42Ni42NiAwIDAwLS4zOS4yMi42Ni42NiAwIDAwLS4wOS41N2MuMTMuNDQzLjQ1My44MDQuODguOTh6J1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBHaWZ0SWNvblxuIiwiaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJy4uL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbHVlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbnR5cGUgQW5pbWF0aW9uTmFtZSA9ICdmYWRlJyB8ICdwdWxzZScgfCAnd2lnZ2xlJyB8ICdncmFkaWVudCdcblxuY29uc3QgYW5pbWF0aW9uc01hcCA9IChhbmltYXRpb25zOiBSZWNvcmQ8QW5pbWF0aW9uTmFtZSwgc3RyaW5nPikgPT4gKHtcbiAgZmFkZTogYCR7YW5pbWF0aW9ucy5mYWRlfSAycyBsaW5lYXIgaW5maW5pdGVgLFxuICBwdWxzZTogYCR7YW5pbWF0aW9ucy5wdWxzZX0gLjNzIGxpbmVhciAwcyBpbmZpbml0ZSBhbHRlcm5hdGUgZm9yd2FyZHNgLFxuICB3aWdnbGU6IGAke2FuaW1hdGlvbnMud2lnZ2xlfSAycyBsaW5lYXIgaW5maW5pdGVgLFxuICBncmFkaWVudDogYCR7YW5pbWF0aW9ucy5ncmFkaWVudH0gM3MgZWFzZSBpbmZpbml0ZWAsXG59KVxuXG5leHBvcnQgY29uc3QgdXNlR2lmdFJ1bGVzID0gKGRldmljZVN0YXRlOiB1bmtub3duLCBhbmltYXRpb25zOiBSZWNvcmQ8QW5pbWF0aW9uTmFtZSwgc3RyaW5nPikgPT4ge1xuICBjb25zdCBmdWxsQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnNNYXAoYW5pbWF0aW9ucylcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBoYXNJY29uID0gcnVsZXM/Lmljb24/Lmhhc0ljb25cblxuICBjb25zdCBhcnJvd1J1bGVzID0ge1xuICAgIGxlZnQ6IGAkeysoZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8ubGVmdCB8fCAwKSAqIC0xICsgOH1weGAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlclRvcENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4gIH1cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgbGVmdDogcnVsZXM/LmNvbnRhaW5lcj8ubGVmdFxuICB9XG5cbiAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IChydWxlcz8uaWNvbj8uYW5pbWF0aW9ucyB8fCBbXSlcbiAgICAubWFwKChhbmltYXRpb246IEFuaW1hdGlvbk5hbWUpID0+IGZ1bGxBbmltYXRpb25zW2FuaW1hdGlvbl0pXG4gICAgLmpvaW4oJywgJylcblxuICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID1cbiAgICBpc1ZhbHVlKHJ1bGVzPy5pY29uPy5ncmFkaWVudENvbG9yKSAmJiBydWxlcz8uaWNvbj8uYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuICAgICAgPyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZXMuaWNvbj8uYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcn0gMTAwJSkgMCUgMCUgLyA0MDAlIDQwMCVgLFxuICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuICAgICAgICB9XG4gICAgICA6IHt9XG5cbiAgY29uc3QgaWNvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5pY29uIHx8IHt9LFxuICAgIGFuaW1hdGlvbjogYWxsQW5pbWF0aW9ucyxcbiAgICAuLi5iYWNrZ3JvdW5kU3R5bGVzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhhc0ljb24sXG4gICAgYXJyb3dSdWxlcyxcbiAgICBib2R5UnVsZXMsXG4gICAgaWNvblJ1bGVzXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kT3B0aW9ucyA9IFsnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRDb2xvck9wYWNpdHknLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRGaXQnXVxuZXhwb3J0IGNvbnN0IGJvcmRlck9wdGlvbnMgPSBbJ2JvcmRlcldpZHRoJywgJ2JvcmRlckNvbG9yJywgJ2JvcmRlclN0eWxlJ11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgYm9yZGVyT3B0aW9ucyB9IGZyb20gJ3NyYy9oZWxwZXJzL2NvbnN0YW50cydcblxuY29uc3QgU2ltcGxlR2lmdDogRkM8U3RhdGU+ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IFtsZWdhbElzT3BlbiwgdG9nZ2xlTGVnYWxJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGU8U3RhdGU+KClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbihkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5kZWxheSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBsZWdhbEJvcmRlciA9IGxlZ2FsSXNPcGVuID8gcGljayhydWxlcy5jb250YWluZXIsIC4uLmJvcmRlck9wdGlvbnMpIDoge31cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGxlZ2FsSXNPcGVuXG4gICAgICB9KX1cbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHsgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlbiB9KX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGEgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9IHRhcmdldD0nX2JsYW5rJyByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICAgICAge3J1bGVzPy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIFtzdHlsZXMuYnV0dG9uQW5pbWF0ZWRdOiBydWxlcy5idXR0b24uaXNBbmltYXRlZFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgc3R5bGU9e3J1bGVzLmJ1dHRvbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEdhcH0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17eyAuLi5ydWxlcy5sZWdhbCwgLi4ubGVnYWxCb3JkZXIgfX0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57cnVsZXM/LmxlZ2FsPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUxlZ2FsSXNPcGVufT5cbiAgICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlR2lmdCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGluZX0gc3R5bGU9e3J1bGVzLmxpbmV9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keUlubmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRleHR9PntydWxlcy5idXR0b24/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c0NhcmRcbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzQ2FyZCBmcm9tICcuL2NvbXBvbmVudHMvQm9udXNDYXJkJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgcGljaywgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5cbmNvbnN0IENvbXBsZXhHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgY29uc3QgaGFzVGl0bGVJY29uID0gcnVsZXM/LnRpdGxlPy5oYXNJY29uXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0gY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHtcbiAgICAgICAgICBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17Ym9keVJ1bGVzfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgICB7aGFzVGl0bGVJY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkSWNvbn0gc3R5bGU9e3BpY2socnVsZXMudGl0bGUsICdjb2xvcicpfT5cbiAgICAgICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkVGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+e3J1bGVzLnRpdGxlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgICAgICAgIDxCb251c0NhcmQgLz5cbiAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPENvbXBsZXhHaWZ0IC8+KVxuXG4vLyBpbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gXCJzcmNcIjtcbi8vIGltcG9ydCB7IGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuLy9cblxuLy9cbi8vIGV4cG9ydCBkZWZhdWx0IChlbWl0dGVyOiBFbWl0dGVyVHlwZSkgPT4ge1xuLy8gICBlbWl0dGVyLm9uKCdyZW5kZXJOb2RlJywgKHsgcnVsZSwgbGF5ZXIgfSkgPT4ge1xuLy8gICAgIGlmICgnJGFuaW1hdGlvbnMnIGluIHJ1bGUpIHtcbi8vICAgICAgIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSBydWxlLiRhbmltYXRpb25zXG4vLyAgICAgICAgIC5tYXAoKGFuaW1hdGlvbjoga2V5b2YgdHlwZW9mIGFuaW1hdGlvbnNNYXApID0+IGFuaW1hdGlvbnNNYXBbYW5pbWF0aW9uXSlcbi8vICAgICAgICAgLmpvaW4oJywgJylcbi8vXG4vLyAgICAgICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID1cbi8vICAgICAgICAgaXNWYWx1ZShydWxlLiRncmFkaWVudENvbG9yKSAmJiBydWxlLiRhbmltYXRpb25zLmluY2x1ZGVzKCdncmFkaWVudCcpXG4vLyAgICAgICAgICAgPyB7XG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KC05MGRlZywgJHtydWxlLmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZS4kZ3JhZGllbnRDb2xvcn0gMTAwJSlgLFxuLy8gICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICc0MDAlIDQwMCUnXG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIDoge31cbi8vXG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvbjoge1xuLy8gICAgICAgICAgIGFuaW1hdGlvbjogYWxsQW5pbWF0aW9ucyxcbi8vICAgICAgICAgICAuLi5iYWNrZ3JvdW5kU3R5bGVzXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdpY29uJyAmJiAhaXNFbXB0eVZhbHVlKHJ1bGUuaGFzSWNvbikpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uVGFyZ2V0OiB7XG4vLyAgICAgICAgICAgZGlzcGxheTogcnVsZS5oYXNJY29uID8gJ2ZsZXgnIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICd0aXRsZScpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBoZWFkZXJJY29uOiB7XG4vLyAgICAgICAgICAgZGlzcGxheTogcnVsZS5oYXNJY29uID8gJ2Jsb2NrJyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnY29udGFpbmVyJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGJvZHk6IHtcbi8vICAgICAgICAgICAkZGVsYXk6IHJ1bGUuZGVsYXksXG4vLyAgICAgICAgICAgbGVmdDogcnVsZS5sZWZ0XG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIGFycm93OiB7XG4vLyAgICAgICAgICAgbGVmdDogYCR7KyhydWxlLmxlZnQgfHwgMCkgKiAtMSArIDh9YCxcbi8vICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJ1bGUuYmFja2dyb3VuZENvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlclRvcFN0eWxlOiAnc29saWQnLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy8gICB9KVxuLy8gfVxuIiwiZXhwb3J0IGNvbnN0IHN3aXRjaFRleHRBbGlnblRvRmxleCA9ICh0ZXh0QWxpZ24/OiBzdHJpbmcpID0+XG4gIHRleHRBbGlnbiA/IHsgbGVmdDogJ2ZsZXgtc3RhcnQnLCBjZW50ZXI6ICdjZW50ZXInLCByaWdodDogJ2ZsZXgtZW5kJyB9W3RleHRBbGlnbl0gOiB0ZXh0QWxpZ25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBMaW5lOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXM/LnJvb3Q/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZVxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gXCJzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXhcIjtcbmltcG9ydCBMaW5lIGZyb20gJy4vY29tcG9uZW50cy9saW5lJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b24ucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b24/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGVsID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2VsfT5cbiAgICAgICAgICAgICAgPExpbmUgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAge2J1dHRvblJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7bGVnYWxSdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCwgcGljayB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBzcGFjaW5nT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gc3R5bGU9e3J1bGVzLmhlYWRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cGljayhydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTWF0Y2g6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbXN9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVhZ3VlfSBzdHlsZT17cnVsZXMubGVhZ3VlfT57cnVsZXMubGVhZ3VlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX0g4oCUIHtydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtydWxlcy5vZGRMYWJlbH0+e3J1bGVzLm9kZExhYmVsPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZFZhbHVlfSBzdHlsZT17cnVsZXMub2RkVmFsdWV9PntydWxlcy5vZGRWYWx1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30vPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gJ3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleCdcbmltcG9ydCBNYXRjaCBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2gnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbldyYXBwZXIucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b25XcmFwcGVyPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLnJvb3QsXG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgY29udGVudFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLmNvbnRlbnQsXG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgdGV4dFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLnRleHQsXG4gICAgdGV4dEFsaWduOiBydWxlcy5yb290Py5hbGlnblxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9IHN0eWxlPXtjb250ZW50UnVsZXN9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICAgIDxNYXRjaCAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17dGV4dFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25IZWFkfSBzdHlsZT17cnVsZXMuYnV0dG9uSGVhZH0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uSGVhZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UYXJnZXR9IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgW2lzT3BlbiwgdG9nZ2xlSXNPcGVuXSA9IHVzZVRvZ2dsZSgpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtydWxlcy5iYWNrZ3JvdW5kfSAvPlxuICAgICAgPGFcbiAgICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dGaXJzdH0gc3R5bGU9e3J1bGVzLnJvd0ZpcnN0fT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dGaXJzdD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dTZWNvbmR9IHN0eWxlPXtydWxlcy5yb3dTZWNvbmR9PlxuICAgICAgICAgICAge3J1bGVzLnJvd1NlY29uZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib29rbWFrZXJ9PndpbmxpbmU8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb31cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICA8c3Bhbj57cnVsZXMubGVnYWxJbmZvPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IHN0eWxlPXtydWxlcy5sZWdhbEluZm9CdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn0+XG4gICAgICAgICAgICB7aXNPcGVuID8gcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5vcGVuVGV4dCA6IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8uY2xvc2VUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9ICdkZXNrdG9wJ1xuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfT5cbiAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxCb251c0NhcmQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgVGV4dDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAge3J1bGVzLnJvb3Q/LmNoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBNYXRjaGVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgY29uc3Qgcm9vdFJ1bGVzID0gb21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlT25lfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZIZWFkfSBzdHlsZT17cnVsZXMuY29lZn0+WDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZWYWx1ZX0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlWH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLm9kZCwgc3R5bGVzLm9kZFJldmVyc2UpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVR3b308L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBNYXRjaGVzT25lVHdvOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IHN0YXRlPy5kZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZUxhYmVsfSBzdHlsZT17cnVsZXMudGl0bGVMYWJlbH0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlTGFiZWwuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlVmFsdWV9IHN0eWxlPXtydWxlcy50aXRsZVZhbHVlfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVWYWx1ZS5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMU5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUxLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0yTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTIuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc09uZVR3b1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmludGVyZmFjZSBTbGlkZSB7XG4gIGFuaW1hdGlvbkR1cmF0aW9uOiBudW1iZXJcbn1cblxuY29uc3QgdXNlQW5pbWF0ZWRMaXN0ID0gKHNsaWRlczogU2xpZGVbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGl0ZW1zQ291bnQgPSBzbGlkZXMubGVuZ3RoXG4gIGNvbnN0IFthbmltYXRlZElkeCwgc2V0QW5pbWF0ZWRJZHhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuICBjb25zdCBhbmltYXRpb25EdXJhdGlvbiA9IHNsaWRlc1thbmltYXRlZElkeCB8fCAwXT8uYW5pbWF0aW9uRHVyYXRpb25cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgIHNldEFuaW1hdGVkSWR4KGluZGV4ID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IGl0ZW1zQ291bnQpIHJldHVybiBpbmRleCArIDFcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoZ29OZXh0LCBhbmltYXRpb25EdXJhdGlvbilcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dClcbiAgfSwgW3NldEFuaW1hdGVkSWR4LCBpdGVtc0NvdW50LCBhbmltYXRpb25EdXJhdGlvbiwgYW5pbWF0ZWRJZHhdKVxuXG4gIHJldHVybiBhbmltYXRlZElkeFxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VBbmltYXRlZExpc3RcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgVGV4dCBmcm9tICcuL2NvbXBvbmVudHMvVGV4dCdcbmltcG9ydCBNYXRjaGVzIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzJ1xuaW1wb3J0IE1hdGNoZXNPbmVUd28gZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXNPbmVUd28nXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHVzZUFuaW1hdGVkTGlzdCBmcm9tICdzcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tICdzcmMvaGVscGVycy9jb25zdGFudHMnXG5cbmNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEID0gMzcwMFxuXG5jb25zdCBXaWRlQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGdldENoaWxkID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAoe1xuICAgICAgdGV4dDogPFRleHQgLz4sXG4gICAgICBtYXRjaGVzOiA8TWF0Y2hlcyAvPixcbiAgICAgIG1hdGNoZXNPbmVUd286IDxNYXRjaGVzT25lVHdvIC8+XG4gICAgfVtuYW1lXSlcblxuICBjb25zdCBzbGlkZXNMaXN0ID0gKHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikubWFwKHNsaWRlID0+ICh7XG4gICAgLi4uc2xpZGUsXG4gICAgYW5pbWF0aW9uTmFtZTogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbk5hbWUsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IHNsaWRlPy5yb290Py5hbmltYXRpb25EdXJhdGlvbiB8fCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRFxuICB9KSlcblxuICBjb25zdCBjdXJyZW50U2xpZGUgPSB1c2VBbmltYXRlZExpc3Qoc2xpZGVzTGlzdClcbiAgY29uc3Qgc2xpZGVSdWxlcyA9IHVzZVBhcnNlUnVsZXMoc2xpZGVzTGlzdFtjdXJyZW50U2xpZGVdIHx8IHt9KVxuXG4gIGNvbnN0IGJhY2tncm91bmRSdWxlcyA9IHNsaWRlUnVsZXM/LnJvb3Q/Lmhhc0N1c3RvbUJhY2tncm91bmRcbiAgICA/IHBpY2soc2xpZGVSdWxlcz8ucm9vdCB8fCB7fSwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG4gICAgOiBwaWNrKHJ1bGVzLmJhY2tncm91bmQsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17YmFja2dyb3VuZFJ1bGVzfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNlbnRlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKChjaGlsZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2xpZGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZTogY3VycmVudFNsaWRlID09PSBpbmRleCA/IHN0eWxlc1tjaGlsZC5yb290Py5hbmltYXRpb25OYW1lIHx8ICdmYWRlLWluLW91dCddIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBgJHtjaGlsZC5yb290Py5hbmltYXRpb25EdXJhdGlvbn1tc2BcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PntnZXRDaGlsZChjaGlsZC5uYW1lKX08L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8V2lkZUNhcmQgLz4pXG4iLCJpbXBvcnQgeyBDYWxsYmFjaywgZGV2aWNlcyBhcyBkZXZpY2VzTGlzdCwgZ2V0LCBpc1ZhbGlkVGVtcGxhdGUgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSwgaXNWYWxpZFRlbXBsYXRlIH1cbiJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiaSIsImlubmVyIiwibyIsIm4iLCJ0IiwidSIsIkIiLCJyIiwiZiIsImMiLCJlIiwiXyIsIkYiLCJxIiwidyIsImciLCJsIiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInN0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiZGVmaW5lUHJvcGVydHkiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25NZXJnZVZhbHVlIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJjbG9uZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiYmFzZUNyZWF0ZSIsIm92ZXJBcmciLCJnZXRQcm90b3R5cGUiLCJpc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsImlzT2JqZWN0TGlrZSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyIsImlzQXJyYXkiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0Iiwic3R1YkZhbHNlIiwiaXNCdWZmZXIiLCJvYmplY3RUYWciLCJpc1BsYWluT2JqZWN0IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiaXNUeXBlZEFycmF5Iiwic2FmZUdldCIsImFzc2lnblZhbHVlIiwiY29weU9iamVjdCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJhcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiYmFzZUtleXNJbiIsImtleXNJbiIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJpZGVudGl0eSIsImFwcGx5Iiwib3ZlclJlc3QiLCJjb25zdGFudCIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJpbmplY3RMaW5rIiwib3B0aW9ucyIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImtleSIsInZhbHVlIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpdGVyYXRvciIsImlucHV0IiwidmlzaXRvciIsInBhdGgiLCJBcnJheSIsIm1hcCIsImVsIiwibmV3UGF0aCIsImZpbHRlciIsImlzVmFsdWUiLCJqb2luIiwicmVkdWNlIiwiYWNjIiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJnZXQiLCJkZWZWYWx1ZSIsInBhdGhBcnJheSIsIm1hdGNoIiwicHJldk9iaiIsInNldCIsImxlbmd0aCIsImhleFRvUmdiIiwiaGV4IiwiY2hhcnMiLCJzbGljZSIsInNwbGl0IiwidmFsIiwiZXhlYyIsInBhcnNlSW50IiwiYiIsImlzSnNvblNhbWUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlcnkiLCJhcnIiLCJpc1ZhbGlkVGVtcGxhdGUiLCJkYXRhIiwicmdiVG9SZ2JhIiwicmdiIiwiYWxwaGEiLCJyZXBsYWNlIiwiZGV2aWNlcyIsIkJSRUFLUE9JTlRTIiwibW9iaWxlIiwidGFibGV0IiwibGFwdG9wIiwiZGVza3RvcCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwiX2pzeCIsIlByb3ZpZGVyIiwicmVuZGVyIiwidk5vZGUiLCJ0YXJnZXQiLCJzdGF0ZSIsInByZWFjdFJlbmRlciIsInVzZUN1cnJlbnRTdGF0ZSIsInVzZUNvbnRleHQiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJib3JkZXJPcHRpb25zIiwic3BhY2luZ09wdGlvbnMiLCJub29wWWFNZXRyaWthIiwiZ29hbCIsImNvbnNvbGUiLCJsb2ciLCJub29wQWRGb3giLCJ1c2VNZXRyaWNzIiwibGF5ZXJOYW1lIiwic2F2ZU1ldHJpY3MiLCJ5YVJlYWNoR29hbCIsImFkZm94UmVhY2hHb2FsIiwibWV0cmljcyIsInlhU2hvdyIsImFkZm94U2hvdyIsInlhQ2xpY2siLCJhZGZveENsaWNrIiwidXNlRXh0cmFjdEZvbnRzIiwiZm9udHMiLCJTZXQiLCJhZGQiLCJmb250TGlua3MiLCJ1c2VNZW1vIiwiZnJvbSIsImZvbnQiLCJyZWwiLCJocmVmIiwiU2ltcGxlR2lmdCIsInJvb3RSZWYiLCJsZWdhbElzT3BlbiIsInRvZ2dsZUxlZ2FsSXNPcGVuIiwib25DbGljayIsInN0eWxlcyIsImZhZGVpbiIsImxlZ2FsQm9yZGVyIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJsZWdhbE9wZW4iLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsR2FwIiwibGVnYWwiLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYm9keUlubmVyIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwiaGFzVGl0bGVJY29uIiwidGl0bGUiLCJwcm9tb3Rpb24iLCJoZWFkSWNvbiIsImhlYWRUaXRsZSIsImNoaWxkIiwic3dpdGNoVGV4dEFsaWduVG9GbGV4IiwidGV4dEFsaWduIiwiY2VudGVyIiwicmlnaHQiLCJMaW5lIiwiU2ltcGxlUG9wdXAiLCJhbGlnbkl0ZW1zIiwiYWxpZ24iLCJidXR0b25SdWxlcyIsImp1c3RpZnlDb250ZW50IiwibGVnYWxSdWxlcyIsIkJvbnVzIiwiaGVhZGVyIiwid3JhcHBlciIsIk1hdGNoIiwidGVhbXMiLCJsZWFndWUiLCJuYW1lIiwidGVhbUEiLCJ0ZWFtQiIsInRlYW0iLCJ0ZWFtTG9nbyIsInRlYW1OYW1lIiwib2RkIiwib2RkTGFiZWwiLCJvZGRWYWx1ZSIsImJ1dHRvbldyYXBwZXIiLCJjb250ZW50UnVsZXMiLCJjb250ZW50IiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsInJvd0ZpcnN0Iiwicm93U2Vjb25kIiwiYm9va21ha2VyIiwibGVnYWxJbmZvIiwibGVnYWxJbmZvQnV0dG9uIiwib3BlblRleHQiLCJjbG9zZVRleHQiLCJUZXh0IiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJ2YWx1ZU9uZSIsImNvZWYiLCJjb2VmSGVhZCIsImNvZWZWYWx1ZSIsInZhbHVlWCIsIm9kZFJldmVyc2UiLCJ2YWx1ZVR3byIsIk1hdGNoZXNPbmVUd28iLCJ0aXRsZUxhYmVsIiwidGl0bGVWYWx1ZSIsInRlYW0xTmFtZSIsInRlYW1WYWx1ZSIsInZhbHVlMSIsInRlYW0yTmFtZSIsInZhbHVlMiIsInVzZUFuaW1hdGVkTGlzdCIsInNsaWRlcyIsIml0ZW1zQ291bnQiLCJhbmltYXRlZElkeCIsInNldEFuaW1hdGVkSWR4IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJnb05leHQiLCJ0aW1lb3V0IiwiREVGQVVMVF9BTklNQVRJT05fU1BFRUQiLCJXaWRlQ2FyZCIsImdldENoaWxkIiwibWF0Y2hlcyIsIm1hdGNoZXNPbmVUd28iLCJzbGlkZXNMaXN0IiwiQm9vbGVhbiIsInNsaWRlIiwiYW5pbWF0aW9uTmFtZSIsImN1cnJlbnRTbGlkZSIsInNsaWRlUnVsZXMiLCJiYWNrZ3JvdW5kUnVsZXMiLCJoYXNDdXN0b21CYWNrZ3JvdW5kIiwibW9kaWZ5U3RhdGUiLCJkZXZpY2VzTGlzdCIsIm5ld1N0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEdBQUMsV0FBWTtBQUdaLFFBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsYUFBU0EsY0FBYTtBQUNyQixVQUFJLFVBQVUsQ0FBQTtBQUVkLGVBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDMUMsWUFBSSxNQUFNLFVBQVVBLEVBQUM7QUFDckIsWUFBSSxDQUFDO0FBQUs7QUFFVixZQUFJLFVBQVUsT0FBTztBQUVyQixZQUFJLFlBQVksWUFBWSxZQUFZLFVBQVU7QUFDakQsa0JBQVEsS0FBSyxHQUFHO0FBQUEsUUFDaEIsV0FBVSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQzlCLGNBQUksSUFBSSxRQUFRO0FBQ2YsZ0JBQUlDLFNBQVFGLFlBQVcsTUFBTSxNQUFNLEdBQUc7QUFDdEMsZ0JBQUlFLFFBQU87QUFDVixzQkFBUSxLQUFLQSxNQUFLO0FBQUEsWUFDbEI7QUFBQSxVQUNEO0FBQUEsUUFDTCxXQUFjLFlBQVksVUFBVTtBQUNoQyxjQUFJLElBQUksYUFBYSxPQUFPLFVBQVUsWUFBWSxDQUFDLElBQUksU0FBUyxTQUFRLEVBQUcsU0FBUyxlQUFlLEdBQUc7QUFDckcsb0JBQVEsS0FBSyxJQUFJLFNBQVUsQ0FBQTtBQUMzQjtBQUFBLFVBQ0E7QUFFRCxtQkFBUyxPQUFPLEtBQUs7QUFDcEIsZ0JBQUksT0FBTyxLQUFLLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxHQUFHO0FBQ3RDLHNCQUFRLEtBQUssR0FBRztBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUQs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QUFBQSxNQUFDO0FBQUMsTUFBQUssTUFBR0EsR0FBRSxLQUFLLE1BQUtQLElBQUVDLElBQUVHLEVBQUM7QUFBQSxJQUFDLEdBQUUsRUFBRSx3QkFBc0JDO0FBQUEsRUFBQztBQUFDLFNBQU9OLEdBQUUsT0FBS0EsR0FBRTtBQUFFO0FBQUMsU0FBUyxFQUFFRyxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLEdBQUNDLFFBQUUsT0FBSyxFQUFFRCxHQUFFLEtBQUlGLEVBQUMsTUFBSUUsR0FBRSxLQUFHRyxJQUFFSCxHQUFFLElBQUVGLElBQUUsRUFBRSxJQUFJLElBQUksS0FBS0UsRUFBQztBQUFFO0FBQUMsU0FBUyxFQUFFRyxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLEdBQUNDLFFBQUUsT0FBSyxFQUFFRCxHQUFFLEtBQUlGLEVBQUMsTUFBSUUsR0FBRSxLQUFHRyxJQUFFSCxHQUFFLElBQUVGLElBQUUsRUFBRSxJQUFJLEtBQUtFLEVBQUM7QUFBRTtBQUFDLFNBQVNTLElBQUUsR0FBRTtBQUFDLFNBQU9ULE1BQUUsR0FBRVUsSUFBRSxXQUFVO0FBQUMsV0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEVBQUMsR0FBRSxFQUFFO0FBQUM7QUFBc0wsU0FBU0EsSUFBRSxHQUFFTCxJQUFFO0FBQUMsTUFBSUYsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFNBQU8sRUFBRUEsR0FBRSxLQUFJRSxFQUFDLEtBQUdGLEdBQUUsTUFBSSxFQUFHLEdBQUNBLEdBQUUsSUFBRUUsSUFBRUYsR0FBRSxNQUFJLEdBQUVBLEdBQUUsT0FBS0EsR0FBRTtBQUFFO0FBQXNELFNBQVNRLElBQUUsR0FBRTtBQUFDLE1BQUlSLEtBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFFTCxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsU0FBT0EsR0FBRSxJQUFFLEdBQUVLLE1BQUcsUUFBTUwsR0FBRSxPQUFLQSxHQUFFLEtBQUcsTUFBR0ssR0FBRSxJQUFJ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SUFBSSxTQUFTRCxJQUFFO0FBQUMsV0FBTyxFQUFFQSxJQUFFQyxJQUFFTSxFQUFDO0FBQUEsRUFBQyxDQUFDLElBQUc7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFTixJQUFFTSxJQUFFO0FBQUMsU0FBTyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU1AsSUFBRTtBQUFDLFdBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLEVBQUMsQ0FBQyxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTU4sT0FBSSxFQUFFLE9BQUtNLEdBQUUsYUFBYSxFQUFFLEtBQUksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSUEsTUFBSTtBQUFDO0FBQUMsU0FBUyxJQUFHO0FBQUMsT0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUk7QUFBQyxTQUFTLEVBQUUsR0FBRTtBQUFDLE1BQUlOLEtBQUUsRUFBRSxHQUFHO0FBQUksU0FBT0EsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUksQ0FBQztBQUFDO0FBQXFMLFNBQVMsSUFBRztBQUFDLE9BQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFJO0FBQUNNLFFBQUUsVUFBUSxTQUFTLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUU7QUFBSSxFQUFBQSxNQUFHQSxHQUFFLE9BQUtBLEdBQUUsSUFBRyxHQUFHQSxNQUFHLFNBQUssRUFBRSxRQUFNLEVBQUUsT0FBSyxPQUFNLEtBQUcsRUFBRSxDQUFDO0FBQUMsSUFBRyxFQUFFLFlBQVUsSUFBSUQsYUFBRyxNQUFJLFNBQVMsR0FBRUMsSUFBRTtBQUFDLE1BQUlNLEtBQUVOLEdBQUUsS0FBSUcsS0FBRTtBQUFLLFVBQU1BLEdBQUUsTUFBSUEsR0FBRSxJQUFFLENBQUUsSUFBRUEsR0FBRSxFQUFFLEtBQUtHLEVBQUM7QUFBRSxNQUFJTCxLQUFFLEVBQUVFLEdBQUUsR0FBRyxHQUFFTCxLQUFFLE9BQUdGLEtBQUUsV0FBVTtBQUFDLElBQUFFLE9BQUlBLEtBQUUsTUFBR1EsR0FBRSxNQUFJLE1BQUtMLEtBQUVBLEdBQUVXLEVBQUMsSUFBRUEsR0FBQztBQUFBLEVBQUc7QUFBRSxFQUFBTixHQUFFLE1BQUlWO0FBQUUsTUFBSWdCLEtBQUUsV0FBVTtBQUFDLFFBQUcsQ0FBQyxFQUFFVCxHQUFFLEtBQUk7QUFBQyxVQUFHQSxHQUFFLE1BQU0sS0FBSTtBQUFDLFlBQUlKLEtBQUVJLEdBQUUsTUFBTTtBQUFJLFFBQUFBLEdBQUUsSUFBSSxJQUFJLENBQUMsSUFBRSxFQUFFSixJQUFFQSxHQUFFLElBQUksS0FBSUEsR0FBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUMsVUFBSUM7QUFBRSxXQUFJRyxHQUFFLFNBQVMsRUFBQyxLQUFJQSxHQUFFLE1BQUksS0FBSSxDQUFDLEdBQUVILEtBQUVHLEdBQUUsRUFBRSxJQUFHO0FBQUksUUFBQUgsR0FBRTtJQUFhO0FBQUEsRUFBQyxHQUFFSyxLQUFFLFNBQUtMLEdBQUU7QUFBSSxFQUFBRyxHQUFFLFNBQU9FLE1BQUdGLEdBQUUsU0FBUyxFQUFDLEtBQUlBLEdBQUUsTUFBSUEsR0FBRSxJQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtQLElBQUVBLEVBQUM7QUFBQyxHQUFFLEVBQUUsVUFBVSx1QkFBcUIsV0FBVTtBQUFDLE9BQUssSUFBRSxDQUFFO0FBQUEsR0FBRSxFQUFFLFVBQVUsU0FBTyxTQUFTLEdBQUVVLElBQUU7QUFBQyxNQUFHLEtBQUssS0FBSTtBQUFDLFFBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQyxVQUFJSCxLQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUVMLEtBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQUksV0FBSyxJQUFJLElBQUksQ0FBQyxJQUFFLEVBQUUsS0FBSyxLQUFJSyxJQUFFTCxHQUFFLE1BQUlBLEdBQUUsR0FBRztBQUFBLElBQUM7QUFBQyxTQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUMsTUFBSUYs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O0FBQUEsRUFBQSxDQUNKO0FBRVI7QUFFQSxNQUFlRyxRQUFBQSxPQUFPRixFQUFDb1EsYUFBVztBQ2hHbEMsTUFBTVksY0FBY0EsQ0FDbEIzUSxPQUNBOEMsT0FDQXlCLE1BQ0F6SixPQUNBb0QsWUFBVTBTLFlBQ1A7QUFDSCxRQUFNQyxXQUFXO0FBQUEsSUFBRSxHQUFHN1E7QUFBQUEsRUFBQUE7QUFFdEI5QixZQUFRdEQsUUFBUXlGLENBQVUsV0FBQTtBQUN4QndRLGFBQVMvTixLQUFLLElBQUk7QUFBQSxNQUNoQixHQUFHK04sU0FBUy9OLEtBQUs7QUFBQSxNQUNqQixDQUFDekMsTUFBTSxHQUFHO0FBQUEsUUFDUixHQUFHd1EsU0FBUy9OLEtBQUssRUFBRXpDLE1BQU07QUFBQSxRQUN6QixDQUFDa0UsSUFBSSxHQUFHLE9BQU96SixVQUFVLGFBQWFBLE1BQU13QixJQUFJdVUsVUFBVyxHQUFFL04sU0FBU3pDLFVBQVVrRSxNQUFNLENBQUMsSUFBSXpKO0FBQUFBLE1BQzdGO0FBQUEsSUFBQTtBQUFBLEVBQ0YsQ0FDRDtBQUNNK1YsU0FBQUE7QUFDVDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCwxMDNdfQ==
|