@gnwebsoft/ui 4.0.47 → 4.0.48
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/dist/{chunk-VZKQSJYQ.js → chunk-6VPKFN4Q.js} +66 -66
- package/dist/{chunk-YNSE6WLW.cjs → chunk-Y3CRL3V4.cjs} +61 -61
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/wrappers/PhoneNumberElement/CountrySelector.d.ts.map +1 -1
- package/dist/wrappers/index.cjs +2 -2
- package/dist/wrappers/index.js +1 -1
- package/package.json +1 -1
|
@@ -2162,19 +2162,16 @@ var FileUploadElement = ({
|
|
|
2162
2162
|
FileUploadElement.displayName = "FileUploadElement";
|
|
2163
2163
|
|
|
2164
2164
|
// src/wrappers/PhoneNumberElement/PhoneNumberElement.tsx
|
|
2165
|
-
import { useState as useState5, useEffect as useEffect5, useRef as
|
|
2165
|
+
import { useState as useState5, useEffect as useEffect5, useRef as useRef4 } from "react";
|
|
2166
2166
|
import { TextField as TextField8, InputAdornment as InputAdornment3, Grid as Grid14 } from "@mui/material";
|
|
2167
2167
|
import { useController as useController14 } from "react-hook-form";
|
|
2168
2168
|
|
|
2169
2169
|
// src/wrappers/PhoneNumberElement/CountrySelector.tsx
|
|
2170
|
-
import { useState as useState4,
|
|
2170
|
+
import { useState as useState4, useMemo as useMemo9 } from "react";
|
|
2171
2171
|
import {
|
|
2172
2172
|
Button as Button2,
|
|
2173
2173
|
Popover,
|
|
2174
2174
|
TextField as TextField7,
|
|
2175
|
-
List,
|
|
2176
|
-
ListItemButton,
|
|
2177
|
-
ListItemText,
|
|
2178
2175
|
Divider,
|
|
2179
2176
|
Box as Box3,
|
|
2180
2177
|
InputAdornment as InputAdornment2,
|
|
@@ -2443,6 +2440,17 @@ function parseE164LocalNumber(value, dialCode) {
|
|
|
2443
2440
|
|
|
2444
2441
|
// src/wrappers/PhoneNumberElement/CountrySelector.tsx
|
|
2445
2442
|
import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2443
|
+
function CountryRow({
|
|
2444
|
+
country,
|
|
2445
|
+
selected,
|
|
2446
|
+
onSelect
|
|
2447
|
+
}) {
|
|
2448
|
+
return /* @__PURE__ */ jsxs8("button", { type: "button", className: selected ? "selected" : void 0, onClick: onSelect, children: [
|
|
2449
|
+
/* @__PURE__ */ jsx15("span", { className: "flag", children: country.flag }),
|
|
2450
|
+
/* @__PURE__ */ jsx15("span", { className: "name", children: country.name }),
|
|
2451
|
+
/* @__PURE__ */ jsx15("span", { className: "dial", children: country.dialCode })
|
|
2452
|
+
] });
|
|
2453
|
+
}
|
|
2446
2454
|
function CountrySelector({
|
|
2447
2455
|
value,
|
|
2448
2456
|
onChange,
|
|
@@ -2453,7 +2461,6 @@ function CountrySelector({
|
|
|
2453
2461
|
}) {
|
|
2454
2462
|
const [anchorEl, setAnchorEl] = useState4(null);
|
|
2455
2463
|
const [search, setSearch] = useState4("");
|
|
2456
|
-
const numberInputRef = useRef4(null);
|
|
2457
2464
|
const open = Boolean(anchorEl);
|
|
2458
2465
|
const handleOpen = (e) => {
|
|
2459
2466
|
e.preventDefault();
|
|
@@ -2544,64 +2551,57 @@ function CountrySelector({
|
|
|
2544
2551
|
}
|
|
2545
2552
|
}
|
|
2546
2553
|
) }),
|
|
2547
|
-
/* @__PURE__ */ jsxs8(
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
{
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
}
|
|
2571
|
-
|
|
2554
|
+
/* @__PURE__ */ jsxs8(
|
|
2555
|
+
Box3,
|
|
2556
|
+
{
|
|
2557
|
+
sx: {
|
|
2558
|
+
overflowY: "auto",
|
|
2559
|
+
flex: 1,
|
|
2560
|
+
"& button": {
|
|
2561
|
+
display: "flex",
|
|
2562
|
+
alignItems: "center",
|
|
2563
|
+
gap: 1,
|
|
2564
|
+
px: 2,
|
|
2565
|
+
py: "6px",
|
|
2566
|
+
width: "100%",
|
|
2567
|
+
border: "none",
|
|
2568
|
+
background: "transparent",
|
|
2569
|
+
cursor: "pointer",
|
|
2570
|
+
textAlign: "left",
|
|
2571
|
+
fontSize: "0.875rem",
|
|
2572
|
+
fontFamily: "inherit",
|
|
2573
|
+
color: "inherit",
|
|
2574
|
+
"&:hover": { backgroundColor: "action.hover" },
|
|
2575
|
+
"&.selected": { backgroundColor: "action.selected" },
|
|
2576
|
+
"& .flag": { fontSize: "1.1rem", lineHeight: 1, flexShrink: 0 },
|
|
2577
|
+
"& .name": { flex: 1, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" },
|
|
2578
|
+
"& .dial": { fontSize: "0.75rem", color: "text.secondary", flexShrink: 0 }
|
|
2579
|
+
}
|
|
2572
2580
|
},
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
rest.map((country) => /* @__PURE__ */ jsx15(
|
|
2577
|
-
ListItemButton,
|
|
2578
|
-
{
|
|
2579
|
-
selected: country.code === value.code,
|
|
2580
|
-
onClick: () => handleSelect(country),
|
|
2581
|
-
children: /* @__PURE__ */ jsx15(
|
|
2582
|
-
ListItemText,
|
|
2581
|
+
children: [
|
|
2582
|
+
preferred.map((country) => /* @__PURE__ */ jsx15(
|
|
2583
|
+
CountryRow,
|
|
2583
2584
|
{
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
)
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
] })
|
|
2585
|
+
country,
|
|
2586
|
+
selected: country.code === value.code,
|
|
2587
|
+
onSelect: () => handleSelect(country)
|
|
2588
|
+
},
|
|
2589
|
+
`preferred-${country.code}`
|
|
2590
|
+
)),
|
|
2591
|
+
showDivider && /* @__PURE__ */ jsx15(Divider, {}),
|
|
2592
|
+
rest.map((country) => /* @__PURE__ */ jsx15(
|
|
2593
|
+
CountryRow,
|
|
2594
|
+
{
|
|
2595
|
+
country,
|
|
2596
|
+
selected: country.code === value.code,
|
|
2597
|
+
onSelect: () => handleSelect(country)
|
|
2598
|
+
},
|
|
2599
|
+
country.code
|
|
2600
|
+
)),
|
|
2601
|
+
preferred.length === 0 && rest.length === 0 && /* @__PURE__ */ jsx15(Box3, { sx: { px: 2, py: 1, fontSize: "0.875rem", color: "text.secondary" }, children: "No countries found" })
|
|
2602
|
+
]
|
|
2603
|
+
}
|
|
2604
|
+
)
|
|
2605
2605
|
]
|
|
2606
2606
|
}
|
|
2607
2607
|
)
|
|
@@ -2637,7 +2637,7 @@ var Component13 = function PhoneNumberEl(props) {
|
|
|
2637
2637
|
() => findDefaultCountry(defaultCountry)
|
|
2638
2638
|
);
|
|
2639
2639
|
const [localNumber, setLocalNumber] = useState5("");
|
|
2640
|
-
const internalChangeRef =
|
|
2640
|
+
const internalChangeRef = useRef4(false);
|
|
2641
2641
|
useEffect5(() => {
|
|
2642
2642
|
if (internalChangeRef.current) {
|
|
2643
2643
|
internalChangeRef.current = false;
|
|
@@ -2735,7 +2735,7 @@ import {
|
|
|
2735
2735
|
useCallback as useCallback8,
|
|
2736
2736
|
useEffect as useEffect6,
|
|
2737
2737
|
useMemo as useMemo10,
|
|
2738
|
-
useRef as
|
|
2738
|
+
useRef as useRef5,
|
|
2739
2739
|
useState as useState6
|
|
2740
2740
|
} from "react";
|
|
2741
2741
|
import {
|
|
@@ -2770,7 +2770,7 @@ var Component14 = function AsyncSelectElement(props) {
|
|
|
2770
2770
|
const [inputValue, setInputValue] = useState6("");
|
|
2771
2771
|
const [options, setOptions] = useState6([]);
|
|
2772
2772
|
const [open, setOpen] = useState6(false);
|
|
2773
|
-
const loadedValueRef =
|
|
2773
|
+
const loadedValueRef = useRef5(
|
|
2774
2774
|
void 0
|
|
2775
2775
|
);
|
|
2776
2776
|
const fetchData = useMemo10(
|
|
@@ -3245,4 +3245,4 @@ export {
|
|
|
3245
3245
|
PhoneNumberElement,
|
|
3246
3246
|
Field
|
|
3247
3247
|
};
|
|
3248
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3dyYXBwZXJzL3R5cGVzL2NvbW1vbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvQ2hlY2tib3hFbGVtZW50L0NoZWNrYm94RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0NoZWNrYm94R3JvdXAvQ2hlY2tib3hHcm91cC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0RhdGVQaWNrZXJFbGVtZW50L0RhdGVQaWNrZXJFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvRGF0ZVBpY2tlckVsZW1lbnRDb3JlLnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclZhbHVlLnRzIiwgIi4uL3NyYy93cmFwcGVycy9EYXRlUGlja2VyRWxlbWVudC9ob29rcy91c2VEYXRlUGlja2VyVmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclN0eWxlcy50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvdXRpbHMudHMiLCAiLi4vc3JjL3dyYXBwZXJzL1Bhc3N3b3JkRWxlbWVudC9QYXNzd29yZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXAudHN4IiwgIi4uL3NyYy93cmFwcGVycy9TZWxlY3RDYXNjYWRlRWxlbWVudC9TZWxlY3RDYXNjYWRlRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdEVsZW1lbnQvU2VsZWN0RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdE11bHRpRWxlbWVudC9TZWxlY3RNdWx0aUVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UZXh0RmllbGRFbGVtZW50L1RleHRGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UaW1lUGlja2VyRWxlbWVudC9UaW1lUGlja2VyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NsaWRlckVsZW1lbnQvU2xpZGVyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0ZpbGVVcGxvYWRFbGVtZW50L0ZpbGVVcGxvYWRFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvUGhvbmVOdW1iZXJFbGVtZW50L1Bob25lTnVtYmVyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1Bob25lTnVtYmVyRWxlbWVudC9Db3VudHJ5U2VsZWN0b3IudHN4IiwgIi4uL3NyYy93cmFwcGVycy9QaG9uZU51bWJlckVsZW1lbnQvY291bnRyaWVzLnRzIiwgIi4uL3NyYy93cmFwcGVycy9Bc3luY1NlbGVjdC9pbmRleC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL051bWJlckZpZWxkRWxlbWVudC9OdW1iZXJGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9PVFBJbnB1dEVsZW1lbnQvT1RQSW5wdXRFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvT1RQSW5wdXRFbGVtZW50L0hlbHBlclRleHQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9GaWVsZC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb21tb24gdHlwZSBkZWZpbml0aW9ucyBmb3Igd3JhcHBlciBjb21wb25lbnRzXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuLyoqXG4gKiBCYXNlIG9wdGlvbiB0eXBlIGZvciBzZWxlY3QtYmFzZWQgY29tcG9uZW50c1xuICpcbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHZhbHVlIHR5cGUgKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPcHRpb248ViA9IHN0cmluZyB8IG51bWJlcj4ge1xuICAvKipcbiAgICogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvblxuICAgKi9cbiAgTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBvcHRpb25cbiAgICovXG4gIFZhbHVlOiBWO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGbGV4aWJsZSBvcHRpb24gdHlwZSB0aGF0IGV4dGVuZHMgYmFzZSBvcHRpb24gd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEFkZGl0aW9uYWwgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEZsZXhpYmxlT3B0aW9uPFxuICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSBUICYgQmFzZU9wdGlvbjtcblxuLyoqXG4gKiBPcHRpb24gdHlwZSB3aXRoIGN1c3RvbWl6YWJsZSBrZXkgbmFtZXNcbiAqIFVzZWZ1bCBmb3IgY29tcG9uZW50cyB0aGF0IGFjY2VwdCBjdXN0b20gbGFiZWxGaWVsZC92YWx1ZUZpZWxkIHByb3BzXG4gKlxuICogQHRlbXBsYXRlIFRWYWx1ZUtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciB2YWx1ZVxuICogQHRlbXBsYXRlIFRMYWJlbEtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciBsYWJlbFxuICogQHRlbXBsYXRlIFREaXNhYmxlZEtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciBkaXNhYmxlZCBmbGFnXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDdXN0b21LZXlPcHRpb248XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJlxuICBSZWNvcmQ8VExhYmVsS2V5LCBzdHJpbmc+ICZcbiAgUGFydGlhbDxSZWNvcmQ8VERpc2FibGVkS2V5LCBib29sZWFuPj4gJlxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBMZWdhY3kgb3B0aW9uIHR5cGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBjb2RlXG4gKiBVc2VzIFZhbHVlL0xhYmVsIG5hbWluZyBjb252ZW50aW9uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEJhc2VPcHRpb24gb3IgRmxleGlibGVPcHRpb24gaW5zdGVhZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeU9wdGlvbiB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uIChjYXBpdGFsaXplZCBrZXkgbmFtZSlcbiAgICovXG4gIExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uIChjYXBpdGFsaXplZCBrZXkgbmFtZSlcbiAgICovXG4gIFZhbHVlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgRGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgb3B0aW9uXG4gKlxuICogQHBhcmFtIFZhbHVlIC0gVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgb3B0aW9uIG9iamVjdFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRPcHRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCYXNlT3B0aW9uIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAnTGFiZWwnIGluIHZhbHVlICYmXG4gICAgJ1ZhbHVlJyBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuTGFiZWwgPT09ICdzdHJpbmcnICYmXG4gICAgKHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuVmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIEJhc2VPcHRpb24pLlZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKVxuICApO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBub3JtYWxpemUgb3B0aW9ucyB0byBCYXNlT3B0aW9uIGZvcm1hdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBhcnJheSB0byBub3JtYWxpemVcbiAqIEBwYXJhbSBsYWJlbEZpZWxkIC0gQ3VzdG9tIGxhYmVsIGZpZWxkIG5hbWUgaW4gb3B0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB2YWx1ZUZpZWxkIC0gQ3VzdG9tIHZhbHVlIGZpZWxkIG5hbWUgaW4gb3B0aW9uIG9iamVjdHNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb3B0aW9ucyBhcnJheVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb3B0aW9uczogVFtdLFxuICBsYWJlbEZpZWxkID0gJ0xhYmVsJyxcbiAgdmFsdWVGaWVsZCA9ICdWYWx1ZSdcbik6IEJhc2VPcHRpb25bXSB7XG4gIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICBMYWJlbDogU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSA/PyAnJyksXG4gICAgVmFsdWU6IG9wdGlvblt2YWx1ZUZpZWxkXSBhcyBzdHJpbmcgfCBudW1iZXIsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKSxcbiAgfSkpO1xufVxuIiwgImltcG9ydCB7XG4gIEF1dG9jb21wbGV0ZSxcbiAgQ2lyY3VsYXJQcm9ncmVzcyxcbiAgZGVib3VuY2UsXG4gIEdyaWQsXG4gIFRleHRGaWVsZCxcbiAgdXNlVGhlbWUsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IG1hdGNoIGZyb20gJ2F1dG9zdWdnZXN0LWhpZ2hsaWdodC9tYXRjaCc7XG5pbXBvcnQgcGFyc2UgZnJvbSAnYXV0b3N1Z2dlc3QtaGlnaGxpZ2h0L3BhcnNlJztcbmltcG9ydCBSZWFjdCwge1xuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VNZW1vLFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBGcmFnbWVudCxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBIVE1MQXR0cmlidXRlcywgU3ludGhldGljRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wcywgT3B0aW9uT2JqZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNNdWx0aVNlbGVjdFBheWxvYWQgfSBmcm9tICdAL3R5cGVzJztcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPihcbiAgcHJvcHM6IEFzeW5jTXVsdGlTZWxlY3RFbGVtZW50UHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVE9wdGlvblxuICA+XG4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgY29udHJvbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsYWJlbCxcbiAgICBxdWVyeUZuLFxuICAgIHZhcmlhbnQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcgYXMgVExhYmVsS2V5LFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnIGFzIFRWYWx1ZUtleSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxyZWFkb25seSBUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IGxvYWRlZFZhbHVlc1JlZiA9IHVzZVJlZjxUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZSA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaW5pdGlhbExvYWRDb21wbGV0ZVJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIC8vIFN0b3JlIHNlbGVjdGVkIG9wdGlvbnMgaW4gYSByZWYgc28gRWZmZWN0IDIgY2FuIGFjY2VzcyB3aXRob3V0IGRlcGVuZGVuY3lcbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zUmVmID0gdXNlUmVmPFRPcHRpb25bXT4oW10pO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbikgPT4gKG9wdGlvbiA/IFN0cmluZyhvcHRpb25bdmFsdWVGaWVsZF0pIDogJycpLFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbikgPT4gKG9wdGlvbiA/IFN0cmluZyhvcHRpb25bbGFiZWxGaWVsZF0pIDogJycpLFxuICAgIFtsYWJlbEZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGZldGNoRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGRlYm91bmNlKFxuICAgICAgICAoXG4gICAgICAgICAgcGF5bG9hZDogQXN5bmNNdWx0aVNlbGVjdFBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IChyZXN1bHRzPzogcmVhZG9ubHkgVE9wdGlvbltdKSA9PiB2b2lkXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Rm4ocGF5bG9hZCkudGhlbihjID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgYyAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KChjIGFzIHsgZGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLmRhdGEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGMgYXMgeyBkYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuZGF0YSBhcyByZWFkb25seSBUT3B0aW9uW11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGMgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgoYyBhcyB7IERhdGE6IHJlYWRvbmx5IFRPcHRpb25bXSB9KS5EYXRhKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChjIGFzIHsgRGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLkRhdGEgYXMgcmVhZG9ubHkgVE9wdGlvbltdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYWxsYmFjayhbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIDQwMFxuICAgICAgKSxcbiAgICBbcXVlcnlGbl1cbiAgKTtcblxuICAvLyBTeW5jIHJlZiB3aGVuZXZlciBzZWxlY3RlZE9wdGlvbnMgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRPcHRpb25zO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgLy8gRWZmZWN0IDE6IFN5bmMgd2l0aCBleHRlcm5hbCBmaWVsZC52YWx1ZSBjaGFuZ2VzIGZyb20gcmVhY3QtaG9vay1mb3JtIChJTklUSUFMIExPQUQgT05MWSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsdWVzID0gQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6IFtdO1xuXG4gICAgLy8gQ2hlY2sgaWYgaW5pdGlhbCBsb2FkIGlzIGNvbXBsZXRlIGFuZCBjdXJyZW50IGZvcm0gdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBsb2FkZWQgb25lcy5cbiAgICAvLyBJZiBzbywgbm8gbmVlZCB0byByZWZldGNoIGZvciBpbml0aWFsIHBvcHVsYXRpb24uXG4gICAgaWYgKFxuICAgICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ICYmXG4gICAgICBKU09OLnN0cmluZ2lmeShmb3JtVmFsdWVzKSA9PT0gSlNPTi5zdHJpbmdpZnkobG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGZvcm0gdmFsdWVzLCByZXNldCBhbmQgbWFyayBpbml0aWFsIGxvYWQgYXMgY29tcGxldGUuXG4gICAgaWYgKGZvcm1WYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgc2V0T3B0aW9ucyhbXSk7XG4gICAgICBsb2FkZWRWYWx1ZXNSZWYuY3VycmVudCA9IFtdO1xuICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ID0gdHJ1ZTsgLy8gTWFyayBhcyBjb21wbGV0ZSBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gZmV0Y2hcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgcHJvY2VlZCBpZiBmb3JtVmFsdWVzIGFyZSBwcmVzZW50IGFuZCB3ZSBoYXZlbid0IGNvbXBsZXRlZCB0aGUgaW5pdGlhbCBsb2FkIGZvciB0aGVzZSBzcGVjaWZpYyB2YWx1ZXNcbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAvLyBTZXQgbG9hZGVkVmFsdWVzUmVmIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmUtdHJpZ2dlcmluZyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gZm9ybVZhbHVlcztcbiAgICAvLyBNYXJrIGluaXRpYWwgbG9hZCBhcyBjb21wbGV0ZSBwcm9hY3RpdmVseSBiZWZvcmUgZmV0Y2hpbmcgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuICAgIGluaXRpYWxMb2FkQ29tcGxldGVSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICBmZXRjaERhdGEoeyBRdWVyeTogbnVsbCwgU2VsZWN0ZWRWYWx1ZTogZm9ybVZhbHVlcyB9LCByZXN1bHRzID0+IHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hlZE9wdGlvbnMgPSByZXN1bHRzIHx8IFtdO1xuXG4gICAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbLi4uZmV0Y2hlZE9wdGlvbnNdKTtcbiAgICAgICAgc2V0T3B0aW9ucyhmZXRjaGVkT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW2ZpZWxkLnZhbHVlLCBmZXRjaERhdGFdKTtcblxuICAvLyBFZmZlY3QgMjogSGFuZGxlIHVzZXIgc2VhcmNoIGlucHV0XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc2VhcmNoIGR1cmluZyBpbml0aWFsIHBvcHVsYXRpb25cbiAgICBpZiAoaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50IHx8ICFpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBpbnB1dCBpcyBlbXB0eSwganVzdCBzaG93IHRoZSBzZWxlY3RlZCBvcHRpb25zXG4gICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICAvLyBJZiBubyBvcHRpb25zIGFyZSBzZWxlY3RlZCwgY2xlYXIgdGhlIG9wdGlvbnMgdG8gZGlzcGxheSBcIm5vT3B0aW9uc1RleHRcIlxuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgc2hvdyB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuICAgICAgICBzZXRPcHRpb25zKHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50KTtcbiAgICAgIH1cblxuICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBmZXRjaCBpZiB0aGUgaW5wdXQgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICBmZXRjaERhdGEoeyBRdWVyeTogaW5wdXRWYWx1ZSwgU2VsZWN0ZWRWYWx1ZTogbnVsbCB9LCBzZWFyY2hSZXN1bHRzID0+IHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHNlYXJjaFJlc3VsdHMgfHwgW107XG4gICAgICAgIC8vIFVzZSByZWYgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9ucyB3aXRob3V0IGFkZGluZyB0byBkZXBlbmRlbmNpZXNcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkID0gc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgICBjdXJyZW50U2VsZWN0ZWQubWFwKG9wdCA9PiBnZXRPcHRpb25WYWx1ZShvcHQpKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb21iaW5lZCA9IFsuLi5jdXJyZW50U2VsZWN0ZWRdO1xuXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb25JZHMuaGFzKGdldE9wdGlvblZhbHVlKHJlc3VsdCkpKSB7XG4gICAgICAgICAgICBjb21iaW5lZC5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0T3B0aW9ucyhjb21iaW5lZCk7XG4gICAgICAgIGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZi5jdXJyZW50ID0gaW5wdXRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBDUklUSUNBTDogUmVtb3ZlZCBzZWxlY3RlZE9wdGlvbnMgZnJvbSBkZXBlbmRlbmNpZXMgLSB1c2UgcmVmIGluc3RlYWRcbiAgfSwgW2lucHV0VmFsdWUsIGZldGNoRGF0YSwgZ2V0T3B0aW9uVmFsdWVdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXzogU3ludGhldGljRXZlbnQsIG5ld1NlbGVjdGVkT3B0aW9uczogVE9wdGlvbltdKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG5ld1NlbGVjdGVkT3B0aW9ucyk7XG4gICAgY29uc3QgbmV3VmFsdWVzID0gbmV3U2VsZWN0ZWRPcHRpb25zLm1hcChjID0+IGNbdmFsdWVGaWVsZF0pO1xuXG4gICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBuZXdWYWx1ZXMpO1xuICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gbmV3VmFsdWVzIGFzIHVua25vd24gYXMgVE9wdGlvbltdO1xuICAgIHNldE9wdGlvbnMobmV3U2VsZWN0ZWRPcHRpb25zKTtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAvLyBDbGVhciBsYXN0IHNlYXJjaCB0ZXJtIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG4gIH07XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkaXNhYmxlZCA/PyBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICBtdWx0aXBsZVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWwpID0+XG4gICAgICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGdldE9wdGlvblZhbHVlKHZhbClcbiAgICAgIH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB2YWx1ZT17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zXG4gICAgICBmaWx0ZXJPcHRpb25zPXt4ID0+IHh9XG4gICAgICBub09wdGlvbnNUZXh0PVwiVHlwZSBTb21ldGhpbmcuLi5cIlxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHN4PXt7XG4gICAgICAgICcmLk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUlucHV0QmFzZS1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCxcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkIC5NdWlBdXRvY29tcGxldGUtcG9wdXBJbmRpY2F0b3InOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWRpc2FibGVkIC5NdWlPdXRsaW5lZElucHV0LW5vdGNoZWRPdXRsaW5lJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpRmlsbGVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgICAgb25JbnB1dENoYW5nZT17KF8sIG5ld0lucHV0VmFsdWUpID0+IHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSl9XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBJbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgIGVuZEFkb3JubWVudDogKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBjb2xvcj1cImluaGVyaXRcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICByZW5kZXJPcHRpb249eyhwcm9wcywgb3B0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgLi4ub3B0aW9uUHJvcHMgfSA9XG4gICAgICAgICAgcHJvcHMgYXMgSFRNTEF0dHJpYnV0ZXM8SFRNTExJRWxlbWVudD4gJiB7IGtleTogc3RyaW5nIH07XG4gICAgICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gZ2V0T3B0aW9uTGFiZWwob3B0aW9uKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IG1hdGNoKG9wdGlvbkxhYmVsLCBzdGF0ZS5pbnB1dFZhbHVlLCB7XG4gICAgICAgICAgaW5zaWRlV29yZHM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhcnNlKG9wdGlvbkxhYmVsLCBtYXRjaGVzKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2tleX0gey4uLm9wdGlvblByb3BzfT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHtwYXJ0cy5tYXAoKHBhcnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBwYXJ0LmhpZ2hsaWdodCA/IDcwMCA6IDQwMCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3BhcnQudGV4dH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPih7XG4gIGdyaWRQcm9wcyxcbiAgLi4ucHJvcHNcbn06IEFzeW5jTXVsdGlTZWxlY3RFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIFRWYWx1ZUtleSxcbiAgVExhYmVsS2V5LFxuICBUT3B0aW9uXG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgaWYgKGdyaWRQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICA8R3JpZFxuICAgICAgICB7Li4ueyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sIC4uLmdyaWRQcm9wcyB9fVxuICAgICAgPlxuICAgICAgICA8Q29tcG9uZW50PFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZUtleSwgVExhYmVsS2V5LCBUT3B0aW9uPlxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvR3JpZD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50PFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZUtleSwgVExhYmVsS2V5LCBUT3B0aW9uPiB7Li4ucHJvcHN9IC8+XG4gICk7XG59O1xuXG5Bc3luY1NlbGVjdE11bHRpRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdBc3luY1NlbGVjdE11bHRpJztcblxuZXhwb3J0IHsgQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQgfTtcbiIsICJpbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMsIFBhdGhWYWx1ZSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgdXNlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtJztcblxuaW1wb3J0IHR5cGUgeyBDaGVja2JveEVsZW1lbnRQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBDaGVja2JveEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IENoZWNrYm94RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgbGFiZWwsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBoZWxwZXJUZXh0LFxuICAgIHBhcnNlRXJyb3IsXG4gICAgdHJhbnNmb3JtLFxuICAgIGRpc2FibGVkLFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGRpc2FibGVkLFxuICB9KTtcblxuICBpZiAoZmllbGQudmFsdWUgPT0gbnVsbCB8fCBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICBmaWVsZC5vbkNoYW5nZShmYWxzZSk7XG4gIH1cblxuICBjb25zdCBjdXN0b21PdXRwdXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0/Lm91dHB1dDtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIGJvb2xlYW4+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IHZhbHVlID0+ICEhdmFsdWUsXG4gICAgICBvdXRwdXQ6XG4gICAgICAgIHR5cGVvZiBjdXN0b21PdXRwdXRUcmFuc2Zvcm0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IChldmVudE9yVmFsdWUsIF92YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAvLyBBZGFwdGVyOiBFeHRyYWN0IGV2ZW50IGFuZCBjaGVja2VkIGZyb20gdGhlIGNoZWNrYm94IG9uQ2hhbmdlIHNpZ25hdHVyZVxuICAgICAgICAgICAgICAvLyBDaGVja2JveEVsZW1lbnQgcGFzc2VzIChldmVudCwgY2hlY2tlZCksIGJ1dCB1c2VUcmFuc2Zvcm0gZXhwZWN0cyAoZXZlbnRPclZhbHVlLCB2YWx1ZSlcbiAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE9yVmFsdWUgYXMgUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD47XG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBfdmFsdWUgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjdXN0b21PdXRwdXRUcmFuc2Zvcm0oZXZlbnQsIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogKGV2ZW50T3JWYWx1ZSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlZmF1bHQ6IGV4dHJhY3QgY2hlY2tlZCBzdGF0ZSBmcm9tIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBfdmFsdWUgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjaGVja2VkIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PixcbiAgICBjaGVja2VkOiBib29sZWFuXG4gICkgPT4ge1xuICAgIG9uQ2hhbmdlKGV2ZW50LCBjaGVja2VkKTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXN0b21PbkNoYW5nZShldmVudCwgY2hlY2tlZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc3BsYXlFcnJvcjogUmVhY3ROb2RlID0gZXJyb3JcbiAgICA/IHR5cGVvZiBwYXJzZUVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHBhcnNlRXJyb3IoZXJyb3IpXG4gICAgICA6IGVycm9yLm1lc3NhZ2VcbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9IGRpc2FibGVkPXtkaXNhYmxlZH0+XG4gICAgICA8Rm9ybUdyb3VwIHJvdz5cbiAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICBsYWJlbD17bGFiZWwgfHwgJyd9XG4gICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICBjb2xvcj17cmVzdC5jb2xvciB8fCAncHJpbWFyeSd9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3ZhbHVlfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIHsoZGlzcGxheUVycm9yIHx8IGhlbHBlclRleHQpICYmIChcbiAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7ZGlzcGxheUVycm9yIHx8IGhlbHBlclRleHR9XG4gICAgICAgIDwvRm9ybUhlbHBlclRleHQ+XG4gICAgICApfVxuICAgIDwvRm9ybUNvbnRyb2w+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgQ2hlY2tib3ggY29tcG9uZW50IHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24gYW5kIGdyaWQgbGF5b3V0LlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBjaGVja2JveCBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHkgd2l0aCByZWFjdC1ob29rLWZvcm0sXG4gKiBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCB2YWx1ZSB0cmFuc2Zvcm1hdGlvbiwgYW5kIG9wdGlvbmFsIEdyaWQgd3JhcHBlciBmb3IgcmVzcG9uc2l2ZSBsYXlvdXRzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvbiB3aXRoIHVzZUNvbnRyb2xsZXJcbiAqIC0gQXV0b21hdGljIGVycm9yIGRpc3BsYXkgd2l0aCBjdXN0b20gcGFyc2luZyBzdXBwb3J0XG4gKiAtIFZhbHVlIHRyYW5zZm9ybWF0aW9uIHdpdGggdXNlVHJhbnNmb3JtIGhvb2sgZm9yIGJvb2xlYW4gdmFsdWVzXG4gKiAtIEN1c3RvbWl6YWJsZSBsYWJlbCBhbmQgcG9zaXRpb25pbmdcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlciB3aXRoIHJlc3BvbnNpdmUgZGVzaWduXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHkgd2l0aCBnZW5lcmljIGNvbnN0cmFpbnRzXG4gKiAtIERpc2FibGVkIHN0YXRlIHN1cHBvcnQgd2l0aCBwcm9wZXIgdGhlbWluZ1xuICogLSBIZWxwZXIgdGV4dCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIGNvbnRleHRcbiAqIC0gQ3VzdG9tIGVycm9yIHBhcnNpbmcgZm9yIGludGVybmF0aW9uYWxpemF0aW9uXG4gKiAtIFNpbXBsZSBib29sZWFuIHZhbHVlIGhhbmRsaW5nIHdpdGggb3B0aW9uYWwgY3VzdG9tIHRyYW5zZm9ybXNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFjY2VwdFRlcm1zXCJcbiAqICAgbGFiZWw9XCJJIGFncmVlIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9uc1wiXG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggdmFsaWRhdGlvbiBhbmQgaGVscGVyIHRleHQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cIm5ld3NsZXR0ZXJcIlxuICogICBsYWJlbD1cIlN1YnNjcmliZSB0byBuZXdzbGV0dGVyXCJcbiAqICAgaGVscGVyVGV4dD1cIllvdSBjYW4gdW5zdWJzY3JpYmUgYXQgYW55IHRpbWVcIlxuICogICBydWxlcz17eyByZXF1aXJlZDogJ1BsZWFzZSBhY2NlcHQgdG8gY29udGludWUnIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBncmlkIGxheW91dCBhbmQgc3R5bGluZzpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiaXNQdWJsaWNcIlxuICogICBsYWJlbD1cIk1ha2UgdGhpcyBwdWJsaWNcIlxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgbGFiZWxQcm9wcz17eyBzeDogeyBmb250V2VpZ2h0OiAnYm9sZCcgfSB9fVxuICogICBzeD17eyBjb2xvcjogJ3ByaW1hcnkubWFpbicgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCB2YWx1ZSB0cmFuc2Zvcm1hdGlvbiAoc3RyaW5nIHRvIGJvb2xlYW4pOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJzdGF0dXNcIlxuICogICBsYWJlbD1cIkFjdGl2ZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAodmFsdWUpID0+IHZhbHVlID09PSAnYWN0aXZlJyxcbiAqICAgICBvdXRwdXQ6IChjaGVja2VkKSA9PiBjaGVja2VkID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFNpbXBsZSBib29sZWFuIGZpZWxkOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJpc0VuYWJsZWRcIlxuICogICBsYWJlbD1cIkVuYWJsZSBmZWF0dXJlXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGVycm9yIHBhcnNpbmcgZm9yIGludGVybmF0aW9uYWxpemF0aW9uOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ0ZXJtc1wiXG4gKiAgIGxhYmVsPVwiQWNjZXB0IFRlcm1zXCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiB0KGB2YWxpZGF0aW9uLiR7ZXJyb3IudHlwZX1gLCB7IGZpZWxkOiAnVGVybXMnIH0pfVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgQ2hlY2tib3hFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBDaGVja2JveEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZT4gey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IENoZWNrYm94RWxlbWVudCB9O1xuXG5leHBvcnQgdHlwZSB7IENoZWNrYm94RWxlbWVudFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG4iLCAiaW1wb3J0IHR5cGUge1xuICBDaGVja2JveFByb3BzLFxuICBGb3JtQ29udHJvbExhYmVsUHJvcHMsXG4gIEZvcm1MYWJlbFByb3BzLFxuICBHcmlkUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgQ2hlY2tib3gsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbExhYmVsLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1IZWxwZXJUZXh0LFxuICBGb3JtTGFiZWwsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQ2hlY2tib3hHcm91cCBjb21wb25lbnRcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdmFsdWUgYXJyYXkgdHlwZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG4vLyBUeXBlIGZvciBwcmltaXRpdmUgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYXMgcmFkaW8gYnV0dG9uIHZhbHVlc1xudHlwZSBQcmltaXRpdmVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbi8vIENvbnN0cmFpbnQgdG8gZW5zdXJlIG9wdGlvbiBvYmplY3RzIGhhdmUgdGhlIHJlcXVpcmVkIGtleXNcbnR5cGUgT3B0aW9uT2JqZWN0PFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IFJlY29yZDxUVmFsdWVLZXksIFByaW1pdGl2ZVZhbHVlPiAmXG4gIFJlY29yZDxUTGFiZWxLZXksIHN0cmluZz4gJlxuICBQYXJ0aWFsPFJlY29yZDxURGlzYWJsZWRLZXksIGJvb2xlYW4+PjtcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hHcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4gPSBPbWl0PENoZWNrYm94UHJvcHMsICduYW1lJz4gJiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGUgY2hlY2tib3ggZ3JvdXBcbiAgICovXG4gIGxhYmVsPzogRm9ybUNvbnRyb2xMYWJlbFByb3BzWydsYWJlbCddO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciBGb3JtQ29udHJvbExhYmVsXG4gICAqL1xuICBsYWJlbFByb3BzPzogT21pdDxGb3JtQ29udHJvbExhYmVsUHJvcHMsICdsYWJlbCcgfCAnY29udHJvbCc+O1xuXG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXJcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG5cbiAgb3B0aW9uczogVE9wdGlvbltdO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGZvcm1MYWJlbFByb3BzPzogT21pdDxGb3JtTGFiZWxQcm9wcywgJ3JlcXVpcmVkJyB8ICdlcnJvcic+O1xuXG4gIGxhYmVsS2V5PzogVExhYmVsS2V5O1xuICB2YWx1ZUtleT86IFRWYWx1ZUtleTtcbiAgZGlzYWJsZWRLZXk/OiBURGlzYWJsZWRLZXk7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBDaGVja2JveEdyb3VwPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oXG4gIHByb3BzOiBDaGVja2JveEdyb3VwUHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRPcHRpb24sXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgbGFiZWwsXG4gICAgcmVxdWlyZWQsXG4gICAgZm9ybUxhYmVsUHJvcHMsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBsYWJlbEtleSA9ICdMYWJlbCcgYXMgVExhYmVsS2V5LFxuICAgIHZhbHVlS2V5ID0gJ1ZhbHVlJyBhcyBUVmFsdWVLZXksXG4gICAgb3B0aW9ucyxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGRpc2FibGVkOiByZXN0LmRpc2FibGVkLFxuICB9KTtcblxuICBjb25zdCBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nID0gKFxuICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBbXVxuICApLm1hcChTdHJpbmcpO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZWRWYWx1ZVN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuXG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFZhbHVlc1N0cmluZyA9IGlzQ2hlY2tlZFxuICAgICAgICA/IFsuLi5zZWxlY3RlZFZhbHVlc0FzU3RyaW5nLCBjaGFuZ2VkVmFsdWVTdHJpbmddXG4gICAgICAgIDogc2VsZWN0ZWRWYWx1ZXNBc1N0cmluZy5maWx0ZXIodiA9PiB2ICE9PSBjaGFuZ2VkVmFsdWVTdHJpbmcpO1xuXG4gICAgICBjb25zdCBvcHRpb25zQXJlTnVtZXJpYyA9XG4gICAgICAgIG9wdGlvbnMubGVuZ3RoID4gMCAmJiB0eXBlb2Ygb3B0aW9uc1swXVt2YWx1ZUtleV0gPT09ICdudW1iZXInO1xuXG4gICAgICBpZiAob3B0aW9uc0FyZU51bWVyaWMpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzQXNOdW1iZXJzID0gbmV3U2VsZWN0ZWRWYWx1ZXNTdHJpbmdcbiAgICAgICAgICAubWFwKHYgPT4gcGFyc2VJbnQodiwgMTApKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiAhaXNOYU4odikpO1xuXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlc0FzTnVtYmVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShuZXdTZWxlY3RlZFZhbHVlc1N0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZmllbGQsIG9wdGlvbnMsIHZhbHVlS2V5LCBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Db250cm9sIGVycm9yPXshIWVycm9yfT5cbiAgICAgIHtsYWJlbCAmJiAoXG4gICAgICAgIDxGb3JtTGFiZWwgey4uLmZvcm1MYWJlbFByb3BzfSByZXF1aXJlZD17cmVxdWlyZWR9IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvRm9ybUxhYmVsPlxuICAgICAgKX1cbiAgICAgIDxGb3JtR3JvdXAgcm93PlxuICAgICAgICB7b3B0aW9ucyAmJlxuICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e2Ake29wdGlvblt2YWx1ZUtleV19YH1cbiAgICAgICAgICAgICAgbGFiZWw9e29wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgIHsuLi5sYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgY29sb3I9e3Jlc3QuY29sb3IgfHwgJ3ByaW1hcnknfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e29wdGlvblt2YWx1ZUtleV19XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZFZhbHVlc0FzU3RyaW5nLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcob3B0aW9uW3ZhbHVlS2V5XSlcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgIDxGb3JtSGVscGVyVGV4dCBlcnJvcj17ISFlcnJvcn0+e2Vycm9yLm1lc3NhZ2V9PC9Gb3JtSGVscGVyVGV4dD5cbiAgICAgICl9XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbi8qKlxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBDaGVja2JveEdyb3VwIGNvbXBvbmVudCBmb3IgbXVsdGlwbGUgY2hlY2tib3ggc2VsZWN0aW9uLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZ3JvdXAgb2YgY2hlY2tib3hlcyB0aGF0IHdvcmsgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIG1hbmFnaW5nIGFuIGFycmF5IG9mIHNlbGVjdGVkIHZhbHVlcyB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cbiAqIC0gTXVsdGlwbGUgY2hlY2tib3ggc2VsZWN0aW9uIHdpdGggYXJyYXkgdmFsdWUgbWFuYWdlbWVudFxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydFxuICogLSBOYU4gdmFsaWRhdGlvbiBmb3IgbnVtZXJpYyB2YWx1ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEdyb3VwXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJzZWxlY3RlZENhdGVnb3JpZXNcIlxuICogICBvcHRpb25zPXtbXG4gKiAgICAgeyBWYWx1ZTogMSwgTGFiZWw6ICdDYXRlZ29yeSAxJyB9LFxuICogICAgIHsgVmFsdWU6IDIsIExhYmVsOiAnQ2F0ZWdvcnkgMicgfSxcbiAqICAgICB7IFZhbHVlOiAzLCBMYWJlbDogJ0NhdGVnb3J5IDMnIH0sXG4gKiAgIF19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGdyaWQgbGF5b3V0OlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hHcm91cFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicGVybWlzc2lvbnNcIlxuICogICBvcHRpb25zPXtwZXJtaXNzaW9uT3B0aW9uc31cbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgIGRpc2FibGVkPXshaGFzRWRpdFBlcm1pc3Npb259XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHZhbHVlIGFycmF5IHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IENoZWNrYm94R3JvdXBFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IENoZWNrYm94R3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVE9wdGlvbixcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFREaXNhYmxlZEtleVxuPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbkNoZWNrYm94R3JvdXBFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0NoZWNrYm94R3JvdXAnO1xuXG5leHBvcnQgeyBDaGVja2JveEdyb3VwRWxlbWVudCB9O1xuIiwgImltcG9ydCB7IEdyaWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHR5cGUge1xuICBQaWNrZXJWYWxpZERhdGUsXG59IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzXCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUge1xuICBGaWVsZFZhbHVlcyxcbiAgRmllbGRQYXRoLFxufSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbmltcG9ydCB7IERhdGVQaWNrZXJFbGVtZW50Q29yZSB9IGZyb20gXCIuL0RhdGVQaWNrZXJFbGVtZW50Q29yZVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlUGlja2VyRWxlbWVudFByb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBBIGZ1bGx5LWZlYXR1cmVkLCB0eXBlLXNhZmUgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IGZvciByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgY29tYmluZXMgdGhlIGNvcmUgZGF0ZSBwaWNrZXIgZnVuY3Rpb25hbGl0eSB3aXRoIG9wdGlvbmFsIEdyaWQgbGF5b3V0IHdyYXBwaW5nLFxuICogcHJvdmlkaW5nIGEgY29tcGxldGUgc29sdXRpb24gZm9yIGZvcm0tYmFzZWQgZGF0ZSBzZWxlY3Rpb24gd2l0aCBjb21wcmVoZW5zaXZlIFR5cGVTY3JpcHQgc3VwcG9ydC5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIFx1RDgzQ1x1REZBRiAqKlR5cGUgU2FmZXR5Kio6IEZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2UgZm9yIGZvcm0gZmllbGQgdHlwZXMgYW5kIGRhdGUgdmFsdWVzXG4gKiAtIFx1RDgzRFx1REQyNyAqKlJlYWN0IEhvb2sgRm9ybSBJbnRlZ3JhdGlvbioqOiBTZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHJlYWN0LWhvb2stZm9ybSB2YWxpZGF0aW9uXG4gKiAtIFx1RDgzQ1x1REZBOCAqKlRoZW1pbmcqKjogQXV0b21hdGljIGFkYXB0YXRpb24gdG8gTVVJIHRoZW1lIHdpdGggY3VzdG9taXphYmxlIHN0eWxlc1xuICogLSBcdTI2N0YgKipBY2Nlc3NpYmlsaXR5Kio6IFdDQUctY29tcGxpYW50IHdpdGggcHJvcGVyIEFSSUEgYXR0cmlidXRlcyBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvblxuICogLSBcdUQ4M0RcdURFODAgKipQZXJmb3JtYW5jZSoqOiBPcHRpbWl6ZWQgd2l0aCBtZW1vaXphdGlvbiBhbmQgZWZmaWNpZW50IHJlLXJlbmRlcmluZ1xuICogLSBcdUQ4M0RcdURDRjEgKipSZXNwb25zaXZlKio6IEJ1aWx0LWluIEdyaWQgbGF5b3V0IHdpdGggY29uZmlndXJhYmxlIGJyZWFrcG9pbnRzXG4gKiAtIFx1RDgzRFx1REVFMVx1RkUwRiAqKlZhbGlkYXRpb24qKjogQ29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1lc3NhZ2VzXG4gKiAtIFx1RDgzRFx1REQwNCAqKlRyYW5zZm9ybWF0aW9uKio6IEZsZXhpYmxlIHZhbHVlIHRyYW5zZm9ybWF0aW9uIGJldHdlZW4gZm9ybSBhbmQgcGlja2VyIGZvcm1hdHNcbiAqIC0gXHVEODNEXHVEQ0RBICoqRGV2ZWxvcGVyIEV4cGVyaWVuY2UqKjogUmljaCBUeXBlU2NyaXB0IEludGVsbGlTZW5zZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIEdyaWQgd3JhcHBlcjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG4gKiBpbXBvcnQgeyBEYXRlUGlja2VyRWxlbWVudCB9IGZyb20gJ0BnbndlYnNvZnQvdWkvd3JhcHBlcnMnO1xuICpcbiAqIGZ1bmN0aW9uIE15Rm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgYmlydGhEYXRlOiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPERhdGVQaWNrZXJFbGVtZW50XG4gKiAgICAgICBuYW1lPVwiYmlydGhEYXRlXCJcbiAqICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgICAgICBsYWJlbD1cIkRhdGUgb2YgQmlydGhcIlxuICogICAgICAgcmVxdWlyZWRcbiAqICAgICAvPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEFkdmFuY2VkIHVzYWdlIHdpdGggY3VzdG9tIHRyYW5zZm9ybWF0aW9uIGFuZCB2YWxpZGF0aW9uOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBZHZhbmNlZEZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybTx7IHN0YXJ0RGF0ZTogRGF0ZSB9PigpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJzdGFydERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiUHJvamVjdCBTdGFydCBEYXRlXCJcbiAqICAgICAgIHRyYW5zZm9ybT17e1xuICogICAgICAgICBpbnB1dDogKGRhdGVTdHJpbmcpID0+IGRhdGVTdHJpbmcgPyBuZXcgRGF0ZShkYXRlU3RyaW5nKSA6IG51bGwsXG4gKiAgICAgICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgICAgICB9fVxuICogICAgICAgdmFsaWRhdGlvbj17e1xuICogICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICogICAgICAgICBtYXhEYXRlOiBhZGRZZWFycyhuZXcgRGF0ZSgpLCAyKSxcbiAqICAgICAgICAgZXJyb3JNZXNzYWdlczoge1xuICogICAgICAgICAgIG1pbkRhdGU6ICdTdGFydCBkYXRlIG11c3QgYmUgdG9kYXkgb3IgbGF0ZXInLFxuICogICAgICAgICAgIG1heERhdGU6ICdTdGFydCBkYXRlIGNhbm5vdCBiZSBtb3JlIHRoYW4gMiB5ZWFycyBpbiB0aGUgZnV0dXJlJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9fVxuICogICAgICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgICAgICBzeD17e1xuICogICAgICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290Jzoge1xuICogICAgICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9fVxuICogICAgIC8+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aG91dCBHcmlkIHdyYXBwZXIgZm9yIGN1c3RvbSBsYXlvdXRzOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBDdXN0b21MYXlvdXQoKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybTx7IGV2ZW50RGF0ZTogc3RyaW5nIH0+KCk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxCb3ggZGlzcGxheT1cImZsZXhcIiBnYXA9ezJ9PlxuICogICAgICAgPERhdGVQaWNrZXJFbGVtZW50XG4gKiAgICAgICAgIG5hbWU9XCJldmVudERhdGVcIlxuICogICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgICBsYWJlbD1cIkV2ZW50IERhdGVcIlxuICogICAgICAgICBncmlkUHJvcHM9e2ZhbHNlfSAvLyBEaXNhYmxlcyBHcmlkIHdyYXBwZXJcbiAqICAgICAgIC8+XG4gKiAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5TdWJtaXQ8L0J1dHRvbj5cbiAqICAgICA8L0JveD5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGxvYWRpbmcgc3RhdGUgYW5kIGN1c3RvbSBlcnJvciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gTG9hZGluZ0Zvcm0oKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybSgpO1xuICogICBjb25zdCBbaXNWYWxpZGF0aW5nLCBzZXRJc1ZhbGlkYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJhcHBvaW50bWVudERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiQXBwb2ludG1lbnQgRGF0ZVwiXG4gKiAgICAgICBsb2FkaW5nPXtpc1ZhbGlkYXRpbmd9XG4gKiAgICAgICBMb2FkaW5nQ29tcG9uZW50PXsoKSA9PiA8Q2lyY3VsYXJQcm9ncmVzcyBzaXplPXsyMH0gLz59XG4gKiAgICAgICBwYXJzZUVycm9yPXsoZXJyb3IpID0+IHtcbiAqICAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3I/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gKiAgICAgICAgICAgcmV0dXJuICdUaGlzIGRhdGUgY29uZmxpY3RzIHdpdGggYW5vdGhlciBhcHBvaW50bWVudCc7XG4gKiAgICAgICAgIH1cbiAqICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ1BsZWFzZSBzZWxlY3QgYSB2YWxpZCBkYXRlJztcbiAqICAgICAgIH19XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZSAoaW5mZXJyZWQgZnJvbSBjb250cm9sKVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZSAoaW5mZXJyZWQgZnJvbSBuYW1lIHByb3ApXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGUgKGluZmVycmVkIGZyb20gdHJhbnNmb3JtIGZ1bmN0aW9ucylcbiAqIEB0ZW1wbGF0ZSBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIC0gV2hldGhlciBhY2Nlc3NpYmxlIGZpZWxkIERPTSBzdHJ1Y3R1cmUgaXMgZW5hYmxlZFxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wcyB3aXRoIGZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2VcbiAqIEBwYXJhbSByZWYgLSBGb3J3YXJkIHJlZiBmb3IgdGhlIHJvb3QgZWxlbWVudCAoR3JpZCBvciBEYXRlUGlja2VyIGNvbnRhaW5lcilcbiAqIEByZXR1cm5zIFJlbmRlcmVkIERhdGVQaWNrZXJFbGVtZW50IGNvbXBvbmVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICovXG5jb25zdCBEYXRlUGlja2VyRWxlbWVudCA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICBEYXRlUGlja2VyRWxlbWVudFByb3BzPGFueSwgYW55LCBhbnksIGFueT5cbj4oPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbiAgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbj4oXG4gIHByb3BzOiBEYXRlUGlja2VyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZSwgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gIHJlZjogUmVhY3QuUmVmPEhUTUxEaXZFbGVtZW50PlxuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBncmlkUHJvcHMgPSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9LFxuICAgIC4uLmNvcmVQcm9wc1xuICB9ID0gcHJvcHM7XG5cbiAgLy8gSWYgZ3JpZFByb3BzIGlzIGV4cGxpY2l0bHkgZmFsc2UsIHJlbmRlciB3aXRob3V0IEdyaWQgd3JhcHBlclxuICBpZiAoZ3JpZFByb3BzID09PSBmYWxzZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB7Li4uY29yZVByb3BzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgLy8gUmVuZGVyIHdpdGggR3JpZCB3cmFwcGVyIGZvciByZXNwb25zaXZlIGxheW91dFxuICByZXR1cm4gKFxuICAgIDxHcmlkXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHsuLi5ncmlkUHJvcHN9XG4gICAgPlxuICAgICAgPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICAgICAgICB7Li4uY29yZVByb3BzfVxuICAgICAgLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59KTtcblxuLy8gU2V0IGRpc3BsYXkgbmFtZSBmb3IgUmVhY3QgRGV2ZWxvcGVyIFRvb2xzXG5EYXRlUGlja2VyRWxlbWVudC5kaXNwbGF5TmFtZSA9IFwiRGF0ZVBpY2tlckVsZW1lbnRcIjtcblxuZXhwb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnQgfTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlckVsZW1lbnQ7XG4iLCAiaW1wb3J0IHsgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0BtdWkveC1kYXRlLXBpY2tlcnMnO1xuaW1wb3J0IHR5cGUge1xuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxuICBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dCxcbiAgUGlja2VyVmFsaWREYXRlLFxufSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFZhbHVlcywgRmllbGRQYXRoIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHtcbiAgdXNlRGF0ZVBpY2tlclZhbHVlLFxuICB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbixcbiAgdXNlRGF0ZVBpY2tlclN0eWxlcyxcbn0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGNvcmUgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IHdpdGhvdXQgR3JpZCB3cmFwcGVyLlxuICpcbiAqIFRoaXMgaXMgYSBsaWdodHdlaWdodCwgcGVyZm9ybWFudCBkYXRlIHBpY2tlciBjb21wb25lbnQgdGhhdCBpbnRlZ3JhdGVzIHNlYW1sZXNzbHlcbiAqIHdpdGggcmVhY3QtaG9vay1mb3JtIHdoaWxlIHByb3ZpZGluZyBjb21wcmVoZW5zaXZlIFR5cGVTY3JpcHQgc3VwcG9ydCBhbmRcbiAqIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2UgZm9yIGZvcm0gZmllbGQgdHlwZXNcbiAqIC0gQXV0b21hdGljIHZhbHVlIHRyYW5zZm9ybWF0aW9uIGJldHdlZW4gZm9ybSBhbmQgcGlja2VyIGZvcm1hdHNcbiAqIC0gQ29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1lc3NhZ2VzXG4gKiAtIFRoZW1lLWF3YXJlIHN0eWxpbmcgd2l0aCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnRcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemVkIHdpdGggcHJvcGVyIG1lbW9pemF0aW9uXG4gKiAtIEZvcndhcmQgcmVmIHN1cHBvcnQgZm9yIGFkdmFuY2VkIHVzZSBjYXNlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICogICBuYW1lPVwiYmlydGhEYXRlXCJcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbGFiZWw9XCJEYXRlIG9mIEJpcnRoXCJcbiAqICAgcmVxdWlyZWRcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gdHJhbnNmb3JtYXRpb246XG4gKiBgYGB0c3hcbiAqIDxEYXRlUGlja2VyRWxlbWVudENvcmVcbiAqICAgbmFtZT1cInN0YXJ0RGF0ZVwiXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIGxhYmVsPVwiU3RhcnQgRGF0ZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICBvdXRwdXQ6IChkYXRlKSA9PiBkYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogbnVsbFxuICogICB9fVxuICogICB2YWxpZGF0aW9uPXt7XG4gKiAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAqICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICBtaW5EYXRlOiAnU3RhcnQgZGF0ZSBtdXN0IGJlIHRvZGF5IG9yIGxhdGVyJ1xuICogICAgIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICogQHRlbXBsYXRlIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgLSBXaGV0aGVyIGFjY2Vzc2libGUgZmllbGQgRE9NIHN0cnVjdHVyZSBpcyBlbmFibGVkXG4gKi9cbmNvbnN0IERhdGVQaWNrZXJFbGVtZW50Q29yZSA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICBEYXRlUGlja2VyRWxlbWVudENvcmVQcm9wczxhbnksIGFueSwgYW55LCBhbnk+XG4+KFxuICA8XG4gICAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gICAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICAgIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsXG4gID4oXG4gICAgcHJvcHM6IERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzPFxuICAgICAgVEZpZWxkVmFsdWVzLFxuICAgICAgVE5hbWUsXG4gICAgICBUVmFsdWUsXG4gICAgICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlXG4gICAgPixcbiAgICByZWY6IFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICBjb250cm9sLFxuICAgICAgcGFyc2VFcnJvcixcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHZhbGlkYXRpb24sXG4gICAgICBsYWJlbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgdGV4dFJlYWRPbmx5ID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaW5wdXRQcm9wcyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBkYXRlUGlja2VyUHJvcHMgPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnLFxuICAgICAgbG9hZGluZyA9IGZhbHNlLFxuICAgICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgRGF0ZVBpY2tlci1zcGVjaWZpYyBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW5wdXRSZWY6IGV4dGVybmFsSW5wdXRSZWYsXG4gICAgICBvbkNsb3NlLFxuICAgICAgLi4ucmVzdERhdGVQaWNrZXJQcm9wc1xuICAgIH0gPSBkYXRlUGlja2VyUHJvcHM7XG5cbiAgICAvLyBTZXQgdXAgZm9ybSBjb250cm9sbGVyXG4gICAgY29uc3QgeyBmaWVsZCwgZmllbGRTdGF0ZSB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgICBuYW1lLFxuICAgICAgY29udHJvbCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCBhcyBhbnksIC8vIExldCByZWFjdC1ob29rLWZvcm0gaGFuZGxlIHRoZSBkZWZhdWx0IHZhbHVlIHR5cGluZ1xuICAgIH0pO1xuXG4gICAgLy8gVmFsdWUgdHJhbnNmb3JtYXRpb24gaG9va1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlOiBvblZhbHVlQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICAgICAgZmllbGQsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGhvb2tcbiAgICBjb25zdCB7IGhhc0Vycm9yLCBlcnJvck1lc3NhZ2UsIGludmFsaWQgfSA9IHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uKHtcbiAgICAgIGZpZWxkU3RhdGUsXG4gICAgICB2YWxpZGF0aW9uLFxuICAgICAgcGFyc2VFcnJvcixcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gU3R5bGluZyBob29rXG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBoYXNFcnJvcixcbiAgICAgIGxvYWRpbmcsXG4gICAgICB0ZXh0UmVhZE9ubHksXG4gICAgfSk7XG5cbiAgICAvLyBNZXJnZSBpbnB1dCByZWZzXG4gICAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgZXh0ZXJuYWxJbnB1dFJlZik7XG5cbiAgICAvLyBNZW1vaXplZCBjaGFuZ2UgaGFuZGxlciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChcbiAgICAgICAgbmV3VmFsdWU6IFRWYWx1ZSB8IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0PERhdGVWYWxpZGF0aW9uRXJyb3I+XG4gICAgICApID0+IHtcbiAgICAgICAgb25WYWx1ZUNoYW5nZShuZXdWYWx1ZSwgY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgW29uVmFsdWVDaGFuZ2VdXG4gICAgKTtcblxuICAgIC8vIE1lbW9pemVkIGNsb3NlIGhhbmRsZXJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Tm9uTnVsbGFibGU8dHlwZW9mIG9uQ2xvc2U+PikgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyIGZvcm0gZmllbGQgYmx1ciBmb3IgdmFsaWRhdGlvblxuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcblxuICAgICAgICAvLyBDYWxsIGV4dGVybmFsIG9uQ2xvc2UgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgICBvbkNsb3NlKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgICAgW2ZpZWxkLm9uQmx1ciwgb25DbG9zZV1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgYmx1ciBoYW5kbGVyIGZvciB0ZXh0IGZpZWxkXG4gICAgY29uc3QgaGFuZGxlVGV4dEZpZWxkQmx1ciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuXG4gICAgICAgIC8vIENhbGwgZXh0ZXJuYWwgb25CbHVyIGlmIHByb3ZpZGVkXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRQcm9wcy5vbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpbnB1dFByb3BzLm9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICBbZmllbGQub25CbHVyLCBpbnB1dFByb3BzLm9uQmx1cl1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgc2xvdCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICBjb25zdCBtZW1vaXplZFNsb3RQcm9wcyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoe1xuICAgICAgICAuLi5zbG90UHJvcHMsXG4gICAgICAgIGFjdGlvbkJhcjoge1xuICAgICAgICAgIGFjdGlvbnM6IFsnY2xlYXInLCAndG9kYXknLCAnY2FuY2VsJywgJ2FjY2VwdCddIGFzIEFycmF5PFxuICAgICAgICAgICAgJ2FjY2VwdCcgfCAnY2FuY2VsJyB8ICdjbGVhcicgfCAnbmV4dCcgfCAnbmV4dE9yQWNjZXB0JyB8ICd0b2RheSdcbiAgICAgICAgICA+LFxuICAgICAgICAgIC4uLnNsb3RQcm9wcy5hY3Rpb25CYXIsXG4gICAgICAgIH0sXG4gICAgICAgIHRleHRGaWVsZDoge1xuICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgZnVsbFdpZHRoOiB0cnVlLFxuICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVUZXh0RmllbGRCbHVyLFxuICAgICAgICAgIGVycm9yOiBoYXNFcnJvcixcbiAgICAgICAgICBoZWxwZXJUZXh0OiBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IGhlbHBlclRleHQsXG4gICAgICAgICAgaW5wdXRQcm9wczoge1xuICAgICAgICAgICAgcmVhZE9ubHk6IHRleHRSZWFkT25seSxcbiAgICAgICAgICAgICdhcmlhLWludmFsaWQnOiBpbnZhbGlkLFxuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBoYXNFcnJvciA/IGAke25hbWV9LWVycm9yYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC4uLmlucHV0UHJvcHMuaW5wdXRQcm9wcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIEFkZCBsb2FkaW5nIGluZGljYXRvciBpZiBwcm92aWRlZFxuICAgICAgICAgIC4uLihsb2FkaW5nICYmXG4gICAgICAgICAgICBMb2FkaW5nQ29tcG9uZW50ICYmIHtcbiAgICAgICAgICAgICAgSW5wdXRQcm9wczoge1xuICAgICAgICAgICAgICAgIGVuZEFkb3JubWVudDogPExvYWRpbmdDb21wb25lbnQgLz4sXG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgLi4uc2xvdFByb3BzLnRleHRGaWVsZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgW1xuICAgICAgICBzbG90UHJvcHMsXG4gICAgICAgIGlucHV0UHJvcHMsXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgaGFuZGxlVGV4dEZpZWxkQmx1cixcbiAgICAgICAgaGFzRXJyb3IsXG4gICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgaGVscGVyVGV4dCxcbiAgICAgICAgdGV4dFJlYWRPbmx5LFxuICAgICAgICBpbnZhbGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgLy8gU3ByZWFkIHJlc3QgcHJvcHMgZmlyc3Qgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlblxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICB7Li4ucmVzdERhdGVQaWNrZXJQcm9wc31cbiAgICAgICAgLy8gQ29yZSBwcm9wc1xuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgICAvLyBVSSBwcm9wc1xuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIC8vIFNsb3QgcHJvcHNcbiAgICAgICAgc2xvdFByb3BzPXttZW1vaXplZFNsb3RQcm9wc31cbiAgICAgICAgLy8gQWNjZXNzaWJpbGl0eSBwcm9wc1xuICAgICAgICBhcmlhLWludmFsaWQ9e2ludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e2hhc0Vycm9yID8gYCR7bmFtZX0tZXJyb3JgIDogdW5kZWZpbmVkfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4pO1xuXG4vLyBTZXQgZGlzcGxheSBuYW1lIGZvciBkZWJ1Z2dpbmdcbkRhdGVQaWNrZXJFbGVtZW50Q29yZS5kaXNwbGF5TmFtZSA9ICdEYXRlUGlja2VyRWxlbWVudENvcmUnO1xuXG5leHBvcnQgeyBEYXRlUGlja2VyRWxlbWVudENvcmUgfTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlckVsZW1lbnRDb3JlO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgUGlja2VyVmFsaWREYXRlLFxuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxuICBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB7IHVzZUxvY2FsaXphdGlvbkNvbnRleHQgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vycy9pbnRlcm5hbHNcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG4gIFBhdGhWYWx1ZSxcbiAgVXNlQ29udHJvbGxlclJldHVybixcbn0gZnJvbSBcInJlYWN0LWhvb2stZm9ybVwiO1xuXG5pbXBvcnQgdHlwZSB7IERhdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBUeXBlLXNhZmUgZGF0ZSB2YWx1ZSByZWFkZXIgdGhhdCBoYW5kbGVzIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb25cbiAqIEB0ZW1wbGF0ZSBURGF0ZSAtIFRoZSBkYXRlIHR5cGUgZnJvbSB0aGUgZGF0ZSBhZGFwdGVyXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBsb2NhbGl6YXRpb24gY29udGV4dCBmcm9tIE1VSSBkYXRlIHBpY2tlcnNcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0IChzdHJpbmcsIGRhdGUsIG9yIG51bGwpXG4gKiBAcmV0dXJucyBQcm9wZXJseSB0eXBlZCBkYXRlIHZhbHVlIG9yIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWREYXRlUGlja2VyVmFsdWVBc0RhdGU8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGU+KFxuICBhZGFwdGVyOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VMb2NhbGl6YXRpb25Db250ZXh0PixcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwgfCBURGF0ZSB8IHVuZGVmaW5lZFxuKTogVERhdGUgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgYWRhcHRlciB0byBwYXJzZSB0aGUgc3RyaW5nIGludG8gYSBkYXRlXG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IGFkYXB0ZXIudXRpbHMuZGF0ZSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gcGFyc2VkRGF0ZSBhcyBURGF0ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbHVlIGhvb2tcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbHVlT3B0aW9uczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+IHtcbiAgLyoqIFRoZSBmaWVsZCBjb250cm9sbGVyIGZyb20gcmVhY3QtaG9vay1mb3JtICovXG4gIGZpZWxkOiBVc2VDb250cm9sbGVyUmV0dXJuPFRGaWVsZFZhbHVlcywgVE5hbWU+W1wiZmllbGRcIl07XG4gIC8qKiBPcHRpb25hbCB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgKi9cbiAgdHJhbnNmb3JtPzogRGF0ZVRyYW5zZm9ybTxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+O1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbHVlIGhvb2tcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWx1ZVJldHVybjxUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGU+IHtcbiAgLyoqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBmb3IgZGlzcGxheSBpbiB0aGUgcGlja2VyICovXG4gIHZhbHVlOiBUVmFsdWUgfCBudWxsO1xuICAvKiogQ2hhbmdlIGhhbmRsZXIgZm9yIHBpY2tlciB2YWx1ZSB1cGRhdGVzICovXG4gIG9uQ2hhbmdlOiAoXG4gICAgdmFsdWU6IFRWYWx1ZSB8IG51bGwsXG4gICAgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj5cbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIGRhdGUgcGlja2VyIHZhbHVlIHRyYW5zZm9ybWF0aW9ucyB3aXRoIHR5cGUgc2FmZXR5XG4gKiBcbiAqIFRoaXMgaG9vayBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gZm9ybSBmaWVsZCB2YWx1ZXMgYW5kIGRhdGUgcGlja2VyIHZhbHVlcyxcbiAqIGFwcGx5aW5nIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbnMgd2hpbGUgbWFpbnRhaW5pbmcgc3RyaWN0IFR5cGVTY3JpcHQgdHlwaW5nLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBzdHJpbmcgdG8gZGF0ZSBjb252ZXJzaW9uOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlRGF0ZVBpY2tlclZhbHVlKHtcbiAqICAgZmllbGQsXG4gKiAgIHRyYW5zZm9ybToge1xuICogICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICBvdXRwdXQ6IChkYXRlKSA9PiBkYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogbnVsbFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogVXNhZ2Ugd2l0aCBEYXkuanMgZGF0ZXM6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICogICBmaWVsZCxcbiAqICAgdHJhbnNmb3JtOiB7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gZGF5anMoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogbnVsbFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhbHVlIHRyYW5zZm9ybWF0aW9uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0cmFuc2Zvcm1lZCB2YWx1ZSBhbmQgY2hhbmdlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURhdGVQaWNrZXJWYWx1ZTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KFxuICBvcHRpb25zOiBVc2VEYXRlUGlja2VyVmFsdWVPcHRpb25zPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT5cbik6IFVzZURhdGVQaWNrZXJWYWx1ZVJldHVybjxUVmFsdWU+IHtcbiAgY29uc3QgeyBmaWVsZCwgdHJhbnNmb3JtIH0gPSBvcHRpb25zO1xuICBjb25zdCBhZGFwdGVyID0gdXNlTG9jYWxpemF0aW9uQ29udGV4dCgpO1xuXG4gIC8vIFRyYW5zZm9ybSB0aGUgZmllbGQgdmFsdWUgZm9yIGRpc3BsYXkgaW4gdGhlIHBpY2tlclxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCk6IFRWYWx1ZSB8IG51bGwgPT4ge1xuICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtPy5pbnB1dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtLmlucHV0KGZpZWxkLnZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVmYXVsdCB0cmFuc2Zvcm1hdGlvbjogaGFuZGxlIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb25cbiAgICByZXR1cm4gcmVhZERhdGVQaWNrZXJWYWx1ZUFzRGF0ZShhZGFwdGVyLCBmaWVsZC52YWx1ZSkgYXMgVFZhbHVlIHwgbnVsbDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtmaWVsZC52YWx1ZSwgdHJhbnNmb3JtPy5pbnB1dCwgYWRhcHRlcl0pO1xuXG4gIC8vIENyZWF0ZSBhIHN0YWJsZSBjaGFuZ2UgaGFuZGxlclxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdWYWx1ZTogVFZhbHVlIHwgbnVsbCwgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj4pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtPy5vdXRwdXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdHJhbnNmb3JtLm91dHB1dChuZXdWYWx1ZSwgY29udGV4dCk7XG5cbiAgICAgICAgZmllbGQub25DaGFuZ2UodHJhbnNmb3JtZWRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IHRyYW5zZm9ybWF0aW9uOiBzdG9yZSB0aGUgZGF0ZSBhcy1pc1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtmaWVsZC5vbkNoYW5nZSwgdHJhbnNmb3JtPy5vdXRwdXRdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICBvbkNoYW5nZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclZhbHVlOyIsICJpbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbiAgRGF0ZVZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG4gIFVzZUNvbnRyb2xsZXJSZXR1cm4sXG59IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRlUGlja2VyVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbiBob29rXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uT3B0aW9uczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+IHtcbiAgLyoqIFRoZSBmaWVsZCBzdGF0ZSBmcm9tIHJlYWN0LWhvb2stZm9ybSBjb250cm9sbGVyICovXG4gIGZpZWxkU3RhdGU6IFVzZUNvbnRyb2xsZXJSZXR1cm48VEZpZWxkVmFsdWVzLCBUTmFtZT5bXCJmaWVsZFN0YXRlXCJdO1xuICAvKiogVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgZGF0ZSBwaWNrZXIgKi9cbiAgdmFsaWRhdGlvbj86IERhdGVQaWNrZXJWYWxpZGF0aW9uQ29uZmlnPFRWYWx1ZT47XG4gIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXIgKi9cbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvciB8IERhdGVWYWxpZGF0aW9uRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqIFRoZSBjdXJyZW50IGRhdGUgdmFsdWUgZm9yIHZhbGlkYXRpb24gKi9cbiAgdmFsdWU/OiBUVmFsdWUgfCBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24gaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uUmV0dXJuIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGhhcyBhbnkgdmFsaWRhdGlvbiBlcnJvcnMgKi9cbiAgaGFzRXJyb3I6IGJvb2xlYW47XG4gIC8qKiBUaGUgY3VycmVudCB2YWxpZGF0aW9uIGVycm9yIChmb3JtIG9yIGRhdGUtc3BlY2lmaWMpICovXG4gIGVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqIEZvcm1hdHRlZCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZTogUmVhY3ROb2RlO1xuICAvKiogV2hldGhlciB0aGUgZmllbGQgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSAqL1xuICBpbnZhbGlkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZXJyb3IgbWVzc2FnZXMgZm9yIGNvbW1vbiBkYXRlIHZhbGlkYXRpb24gc2NlbmFyaW9zXG4gKi9cbmNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVMgPSB7XG4gIGludmFsaWREYXRlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGVcIixcbiAgbWluRGF0ZTogXCJEYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlXCIsXG4gIG1heERhdGU6IFwiRGF0ZSBtdXN0IGJlIGJlZm9yZSB0aGUgbWF4aW11bSBhbGxvd2VkIGRhdGVcIixcbiAgZGlzYWJsZWREYXRlOiBcIlRoaXMgZGF0ZSBpcyBub3QgYWxsb3dlZFwiLFxuICByZXF1aXJlZDogXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIGRhdGUgcGlja2VyIHZhbGlkYXRpb24gd2l0aCBjb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nXG4gKiBcbiAqIFRoaXMgaG9vayBjZW50cmFsaXplcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciBkYXRlIHBpY2tlcnMsIGhhbmRsaW5nIGJvdGhcbiAqIHJlYWN0LWhvb2stZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBhbmQgZGF0ZS1zcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9yc1xuICogZnJvbSBNVUkgZGF0ZSBwaWNrZXJzLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBmb3JtIHZhbGlkYXRpb246XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgaGFzRXJyb3IsIGVycm9yTWVzc2FnZSwgaW52YWxpZCB9ID0gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24oe1xuICogICBmaWVsZFN0YXRlLFxuICogICB2YWxpZGF0aW9uOiB7XG4gKiAgICAgbWluRGF0ZTogZGF5anMoKS5zdWJ0cmFjdCgxLCAneWVhcicpLFxuICogICAgIG1heERhdGU6IGRheWpzKCkuYWRkKDEsICd5ZWFyJyksXG4gKiAgICAgZXJyb3JNZXNzYWdlczoge1xuICogICAgICAgbWluRGF0ZTogJ0RhdGUgbXVzdCBiZSB3aXRoaW4gdGhlIGxhc3QgeWVhcicsXG4gKiAgICAgICBtYXhEYXRlOiAnRGF0ZSBjYW5ub3QgYmUgbW9yZSB0aGFuIDEgeWVhciBpbiB0aGUgZnV0dXJlJ1xuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQGV4YW1wbGVcbiAqIFVzYWdlIHdpdGggY3VzdG9tIGVycm9yIHBhcnNlcjpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBoYXNFcnJvciwgZXJyb3JNZXNzYWdlIH0gPSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbih7XG4gKiAgIGZpZWxkU3RhdGUsXG4gKiAgIHBhcnNlRXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gKiAgICAgICByZXR1cm4gYERhdGUgRXJyb3I6ICR7ZXJyb3J9YDtcbiAqICAgICB9XG4gKiAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ0ludmFsaWQgZGF0ZSc7XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFZhbGlkYXRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBWYWxpZGF0aW9uIHN0YXRlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb248XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihcbiAgb3B0aW9uczogVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25PcHRpb25zPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT5cbik6IFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uUmV0dXJuIHtcbiAgY29uc3QgeyBmaWVsZFN0YXRlLCB2YWxpZGF0aW9uLCBwYXJzZUVycm9yLCB2YWx1ZSB9ID0gb3B0aW9ucztcblxuICAvLyBNZW1vaXplIHZhbGlkYXRpb24gcmVzdWx0cyBmb3IgcGVyZm9ybWFuY2VcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHsgZXJyb3I6IGZpZWxkRXJyb3IsIGludmFsaWQgfSA9IGZpZWxkU3RhdGU7XG4gICAgXG4gICAgLy8gU3RhcnQgd2l0aCBmb3JtIHZhbGlkYXRpb24gZXJyb3JcbiAgICBsZXQgY3VycmVudEVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGZpZWxkRXJyb3I7XG4gICAgXG4gICAgLy8gQ2hlY2sgZGF0ZS1zcGVjaWZpYyB2YWxpZGF0aW9ucyBpZiBubyBmb3JtIGVycm9yIGFuZCB3ZSBoYXZlIGEgdmFsdWVcbiAgICBpZiAoIWZpZWxkRXJyb3IgJiYgdmFsdWUgJiYgdmFsaWRhdGlvbikge1xuICAgICAgY29uc3QgeyBtaW5EYXRlLCBtYXhEYXRlLCBzaG91bGREaXNhYmxlRGF0ZSwgZXJyb3JNZXNzYWdlcyB9ID0gdmFsaWRhdGlvbjtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgbWluaW11bSBkYXRlXG4gICAgICBpZiAobWluRGF0ZSAmJiB2YWx1ZSA8IG1pbkRhdGUpIHtcbiAgICAgICAgY3VycmVudEVycm9yID0ge1xuICAgICAgICAgIHR5cGU6ICdtaW5EYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5taW5EYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWluRGF0ZSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIERhdGVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIG1heGltdW0gZGF0ZVxuICAgICAgZWxzZSBpZiAobWF4RGF0ZSAmJiB2YWx1ZSA+IG1heERhdGUpIHtcbiAgICAgICAgY3VycmVudEVycm9yID0ge1xuICAgICAgICAgIHR5cGU6ICdtYXhEYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5tYXhEYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWF4RGF0ZSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIERhdGVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGRpc2FibGVkIGRhdGVcbiAgICAgIGVsc2UgaWYgKHNob3VsZERpc2FibGVEYXRlICYmIHNob3VsZERpc2FibGVEYXRlKHZhbHVlKSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ2Rpc2FibGVkRGF0ZScsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlcz8uZGlzYWJsZWREYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGlzYWJsZWREYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgY29uc3QgaGFzRXJyb3IgPSBCb29sZWFuKGN1cnJlbnRFcnJvcik7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc0Vycm9yLFxuICAgICAgZXJyb3I6IGN1cnJlbnRFcnJvcixcbiAgICAgIGludmFsaWQ6IGludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgfTtcbiAgfSwgW2ZpZWxkU3RhdGUsIHZhbGlkYXRpb24sIHZhbHVlXSk7XG5cbiAgLy8gTWVtb2l6ZSBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmdcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gdXNlTWVtbygoKTogUmVhY3ROb2RlID0+IHtcbiAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFVzZSBjdXN0b20gZXJyb3IgcGFyc2VyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgIHJldHVybiBwYXJzZUVycm9yKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgZXJyb3IgbWVzc2FnZSBoYW5kbGluZ1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdC5lcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yO1xuICAgIH1cblxuICAgIGlmICgnbWVzc2FnZScgaW4gdmFsaWRhdGlvblJlc3VsdC5lcnJvciAmJiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZXJyb3IgbWVzc2FnZXMgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgIGlmICgndHlwZScgaW4gdmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JUeXBlID0gdmFsaWRhdGlvblJlc3VsdC5lcnJvci50eXBlO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMucmVxdWlyZWQ7XG4gICAgICAgIGNhc2UgJ21pbkRhdGUnOlxuICAgICAgICAgIHJldHVybiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLm1pbkRhdGU7XG4gICAgICAgIGNhc2UgJ21heERhdGUnOlxuICAgICAgICAgIHJldHVybiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLm1heERhdGU7XG4gICAgICAgIGNhc2UgJ2Rpc2FibGVkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGlzYWJsZWREYXRlO1xuICAgICAgICBjYXNlICdpbnZhbGlkRGF0ZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuaW52YWxpZERhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuaW52YWxpZERhdGU7XG4gIH0sIFt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLCBwYXJzZUVycm9yXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi52YWxpZGF0aW9uUmVzdWx0LFxuICAgIGVycm9yTWVzc2FnZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclZhbGlkYXRpb247IiwgImltcG9ydCB0eXBlIHsgU3hQcm9wcywgVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyU3R5bGVzIGhvb2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyU3R5bGVzT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBhIHZhbGlkYXRpb24gZXJyb3IgKi9cbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGxvYWRpbmcgc3RhdGUgKi9cbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZXh0IGlucHV0IGlzIHJlYWQtb25seSAqL1xuICB0ZXh0UmVhZE9ubHk/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIHN0eWxlcyB0byBtZXJnZSB3aXRoIGRlZmF1bHRzICovXG4gIHN4PzogU3hQcm9wczxUaGVtZT47XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyU3R5bGVzIGhvb2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyU3R5bGVzUmV0dXJuIHtcbiAgLyoqIENvbXB1dGVkIHN0eWxlcyBmb3IgdGhlIGRhdGUgcGlja2VyIGNvbXBvbmVudCAqL1xuICBzeDogU3hQcm9wczxUaGVtZT47XG4gIC8qKiBBZGRpdGlvbmFsIGNsYXNzIG5hbWVzIGZvciBzdHlsaW5nICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb29rIGZvciBtYW5hZ2luZyB0aGVtZS1hd2FyZSBkYXRlIHBpY2tlciBzdHlsZXMgd2l0aCBjb25zaXN0ZW50IGRlc2lnbiBzeXN0ZW0gaW50ZWdyYXRpb25cbiAqIFxuICogVGhpcyBob29rIHByb3ZpZGVzIG9wdGltaXplZCwgbWVtb2l6ZWQgc3R5bGVzIGZvciBkYXRlIHBpY2tlciBjb21wb25lbnRzIHRoYXQgYXV0b21hdGljYWxseVxuICogYWRhcHQgdG8gdGhlIGN1cnJlbnQgTVVJIHRoZW1lIGFuZCBjb21wb25lbnQgc3RhdGUgKGRpc2FibGVkLCBlcnJvciwgbG9hZGluZywgZXRjLikuXG4gKiBJdCBlbnN1cmVzIGNvbnNpc3RlbnQgc3R5bGluZyBhY3Jvc3MgYWxsIGRhdGUgcGlja2VyIGluc3RhbmNlcyB3aGlsZSBhbGxvd2luZyBjdXN0b21pemF0aW9uLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgc3ggfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICogICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAqICAgaGFzRXJyb3I6ICEhZXJyb3IsXG4gKiAgIGxvYWRpbmc6IGlzTG9hZGluZ1xuICogfSk7XG4gKiBcbiAqIHJldHVybiA8RGF0ZVBpY2tlciBzeD17c3h9IC4uLiAvPjtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gc3R5bGVzOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IHN4IH0gPSB1c2VEYXRlUGlja2VyU3R5bGVzKHtcbiAqICAgaGFzRXJyb3I6ICEhZXJyb3IsXG4gKiAgIHN4OiB7XG4gKiAgICAgJyYgLk11aUlucHV0TGFiZWwtcm9vdCc6IHtcbiAqICAgICAgIGNvbG9yOiAncHJpbWFyeS5tYWluJ1xuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQHBhcmFtIG9wdGlvbnMgLSBTdHlsZSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIENvbXB1dGVkIHN0eWxlcyBhbmQgY2xhc3MgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURhdGVQaWNrZXJTdHlsZXMoXG4gIG9wdGlvbnM6IFVzZURhdGVQaWNrZXJTdHlsZXNPcHRpb25zID0ge31cbik6IFVzZURhdGVQaWNrZXJTdHlsZXNSZXR1cm4ge1xuICBjb25zdCB7IGRpc2FibGVkLCBoYXNFcnJvciwgbG9hZGluZywgdGV4dFJlYWRPbmx5LCBzeDogY3VzdG9tU3ggfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICAvLyBNZW1vaXplIGNvbXB1dGVkIHN0eWxlcyBmb3IgcGVyZm9ybWFuY2VcbiAgY29uc3QgY29tcHV0ZWRTeCA9IHVzZU1lbW8oKCk6IFN4UHJvcHM8VGhlbWU+ID0+IHtcbiAgICBjb25zdCBiYXNlU3R5bGVzOiBTeFByb3BzPFRoZW1lPiA9IHtcbiAgICAgIC8vIElucHV0IGZpZWxkIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpT3V0bGluZWRJbnB1dC1yb290XCI6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkaXNhYmxlZCBcbiAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCBcbiAgICAgICAgICA6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgXG4gICAgICAgIC8vIFRyYW5zaXRpb24gZm9yIHNtb290aCBzdGF0ZSBjaGFuZ2VzXG4gICAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbXG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InLFxuICAgICAgICAgICdib3JkZXItY29sb3InLFxuICAgICAgICAgICdjb2xvcidcbiAgICAgICAgXSwge1xuICAgICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydCxcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gRXJyb3Igc3RhdGUgc3R5bGluZ1xuICAgICAgICAuLi4oaGFzRXJyb3IgJiYge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJyYuTXVpLWZvY3VzZWQnOiB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICAgICAgYm94U2hhZG93OiBgMCAwIDAgMnB4ICR7dGhlbWUucGFsZXR0ZS5lcnJvci5tYWlufTI1YCwgLy8gMjUgaXMgMTUlIG9wYWNpdHkgaW4gaGV4XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gTG9hZGluZyBzdGF0ZSBzdHlsaW5nXG4gICAgICAgIC4uLihsb2FkaW5nICYmIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjcsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIElucHV0IGVsZW1lbnQgc3R5bGluZ1xuICAgICAgXCImIC5NdWlJbnB1dEJhc2UtaW5wdXRcIjoge1xuICAgICAgICBjdXJzb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gXCJub3QtYWxsb3dlZFwiIFxuICAgICAgICAgIDogdGV4dFJlYWRPbmx5IFxuICAgICAgICAgICAgPyBcInBvaW50ZXJcIiBcbiAgICAgICAgICAgIDogXCJ0ZXh0XCIsXG4gICAgICAgIFxuICAgICAgICAvLyBSZWFkLW9ubHkgc3BlY2lmaWMgc3R5bGluZ1xuICAgICAgICAuLi4odGV4dFJlYWRPbmx5ICYmICFkaXNhYmxlZCAmJiB7XG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcbiAgICAgICAgICBjYXJldENvbG9yOiBcInRyYW5zcGFyZW50XCIsIC8vIEhpZGUgdGV4dCBjdXJzb3IgaW4gcmVhZC1vbmx5IG1vZGVcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gTG9hZGluZyBzdGF0ZVxuICAgICAgICAuLi4obG9hZGluZyAmJiB7XG4gICAgICAgICAgY3Vyc29yOiBcIndhaXRcIixcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBSZXF1aXJlZCBmaWVsZCBhc3RlcmlzayBzdHlsaW5nXG4gICAgICBcIiYgLk11aUlucHV0TGFiZWwtYXN0ZXJpc2tcIjogeyBcbiAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgZm9udFNpemU6IFwiMS4yZW1cIixcbiAgICAgIH0sXG5cbiAgICAgIC8vIExhYmVsIHN0eWxpbmcgd2l0aCBiZXR0ZXIgY29udHJhc3RcbiAgICAgIFwiJiAuTXVpSW5wdXRMYWJlbC1yb290XCI6IHtcbiAgICAgICAgY29sb3I6IGhhc0Vycm9yIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluIFxuICAgICAgICAgIDogdGhlbWUucGFsZXR0ZS50ZXh0LnNlY29uZGFyeSxcbiAgICAgICAgXG4gICAgICAgIC8vIEVuc3VyZSBwcm9wZXIgY29udHJhc3QgZm9yIGRpc2FibGVkIHN0YXRlXG4gICAgICAgIC4uLihkaXNhYmxlZCAmJiB7XG4gICAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUudGV4dC5kaXNhYmxlZCxcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBIZWxwZXIgdGV4dCBzdHlsaW5nXG4gICAgICBcIiYgLk11aUZvcm1IZWxwZXJUZXh0LXJvb3RcIjoge1xuICAgICAgICBtYXJnaW5MZWZ0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZygxKSxcbiAgICAgICAgXG4gICAgICAgIC8vIEVycm9yIHN0YXRlXG4gICAgICAgIC4uLihoYXNFcnJvciAmJiB7XG4gICAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBDYWxlbmRhciBpY29uIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpSW5wdXRBZG9ybm1lbnQtcm9vdFwiOiB7XG4gICAgICAgIGNvbG9yOiBkaXNhYmxlZCBcbiAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkIFxuICAgICAgICAgIDogaGFzRXJyb3IgXG4gICAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbiBcbiAgICAgICAgICAgIDogdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLFxuICAgICAgfSxcblxuICAgICAgLy8gRm9jdXMgcmluZyBmb3IgYWNjZXNzaWJpbGl0eVxuICAgICAgXCImIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWZvY3VzZWRcIjoge1xuICAgICAgICBvdXRsaW5lOiBgMnB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW59NTBgLCAvLyA1MCBpcyAzMSUgb3BhY2l0eVxuICAgICAgICBvdXRsaW5lT2Zmc2V0OiBcIjJweFwiLFxuICAgICAgfSxcblxuICAgICAgLy8gRW5oYW5jZWQgY29udHJhc3QgZm9yIGRhcmsgdGhlbWVzXG4gICAgICAuLi4odGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYge1xuICAgICAgICBcIiYgLk11aU91dGxpbmVkSW5wdXQtcm9vdFwiOiB7XG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCBjdXN0b20gc3R5bGVzXG4gICAgcmV0dXJuIGN1c3RvbVN4ID8gW2Jhc2VTdHlsZXMsIGN1c3RvbVN4XSBhcyBTeFByb3BzPFRoZW1lPiA6IGJhc2VTdHlsZXM7XG4gIH0sIFtcbiAgICB0aGVtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIHRleHRSZWFkT25seSxcbiAgICBjdXN0b21TeCxcbiAgXSk7XG5cbiAgLy8gR2VuZXJhdGUgYWRkaXRpb25hbCBjbGFzcyBuYW1lcyBmb3IgZXh0ZXJuYWwgc3R5bGluZyBob29rc1xuICBjb25zdCBjbGFzc05hbWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIGlmIChkaXNhYmxlZCkgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tZGlzYWJsZWQnKTtcbiAgICBpZiAoaGFzRXJyb3IpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLWVycm9yJyk7XG4gICAgaWYgKGxvYWRpbmcpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLWxvYWRpbmcnKTtcbiAgICBpZiAodGV4dFJlYWRPbmx5KSBjbGFzc2VzLnB1c2goJ0RhdGVQaWNrZXJFbGVtZW50LS1yZWFkT25seScpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmxlbmd0aCA+IDAgPyBjbGFzc2VzLmpvaW4oJyAnKSA6IHVuZGVmaW5lZDtcbiAgfSwgW2Rpc2FibGVkLCBoYXNFcnJvciwgbG9hZGluZywgdGV4dFJlYWRPbmx5XSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzeDogY29tcHV0ZWRTeCxcbiAgICBjbGFzc05hbWUsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZURhdGVQaWNrZXJTdHlsZXM7IiwgImltcG9ydCB0eXBlIHsgUGlja2VyVmFsaWREYXRlIH0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB0eXBlIHsgdXNlTG9jYWxpemF0aW9uQ29udGV4dCB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFZhbHVlcywgRmllbGRQYXRoLCBQYXRoVmFsdWUgfSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIGZvciBjcmVhdGluZyBicmFuZGVkIGRhdGUgdHlwZXMgdG8gcHJldmVudCBtaXhpbmcgZGlmZmVyZW50IGRhdGUgZm9ybWF0c1xuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGJhc2UgZGF0ZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEJyYW5kIC0gVGhlIGJyYW5kIHN0cmluZyBmb3IgdHlwZSBzYWZldHlcbiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRlZERhdGU8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUsIFRCcmFuZCBleHRlbmRzIHN0cmluZz4gPSBcbiAgVERhdGUgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6IFRCcmFuZCB9O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIGRhdGVcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBkYXRlLWxpa2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBpY2tlclZhbGlkRGF0ZSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIERhdGUgb2JqZWN0XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlLmdldFRpbWUoKSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgZGF0ZS1saWtlIG9iamVjdHMgd2l0aCBjb21tb24gZGF0ZSBsaWJyYXJ5IG1ldGhvZHNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAvLyBEYXkuanMsIE1vbWVudC5qcywgb3Igc2ltaWxhclxuICAgIGlmICgnaXNWYWxpZCcgaW4gdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmlzVmFsaWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEx1eG9uIERhdGVUaW1lXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlIGFzIGFueSkuaXNWYWxpZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIGFueSkuaXNWYWxpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHBhcnNlZCBhcyBhIGRhdGVcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwYXJzZWFibGUgZGF0ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2FibGVEYXRlU3RyaW5nKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQmFzaWMgSVNPIGRhdGUgZm9ybWF0IGNoZWNrXG4gIGNvbnN0IGlzb0RhdGVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpUXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7M30pPyg/Olp8WystXVxcZHsyfTpcXGR7Mn0pPyk/JC87XG5cbiAgaWYgKGlzb0RhdGVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgRGF0ZSBjb25zdHJ1Y3RvciBjYW4gcGFyc2UgaXRcbiAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodmFsdWUpO1xuXG4gIHJldHVybiAhaXNOYU4ocGFyc2VkLmdldFRpbWUoKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHR5cGUtc2FmZSBkYXRlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZm9ybSB2YWx1ZXMgdG8gZGF0ZSBwaWNrZXIgdmFsdWVzXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBURGF0ZSAtIFRoZSBkYXRlIHR5cGUgdXNlZCBieSB0aGUgcGlja2VyXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBkYXRlIGFkYXB0ZXIgZnJvbSBNVUkgbG9jYWxpemF0aW9uIGNvbnRleHRcbiAqIEByZXR1cm5zIEEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBzYWZlbHkgY29udmVydHMgZm9ybSB2YWx1ZXMgdG8gZGF0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURhdGVJbnB1dFRyYW5zZm9ybTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFREYXRlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihhZGFwdGVyOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VMb2NhbGl6YXRpb25Db250ZXh0Pikge1xuICByZXR1cm4gKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pOiBURGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gYWRhcHRlci51dGlscy5kYXRlKHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUocGFyc2VkKSA/IChwYXJzZWQgYXMgVERhdGUpIDogbnVsbDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUgYXMgVERhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHR5cGUtc2FmZSBkYXRlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZGF0ZSBwaWNrZXIgdmFsdWVzIGJhY2sgdG8gZm9ybSB2YWx1ZXNcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSB1c2VkIGJ5IHRoZSBwaWNrZXJcbiAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3Igc3RyaW5nIGNvbnZlcnNpb24gKG9wdGlvbmFsKVxuICogQHJldHVybnMgQSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiB0aGF0IHNhZmVseSBjb252ZXJ0cyBkYXRlcyB0byBmb3JtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGF0ZU91dHB1dFRyYW5zZm9ybTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFREYXRlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihmb3JtYXQ/OiBzdHJpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZTogVERhdGUgfCBudWxsKTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+ID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZm9ybWF0IHNwZWNpZmllZCwgcmV0dXJuIHRoZSBkYXRlIGFzLWlzXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgZGF0ZSBsaWJyYXJ5IGZvcm1hdHNcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2lzbycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGF0ZS1vbmx5Jykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERheS5qcyBmb3JtYXRcbiAgICAgIGlmICh0eXBlb2YgKHZhbHVlIGFzIGFueSkuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5mb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIE1vbWVudC5qcyBmb3JtYXRcbiAgICAgIGlmICh0eXBlb2YgKHZhbHVlIGFzIGFueSkuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5mb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIEx1eG9uIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS50b0Zvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIGFueSkudG9Gb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIEZhbGxiYWNrOiByZXR1cm4gYXMtaXNcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGRlZmF1bHQgZGF0ZSBwaWNrZXIgY29uZmlndXJhdGlvblxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZVxuICogQHJldHVybnMgRGVmYXVsdCBjb25maWd1cmF0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdERhdGVQaWNrZXJDb25maWc8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGU+KCkge1xuICByZXR1cm4ge1xuICAgIC8vIERlZmF1bHQgc2xvdCBwcm9wcyBmb3IgY29uc2lzdGVudCBiZWhhdmlvclxuICAgIHNsb3RQcm9wczoge1xuICAgICAgYWN0aW9uQmFyOiB7XG4gICAgICAgIGFjdGlvbnM6IFsnY2xlYXInLCAndG9kYXknLCAnY2FuY2VsJywgJ2FjY2VwdCddIGFzIGNvbnN0LFxuICAgICAgfSxcbiAgICAgIHRleHRGaWVsZDoge1xuICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgIHZhcmlhbnQ6ICdvdXRsaW5lZCcgYXMgY29uc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgXG4gICAgLy8gRGVmYXVsdCBncmlkIHByb3BzIGZvciBsYXlvdXQgY29uc2lzdGVuY3lcbiAgICBncmlkUHJvcHM6IHtcbiAgICAgIHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSBhcyBjb25zdCxcbiAgICB9LFxuICAgIFxuICAgIC8vIERlZmF1bHQgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgdmFsaWRhdGlvbjoge1xuICAgICAgZXJyb3JNZXNzYWdlczoge1xuICAgICAgICBpbnZhbGlkRGF0ZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlXCIsXG4gICAgICAgIG1pbkRhdGU6IFwiRGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZVwiLFxuICAgICAgICBtYXhEYXRlOiBcIkRhdGUgbXVzdCBiZSBiZWZvcmUgdGhlIG1heGltdW0gYWxsb3dlZCBkYXRlXCIsXG4gICAgICAgIGRpc2FibGVkRGF0ZTogXCJUaGlzIGRhdGUgaXMgbm90IGFsbG93ZWRcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgfSBhcyBjb25zdDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHRvIHNhZmVseSBleHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIGVycm9yIHR5cGVzXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0IChjb3VsZCBiZSBmcm9tIHJlYWN0LWhvb2stZm9ybSBvciBNVUkgZGF0ZSBwaWNrZXIpXG4gKiBAcmV0dXJucyBBIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwpIHtcbiAgICAvLyBSZWFjdCBIb29rIEZvcm0gRmllbGRFcnJvclxuICAgIGlmICgnbWVzc2FnZScgaW4gZXJyb3IgJiYgdHlwZW9mIChlcnJvciBhcyBhbnkpLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKGVycm9yIGFzIGFueSkubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBNVUkgRGF0ZVZhbGlkYXRpb25FcnJvclxuICAgIGlmICgndHlwZScgaW4gZXJyb3IgJiYgdHlwZW9mIChlcnJvciBhcyBhbnkpLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSAoZXJyb3IgYXMgYW55KS50eXBlO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdpbnZhbGlkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlJztcbiAgICAgICAgY2FzZSAnbWluRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdEYXRlIGlzIHRvbyBlYXJseSc7XG4gICAgICAgIGNhc2UgJ21heERhdGUnOlxuICAgICAgICAgIHJldHVybiAnRGF0ZSBpcyB0b28gbGF0ZSc7XG4gICAgICAgIGNhc2UgJ2Rpc2FibGVkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdUaGlzIGRhdGUgaXMgbm90IGF2YWlsYWJsZSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICdJbnZhbGlkIGRhdGUgc2VsZWN0aW9uJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJ0ludmFsaWQgaW5wdXQnO1xufVxuXG4vKipcbiAqIFBlcmZvcm1hbmNlIHV0aWxpdHkgdG8gY3JlYXRlIHN0YWJsZSByZWZlcmVuY2VzIGZvciBjb21wbGV4IHByb3BzXG4gKiBUaGlzIGhlbHBzIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVycyB3aGVuIHVzaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbiBvYmplY3RzXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZGVwZW5kZW5jeSBpbiB1c2VNZW1vL3VzZUNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGFibGVLZXk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihjb25maWc6IFQpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb25maWcsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAvLyBTb3J0IG9iamVjdCBrZXlzIGZvciBjb25zaXN0ZW50IHNlcmlhbGl6YXRpb25cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBzb3J0ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIHNvcnRlZFtrXSA9ICh2YWx1ZSBhcyBhbnkpW2tdO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc29ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc2VyaWFsaXphYmxlIG9iamVjdHNcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5zb3J0KCkuam9pbignLScpO1xuICB9XG59IiwgImltcG9ydCBWaXNpYmlsaXR5IGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvVmlzaWJpbGl0eSc7XG5pbXBvcnQgVmlzaWJpbGl0eU9mZiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1Zpc2liaWxpdHlPZmYnO1xuaW1wb3J0IHR5cGUgeyBJY29uQnV0dG9uUHJvcHMsIFRleHRGaWVsZFByb3BzLCBHcmlkUHJvcHMgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7XG4gIEljb25CdXR0b24sXG4gIElucHV0QWRvcm5tZW50LFxuICBUZXh0RmllbGQsXG4gIHVzZUZvcmtSZWYsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBNb3VzZUV2ZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFBhc3N3b3JkRWxlbWVudCBjb21wb25lbnQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQYXNzd29yZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPiA9IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJyB8ICdzaXplJz4gJiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcInBhc3N3b3JkXCIgfCBcInVzZXIuY3VycmVudFBhc3N3b3JkXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgLyoqXG4gICAqIENvbG9yIG9mIHRoZSB2aXNpYmlsaXR5IHRvZ2dsZSBpY29uIGJ1dHRvblxuICAgKiBAZGVmYXVsdFZhbHVlIFwiZGVmYXVsdFwiXG4gICAqL1xuICBpY29uQ29sb3I/OiBJY29uQnV0dG9uUHJvcHNbJ2NvbG9yJ107XG4gIC8qKlxuICAgKiBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgaWNvblxuICAgKiBAcGFyYW0gcGFzc3dvcmQgLSBXaGV0aGVyIHBhc3N3b3JkIGlzIGN1cnJlbnRseSBoaWRkZW5cbiAgICogQHJldHVybnMgUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGUgaWNvblxuICAgKiBAZGVmYXVsdFZhbHVlIERlZmF1bHQgdmlzaWJpbGl0eS92aXNpYmlsaXR5LW9mZiBpY29uc1xuICAgKi9cbiAgcmVuZGVySWNvbj86IChwYXNzd29yZDogYm9vbGVhbikgPT4gUmVhY3ROb2RlO1xuICAvKipcbiAgICogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyIEdyaWQgY29tcG9uZW50XG4gICAqIEBkZWZhdWx0VmFsdWUgeyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0gfVxuICAgKi9cbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuXG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBQYXNzd29yZEVsPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHByb3BzOiBQYXNzd29yZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPikge1xuICBjb25zdCB7XG4gICAgaWNvbkNvbG9yLFxuICAgIHJlbmRlckljb24gPSBwYXNzd29yZCA9PiAocGFzc3dvcmQgPyA8VmlzaWJpbGl0eSAvPiA6IDxWaXNpYmlsaXR5T2ZmIC8+KSxcbiAgICBzbG90UHJvcHMsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGlucHV0UmVmLFxuICAgIG9uQmx1cixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KHRydWUpO1xuXG4gIGNvbnN0IGVuZEFkb3JubWVudCA9IChcbiAgICA8SW5wdXRBZG9ybm1lbnQgcG9zaXRpb249eydlbmQnfT5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIG9uTW91c2VEb3duPXsoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0UGFzc3dvcmQoIXBhc3N3b3JkKX1cbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBjb2xvcj17aWNvbkNvbG9yID8/ICdkZWZhdWx0J31cbiAgICAgID5cbiAgICAgICAge3JlbmRlckljb24ocGFzc3dvcmQpfVxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgIDwvSW5wdXRBZG9ybm1lbnQ+XG4gICk7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgaW5wdXRSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRGaWVsZFxuICAgICAgey4uLnJlc3R9XG4gICAgICBpbnB1dFJlZj17aGFuZGxlSW5wdXRSZWZ9XG4gICAgICB0eXBlPXtwYXNzd29yZCA/ICdwYXNzd29yZCcgOiAndGV4dCd9XG4gICAgICB2YWx1ZT17ZmllbGQudmFsdWUgPz8gJyd9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHZhcmlhbnQ9e3Jlc3QudmFyaWFudCA/PyAnb3V0bGluZWQnfVxuICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICBpZiAodHlwZW9mIHJlc3Qub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXN0Lm9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgey4uLih0eXBlb2Ygc2xvdFByb3BzID09PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIElucHV0UHJvcHM6IHtcbiAgICAgICAgICAgICAgZW5kQWRvcm5tZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgc2xvdFByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLnNsb3RQcm9wcyxcbiAgICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgLi4uc2xvdFByb3BzPy5pbnB1dCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgVGV4dEZpZWxkUHJvcHNbJ3Nsb3RQcm9wcyddLFxuICAgICAgICAgIH0pfVxuICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIHBhc3N3b3JkIFRleHRGaWVsZCB3aXRoIHNob3cvaGlkZSBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBwYXNzd29yZCBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHkgd2l0aCByZWFjdC1ob29rLWZvcm0sXG4gKiBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBidWlsdC1pbiB2aXNpYmlsaXR5IHRvZ2dsZSBidXR0b24uIFRoZSBwYXNzd29yZFxuICogY2FuIGJlIHNob3duIG9yIGhpZGRlbiBieSBjbGlja2luZyB0aGUgZXllIGljb24gaW4gdGhlIGlucHV0J3MgZW5kIGFkb3JubWVudC5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cbiAqIC0gUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGVcbiAqIC0gQXV0b21hdGljIGVycm9yIGRpc3BsYXlcbiAqIC0gQ3VzdG9taXphYmxlIHZpc2liaWxpdHkgaWNvbnNcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxuICogLSBUeXBlU2NyaXB0IHR5cGUgc2FmZXR5XG4gKiAtIERpc2FibGVkIHN0YXRlIHN1cHBvcnRcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxQYXNzd29yZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInBhc3N3b3JkXCJcbiAqICAgbGFiZWw9XCJQYXNzd29yZFwiXG4gKiAgIHJ1bGVzPXt7XG4gKiAgICAgcmVxdWlyZWQ6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gKiAgICAgbWluTGVuZ3RoOiB7IHZhbHVlOiA4LCBtZXNzYWdlOiAnTWluaW11bSA4IGNoYXJhY3RlcnMnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gaWNvbiBjb2xvcjpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiY29uZmlybVBhc3N3b3JkXCJcbiAqICAgbGFiZWw9XCJDb25maXJtIFBhc3N3b3JkXCJcbiAqICAgaWNvbkNvbG9yPVwicHJpbWFyeVwiXG4gKiAgIHBsYWNlaG9sZGVyPVwiUmUtZW50ZXIgeW91ciBwYXNzd29yZFwiXG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwibmV3UGFzc3dvcmRcIlxuICogICBsYWJlbD1cIk5ldyBQYXNzd29yZFwiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICByZW5kZXJJY29uPXsoaGlkZGVuKSA9PiBoaWRkZW4gPyA8Q3VzdG9tSGlkZUljb24gLz4gOiA8Q3VzdG9tU2hvd0ljb24gLz59XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBQYXNzd29yZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFBhc3N3b3JkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XG5cbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5leHBvcnQgeyBQYXNzd29yZEVsZW1lbnQgfTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEZvcm1Db250cm9sTGFiZWxQcm9wcyxcbiAgRm9ybUxhYmVsUHJvcHMsXG4gIFJhZGlvR3JvdXBQcm9wcyxcbiAgUmFkaW9Qcm9wcyxcbiAgR3JpZFByb3BzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7XG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbExhYmVsLFxuICBGb3JtSGVscGVyVGV4dCxcbiAgRm9ybUxhYmVsLFxuICBSYWRpbyxcbiAgUmFkaW9Hcm91cCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50T3JWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzL2V2ZW50cyc7XG5cbi8vIFR5cGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBhcyByYWRpbyBidXR0b24gdmFsdWVzXG50eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuLy8gQ29uc3RyYWludCB0byBlbnN1cmUgb3B0aW9uIG9iamVjdHMgaGF2ZSB0aGUgcmVxdWlyZWQga2V5c1xudHlwZSBPcHRpb25PYmplY3Q8XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgUHJpbWl0aXZlVmFsdWU+ICZcbiAgUmVjb3JkPFRMYWJlbEtleSwgc3RyaW5nPiAmXG4gIFBhcnRpYWw8UmVjb3JkPFREaXNhYmxlZEtleSwgYm9vbGVhbj4+IDtcblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0J1dHRvbkdyb3VwUHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzICBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPiB7XG4gIG9wdGlvbnM6IFRPcHRpb25bXTtcbiAgaGVscGVyVGV4dD86IFJlYWN0Tm9kZTtcbiAgbmFtZTogVE5hbWU7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xuICBsYWJlbD86IHN0cmluZztcbiAgbGFiZWxLZXk/OiBUTGFiZWxLZXk7XG4gIHZhbHVlS2V5PzogVFZhbHVlS2V5O1xuICBkaXNhYmxlZEtleT86IFREaXNhYmxlZEtleTtcbiAgdHlwZT86ICdudW1iZXInIHwgJ3N0cmluZycgfCAnYm9vbGVhbic7XG4gIGVtcHR5T3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBUT3B0aW9uW1RWYWx1ZUtleV0gfCBUT3B0aW9uIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICByZXR1cm5PYmplY3Q/OiBib29sZWFuO1xuICByb3c/OiBib29sZWFuO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBsYWJlbFByb3BzPzogT21pdDxGb3JtQ29udHJvbExhYmVsUHJvcHMsICdsYWJlbCcgfCAnY29udHJvbCcgfCAndmFsdWUnPjtcbiAgZm9ybUxhYmVsUHJvcHM/OiBPbWl0PEZvcm1MYWJlbFByb3BzLCAncmVxdWlyZWQnIHwgJ2Vycm9yJz47XG4gIHJhZGlvUHJvcHM/OiBSYWRpb1Byb3BzO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zZm9ybT86IHtcbiAgICBpbnB1dD86ICh2YWx1ZTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gUmFkaW9CdXR0b25Hcm91cDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID4gPSBPcHRpb25PYmplY3QsXG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9ICdpZCcsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9ICdkaXNhYmxlZCcsXG4+KFxuICBwcm9wczogUmFkaW9CdXR0b25Hcm91cFByb3BzPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUT3B0aW9uLFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID5cbikge1xuICBjb25zdCB7XG4gICAgb3B0aW9ucyxcbiAgICBsYWJlbCxcbiAgICBuYW1lLFxuICAgIGxhYmVsS2V5ID0gJ2xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVLZXkgPSAnaWQnIGFzIFRWYWx1ZUtleSxcbiAgICBkaXNhYmxlZEtleSA9ICdkaXNhYmxlZCcgYXMgVERpc2FibGVkS2V5LFxuICAgIHJlcXVpcmVkLFxuICAgIGVtcHR5T3B0aW9uTGFiZWwsXG4gICAgcmV0dXJuT2JqZWN0LFxuICAgIHJvdyA9IHRydWUsXG4gICAgY29udHJvbCxcbiAgICB0eXBlLFxuICAgIGxhYmVsUHJvcHMsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9ybUxhYmVsUHJvcHMsXG4gICAgcmFkaW9Qcm9wcyxcbiAgICB0cmFuc2Zvcm0sXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZVRyYW5zZm9ybTxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVE9wdGlvbltUVmFsdWVLZXldIHwgVE9wdGlvblxuICA+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICgnJyBhcyBUT3B0aW9uW1RWYWx1ZUtleV0pO1xuICAgICAgICAgICAgfSxcbiAgICAgIG91dHB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8ub3V0cHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0/Lm91dHB1dFxuICAgICAgICAgIDogKF9ldmVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSkgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBvblJhZGlvQ2hhbmdlOiBSYWRpb0dyb3VwUHJvcHNbJ29uQ2hhbmdlJ10gPSAoZXZlbnQsIHJhZGlvVmFsdWUpID0+IHtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHJldHVybk9iamVjdFxuICAgICAgPyAob3B0aW9ucyBhcyBUT3B0aW9uW10pLmZpbmQob3B0aW9uID0+IG9wdGlvblt2YWx1ZUtleV0gPT09IHJhZGlvVmFsdWUpXG4gICAgICA6IChyYWRpb1ZhbHVlIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG5cbiAgICBvbkNoYW5nZShldmVudCwgcmV0dXJuVmFsdWUpO1xuICAgIGlmICh0eXBlb2YgcmVzdC5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVzdC5vbkNoYW5nZShyZXR1cm5WYWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Db250cm9sIGVycm9yPXshIWVycm9yfT5cbiAgICAgIHtsYWJlbCAmJiAoXG4gICAgICAgIDxGb3JtTGFiZWwgey4uLmZvcm1MYWJlbFByb3BzfSByZXF1aXJlZD17cmVxdWlyZWR9IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvRm9ybUxhYmVsPlxuICAgICAgKX1cbiAgICAgIDxSYWRpb0dyb3VwIG9uQ2hhbmdlPXtvblJhZGlvQ2hhbmdlfSBuYW1lPXtuYW1lfSByb3c9e3Jvd30gdmFsdWU9e3ZhbHVlfT5cbiAgICAgICAge2VtcHR5T3B0aW9uTGFiZWwgJiYgKFxuICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8UmFkaW9cbiAgICAgICAgICAgICAgICB7Li4ucmFkaW9Qcm9wc31cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshdmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbD17ZW1wdHlPcHRpb25MYWJlbH1cbiAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7b3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb25bdmFsdWVLZXldO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbkRpc2FibGVkID0gb3B0aW9uW2Rpc2FibGVkS2V5XSB8fCBmYWxzZTtcbiAgICAgICAgICBsZXQgdmFsOiBUT3B0aW9uW1RWYWx1ZUtleV0gfCB1bmRlZmluZWQgPSByZXR1cm5PYmplY3RcbiAgICAgICAgICAgID8gKHZhbHVlIGFzIFRPcHRpb24pPy5bdmFsdWVLZXldXG4gICAgICAgICAgICA6ICh2YWx1ZSBhcyBUT3B0aW9uW1RWYWx1ZUtleV0pO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKSBhcyBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbCA9IEJvb2xlYW4odmFsKSBhcyBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNDaGVja2VkID0gdmFsID09PSBvcHRpb25LZXk7XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0aW9uS2V5KX1cbiAgICAgICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxSYWRpb1xuICAgICAgICAgICAgICAgICAgey4uLnJhZGlvUHJvcHN9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgb3B0aW9uRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWx1ZT17b3B0aW9uS2V5fVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICB7ZXJyb3IgJiYgPEZvcm1IZWxwZXJUZXh0PntlcnJvci5tZXNzYWdlfTwvRm9ybUhlbHBlclRleHQ+fVxuICAgIDwvRm9ybUNvbnRyb2w+XG4gICk7XG59O1xuXG5jb25zdCBSYWRpb0J1dHRvbkdyb3VwID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdpZCcsXG4gIFRMYWJlbEtleSBleHRlbmRzICBzdHJpbmcgPSAnbGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFJhZGlvQnV0dG9uR3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVE9wdGlvbixcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFREaXNhYmxlZEtleVxuPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8XG4gICAgICAgIFRGaWVsZFZhbHVlcyxcbiAgICAgICAgVE5hbWUsXG4gICAgICAgIFRPcHRpb24sXG4gICAgICAgIFRWYWx1ZUtleSxcbiAgICAgICAgVExhYmVsS2V5LFxuICAgICAgICBURGlzYWJsZWRLZXlcbiAgICAgID5cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5SYWRpb0J1dHRvbkdyb3VwLmRpc3BsYXlOYW1lID0gJ1JhZGlvQnV0dG9uR3JvdXAnO1xuXG5leHBvcnQgeyBSYWRpb0J1dHRvbkdyb3VwIH07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIENoaXBUeXBlTWFwLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgZGVwZW5kc09uOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc051bGxhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZURlZmF1bHRTZWxlY3RlZD86IGJvb2xlYW47XG4gIGxhYmVsRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgdGV4dEZpZWxkUHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICBvcHRpb25zPzogcmVhZG9ubHkgVE9wdGlvbltdIHwgbnVsbDtcbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFNlbGVjdENhc2NhZGVFbGVtZW50PFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHByb3BzOiBTZWxlY3RDYXNjYWRlRWxlbWVudFByb3BzPFRPcHRpb24sIFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3Qge1xuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnLFxuICAgIG5hbWUsXG4gICAgb25CbHVyLFxuICAgIG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBjb250cm9sLFxuICAgIGxvYWRpbmcgPSBmYWxzZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsYWJlbCxcbiAgICBkZXBlbmRzT24sXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIGlzTnVsbGFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IGdldE9wdGlvbktleSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgPyBTdHJpbmcoa2V5KSA6ICcnO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICBjb25zdCBpc09wdGlvbkVxdWFsVG9WYWx1ZSA9IChvcHRpb246IFRPcHRpb24sIHZhbHVlOiBUT3B0aW9uKSA9PlxuICAgIGdldE9wdGlvbktleShvcHRpb24pID09PSBnZXRPcHRpb25LZXkodmFsdWUpO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IHsgZmllbGQ6IGRlcGVuZGVudEZpZWxkIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lOiBkZXBlbmRzT24sXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgcGFyZW50VmFsdWVSZWYgPSB1c2VSZWYoZGVwZW5kZW50RmllbGQudmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgIT09IGRlcGVuZGVudEZpZWxkLnZhbHVlKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgIHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgPSBkZXBlbmRlbnRGaWVsZC52YWx1ZTtcbiAgICB9XG4gIH0sIFtkZXBlbmRlbnRGaWVsZC52YWx1ZSwgZmllbGRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlRGVmYXVsdFNlbGVjdGVkICYmIG9wdGlvbnMubGVuZ3RoID09PSAxICYmIGZpZWxkLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVEZWZhdWx0U2VsZWN0ZWQsIG9wdGlvbnMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUgJiYgIWRpc2FibGVEZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uS2V5KG9wdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXG4gICAgb3B0aW9ucyxcbiAgICBkaXNhYmxlZCxcbiAgICBnZXRPcHRpb25LZXksXG4gICAgZmllbGQub25DaGFuZ2UsXG4gICAgZGVwZW5kZW50RmllbGQudmFsdWUsXG4gICAgZGlzYWJsZURlZmF1bHRTZWxlY3RlZCxcbiAgXSk7XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09IG51bGwgfHxcbiAgICAgIGRlcGVuZGVudEZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGRlcGVuZGVudEZpZWxkLnZhbHVlID09PSAnJ1xuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtcbiAgICBkaXNhYmxlZCxcbiAgICBkZXBlbmRlbnRGaWVsZC52YWx1ZSxcbiAgICBvcHRpb25zLmxlbmd0aCxcbiAgICBpc051bGxhYmxlLFxuICAgIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPEF1dG9jb21wbGV0ZVxuICAgICAgey4uLnJlc3R9XG4gICAgICB2YWx1ZT17XG4gICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAubWFwKG9wdGlvbiA9PiAoZ2V0T3B0aW9uS2V5KG9wdGlvbikgPT09IGZpZWxkLnZhbHVlID8gb3B0aW9uIDogbnVsbCkpXG4gICAgICAgICAgLmZpbmQoQm9vbGVhbikgfHwgbnVsbFxuICAgICAgfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBnZXRPcHRpb25LZXk9e2dldE9wdGlvbktleX1cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXtpc09wdGlvbkVxdWFsVG9WYWx1ZX1cbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pID0+IHtcbiAgICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWUgPyBnZXRPcHRpb25LZXkobmV3VmFsdWUpIDogbnVsbCk7XG4gICAgICAgIGlmIChvbkNoYW5nZSAmJiB0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudCwgbmV3VmFsdWUsIHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbkJsdXI9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVuZGVySW5wdXQ9e3BhcmFtcyA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICB7Li4ucGFyYW1zfVxuICAgICAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RDYXNjYWRlRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZVxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0Q2FzY2FkZUVsZW1lbnQuZGlzcGxheU5hbWUgPSAnU2VsZWN0Q2FzY2FkZUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlVmFsdWUsXG4gIEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4gIHwgJ29wdGlvbnMnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIG9wdGlvbnM/OiByZWFkb25seSBUT3B0aW9uW10gfCBudWxsO1xufTtcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gU2VsZWN0RWxlbWVudDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+KFxuICBwcm9wczogU2VsZWN0RWxlbWVudFByb3BzPFxuICAgIFRPcHRpb24sXG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIE11bHRpcGxlLFxuICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgRnJlZVNvbG8sXG4gICAgQ2hpcENvbXBvbmVudFxuICA+XG4pIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBsYWJlbCxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnIGFzIGtleW9mIFRPcHRpb24sXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScgYXMga2V5b2YgVE9wdGlvbixcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0ZXh0RmllbGRQcm9wcyA9IHt9LFxuICAgIGlzTnVsbGFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbiB8IEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nPEZyZWVTb2xvPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiBudWxsO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uIHwgQXV0b2NvbXBsZXRlRnJlZVNvbG9WYWx1ZU1hcHBpbmc8RnJlZVNvbG8+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlRGVmYXVsdFNlbGVjdGVkICYmIG9wdGlvbnMubGVuZ3RoID09PSAxICYmIGZpZWxkLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVEZWZhdWx0U2VsZWN0ZWQsIG9wdGlvbnMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUgJiYgIWRpc2FibGVEZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uVmFsdWUob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtcbiAgICBvcHRpb25zLFxuICAgIGRpc2FibGVkLFxuICAgIGdldE9wdGlvblZhbHVlLFxuICAgIGZpZWxkLm9uQ2hhbmdlLFxuICAgIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQsXG4gIF0pO1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZCwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGUsIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWRdKTtcblxuICBjb25zdCBhdXRvY29tcGxldGVWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIG9wdGlvbnMuZmluZChvcHRpb24gPT4gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZmllbGQudmFsdWUpID8/IG51bGwsXG4gICAgW2ZpZWxkLnZhbHVlLCBvcHRpb25zLCBnZXRPcHRpb25WYWx1ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zPXtmYWxzZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB2YWx1ZT17XG4gICAgICAgIGF1dG9jb21wbGV0ZVZhbHVlIGFzIEF1dG9jb21wbGV0ZVZhbHVlPFxuICAgICAgICAgIFRPcHRpb24sXG4gICAgICAgICAgTXVsdGlwbGUsXG4gICAgICAgICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICAgICAgICBGcmVlU29sb1xuICAgICAgICA+XG4gICAgICB9XG4gICAgICBvbkNoYW5nZT17KGV2ZW50LCBuZXdWYWx1ZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld1ZhbHVlIGFzIFRPcHRpb24gfCBudWxsO1xuXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG9wdGlvbiA/IGdldE9wdGlvblZhbHVlKG9wdGlvbikgOiBudWxsKTtcbiAgICAgICAgb25DaGFuZ2U/LihldmVudCwgbmV3VmFsdWUsIHJlYXNvbik7XG4gICAgICB9fVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gZ2V0T3B0aW9uTGFiZWwob3B0aW9uKX1cbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbHVlKSA9PlxuICAgICAgICBnZXRPcHRpb25WYWx1ZShvcHRpb24pID09PSBnZXRPcHRpb25WYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICB2YXJpYW50PXt2YXJpYW50ID8gdmFyaWFudCA6ICdvdXRsaW5lZCd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgQXV0b2NvbXBsZXRlIGNvbXBvbmVudCBmb3Igc2VsZWN0aW5nIGZyb20gcHJlZGVmaW5lZCBvcHRpb25zLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBzZWxlY3QvYXV0b2NvbXBsZXRlIGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseVxuICogd2l0aCByZWFjdC1ob29rLWZvcm0sIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqIGZvciByZXNwb25zaXZlIGxheW91dHMuIEl0IHN1cHBvcnRzIGJvdGggc2luZ2xlIGFuZCBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZXMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9jb21wbGV0ZSB3aXRoIGZpbHRlcmluZ1xuICogLSBTaW5nbGUgYW5kIG11bHRpcGxlIHNlbGVjdGlvbiBzdXBwb3J0XG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XG4gKiAtIEN1c3RvbWl6YWJsZSBvcHRpb24gZGlzcGxheSAobGFiZWxLZXkvdmFsdWVLZXkpXG4gKiAtIEF1dG8tc2VsZWN0aW9uIHdoZW4gb25seSBvbmUgb3B0aW9uIGV4aXN0c1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3R5bGluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPFNlbGVjdEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImNhdGVnb3J5XCJcbiAqICAgbGFiZWw9XCJDYXRlZ29yeVwiXG4gKiAgIG9wdGlvbnM9e1tcbiAqICAgICB7IExhYmVsOiAnVGVjaG5vbG9neScsIFZhbHVlOiAndGVjaCcgfVxuICogICBdfVxuICogICBydWxlcz17eyByZXF1aXJlZDogJ1BsZWFzZSBzZWxlY3QgYSBjYXRlZ29yeScgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20ga2V5czpcbiAqIGBgYHRzeFxuICogPFNlbGVjdEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInVzZXJJZFwiXG4gKiAgIGxhYmVsPVwiQXNzaWduIHRvIFVzZXJcIlxuICogICBvcHRpb25zPXt1c2Vyc31cbiAqICAgbGFiZWxLZXk9XCJmdWxsTmFtZVwiXG4gKiAgIHZhbHVlS2V5PVwiaWRcIlxuICogICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIHVzZXIuLi5cIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBNdWx0aXBsZSBzZWxlY3Rpb246XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ0YWdzXCJcbiAqICAgbGFiZWw9XCJUYWdzXCJcbiAqICAgb3B0aW9ucz17YXZhaWxhYmxlVGFnc31cbiAqICAgbXVsdGlwbGVcbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogOCB9IH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRPcHRpb24gLSBUaGUgb3B0aW9uIG9iamVjdCB0eXBlXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBNdWx0aXBsZSAtIFdoZXRoZXIgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGVuYWJsZWRcbiAqIEB0ZW1wbGF0ZSBEaXNhYmxlQ2xlYXJhYmxlIC0gV2hldGhlciB0aGUgY2xlYXIgYnV0dG9uIGlzIGRpc2FibGVkXG4gKiBAdGVtcGxhdGUgRnJlZVNvbG8gLSBXaGV0aGVyIGZyZWUgdGV4dCBpbnB1dCBpcyBhbGxvd2VkXG4gKiBAdGVtcGxhdGUgQ2hpcENvbXBvbmVudCAtIFRoZSBjaGlwIGNvbXBvbmVudCB0eXBlIGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTZWxlY3RFbGVtZW50ID0gPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgTXVsdGlwbGUsXG4gIERpc2FibGVDbGVhcmFibGUsXG4gIEZyZWVTb2xvLFxuICBDaGlwQ29tcG9uZW50XG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5TZWxlY3RFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1NlbGVjdEVsZW1lbnQnO1xuIiwgImltcG9ydCBDaGVja0JveEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DaGVja0JveCc7XG5pbXBvcnQgQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIENoaXBUeXBlTWFwLFxuICBBdXRvY29tcGxldGVQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG4gIEF1dG9jb21wbGV0ZUNoYW5nZVJlYXNvbixcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBHcmlkLFxuICBDaGVja2JveCxcbiAgVGV4dEZpZWxkLFxuICBBdXRvY29tcGxldGUsXG4gIENpcmN1bGFyUHJvZ3Jlc3MsXG4gIHVzZVRoZW1lLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB0eXBlIHsgU3ludGhldGljRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG50eXBlIEJhc2VBdXRvY29tcGxldGVQcm9wczxcbiAgVE9wdGlvbixcbiAgTXVsdGlwbGUgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBDaGlwQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuRWxlbWVudFR5cGUsXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgJ25hbWUnIHwgJ3JlbmRlcklucHV0JyB8ICdtdWx0aXBsZScgfCAnb25DaGFuZ2UnIHwgJ3ZhbHVlJ1xuPjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgTXVsdGlwbGUgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gQmFzZUF1dG9jb21wbGV0ZVByb3BzPFxuICBUT3B0aW9uLFxuICBNdWx0aXBsZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgRnJlZVNvbG8sXG4gIENoaXBDb21wb25lbnRcbj4gJiB7XG4gIG5hbWU6IFROYW1lO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG4gIGxhYmVsRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RNdWx0aUVsZW1lbnQ8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFRPcHRpb24sIFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgb25CbHVyLFxuICAgIGRpc2FibGVkLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgaXNOdWxsYWJsZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gdHJ1ZSxcbiAgICB2YXJpYW50LFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gb3B0aW9uc0lucHV0IHx8IFtdLCBbb3B0aW9uc0lucHV0XSk7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvblt2YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25dIDogbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRPcHRpb25MYWJlbCA9IChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZCwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGUsIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWRdKTtcblxuICBjb25zdCBzZWxlY3RlZFZhbHVlID1cbiAgICBmaWVsZC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgPyBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gZmllbGQudmFsdWUuaW5jbHVkZXMoZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSkpXG4gICAgICA6IFtdO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQgJiYgb3B0aW9ucy5sZW5ndGggPT09IDEgJiYgZmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZURlZmF1bHRTZWxlY3RlZCwgb3B0aW9ucy5sZW5ndGhdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiYgZmllbGQudmFsdWUubGVuZ3RoID4gMDtcblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAhaGFzVmFsdWUgJiZcbiAgICAgICFpc051bGxhYmxlICYmXG4gICAgICAhZGlzYWJsZURlZmF1bHRTZWxlY3RlZFxuICAgICkge1xuICAgICAgZmllbGQub25DaGFuZ2UoW2dldE9wdGlvblZhbHVlKG9wdGlvbnNbMF0pXSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW1xuICAgIG9wdGlvbnMsXG4gICAgZ2V0T3B0aW9uVmFsdWUsXG4gICAgZmllbGQub25DaGFuZ2UsXG4gICAgaXNOdWxsYWJsZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgXzogU3ludGhldGljRXZlbnQsXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBUT3B0aW9uW10sXG4gICAgcmVhc29uOiBBdXRvY29tcGxldGVDaGFuZ2VSZWFzb25cbiAgKSA9PiB7XG4gICAgaWYgKHJlYXNvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgfSBlbHNlIGlmIChyZWFzb24gPT09ICdzZWxlY3RPcHRpb24nIHx8IHJlYXNvbiA9PT0gJ3JlbW92ZU9wdGlvbicpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHNlbGVjdGVkT3B0aW9ucy5tYXAob3B0aW9uID0+IGdldE9wdGlvblZhbHVlKG9wdGlvbikpO1xuXG4gICAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IG5ld1ZhbHVlcyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGljb24gPSA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIGZvbnRTaXplPVwic21hbGxcIiAvPjtcbiAgY29uc3QgY2hlY2tlZEljb24gPSA8Q2hlY2tCb3hJY29uIGZvbnRTaXplPVwic21hbGxcIiAvPjtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIG11bHRpcGxlXG4gICAgICB2YWx1ZT17c2VsZWN0ZWRWYWx1ZX1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgZ2V0T3B0aW9uTGFiZWw9e2dldE9wdGlvbkxhYmVsfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbHVlKSA9PlxuICAgICAgICBnZXRPcHRpb25WYWx1ZShvcHRpb24pID09PSBnZXRPcHRpb25WYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9uc1xuICAgICAgZGlzYWJsZUNsb3NlT25TZWxlY3RcbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVuZGVyT3B0aW9uPXsocHJvcHMxLCBvcHRpb24sIHsgc2VsZWN0ZWQgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSB7Li4ucHJvcHMxfT5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBpY29uPXtpY29ufVxuICAgICAgICAgICAgICBjaGVja2VkSWNvbj17Y2hlY2tlZEljb259XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtnZXRPcHRpb25MYWJlbChvcHRpb24gYXMgVE9wdGlvbil9XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBJbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgIGVuZEFkb3JubWVudDogKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBjb2xvcj1cImluaGVyaXRcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFNlbGVjdE11bHRpRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWVcbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblNlbGVjdE11bHRpRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdTZWxlY3RNdWx0aUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB7IHVzZUVuaGFuY2VkVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFRleHRGaWVsZEVsZW1lbnQgY29tcG9uZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRGaWVsZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwiZmlyc3ROYW1lXCIgfCBcInVzZXIuZW1haWxcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXJcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGZpZWxkIGVycm9yIG9iamVjdFxuICAgKiBAcmV0dXJucyBDdXN0b20gZXJyb3IgbWVzc2FnZSBvciBjb21wb25lbnRcbiAgICovXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIC8qKlxuICAgKiBDdXN0b20gVGV4dEZpZWxkIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBkZWZhdWx0IE1VSSBUZXh0RmllbGRcbiAgICovXG4gIGNvbXBvbmVudD86IHR5cGVvZiBUZXh0RmllbGQ7XG4gIC8qKlxuICAgKiBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgZm9yIGlucHV0L291dHB1dFxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZmllbGRUeXBlIGZvciBjb21tb24gcGF0dGVybnMgb3IgY3VzdG9tIHRyYW5zZm9ybXMgZm9yIGNvbXBsZXggY2FzZXNcbiAgICovXG4gIHRyYW5zZm9ybT86IHtcbiAgICAvKiogVHJhbnNmb3JtIHZhbHVlIGJlZm9yZSBkaXNwbGF5aW5nIGluIGlucHV0ICovXG4gICAgaW5wdXQ/OiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4gVFZhbHVlO1xuICAgIC8qKiBUcmFuc2Zvcm0gaW5wdXQgZXZlbnQgdG8gZm9ybSB2YWx1ZSAqL1xuICAgIG91dHB1dD86IChcbiAgICAgIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPj4sXG4gICAgICB2YWx1ZT86IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPlxuICAgICkgPT4gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICB9O1xuICAvKipcbiAgICogQnVpbHQtaW4gZmllbGQgdHlwZSBmb3IgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uXG4gICAqIEBleGFtcGxlICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ3NlbGVjdCdcbiAgICovXG4gIGZpZWxkVHlwZT86IEZpZWxkVHlwZTtcbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWUgdG8gZGlzcGxheSB3aGVuIGZpZWxkIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkXG4gICAqIEBleGFtcGxlIFwiXCJcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFRWYWx1ZTtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0XG4gICAqIEBleGFtcGxlIFwiRW1haWwgQWRkcmVzc1wiXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKiBAZXhhbXBsZSBcIkVudGVyIHlvdXIgZW1haWxcIlxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciB0aGUgdW5kZXJseWluZyBUZXh0RmllbGQgY29tcG9uZW50XG4gICAqL1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgVGV4dEZpZWxkIHZhcmlhbnRcbiAgICogQGRlZmF1bHRWYWx1ZSBcIm91dGxpbmVkXCJcbiAgICovXG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdHlsZXMgZm9yIHRoZSBUZXh0RmllbGRcbiAgICovXG4gIC8qKlxuICAgKiBDdXN0b20gb25DaGFuZ2UgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdHJhbnNmb3JtYXRpb25cbiAgICovXG4gIG9uQ2hhbmdlPzogKFxuICAgIGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICogRW5hYmxlIGRldmVsb3BtZW50IHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb24gaXNzdWVzXG4gICAqIEBkZWZhdWx0VmFsdWUgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICovXG4gIGVuYWJsZVdhcm5pbmdzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGV4dEZpZWxkRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHByb3BzOiBUZXh0RmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgY29tcG9uZW50OiBUZXh0RmllbGRDb21wb25lbnQgPSBUZXh0RmllbGQsXG4gICAgdHJhbnNmb3JtLFxuICAgIGZpZWxkVHlwZSA9ICd0ZXh0JywgLy8gRGVmYXVsdCB0byB0ZXh0IHR5cGVcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICBlbmFibGVXYXJuaW5ncyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHJlcXVpcmVkLFxuICAgIGhlbHBlclRleHQsXG4gICAgaW5wdXRSZWYsXG4gICAgb25JbnB1dCxcbiAgICBvbkJsdXIsXG4gICAgZGlzYWJsZWQsXG4gICAgLi4ucmVzdFRleHRQcm9wc1xuICB9ID0gdGV4dEZpZWxkUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgLy8gVXNlIHRoZSBlbmhhbmNlZCB0cmFuc2Zvcm0gaG9vayB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZUVuaGFuY2VkVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4oXG4gICAge1xuICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dDogdHJhbnNmb3JtLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0OiB0cmFuc2Zvcm0ub3V0cHV0LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWVsZFR5cGU6ICF0cmFuc2Zvcm1cbiAgICAgICAgPyB0eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gJ251bWJlcidcbiAgICAgICAgICA6IGZpZWxkVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZCwgLy8gQXV0by1kZXRlY3QgbnVtYmVyIHR5cGVcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVuYWJsZVdhcm5pbmdzLFxuICAgIH1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgbmFtZT17ZmllbGQubmFtZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICAgICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3VzdG9tT25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25JbnB1dD17KGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbklucHV0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgIGVycm9yID8gKHBhcnNlRXJyb3IgPyBwYXJzZUVycm9yKGVycm9yKSA6IGVycm9yLm1lc3NhZ2UpIDogaGVscGVyVGV4dFxuICAgICAgfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgVGV4dEZpZWxkIGNvbXBvbmVudCB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uLFxuICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGJ1aWx0LWluIGZpZWxkIHR5cGUgaGFuZGxpbmcuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5IHdpdGggY3VzdG9tIHBhcnNpbmdcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gc3VwcG9ydFxuICogLSBCdWlsdC1pbiBmaWVsZCB0eXBlcyBmb3IgY29tbW9uIHBhdHRlcm5zXG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBPcHRpbWl6ZWQgbnVtYmVyIGlucHV0IGhhbmRsaW5nXG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoIG1lbW9pemVkIHRyYW5zZm9ybWF0aW9uc1xuICogLSBEZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nXG4gKiAtIFN0YWJsZSByZWZlcmVuY2VzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIG51bWJlciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFnZVwiXG4gKiAgIGxhYmVsPVwiQWdlXCJcbiAqICAgZmllbGRUeXBlPVwibnVtYmVyXCJcbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdBZ2UgaXMgcmVxdWlyZWQnLCBtaW46IHsgdmFsdWU6IDAsIG1lc3NhZ2U6ICdBZ2UgbXVzdCBiZSBwb3NpdGl2ZScgfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImVtYWlsXCJcbiAqICAgbGFiZWw9XCJFbWFpbFwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWwgYWRkcmVzc1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBydWxlcz17e1xuICogICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICogICAgIHBhdHRlcm46IHsgdmFsdWU6IC9cXFMrQFxcUytcXC5cXFMrLywgbWVzc2FnZTogJ0ludmFsaWQgZW1haWwnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicHJpY2VcIlxuICogICBsYWJlbD1cIlByaWNlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPyBgJCR7dmFsdWV9YCA6ICcnLFxuICogICAgIG91dHB1dDogKGV2ZW50KSA9PiBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKCckJywgJycpKSB8fCBudWxsXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGVycm9yIHBhcnNpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gKiAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiAoXG4gKiAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICdyZWQnIH19PlxuICogICAgICAgXHUyNkEwXHVGRTBGIHtlcnJvci5tZXNzYWdlfVxuICogICAgIDwvc3Bhbj5cbiAqICAgKX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRGaWVsZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogVGV4dEZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBHcmlkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbiAgVGltZVBpY2tlclByb3BzLFxuICBUaW1lUGlja2VyU2xvdFByb3BzLFxuICBUaW1lVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IHVzZUxvY2FsaXphdGlvbkNvbnRleHQgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFscyc7XG5pbXBvcnQgeyByZW5kZXJUaW1lVmlld0Nsb2NrIH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycy90aW1lVmlld1JlbmRlcmVycyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRQYXRoLFxuICBQYXRoVmFsdWUsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkVmFsdWVzLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZVRyYW5zZm9ybSB9IGZyb20gJ0AvaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE9yVmFsdWUgfSBmcm9tICdAL3R5cGVzJztcbmltcG9ydCB7IHJlYWRWYWx1ZUFzRGF0ZSB9IGZyb20gJ0AvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuPiB7XG4gIG5hbWU6IFROYW1lO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IgfCBUaW1lVmFsaWRhdGlvbkVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGlucHV0UHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICBoZWxwZXJUZXh0PzogVGV4dEZpZWxkUHJvcHNbJ2hlbHBlclRleHQnXTtcbiAgbGFiZWw/OiBSZWFjdE5vZGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0ZXh0UmVhZE9ubHk/OiBib29sZWFuO1xuICBzbG90UHJvcHM/OiBPbWl0PFxuICAgIFRpbWVQaWNrZXJTbG90UHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3RleHRGaWVsZCdcbiAgPjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRWYWx1ZSB8IG51bGw7XG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbiAgdGltZVBpY2tlclByb3BzPzogT21pdDxcbiAgICBUaW1lUGlja2VyUHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3ZhbHVlJyB8ICdzbG90UHJvcHMnXG4gID47XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGltZVBpY2tlckVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihwcm9wczogVGltZVBpY2tlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIHJlcXVpcmVkLFxuICAgIGlucHV0UHJvcHMsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBzbG90UHJvcHMsXG4gICAgdGltZVBpY2tlclByb3BzID0ge30sXG4gICAgdHJhbnNmb3JtLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGFkYXB0ZXIgPSB1c2VMb2NhbGl6YXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7IGRpc2FibGVkLCBpbnB1dFJlZiwgb25DbG9zZSwgLi4ucmVzdFRpbWVQaWNrZXJQcm9wcyB9ID1cbiAgICB0aW1lUGlja2VyUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuICB9KTtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZSB8IG51bGw+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IG5ld1ZhbHVlID0+IHJlYWRWYWx1ZUFzRGF0ZShhZGFwdGVyLCBuZXdWYWx1ZSksXG4gICAgICBvdXRwdXQ6IGRhdGEgPT4ge1xuICAgICAgICBpZiAoIWRheWpzLmlzRGF5anMoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihmaWVsZC5yZWYsIGlucHV0UmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUaW1lUGlja2VyXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGltZVBpY2tlclByb3BzfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb3Blbj17b3Blbn1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHZpZXdSZW5kZXJlcnM9e3tcbiAgICAgICAgaG91cnM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICAgIG1pbnV0ZXM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICAgIHNlY29uZHM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICB9fVxuICAgICAgb25PcGVuPXsoKSA9PiBzZXRPcGVuKHRydWUpfVxuICAgICAgb25DbG9zZT17KC4uLmFyZ3MpID0+IHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBvbkNsb3NlPy4oLi4uYXJncyk7XG4gICAgICB9fVxuICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIHRpbWVQaWNrZXJQcm9wcy5vbkNoYW5nZT8uKG5ld1ZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH19XG4gICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgLi4uc2xvdFByb3BzLFxuICAgICAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NsZWFyJywgJ2NhbmNlbCcsICdhY2NlcHQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgIGN1cnNvcjogZGlzYWJsZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25CbHVyOiAoXG4gICAgICAgICAgICBldmVudDogUmVhY3QuRm9jdXNFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICAgICAgaW5wdXRQcm9wcz8ub25CbHVyPy4oZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICEhZXJyb3IsXG4gICAgICAgICAgaGVscGVyVGV4dDogZXJyb3JcbiAgICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgOiBpbnB1dFByb3BzPy5oZWxwZXJUZXh0IHx8IHJlc3QuaGVscGVyVGV4dCxcbiAgICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0TW9kZTogJ25vbmUnLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wcz8uaW5wdXRQcm9wcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRpbWVQaWNrZXJFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblRpbWVQaWNrZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1RpbWVQaWNrZXJFbGVtZW50JztcbiIsICJpbXBvcnQge1xyXG4gIEJveCxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtSGVscGVyVGV4dCxcclxuICBGb3JtTGFiZWwsXHJcbiAgR3JpZCxcclxuICBTbGlkZXIsXHJcbiAgdHlwZSBHcmlkUHJvcHMsXHJcbiAgdHlwZSBTbGlkZXJQcm9wcyxcclxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IHR5cGUgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZEVycm9yLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcclxuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcblxyXG4vKipcclxuICogUHJvcHMgZm9yIHRoZSBTbGlkZXJFbGVtZW50IGNvbXBvbmVudC5cclxuICpcclxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXHJcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVyRWxlbWVudFByb3BzPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+IHtcclxuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGZvcm0gKi9cclxuICBuYW1lOiBUTmFtZTtcclxuICAvKiogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybSAqL1xyXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XHJcbiAgLyoqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0ICovXHJcbiAgbGFiZWw/OiBSZWFjdE5vZGU7XHJcbiAgLyoqIEhlbHBlciB0ZXh0IHRvIGRpc3BsYXkgYmVsb3cgdGhlIHNsaWRlciAqL1xyXG4gIGhlbHBlclRleHQ/OiBSZWFjdE5vZGU7XHJcbiAgLyoqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlciAqL1xyXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcclxuICAvKiogTWluaW11bSB2YWx1ZSAqL1xyXG4gIG1pbj86IG51bWJlcjtcclxuICAvKiogTWF4aW11bSB2YWx1ZSAqL1xyXG4gIG1heD86IG51bWJlcjtcclxuICAvKiogU3RlcCBpbmNyZW1lbnQgKi9cclxuICBzdGVwPzogbnVtYmVyO1xyXG4gIC8qKiBTaG93IG1hcmtzIG9uIHRoZSBzbGlkZXIgKi9cclxuICBtYXJrcz86IGJvb2xlYW4gfCB7IHZhbHVlOiBudW1iZXI7IGxhYmVsPzogc3RyaW5nIH1bXTtcclxuICAvKiogV2hldGhlciB0aGUgZmllbGQgaXMgcmVxdWlyZWQgKi9cclxuICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGRpc2FibGVkICovXHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgKi9cclxuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XHJcbiAgLyoqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIHRoZSBTbGlkZXIgY29tcG9uZW50ICovXHJcbiAgc2xpZGVyUHJvcHM/OiBPbWl0PFNsaWRlclByb3BzLCAndmFsdWUnIHwgJ29uQ2hhbmdlJyB8ICdtaW4nIHwgJ21heCcgfCAnc3RlcCcgfCAnbWFya3MnIHwgJ2Rpc2FibGVkJz47XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFNsaWRlckVsZW1lbnRDb3JlPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHByb3BzOiBPbWl0PFNsaWRlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPiwgJ2dyaWRQcm9wcyc+KSB7XHJcbiAgY29uc3Qge1xyXG4gICAgbmFtZSxcclxuICAgIGNvbnRyb2wsXHJcbiAgICBsYWJlbCxcclxuICAgIGhlbHBlclRleHQsXHJcbiAgICBwYXJzZUVycm9yLFxyXG4gICAgbWluID0gMCxcclxuICAgIG1heCA9IDEwMCxcclxuICAgIHN0ZXAgPSAxLFxyXG4gICAgbWFya3MgPSBmYWxzZSxcclxuICAgIHJlcXVpcmVkID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgc2xpZGVyUHJvcHMgPSB7fSxcclxuICB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGZpZWxkLFxyXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxyXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcclxuICAgIG5hbWUsXHJcbiAgICBjb250cm9sLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IG51bGw7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Rm9ybUNvbnRyb2xcclxuICAgICAgZnVsbFdpZHRoXHJcbiAgICAgIG1hcmdpbj1cIm5vcm1hbFwiXHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgID5cclxuICAgICAge2xhYmVsICYmIDxGb3JtTGFiZWwgc3g9e3sgbWI6IDIgfX0+e2xhYmVsfTwvRm9ybUxhYmVsPn1cclxuICAgICAgPEJveCBzeD17eyBweDogMiB9fT5cclxuICAgICAgICA8U2xpZGVyXHJcbiAgICAgICAgICB7Li4uc2xpZGVyUHJvcHN9XHJcbiAgICAgICAgICByZWY9e2ZpZWxkLnJlZn1cclxuICAgICAgICAgIG5hbWU9e2ZpZWxkLm5hbWV9XHJcbiAgICAgICAgICB2YWx1ZT17dHlwZW9mIGZpZWxkLnZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkLnZhbHVlIDogbWlufVxyXG4gICAgICAgICAgb25DaGFuZ2U9eyhfLCBuZXdWYWx1ZSkgPT4gZmllbGQub25DaGFuZ2UobmV3VmFsdWUpfVxyXG4gICAgICAgICAgb25CbHVyPXtmaWVsZC5vbkJsdXJ9XHJcbiAgICAgICAgICBtaW49e21pbn1cclxuICAgICAgICAgIG1heD17bWF4fVxyXG4gICAgICAgICAgc3RlcD17c3RlcH1cclxuICAgICAgICAgIG1hcmtzPXttYXJrc31cclxuICAgICAgICAgIHZhbHVlTGFiZWxEaXNwbGF5PVwiYXV0b1wiXHJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC9Cb3g+XHJcbiAgICAgIHsoZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHQpICYmIChcclxuICAgICAgICA8Rm9ybUhlbHBlclRleHQ+e2Vycm9yTWVzc2FnZSB8fCBoZWxwZXJUZXh0fTwvRm9ybUhlbHBlclRleHQ+XHJcbiAgICAgICl9XHJcbiAgICA8L0Zvcm1Db250cm9sPlxyXG4gICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBTbGlkZXIgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBGZWF0dXJlczpcclxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxyXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XHJcbiAqIC0gQ3VzdG9taXphYmxlIG1pbi9tYXgvc3RlcCB2YWx1ZXNcclxuICogLSBPcHRpb25hbCBtYXJrcyBkaXNwbGF5XHJcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHN4XHJcbiAqIDxTbGlkZXJFbGVtZW50XHJcbiAqICAgbmFtZT1cInJhdGluZ1wiXHJcbiAqICAgY29udHJvbD17Y29udHJvbH1cclxuICogICBsYWJlbD1cIlJhdGluZ1wiXHJcbiAqICAgbWluPXswfVxyXG4gKiAgIG1heD17MTB9XHJcbiAqICAgc3RlcD17MX1cclxuICogICBtYXJrc1xyXG4gKiAvPlxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBTbGlkZXJFbGVtZW50ID0gPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHtcclxuICBncmlkUHJvcHMgPSB7fSxcclxuICAuLi5wcm9wc1xyXG59OiBTbGlkZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XHJcbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxyXG4gICAgPC9HcmlkPlxyXG4gICk7XHJcbn07XHJcblxyXG5TbGlkZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1NsaWRlckVsZW1lbnQnO1xyXG4iLCAiaW1wb3J0IHtcclxuICBCb3gsXHJcbiAgQnV0dG9uLFxyXG4gIENoaXAsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUhlbHBlclRleHQsXHJcbiAgRm9ybUxhYmVsLFxyXG4gIEdyaWQsXHJcbiAgU3RhY2ssXHJcbiAgdHlwZSBHcmlkUHJvcHMsXHJcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCBDbG91ZFVwbG9hZEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DbG91ZFVwbG9hZCc7XHJcbmltcG9ydCB0eXBlIHsgQ2hhbmdlRXZlbnQsIFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkRXJyb3IsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xyXG5pbXBvcnQgeyB1c2VDb250cm9sbGVyLCB1c2VGb3JtQ29udGV4dCB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcblxyXG4vKipcclxuICogUHJvcHMgZm9yIHRoZSBGaWxlVXBsb2FkRWxlbWVudCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxyXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVVcGxvYWRFbGVtZW50UHJvcHM8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ge1xyXG4gIC8qKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybSAqL1xyXG4gIG5hbWU6IFROYW1lO1xyXG4gIC8qKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtICovXHJcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcclxuICAvKiogVGhlIGlucHV0IGxhYmVsIHRleHQgKi9cclxuICBsYWJlbD86IFJlYWN0Tm9kZTtcclxuICAvKiogSGVscGVyIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgdXBsb2FkICovXHJcbiAgaGVscGVyVGV4dD86IFJlYWN0Tm9kZTtcclxuICAvKiogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyICovXHJcbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkICovXHJcbiAgbWF4RmlsZXM/OiBudW1iZXI7XHJcbiAgLyoqIE1heGltdW0gZmlsZSBzaXplIGluIE1CICovXHJcbiAgbWF4U2l6ZU1CPzogbnVtYmVyO1xyXG4gIC8qKiBBbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyAoZS5nLiwgWycuanBnJywgJy5wbmcnLCAnLnBkZiddKSAqL1xyXG4gIGFsbG93ZWRFeHRlbnNpb25zPzogc3RyaW5nW107XHJcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIHJlcXVpcmVkICovXHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBmaWVsZCBpcyBkaXNhYmxlZCAqL1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAvKiogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyICovXHJcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xyXG4gIC8qKiBCdXR0b24gdGV4dCAqL1xyXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIEZpbGVVcGxvYWRFbGVtZW50Q29yZTxcclxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxyXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcclxuPihwcm9wczogT21pdDxGaWxlVXBsb2FkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+LCAnZ3JpZFByb3BzJz4pIHtcclxuICBjb25zdCB7XHJcbiAgICBuYW1lLFxyXG4gICAgY29udHJvbCxcclxuICAgIGxhYmVsLFxyXG4gICAgaGVscGVyVGV4dCxcclxuICAgIHBhcnNlRXJyb3IsXHJcbiAgICBtYXhGaWxlcyA9IDUsXHJcbiAgICBtYXhTaXplTUIgPSAxMCxcclxuICAgIGFsbG93ZWRFeHRlbnNpb25zID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLnBkZicsICcuZG9jJywgJy5kb2N4JywgJy54bHMnLCAnLnhsc3gnXSxcclxuICAgIHJlcXVpcmVkID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgYnV0dG9uVGV4dCA9ICdDaG9vc2UgRmlsZXMnLFxyXG4gIH0gPSBwcm9wcztcclxuXHJcbiAgY29uc3QgeyBzZXRFcnJvciwgY2xlYXJFcnJvcnMgfSA9IHVzZUZvcm1Db250ZXh0KCk7XHJcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICBjb25zdCB7XHJcbiAgICBmaWVsZCxcclxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcclxuICB9ID0gdXNlQ29udHJvbGxlcih7XHJcbiAgICBuYW1lLFxyXG4gICAgY29udHJvbCxcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBbXTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdGVGaWxlcyA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpOiBGaWxlW10gfCBzdHJpbmcgPT4ge1xyXG4gICAgICBpZiAoIWZpbGVMaXN0IHx8IGZpbGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA+IG1heEZpbGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGBNYXhpbXVtICR7bWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhTaXplQnl0ZXMgPSBtYXhTaXplTUIgKiAxMDI0ICogMTAyNDtcclxuICAgICAgY29uc3QgdmFsaWRGaWxlczogRmlsZVtdID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVMaXN0W2ldO1xyXG5cclxuICAgICAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZUJ5dGVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBleGNlZWRzICR7bWF4U2l6ZU1CfU1CIHNpemUgbGltaXRgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gJy4nICsgZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy5pbmNsdWRlcyhleHRlbnNpb24pKSB7XHJcbiAgICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBoYXMgaW52YWxpZCBleHRlbnNpb24uIEFsbG93ZWQ6ICR7YWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCAnKX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFsaWRGaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRGaWxlcztcclxuICAgIH0sXHJcbiAgICBbbWF4RmlsZXMsIG1heFNpemVNQiwgYWxsb3dlZEV4dGVuc2lvbnNdXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUZpbGVzKGV2ZW50LnRhcmdldC5maWxlcyk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBzZXRFcnJvcihuYW1lLCB7IHR5cGU6ICd2YWxpZGF0aW9uJywgbWVzc2FnZTogcmVzdWx0IH0pO1xyXG4gICAgICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGVhckVycm9ycyhuYW1lKTtcclxuICAgICAgZmllbGQub25DaGFuZ2UocmVzdWx0KTtcclxuICAgIH0sXHJcbiAgICBbdmFsaWRhdGVGaWxlcywgc2V0RXJyb3IsIGNsZWFyRXJyb3JzLCBuYW1lLCBmaWVsZF1cclxuICApO1xyXG5cclxuICBjb25zdCBoYW5kbGVSZW1vdmVGaWxlID0gdXNlQ2FsbGJhY2soXHJcbiAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBuZXdGaWxlcyA9IGZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgICBmaWVsZC5vbkNoYW5nZShuZXdGaWxlcyk7XHJcblxyXG4gICAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgW2ZpbGVzLCBmaWVsZF1cclxuICApO1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IG51bGw7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Rm9ybUNvbnRyb2xcclxuICAgICAgZnVsbFdpZHRoXHJcbiAgICAgIG1hcmdpbj1cIm5vcm1hbFwiXHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgID5cclxuICAgICAge2xhYmVsICYmIDxGb3JtTGFiZWwgc3g9e3sgbWI6IDEgfX0+e2xhYmVsfTwvRm9ybUxhYmVsPn1cclxuICAgICAgPEJveD5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgY29tcG9uZW50PVwibGFiZWxcIlxyXG4gICAgICAgICAgc3RhcnRJY29uPXs8Q2xvdWRVcGxvYWRJY29uIC8+fVxyXG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGZpbGVzLmxlbmd0aCA+PSBtYXhGaWxlc31cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7YnV0dG9uVGV4dH1cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cclxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgaGlkZGVuXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICB7ZmlsZXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8U3RhY2sgZGlyZWN0aW9uPVwicm93XCIgc3BhY2luZz17MX0gZmxleFdyYXA9XCJ3cmFwXCIgc3g9e3sgbXQ6IDIgfX0+XHJcbiAgICAgICAgICAgIHtmaWxlcy5tYXAoKGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIpID0+IChcclxuICAgICAgICAgICAgICA8Q2hpcFxyXG4gICAgICAgICAgICAgICAga2V5PXtgJHtmaWxlLm5hbWV9LSR7aW5kZXh9YH1cclxuICAgICAgICAgICAgICAgIGxhYmVsPXtgJHtmaWxlLm5hbWV9ICgkeyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQilgfVxyXG4gICAgICAgICAgICAgICAgb25EZWxldGU9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogKCkgPT4gaGFuZGxlUmVtb3ZlRmlsZShpbmRleCl9XHJcbiAgICAgICAgICAgICAgICBzeD17eyBtYjogMSB9fVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgPC9TdGFjaz5cclxuICAgICAgICApfVxyXG4gICAgICA8L0JveD5cclxuICAgICAgeyhlcnJvck1lc3NhZ2UgfHwgaGVscGVyVGV4dCkgJiYgKFxyXG4gICAgICAgIDxGb3JtSGVscGVyVGV4dD57ZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHR9PC9Gb3JtSGVscGVyVGV4dD5cclxuICAgICAgKX1cclxuICAgIDwvRm9ybUNvbnRyb2w+XHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIEZpbGUgVXBsb2FkIGNvbXBvbmVudC5cclxuICpcclxuICogRmVhdHVyZXM6XHJcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cclxuICogLSBNdWx0aXBsZSBmaWxlIHN1cHBvcnRcclxuICogLSBGaWxlIHNpemUgdmFsaWRhdGlvblxyXG4gKiAtIEZpbGUgdHlwZSB2YWxpZGF0aW9uXHJcbiAqIC0gVmlzdWFsIGZpbGUgbGlzdCB3aXRoIHJlbW92ZSBjYXBhYmlsaXR5XHJcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHN4XHJcbiAqIDxGaWxlVXBsb2FkRWxlbWVudFxyXG4gKiAgIG5hbWU9XCJkb2N1bWVudHNcIlxyXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XHJcbiAqICAgbGFiZWw9XCJVcGxvYWQgRG9jdW1lbnRzXCJcclxuICogICBtYXhGaWxlcz17M31cclxuICogICBtYXhTaXplTUI9ezV9XHJcbiAqICAgYWxsb3dlZEV4dGVuc2lvbnM9e1snLnBkZicsICcuZG9jJywgJy5kb2N4J119XHJcbiAqIC8+XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWRFbGVtZW50ID0gPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHtcclxuICBncmlkUHJvcHMgPSB7fSxcclxuICAuLi5wcm9wc1xyXG59OiBGaWxlVXBsb2FkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KTogUmVhY3RFbGVtZW50ID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxyXG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cclxuICAgIDwvR3JpZD5cclxuICApO1xyXG59O1xyXG5cclxuRmlsZVVwbG9hZEVsZW1lbnQuZGlzcGxheU5hbWUgPSAnRmlsZVVwbG9hZEVsZW1lbnQnO1xyXG4iLCAiaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHR5cGUgeyBUZXh0RmllbGRQcm9wcywgR3JpZFByb3BzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IFRleHRGaWVsZCwgSW5wdXRBZG9ybm1lbnQsIEdyaWQgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZEVycm9yLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcclxuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcbmltcG9ydCB7IENvdW50cnlTZWxlY3RvciB9IGZyb20gJy4vQ291bnRyeVNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ09VTlRSSUVTLCBwYXJzZUUxNjRDb3VudHJ5LCBwYXJzZUUxNjRMb2NhbE51bWJlciB9IGZyb20gJy4vY291bnRyaWVzJztcclxuaW1wb3J0IHR5cGUgeyBDb3VudHJ5RGF0YSB9IGZyb20gJy4vY291bnRyaWVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGhvbmVOdW1iZXJFbGVtZW50UHJvcHM8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ge1xyXG4gIC8qKiBGaWVsZCBuYW1lIGluIHRoZSBmb3JtICovXHJcbiAgbmFtZTogVE5hbWU7XHJcbiAgLyoqIFJIRiBjb250cm9sIGluc3RhbmNlICovXHJcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcclxuICAvKiogSW5wdXQgbGFiZWwgKi9cclxuICBsYWJlbD86IHN0cmluZztcclxuICAvKiogSW5wdXQgcGxhY2Vob2xkZXIgKi9cclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICAvKipcclxuICAgKiBEZWZhdWx0IGNvdW50cnkgSVNPIDMxNjYtMSBhbHBoYS0yIGNvZGUgc2hvd24gd2hlbiB0aGUgZmllbGQgaXMgZW1wdHkuXHJcbiAgICogQGRlZmF1bHRWYWx1ZSAnVVMnXHJcbiAgICovXHJcbiAgZGVmYXVsdENvdW50cnk/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQ291bnRyeSBjb2RlcyB0byBzaG93IGZpcnN0IGluIHRoZSBwaWNrZXIgbGlzdC5cclxuICAgKiBAZXhhbXBsZSBbJ1VTJywgJ0dCJywgJ0NBJ11cclxuICAgKi9cclxuICBwcmVmZXJyZWRDb3VudHJpZXM/OiBzdHJpbmdbXTtcclxuICAvKiogUmVzdHJpY3QgcGlja2VyIHRvIG9ubHkgdGhlc2UgY291bnRyeSBjb2Rlcy4gKi9cclxuICBvbmx5Q291bnRyaWVzPzogc3RyaW5nW107XHJcbiAgLyoqIEV4Y2x1ZGUgdGhlc2UgY291bnRyeSBjb2RlcyBmcm9tIHRoZSBwaWNrZXIuICovXHJcbiAgZXhjbHVkZUNvdW50cmllcz86IHN0cmluZ1tdO1xyXG4gIC8qKiBEaXNhYmxlIHRoZSBmaWVsZCAqL1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAvKiogU2hvdyByZXF1aXJlZCBhc3RlcmlzayAqL1xyXG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcclxuICAvKiogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSBvdXRlciB3cmFwcGVyICovXHJcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xyXG4gIC8qKiBDdXN0b20gZXJyb3IgcmVuZGVyZXIgKi9cclxuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XHJcbiAgLyoqIEFkZGl0aW9uYWwgcHJvcHMgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIE1VSSBUZXh0RmllbGQgKi9cclxuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJyB8ICd0eXBlJz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmREZWZhdWx0Q291bnRyeShjb2RlOiBzdHJpbmcpOiBDb3VudHJ5RGF0YSB7XHJcbiAgY29uc3QgdXBwZXIgPSBjb2RlLnRvVXBwZXJDYXNlKCk7XHJcbiAgcmV0dXJuIENPVU5UUklFUy5maW5kKChjKSA9PiBjLmNvZGUgPT09IHVwcGVyKSA/PyBDT1VOVFJJRVMuZmluZCgoYykgPT4gYy5jb2RlID09PSAnVVMnKSE7XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFBob25lTnVtYmVyRWw8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ocHJvcHM6IFBob25lTnVtYmVyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XHJcbiAgY29uc3Qge1xyXG4gICAgbmFtZSxcclxuICAgIGNvbnRyb2wsXHJcbiAgICBsYWJlbCxcclxuICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgZGVmYXVsdENvdW50cnkgPSAnVVMnLFxyXG4gICAgcHJlZmVycmVkQ291bnRyaWVzLFxyXG4gICAgb25seUNvdW50cmllcyxcclxuICAgIGV4Y2x1ZGVDb3VudHJpZXMsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcclxuICAgIHBhcnNlRXJyb3IsXHJcbiAgICB0ZXh0RmllbGRQcm9wcyxcclxuICB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGZpZWxkLFxyXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxyXG4gIH0gPSB1c2VDb250cm9sbGVyKHsgbmFtZSwgY29udHJvbCB9KTtcclxuXHJcbiAgY29uc3QgW3NlbGVjdGVkQ291bnRyeSwgc2V0U2VsZWN0ZWRDb3VudHJ5XSA9IHVzZVN0YXRlPENvdW50cnlEYXRhPigoKSA9PlxyXG4gICAgZmluZERlZmF1bHRDb3VudHJ5KGRlZmF1bHRDb3VudHJ5KVxyXG4gICk7XHJcbiAgY29uc3QgW2xvY2FsTnVtYmVyLCBzZXRMb2NhbE51bWJlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmllbGQudmFsdWUgY2hhbmdlIG9yaWdpbmF0ZWQgZnJvbSBvdXIgb3duIGhhbmRsZXJzLlxyXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHVzZUVmZmVjdCBzaG91bGQgc2tpcCByZXNldHRpbmcgaW50ZXJuYWwgc3RhdGUgc28gdGhhdDpcclxuICAgKiAgLSBUeXBpbmcgZGlnaXRzIGRvZXNuJ3QgcmVzZXQgc2VsZWN0ZWRDb3VudHJ5IHRvIGRlZmF1bHRcclxuICAgKiAgLSBDbGVhcmluZyB0aGUgbnVtYmVyIGlucHV0IGRvZXNuJ3QgcmVzZXQgc2VsZWN0ZWRDb3VudHJ5IHRvIGRlZmF1bHRcclxuICAgKiBPbmx5IGV4dGVybmFsIGNoYW5nZXMgKGUuZy4gZm9ybS5yZXNldCgpKSBzaG91bGQgdHJpZ2dlciBhIGZ1bGwgc3RhdGUgc3luYy5cclxuICAgKi9cclxuICBjb25zdCBpbnRlcm5hbENoYW5nZVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcblxyXG4gIC8vIFN5bmMgaW50ZXJuYWwgc3RhdGUgd2hlbiBSSEYgdmFsdWUgY2hhbmdlcyBleHRlcm5hbGx5IChlLmcuIGZvcm0ucmVzZXQoKSlcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKGludGVybmFsQ2hhbmdlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgaW50ZXJuYWxDaGFuZ2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47IC8vIE91ciBvd24gY2hhbmdlIFx1MjAxNCBkb24ndCBvdmVycmlkZSBpbnRlcm5hbCBzdGF0ZVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0ZXJuYWxWYWx1ZSA9IGZpZWxkLnZhbHVlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XHJcbiAgICBpZiAoIWV4dGVybmFsVmFsdWUgfHwgZXh0ZXJuYWxWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgLy8gRXh0ZXJuYWwgY2xlYXIgKGUuZy4gZm9ybS5yZXNldCgpKSBcdTIwMTQgcmVzZXQgdG8gZGVmYXVsdCBjb3VudHJ5ICsgZW1wdHkgbnVtYmVyXHJcbiAgICAgIHNldFNlbGVjdGVkQ291bnRyeShmaW5kRGVmYXVsdENvdW50cnkoZGVmYXVsdENvdW50cnkpKTtcclxuICAgICAgc2V0TG9jYWxOdW1iZXIoJycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGV4dGVybmFsVmFsdWUgPT09ICdzdHJpbmcnICYmIGV4dGVybmFsVmFsdWUuc3RhcnRzV2l0aCgnKycpKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcGFyc2VFMTY0Q291bnRyeShleHRlcm5hbFZhbHVlKTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWRDb3VudHJ5KG1hdGNoKTtcclxuICAgICAgICBzZXRMb2NhbE51bWJlcihwYXJzZUUxNjRMb2NhbE51bWJlcihleHRlcm5hbFZhbHVlLCBtYXRjaC5kaWFsQ29kZSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE5vIG1hdGNoIFx1MjAxNCByZXNldCB0byBkZWZhdWx0IGNvdW50cnksIHN0cmlwIGxlYWRpbmcgJysnXHJcbiAgICAgICAgc2V0U2VsZWN0ZWRDb3VudHJ5KGZpbmREZWZhdWx0Q291bnRyeShkZWZhdWx0Q291bnRyeSkpO1xyXG4gICAgICAgIHNldExvY2FsTnVtYmVyKGV4dGVybmFsVmFsdWUucmVwbGFjZSgvXlxcKy8sICcnKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIElmIHZhbHVlIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnKycgaXQncyBub3QgRS4xNjQgXHUyMDE0IGxlYXZlIGludGVybmFsIHN0YXRlIHVuY2hhbmdlZFxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcclxuICB9LCBbZmllbGQudmFsdWVdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlTnVtYmVyQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICBjb25zdCBkaWdpdHMgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgc2V0TG9jYWxOdW1iZXIoZGlnaXRzKTtcclxuICAgIGludGVybmFsQ2hhbmdlUmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgaWYgKGRpZ2l0cyA9PT0gJycpIHtcclxuICAgICAgZmllbGQub25DaGFuZ2UoJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmllbGQub25DaGFuZ2Uoc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlICsgZGlnaXRzKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDb3VudHJ5Q2hhbmdlID0gKGNvdW50cnk6IENvdW50cnlEYXRhKSA9PiB7XHJcbiAgICBzZXRTZWxlY3RlZENvdW50cnkoY291bnRyeSk7XHJcbiAgICAvLyBPbmx5IHVwZGF0ZSBSSEYgdmFsdWUgd2hlbiB0aGVyZSdzIGEgbG9jYWwgbnVtYmVyIHRvIGNvbWJpbmUgd2l0aC5cclxuICAgIC8vIFdoZW4gbG9jYWxOdW1iZXIgaXMgZW1wdHkgd2UgZGVsaWJlcmF0ZWx5IHNraXAgZmllbGQub25DaGFuZ2UoJycpIHRvIGF2b2lkXHJcbiAgICAvLyB0cmlnZ2VyaW5nIHRoZSB1c2VFZmZlY3QgKHdoaWNoIHdvdWxkIHJlc2V0IHNlbGVjdGVkQ291bnRyeSBiYWNrIHRvIGRlZmF1bHQpLlxyXG4gICAgaWYgKGxvY2FsTnVtYmVyICE9PSAnJykge1xyXG4gICAgICBpbnRlcm5hbENoYW5nZVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgICAgZmllbGQub25DaGFuZ2UoY291bnRyeS5kaWFsQ29kZSArIGxvY2FsTnVtYmVyKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvclxyXG4gICAgPyAocGFyc2VFcnJvciA/IHBhcnNlRXJyb3IoZXJyb3IpIDogZXJyb3IubWVzc2FnZSlcclxuICAgIDogdGV4dEZpZWxkUHJvcHM/LmhlbHBlclRleHQ7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8VGV4dEZpZWxkXHJcbiAgICAgIHsuLi50ZXh0RmllbGRQcm9wc31cclxuICAgICAgbGFiZWw9e2xhYmVsfVxyXG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgIHR5cGU9XCJ0ZWxcIlxyXG4gICAgICB2YWx1ZT17bG9jYWxOdW1iZXJ9XHJcbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVOdW1iZXJDaGFuZ2V9XHJcbiAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxyXG4gICAgICBpbnB1dFJlZj17ZmllbGQucmVmfVxyXG4gICAgICBmdWxsV2lkdGhcclxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxyXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICBoZWxwZXJUZXh0PXtlcnJvck1lc3NhZ2V9XHJcbiAgICAgIHNsb3RQcm9wcz17e1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBzdGFydEFkb3JubWVudDogKFxyXG4gICAgICAgICAgICA8SW5wdXRBZG9ybm1lbnQgcG9zaXRpb249XCJzdGFydFwiPlxyXG4gICAgICAgICAgICAgIDxDb3VudHJ5U2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZENvdW50cnl9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ291bnRyeUNoYW5nZX1cclxuICAgICAgICAgICAgICAgIHByZWZlcnJlZENvdW50cmllcz17cHJlZmVycmVkQ291bnRyaWVzfVxyXG4gICAgICAgICAgICAgICAgb25seUNvdW50cmllcz17b25seUNvdW50cmllc31cclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVDb3VudHJpZXM9e2V4Y2x1ZGVDb3VudHJpZXN9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9JbnB1dEFkb3JubWVudD5cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAuLi50ZXh0RmllbGRQcm9wcz8uc2xvdFByb3BzPy5pbnB1dCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRleHRGaWVsZFByb3BzPy5zbG90UHJvcHMsXHJcbiAgICAgIH19XHJcbiAgICAvPlxyXG4gICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBwaG9uZSBudW1iZXIgZmllbGQgd2l0aCBjb3VudHJ5IGNvZGUgc2VsZWN0b3IuXHJcbiAqXHJcbiAqIFN0b3JlcyB0aGUgdmFsdWUgYXMgYW4gRS4xNjQgc3RyaW5nIChlLmcuIGArMTU1NTEyMzQ1NjdgKS5cclxuICogV2hlbiB0aGUgbG9jYWwgbnVtYmVyIGlzIGVtcHR5IHRoZSBSSEYgdmFsdWUgaXMgYCcnYCwgc28gUmVxdWlyZWQgdmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzeFxyXG4gKiA8UGhvbmVOdW1iZXJFbGVtZW50XHJcbiAqICAgbmFtZT1cInBob25lXCJcclxuICogICBjb250cm9sPXtjb250cm9sfVxyXG4gKiAgIGxhYmVsPVwiUGhvbmUgTnVtYmVyXCJcclxuICogICBkZWZhdWx0Q291bnRyeT1cIlVTXCJcclxuICogICBwcmVmZXJyZWRDb3VudHJpZXM9e1snVVMnLCAnR0InLCAnQ0EnXX1cclxuICogICByZXF1aXJlZFxyXG4gKiAvPlxyXG4gKiBgYGBcclxuICpcclxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXHJcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBQaG9uZU51bWJlckVsZW1lbnQgPSA8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4oe1xyXG4gIGdyaWRQcm9wcyA9IHt9LFxyXG4gIC4uLnByb3BzXHJcbn06IFBob25lTnVtYmVyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cclxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XHJcbiAgICA8L0dyaWQ+XHJcbiAgKTtcclxufTtcclxuIiwgImltcG9ydCB0eXBlIHsgTW91c2VFdmVudCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgUG9wb3ZlcixcclxuICBUZXh0RmllbGQsXHJcbiAgTGlzdCxcclxuICBMaXN0SXRlbUJ1dHRvbixcclxuICBMaXN0SXRlbVRleHQsXHJcbiAgRGl2aWRlcixcclxuICBCb3gsXHJcbiAgSW5wdXRBZG9ybm1lbnQsXHJcbiAgVHlwb2dyYXBoeSxcclxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IEFycm93RHJvcERvd25JY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQXJyb3dEcm9wRG93bic7XHJcbmltcG9ydCBTZWFyY2hJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvU2VhcmNoJztcclxuaW1wb3J0IHR5cGUgeyBDb3VudHJ5RGF0YSB9IGZyb20gJy4vY291bnRyaWVzJztcclxuaW1wb3J0IHsgQ09VTlRSSUVTIH0gZnJvbSAnLi9jb3VudHJpZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb3VudHJ5U2VsZWN0b3JQcm9wcyB7XHJcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBjb3VudHJ5ICovXHJcbiAgdmFsdWU6IENvdW50cnlEYXRhO1xyXG4gIC8qKiBDYWxsZWQgd2hlbiB1c2VyIHBpY2tzIGEgY291bnRyeSAqL1xyXG4gIG9uQ2hhbmdlOiAoY291bnRyeTogQ291bnRyeURhdGEpID0+IHZvaWQ7XHJcbiAgLyoqIElTTyBjb2RlcyB0byBzaG93IGZpcnN0IGluIHRoZSBsaXN0IChlLmcuIFsnVVMnLCAnR0InLCAnQ0EnXSkgKi9cclxuICBwcmVmZXJyZWRDb3VudHJpZXM/OiBzdHJpbmdbXTtcclxuICAvKiogUmVzdHJpY3QgdG8gb25seSB0aGVzZSBJU08gY29kZXMgKi9cclxuICBvbmx5Q291bnRyaWVzPzogc3RyaW5nW107XHJcbiAgLyoqIEV4Y2x1ZGUgdGhlc2UgSVNPIGNvZGVzICovXHJcbiAgZXhjbHVkZUNvdW50cmllcz86IHN0cmluZ1tdO1xyXG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3RvciAqL1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvdW50cnkgY29kZSBzZWxlY3RvciB3aXRoIHNlYXJjaGFibGUgcG9wb3Zlci5cclxuICogUmVuZGVycyBhcyBhIGNvbXBhY3QgYnV0dG9uIHNob3dpbmcgZmxhZyArIGRpYWwgY29kZSArIGRyb3Bkb3duIGFycm93LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENvdW50cnlTZWxlY3Rvcih7XHJcbiAgdmFsdWUsXHJcbiAgb25DaGFuZ2UsXHJcbiAgcHJlZmVycmVkQ291bnRyaWVzID0gW10sXHJcbiAgb25seUNvdW50cmllcyxcclxuICBleGNsdWRlQ291bnRyaWVzLFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbn06IENvdW50cnlTZWxlY3RvclByb3BzKSB7XHJcbiAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgY29uc3QgbnVtYmVySW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XHJcblxyXG4gIGNvbnN0IG9wZW4gPSBCb29sZWFuKGFuY2hvckVsKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlT3BlbiA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgc2V0QW5jaG9yRWwoZS5jdXJyZW50VGFyZ2V0KTtcclxuICAgIHNldFNlYXJjaCgnJyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICBzZXRBbmNob3JFbChudWxsKTtcclxuICAgIHNldFNlYXJjaCgnJyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKGNvdW50cnk6IENvdW50cnlEYXRhKSA9PiB7XHJcbiAgICBvbkNoYW5nZShjb3VudHJ5KTtcclxuICAgIGhhbmRsZUNsb3NlKCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQnVpbGQgZmlsdGVyZWQgKyBzb3J0ZWQgbGlzdFxyXG4gIGNvbnN0IHsgcHJlZmVycmVkLCByZXN0IH0gPSB1c2VNZW1vKCgpID0+IHtcclxuICAgIGxldCBsaXN0ID0gQ09VTlRSSUVTO1xyXG5cclxuICAgIGlmIChvbmx5Q291bnRyaWVzICYmIG9ubHlDb3VudHJpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KG9ubHlDb3VudHJpZXMubWFwKChjKSA9PiBjLnRvVXBwZXJDYXNlKCkpKTtcclxuICAgICAgbGlzdCA9IGxpc3QuZmlsdGVyKChjKSA9PiBzZXQuaGFzKGMuY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleGNsdWRlQ291bnRyaWVzICYmIGV4Y2x1ZGVDb3VudHJpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KGV4Y2x1ZGVDb3VudHJpZXMubWFwKChjKSA9PiBjLnRvVXBwZXJDYXNlKCkpKTtcclxuICAgICAgbGlzdCA9IGxpc3QuZmlsdGVyKChjKSA9PiAhc2V0LmhhcyhjLmNvZGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKHNlYXJjaExvd2VyKSB7XHJcbiAgICAgIGxpc3QgPSBsaXN0LmZpbHRlcihcclxuICAgICAgICAoYykgPT5cclxuICAgICAgICAgIGMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSB8fFxyXG4gICAgICAgICAgYy5kaWFsQ29kZS5pbmNsdWRlcyhzZWFyY2hMb3dlcilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVmZXJyZWRTZXQgPSBuZXcgU2V0KHByZWZlcnJlZENvdW50cmllcy5tYXAoKGMpID0+IGMudG9VcHBlckNhc2UoKSkpO1xyXG4gICAgY29uc3QgcHJlZmVycmVkTGlzdCA9IHByZWZlcnJlZENvdW50cmllc1xyXG4gICAgICAubWFwKChjb2RlKSA9PiBsaXN0LmZpbmQoKGMpID0+IGMuY29kZSA9PT0gY29kZS50b1VwcGVyQ2FzZSgpKSlcclxuICAgICAgLmZpbHRlcigoYyk6IGMgaXMgQ291bnRyeURhdGEgPT4gYyAhPT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN0TGlzdCA9IGxpc3QuZmlsdGVyKChjKSA9PiAhcHJlZmVycmVkU2V0LmhhcyhjLmNvZGUpKTtcclxuXHJcbiAgICByZXR1cm4geyBwcmVmZXJyZWQ6IHByZWZlcnJlZExpc3QsIHJlc3Q6IHJlc3RMaXN0IH07XHJcbiAgfSwgW3NlYXJjaCwgb25seUNvdW50cmllcywgZXhjbHVkZUNvdW50cmllcywgcHJlZmVycmVkQ291bnRyaWVzXSk7XHJcblxyXG4gIGNvbnN0IHNob3dEaXZpZGVyID0gcHJlZmVycmVkLmxlbmd0aCA+IDAgJiYgcmVzdC5sZW5ndGggPiAwO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPEJ1dHRvblxyXG4gICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcclxuICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW59XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgIGRpc2FibGVFbGV2YXRpb25cclxuICAgICAgICBlbmRJY29uPXs8QXJyb3dEcm9wRG93bkljb24gLz59XHJcbiAgICAgICAgc3g9e3tcclxuICAgICAgICAgIG1pbldpZHRoOiAwLFxyXG4gICAgICAgICAgcHg6IDEsXHJcbiAgICAgICAgICBweTogMCxcclxuICAgICAgICAgIGNvbG9yOiAndGV4dC5wcmltYXJ5JyxcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxyXG4gICAgICAgICAgdGV4dFRyYW5zZm9ybTogJ25vbmUnLFxyXG4gICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXHJcbiAgICAgICAgICAnJjpob3Zlcic6IHsgYmFja2dyb3VuZENvbG9yOiAnYWN0aW9uLmhvdmVyJyB9LFxyXG4gICAgICAgIH19XHJcbiAgICAgID5cclxuICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgc3g9e3sgbXI6IDAuNSB9fT5cclxuICAgICAgICAgIHt2YWx1ZS5mbGFnfVxyXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8VHlwb2dyYXBoeSBjb21wb25lbnQ9XCJzcGFuXCIgdmFyaWFudD1cImJvZHkyXCI+XHJcbiAgICAgICAgICB7dmFsdWUuZGlhbENvZGV9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XHJcbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XHJcbiAgICAgICAgYW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XHJcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XHJcbiAgICAgICAgc2xvdFByb3BzPXt7XHJcbiAgICAgICAgICBwYXBlcjogeyBzeDogeyB3aWR0aDogMzAwLCBtYXhIZWlnaHQ6IDQwMCwgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9IH0sXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxCb3ggc3g9e3sgcDogMSwgYm9yZGVyQm90dG9tOiAxLCBib3JkZXJDb2xvcjogJ2RpdmlkZXInIH19PlxyXG4gICAgICAgICAgPFRleHRGaWVsZFxyXG4gICAgICAgICAgICBhdXRvRm9jdXNcclxuICAgICAgICAgICAgZnVsbFdpZHRoXHJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvdW50cnkgb3IgY29kZVx1MjAyNlwiXHJcbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2h9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgc2xvdFByb3BzPXt7XHJcbiAgICAgICAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0QWRvcm5tZW50OiAoXHJcbiAgICAgICAgICAgICAgICAgIDxJbnB1dEFkb3JubWVudCBwb3NpdGlvbj1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gZm9udFNpemU9XCJzbWFsbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvSW5wdXRBZG9ybm1lbnQ+XHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvQm94PlxyXG5cclxuICAgICAgICA8TGlzdCBkZW5zZSBkaXNhYmxlUGFkZGluZyBzeD17eyBvdmVyZmxvd1k6ICdhdXRvJywgZmxleDogMSB9fT5cclxuICAgICAgICAgIHtwcmVmZXJyZWQubWFwKChjb3VudHJ5KSA9PiAoXHJcbiAgICAgICAgICAgIDxMaXN0SXRlbUJ1dHRvblxyXG4gICAgICAgICAgICAgIGtleT17YHByZWZlcnJlZC0ke2NvdW50cnkuY29kZX1gfVxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkPXtjb3VudHJ5LmNvZGUgPT09IHZhbHVlLmNvZGV9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KGNvdW50cnkpfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dFxyXG4gICAgICAgICAgICAgICAgcHJpbWFyeT17XHJcbiAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntjb3VudHJ5LmZsYWd9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntjb3VudHJ5Lm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9XCJzcGFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjYXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwidGV4dC5zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3g9e3sgbWw6ICdhdXRvJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHJ5LmRpYWxDb2RlfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9MaXN0SXRlbUJ1dHRvbj5cclxuICAgICAgICAgICkpfVxyXG5cclxuICAgICAgICAgIHtzaG93RGl2aWRlciAmJiA8RGl2aWRlciAvPn1cclxuXHJcbiAgICAgICAgICB7cmVzdC5tYXAoKGNvdW50cnkpID0+IChcclxuICAgICAgICAgICAgPExpc3RJdGVtQnV0dG9uXHJcbiAgICAgICAgICAgICAga2V5PXtjb3VudHJ5LmNvZGV9XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvdW50cnkuY29kZSA9PT0gdmFsdWUuY29kZX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QoY291bnRyeSl9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8TGlzdEl0ZW1UZXh0XHJcbiAgICAgICAgICAgICAgICBwcmltYXJ5PXtcclxuICAgICAgICAgICAgICAgICAgPEJveCBzeD17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMSwgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2NvdW50cnkuZmxhZ308L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2NvdW50cnkubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD1cInNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNhcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJ0ZXh0LnNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzeD17eyBtbDogJ2F1dG8nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge2NvdW50cnkuZGlhbENvZGV9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L0xpc3RJdGVtQnV0dG9uPlxyXG4gICAgICAgICAgKSl9XHJcblxyXG4gICAgICAgICAge3ByZWZlcnJlZC5sZW5ndGggPT09IDAgJiYgcmVzdC5sZW5ndGggPT09IDAgJiYgKFxyXG4gICAgICAgICAgICA8TGlzdEl0ZW1CdXR0b24gZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgICAgPExpc3RJdGVtVGV4dCBwcmltYXJ5PVwiTm8gY291bnRyaWVzIGZvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9MaXN0SXRlbUJ1dHRvbj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9MaXN0PlxyXG4gICAgICA8L1BvcG92ZXI+XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIENvdW50cnlEYXRhIHtcclxuICBjb2RlOiBzdHJpbmc7ICAgICAvLyBJU08gMzE2Ni0xIGFscGhhLTIsIGUuZy4gJ1VTJ1xyXG4gIGRpYWxDb2RlOiBzdHJpbmc7IC8vIEUuMTY0IHByZWZpeCwgZS5nLiAnKzEnXHJcbiAgbmFtZTogc3RyaW5nOyAgICAgLy8gRGlzcGxheSBuYW1lLCBlLmcuICdVbml0ZWQgU3RhdGVzJ1xyXG4gIGZsYWc6IHN0cmluZzsgICAgIC8vIEZsYWcgZW1vamksIGUuZy4gJ1x1RDgzQ1x1RERGQVx1RDgzQ1x1RERGOCdcclxufVxyXG5cclxuLyoqIEdlbmVyYXRlcyBhIFVuaWNvZGUgZmxhZyBlbW9qaSBmcm9tIGEgMi1sZXR0ZXIgSVNPIGNvdW50cnkgY29kZS4gKi9cclxuZnVuY3Rpb24gZ2V0RmxhZyhjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBjb2RlXHJcbiAgICAudG9VcHBlckNhc2UoKVxyXG4gICAgLnNwbGl0KCcnKVxyXG4gICAgLm1hcCgoYykgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoYy5jaGFyQ29kZUF0KDApIC0gNjUgKyAweDFmMWU2KSlcclxuICAgIC5qb2luKCcnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJhdyBjb3VudHJ5IGRhdGE6IFtJU08gY29kZSwgZGlhbCBjb2RlLCBkaXNwbGF5IG5hbWVdXHJcbiAqIFNvcnRlZCBhbHBoYWJldGljYWxseSBieSBuYW1lICh+MjQwIGVudHJpZXMpLlxyXG4gKi9cclxuY29uc3QgUkFXOiBBcnJheTxbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10+ID0gW1xyXG4gIFsnQUYnLCAnKzkzJywgJ0FmZ2hhbmlzdGFuJ10sXHJcbiAgWydBTCcsICcrMzU1JywgJ0FsYmFuaWEnXSxcclxuICBbJ0RaJywgJysyMTMnLCAnQWxnZXJpYSddLFxyXG4gIFsnQUQnLCAnKzM3NicsICdBbmRvcnJhJ10sXHJcbiAgWydBTycsICcrMjQ0JywgJ0FuZ29sYSddLFxyXG4gIFsnQUknLCAnKzEyNjQnLCAnQW5ndWlsbGEnXSxcclxuICBbJ0FHJywgJysxMjY4JywgJ0FudGlndWEgYW5kIEJhcmJ1ZGEnXSxcclxuICBbJ0FSJywgJys1NCcsICdBcmdlbnRpbmEnXSxcclxuICBbJ0FNJywgJyszNzQnLCAnQXJtZW5pYSddLFxyXG4gIFsnQVcnLCAnKzI5NycsICdBcnViYSddLFxyXG4gIFsnQVUnLCAnKzYxJywgJ0F1c3RyYWxpYSddLFxyXG4gIFsnQVQnLCAnKzQzJywgJ0F1c3RyaWEnXSxcclxuICBbJ0FaJywgJys5OTQnLCAnQXplcmJhaWphbiddLFxyXG4gIFsnQlMnLCAnKzEyNDInLCAnQmFoYW1hcyddLFxyXG4gIFsnQkgnLCAnKzk3MycsICdCYWhyYWluJ10sXHJcbiAgWydCRCcsICcrODgwJywgJ0JhbmdsYWRlc2gnXSxcclxuICBbJ0JCJywgJysxMjQ2JywgJ0JhcmJhZG9zJ10sXHJcbiAgWydCWScsICcrMzc1JywgJ0JlbGFydXMnXSxcclxuICBbJ0JFJywgJyszMicsICdCZWxnaXVtJ10sXHJcbiAgWydCWicsICcrNTAxJywgJ0JlbGl6ZSddLFxyXG4gIFsnQkonLCAnKzIyOScsICdCZW5pbiddLFxyXG4gIFsnQk0nLCAnKzE0NDEnLCAnQmVybXVkYSddLFxyXG4gIFsnQlQnLCAnKzk3NScsICdCaHV0YW4nXSxcclxuICBbJ0JPJywgJys1OTEnLCAnQm9saXZpYSddLFxyXG4gIFsnQkEnLCAnKzM4NycsICdCb3NuaWEgYW5kIEhlcnplZ292aW5hJ10sXHJcbiAgWydCVycsICcrMjY3JywgJ0JvdHN3YW5hJ10sXHJcbiAgWydCUicsICcrNTUnLCAnQnJhemlsJ10sXHJcbiAgWydWRycsICcrMTI4NCcsICdCcml0aXNoIFZpcmdpbiBJc2xhbmRzJ10sXHJcbiAgWydCTicsICcrNjczJywgJ0JydW5laSddLFxyXG4gIFsnQkcnLCAnKzM1OScsICdCdWxnYXJpYSddLFxyXG4gIFsnQkYnLCAnKzIyNicsICdCdXJraW5hIEZhc28nXSxcclxuICBbJ0JJJywgJysyNTcnLCAnQnVydW5kaSddLFxyXG4gIFsnQ1YnLCAnKzIzOCcsICdDYWJvIFZlcmRlJ10sXHJcbiAgWydLSCcsICcrODU1JywgJ0NhbWJvZGlhJ10sXHJcbiAgWydDTScsICcrMjM3JywgJ0NhbWVyb29uJ10sXHJcbiAgWydDQScsICcrMScsICdDYW5hZGEnXSxcclxuICBbJ0tZJywgJysxMzQ1JywgJ0NheW1hbiBJc2xhbmRzJ10sXHJcbiAgWydDRicsICcrMjM2JywgJ0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyddLFxyXG4gIFsnVEQnLCAnKzIzNScsICdDaGFkJ10sXHJcbiAgWydDTCcsICcrNTYnLCAnQ2hpbGUnXSxcclxuICBbJ0NOJywgJys4NicsICdDaGluYSddLFxyXG4gIFsnQ1gnLCAnKzYxJywgJ0NocmlzdG1hcyBJc2xhbmQnXSxcclxuICBbJ0NDJywgJys2MScsICdDb2NvcyBJc2xhbmRzJ10sXHJcbiAgWydDTycsICcrNTcnLCAnQ29sb21iaWEnXSxcclxuICBbJ0tNJywgJysyNjknLCAnQ29tb3JvcyddLFxyXG4gIFsnQ0cnLCAnKzI0MicsICdDb25nbyAoUmVwdWJsaWMpJ10sXHJcbiAgWydDRCcsICcrMjQzJywgJ0NvbmdvIChEZW1vY3JhdGljIFJlcHVibGljKSddLFxyXG4gIFsnQ0snLCAnKzY4MicsICdDb29rIElzbGFuZHMnXSxcclxuICBbJ0NSJywgJys1MDYnLCAnQ29zdGEgUmljYSddLFxyXG4gIFsnSFInLCAnKzM4NScsICdDcm9hdGlhJ10sXHJcbiAgWydDVScsICcrNTMnLCAnQ3ViYSddLFxyXG4gIFsnQ1cnLCAnKzU5OScsICdDdXJhXHUwMEU3YW8nXSxcclxuICBbJ0NZJywgJyszNTcnLCAnQ3lwcnVzJ10sXHJcbiAgWydDWicsICcrNDIwJywgJ0N6ZWNoIFJlcHVibGljJ10sXHJcbiAgWydESycsICcrNDUnLCAnRGVubWFyayddLFxyXG4gIFsnREonLCAnKzI1MycsICdEamlib3V0aSddLFxyXG4gIFsnRE0nLCAnKzE3NjcnLCAnRG9taW5pY2EnXSxcclxuICBbJ0RPJywgJysxODA5JywgJ0RvbWluaWNhbiBSZXB1YmxpYyddLFxyXG4gIFsnRUMnLCAnKzU5MycsICdFY3VhZG9yJ10sXHJcbiAgWydFRycsICcrMjAnLCAnRWd5cHQnXSxcclxuICBbJ1NWJywgJys1MDMnLCAnRWwgU2FsdmFkb3InXSxcclxuICBbJ0dRJywgJysyNDAnLCAnRXF1YXRvcmlhbCBHdWluZWEnXSxcclxuICBbJ0VSJywgJysyOTEnLCAnRXJpdHJlYSddLFxyXG4gIFsnRUUnLCAnKzM3MicsICdFc3RvbmlhJ10sXHJcbiAgWydTWicsICcrMjY4JywgJ0Vzd2F0aW5pJ10sXHJcbiAgWydFVCcsICcrMjUxJywgJ0V0aGlvcGlhJ10sXHJcbiAgWydGSycsICcrNTAwJywgJ0ZhbGtsYW5kIElzbGFuZHMnXSxcclxuICBbJ0ZPJywgJysyOTgnLCAnRmFyb2UgSXNsYW5kcyddLFxyXG4gIFsnRkonLCAnKzY3OScsICdGaWppJ10sXHJcbiAgWydGSScsICcrMzU4JywgJ0ZpbmxhbmQnXSxcclxuICBbJ0ZSJywgJyszMycsICdGcmFuY2UnXSxcclxuICBbJ0dGJywgJys1OTQnLCAnRnJlbmNoIEd1aWFuYSddLFxyXG4gIFsnUEYnLCAnKzY4OScsICdGcmVuY2ggUG9seW5lc2lhJ10sXHJcbiAgWydHQScsICcrMjQxJywgJ0dhYm9uJ10sXHJcbiAgWydHTScsICcrMjIwJywgJ0dhbWJpYSddLFxyXG4gIFsnR0UnLCAnKzk5NScsICdHZW9yZ2lhJ10sXHJcbiAgWydERScsICcrNDknLCAnR2VybWFueSddLFxyXG4gIFsnR0gnLCAnKzIzMycsICdHaGFuYSddLFxyXG4gIFsnR0knLCAnKzM1MCcsICdHaWJyYWx0YXInXSxcclxuICBbJ0dSJywgJyszMCcsICdHcmVlY2UnXSxcclxuICBbJ0dMJywgJysyOTknLCAnR3JlZW5sYW5kJ10sXHJcbiAgWydHRCcsICcrMTQ3MycsICdHcmVuYWRhJ10sXHJcbiAgWydHUCcsICcrNTkwJywgJ0d1YWRlbG91cGUnXSxcclxuICBbJ0dVJywgJysxNjcxJywgJ0d1YW0nXSxcclxuICBbJ0dUJywgJys1MDInLCAnR3VhdGVtYWxhJ10sXHJcbiAgWydHRycsICcrNDQnLCAnR3Vlcm5zZXknXSxcclxuICBbJ0dOJywgJysyMjQnLCAnR3VpbmVhJ10sXHJcbiAgWydHVycsICcrMjQ1JywgJ0d1aW5lYS1CaXNzYXUnXSxcclxuICBbJ0dZJywgJys1OTInLCAnR3V5YW5hJ10sXHJcbiAgWydIVCcsICcrNTA5JywgJ0hhaXRpJ10sXHJcbiAgWydITicsICcrNTA0JywgJ0hvbmR1cmFzJ10sXHJcbiAgWydISycsICcrODUyJywgJ0hvbmcgS29uZyddLFxyXG4gIFsnSFUnLCAnKzM2JywgJ0h1bmdhcnknXSxcclxuICBbJ0lTJywgJyszNTQnLCAnSWNlbGFuZCddLFxyXG4gIFsnSU4nLCAnKzkxJywgJ0luZGlhJ10sXHJcbiAgWydJRCcsICcrNjInLCAnSW5kb25lc2lhJ10sXHJcbiAgWydJUicsICcrOTgnLCAnSXJhbiddLFxyXG4gIFsnSVEnLCAnKzk2NCcsICdJcmFxJ10sXHJcbiAgWydJRScsICcrMzUzJywgJ0lyZWxhbmQnXSxcclxuICBbJ0lNJywgJys0NCcsICdJc2xlIG9mIE1hbiddLFxyXG4gIFsnSUwnLCAnKzk3MicsICdJc3JhZWwnXSxcclxuICBbJ0lUJywgJyszOScsICdJdGFseSddLFxyXG4gIFsnSk0nLCAnKzE4NzYnLCAnSmFtYWljYSddLFxyXG4gIFsnSlAnLCAnKzgxJywgJ0phcGFuJ10sXHJcbiAgWydKRScsICcrNDQnLCAnSmVyc2V5J10sXHJcbiAgWydKTycsICcrOTYyJywgJ0pvcmRhbiddLFxyXG4gIFsnS1onLCAnKzcnLCAnS2F6YWtoc3RhbiddLFxyXG4gIFsnS0UnLCAnKzI1NCcsICdLZW55YSddLFxyXG4gIFsnS0knLCAnKzY4NicsICdLaXJpYmF0aSddLFxyXG4gIFsnWEsnLCAnKzM4MycsICdLb3Nvdm8nXSxcclxuICBbJ0tXJywgJys5NjUnLCAnS3V3YWl0J10sXHJcbiAgWydLRycsICcrOTk2JywgJ0t5cmd5enN0YW4nXSxcclxuICBbJ0xBJywgJys4NTYnLCAnTGFvcyddLFxyXG4gIFsnTFYnLCAnKzM3MScsICdMYXR2aWEnXSxcclxuICBbJ0xCJywgJys5NjEnLCAnTGViYW5vbiddLFxyXG4gIFsnTFMnLCAnKzI2NicsICdMZXNvdGhvJ10sXHJcbiAgWydMUicsICcrMjMxJywgJ0xpYmVyaWEnXSxcclxuICBbJ0xZJywgJysyMTgnLCAnTGlieWEnXSxcclxuICBbJ0xJJywgJys0MjMnLCAnTGllY2h0ZW5zdGVpbiddLFxyXG4gIFsnTFQnLCAnKzM3MCcsICdMaXRodWFuaWEnXSxcclxuICBbJ0xVJywgJyszNTInLCAnTHV4ZW1ib3VyZyddLFxyXG4gIFsnTU8nLCAnKzg1MycsICdNYWNhbyddLFxyXG4gIFsnTUcnLCAnKzI2MScsICdNYWRhZ2FzY2FyJ10sXHJcbiAgWydNVycsICcrMjY1JywgJ01hbGF3aSddLFxyXG4gIFsnTVknLCAnKzYwJywgJ01hbGF5c2lhJ10sXHJcbiAgWydNVicsICcrOTYwJywgJ01hbGRpdmVzJ10sXHJcbiAgWydNTCcsICcrMjIzJywgJ01hbGknXSxcclxuICBbJ01UJywgJyszNTYnLCAnTWFsdGEnXSxcclxuICBbJ01IJywgJys2OTInLCAnTWFyc2hhbGwgSXNsYW5kcyddLFxyXG4gIFsnTVEnLCAnKzU5NicsICdNYXJ0aW5pcXVlJ10sXHJcbiAgWydNUicsICcrMjIyJywgJ01hdXJpdGFuaWEnXSxcclxuICBbJ01VJywgJysyMzAnLCAnTWF1cml0aXVzJ10sXHJcbiAgWydZVCcsICcrMjYyJywgJ01heW90dGUnXSxcclxuICBbJ01YJywgJys1MicsICdNZXhpY28nXSxcclxuICBbJ0ZNJywgJys2OTEnLCAnTWljcm9uZXNpYSddLFxyXG4gIFsnTUQnLCAnKzM3MycsICdNb2xkb3ZhJ10sXHJcbiAgWydNQycsICcrMzc3JywgJ01vbmFjbyddLFxyXG4gIFsnTU4nLCAnKzk3NicsICdNb25nb2xpYSddLFxyXG4gIFsnTUUnLCAnKzM4MicsICdNb250ZW5lZ3JvJ10sXHJcbiAgWydNUycsICcrMTY2NCcsICdNb250c2VycmF0J10sXHJcbiAgWydNQScsICcrMjEyJywgJ01vcm9jY28nXSxcclxuICBbJ01aJywgJysyNTgnLCAnTW96YW1iaXF1ZSddLFxyXG4gIFsnTU0nLCAnKzk1JywgJ015YW5tYXInXSxcclxuICBbJ05BJywgJysyNjQnLCAnTmFtaWJpYSddLFxyXG4gIFsnTlInLCAnKzY3NCcsICdOYXVydSddLFxyXG4gIFsnTlAnLCAnKzk3NycsICdOZXBhbCddLFxyXG4gIFsnTkwnLCAnKzMxJywgJ05ldGhlcmxhbmRzJ10sXHJcbiAgWydOQycsICcrNjg3JywgJ05ldyBDYWxlZG9uaWEnXSxcclxuICBbJ05aJywgJys2NCcsICdOZXcgWmVhbGFuZCddLFxyXG4gIFsnTkknLCAnKzUwNScsICdOaWNhcmFndWEnXSxcclxuICBbJ05FJywgJysyMjcnLCAnTmlnZXInXSxcclxuICBbJ05HJywgJysyMzQnLCAnTmlnZXJpYSddLFxyXG4gIFsnTlUnLCAnKzY4MycsICdOaXVlJ10sXHJcbiAgWydORicsICcrNjcyJywgJ05vcmZvbGsgSXNsYW5kJ10sXHJcbiAgWydLUCcsICcrODUwJywgJ05vcnRoIEtvcmVhJ10sXHJcbiAgWydNSycsICcrMzg5JywgJ05vcnRoIE1hY2Vkb25pYSddLFxyXG4gIFsnTVAnLCAnKzE2NzAnLCAnTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzJ10sXHJcbiAgWydOTycsICcrNDcnLCAnTm9yd2F5J10sXHJcbiAgWydPTScsICcrOTY4JywgJ09tYW4nXSxcclxuICBbJ1BLJywgJys5MicsICdQYWtpc3RhbiddLFxyXG4gIFsnUFcnLCAnKzY4MCcsICdQYWxhdSddLFxyXG4gIFsnUFMnLCAnKzk3MCcsICdQYWxlc3RpbmUnXSxcclxuICBbJ1BBJywgJys1MDcnLCAnUGFuYW1hJ10sXHJcbiAgWydQRycsICcrNjc1JywgJ1BhcHVhIE5ldyBHdWluZWEnXSxcclxuICBbJ1BZJywgJys1OTUnLCAnUGFyYWd1YXknXSxcclxuICBbJ1BFJywgJys1MScsICdQZXJ1J10sXHJcbiAgWydQSCcsICcrNjMnLCAnUGhpbGlwcGluZXMnXSxcclxuICBbJ1BMJywgJys0OCcsICdQb2xhbmQnXSxcclxuICBbJ1BUJywgJyszNTEnLCAnUG9ydHVnYWwnXSxcclxuICBbJ1BSJywgJysxNzg3JywgJ1B1ZXJ0byBSaWNvJ10sXHJcbiAgWydRQScsICcrOTc0JywgJ1FhdGFyJ10sXHJcbiAgWydSRScsICcrMjYyJywgJ1JcdTAwRTl1bmlvbiddLFxyXG4gIFsnUk8nLCAnKzQwJywgJ1JvbWFuaWEnXSxcclxuICBbJ1JVJywgJys3JywgJ1J1c3NpYSddLFxyXG4gIFsnUlcnLCAnKzI1MCcsICdSd2FuZGEnXSxcclxuICBbJ0JMJywgJys1OTAnLCAnU2FpbnQgQmFydGhcdTAwRTlsZW15J10sXHJcbiAgWydTSCcsICcrMjkwJywgJ1NhaW50IEhlbGVuYSddLFxyXG4gIFsnS04nLCAnKzE4NjknLCAnU2FpbnQgS2l0dHMgYW5kIE5ldmlzJ10sXHJcbiAgWydMQycsICcrMTc1OCcsICdTYWludCBMdWNpYSddLFxyXG4gIFsnTUYnLCAnKzU5MCcsICdTYWludCBNYXJ0aW4nXSxcclxuICBbJ1BNJywgJys1MDgnLCAnU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvbiddLFxyXG4gIFsnVkMnLCAnKzE3ODQnLCAnU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMnXSxcclxuICBbJ1dTJywgJys2ODUnLCAnU2Ftb2EnXSxcclxuICBbJ1NNJywgJyszNzgnLCAnU2FuIE1hcmlubyddLFxyXG4gIFsnU1QnLCAnKzIzOScsICdTYW8gVG9tZSBhbmQgUHJpbmNpcGUnXSxcclxuICBbJ1NBJywgJys5NjYnLCAnU2F1ZGkgQXJhYmlhJ10sXHJcbiAgWydTTicsICcrMjIxJywgJ1NlbmVnYWwnXSxcclxuICBbJ1JTJywgJyszODEnLCAnU2VyYmlhJ10sXHJcbiAgWydTQycsICcrMjQ4JywgJ1NleWNoZWxsZXMnXSxcclxuICBbJ1NMJywgJysyMzInLCAnU2llcnJhIExlb25lJ10sXHJcbiAgWydTRycsICcrNjUnLCAnU2luZ2Fwb3JlJ10sXHJcbiAgWydTWCcsICcrMTcyMScsICdTaW50IE1hYXJ0ZW4nXSxcclxuICBbJ1NLJywgJys0MjEnLCAnU2xvdmFraWEnXSxcclxuICBbJ1NJJywgJyszODYnLCAnU2xvdmVuaWEnXSxcclxuICBbJ1NCJywgJys2NzcnLCAnU29sb21vbiBJc2xhbmRzJ10sXHJcbiAgWydTTycsICcrMjUyJywgJ1NvbWFsaWEnXSxcclxuICBbJ1pBJywgJysyNycsICdTb3V0aCBBZnJpY2EnXSxcclxuICBbJ0tSJywgJys4MicsICdTb3V0aCBLb3JlYSddLFxyXG4gIFsnU1MnLCAnKzIxMScsICdTb3V0aCBTdWRhbiddLFxyXG4gIFsnRVMnLCAnKzM0JywgJ1NwYWluJ10sXHJcbiAgWydMSycsICcrOTQnLCAnU3JpIExhbmthJ10sXHJcbiAgWydTRCcsICcrMjQ5JywgJ1N1ZGFuJ10sXHJcbiAgWydTUicsICcrNTk3JywgJ1N1cmluYW1lJ10sXHJcbiAgWydTRScsICcrNDYnLCAnU3dlZGVuJ10sXHJcbiAgWydDSCcsICcrNDEnLCAnU3dpdHplcmxhbmQnXSxcclxuICBbJ1NZJywgJys5NjMnLCAnU3lyaWEnXSxcclxuICBbJ1RXJywgJys4ODYnLCAnVGFpd2FuJ10sXHJcbiAgWydUSicsICcrOTkyJywgJ1RhamlraXN0YW4nXSxcclxuICBbJ1RaJywgJysyNTUnLCAnVGFuemFuaWEnXSxcclxuICBbJ1RIJywgJys2NicsICdUaGFpbGFuZCddLFxyXG4gIFsnVEwnLCAnKzY3MCcsICdUaW1vci1MZXN0ZSddLFxyXG4gIFsnVEcnLCAnKzIyOCcsICdUb2dvJ10sXHJcbiAgWydUSycsICcrNjkwJywgJ1Rva2VsYXUnXSxcclxuICBbJ1RPJywgJys2NzYnLCAnVG9uZ2EnXSxcclxuICBbJ1RUJywgJysxODY4JywgJ1RyaW5pZGFkIGFuZCBUb2JhZ28nXSxcclxuICBbJ1ROJywgJysyMTYnLCAnVHVuaXNpYSddLFxyXG4gIFsnVFInLCAnKzkwJywgJ1R1cmtleSddLFxyXG4gIFsnVE0nLCAnKzk5MycsICdUdXJrbWVuaXN0YW4nXSxcclxuICBbJ1RDJywgJysxNjQ5JywgJ1R1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyddLFxyXG4gIFsnVFYnLCAnKzY4OCcsICdUdXZhbHUnXSxcclxuICBbJ1VHJywgJysyNTYnLCAnVWdhbmRhJ10sXHJcbiAgWydVQScsICcrMzgwJywgJ1VrcmFpbmUnXSxcclxuICBbJ0FFJywgJys5NzEnLCAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnXSxcclxuICBbJ0dCJywgJys0NCcsICdVbml0ZWQgS2luZ2RvbSddLFxyXG4gIFsnVVMnLCAnKzEnLCAnVW5pdGVkIFN0YXRlcyddLFxyXG4gIFsnVkknLCAnKzEzNDAnLCAnVVMgVmlyZ2luIElzbGFuZHMnXSxcclxuICBbJ1VZJywgJys1OTgnLCAnVXJ1Z3VheSddLFxyXG4gIFsnVVonLCAnKzk5OCcsICdVemJla2lzdGFuJ10sXHJcbiAgWydWVScsICcrNjc4JywgJ1ZhbnVhdHUnXSxcclxuICBbJ1ZBJywgJyszOScsICdWYXRpY2FuIENpdHknXSxcclxuICBbJ1ZFJywgJys1OCcsICdWZW5lenVlbGEnXSxcclxuICBbJ1ZOJywgJys4NCcsICdWaWV0bmFtJ10sXHJcbiAgWydXRicsICcrNjgxJywgJ1dhbGxpcyBhbmQgRnV0dW5hJ10sXHJcbiAgWydZRScsICcrOTY3JywgJ1llbWVuJ10sXHJcbiAgWydaTScsICcrMjYwJywgJ1phbWJpYSddLFxyXG4gIFsnWlcnLCAnKzI2MycsICdaaW1iYWJ3ZSddLFxyXG5dO1xyXG5cclxuLyoqIEFsbCBjb3VudHJpZXMgd2l0aCBjb21wdXRlZCBmbGFnIGVtb2ppcywgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IG5hbWUuICovXHJcbmV4cG9ydCBjb25zdCBDT1VOVFJJRVM6IENvdW50cnlEYXRhW10gPSBSQVcubWFwKChbY29kZSwgZGlhbENvZGUsIG5hbWVdKSA9PiAoe1xyXG4gIGNvZGUsXHJcbiAgZGlhbENvZGUsXHJcbiAgbmFtZSxcclxuICBmbGFnOiBnZXRGbGFnKGNvZGUpLFxyXG59KSk7XHJcblxyXG4vKipcclxuICogRmluZCB0aGUgYmVzdCBtYXRjaGluZyBjb3VudHJ5IGZvciBhbiBFLjE2NCBwaG9uZSBudW1iZXIgc3RyaW5nLlxyXG4gKiBVc2VzIGxvbmdlc3QgZGlhbCBjb2RlIHByZWZpeCBtYXRjaC4gUmV0dXJucyB1bmRlZmluZWQgaWYgbm8gbWF0Y2ggZm91bmQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFMTY0Q291bnRyeSh2YWx1ZTogc3RyaW5nKTogQ291bnRyeURhdGEgfCB1bmRlZmluZWQge1xyXG4gIGlmICghdmFsdWUgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoJysnKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAvLyBTb3J0IGJ5IGRpYWxDb2RlIGxlbmd0aCBkZXNjZW5kaW5nIHNvIGxvbmdlc3QgbWF0Y2ggd2luc1xyXG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5DT1VOVFJJRVNdLnNvcnQoKGEsIGIpID0+IGIuZGlhbENvZGUubGVuZ3RoIC0gYS5kaWFsQ29kZS5sZW5ndGgpO1xyXG4gIHJldHVybiBzb3J0ZWQuZmluZCgoYykgPT4gdmFsdWUuc3RhcnRzV2l0aChjLmRpYWxDb2RlKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHRoZSBsb2NhbCBudW1iZXIgcGFydCBmcm9tIGFuIEUuMTY0IHN0cmluZyBnaXZlbiBhIGRpYWwgY29kZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUUxNjRMb2NhbE51bWJlcih2YWx1ZTogc3RyaW5nLCBkaWFsQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5zdGFydHNXaXRoKGRpYWxDb2RlKSkgcmV0dXJuICcnO1xyXG4gIHJldHVybiB2YWx1ZS5zbGljZShkaWFsQ29kZS5sZW5ndGgpO1xyXG59XHJcbiIsICJpbXBvcnQge1xuICBBdXRvY29tcGxldGUsXG4gIENpcmN1bGFyUHJvZ3Jlc3MsXG4gIEdyaWQsXG4gIFRleHRGaWVsZCxcbiAgdXNlVGhlbWUsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdAbXVpL21hdGVyaWFsL3V0aWxzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEZyYWdtZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICB1c2VDb250cm9sbGVyLFxuICB0eXBlIEZpZWxkUGF0aCxcbiAgdHlwZSBGaWVsZFZhbHVlcyxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY1NlbGVjdEVsZW1lbnRQcm9wcywgT3B0aW9uT2JqZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNTZWxlY3RQYXlsb2FkIH0gZnJvbSAnQC90eXBlcyc7XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIEFzeW5jU2VsZWN0RWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KFxuICBwcm9wczogQXN5bmNTZWxlY3RFbGVtZW50UHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVE9wdGlvblxuICA+XG4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgY29udHJvbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICAvLyBpbml0aWFsVmFsdWUsXG4gICAgLy8gaXNOdWxsYWJsZSxcbiAgICBsYWJlbCxcbiAgICBxdWVyeUZuLFxuICAgIHZhcmlhbnQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcgYXMgVExhYmVsS2V5LFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnIGFzIFRWYWx1ZUtleSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFRPcHRpb24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxyZWFkb25seSBUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIFRyYWNrIHdoYXQgdmFsdWUgd2UndmUgbG9hZGVkIHRvIHByZXZlbnQgZHVwbGljYXRlIEFQSSBjYWxsc1xuICBjb25zdCBsb2FkZWRWYWx1ZVJlZiA9IHVzZVJlZjxUT3B0aW9uW1RWYWx1ZUtleV0gfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICBjb25zdCBmZXRjaERhdGEgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBkZWJvdW5jZShcbiAgICAgICAgKFxuICAgICAgICAgIHBheWxvYWQ6IEFzeW5jU2VsZWN0UGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogKHJlc3VsdHM/OiByZWFkb25seSBUT3B0aW9uW10pID0+IHZvaWRcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgcXVlcnlGbihwYXlsb2FkKS50aGVuKGMgPT4gY2FsbGJhY2soYykpO1xuICAgICAgICB9LFxuICAgICAgICA0MDBcbiAgICAgICksXG4gICAgW3F1ZXJ5Rm5dXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKTogc3RyaW5nIHwgbnVtYmVyID0+IHtcbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW3ZhbHVlRmllbGRdKSA6ICcnO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGRdKSA6ICcnO1xuICAgIH0sXG4gICAgW2xhYmVsRmllbGRdXG4gICk7XG5cbiAgLy8gRWZmZWN0OiBIYW5kbGUgc2VhcmNoIHF1ZXJ5IGlucHV0XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gZmllbGQudmFsdWU7XG5cbiAgICAvLyBDb25kaXRpb24gMTogQSB2YWx1ZSBpcyBzZXQgZnJvbSB0aGUgZm9ybSwgYW5kIHdlIGhhdmVuJ3QgbG9hZGVkIGl0IHlldC5cbiAgICBpZiAoY3VycmVudFZhbHVlICYmIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgLy8gRG9uJ3QgZmV0Y2ggaWYgdGhlIHNlbGVjdGVkIG9wdGlvbiBpcyBhbHJlYWR5IGNvcnJlY3RcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbiAmJiBnZXRPcHRpb25WYWx1ZShzZWxlY3RlZE9wdGlvbikgPT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ID0gY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSBjdXJyZW50VmFsdWU7XG5cbiAgICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBudWxsLCBTZWxlY3RlZFZhbHVlOiBjdXJyZW50VmFsdWUgfSwgcmVzdWx0cyA9PiB7XG4gICAgICAgIGlmICghYWN0aXZlKSByZXR1cm47XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gcmVzdWx0cz8uZmluZChcbiAgICAgICAgICBvcHRpb24gPT4gU3RyaW5nKGdldE9wdGlvblZhbHVlKG9wdGlvbikpID09PSBTdHJpbmcoY3VycmVudFZhbHVlKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkT3B0aW9uKSB7XG4gICAgICAgICAgc2V0T3B0aW9ucyhbbWF0Y2hlZE9wdGlvbl0pO1xuICAgICAgICAgIHNldFNlbGVjdGVkT3B0aW9uKG1hdGNoZWRPcHRpb24pO1xuICAgICAgICAgIHNldElucHV0VmFsdWUoZ2V0T3B0aW9uTGFiZWwobWF0Y2hlZE9wdGlvbikpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuOyAvLyBFbmQgb2YgZWZmZWN0XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9uIDI6IFRoZSB1c2VyIGlzIHR5cGluZyBhIHNlYXJjaCBxdWVyeSwgb3IgdGhlIGlucHV0IGlzIGNsZWFyZWQuXG4gICAgLy8gVGhpcyBydW5zIGlmIHRoZSBpbnB1dCB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNlbGVjdGVkIG9wdGlvbidzIGxhYmVsLlxuICAgIGlmIChpbnB1dFZhbHVlICE9PSAoc2VsZWN0ZWRPcHRpb24gPyBnZXRPcHRpb25MYWJlbChzZWxlY3RlZE9wdGlvbikgOiAnJykpIHtcbiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBlbXB0eSwgY2xlYXIgb3B0aW9ucyBpbW1lZGlhdGVseSB3aXRob3V0IGFuIEFQSSBjYWxsLlxuICAgICAgaWYgKGlucHV0VmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHNldE9wdGlvbnMoW10pO1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgZmV0Y2ggbmV3IG9wdGlvbnMgYmFzZWQgb24gdGhlIGlucHV0LlxuICAgICAgY29uc3QgYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgc2V0TG9hZGluZyh0cnVlKTtcblxuICAgICAgZmV0Y2hEYXRhKHsgUXVlcnk6IGlucHV0VmFsdWUsIFNlbGVjdGVkVmFsdWU6IG51bGwgfSwgcmVzdWx0cyA9PiB7XG4gICAgICAgIGlmICghYWN0aXZlKSByZXR1cm47XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRPcHRpb25zKHJlc3VsdHMgfHwgW10pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjsgLy8gRW5kIG9mIGVmZmVjdFxuICAgIH1cblxuICAgIC8vIENvbmRpdGlvbiAzOiBUaGUgdmFsdWUgaGFzIGJlZW4gY2xlYXJlZCBmcm9tIHRoZSBmb3JtLlxuICAgIGlmICghY3VycmVudFZhbHVlICYmIHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbihudWxsKTtcbiAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgICAgc2V0T3B0aW9ucyhbXSk7XG4gICAgICBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwgW1xuICAgIGZpZWxkLnZhbHVlLFxuICAgIGlucHV0VmFsdWUsXG4gICAgZmV0Y2hEYXRhLFxuICAgIGdldE9wdGlvbkxhYmVsLFxuICAgIGdldE9wdGlvblZhbHVlLFxuICAgIHNlbGVjdGVkT3B0aW9uLFxuICAgIGxhYmVsRmllbGQsXG4gICAgdmFsdWVGaWVsZCxcbiAgXSk7XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkaXNhYmxlZCA/PyBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0LlN5bnRoZXRpY0V2ZW50LCBuZXdTZWxlY3RlZE9wdGlvbjogVE9wdGlvbiB8IG51bGwpID0+IHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3U2VsZWN0ZWRPcHRpb25cbiAgICAgICAgPyBnZXRPcHRpb25WYWx1ZShuZXdTZWxlY3RlZE9wdGlvbilcbiAgICAgICAgOiBudWxsO1xuXG4gICAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ID0gbmV3VmFsdWUgYXNcbiAgICAgICAgfCBUT3B0aW9uW1RWYWx1ZUtleV1cbiAgICAgICAgfCBudWxsXG4gICAgICAgIHwgdW5kZWZpbmVkOyAvLyBUcmFjayBjaGFuZ2VcblxuICAgICAgLy8gU3luYyBpbnB1dCB2YWx1ZSB3aXRoIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmIChuZXdTZWxlY3RlZE9wdGlvbikge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKGdldE9wdGlvbkxhYmVsKG5ld1NlbGVjdGVkT3B0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgc2V0T3B0aW9ucyhbXSk7IC8vIENsZWFyIG9wdGlvbnMgd2hlbiBzZWxlY3Rpb24gaXMgY2xlYXJlZFxuICAgICAgfVxuICAgIH0sXG4gICAgW2ZpZWxkLCBnZXRPcHRpb25WYWx1ZSwgZ2V0T3B0aW9uTGFiZWxdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXzogUmVhY3QuU3ludGhldGljRXZlbnQsIG5ld0lucHV0VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0SW5wdXRWYWx1ZShuZXdJbnB1dFZhbHVlKTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBXaGVuIGZvY3VzIGlzIGxvc3QsIHN5bmMgdGhlIGlucHV0IHZhbHVlIGJhY2sgdG8gdGhlIHNlbGVjdGVkIG9wdGlvbidzIGxhYmVsXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICBzZXRJbnB1dFZhbHVlKGdldE9wdGlvbkxhYmVsKHNlbGVjdGVkT3B0aW9uKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGNsZWFyIHRoZSBpbnB1dFxuICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRPcHRpb24sIGdldE9wdGlvbkxhYmVsXSk7XG5cbiAgY29uc3QgaGFuZGxlT3BlbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0T3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgZnVsbFdpZHRoXG4gICAgICBvcGVuPXtvcGVufVxuICAgICAgb25PcGVuPXtoYW5kbGVPcGVufVxuICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgZ2V0T3B0aW9uTGFiZWw9e2dldE9wdGlvbkxhYmVsfVxuICAgICAgZ2V0T3B0aW9uS2V5PXtnZXRPcHRpb25WYWx1ZX1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWx1ZSkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgICBhdXRvQ29tcGxldGVcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgaW5jbHVkZUlucHV0SW5MaXN0XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgdmFsdWU9e3NlbGVjdGVkT3B0aW9ufVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zXG4gICAgICBmaWx0ZXJPcHRpb25zPXt4ID0+IHh9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25JbnB1dENoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIG5vT3B0aW9uc1RleHQ9XCJUeXBlIFNvbWV0aGluZy4uLlwiXG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgIC4uLnBhcmFtcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgICBlbmRBZG9ybm1lbnQ6IChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MgY29sb3I9XCJpbmhlcml0XCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIHtwYXJhbXMuSW5wdXRQcm9wcy5lbmRBZG9ybm1lbnR9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgICB2YXJpYW50PXt2YXJpYW50ID8gdmFyaWFudCA6ICdvdXRsaW5lZCd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgcmVuZGVyT3B0aW9uPXsocmVuZGVyUHJvcHMsIG9wdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgLi4ub3B0aW9uUHJvcHMgfSA9IHJlbmRlclByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIGtleT17a2V5fSB7Li4ub3B0aW9uUHJvcHN9PlxuICAgICAgICAgICAge29wdGlvbltsYWJlbEZpZWxkXX1cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQXN5bmNTZWxlY3RFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9ICdWYWx1ZScsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9ICdMYWJlbCcsXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8VFZhbHVlS2V5LCBUTGFiZWxLZXk+ID0gT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXlcbiAgPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IEFzeW5jU2VsZWN0RWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lLFxuICBUVmFsdWVLZXksXG4gIFRMYWJlbEtleSxcbiAgVE9wdGlvblxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudDxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWVLZXksIFRMYWJlbEtleSwgVE9wdGlvbj5cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5Bc3luY1NlbGVjdEVsZW1lbnQuZGlzcGxheU5hbWUgPSAnQXN5bmNTZWxlY3RFbGVtZW50JztcblxuZXhwb3J0IHsgQXN5bmNTZWxlY3RFbGVtZW50IH07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBHcmlkLCBUZXh0RmllbGQsIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB0eXBlIHsgQ2hhbmdlRXZlbnQsIFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBDb250cm9sLFxuICBGaWVsZEVycm9yLFxuICBGaWVsZFBhdGgsXG4gIEZpZWxkVmFsdWVzLFxuICBQYXRoVmFsdWUsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgdXNlRW5oYW5jZWRUcmFuc2Zvcm0gfSBmcm9tICdAL2hvb2tzJztcbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSAnQC9ob29rcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50T3JWYWx1ZSB9IGZyb20gJ0AvdHlwZXMnO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgVGV4dEZpZWxkRWxlbWVudCBjb21wb25lbnQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRmllbGRFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcImZpcnN0TmFtZVwiIHwgXCJ1c2VyLmVtYWlsXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBmaWVsZCBlcnJvciBvYmplY3RcbiAgICogQHJldHVybnMgQ3VzdG9tIGVycm9yIG1lc3NhZ2Ugb3IgY29tcG9uZW50XG4gICAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICAvKipcbiAgICogQ3VzdG9tIFRleHRGaWVsZCBjb21wb25lbnQgdG8gdXNlIGluc3RlYWQgb2YgZGVmYXVsdCBNVUkgVGV4dEZpZWxkXG4gICAqL1xuICBjb21wb25lbnQ/OiB0eXBlb2YgVGV4dEZpZWxkO1xuICAvKipcbiAgICogVmFsdWUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIGZvciBpbnB1dC9vdXRwdXRcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGZpZWxkVHlwZSBmb3IgY29tbW9uIHBhdHRlcm5zIG9yIGN1c3RvbSB0cmFuc2Zvcm1zIGZvciBjb21wbGV4IGNhc2VzXG4gICAqL1xuICB0cmFuc2Zvcm0/OiB7XG4gICAgLyoqIFRyYW5zZm9ybSB2YWx1ZSBiZWZvcmUgZGlzcGxheWluZyBpbiBpbnB1dCAqL1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRWYWx1ZTtcbiAgICAvKiogVHJhbnNmb3JtIGlucHV0IGV2ZW50IHRvIGZvcm0gdmFsdWUgKi9cbiAgICBvdXRwdXQ/OiAoXG4gICAgICBldmVudE9yVmFsdWU6IEV2ZW50T3JWYWx1ZTxQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4+LFxuICAgICAgdmFsdWU/OiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT5cbiAgICApID0+IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgfTtcbiAgLyoqXG4gICAqIEJ1aWx0LWluIGZpZWxkIHR5cGUgZm9yIGF1dG9tYXRpYyB0cmFuc2Zvcm1hdGlvblxuICAgKiBAZXhhbXBsZSAndGV4dCcgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICd0aW1lJyB8ICdzZWxlY3QnXG4gICAqL1xuICBmaWVsZFR5cGU/OiBGaWVsZFR5cGU7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHZhbHVlIHRvIGRpc3BsYXkgd2hlbiBmaWVsZCB2YWx1ZSBpcyBudWxsL3VuZGVmaW5lZFxuICAgKiBAZXhhbXBsZSBcIlwiXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBUVmFsdWU7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgbGFiZWwgdGV4dFxuICAgKiBAZXhhbXBsZSBcIkVtYWlsIEFkZHJlc3NcIlxuICAgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICogQGV4YW1wbGUgXCJFbnRlciB5b3VyIGVtYWlsXCJcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBwcm9wcyBmb3IgdGhlIHVuZGVybHlpbmcgVGV4dEZpZWxkIGNvbXBvbmVudFxuICAgKi9cbiAgdGV4dEZpZWxkUHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICAvKipcbiAgICogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyIEdyaWQgY29tcG9uZW50XG4gICAqIEBkZWZhdWx0VmFsdWUgeyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0gfVxuICAgKi9cbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICAvKipcbiAgICogVGhlIFRleHRGaWVsZCB2YXJpYW50XG4gICAqIEBkZWZhdWx0VmFsdWUgXCJvdXRsaW5lZFwiXG4gICAqL1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG4gIC8qKlxuICAgKiBDdXN0b20gb25DaGFuZ2UgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdHJhbnNmb3JtYXRpb25cbiAgICovXG4gIG9uQ2hhbmdlPzogKFxuICAgIGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICogRW5hYmxlIGRldmVsb3BtZW50IHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb24gaXNzdWVzXG4gICAqIEBkZWZhdWx0VmFsdWUgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICovXG4gIGVuYWJsZVdhcm5pbmdzPzogYm9vbGVhbjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xufVxuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBOdW1iZXJGaWVsZEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPihwcm9wczogTnVtYmVyRmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgY29tcG9uZW50OiBUZXh0RmllbGRDb21wb25lbnQgPSBUZXh0RmllbGQsXG4gICAgdHJhbnNmb3JtLFxuICAgIGZpZWxkVHlwZSA9ICd0ZXh0JywgLy8gRGVmYXVsdCB0byB0ZXh0IHR5cGVcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICBlbmFibGVXYXJuaW5ncyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgIG1heExlbmd0aCxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgdHlwZSA9ICdudW1iZXInLFxuICAgIHJlcXVpcmVkLFxuICAgIGhlbHBlclRleHQsXG4gICAgaW5wdXRSZWYsXG4gICAgb25JbnB1dCxcbiAgICBvbkJsdXIsXG4gICAgZGlzYWJsZWQsXG4gICAgLi4ucmVzdFRleHRQcm9wc1xuICB9ID0gdGV4dEZpZWxkUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgLy8gVXNlIHRoZSBlbmhhbmNlZCB0cmFuc2Zvcm0gaG9vayB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZUVuaGFuY2VkVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4oXG4gICAge1xuICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dDogdHJhbnNmb3JtLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0OiB0cmFuc2Zvcm0ub3V0cHV0LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWVsZFR5cGU6ICF0cmFuc2Zvcm1cbiAgICAgICAgPyB0eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gbWF4TGVuZ3RoICYmIG1heExlbmd0aCA+IDVcbiAgICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgICA6ICdudW1iZXInXG4gICAgICAgICAgOiBmaWVsZFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQsIC8vIEF1dG8tZGV0ZWN0IG51bWJlciB0eXBlXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBlbmFibGVXYXJuaW5ncyxcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgaW5wdXRSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRGaWVsZENvbXBvbmVudFxuICAgICAgey4uLnJlc3R9XG4gICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgIG5hbWU9e2ZpZWxkLm5hbWV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09ICcnKSB7XG4gICAgICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgY3VzdG9tT25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjdXN0b21PbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbkJsdXI9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uSW5wdXQ9eyhldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgbWF4TGVuZ3RoICYmXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUuc2xpY2UoMCwgbWF4TGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb25JbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uSW5wdXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25XaGVlbD17ZSA9PiB7XG4gICAgICAgIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuYmx1cigpO1xuICAgICAgfX1cbiAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgIGlmIChbJ2UnLCAnRScsICdBcnJvd0Rvd24nLCAnQXJyb3dVcCddLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgIGVycm9yID8gKHBhcnNlRXJyb3IgPyBwYXJzZUVycm9yKGVycm9yKSA6IGVycm9yLm1lc3NhZ2UpIDogaGVscGVyVGV4dFxuICAgICAgfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgc2xvdFByb3BzPXt7IGh0bWxJbnB1dDogeyBtYXhMZW5ndGggfSB9fVxuICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgVGV4dEZpZWxkIGNvbXBvbmVudCB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uLFxuICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGJ1aWx0LWluIGZpZWxkIHR5cGUgaGFuZGxpbmcuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5IHdpdGggY3VzdG9tIHBhcnNpbmdcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gc3VwcG9ydFxuICogLSBCdWlsdC1pbiBmaWVsZCB0eXBlcyBmb3IgY29tbW9uIHBhdHRlcm5zXG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBPcHRpbWl6ZWQgbnVtYmVyIGlucHV0IGhhbmRsaW5nXG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoIG1lbW9pemVkIHRyYW5zZm9ybWF0aW9uc1xuICogLSBEZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nXG4gKiAtIFN0YWJsZSByZWZlcmVuY2VzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIG51bWJlciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFnZVwiXG4gKiAgIGxhYmVsPVwiQWdlXCJcbiAqICAgZmllbGRUeXBlPVwibnVtYmVyXCJcbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdBZ2UgaXMgcmVxdWlyZWQnLCBtaW46IHsgdmFsdWU6IDAsIG1lc3NhZ2U6ICdBZ2UgbXVzdCBiZSBwb3NpdGl2ZScgfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImVtYWlsXCJcbiAqICAgbGFiZWw9XCJFbWFpbFwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWwgYWRkcmVzc1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBydWxlcz17e1xuICogICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICogICAgIHBhdHRlcm46IHsgdmFsdWU6IC9cXFMrQFxcUytcXC5cXFMrLywgbWVzc2FnZTogJ0ludmFsaWQgZW1haWwnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicHJpY2VcIlxuICogICBsYWJlbD1cIlByaWNlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPyBgJCR7dmFsdWV9YCA6ICcnLFxuICogICAgIG91dHB1dDogKGV2ZW50KSA9PiBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKCckJywgJycpKSB8fCBudWxsXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGVycm9yIHBhcnNpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gKiAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiAoXG4gKiAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICdyZWQnIH19PlxuICogICAgICAgXHUyNkEwXHVGRTBGIHtlcnJvci5tZXNzYWdlfVxuICogICAgIDwvc3Bhbj5cbiAqICAgKX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IE51bWJlckZpZWxkRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBOdW1iZXJGaWVsZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KTogUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgQm94UHJvcHMsIEZvcm1IZWxwZXJUZXh0UHJvcHMsIEdyaWRQcm9wcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgQm94LCBHcmlkLCBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBNdWlPdHBJbnB1dCxcbiAgdHlwZSBNdWlPdHBJbnB1dFByb3BzLFxufSBmcm9tICdtdWktb25lLXRpbWUtcGFzc3dvcmQtaW5wdXQnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyBIZWxwZXJUZXh0IH0gZnJvbSAnLi9IZWxwZXJUZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBPVFBJbnB1dEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcImZpcnN0TmFtZVwiIHwgXCJ1c2VyLmVtYWlsXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBmaWVsZCBlcnJvciBvYmplY3RcbiAgICogQHJldHVybnMgQ3VzdG9tIGVycm9yIG1lc3NhZ2Ugb3IgY29tcG9uZW50XG4gICAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuXG4gIG1heFNpemU/OiBudW1iZXI7XG5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgaGVscGVyVGV4dD86IFJlYWN0LlJlYWN0Tm9kZTtcblxuICBzbG90UHJvcHM/OiB7XG4gICAgd3JhcHBlcj86IEJveFByb3BzO1xuICAgIGhlbHBlclRleHQ/OiBGb3JtSGVscGVyVGV4dFByb3BzO1xuICAgIHRleHRmaWVsZD86IE11aU90cElucHV0UHJvcHNbJ1RleHRGaWVsZHNQcm9wcyddO1xuICB9O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG59XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIE9UUElucHV0RWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogT1RQSW5wdXRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pIHtcbiAgY29uc3Qge1xuICAgIC8vIHBhcnNlRXJyb3IsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIHNsb3RQcm9wcyxcbiAgICBoZWxwZXJUZXh0LFxuICAgIG1heFNpemUgPSA1NixcbiAgICBwbGFjZWhvbGRlciA9ICctJyxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICAvLyBjb25zdCB7XG4gIC8vICAgZmllbGQsXG4gIC8vICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICAvLyB9ID0gdXNlQ29udHJvbGxlcih7XG4gIC8vICAgbmFtZSxcbiAgLy8gICBjb250cm9sLFxuICAvLyB9KTtcblxuICByZXR1cm4gKFxuICAgIDxDb250cm9sbGVyXG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgIHJlbmRlcj17KHsgZmllbGQsIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSB9KSA9PiAoXG4gICAgICAgIDxCb3hcbiAgICAgICAgICB7Li4uc2xvdFByb3BzPy53cmFwcGVyfVxuICAgICAgICAgIHN4PXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBbYCYgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5pbnB1dH1gXToge1xuICAgICAgICAgICAgICAgIHA6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgYXNwZWN0UmF0aW86ICcxLzEnLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KHNsb3RQcm9wcz8ud3JhcHBlcj8uc3gpXG4gICAgICAgICAgICAgID8gKHNsb3RQcm9wcz8ud3JhcHBlcj8uc3ggPz8gW10pXG4gICAgICAgICAgICAgIDogW3Nsb3RQcm9wcz8ud3JhcHBlcj8uc3hdKSxcbiAgICAgICAgICBdfVxuICAgICAgICA+XG4gICAgICAgICAgPE11aU90cElucHV0XG4gICAgICAgICAgICB7Li4uZmllbGR9XG4gICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgIGdhcD17MS41fVxuICAgICAgICAgICAgbGVuZ3RoPXs0fVxuICAgICAgICAgICAgVGV4dEZpZWxkc1Byb3BzPXt7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBlcnJvcjogISFlcnJvcixcbiAgICAgICAgICAgICAgLi4uc2xvdFByb3BzPy50ZXh0ZmllbGQsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxIZWxwZXJUZXh0XG4gICAgICAgICAgICB7Li4uc2xvdFByb3BzPy5oZWxwZXJUZXh0fVxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlPXtlcnJvcj8ubWVzc2FnZX1cbiAgICAgICAgICAgIGhlbHBlclRleHQ9e2hlbHBlclRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgT1RQSW5wdXRFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBPVFBJbnB1dEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPik6IFJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7IEZvcm1IZWxwZXJUZXh0UHJvcHMgfSBmcm9tICdAbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0JztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICdAbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBIZWxwZXJUZXh0UHJvcHMgPSBGb3JtSGVscGVyVGV4dFByb3BzICYge1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRpc2FibGVHdXR0ZXJzPzogYm9vbGVhbjtcbiAgaGVscGVyVGV4dD86IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWxwZXJUZXh0KHtcbiAgc3gsXG4gIGhlbHBlclRleHQsXG4gIGVycm9yTWVzc2FnZSxcbiAgZGlzYWJsZUd1dHRlcnMsXG4gIC4uLm90aGVyXG59OiBIZWxwZXJUZXh0UHJvcHMpIHtcbiAgaWYgKGVycm9yTWVzc2FnZSB8fCBoZWxwZXJUZXh0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtSGVscGVyVGV4dFxuICAgICAgICBlcnJvcj17ISFlcnJvck1lc3NhZ2V9XG4gICAgICAgIHN4PXtbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbXg6IGRpc2FibGVHdXR0ZXJzID8gMCA6IDEuNzUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShzeCkgPyBzeCA6IFtzeF0pLFxuICAgICAgICBdfVxuICAgICAgICB7Li4ub3RoZXJ9XG4gICAgICA+XG4gICAgICAgIHtlcnJvck1lc3NhZ2UgfHwgaGVscGVyVGV4dH1cbiAgICAgIDwvRm9ybUhlbHBlclRleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwgImltcG9ydCB7IEFzeW5jU2VsZWN0TXVsdGlFbGVtZW50IH0gZnJvbSAnLi4vQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0JztcbmltcG9ydCB7IEFzeW5jU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uL0FzeW5jU2VsZWN0JztcbmltcG9ydCB7IENoZWNrYm94RWxlbWVudCB9IGZyb20gJy4uL0NoZWNrYm94RWxlbWVudCc7XG5pbXBvcnQgeyBDaGVja2JveEdyb3VwRWxlbWVudCB9IGZyb20gJy4uL0NoZWNrYm94R3JvdXAnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnQgfSBmcm9tICcuLi9EYXRlUGlja2VyRWxlbWVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkRWxlbWVudCB9IGZyb20gJy4uL0ZpbGVVcGxvYWRFbGVtZW50JztcbmltcG9ydCB7IE51bWJlckZpZWxkRWxlbWVudCB9IGZyb20gJy4uL051bWJlckZpZWxkRWxlbWVudCc7XG5pbXBvcnQgeyBPVFBJbnB1dEVsZW1lbnQgfSBmcm9tICcuLi9PVFBJbnB1dEVsZW1lbnQvT1RQSW5wdXRFbGVtZW50JztcbmltcG9ydCB7IFBhc3N3b3JkRWxlbWVudCB9IGZyb20gJy4uL1Bhc3N3b3JkRWxlbWVudCc7XG5pbXBvcnQgeyBQaG9uZU51bWJlckVsZW1lbnQgfSBmcm9tICcuLi9QaG9uZU51bWJlckVsZW1lbnQnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Hcm91cCB9IGZyb20gJy4uL1JhZGlvQnV0dG9uR3JvdXAnO1xuaW1wb3J0IHsgU2VsZWN0Q2FzY2FkZUVsZW1lbnQgfSBmcm9tICcuLi9TZWxlY3RDYXNjYWRlRWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RFbGVtZW50IH0gZnJvbSAnLi4vU2VsZWN0RWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RNdWx0aUVsZW1lbnQgfSBmcm9tICcuLi9TZWxlY3RNdWx0aUVsZW1lbnQnO1xuaW1wb3J0IHsgU2xpZGVyRWxlbWVudCB9IGZyb20gJy4uL1NsaWRlckVsZW1lbnQnO1xuaW1wb3J0IHsgVGV4dEZpZWxkRWxlbWVudCB9IGZyb20gJy4uL1RleHRGaWVsZEVsZW1lbnQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckVsZW1lbnQgfSBmcm9tICcuLi9UaW1lUGlja2VyRWxlbWVudCc7XG5cbmNvbnN0IEZpZWxkID0ge1xuICBUZXh0OiBUZXh0RmllbGRFbGVtZW50LFxuICBOdW1iZXI6IE51bWJlckZpZWxkRWxlbWVudCxcbiAgQ2hlY2tib3g6IENoZWNrYm94RWxlbWVudCxcbiAgRGF0ZTogRGF0ZVBpY2tlckVsZW1lbnQsXG4gIFJhZGlvR3JvdXA6IFJhZGlvQnV0dG9uR3JvdXAsXG4gIFBhc3N3b3JkOiBQYXNzd29yZEVsZW1lbnQsXG4gIFBob25lOiBQaG9uZU51bWJlckVsZW1lbnQsXG4gIFRpbWU6IFRpbWVQaWNrZXJFbGVtZW50LFxuICBTZWxlY3Q6IFNlbGVjdEVsZW1lbnQsXG4gIFNlbGVjdE11bHRpOiBTZWxlY3RNdWx0aUVsZW1lbnQsXG4gIFNlbGVjdENhc2NhZGU6IFNlbGVjdENhc2NhZGVFbGVtZW50LFxuICBBc3luY1NlbGVjdDogQXN5bmNTZWxlY3RFbGVtZW50LFxuICBBc3luY011bHRpU2VsZWN0OiBBc3luY1NlbGVjdE11bHRpRWxlbWVudCxcbiAgQ2hlY2tib3hHcm91cDogQ2hlY2tib3hHcm91cEVsZW1lbnQsXG4gIE9UUElucHV0OiBPVFBJbnB1dEVsZW1lbnQsXG4gIFNsaWRlcjogU2xpZGVyRWxlbWVudCxcbiAgRmlsZVVwbG9hZDogRmlsZVVwbG9hZEVsZW1lbnQsXG59O1xu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QUFBQSxFQUNOLFlBQVlDO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxNQUFNQztBQUFBLEVBQ04sUUFBUUM7QUFBQSxFQUNSLGFBQWFDO0FBQUEsRUFDYixlQUFlQztBQUFBLEVBQ2YsYUFBYUM7QUFBQSxFQUNiLGtCQUFrQkM7QUFBQSxFQUNsQixlQUFlO0FBQUEsRUFDZixVQUFVQztBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUNkOyIsCiAgIm5hbWVzIjogWyJwcm9wcyIsICJBc3luY1NlbGVjdE11bHRpRWxlbWVudCIsICJHcmlkIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgInVzZUNvbnRyb2xsZXIiLCAidmFsdWUiLCAiQ2hlY2tib3hFbGVtZW50IiwgIkdyaWQiLCAiQ2hlY2tib3giLCAiRm9ybUNvbnRyb2wiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJGb3JtR3JvdXAiLCAiRm9ybUhlbHBlclRleHQiLCAiR3JpZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJqc3hzIiwgIkNvbXBvbmVudCIsICJHcmlkIiwgImZvcndhcmRSZWYiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VDb250cm9sbGVyIiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAidXNlTWVtbyIsICJ1c2VUaGVtZSIsICJ1c2VNZW1vIiwgImpzeCIsICJ1c2VDb250cm9sbGVyIiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAianN4IiwgImZvcndhcmRSZWYiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAidXNlRm9ya1JlZiIsICJHcmlkIiwgInVzZVN0YXRlIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJwYXNzd29yZCIsICJGb3JtQ29udHJvbCIsICJGb3JtQ29udHJvbExhYmVsIiwgIkZvcm1IZWxwZXJUZXh0IiwgIkZvcm1MYWJlbCIsICJHcmlkIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgInVzZUNvbnRyb2xsZXIiLCAidmFsdWUiLCAiRm9ybUNvbnRyb2wiLCAiRm9ybUxhYmVsIiwgIkZvcm1Db250cm9sTGFiZWwiLCAiRm9ybUhlbHBlclRleHQiLCAiUmFkaW9CdXR0b25Hcm91cCIsICJHcmlkIiwgIkdyaWQiLCAiVGV4dEZpZWxkIiwgIkF1dG9jb21wbGV0ZSIsICJ1c2VUaGVtZSIsICJ1c2VSZWYiLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgIlNlbGVjdENhc2NhZGVFbGVtZW50IiwgIkdyaWQiLCAiVGV4dEZpZWxkIiwgIkF1dG9jb21wbGV0ZSIsICJ1c2VUaGVtZSIsICJ1c2VNZW1vIiwgInVzZUVmZmVjdCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAiU2VsZWN0RWxlbWVudCIsICJHcmlkIiwgIkNoZWNrYm94IiwgIlRleHRGaWVsZCIsICJBdXRvY29tcGxldGUiLCAiQ2lyY3VsYXJQcm9ncmVzcyIsICJ1c2VUaGVtZSIsICJGcmFnbWVudCIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJqc3hzIiwgIkNvbXBvbmVudCIsICJTZWxlY3RNdWx0aUVsZW1lbnQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAidXNlRm9ya1JlZiIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAiVGV4dEZpZWxkIiwgInVzZUNvbnRyb2xsZXIiLCAidXNlRm9ya1JlZiIsICJUZXh0RmllbGRFbGVtZW50IiwgIkdyaWQiLCAiR3JpZCIsICJ1c2VGb3JrUmVmIiwgInVzZUxvY2FsaXphdGlvbkNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgInVzZUxvY2FsaXphdGlvbkNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIlRpbWVQaWNrZXJFbGVtZW50IiwgIkdyaWQiLCAiRm9ybUNvbnRyb2wiLCAiRm9ybUhlbHBlclRleHQiLCAiRm9ybUxhYmVsIiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAiQm94IiwgIkZvcm1Db250cm9sIiwgIkZvcm1IZWxwZXJUZXh0IiwgIkZvcm1MYWJlbCIsICJHcmlkIiwgInVzZUNhbGxiYWNrIiwgInVzZVJlZiIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJqc3hzIiwgIkNvbXBvbmVudCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgIlRleHRGaWVsZCIsICJJbnB1dEFkb3JubWVudCIsICJHcmlkIiwgInVzZUNvbnRyb2xsZXIiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAiQnV0dG9uIiwgIlRleHRGaWVsZCIsICJCb3giLCAiSW5wdXRBZG9ybm1lbnQiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAiQnV0dG9uIiwgIkJveCIsICJUZXh0RmllbGQiLCAiSW5wdXRBZG9ybm1lbnQiLCAianN4IiwgIkNvbXBvbmVudCIsICJ1c2VDb250cm9sbGVyIiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAibWF0Y2giLCAiVGV4dEZpZWxkIiwgIklucHV0QWRvcm5tZW50IiwgIkdyaWQiLCAiQXV0b2NvbXBsZXRlIiwgIkNpcmN1bGFyUHJvZ3Jlc3MiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAidXNlVGhlbWUiLCAiZGVib3VuY2UiLCAiRnJhZ21lbnQiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJUZXh0RmllbGQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIk51bWJlckZpZWxkRWxlbWVudCIsICJHcmlkIiwgIkJveCIsICJHcmlkIiwgIkZvcm1IZWxwZXJUZXh0IiwgImpzeCIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAiQm94IiwgIk9UUElucHV0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkNoZWNrYm94RWxlbWVudCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIlRpbWVQaWNrZXJFbGVtZW50IiwgIlNlbGVjdEVsZW1lbnQiLCAiU2VsZWN0TXVsdGlFbGVtZW50IiwgIlNlbGVjdENhc2NhZGVFbGVtZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJBc3luY1NlbGVjdE11bHRpRWxlbWVudCIsICJPVFBJbnB1dEVsZW1lbnQiXQp9Cg==
|
|
3248
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3dyYXBwZXJzL3R5cGVzL2NvbW1vbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvQ2hlY2tib3hFbGVtZW50L0NoZWNrYm94RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0NoZWNrYm94R3JvdXAvQ2hlY2tib3hHcm91cC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0RhdGVQaWNrZXJFbGVtZW50L0RhdGVQaWNrZXJFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvRGF0ZVBpY2tlckVsZW1lbnRDb3JlLnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclZhbHVlLnRzIiwgIi4uL3NyYy93cmFwcGVycy9EYXRlUGlja2VyRWxlbWVudC9ob29rcy91c2VEYXRlUGlja2VyVmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclN0eWxlcy50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvdXRpbHMudHMiLCAiLi4vc3JjL3dyYXBwZXJzL1Bhc3N3b3JkRWxlbWVudC9QYXNzd29yZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXAudHN4IiwgIi4uL3NyYy93cmFwcGVycy9TZWxlY3RDYXNjYWRlRWxlbWVudC9TZWxlY3RDYXNjYWRlRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdEVsZW1lbnQvU2VsZWN0RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdE11bHRpRWxlbWVudC9TZWxlY3RNdWx0aUVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UZXh0RmllbGRFbGVtZW50L1RleHRGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UaW1lUGlja2VyRWxlbWVudC9UaW1lUGlja2VyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NsaWRlckVsZW1lbnQvU2xpZGVyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0ZpbGVVcGxvYWRFbGVtZW50L0ZpbGVVcGxvYWRFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvUGhvbmVOdW1iZXJFbGVtZW50L1Bob25lTnVtYmVyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1Bob25lTnVtYmVyRWxlbWVudC9Db3VudHJ5U2VsZWN0b3IudHN4IiwgIi4uL3NyYy93cmFwcGVycy9QaG9uZU51bWJlckVsZW1lbnQvY291bnRyaWVzLnRzIiwgIi4uL3NyYy93cmFwcGVycy9Bc3luY1NlbGVjdC9pbmRleC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL051bWJlckZpZWxkRWxlbWVudC9OdW1iZXJGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9PVFBJbnB1dEVsZW1lbnQvT1RQSW5wdXRFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvT1RQSW5wdXRFbGVtZW50L0hlbHBlclRleHQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9GaWVsZC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb21tb24gdHlwZSBkZWZpbml0aW9ucyBmb3Igd3JhcHBlciBjb21wb25lbnRzXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuLyoqXG4gKiBCYXNlIG9wdGlvbiB0eXBlIGZvciBzZWxlY3QtYmFzZWQgY29tcG9uZW50c1xuICpcbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHZhbHVlIHR5cGUgKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPcHRpb248ViA9IHN0cmluZyB8IG51bWJlcj4ge1xuICAvKipcbiAgICogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvblxuICAgKi9cbiAgTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBvcHRpb25cbiAgICovXG4gIFZhbHVlOiBWO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGbGV4aWJsZSBvcHRpb24gdHlwZSB0aGF0IGV4dGVuZHMgYmFzZSBvcHRpb24gd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEFkZGl0aW9uYWwgcHJvcGVydGllcyBvYmplY3RcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEZsZXhpYmxlT3B0aW9uPFxuICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSBUICYgQmFzZU9wdGlvbjtcblxuLyoqXG4gKiBPcHRpb24gdHlwZSB3aXRoIGN1c3RvbWl6YWJsZSBrZXkgbmFtZXNcbiAqIFVzZWZ1bCBmb3IgY29tcG9uZW50cyB0aGF0IGFjY2VwdCBjdXN0b20gbGFiZWxGaWVsZC92YWx1ZUZpZWxkIHByb3BzXG4gKlxuICogQHRlbXBsYXRlIFRWYWx1ZUtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciB2YWx1ZVxuICogQHRlbXBsYXRlIFRMYWJlbEtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciBsYWJlbFxuICogQHRlbXBsYXRlIFREaXNhYmxlZEtleSAtIFRoZSBwcm9wZXJ0eSBuYW1lIGZvciBkaXNhYmxlZCBmbGFnXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDdXN0b21LZXlPcHRpb248XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJlxuICBSZWNvcmQ8VExhYmVsS2V5LCBzdHJpbmc+ICZcbiAgUGFydGlhbDxSZWNvcmQ8VERpc2FibGVkS2V5LCBib29sZWFuPj4gJlxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBMZWdhY3kgb3B0aW9uIHR5cGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBjb2RlXG4gKiBVc2VzIFZhbHVlL0xhYmVsIG5hbWluZyBjb252ZW50aW9uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIEJhc2VPcHRpb24gb3IgRmxleGlibGVPcHRpb24gaW5zdGVhZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeU9wdGlvbiB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uIChjYXBpdGFsaXplZCBrZXkgbmFtZSlcbiAgICovXG4gIExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uIChjYXBpdGFsaXplZCBrZXkgbmFtZSlcbiAgICovXG4gIFZhbHVlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgRGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgb3B0aW9uXG4gKlxuICogQHBhcmFtIFZhbHVlIC0gVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgb3B0aW9uIG9iamVjdFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRPcHRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCYXNlT3B0aW9uIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAnTGFiZWwnIGluIHZhbHVlICYmXG4gICAgJ1ZhbHVlJyBpbiB2YWx1ZSAmJlxuICAgIHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuTGFiZWwgPT09ICdzdHJpbmcnICYmXG4gICAgKHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuVmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIEJhc2VPcHRpb24pLlZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKVxuICApO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBub3JtYWxpemUgb3B0aW9ucyB0byBCYXNlT3B0aW9uIGZvcm1hdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBhcnJheSB0byBub3JtYWxpemVcbiAqIEBwYXJhbSBsYWJlbEZpZWxkIC0gQ3VzdG9tIGxhYmVsIGZpZWxkIG5hbWUgaW4gb3B0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB2YWx1ZUZpZWxkIC0gQ3VzdG9tIHZhbHVlIGZpZWxkIG5hbWUgaW4gb3B0aW9uIG9iamVjdHNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb3B0aW9ucyBhcnJheVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb3B0aW9uczogVFtdLFxuICBsYWJlbEZpZWxkID0gJ0xhYmVsJyxcbiAgdmFsdWVGaWVsZCA9ICdWYWx1ZSdcbik6IEJhc2VPcHRpb25bXSB7XG4gIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICBMYWJlbDogU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSA/PyAnJyksXG4gICAgVmFsdWU6IG9wdGlvblt2YWx1ZUZpZWxkXSBhcyBzdHJpbmcgfCBudW1iZXIsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKSxcbiAgfSkpO1xufVxuIiwgImltcG9ydCB7XG4gIEF1dG9jb21wbGV0ZSxcbiAgQ2lyY3VsYXJQcm9ncmVzcyxcbiAgZGVib3VuY2UsXG4gIEdyaWQsXG4gIFRleHRGaWVsZCxcbiAgdXNlVGhlbWUsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IG1hdGNoIGZyb20gJ2F1dG9zdWdnZXN0LWhpZ2hsaWdodC9tYXRjaCc7XG5pbXBvcnQgcGFyc2UgZnJvbSAnYXV0b3N1Z2dlc3QtaGlnaGxpZ2h0L3BhcnNlJztcbmltcG9ydCBSZWFjdCwge1xuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VNZW1vLFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBGcmFnbWVudCxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBIVE1MQXR0cmlidXRlcywgU3ludGhldGljRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wcywgT3B0aW9uT2JqZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNNdWx0aVNlbGVjdFBheWxvYWQgfSBmcm9tICdAL3R5cGVzJztcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPihcbiAgcHJvcHM6IEFzeW5jTXVsdGlTZWxlY3RFbGVtZW50UHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVE9wdGlvblxuICA+XG4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgY29udHJvbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsYWJlbCxcbiAgICBxdWVyeUZuLFxuICAgIHZhcmlhbnQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcgYXMgVExhYmVsS2V5LFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnIGFzIFRWYWx1ZUtleSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxyZWFkb25seSBUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IGxvYWRlZFZhbHVlc1JlZiA9IHVzZVJlZjxUT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZSA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaW5pdGlhbExvYWRDb21wbGV0ZVJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIC8vIFN0b3JlIHNlbGVjdGVkIG9wdGlvbnMgaW4gYSByZWYgc28gRWZmZWN0IDIgY2FuIGFjY2VzcyB3aXRob3V0IGRlcGVuZGVuY3lcbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zUmVmID0gdXNlUmVmPFRPcHRpb25bXT4oW10pO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbikgPT4gKG9wdGlvbiA/IFN0cmluZyhvcHRpb25bdmFsdWVGaWVsZF0pIDogJycpLFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbikgPT4gKG9wdGlvbiA/IFN0cmluZyhvcHRpb25bbGFiZWxGaWVsZF0pIDogJycpLFxuICAgIFtsYWJlbEZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGZldGNoRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGRlYm91bmNlKFxuICAgICAgICAoXG4gICAgICAgICAgcGF5bG9hZDogQXN5bmNNdWx0aVNlbGVjdFBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IChyZXN1bHRzPzogcmVhZG9ubHkgVE9wdGlvbltdKSA9PiB2b2lkXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Rm4ocGF5bG9hZCkudGhlbihjID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgYyAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KChjIGFzIHsgZGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLmRhdGEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGMgYXMgeyBkYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuZGF0YSBhcyByZWFkb25seSBUT3B0aW9uW11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGMgJiZcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgoYyBhcyB7IERhdGE6IHJlYWRvbmx5IFRPcHRpb25bXSB9KS5EYXRhKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChjIGFzIHsgRGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLkRhdGEgYXMgcmVhZG9ubHkgVE9wdGlvbltdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYWxsYmFjayhbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIDQwMFxuICAgICAgKSxcbiAgICBbcXVlcnlGbl1cbiAgKTtcblxuICAvLyBTeW5jIHJlZiB3aGVuZXZlciBzZWxlY3RlZE9wdGlvbnMgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRPcHRpb25zO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgLy8gRWZmZWN0IDE6IFN5bmMgd2l0aCBleHRlcm5hbCBmaWVsZC52YWx1ZSBjaGFuZ2VzIGZyb20gcmVhY3QtaG9vay1mb3JtIChJTklUSUFMIExPQUQgT05MWSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsdWVzID0gQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6IFtdO1xuXG4gICAgLy8gQ2hlY2sgaWYgaW5pdGlhbCBsb2FkIGlzIGNvbXBsZXRlIGFuZCBjdXJyZW50IGZvcm0gdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBsb2FkZWQgb25lcy5cbiAgICAvLyBJZiBzbywgbm8gbmVlZCB0byByZWZldGNoIGZvciBpbml0aWFsIHBvcHVsYXRpb24uXG4gICAgaWYgKFxuICAgICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ICYmXG4gICAgICBKU09OLnN0cmluZ2lmeShmb3JtVmFsdWVzKSA9PT0gSlNPTi5zdHJpbmdpZnkobG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGZvcm0gdmFsdWVzLCByZXNldCBhbmQgbWFyayBpbml0aWFsIGxvYWQgYXMgY29tcGxldGUuXG4gICAgaWYgKGZvcm1WYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgc2V0T3B0aW9ucyhbXSk7XG4gICAgICBsb2FkZWRWYWx1ZXNSZWYuY3VycmVudCA9IFtdO1xuICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ID0gdHJ1ZTsgLy8gTWFyayBhcyBjb21wbGV0ZSBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gZmV0Y2hcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgcHJvY2VlZCBpZiBmb3JtVmFsdWVzIGFyZSBwcmVzZW50IGFuZCB3ZSBoYXZlbid0IGNvbXBsZXRlZCB0aGUgaW5pdGlhbCBsb2FkIGZvciB0aGVzZSBzcGVjaWZpYyB2YWx1ZXNcbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAvLyBTZXQgbG9hZGVkVmFsdWVzUmVmIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmUtdHJpZ2dlcmluZyB3aXRoIHRoZSBzYW1lIHZhbHVlc1xuICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gZm9ybVZhbHVlcztcbiAgICAvLyBNYXJrIGluaXRpYWwgbG9hZCBhcyBjb21wbGV0ZSBwcm9hY3RpdmVseSBiZWZvcmUgZmV0Y2hpbmcgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuICAgIGluaXRpYWxMb2FkQ29tcGxldGVSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICBmZXRjaERhdGEoeyBRdWVyeTogbnVsbCwgU2VsZWN0ZWRWYWx1ZTogZm9ybVZhbHVlcyB9LCByZXN1bHRzID0+IHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hlZE9wdGlvbnMgPSByZXN1bHRzIHx8IFtdO1xuXG4gICAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbLi4uZmV0Y2hlZE9wdGlvbnNdKTtcbiAgICAgICAgc2V0T3B0aW9ucyhmZXRjaGVkT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW2ZpZWxkLnZhbHVlLCBmZXRjaERhdGFdKTtcblxuICAvLyBFZmZlY3QgMjogSGFuZGxlIHVzZXIgc2VhcmNoIGlucHV0XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc2VhcmNoIGR1cmluZyBpbml0aWFsIHBvcHVsYXRpb25cbiAgICBpZiAoaXNJbml0aWFsUG9wdWxhdGlvbkFjdGl2ZS5jdXJyZW50IHx8ICFpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBpbnB1dCBpcyBlbXB0eSwganVzdCBzaG93IHRoZSBzZWxlY3RlZCBvcHRpb25zXG4gICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICAvLyBJZiBubyBvcHRpb25zIGFyZSBzZWxlY3RlZCwgY2xlYXIgdGhlIG9wdGlvbnMgdG8gZGlzcGxheSBcIm5vT3B0aW9uc1RleHRcIlxuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgc2hvdyB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuICAgICAgICBzZXRPcHRpb25zKHNlbGVjdGVkT3B0aW9uc1JlZi5jdXJyZW50KTtcbiAgICAgIH1cblxuICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBmZXRjaCBpZiB0aGUgaW5wdXQgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICBmZXRjaERhdGEoeyBRdWVyeTogaW5wdXRWYWx1ZSwgU2VsZWN0ZWRWYWx1ZTogbnVsbCB9LCBzZWFyY2hSZXN1bHRzID0+IHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHNlYXJjaFJlc3VsdHMgfHwgW107XG4gICAgICAgIC8vIFVzZSByZWYgdG8gZ2V0IGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9ucyB3aXRob3V0IGFkZGluZyB0byBkZXBlbmRlbmNpZXNcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkID0gc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgICBjdXJyZW50U2VsZWN0ZWQubWFwKG9wdCA9PiBnZXRPcHRpb25WYWx1ZShvcHQpKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb21iaW5lZCA9IFsuLi5jdXJyZW50U2VsZWN0ZWRdO1xuXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb25JZHMuaGFzKGdldE9wdGlvblZhbHVlKHJlc3VsdCkpKSB7XG4gICAgICAgICAgICBjb21iaW5lZC5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0T3B0aW9ucyhjb21iaW5lZCk7XG4gICAgICAgIGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZi5jdXJyZW50ID0gaW5wdXRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBDUklUSUNBTDogUmVtb3ZlZCBzZWxlY3RlZE9wdGlvbnMgZnJvbSBkZXBlbmRlbmNpZXMgLSB1c2UgcmVmIGluc3RlYWRcbiAgfSwgW2lucHV0VmFsdWUsIGZldGNoRGF0YSwgZ2V0T3B0aW9uVmFsdWVdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXzogU3ludGhldGljRXZlbnQsIG5ld1NlbGVjdGVkT3B0aW9uczogVE9wdGlvbltdKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG5ld1NlbGVjdGVkT3B0aW9ucyk7XG4gICAgY29uc3QgbmV3VmFsdWVzID0gbmV3U2VsZWN0ZWRPcHRpb25zLm1hcChjID0+IGNbdmFsdWVGaWVsZF0pO1xuXG4gICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBuZXdWYWx1ZXMpO1xuICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gbmV3VmFsdWVzIGFzIHVua25vd24gYXMgVE9wdGlvbltdO1xuICAgIHNldE9wdGlvbnMobmV3U2VsZWN0ZWRPcHRpb25zKTtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAvLyBDbGVhciBsYXN0IHNlYXJjaCB0ZXJtIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG4gIH07XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkaXNhYmxlZCA/PyBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICBtdWx0aXBsZVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWwpID0+XG4gICAgICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGdldE9wdGlvblZhbHVlKHZhbClcbiAgICAgIH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB2YWx1ZT17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zXG4gICAgICBmaWx0ZXJPcHRpb25zPXt4ID0+IHh9XG4gICAgICBub09wdGlvbnNUZXh0PVwiVHlwZSBTb21ldGhpbmcuLi5cIlxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHN4PXt7XG4gICAgICAgICcmLk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUlucHV0QmFzZS1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCxcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkIC5NdWlBdXRvY29tcGxldGUtcG9wdXBJbmRpY2F0b3InOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWRpc2FibGVkIC5NdWlPdXRsaW5lZElucHV0LW5vdGNoZWRPdXRsaW5lJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpRmlsbGVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgICAgb25JbnB1dENoYW5nZT17KF8sIG5ld0lucHV0VmFsdWUpID0+IHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSl9XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBJbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgIGVuZEFkb3JubWVudDogKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBjb2xvcj1cImluaGVyaXRcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICByZW5kZXJPcHRpb249eyhwcm9wcywgb3B0aW9uLCBzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgLi4ub3B0aW9uUHJvcHMgfSA9XG4gICAgICAgICAgcHJvcHMgYXMgSFRNTEF0dHJpYnV0ZXM8SFRNTExJRWxlbWVudD4gJiB7IGtleTogc3RyaW5nIH07XG4gICAgICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gZ2V0T3B0aW9uTGFiZWwob3B0aW9uKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IG1hdGNoKG9wdGlvbkxhYmVsLCBzdGF0ZS5pbnB1dFZhbHVlLCB7XG4gICAgICAgICAgaW5zaWRlV29yZHM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhcnNlKG9wdGlvbkxhYmVsLCBtYXRjaGVzKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2tleX0gey4uLm9wdGlvblByb3BzfT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHtwYXJ0cy5tYXAoKHBhcnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBwYXJ0LmhpZ2hsaWdodCA/IDcwMCA6IDQwMCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3BhcnQudGV4dH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPih7XG4gIGdyaWRQcm9wcyxcbiAgLi4ucHJvcHNcbn06IEFzeW5jTXVsdGlTZWxlY3RFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIFRWYWx1ZUtleSxcbiAgVExhYmVsS2V5LFxuICBUT3B0aW9uXG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgaWYgKGdyaWRQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICA8R3JpZFxuICAgICAgICB7Li4ueyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sIC4uLmdyaWRQcm9wcyB9fVxuICAgICAgPlxuICAgICAgICA8Q29tcG9uZW50PFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZUtleSwgVExhYmVsS2V5LCBUT3B0aW9uPlxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvR3JpZD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50PFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZUtleSwgVExhYmVsS2V5LCBUT3B0aW9uPiB7Li4ucHJvcHN9IC8+XG4gICk7XG59O1xuXG5Bc3luY1NlbGVjdE11bHRpRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdBc3luY1NlbGVjdE11bHRpJztcblxuZXhwb3J0IHsgQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQgfTtcbiIsICJpbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMsIFBhdGhWYWx1ZSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgdXNlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtJztcblxuaW1wb3J0IHR5cGUgeyBDaGVja2JveEVsZW1lbnRQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBDaGVja2JveEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IENoZWNrYm94RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgbGFiZWwsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBoZWxwZXJUZXh0LFxuICAgIHBhcnNlRXJyb3IsXG4gICAgdHJhbnNmb3JtLFxuICAgIGRpc2FibGVkLFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGRpc2FibGVkLFxuICB9KTtcblxuICBpZiAoZmllbGQudmFsdWUgPT0gbnVsbCB8fCBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICBmaWVsZC5vbkNoYW5nZShmYWxzZSk7XG4gIH1cblxuICBjb25zdCBjdXN0b21PdXRwdXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0/Lm91dHB1dDtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIGJvb2xlYW4+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IHZhbHVlID0+ICEhdmFsdWUsXG4gICAgICBvdXRwdXQ6XG4gICAgICAgIHR5cGVvZiBjdXN0b21PdXRwdXRUcmFuc2Zvcm0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IChldmVudE9yVmFsdWUsIF92YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAvLyBBZGFwdGVyOiBFeHRyYWN0IGV2ZW50IGFuZCBjaGVja2VkIGZyb20gdGhlIGNoZWNrYm94IG9uQ2hhbmdlIHNpZ25hdHVyZVxuICAgICAgICAgICAgICAvLyBDaGVja2JveEVsZW1lbnQgcGFzc2VzIChldmVudCwgY2hlY2tlZCksIGJ1dCB1c2VUcmFuc2Zvcm0gZXhwZWN0cyAoZXZlbnRPclZhbHVlLCB2YWx1ZSlcbiAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE9yVmFsdWUgYXMgUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD47XG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBfdmFsdWUgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjdXN0b21PdXRwdXRUcmFuc2Zvcm0oZXZlbnQsIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogKGV2ZW50T3JWYWx1ZSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlZmF1bHQ6IGV4dHJhY3QgY2hlY2tlZCBzdGF0ZSBmcm9tIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBfdmFsdWUgYXMgdW5rbm93biBhcyBib29sZWFuO1xuXG4gICAgICAgICAgICAgIHJldHVybiBjaGVja2VkIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PixcbiAgICBjaGVja2VkOiBib29sZWFuXG4gICkgPT4ge1xuICAgIG9uQ2hhbmdlKGV2ZW50LCBjaGVja2VkKTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXN0b21PbkNoYW5nZShldmVudCwgY2hlY2tlZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc3BsYXlFcnJvcjogUmVhY3ROb2RlID0gZXJyb3JcbiAgICA/IHR5cGVvZiBwYXJzZUVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHBhcnNlRXJyb3IoZXJyb3IpXG4gICAgICA6IGVycm9yLm1lc3NhZ2VcbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9IGRpc2FibGVkPXtkaXNhYmxlZH0+XG4gICAgICA8Rm9ybUdyb3VwIHJvdz5cbiAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICBsYWJlbD17bGFiZWwgfHwgJyd9XG4gICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICBjb2xvcj17cmVzdC5jb2xvciB8fCAncHJpbWFyeSd9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3ZhbHVlfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIHsoZGlzcGxheUVycm9yIHx8IGhlbHBlclRleHQpICYmIChcbiAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7ZGlzcGxheUVycm9yIHx8IGhlbHBlclRleHR9XG4gICAgICAgIDwvRm9ybUhlbHBlclRleHQ+XG4gICAgICApfVxuICAgIDwvRm9ybUNvbnRyb2w+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgQ2hlY2tib3ggY29tcG9uZW50IHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24gYW5kIGdyaWQgbGF5b3V0LlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBjaGVja2JveCBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHkgd2l0aCByZWFjdC1ob29rLWZvcm0sXG4gKiBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCB2YWx1ZSB0cmFuc2Zvcm1hdGlvbiwgYW5kIG9wdGlvbmFsIEdyaWQgd3JhcHBlciBmb3IgcmVzcG9uc2l2ZSBsYXlvdXRzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvbiB3aXRoIHVzZUNvbnRyb2xsZXJcbiAqIC0gQXV0b21hdGljIGVycm9yIGRpc3BsYXkgd2l0aCBjdXN0b20gcGFyc2luZyBzdXBwb3J0XG4gKiAtIFZhbHVlIHRyYW5zZm9ybWF0aW9uIHdpdGggdXNlVHJhbnNmb3JtIGhvb2sgZm9yIGJvb2xlYW4gdmFsdWVzXG4gKiAtIEN1c3RvbWl6YWJsZSBsYWJlbCBhbmQgcG9zaXRpb25pbmdcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlciB3aXRoIHJlc3BvbnNpdmUgZGVzaWduXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHkgd2l0aCBnZW5lcmljIGNvbnN0cmFpbnRzXG4gKiAtIERpc2FibGVkIHN0YXRlIHN1cHBvcnQgd2l0aCBwcm9wZXIgdGhlbWluZ1xuICogLSBIZWxwZXIgdGV4dCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIGNvbnRleHRcbiAqIC0gQ3VzdG9tIGVycm9yIHBhcnNpbmcgZm9yIGludGVybmF0aW9uYWxpemF0aW9uXG4gKiAtIFNpbXBsZSBib29sZWFuIHZhbHVlIGhhbmRsaW5nIHdpdGggb3B0aW9uYWwgY3VzdG9tIHRyYW5zZm9ybXNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFjY2VwdFRlcm1zXCJcbiAqICAgbGFiZWw9XCJJIGFncmVlIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9uc1wiXG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggdmFsaWRhdGlvbiBhbmQgaGVscGVyIHRleHQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cIm5ld3NsZXR0ZXJcIlxuICogICBsYWJlbD1cIlN1YnNjcmliZSB0byBuZXdzbGV0dGVyXCJcbiAqICAgaGVscGVyVGV4dD1cIllvdSBjYW4gdW5zdWJzY3JpYmUgYXQgYW55IHRpbWVcIlxuICogICBydWxlcz17eyByZXF1aXJlZDogJ1BsZWFzZSBhY2NlcHQgdG8gY29udGludWUnIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBncmlkIGxheW91dCBhbmQgc3R5bGluZzpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiaXNQdWJsaWNcIlxuICogICBsYWJlbD1cIk1ha2UgdGhpcyBwdWJsaWNcIlxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgbGFiZWxQcm9wcz17eyBzeDogeyBmb250V2VpZ2h0OiAnYm9sZCcgfSB9fVxuICogICBzeD17eyBjb2xvcjogJ3ByaW1hcnkubWFpbicgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCB2YWx1ZSB0cmFuc2Zvcm1hdGlvbiAoc3RyaW5nIHRvIGJvb2xlYW4pOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJzdGF0dXNcIlxuICogICBsYWJlbD1cIkFjdGl2ZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAodmFsdWUpID0+IHZhbHVlID09PSAnYWN0aXZlJyxcbiAqICAgICBvdXRwdXQ6IChjaGVja2VkKSA9PiBjaGVja2VkID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFNpbXBsZSBib29sZWFuIGZpZWxkOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJpc0VuYWJsZWRcIlxuICogICBsYWJlbD1cIkVuYWJsZSBmZWF0dXJlXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGVycm9yIHBhcnNpbmcgZm9yIGludGVybmF0aW9uYWxpemF0aW9uOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ0ZXJtc1wiXG4gKiAgIGxhYmVsPVwiQWNjZXB0IFRlcm1zXCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiB0KGB2YWxpZGF0aW9uLiR7ZXJyb3IudHlwZX1gLCB7IGZpZWxkOiAnVGVybXMnIH0pfVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgQ2hlY2tib3hFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBDaGVja2JveEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZT4gey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IENoZWNrYm94RWxlbWVudCB9O1xuXG5leHBvcnQgdHlwZSB7IENoZWNrYm94RWxlbWVudFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG4iLCAiaW1wb3J0IHR5cGUge1xuICBDaGVja2JveFByb3BzLFxuICBGb3JtQ29udHJvbExhYmVsUHJvcHMsXG4gIEZvcm1MYWJlbFByb3BzLFxuICBHcmlkUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgQ2hlY2tib3gsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbExhYmVsLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1IZWxwZXJUZXh0LFxuICBGb3JtTGFiZWwsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQ2hlY2tib3hHcm91cCBjb21wb25lbnRcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdmFsdWUgYXJyYXkgdHlwZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG4vLyBUeXBlIGZvciBwcmltaXRpdmUgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYXMgcmFkaW8gYnV0dG9uIHZhbHVlc1xudHlwZSBQcmltaXRpdmVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbi8vIENvbnN0cmFpbnQgdG8gZW5zdXJlIG9wdGlvbiBvYmplY3RzIGhhdmUgdGhlIHJlcXVpcmVkIGtleXNcbnR5cGUgT3B0aW9uT2JqZWN0PFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IFJlY29yZDxUVmFsdWVLZXksIFByaW1pdGl2ZVZhbHVlPiAmXG4gIFJlY29yZDxUTGFiZWxLZXksIHN0cmluZz4gJlxuICBQYXJ0aWFsPFJlY29yZDxURGlzYWJsZWRLZXksIGJvb2xlYW4+PjtcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hHcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4gPSBPbWl0PENoZWNrYm94UHJvcHMsICduYW1lJz4gJiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGUgY2hlY2tib3ggZ3JvdXBcbiAgICovXG4gIGxhYmVsPzogRm9ybUNvbnRyb2xMYWJlbFByb3BzWydsYWJlbCddO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciBGb3JtQ29udHJvbExhYmVsXG4gICAqL1xuICBsYWJlbFByb3BzPzogT21pdDxGb3JtQ29udHJvbExhYmVsUHJvcHMsICdsYWJlbCcgfCAnY29udHJvbCc+O1xuXG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXJcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG5cbiAgb3B0aW9uczogVE9wdGlvbltdO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGZvcm1MYWJlbFByb3BzPzogT21pdDxGb3JtTGFiZWxQcm9wcywgJ3JlcXVpcmVkJyB8ICdlcnJvcic+O1xuXG4gIGxhYmVsS2V5PzogVExhYmVsS2V5O1xuICB2YWx1ZUtleT86IFRWYWx1ZUtleTtcbiAgZGlzYWJsZWRLZXk/OiBURGlzYWJsZWRLZXk7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBDaGVja2JveEdyb3VwPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oXG4gIHByb3BzOiBDaGVja2JveEdyb3VwUHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRPcHRpb24sXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgbGFiZWwsXG4gICAgcmVxdWlyZWQsXG4gICAgZm9ybUxhYmVsUHJvcHMsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBsYWJlbEtleSA9ICdMYWJlbCcgYXMgVExhYmVsS2V5LFxuICAgIHZhbHVlS2V5ID0gJ1ZhbHVlJyBhcyBUVmFsdWVLZXksXG4gICAgb3B0aW9ucyxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGRpc2FibGVkOiByZXN0LmRpc2FibGVkLFxuICB9KTtcblxuICBjb25zdCBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nID0gKFxuICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBbXVxuICApLm1hcChTdHJpbmcpO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZWRWYWx1ZVN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuXG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFZhbHVlc1N0cmluZyA9IGlzQ2hlY2tlZFxuICAgICAgICA/IFsuLi5zZWxlY3RlZFZhbHVlc0FzU3RyaW5nLCBjaGFuZ2VkVmFsdWVTdHJpbmddXG4gICAgICAgIDogc2VsZWN0ZWRWYWx1ZXNBc1N0cmluZy5maWx0ZXIodiA9PiB2ICE9PSBjaGFuZ2VkVmFsdWVTdHJpbmcpO1xuXG4gICAgICBjb25zdCBvcHRpb25zQXJlTnVtZXJpYyA9XG4gICAgICAgIG9wdGlvbnMubGVuZ3RoID4gMCAmJiB0eXBlb2Ygb3B0aW9uc1swXVt2YWx1ZUtleV0gPT09ICdudW1iZXInO1xuXG4gICAgICBpZiAob3B0aW9uc0FyZU51bWVyaWMpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzQXNOdW1iZXJzID0gbmV3U2VsZWN0ZWRWYWx1ZXNTdHJpbmdcbiAgICAgICAgICAubWFwKHYgPT4gcGFyc2VJbnQodiwgMTApKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiAhaXNOYU4odikpO1xuXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlc0FzTnVtYmVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShuZXdTZWxlY3RlZFZhbHVlc1N0cmluZyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZmllbGQsIG9wdGlvbnMsIHZhbHVlS2V5LCBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Db250cm9sIGVycm9yPXshIWVycm9yfT5cbiAgICAgIHtsYWJlbCAmJiAoXG4gICAgICAgIDxGb3JtTGFiZWwgey4uLmZvcm1MYWJlbFByb3BzfSByZXF1aXJlZD17cmVxdWlyZWR9IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvRm9ybUxhYmVsPlxuICAgICAgKX1cbiAgICAgIDxGb3JtR3JvdXAgcm93PlxuICAgICAgICB7b3B0aW9ucyAmJlxuICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e2Ake29wdGlvblt2YWx1ZUtleV19YH1cbiAgICAgICAgICAgICAgbGFiZWw9e29wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgIHsuLi5sYWJlbFByb3BzfVxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgY29sb3I9e3Jlc3QuY29sb3IgfHwgJ3ByaW1hcnknfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e29wdGlvblt2YWx1ZUtleV19XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZFZhbHVlc0FzU3RyaW5nLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcob3B0aW9uW3ZhbHVlS2V5XSlcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgIDxGb3JtSGVscGVyVGV4dCBlcnJvcj17ISFlcnJvcn0+e2Vycm9yLm1lc3NhZ2V9PC9Gb3JtSGVscGVyVGV4dD5cbiAgICAgICl9XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbi8qKlxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBDaGVja2JveEdyb3VwIGNvbXBvbmVudCBmb3IgbXVsdGlwbGUgY2hlY2tib3ggc2VsZWN0aW9uLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZ3JvdXAgb2YgY2hlY2tib3hlcyB0aGF0IHdvcmsgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIG1hbmFnaW5nIGFuIGFycmF5IG9mIHNlbGVjdGVkIHZhbHVlcyB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cbiAqIC0gTXVsdGlwbGUgY2hlY2tib3ggc2VsZWN0aW9uIHdpdGggYXJyYXkgdmFsdWUgbWFuYWdlbWVudFxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydFxuICogLSBOYU4gdmFsaWRhdGlvbiBmb3IgbnVtZXJpYyB2YWx1ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEdyb3VwXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJzZWxlY3RlZENhdGVnb3JpZXNcIlxuICogICBvcHRpb25zPXtbXG4gKiAgICAgeyBWYWx1ZTogMSwgTGFiZWw6ICdDYXRlZ29yeSAxJyB9LFxuICogICAgIHsgVmFsdWU6IDIsIExhYmVsOiAnQ2F0ZWdvcnkgMicgfSxcbiAqICAgICB7IFZhbHVlOiAzLCBMYWJlbDogJ0NhdGVnb3J5IDMnIH0sXG4gKiAgIF19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGdyaWQgbGF5b3V0OlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hHcm91cFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicGVybWlzc2lvbnNcIlxuICogICBvcHRpb25zPXtwZXJtaXNzaW9uT3B0aW9uc31cbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgIGRpc2FibGVkPXshaGFzRWRpdFBlcm1pc3Npb259XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHZhbHVlIGFycmF5IHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IENoZWNrYm94R3JvdXBFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IENoZWNrYm94R3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVE9wdGlvbixcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFREaXNhYmxlZEtleVxuPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbkNoZWNrYm94R3JvdXBFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0NoZWNrYm94R3JvdXAnO1xuXG5leHBvcnQgeyBDaGVja2JveEdyb3VwRWxlbWVudCB9O1xuIiwgImltcG9ydCB7IEdyaWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHR5cGUge1xuICBQaWNrZXJWYWxpZERhdGUsXG59IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzXCI7XG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUge1xuICBGaWVsZFZhbHVlcyxcbiAgRmllbGRQYXRoLFxufSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbmltcG9ydCB7IERhdGVQaWNrZXJFbGVtZW50Q29yZSB9IGZyb20gXCIuL0RhdGVQaWNrZXJFbGVtZW50Q29yZVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlUGlja2VyRWxlbWVudFByb3BzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBBIGZ1bGx5LWZlYXR1cmVkLCB0eXBlLXNhZmUgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IGZvciByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgY29tYmluZXMgdGhlIGNvcmUgZGF0ZSBwaWNrZXIgZnVuY3Rpb25hbGl0eSB3aXRoIG9wdGlvbmFsIEdyaWQgbGF5b3V0IHdyYXBwaW5nLFxuICogcHJvdmlkaW5nIGEgY29tcGxldGUgc29sdXRpb24gZm9yIGZvcm0tYmFzZWQgZGF0ZSBzZWxlY3Rpb24gd2l0aCBjb21wcmVoZW5zaXZlIFR5cGVTY3JpcHQgc3VwcG9ydC5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIFx1RDgzQ1x1REZBRiAqKlR5cGUgU2FmZXR5Kio6IEZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2UgZm9yIGZvcm0gZmllbGQgdHlwZXMgYW5kIGRhdGUgdmFsdWVzXG4gKiAtIFx1RDgzRFx1REQyNyAqKlJlYWN0IEhvb2sgRm9ybSBJbnRlZ3JhdGlvbioqOiBTZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHJlYWN0LWhvb2stZm9ybSB2YWxpZGF0aW9uXG4gKiAtIFx1RDgzQ1x1REZBOCAqKlRoZW1pbmcqKjogQXV0b21hdGljIGFkYXB0YXRpb24gdG8gTVVJIHRoZW1lIHdpdGggY3VzdG9taXphYmxlIHN0eWxlc1xuICogLSBcdTI2N0YgKipBY2Nlc3NpYmlsaXR5Kio6IFdDQUctY29tcGxpYW50IHdpdGggcHJvcGVyIEFSSUEgYXR0cmlidXRlcyBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvblxuICogLSBcdUQ4M0RcdURFODAgKipQZXJmb3JtYW5jZSoqOiBPcHRpbWl6ZWQgd2l0aCBtZW1vaXphdGlvbiBhbmQgZWZmaWNpZW50IHJlLXJlbmRlcmluZ1xuICogLSBcdUQ4M0RcdURDRjEgKipSZXNwb25zaXZlKio6IEJ1aWx0LWluIEdyaWQgbGF5b3V0IHdpdGggY29uZmlndXJhYmxlIGJyZWFrcG9pbnRzXG4gKiAtIFx1RDgzRFx1REVFMVx1RkUwRiAqKlZhbGlkYXRpb24qKjogQ29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1lc3NhZ2VzXG4gKiAtIFx1RDgzRFx1REQwNCAqKlRyYW5zZm9ybWF0aW9uKio6IEZsZXhpYmxlIHZhbHVlIHRyYW5zZm9ybWF0aW9uIGJldHdlZW4gZm9ybSBhbmQgcGlja2VyIGZvcm1hdHNcbiAqIC0gXHVEODNEXHVEQ0RBICoqRGV2ZWxvcGVyIEV4cGVyaWVuY2UqKjogUmljaCBUeXBlU2NyaXB0IEludGVsbGlTZW5zZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIEdyaWQgd3JhcHBlcjpcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG4gKiBpbXBvcnQgeyBEYXRlUGlja2VyRWxlbWVudCB9IGZyb20gJ0BnbndlYnNvZnQvdWkvd3JhcHBlcnMnO1xuICpcbiAqIGZ1bmN0aW9uIE15Rm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgYmlydGhEYXRlOiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPERhdGVQaWNrZXJFbGVtZW50XG4gKiAgICAgICBuYW1lPVwiYmlydGhEYXRlXCJcbiAqICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgICAgICBsYWJlbD1cIkRhdGUgb2YgQmlydGhcIlxuICogICAgICAgcmVxdWlyZWRcbiAqICAgICAvPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEFkdmFuY2VkIHVzYWdlIHdpdGggY3VzdG9tIHRyYW5zZm9ybWF0aW9uIGFuZCB2YWxpZGF0aW9uOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBBZHZhbmNlZEZvcm0oKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybTx7IHN0YXJ0RGF0ZTogRGF0ZSB9PigpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJzdGFydERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiUHJvamVjdCBTdGFydCBEYXRlXCJcbiAqICAgICAgIHRyYW5zZm9ybT17e1xuICogICAgICAgICBpbnB1dDogKGRhdGVTdHJpbmcpID0+IGRhdGVTdHJpbmcgPyBuZXcgRGF0ZShkYXRlU3RyaW5nKSA6IG51bGwsXG4gKiAgICAgICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgICAgICB9fVxuICogICAgICAgdmFsaWRhdGlvbj17e1xuICogICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICogICAgICAgICBtYXhEYXRlOiBhZGRZZWFycyhuZXcgRGF0ZSgpLCAyKSxcbiAqICAgICAgICAgZXJyb3JNZXNzYWdlczoge1xuICogICAgICAgICAgIG1pbkRhdGU6ICdTdGFydCBkYXRlIG11c3QgYmUgdG9kYXkgb3IgbGF0ZXInLFxuICogICAgICAgICAgIG1heERhdGU6ICdTdGFydCBkYXRlIGNhbm5vdCBiZSBtb3JlIHRoYW4gMiB5ZWFycyBpbiB0aGUgZnV0dXJlJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9fVxuICogICAgICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgICAgICBzeD17e1xuICogICAgICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290Jzoge1xuICogICAgICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9fVxuICogICAgIC8+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aG91dCBHcmlkIHdyYXBwZXIgZm9yIGN1c3RvbSBsYXlvdXRzOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBDdXN0b21MYXlvdXQoKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybTx7IGV2ZW50RGF0ZTogc3RyaW5nIH0+KCk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxCb3ggZGlzcGxheT1cImZsZXhcIiBnYXA9ezJ9PlxuICogICAgICAgPERhdGVQaWNrZXJFbGVtZW50XG4gKiAgICAgICAgIG5hbWU9XCJldmVudERhdGVcIlxuICogICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgICBsYWJlbD1cIkV2ZW50IERhdGVcIlxuICogICAgICAgICBncmlkUHJvcHM9e2ZhbHNlfSAvLyBEaXNhYmxlcyBHcmlkIHdyYXBwZXJcbiAqICAgICAgIC8+XG4gKiAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIj5TdWJtaXQ8L0J1dHRvbj5cbiAqICAgICA8L0JveD5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGxvYWRpbmcgc3RhdGUgYW5kIGN1c3RvbSBlcnJvciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gTG9hZGluZ0Zvcm0oKSB7XG4gKiAgIGNvbnN0IHsgY29udHJvbCB9ID0gdXNlRm9ybSgpO1xuICogICBjb25zdCBbaXNWYWxpZGF0aW5nLCBzZXRJc1ZhbGlkYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJhcHBvaW50bWVudERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiQXBwb2ludG1lbnQgRGF0ZVwiXG4gKiAgICAgICBsb2FkaW5nPXtpc1ZhbGlkYXRpbmd9XG4gKiAgICAgICBMb2FkaW5nQ29tcG9uZW50PXsoKSA9PiA8Q2lyY3VsYXJQcm9ncmVzcyBzaXplPXsyMH0gLz59XG4gKiAgICAgICBwYXJzZUVycm9yPXsoZXJyb3IpID0+IHtcbiAqICAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3I/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gKiAgICAgICAgICAgcmV0dXJuICdUaGlzIGRhdGUgY29uZmxpY3RzIHdpdGggYW5vdGhlciBhcHBvaW50bWVudCc7XG4gKiAgICAgICAgIH1cbiAqICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ1BsZWFzZSBzZWxlY3QgYSB2YWxpZCBkYXRlJztcbiAqICAgICAgIH19XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZSAoaW5mZXJyZWQgZnJvbSBjb250cm9sKVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZSAoaW5mZXJyZWQgZnJvbSBuYW1lIHByb3ApXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGUgKGluZmVycmVkIGZyb20gdHJhbnNmb3JtIGZ1bmN0aW9ucylcbiAqIEB0ZW1wbGF0ZSBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIC0gV2hldGhlciBhY2Nlc3NpYmxlIGZpZWxkIERPTSBzdHJ1Y3R1cmUgaXMgZW5hYmxlZFxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wcyB3aXRoIGZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2VcbiAqIEBwYXJhbSByZWYgLSBGb3J3YXJkIHJlZiBmb3IgdGhlIHJvb3QgZWxlbWVudCAoR3JpZCBvciBEYXRlUGlja2VyIGNvbnRhaW5lcilcbiAqIEByZXR1cm5zIFJlbmRlcmVkIERhdGVQaWNrZXJFbGVtZW50IGNvbXBvbmVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICovXG5jb25zdCBEYXRlUGlja2VyRWxlbWVudCA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICBEYXRlUGlja2VyRWxlbWVudFByb3BzPGFueSwgYW55LCBhbnksIGFueT5cbj4oPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbiAgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbj4oXG4gIHByb3BzOiBEYXRlUGlja2VyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZSwgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gIHJlZjogUmVhY3QuUmVmPEhUTUxEaXZFbGVtZW50PlxuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBncmlkUHJvcHMgPSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9LFxuICAgIC4uLmNvcmVQcm9wc1xuICB9ID0gcHJvcHM7XG5cbiAgLy8gSWYgZ3JpZFByb3BzIGlzIGV4cGxpY2l0bHkgZmFsc2UsIHJlbmRlciB3aXRob3V0IEdyaWQgd3JhcHBlclxuICBpZiAoZ3JpZFByb3BzID09PSBmYWxzZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB7Li4uY29yZVByb3BzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgLy8gUmVuZGVyIHdpdGggR3JpZCB3cmFwcGVyIGZvciByZXNwb25zaXZlIGxheW91dFxuICByZXR1cm4gKFxuICAgIDxHcmlkXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHsuLi5ncmlkUHJvcHN9XG4gICAgPlxuICAgICAgPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICAgICAgICB7Li4uY29yZVByb3BzfVxuICAgICAgLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59KTtcblxuLy8gU2V0IGRpc3BsYXkgbmFtZSBmb3IgUmVhY3QgRGV2ZWxvcGVyIFRvb2xzXG5EYXRlUGlja2VyRWxlbWVudC5kaXNwbGF5TmFtZSA9IFwiRGF0ZVBpY2tlckVsZW1lbnRcIjtcblxuZXhwb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnQgfTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlckVsZW1lbnQ7XG4iLCAiaW1wb3J0IHsgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0BtdWkveC1kYXRlLXBpY2tlcnMnO1xuaW1wb3J0IHR5cGUge1xuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxuICBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dCxcbiAgUGlja2VyVmFsaWREYXRlLFxufSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFZhbHVlcywgRmllbGRQYXRoIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHtcbiAgdXNlRGF0ZVBpY2tlclZhbHVlLFxuICB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbixcbiAgdXNlRGF0ZVBpY2tlclN0eWxlcyxcbn0gZnJvbSAnLi9ob29rcyc7XG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGNvcmUgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IHdpdGhvdXQgR3JpZCB3cmFwcGVyLlxuICpcbiAqIFRoaXMgaXMgYSBsaWdodHdlaWdodCwgcGVyZm9ybWFudCBkYXRlIHBpY2tlciBjb21wb25lbnQgdGhhdCBpbnRlZ3JhdGVzIHNlYW1sZXNzbHlcbiAqIHdpdGggcmVhY3QtaG9vay1mb3JtIHdoaWxlIHByb3ZpZGluZyBjb21wcmVoZW5zaXZlIFR5cGVTY3JpcHQgc3VwcG9ydCBhbmRcbiAqIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgVHlwZVNjcmlwdCBpbmZlcmVuY2UgZm9yIGZvcm0gZmllbGQgdHlwZXNcbiAqIC0gQXV0b21hdGljIHZhbHVlIHRyYW5zZm9ybWF0aW9uIGJldHdlZW4gZm9ybSBhbmQgcGlja2VyIGZvcm1hdHNcbiAqIC0gQ29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1lc3NhZ2VzXG4gKiAtIFRoZW1lLWF3YXJlIHN0eWxpbmcgd2l0aCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnRcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemVkIHdpdGggcHJvcGVyIG1lbW9pemF0aW9uXG4gKiAtIEZvcndhcmQgcmVmIHN1cHBvcnQgZm9yIGFkdmFuY2VkIHVzZSBjYXNlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICogICBuYW1lPVwiYmlydGhEYXRlXCJcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbGFiZWw9XCJEYXRlIG9mIEJpcnRoXCJcbiAqICAgcmVxdWlyZWRcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gdHJhbnNmb3JtYXRpb246XG4gKiBgYGB0c3hcbiAqIDxEYXRlUGlja2VyRWxlbWVudENvcmVcbiAqICAgbmFtZT1cInN0YXJ0RGF0ZVwiXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIGxhYmVsPVwiU3RhcnQgRGF0ZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICBvdXRwdXQ6IChkYXRlKSA9PiBkYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogbnVsbFxuICogICB9fVxuICogICB2YWxpZGF0aW9uPXt7XG4gKiAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAqICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICBtaW5EYXRlOiAnU3RhcnQgZGF0ZSBtdXN0IGJlIHRvZGF5IG9yIGxhdGVyJ1xuICogICAgIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICogQHRlbXBsYXRlIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgLSBXaGV0aGVyIGFjY2Vzc2libGUgZmllbGQgRE9NIHN0cnVjdHVyZSBpcyBlbmFibGVkXG4gKi9cbmNvbnN0IERhdGVQaWNrZXJFbGVtZW50Q29yZSA9IGZvcndhcmRSZWY8XG4gIEhUTUxEaXZFbGVtZW50LFxuICBEYXRlUGlja2VyRWxlbWVudENvcmVQcm9wczxhbnksIGFueSwgYW55LCBhbnk+XG4+KFxuICA8XG4gICAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gICAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICAgIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsXG4gID4oXG4gICAgcHJvcHM6IERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzPFxuICAgICAgVEZpZWxkVmFsdWVzLFxuICAgICAgVE5hbWUsXG4gICAgICBUVmFsdWUsXG4gICAgICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlXG4gICAgPixcbiAgICByZWY6IFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICBjb250cm9sLFxuICAgICAgcGFyc2VFcnJvcixcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHZhbGlkYXRpb24sXG4gICAgICBsYWJlbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgdGV4dFJlYWRPbmx5ID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaW5wdXRQcm9wcyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBkYXRlUGlja2VyUHJvcHMgPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnLFxuICAgICAgbG9hZGluZyA9IGZhbHNlLFxuICAgICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgRGF0ZVBpY2tlci1zcGVjaWZpYyBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW5wdXRSZWY6IGV4dGVybmFsSW5wdXRSZWYsXG4gICAgICBvbkNsb3NlLFxuICAgICAgLi4ucmVzdERhdGVQaWNrZXJQcm9wc1xuICAgIH0gPSBkYXRlUGlja2VyUHJvcHM7XG5cbiAgICAvLyBTZXQgdXAgZm9ybSBjb250cm9sbGVyXG4gICAgY29uc3QgeyBmaWVsZCwgZmllbGRTdGF0ZSB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgICBuYW1lLFxuICAgICAgY29udHJvbCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCBhcyBhbnksIC8vIExldCByZWFjdC1ob29rLWZvcm0gaGFuZGxlIHRoZSBkZWZhdWx0IHZhbHVlIHR5cGluZ1xuICAgIH0pO1xuXG4gICAgLy8gVmFsdWUgdHJhbnNmb3JtYXRpb24gaG9va1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlOiBvblZhbHVlQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICAgICAgZmllbGQsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0aW9uIGhvb2tcbiAgICBjb25zdCB7IGhhc0Vycm9yLCBlcnJvck1lc3NhZ2UsIGludmFsaWQgfSA9IHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uKHtcbiAgICAgIGZpZWxkU3RhdGUsXG4gICAgICB2YWxpZGF0aW9uLFxuICAgICAgcGFyc2VFcnJvcixcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gU3R5bGluZyBob29rXG4gICAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBoYXNFcnJvcixcbiAgICAgIGxvYWRpbmcsXG4gICAgICB0ZXh0UmVhZE9ubHksXG4gICAgfSk7XG5cbiAgICAvLyBNZXJnZSBpbnB1dCByZWZzXG4gICAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgZXh0ZXJuYWxJbnB1dFJlZik7XG5cbiAgICAvLyBNZW1vaXplZCBjaGFuZ2UgaGFuZGxlciB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChcbiAgICAgICAgbmV3VmFsdWU6IFRWYWx1ZSB8IG51bGwsXG4gICAgICAgIGNvbnRleHQ6IFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0PERhdGVWYWxpZGF0aW9uRXJyb3I+XG4gICAgICApID0+IHtcbiAgICAgICAgb25WYWx1ZUNoYW5nZShuZXdWYWx1ZSwgY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgW29uVmFsdWVDaGFuZ2VdXG4gICAgKTtcblxuICAgIC8vIE1lbW9pemVkIGNsb3NlIGhhbmRsZXJcbiAgICBjb25zdCBoYW5kbGVDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Tm9uTnVsbGFibGU8dHlwZW9mIG9uQ2xvc2U+PikgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyIGZvcm0gZmllbGQgYmx1ciBmb3IgdmFsaWRhdGlvblxuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcblxuICAgICAgICAvLyBDYWxsIGV4dGVybmFsIG9uQ2xvc2UgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgICBvbkNsb3NlKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgICAgW2ZpZWxkLm9uQmx1ciwgb25DbG9zZV1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgYmx1ciBoYW5kbGVyIGZvciB0ZXh0IGZpZWxkXG4gICAgY29uc3QgaGFuZGxlVGV4dEZpZWxkQmx1ciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuXG4gICAgICAgIC8vIENhbGwgZXh0ZXJuYWwgb25CbHVyIGlmIHByb3ZpZGVkXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRQcm9wcy5vbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpbnB1dFByb3BzLm9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICBbZmllbGQub25CbHVyLCBpbnB1dFByb3BzLm9uQmx1cl1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgc2xvdCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICBjb25zdCBtZW1vaXplZFNsb3RQcm9wcyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoe1xuICAgICAgICAuLi5zbG90UHJvcHMsXG4gICAgICAgIGFjdGlvbkJhcjoge1xuICAgICAgICAgIGFjdGlvbnM6IFsnY2xlYXInLCAndG9kYXknLCAnY2FuY2VsJywgJ2FjY2VwdCddIGFzIEFycmF5PFxuICAgICAgICAgICAgJ2FjY2VwdCcgfCAnY2FuY2VsJyB8ICdjbGVhcicgfCAnbmV4dCcgfCAnbmV4dE9yQWNjZXB0JyB8ICd0b2RheSdcbiAgICAgICAgICA+LFxuICAgICAgICAgIC4uLnNsb3RQcm9wcy5hY3Rpb25CYXIsXG4gICAgICAgIH0sXG4gICAgICAgIHRleHRGaWVsZDoge1xuICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgZnVsbFdpZHRoOiB0cnVlLFxuICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVUZXh0RmllbGRCbHVyLFxuICAgICAgICAgIGVycm9yOiBoYXNFcnJvcixcbiAgICAgICAgICBoZWxwZXJUZXh0OiBoYXNFcnJvciA/IGVycm9yTWVzc2FnZSA6IGhlbHBlclRleHQsXG4gICAgICAgICAgaW5wdXRQcm9wczoge1xuICAgICAgICAgICAgcmVhZE9ubHk6IHRleHRSZWFkT25seSxcbiAgICAgICAgICAgICdhcmlhLWludmFsaWQnOiBpbnZhbGlkLFxuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBoYXNFcnJvciA/IGAke25hbWV9LWVycm9yYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC4uLmlucHV0UHJvcHMuaW5wdXRQcm9wcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIEFkZCBsb2FkaW5nIGluZGljYXRvciBpZiBwcm92aWRlZFxuICAgICAgICAgIC4uLihsb2FkaW5nICYmXG4gICAgICAgICAgICBMb2FkaW5nQ29tcG9uZW50ICYmIHtcbiAgICAgICAgICAgICAgSW5wdXRQcm9wczoge1xuICAgICAgICAgICAgICAgIGVuZEFkb3JubWVudDogPExvYWRpbmdDb21wb25lbnQgLz4sXG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgLi4uc2xvdFByb3BzLnRleHRGaWVsZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgW1xuICAgICAgICBzbG90UHJvcHMsXG4gICAgICAgIGlucHV0UHJvcHMsXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgaGFuZGxlVGV4dEZpZWxkQmx1cixcbiAgICAgICAgaGFzRXJyb3IsXG4gICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgaGVscGVyVGV4dCxcbiAgICAgICAgdGV4dFJlYWRPbmx5LFxuICAgICAgICBpbnZhbGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgLy8gU3ByZWFkIHJlc3QgcHJvcHMgZmlyc3Qgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlblxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICB7Li4ucmVzdERhdGVQaWNrZXJQcm9wc31cbiAgICAgICAgLy8gQ29yZSBwcm9wc1xuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgICAvLyBVSSBwcm9wc1xuICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIC8vIFNsb3QgcHJvcHNcbiAgICAgICAgc2xvdFByb3BzPXttZW1vaXplZFNsb3RQcm9wc31cbiAgICAgICAgLy8gQWNjZXNzaWJpbGl0eSBwcm9wc1xuICAgICAgICBhcmlhLWludmFsaWQ9e2ludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e2hhc0Vycm9yID8gYCR7bmFtZX0tZXJyb3JgIDogdW5kZWZpbmVkfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4pO1xuXG4vLyBTZXQgZGlzcGxheSBuYW1lIGZvciBkZWJ1Z2dpbmdcbkRhdGVQaWNrZXJFbGVtZW50Q29yZS5kaXNwbGF5TmFtZSA9ICdEYXRlUGlja2VyRWxlbWVudENvcmUnO1xuXG5leHBvcnQgeyBEYXRlUGlja2VyRWxlbWVudENvcmUgfTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVBpY2tlckVsZW1lbnRDb3JlO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgUGlja2VyVmFsaWREYXRlLFxuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxuICBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB7IHVzZUxvY2FsaXphdGlvbkNvbnRleHQgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vycy9pbnRlcm5hbHNcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG4gIFBhdGhWYWx1ZSxcbiAgVXNlQ29udHJvbGxlclJldHVybixcbn0gZnJvbSBcInJlYWN0LWhvb2stZm9ybVwiO1xuXG5pbXBvcnQgdHlwZSB7IERhdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBUeXBlLXNhZmUgZGF0ZSB2YWx1ZSByZWFkZXIgdGhhdCBoYW5kbGVzIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb25cbiAqIEB0ZW1wbGF0ZSBURGF0ZSAtIFRoZSBkYXRlIHR5cGUgZnJvbSB0aGUgZGF0ZSBhZGFwdGVyXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBsb2NhbGl6YXRpb24gY29udGV4dCBmcm9tIE1VSSBkYXRlIHBpY2tlcnNcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0IChzdHJpbmcsIGRhdGUsIG9yIG51bGwpXG4gKiBAcmV0dXJucyBQcm9wZXJseSB0eXBlZCBkYXRlIHZhbHVlIG9yIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWREYXRlUGlja2VyVmFsdWVBc0RhdGU8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGU+KFxuICBhZGFwdGVyOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VMb2NhbGl6YXRpb25Db250ZXh0PixcbiAgdmFsdWU6IHN0cmluZyB8IG51bGwgfCBURGF0ZSB8IHVuZGVmaW5lZFxuKTogVERhdGUgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgYWRhcHRlciB0byBwYXJzZSB0aGUgc3RyaW5nIGludG8gYSBkYXRlXG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IGFkYXB0ZXIudXRpbHMuZGF0ZSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gcGFyc2VkRGF0ZSBhcyBURGF0ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbHVlIGhvb2tcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbHVlT3B0aW9uczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+IHtcbiAgLyoqIFRoZSBmaWVsZCBjb250cm9sbGVyIGZyb20gcmVhY3QtaG9vay1mb3JtICovXG4gIGZpZWxkOiBVc2VDb250cm9sbGVyUmV0dXJuPFRGaWVsZFZhbHVlcywgVE5hbWU+W1wiZmllbGRcIl07XG4gIC8qKiBPcHRpb25hbCB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgKi9cbiAgdHJhbnNmb3JtPzogRGF0ZVRyYW5zZm9ybTxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+O1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbHVlIGhvb2tcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWx1ZVJldHVybjxUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGU+IHtcbiAgLyoqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBmb3IgZGlzcGxheSBpbiB0aGUgcGlja2VyICovXG4gIHZhbHVlOiBUVmFsdWUgfCBudWxsO1xuICAvKiogQ2hhbmdlIGhhbmRsZXIgZm9yIHBpY2tlciB2YWx1ZSB1cGRhdGVzICovXG4gIG9uQ2hhbmdlOiAoXG4gICAgdmFsdWU6IFRWYWx1ZSB8IG51bGwsXG4gICAgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj5cbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIGRhdGUgcGlja2VyIHZhbHVlIHRyYW5zZm9ybWF0aW9ucyB3aXRoIHR5cGUgc2FmZXR5XG4gKiBcbiAqIFRoaXMgaG9vayBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIGJldHdlZW4gZm9ybSBmaWVsZCB2YWx1ZXMgYW5kIGRhdGUgcGlja2VyIHZhbHVlcyxcbiAqIGFwcGx5aW5nIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbnMgd2hpbGUgbWFpbnRhaW5pbmcgc3RyaWN0IFR5cGVTY3JpcHQgdHlwaW5nLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBzdHJpbmcgdG8gZGF0ZSBjb252ZXJzaW9uOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlRGF0ZVBpY2tlclZhbHVlKHtcbiAqICAgZmllbGQsXG4gKiAgIHRyYW5zZm9ybToge1xuICogICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICBvdXRwdXQ6IChkYXRlKSA9PiBkYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogbnVsbFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogVXNhZ2Ugd2l0aCBEYXkuanMgZGF0ZXM6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICogICBmaWVsZCxcbiAqICAgdHJhbnNmb3JtOiB7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gZGF5anMoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogbnVsbFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZhbHVlIHRyYW5zZm9ybWF0aW9uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0cmFuc2Zvcm1lZCB2YWx1ZSBhbmQgY2hhbmdlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURhdGVQaWNrZXJWYWx1ZTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KFxuICBvcHRpb25zOiBVc2VEYXRlUGlja2VyVmFsdWVPcHRpb25zPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT5cbik6IFVzZURhdGVQaWNrZXJWYWx1ZVJldHVybjxUVmFsdWU+IHtcbiAgY29uc3QgeyBmaWVsZCwgdHJhbnNmb3JtIH0gPSBvcHRpb25zO1xuICBjb25zdCBhZGFwdGVyID0gdXNlTG9jYWxpemF0aW9uQ29udGV4dCgpO1xuXG4gIC8vIFRyYW5zZm9ybSB0aGUgZmllbGQgdmFsdWUgZm9yIGRpc3BsYXkgaW4gdGhlIHBpY2tlclxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCk6IFRWYWx1ZSB8IG51bGwgPT4ge1xuICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtPy5pbnB1dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtLmlucHV0KGZpZWxkLnZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVmYXVsdCB0cmFuc2Zvcm1hdGlvbjogaGFuZGxlIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb25cbiAgICByZXR1cm4gcmVhZERhdGVQaWNrZXJWYWx1ZUFzRGF0ZShhZGFwdGVyLCBmaWVsZC52YWx1ZSkgYXMgVFZhbHVlIHwgbnVsbDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtmaWVsZC52YWx1ZSwgdHJhbnNmb3JtPy5pbnB1dCwgYWRhcHRlcl0pO1xuXG4gIC8vIENyZWF0ZSBhIHN0YWJsZSBjaGFuZ2UgaGFuZGxlclxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdWYWx1ZTogVFZhbHVlIHwgbnVsbCwgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj4pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtPy5vdXRwdXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdHJhbnNmb3JtLm91dHB1dChuZXdWYWx1ZSwgY29udGV4dCk7XG5cbiAgICAgICAgZmllbGQub25DaGFuZ2UodHJhbnNmb3JtZWRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IHRyYW5zZm9ybWF0aW9uOiBzdG9yZSB0aGUgZGF0ZSBhcy1pc1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtmaWVsZC5vbkNoYW5nZSwgdHJhbnNmb3JtPy5vdXRwdXRdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZSxcbiAgICBvbkNoYW5nZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclZhbHVlOyIsICJpbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbiAgRGF0ZVZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG4gIFVzZUNvbnRyb2xsZXJSZXR1cm4sXG59IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRlUGlja2VyVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbiBob29rXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uT3B0aW9uczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+IHtcbiAgLyoqIFRoZSBmaWVsZCBzdGF0ZSBmcm9tIHJlYWN0LWhvb2stZm9ybSBjb250cm9sbGVyICovXG4gIGZpZWxkU3RhdGU6IFVzZUNvbnRyb2xsZXJSZXR1cm48VEZpZWxkVmFsdWVzLCBUTmFtZT5bXCJmaWVsZFN0YXRlXCJdO1xuICAvKiogVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgZGF0ZSBwaWNrZXIgKi9cbiAgdmFsaWRhdGlvbj86IERhdGVQaWNrZXJWYWxpZGF0aW9uQ29uZmlnPFRWYWx1ZT47XG4gIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXIgKi9cbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvciB8IERhdGVWYWxpZGF0aW9uRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqIFRoZSBjdXJyZW50IGRhdGUgdmFsdWUgZm9yIHZhbGlkYXRpb24gKi9cbiAgdmFsdWU/OiBUVmFsdWUgfCBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24gaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uUmV0dXJuIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGhhcyBhbnkgdmFsaWRhdGlvbiBlcnJvcnMgKi9cbiAgaGFzRXJyb3I6IGJvb2xlYW47XG4gIC8qKiBUaGUgY3VycmVudCB2YWxpZGF0aW9uIGVycm9yIChmb3JtIG9yIGRhdGUtc3BlY2lmaWMpICovXG4gIGVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqIEZvcm1hdHRlZCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZTogUmVhY3ROb2RlO1xuICAvKiogV2hldGhlciB0aGUgZmllbGQgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSAqL1xuICBpbnZhbGlkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZXJyb3IgbWVzc2FnZXMgZm9yIGNvbW1vbiBkYXRlIHZhbGlkYXRpb24gc2NlbmFyaW9zXG4gKi9cbmNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVMgPSB7XG4gIGludmFsaWREYXRlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGVcIixcbiAgbWluRGF0ZTogXCJEYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlXCIsXG4gIG1heERhdGU6IFwiRGF0ZSBtdXN0IGJlIGJlZm9yZSB0aGUgbWF4aW11bSBhbGxvd2VkIGRhdGVcIixcbiAgZGlzYWJsZWREYXRlOiBcIlRoaXMgZGF0ZSBpcyBub3QgYWxsb3dlZFwiLFxuICByZXF1aXJlZDogXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIGRhdGUgcGlja2VyIHZhbGlkYXRpb24gd2l0aCBjb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nXG4gKiBcbiAqIFRoaXMgaG9vayBjZW50cmFsaXplcyB2YWxpZGF0aW9uIGxvZ2ljIGZvciBkYXRlIHBpY2tlcnMsIGhhbmRsaW5nIGJvdGhcbiAqIHJlYWN0LWhvb2stZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBhbmQgZGF0ZS1zcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9yc1xuICogZnJvbSBNVUkgZGF0ZSBwaWNrZXJzLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBmb3JtIHZhbGlkYXRpb246XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgaGFzRXJyb3IsIGVycm9yTWVzc2FnZSwgaW52YWxpZCB9ID0gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24oe1xuICogICBmaWVsZFN0YXRlLFxuICogICB2YWxpZGF0aW9uOiB7XG4gKiAgICAgbWluRGF0ZTogZGF5anMoKS5zdWJ0cmFjdCgxLCAneWVhcicpLFxuICogICAgIG1heERhdGU6IGRheWpzKCkuYWRkKDEsICd5ZWFyJyksXG4gKiAgICAgZXJyb3JNZXNzYWdlczoge1xuICogICAgICAgbWluRGF0ZTogJ0RhdGUgbXVzdCBiZSB3aXRoaW4gdGhlIGxhc3QgeWVhcicsXG4gKiAgICAgICBtYXhEYXRlOiAnRGF0ZSBjYW5ub3QgYmUgbW9yZSB0aGFuIDEgeWVhciBpbiB0aGUgZnV0dXJlJ1xuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQGV4YW1wbGVcbiAqIFVzYWdlIHdpdGggY3VzdG9tIGVycm9yIHBhcnNlcjpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBoYXNFcnJvciwgZXJyb3JNZXNzYWdlIH0gPSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbih7XG4gKiAgIGZpZWxkU3RhdGUsXG4gKiAgIHBhcnNlRXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gKiAgICAgICByZXR1cm4gYERhdGUgRXJyb3I6ICR7ZXJyb3J9YDtcbiAqICAgICB9XG4gKiAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ0ludmFsaWQgZGF0ZSc7XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFZhbGlkYXRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBWYWxpZGF0aW9uIHN0YXRlIGFuZCBlcnJvciBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb248XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihcbiAgb3B0aW9uczogVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25PcHRpb25zPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT5cbik6IFVzZURhdGVQaWNrZXJWYWxpZGF0aW9uUmV0dXJuIHtcbiAgY29uc3QgeyBmaWVsZFN0YXRlLCB2YWxpZGF0aW9uLCBwYXJzZUVycm9yLCB2YWx1ZSB9ID0gb3B0aW9ucztcblxuICAvLyBNZW1vaXplIHZhbGlkYXRpb24gcmVzdWx0cyBmb3IgcGVyZm9ybWFuY2VcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHsgZXJyb3I6IGZpZWxkRXJyb3IsIGludmFsaWQgfSA9IGZpZWxkU3RhdGU7XG4gICAgXG4gICAgLy8gU3RhcnQgd2l0aCBmb3JtIHZhbGlkYXRpb24gZXJyb3JcbiAgICBsZXQgY3VycmVudEVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCA9IGZpZWxkRXJyb3I7XG4gICAgXG4gICAgLy8gQ2hlY2sgZGF0ZS1zcGVjaWZpYyB2YWxpZGF0aW9ucyBpZiBubyBmb3JtIGVycm9yIGFuZCB3ZSBoYXZlIGEgdmFsdWVcbiAgICBpZiAoIWZpZWxkRXJyb3IgJiYgdmFsdWUgJiYgdmFsaWRhdGlvbikge1xuICAgICAgY29uc3QgeyBtaW5EYXRlLCBtYXhEYXRlLCBzaG91bGREaXNhYmxlRGF0ZSwgZXJyb3JNZXNzYWdlcyB9ID0gdmFsaWRhdGlvbjtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgbWluaW11bSBkYXRlXG4gICAgICBpZiAobWluRGF0ZSAmJiB2YWx1ZSA8IG1pbkRhdGUpIHtcbiAgICAgICAgY3VycmVudEVycm9yID0ge1xuICAgICAgICAgIHR5cGU6ICdtaW5EYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5taW5EYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWluRGF0ZSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIERhdGVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIG1heGltdW0gZGF0ZVxuICAgICAgZWxzZSBpZiAobWF4RGF0ZSAmJiB2YWx1ZSA+IG1heERhdGUpIHtcbiAgICAgICAgY3VycmVudEVycm9yID0ge1xuICAgICAgICAgIHR5cGU6ICdtYXhEYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5tYXhEYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWF4RGF0ZSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIERhdGVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGRpc2FibGVkIGRhdGVcbiAgICAgIGVsc2UgaWYgKHNob3VsZERpc2FibGVEYXRlICYmIHNob3VsZERpc2FibGVEYXRlKHZhbHVlKSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ2Rpc2FibGVkRGF0ZScsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlcz8uZGlzYWJsZWREYXRlIHx8IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGlzYWJsZWREYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgY29uc3QgaGFzRXJyb3IgPSBCb29sZWFuKGN1cnJlbnRFcnJvcik7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc0Vycm9yLFxuICAgICAgZXJyb3I6IGN1cnJlbnRFcnJvcixcbiAgICAgIGludmFsaWQ6IGludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgfTtcbiAgfSwgW2ZpZWxkU3RhdGUsIHZhbGlkYXRpb24sIHZhbHVlXSk7XG5cbiAgLy8gTWVtb2l6ZSBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmdcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gdXNlTWVtbygoKTogUmVhY3ROb2RlID0+IHtcbiAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFVzZSBjdXN0b20gZXJyb3IgcGFyc2VyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgIHJldHVybiBwYXJzZUVycm9yKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgZXJyb3IgbWVzc2FnZSBoYW5kbGluZ1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdC5lcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yO1xuICAgIH1cblxuICAgIGlmICgnbWVzc2FnZScgaW4gdmFsaWRhdGlvblJlc3VsdC5lcnJvciAmJiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZXJyb3IgbWVzc2FnZXMgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgIGlmICgndHlwZScgaW4gdmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JUeXBlID0gdmFsaWRhdGlvblJlc3VsdC5lcnJvci50eXBlO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMucmVxdWlyZWQ7XG4gICAgICAgIGNhc2UgJ21pbkRhdGUnOlxuICAgICAgICAgIHJldHVybiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLm1pbkRhdGU7XG4gICAgICAgIGNhc2UgJ21heERhdGUnOlxuICAgICAgICAgIHJldHVybiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLm1heERhdGU7XG4gICAgICAgIGNhc2UgJ2Rpc2FibGVkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGlzYWJsZWREYXRlO1xuICAgICAgICBjYXNlICdpbnZhbGlkRGF0ZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuaW52YWxpZERhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMuaW52YWxpZERhdGU7XG4gIH0sIFt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLCBwYXJzZUVycm9yXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi52YWxpZGF0aW9uUmVzdWx0LFxuICAgIGVycm9yTWVzc2FnZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclZhbGlkYXRpb247IiwgImltcG9ydCB0eXBlIHsgU3hQcm9wcywgVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyU3R5bGVzIGhvb2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyU3R5bGVzT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBhIHZhbGlkYXRpb24gZXJyb3IgKi9cbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGxvYWRpbmcgc3RhdGUgKi9cbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZXh0IGlucHV0IGlzIHJlYWQtb25seSAqL1xuICB0ZXh0UmVhZE9ubHk/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIHN0eWxlcyB0byBtZXJnZSB3aXRoIGRlZmF1bHRzICovXG4gIHN4PzogU3hQcm9wczxUaGVtZT47XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyU3R5bGVzIGhvb2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyU3R5bGVzUmV0dXJuIHtcbiAgLyoqIENvbXB1dGVkIHN0eWxlcyBmb3IgdGhlIGRhdGUgcGlja2VyIGNvbXBvbmVudCAqL1xuICBzeDogU3hQcm9wczxUaGVtZT47XG4gIC8qKiBBZGRpdGlvbmFsIGNsYXNzIG5hbWVzIGZvciBzdHlsaW5nICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb29rIGZvciBtYW5hZ2luZyB0aGVtZS1hd2FyZSBkYXRlIHBpY2tlciBzdHlsZXMgd2l0aCBjb25zaXN0ZW50IGRlc2lnbiBzeXN0ZW0gaW50ZWdyYXRpb25cbiAqIFxuICogVGhpcyBob29rIHByb3ZpZGVzIG9wdGltaXplZCwgbWVtb2l6ZWQgc3R5bGVzIGZvciBkYXRlIHBpY2tlciBjb21wb25lbnRzIHRoYXQgYXV0b21hdGljYWxseVxuICogYWRhcHQgdG8gdGhlIGN1cnJlbnQgTVVJIHRoZW1lIGFuZCBjb21wb25lbnQgc3RhdGUgKGRpc2FibGVkLCBlcnJvciwgbG9hZGluZywgZXRjLikuXG4gKiBJdCBlbnN1cmVzIGNvbnNpc3RlbnQgc3R5bGluZyBhY3Jvc3MgYWxsIGRhdGUgcGlja2VyIGluc3RhbmNlcyB3aGlsZSBhbGxvd2luZyBjdXN0b21pemF0aW9uLlxuICogXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgc3ggfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICogICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAqICAgaGFzRXJyb3I6ICEhZXJyb3IsXG4gKiAgIGxvYWRpbmc6IGlzTG9hZGluZ1xuICogfSk7XG4gKiBcbiAqIHJldHVybiA8RGF0ZVBpY2tlciBzeD17c3h9IC4uLiAvPjtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gc3R5bGVzOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IHN4IH0gPSB1c2VEYXRlUGlja2VyU3R5bGVzKHtcbiAqICAgaGFzRXJyb3I6ICEhZXJyb3IsXG4gKiAgIHN4OiB7XG4gKiAgICAgJyYgLk11aUlucHV0TGFiZWwtcm9vdCc6IHtcbiAqICAgICAgIGNvbG9yOiAncHJpbWFyeS5tYWluJ1xuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQHBhcmFtIG9wdGlvbnMgLSBTdHlsZSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIENvbXB1dGVkIHN0eWxlcyBhbmQgY2xhc3MgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURhdGVQaWNrZXJTdHlsZXMoXG4gIG9wdGlvbnM6IFVzZURhdGVQaWNrZXJTdHlsZXNPcHRpb25zID0ge31cbik6IFVzZURhdGVQaWNrZXJTdHlsZXNSZXR1cm4ge1xuICBjb25zdCB7IGRpc2FibGVkLCBoYXNFcnJvciwgbG9hZGluZywgdGV4dFJlYWRPbmx5LCBzeDogY3VzdG9tU3ggfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICAvLyBNZW1vaXplIGNvbXB1dGVkIHN0eWxlcyBmb3IgcGVyZm9ybWFuY2VcbiAgY29uc3QgY29tcHV0ZWRTeCA9IHVzZU1lbW8oKCk6IFN4UHJvcHM8VGhlbWU+ID0+IHtcbiAgICBjb25zdCBiYXNlU3R5bGVzOiBTeFByb3BzPFRoZW1lPiA9IHtcbiAgICAgIC8vIElucHV0IGZpZWxkIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpT3V0bGluZWRJbnB1dC1yb290XCI6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkaXNhYmxlZCBcbiAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCBcbiAgICAgICAgICA6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgXG4gICAgICAgIC8vIFRyYW5zaXRpb24gZm9yIHNtb290aCBzdGF0ZSBjaGFuZ2VzXG4gICAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbXG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InLFxuICAgICAgICAgICdib3JkZXItY29sb3InLFxuICAgICAgICAgICdjb2xvcidcbiAgICAgICAgXSwge1xuICAgICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydCxcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gRXJyb3Igc3RhdGUgc3R5bGluZ1xuICAgICAgICAuLi4oaGFzRXJyb3IgJiYge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJyYuTXVpLWZvY3VzZWQnOiB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICAgICAgYm94U2hhZG93OiBgMCAwIDAgMnB4ICR7dGhlbWUucGFsZXR0ZS5lcnJvci5tYWlufTI1YCwgLy8gMjUgaXMgMTUlIG9wYWNpdHkgaW4gaGV4XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gTG9hZGluZyBzdGF0ZSBzdHlsaW5nXG4gICAgICAgIC4uLihsb2FkaW5nICYmIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjcsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIElucHV0IGVsZW1lbnQgc3R5bGluZ1xuICAgICAgXCImIC5NdWlJbnB1dEJhc2UtaW5wdXRcIjoge1xuICAgICAgICBjdXJzb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gXCJub3QtYWxsb3dlZFwiIFxuICAgICAgICAgIDogdGV4dFJlYWRPbmx5IFxuICAgICAgICAgICAgPyBcInBvaW50ZXJcIiBcbiAgICAgICAgICAgIDogXCJ0ZXh0XCIsXG4gICAgICAgIFxuICAgICAgICAvLyBSZWFkLW9ubHkgc3BlY2lmaWMgc3R5bGluZ1xuICAgICAgICAuLi4odGV4dFJlYWRPbmx5ICYmICFkaXNhYmxlZCAmJiB7XG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcbiAgICAgICAgICBjYXJldENvbG9yOiBcInRyYW5zcGFyZW50XCIsIC8vIEhpZGUgdGV4dCBjdXJzb3IgaW4gcmVhZC1vbmx5IG1vZGVcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gTG9hZGluZyBzdGF0ZVxuICAgICAgICAuLi4obG9hZGluZyAmJiB7XG4gICAgICAgICAgY3Vyc29yOiBcIndhaXRcIixcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBSZXF1aXJlZCBmaWVsZCBhc3RlcmlzayBzdHlsaW5nXG4gICAgICBcIiYgLk11aUlucHV0TGFiZWwtYXN0ZXJpc2tcIjogeyBcbiAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgZm9udFNpemU6IFwiMS4yZW1cIixcbiAgICAgIH0sXG5cbiAgICAgIC8vIExhYmVsIHN0eWxpbmcgd2l0aCBiZXR0ZXIgY29udHJhc3RcbiAgICAgIFwiJiAuTXVpSW5wdXRMYWJlbC1yb290XCI6IHtcbiAgICAgICAgY29sb3I6IGhhc0Vycm9yIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluIFxuICAgICAgICAgIDogdGhlbWUucGFsZXR0ZS50ZXh0LnNlY29uZGFyeSxcbiAgICAgICAgXG4gICAgICAgIC8vIEVuc3VyZSBwcm9wZXIgY29udHJhc3QgZm9yIGRpc2FibGVkIHN0YXRlXG4gICAgICAgIC4uLihkaXNhYmxlZCAmJiB7XG4gICAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUudGV4dC5kaXNhYmxlZCxcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBIZWxwZXIgdGV4dCBzdHlsaW5nXG4gICAgICBcIiYgLk11aUZvcm1IZWxwZXJUZXh0LXJvb3RcIjoge1xuICAgICAgICBtYXJnaW5MZWZ0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZygxKSxcbiAgICAgICAgXG4gICAgICAgIC8vIEVycm9yIHN0YXRlXG4gICAgICAgIC4uLihoYXNFcnJvciAmJiB7XG4gICAgICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgfSksXG4gICAgICB9LFxuXG4gICAgICAvLyBDYWxlbmRhciBpY29uIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpSW5wdXRBZG9ybm1lbnQtcm9vdFwiOiB7XG4gICAgICAgIGNvbG9yOiBkaXNhYmxlZCBcbiAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkIFxuICAgICAgICAgIDogaGFzRXJyb3IgXG4gICAgICAgICAgICA/IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbiBcbiAgICAgICAgICAgIDogdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLFxuICAgICAgfSxcblxuICAgICAgLy8gRm9jdXMgcmluZyBmb3IgYWNjZXNzaWJpbGl0eVxuICAgICAgXCImIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWZvY3VzZWRcIjoge1xuICAgICAgICBvdXRsaW5lOiBgMnB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW59NTBgLCAvLyA1MCBpcyAzMSUgb3BhY2l0eVxuICAgICAgICBvdXRsaW5lT2Zmc2V0OiBcIjJweFwiLFxuICAgICAgfSxcblxuICAgICAgLy8gRW5oYW5jZWQgY29udHJhc3QgZm9yIGRhcmsgdGhlbWVzXG4gICAgICAuLi4odGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYge1xuICAgICAgICBcIiYgLk11aU91dGxpbmVkSW5wdXQtcm9vdFwiOiB7XG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCBjdXN0b20gc3R5bGVzXG4gICAgcmV0dXJuIGN1c3RvbVN4ID8gW2Jhc2VTdHlsZXMsIGN1c3RvbVN4XSBhcyBTeFByb3BzPFRoZW1lPiA6IGJhc2VTdHlsZXM7XG4gIH0sIFtcbiAgICB0aGVtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIHRleHRSZWFkT25seSxcbiAgICBjdXN0b21TeCxcbiAgXSk7XG5cbiAgLy8gR2VuZXJhdGUgYWRkaXRpb25hbCBjbGFzcyBuYW1lcyBmb3IgZXh0ZXJuYWwgc3R5bGluZyBob29rc1xuICBjb25zdCBjbGFzc05hbWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIGlmIChkaXNhYmxlZCkgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tZGlzYWJsZWQnKTtcbiAgICBpZiAoaGFzRXJyb3IpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLWVycm9yJyk7XG4gICAgaWYgKGxvYWRpbmcpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLWxvYWRpbmcnKTtcbiAgICBpZiAodGV4dFJlYWRPbmx5KSBjbGFzc2VzLnB1c2goJ0RhdGVQaWNrZXJFbGVtZW50LS1yZWFkT25seScpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmxlbmd0aCA+IDAgPyBjbGFzc2VzLmpvaW4oJyAnKSA6IHVuZGVmaW5lZDtcbiAgfSwgW2Rpc2FibGVkLCBoYXNFcnJvciwgbG9hZGluZywgdGV4dFJlYWRPbmx5XSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzeDogY29tcHV0ZWRTeCxcbiAgICBjbGFzc05hbWUsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZURhdGVQaWNrZXJTdHlsZXM7IiwgImltcG9ydCB0eXBlIHsgUGlja2VyVmFsaWREYXRlIH0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCB0eXBlIHsgdXNlTG9jYWxpemF0aW9uQ29udGV4dCB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFZhbHVlcywgRmllbGRQYXRoLCBQYXRoVmFsdWUgfSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIGZvciBjcmVhdGluZyBicmFuZGVkIGRhdGUgdHlwZXMgdG8gcHJldmVudCBtaXhpbmcgZGlmZmVyZW50IGRhdGUgZm9ybWF0c1xuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGJhc2UgZGF0ZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEJyYW5kIC0gVGhlIGJyYW5kIHN0cmluZyBmb3IgdHlwZSBzYWZldHlcbiAqL1xuZXhwb3J0IHR5cGUgQnJhbmRlZERhdGU8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUsIFRCcmFuZCBleHRlbmRzIHN0cmluZz4gPSBcbiAgVERhdGUgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6IFRCcmFuZCB9O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIGRhdGVcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBkYXRlLWxpa2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBpY2tlclZhbGlkRGF0ZSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIERhdGUgb2JqZWN0XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlLmdldFRpbWUoKSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgZGF0ZS1saWtlIG9iamVjdHMgd2l0aCBjb21tb24gZGF0ZSBsaWJyYXJ5IG1ldGhvZHNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAvLyBEYXkuanMsIE1vbWVudC5qcywgb3Igc2ltaWxhclxuICAgIGlmICgnaXNWYWxpZCcgaW4gdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmlzVmFsaWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEx1eG9uIERhdGVUaW1lXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlIGFzIGFueSkuaXNWYWxpZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIGFueSkuaXNWYWxpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHBhcnNlZCBhcyBhIGRhdGVcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBwYXJzZWFibGUgZGF0ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2FibGVEYXRlU3RyaW5nKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQmFzaWMgSVNPIGRhdGUgZm9ybWF0IGNoZWNrXG4gIGNvbnN0IGlzb0RhdGVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpUXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7M30pPyg/Olp8WystXVxcZHsyfTpcXGR7Mn0pPyk/JC87XG5cbiAgaWYgKGlzb0RhdGVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgRGF0ZSBjb25zdHJ1Y3RvciBjYW4gcGFyc2UgaXRcbiAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodmFsdWUpO1xuXG4gIHJldHVybiAhaXNOYU4ocGFyc2VkLmdldFRpbWUoKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHR5cGUtc2FmZSBkYXRlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZm9ybSB2YWx1ZXMgdG8gZGF0ZSBwaWNrZXIgdmFsdWVzXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBURGF0ZSAtIFRoZSBkYXRlIHR5cGUgdXNlZCBieSB0aGUgcGlja2VyXG4gKiBAcGFyYW0gYWRhcHRlciAtIFRoZSBkYXRlIGFkYXB0ZXIgZnJvbSBNVUkgbG9jYWxpemF0aW9uIGNvbnRleHRcbiAqIEByZXR1cm5zIEEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBzYWZlbHkgY29udmVydHMgZm9ybSB2YWx1ZXMgdG8gZGF0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURhdGVJbnB1dFRyYW5zZm9ybTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFREYXRlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihhZGFwdGVyOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VMb2NhbGl6YXRpb25Db250ZXh0Pikge1xuICByZXR1cm4gKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pOiBURGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gYWRhcHRlci51dGlscy5kYXRlKHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUocGFyc2VkKSA/IChwYXJzZWQgYXMgVERhdGUpIDogbnVsbDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUgYXMgVERhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHR5cGUtc2FmZSBkYXRlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZGF0ZSBwaWNrZXIgdmFsdWVzIGJhY2sgdG8gZm9ybSB2YWx1ZXNcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSB1c2VkIGJ5IHRoZSBwaWNrZXJcbiAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3Igc3RyaW5nIGNvbnZlcnNpb24gKG9wdGlvbmFsKVxuICogQHJldHVybnMgQSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiB0aGF0IHNhZmVseSBjb252ZXJ0cyBkYXRlcyB0byBmb3JtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGF0ZU91dHB1dFRyYW5zZm9ybTxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFREYXRlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihmb3JtYXQ/OiBzdHJpbmcpIHtcbiAgcmV0dXJuICh2YWx1ZTogVERhdGUgfCBudWxsKTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+ID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZm9ybWF0IHNwZWNpZmllZCwgcmV0dXJuIHRoZSBkYXRlIGFzLWlzXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgZGF0ZSBsaWJyYXJ5IGZvcm1hdHNcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2lzbycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGF0ZS1vbmx5Jykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERheS5qcyBmb3JtYXRcbiAgICAgIGlmICh0eXBlb2YgKHZhbHVlIGFzIGFueSkuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5mb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIE1vbWVudC5qcyBmb3JtYXRcbiAgICAgIGlmICh0eXBlb2YgKHZhbHVlIGFzIGFueSkuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5mb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIEx1eG9uIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS50b0Zvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIGFueSkudG9Gb3JtYXQoZm9ybWF0KSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9XG5cbiAgICAgIC8vIEZhbGxiYWNrOiByZXR1cm4gYXMtaXNcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGRlZmF1bHQgZGF0ZSBwaWNrZXIgY29uZmlndXJhdGlvblxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZVxuICogQHJldHVybnMgRGVmYXVsdCBjb25maWd1cmF0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdERhdGVQaWNrZXJDb25maWc8VERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGU+KCkge1xuICByZXR1cm4ge1xuICAgIC8vIERlZmF1bHQgc2xvdCBwcm9wcyBmb3IgY29uc2lzdGVudCBiZWhhdmlvclxuICAgIHNsb3RQcm9wczoge1xuICAgICAgYWN0aW9uQmFyOiB7XG4gICAgICAgIGFjdGlvbnM6IFsnY2xlYXInLCAndG9kYXknLCAnY2FuY2VsJywgJ2FjY2VwdCddIGFzIGNvbnN0LFxuICAgICAgfSxcbiAgICAgIHRleHRGaWVsZDoge1xuICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgIHZhcmlhbnQ6ICdvdXRsaW5lZCcgYXMgY29uc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgXG4gICAgLy8gRGVmYXVsdCBncmlkIHByb3BzIGZvciBsYXlvdXQgY29uc2lzdGVuY3lcbiAgICBncmlkUHJvcHM6IHtcbiAgICAgIHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSBhcyBjb25zdCxcbiAgICB9LFxuICAgIFxuICAgIC8vIERlZmF1bHQgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgdmFsaWRhdGlvbjoge1xuICAgICAgZXJyb3JNZXNzYWdlczoge1xuICAgICAgICBpbnZhbGlkRGF0ZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlXCIsXG4gICAgICAgIG1pbkRhdGU6IFwiRGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZVwiLFxuICAgICAgICBtYXhEYXRlOiBcIkRhdGUgbXVzdCBiZSBiZWZvcmUgdGhlIG1heGltdW0gYWxsb3dlZCBkYXRlXCIsXG4gICAgICAgIGRpc2FibGVkRGF0ZTogXCJUaGlzIGRhdGUgaXMgbm90IGFsbG93ZWRcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgfSBhcyBjb25zdDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHRvIHNhZmVseSBleHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIGVycm9yIHR5cGVzXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0IChjb3VsZCBiZSBmcm9tIHJlYWN0LWhvb2stZm9ybSBvciBNVUkgZGF0ZSBwaWNrZXIpXG4gKiBAcmV0dXJucyBBIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoZXJyb3IgPT09IG51bGwgfHwgZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwpIHtcbiAgICAvLyBSZWFjdCBIb29rIEZvcm0gRmllbGRFcnJvclxuICAgIGlmICgnbWVzc2FnZScgaW4gZXJyb3IgJiYgdHlwZW9mIChlcnJvciBhcyBhbnkpLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKGVycm9yIGFzIGFueSkubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBNVUkgRGF0ZVZhbGlkYXRpb25FcnJvclxuICAgIGlmICgndHlwZScgaW4gZXJyb3IgJiYgdHlwZW9mIChlcnJvciBhcyBhbnkpLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSAoZXJyb3IgYXMgYW55KS50eXBlO1xuXG4gICAgICBzd2l0Y2ggKGVycm9yVHlwZSkge1xuICAgICAgICBjYXNlICdpbnZhbGlkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlJztcbiAgICAgICAgY2FzZSAnbWluRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdEYXRlIGlzIHRvbyBlYXJseSc7XG4gICAgICAgIGNhc2UgJ21heERhdGUnOlxuICAgICAgICAgIHJldHVybiAnRGF0ZSBpcyB0b28gbGF0ZSc7XG4gICAgICAgIGNhc2UgJ2Rpc2FibGVkRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdUaGlzIGRhdGUgaXMgbm90IGF2YWlsYWJsZSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICdJbnZhbGlkIGRhdGUgc2VsZWN0aW9uJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJ0ludmFsaWQgaW5wdXQnO1xufVxuXG4vKipcbiAqIFBlcmZvcm1hbmNlIHV0aWxpdHkgdG8gY3JlYXRlIHN0YWJsZSByZWZlcmVuY2VzIGZvciBjb21wbGV4IHByb3BzXG4gKiBUaGlzIGhlbHBzIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVycyB3aGVuIHVzaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbiBvYmplY3RzXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHJldHVybnMgQSBKU09OIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZGVwZW5kZW5jeSBpbiB1c2VNZW1vL3VzZUNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGFibGVLZXk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pihjb25maWc6IFQpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb25maWcsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAvLyBTb3J0IG9iamVjdCBrZXlzIGZvciBjb25zaXN0ZW50IHNlcmlhbGl6YXRpb25cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBzb3J0ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIHNvcnRlZFtrXSA9ICh2YWx1ZSBhcyBhbnkpW2tdO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc29ydGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc2VyaWFsaXphYmxlIG9iamVjdHNcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5zb3J0KCkuam9pbignLScpO1xuICB9XG59IiwgImltcG9ydCBWaXNpYmlsaXR5IGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvVmlzaWJpbGl0eSc7XG5pbXBvcnQgVmlzaWJpbGl0eU9mZiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1Zpc2liaWxpdHlPZmYnO1xuaW1wb3J0IHR5cGUgeyBJY29uQnV0dG9uUHJvcHMsIFRleHRGaWVsZFByb3BzLCBHcmlkUHJvcHMgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7XG4gIEljb25CdXR0b24sXG4gIElucHV0QWRvcm5tZW50LFxuICBUZXh0RmllbGQsXG4gIHVzZUZvcmtSZWYsXG4gIEdyaWQsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBNb3VzZUV2ZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFBhc3N3b3JkRWxlbWVudCBjb21wb25lbnQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQYXNzd29yZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPiA9IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJyB8ICdzaXplJz4gJiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcInBhc3N3b3JkXCIgfCBcInVzZXIuY3VycmVudFBhc3N3b3JkXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgLyoqXG4gICAqIENvbG9yIG9mIHRoZSB2aXNpYmlsaXR5IHRvZ2dsZSBpY29uIGJ1dHRvblxuICAgKiBAZGVmYXVsdFZhbHVlIFwiZGVmYXVsdFwiXG4gICAqL1xuICBpY29uQ29sb3I/OiBJY29uQnV0dG9uUHJvcHNbJ2NvbG9yJ107XG4gIC8qKlxuICAgKiBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgaWNvblxuICAgKiBAcGFyYW0gcGFzc3dvcmQgLSBXaGV0aGVyIHBhc3N3b3JkIGlzIGN1cnJlbnRseSBoaWRkZW5cbiAgICogQHJldHVybnMgUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGUgaWNvblxuICAgKiBAZGVmYXVsdFZhbHVlIERlZmF1bHQgdmlzaWJpbGl0eS92aXNpYmlsaXR5LW9mZiBpY29uc1xuICAgKi9cbiAgcmVuZGVySWNvbj86IChwYXNzd29yZDogYm9vbGVhbikgPT4gUmVhY3ROb2RlO1xuICAvKipcbiAgICogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyIEdyaWQgY29tcG9uZW50XG4gICAqIEBkZWZhdWx0VmFsdWUgeyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0gfVxuICAgKi9cbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuXG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBQYXNzd29yZEVsPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHByb3BzOiBQYXNzd29yZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPikge1xuICBjb25zdCB7XG4gICAgaWNvbkNvbG9yLFxuICAgIHJlbmRlckljb24gPSBwYXNzd29yZCA9PiAocGFzc3dvcmQgPyA8VmlzaWJpbGl0eSAvPiA6IDxWaXNpYmlsaXR5T2ZmIC8+KSxcbiAgICBzbG90UHJvcHMsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGlucHV0UmVmLFxuICAgIG9uQmx1cixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KHRydWUpO1xuXG4gIGNvbnN0IGVuZEFkb3JubWVudCA9IChcbiAgICA8SW5wdXRBZG9ybm1lbnQgcG9zaXRpb249eydlbmQnfT5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIG9uTW91c2VEb3duPXsoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0UGFzc3dvcmQoIXBhc3N3b3JkKX1cbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBjb2xvcj17aWNvbkNvbG9yID8/ICdkZWZhdWx0J31cbiAgICAgID5cbiAgICAgICAge3JlbmRlckljb24ocGFzc3dvcmQpfVxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgIDwvSW5wdXRBZG9ybm1lbnQ+XG4gICk7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgaW5wdXRSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRGaWVsZFxuICAgICAgey4uLnJlc3R9XG4gICAgICBpbnB1dFJlZj17aGFuZGxlSW5wdXRSZWZ9XG4gICAgICB0eXBlPXtwYXNzd29yZCA/ICdwYXNzd29yZCcgOiAndGV4dCd9XG4gICAgICB2YWx1ZT17ZmllbGQudmFsdWUgPz8gJyd9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHZhcmlhbnQ9e3Jlc3QudmFyaWFudCA/PyAnb3V0bGluZWQnfVxuICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICBpZiAodHlwZW9mIHJlc3Qub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXN0Lm9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgey4uLih0eXBlb2Ygc2xvdFByb3BzID09PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIElucHV0UHJvcHM6IHtcbiAgICAgICAgICAgICAgZW5kQWRvcm5tZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgc2xvdFByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLnNsb3RQcm9wcyxcbiAgICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgLi4uc2xvdFByb3BzPy5pbnB1dCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgVGV4dEZpZWxkUHJvcHNbJ3Nsb3RQcm9wcyddLFxuICAgICAgICAgIH0pfVxuICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIHBhc3N3b3JkIFRleHRGaWVsZCB3aXRoIHNob3cvaGlkZSBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBwYXNzd29yZCBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHkgd2l0aCByZWFjdC1ob29rLWZvcm0sXG4gKiBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgYSBidWlsdC1pbiB2aXNpYmlsaXR5IHRvZ2dsZSBidXR0b24uIFRoZSBwYXNzd29yZFxuICogY2FuIGJlIHNob3duIG9yIGhpZGRlbiBieSBjbGlja2luZyB0aGUgZXllIGljb24gaW4gdGhlIGlucHV0J3MgZW5kIGFkb3JubWVudC5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cbiAqIC0gUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGVcbiAqIC0gQXV0b21hdGljIGVycm9yIGRpc3BsYXlcbiAqIC0gQ3VzdG9taXphYmxlIHZpc2liaWxpdHkgaWNvbnNcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxuICogLSBUeXBlU2NyaXB0IHR5cGUgc2FmZXR5XG4gKiAtIERpc2FibGVkIHN0YXRlIHN1cHBvcnRcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxQYXNzd29yZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInBhc3N3b3JkXCJcbiAqICAgbGFiZWw9XCJQYXNzd29yZFwiXG4gKiAgIHJ1bGVzPXt7XG4gKiAgICAgcmVxdWlyZWQ6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gKiAgICAgbWluTGVuZ3RoOiB7IHZhbHVlOiA4LCBtZXNzYWdlOiAnTWluaW11bSA4IGNoYXJhY3RlcnMnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gaWNvbiBjb2xvcjpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiY29uZmlybVBhc3N3b3JkXCJcbiAqICAgbGFiZWw9XCJDb25maXJtIFBhc3N3b3JkXCJcbiAqICAgaWNvbkNvbG9yPVwicHJpbWFyeVwiXG4gKiAgIHBsYWNlaG9sZGVyPVwiUmUtZW50ZXIgeW91ciBwYXNzd29yZFwiXG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwibmV3UGFzc3dvcmRcIlxuICogICBsYWJlbD1cIk5ldyBQYXNzd29yZFwiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICByZW5kZXJJY29uPXsoaGlkZGVuKSA9PiBoaWRkZW4gPyA8Q3VzdG9tSGlkZUljb24gLz4gOiA8Q3VzdG9tU2hvd0ljb24gLz59XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBQYXNzd29yZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFBhc3N3b3JkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XG5cbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5leHBvcnQgeyBQYXNzd29yZEVsZW1lbnQgfTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEZvcm1Db250cm9sTGFiZWxQcm9wcyxcbiAgRm9ybUxhYmVsUHJvcHMsXG4gIFJhZGlvR3JvdXBQcm9wcyxcbiAgUmFkaW9Qcm9wcyxcbiAgR3JpZFByb3BzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7XG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbExhYmVsLFxuICBGb3JtSGVscGVyVGV4dCxcbiAgRm9ybUxhYmVsLFxuICBSYWRpbyxcbiAgUmFkaW9Hcm91cCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50T3JWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzL2V2ZW50cyc7XG5cbi8vIFR5cGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBhcyByYWRpbyBidXR0b24gdmFsdWVzXG50eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuLy8gQ29uc3RyYWludCB0byBlbnN1cmUgb3B0aW9uIG9iamVjdHMgaGF2ZSB0aGUgcmVxdWlyZWQga2V5c1xudHlwZSBPcHRpb25PYmplY3Q8XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgUHJpbWl0aXZlVmFsdWU+ICZcbiAgUmVjb3JkPFRMYWJlbEtleSwgc3RyaW5nPiAmXG4gIFBhcnRpYWw8UmVjb3JkPFREaXNhYmxlZEtleSwgYm9vbGVhbj4+IDtcblxuZXhwb3J0IGludGVyZmFjZSBSYWRpb0J1dHRvbkdyb3VwUHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzICBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPiB7XG4gIG9wdGlvbnM6IFRPcHRpb25bXTtcbiAgaGVscGVyVGV4dD86IFJlYWN0Tm9kZTtcbiAgbmFtZTogVE5hbWU7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xuICBsYWJlbD86IHN0cmluZztcbiAgbGFiZWxLZXk/OiBUTGFiZWxLZXk7XG4gIHZhbHVlS2V5PzogVFZhbHVlS2V5O1xuICBkaXNhYmxlZEtleT86IFREaXNhYmxlZEtleTtcbiAgdHlwZT86ICdudW1iZXInIHwgJ3N0cmluZycgfCAnYm9vbGVhbic7XG4gIGVtcHR5T3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBUT3B0aW9uW1RWYWx1ZUtleV0gfCBUT3B0aW9uIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICByZXR1cm5PYmplY3Q/OiBib29sZWFuO1xuICByb3c/OiBib29sZWFuO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBsYWJlbFByb3BzPzogT21pdDxGb3JtQ29udHJvbExhYmVsUHJvcHMsICdsYWJlbCcgfCAnY29udHJvbCcgfCAndmFsdWUnPjtcbiAgZm9ybUxhYmVsUHJvcHM/OiBPbWl0PEZvcm1MYWJlbFByb3BzLCAncmVxdWlyZWQnIHwgJ2Vycm9yJz47XG4gIHJhZGlvUHJvcHM/OiBSYWRpb1Byb3BzO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zZm9ybT86IHtcbiAgICBpbnB1dD86ICh2YWx1ZTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gUmFkaW9CdXR0b25Hcm91cDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID4gPSBPcHRpb25PYmplY3QsXG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9ICdpZCcsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9ICdkaXNhYmxlZCcsXG4+KFxuICBwcm9wczogUmFkaW9CdXR0b25Hcm91cFByb3BzPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUT3B0aW9uLFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID5cbikge1xuICBjb25zdCB7XG4gICAgb3B0aW9ucyxcbiAgICBsYWJlbCxcbiAgICBuYW1lLFxuICAgIGxhYmVsS2V5ID0gJ2xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVLZXkgPSAnaWQnIGFzIFRWYWx1ZUtleSxcbiAgICBkaXNhYmxlZEtleSA9ICdkaXNhYmxlZCcgYXMgVERpc2FibGVkS2V5LFxuICAgIHJlcXVpcmVkLFxuICAgIGVtcHR5T3B0aW9uTGFiZWwsXG4gICAgcmV0dXJuT2JqZWN0LFxuICAgIHJvdyA9IHRydWUsXG4gICAgY29udHJvbCxcbiAgICB0eXBlLFxuICAgIGxhYmVsUHJvcHMsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9ybUxhYmVsUHJvcHMsXG4gICAgcmFkaW9Qcm9wcyxcbiAgICB0cmFuc2Zvcm0sXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZVRyYW5zZm9ybTxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVE9wdGlvbltUVmFsdWVLZXldIHwgVE9wdGlvblxuICA+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICgnJyBhcyBUT3B0aW9uW1RWYWx1ZUtleV0pO1xuICAgICAgICAgICAgfSxcbiAgICAgIG91dHB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8ub3V0cHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0/Lm91dHB1dFxuICAgICAgICAgIDogKF9ldmVudCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSkgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBvblJhZGlvQ2hhbmdlOiBSYWRpb0dyb3VwUHJvcHNbJ29uQ2hhbmdlJ10gPSAoZXZlbnQsIHJhZGlvVmFsdWUpID0+IHtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHJldHVybk9iamVjdFxuICAgICAgPyAob3B0aW9ucyBhcyBUT3B0aW9uW10pLmZpbmQob3B0aW9uID0+IG9wdGlvblt2YWx1ZUtleV0gPT09IHJhZGlvVmFsdWUpXG4gICAgICA6IChyYWRpb1ZhbHVlIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG5cbiAgICBvbkNoYW5nZShldmVudCwgcmV0dXJuVmFsdWUpO1xuICAgIGlmICh0eXBlb2YgcmVzdC5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVzdC5vbkNoYW5nZShyZXR1cm5WYWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEZvcm1Db250cm9sIGVycm9yPXshIWVycm9yfT5cbiAgICAgIHtsYWJlbCAmJiAoXG4gICAgICAgIDxGb3JtTGFiZWwgey4uLmZvcm1MYWJlbFByb3BzfSByZXF1aXJlZD17cmVxdWlyZWR9IGVycm9yPXshIWVycm9yfT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvRm9ybUxhYmVsPlxuICAgICAgKX1cbiAgICAgIDxSYWRpb0dyb3VwIG9uQ2hhbmdlPXtvblJhZGlvQ2hhbmdlfSBuYW1lPXtuYW1lfSByb3c9e3Jvd30gdmFsdWU9e3ZhbHVlfT5cbiAgICAgICAge2VtcHR5T3B0aW9uTGFiZWwgJiYgKFxuICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8UmFkaW9cbiAgICAgICAgICAgICAgICB7Li4ucmFkaW9Qcm9wc31cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshdmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbD17ZW1wdHlPcHRpb25MYWJlbH1cbiAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7b3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb25bdmFsdWVLZXldO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbkRpc2FibGVkID0gb3B0aW9uW2Rpc2FibGVkS2V5XSB8fCBmYWxzZTtcbiAgICAgICAgICBsZXQgdmFsOiBUT3B0aW9uW1RWYWx1ZUtleV0gfCB1bmRlZmluZWQgPSByZXR1cm5PYmplY3RcbiAgICAgICAgICAgID8gKHZhbHVlIGFzIFRPcHRpb24pPy5bdmFsdWVLZXldXG4gICAgICAgICAgICA6ICh2YWx1ZSBhcyBUT3B0aW9uW1RWYWx1ZUtleV0pO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWwgPSBOdW1iZXIodmFsKSBhcyBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbCA9IEJvb2xlYW4odmFsKSBhcyBUT3B0aW9uW1RWYWx1ZUtleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNDaGVja2VkID0gdmFsID09PSBvcHRpb25LZXk7XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0aW9uS2V5KX1cbiAgICAgICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxSYWRpb1xuICAgICAgICAgICAgICAgICAgey4uLnJhZGlvUHJvcHN9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgb3B0aW9uRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YWx1ZT17b3B0aW9uS2V5fVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICB7ZXJyb3IgJiYgPEZvcm1IZWxwZXJUZXh0PntlcnJvci5tZXNzYWdlfTwvRm9ybUhlbHBlclRleHQ+fVxuICAgIDwvRm9ybUNvbnRyb2w+XG4gICk7XG59O1xuXG5jb25zdCBSYWRpb0J1dHRvbkdyb3VwID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdpZCcsXG4gIFRMYWJlbEtleSBleHRlbmRzICBzdHJpbmcgPSAnbGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFJhZGlvQnV0dG9uR3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVE9wdGlvbixcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFREaXNhYmxlZEtleVxuPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8XG4gICAgICAgIFRGaWVsZFZhbHVlcyxcbiAgICAgICAgVE5hbWUsXG4gICAgICAgIFRPcHRpb24sXG4gICAgICAgIFRWYWx1ZUtleSxcbiAgICAgICAgVExhYmVsS2V5LFxuICAgICAgICBURGlzYWJsZWRLZXlcbiAgICAgID5cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5SYWRpb0J1dHRvbkdyb3VwLmRpc3BsYXlOYW1lID0gJ1JhZGlvQnV0dG9uR3JvdXAnO1xuXG5leHBvcnQgeyBSYWRpb0J1dHRvbkdyb3VwIH07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIENoaXBUeXBlTWFwLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgZGVwZW5kc09uOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc051bGxhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZURlZmF1bHRTZWxlY3RlZD86IGJvb2xlYW47XG4gIGxhYmVsRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgdGV4dEZpZWxkUHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICBvcHRpb25zPzogcmVhZG9ubHkgVE9wdGlvbltdIHwgbnVsbDtcbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFNlbGVjdENhc2NhZGVFbGVtZW50PFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHByb3BzOiBTZWxlY3RDYXNjYWRlRWxlbWVudFByb3BzPFRPcHRpb24sIFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3Qge1xuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnLFxuICAgIG5hbWUsXG4gICAgb25CbHVyLFxuICAgIG9uQ2hhbmdlLFxuICAgIGRpc2FibGVkLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBjb250cm9sLFxuICAgIGxvYWRpbmcgPSBmYWxzZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsYWJlbCxcbiAgICBkZXBlbmRzT24sXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIGlzTnVsbGFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IGdldE9wdGlvbktleSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgPyBTdHJpbmcoa2V5KSA6ICcnO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICBjb25zdCBpc09wdGlvbkVxdWFsVG9WYWx1ZSA9IChvcHRpb246IFRPcHRpb24sIHZhbHVlOiBUT3B0aW9uKSA9PlxuICAgIGdldE9wdGlvbktleShvcHRpb24pID09PSBnZXRPcHRpb25LZXkodmFsdWUpO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IHsgZmllbGQ6IGRlcGVuZGVudEZpZWxkIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lOiBkZXBlbmRzT24sXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgcGFyZW50VmFsdWVSZWYgPSB1c2VSZWYoZGVwZW5kZW50RmllbGQudmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgIT09IGRlcGVuZGVudEZpZWxkLnZhbHVlKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgIHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgPSBkZXBlbmRlbnRGaWVsZC52YWx1ZTtcbiAgICB9XG4gIH0sIFtkZXBlbmRlbnRGaWVsZC52YWx1ZSwgZmllbGRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlRGVmYXVsdFNlbGVjdGVkICYmIG9wdGlvbnMubGVuZ3RoID09PSAxICYmIGZpZWxkLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVEZWZhdWx0U2VsZWN0ZWQsIG9wdGlvbnMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUgJiYgIWRpc2FibGVEZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uS2V5KG9wdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXG4gICAgb3B0aW9ucyxcbiAgICBkaXNhYmxlZCxcbiAgICBnZXRPcHRpb25LZXksXG4gICAgZmllbGQub25DaGFuZ2UsXG4gICAgZGVwZW5kZW50RmllbGQudmFsdWUsXG4gICAgZGlzYWJsZURlZmF1bHRTZWxlY3RlZCxcbiAgXSk7XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09IG51bGwgfHxcbiAgICAgIGRlcGVuZGVudEZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGRlcGVuZGVudEZpZWxkLnZhbHVlID09PSAnJ1xuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtcbiAgICBkaXNhYmxlZCxcbiAgICBkZXBlbmRlbnRGaWVsZC52YWx1ZSxcbiAgICBvcHRpb25zLmxlbmd0aCxcbiAgICBpc051bGxhYmxlLFxuICAgIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPEF1dG9jb21wbGV0ZVxuICAgICAgey4uLnJlc3R9XG4gICAgICB2YWx1ZT17XG4gICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAubWFwKG9wdGlvbiA9PiAoZ2V0T3B0aW9uS2V5KG9wdGlvbikgPT09IGZpZWxkLnZhbHVlID8gb3B0aW9uIDogbnVsbCkpXG4gICAgICAgICAgLmZpbmQoQm9vbGVhbikgfHwgbnVsbFxuICAgICAgfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBnZXRPcHRpb25LZXk9e2dldE9wdGlvbktleX1cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXtpc09wdGlvbkVxdWFsVG9WYWx1ZX1cbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pID0+IHtcbiAgICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWUgPyBnZXRPcHRpb25LZXkobmV3VmFsdWUpIDogbnVsbCk7XG4gICAgICAgIGlmIChvbkNoYW5nZSAmJiB0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudCwgbmV3VmFsdWUsIHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbkJsdXI9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVuZGVySW5wdXQ9e3BhcmFtcyA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICB7Li4ucGFyYW1zfVxuICAgICAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RDYXNjYWRlRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZVxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0Q2FzY2FkZUVsZW1lbnQuZGlzcGxheU5hbWUgPSAnU2VsZWN0Q2FzY2FkZUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlVmFsdWUsXG4gIEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4gIHwgJ29wdGlvbnMnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIG9wdGlvbnM/OiByZWFkb25seSBUT3B0aW9uW10gfCBudWxsO1xufTtcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gU2VsZWN0RWxlbWVudDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+KFxuICBwcm9wczogU2VsZWN0RWxlbWVudFByb3BzPFxuICAgIFRPcHRpb24sXG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIE11bHRpcGxlLFxuICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgRnJlZVNvbG8sXG4gICAgQ2hpcENvbXBvbmVudFxuICA+XG4pIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBsYWJlbCxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnIGFzIGtleW9mIFRPcHRpb24sXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScgYXMga2V5b2YgVE9wdGlvbixcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0ZXh0RmllbGRQcm9wcyA9IHt9LFxuICAgIGlzTnVsbGFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbiB8IEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nPEZyZWVTb2xvPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiBudWxsO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uIHwgQXV0b2NvbXBsZXRlRnJlZVNvbG9WYWx1ZU1hcHBpbmc8RnJlZVNvbG8+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlRGVmYXVsdFNlbGVjdGVkICYmIG9wdGlvbnMubGVuZ3RoID09PSAxICYmIGZpZWxkLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVEZWZhdWx0U2VsZWN0ZWQsIG9wdGlvbnMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUgJiYgIWRpc2FibGVEZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uVmFsdWUob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtcbiAgICBvcHRpb25zLFxuICAgIGRpc2FibGVkLFxuICAgIGdldE9wdGlvblZhbHVlLFxuICAgIGZpZWxkLm9uQ2hhbmdlLFxuICAgIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQsXG4gIF0pO1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZCwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGUsIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWRdKTtcblxuICBjb25zdCBhdXRvY29tcGxldGVWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIG9wdGlvbnMuZmluZChvcHRpb24gPT4gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZmllbGQudmFsdWUpID8/IG51bGwsXG4gICAgW2ZpZWxkLnZhbHVlLCBvcHRpb25zLCBnZXRPcHRpb25WYWx1ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zPXtmYWxzZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB2YWx1ZT17XG4gICAgICAgIGF1dG9jb21wbGV0ZVZhbHVlIGFzIEF1dG9jb21wbGV0ZVZhbHVlPFxuICAgICAgICAgIFRPcHRpb24sXG4gICAgICAgICAgTXVsdGlwbGUsXG4gICAgICAgICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICAgICAgICBGcmVlU29sb1xuICAgICAgICA+XG4gICAgICB9XG4gICAgICBvbkNoYW5nZT17KGV2ZW50LCBuZXdWYWx1ZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld1ZhbHVlIGFzIFRPcHRpb24gfCBudWxsO1xuXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG9wdGlvbiA/IGdldE9wdGlvblZhbHVlKG9wdGlvbikgOiBudWxsKTtcbiAgICAgICAgb25DaGFuZ2U/LihldmVudCwgbmV3VmFsdWUsIHJlYXNvbik7XG4gICAgICB9fVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gZ2V0T3B0aW9uTGFiZWwob3B0aW9uKX1cbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbHVlKSA9PlxuICAgICAgICBnZXRPcHRpb25WYWx1ZShvcHRpb24pID09PSBnZXRPcHRpb25WYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICB2YXJpYW50PXt2YXJpYW50ID8gdmFyaWFudCA6ICdvdXRsaW5lZCd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgQXV0b2NvbXBsZXRlIGNvbXBvbmVudCBmb3Igc2VsZWN0aW5nIGZyb20gcHJlZGVmaW5lZCBvcHRpb25zLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgZnVsbHkgaW50ZWdyYXRlZCBzZWxlY3QvYXV0b2NvbXBsZXRlIGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseVxuICogd2l0aCByZWFjdC1ob29rLWZvcm0sIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqIGZvciByZXNwb25zaXZlIGxheW91dHMuIEl0IHN1cHBvcnRzIGJvdGggc2luZ2xlIGFuZCBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZXMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9jb21wbGV0ZSB3aXRoIGZpbHRlcmluZ1xuICogLSBTaW5nbGUgYW5kIG11bHRpcGxlIHNlbGVjdGlvbiBzdXBwb3J0XG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XG4gKiAtIEN1c3RvbWl6YWJsZSBvcHRpb24gZGlzcGxheSAobGFiZWxLZXkvdmFsdWVLZXkpXG4gKiAtIEF1dG8tc2VsZWN0aW9uIHdoZW4gb25seSBvbmUgb3B0aW9uIGV4aXN0c1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3R5bGluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPFNlbGVjdEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImNhdGVnb3J5XCJcbiAqICAgbGFiZWw9XCJDYXRlZ29yeVwiXG4gKiAgIG9wdGlvbnM9e1tcbiAqICAgICB7IExhYmVsOiAnVGVjaG5vbG9neScsIFZhbHVlOiAndGVjaCcgfVxuICogICBdfVxuICogICBydWxlcz17eyByZXF1aXJlZDogJ1BsZWFzZSBzZWxlY3QgYSBjYXRlZ29yeScgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20ga2V5czpcbiAqIGBgYHRzeFxuICogPFNlbGVjdEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInVzZXJJZFwiXG4gKiAgIGxhYmVsPVwiQXNzaWduIHRvIFVzZXJcIlxuICogICBvcHRpb25zPXt1c2Vyc31cbiAqICAgbGFiZWxLZXk9XCJmdWxsTmFtZVwiXG4gKiAgIHZhbHVlS2V5PVwiaWRcIlxuICogICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIHVzZXIuLi5cIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBNdWx0aXBsZSBzZWxlY3Rpb246XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ0YWdzXCJcbiAqICAgbGFiZWw9XCJUYWdzXCJcbiAqICAgb3B0aW9ucz17YXZhaWxhYmxlVGFnc31cbiAqICAgbXVsdGlwbGVcbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogOCB9IH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRPcHRpb24gLSBUaGUgb3B0aW9uIG9iamVjdCB0eXBlXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBNdWx0aXBsZSAtIFdoZXRoZXIgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGVuYWJsZWRcbiAqIEB0ZW1wbGF0ZSBEaXNhYmxlQ2xlYXJhYmxlIC0gV2hldGhlciB0aGUgY2xlYXIgYnV0dG9uIGlzIGRpc2FibGVkXG4gKiBAdGVtcGxhdGUgRnJlZVNvbG8gLSBXaGV0aGVyIGZyZWUgdGV4dCBpbnB1dCBpcyBhbGxvd2VkXG4gKiBAdGVtcGxhdGUgQ2hpcENvbXBvbmVudCAtIFRoZSBjaGlwIGNvbXBvbmVudCB0eXBlIGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTZWxlY3RFbGVtZW50ID0gPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgTXVsdGlwbGUsXG4gIERpc2FibGVDbGVhcmFibGUsXG4gIEZyZWVTb2xvLFxuICBDaGlwQ29tcG9uZW50XG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5TZWxlY3RFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1NlbGVjdEVsZW1lbnQnO1xuIiwgImltcG9ydCBDaGVja0JveEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DaGVja0JveCc7XG5pbXBvcnQgQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIENoaXBUeXBlTWFwLFxuICBBdXRvY29tcGxldGVQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG4gIEF1dG9jb21wbGV0ZUNoYW5nZVJlYXNvbixcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBHcmlkLFxuICBDaGVja2JveCxcbiAgVGV4dEZpZWxkLFxuICBBdXRvY29tcGxldGUsXG4gIENpcmN1bGFyUHJvZ3Jlc3MsXG4gIHVzZVRoZW1lLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB0eXBlIHsgU3ludGhldGljRXZlbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG50eXBlIEJhc2VBdXRvY29tcGxldGVQcm9wczxcbiAgVE9wdGlvbixcbiAgTXVsdGlwbGUgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBDaGlwQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuRWxlbWVudFR5cGUsXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgJ25hbWUnIHwgJ3JlbmRlcklucHV0JyB8ICdtdWx0aXBsZScgfCAnb25DaGFuZ2UnIHwgJ3ZhbHVlJ1xuPjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgTXVsdGlwbGUgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gQmFzZUF1dG9jb21wbGV0ZVByb3BzPFxuICBUT3B0aW9uLFxuICBNdWx0aXBsZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgRnJlZVNvbG8sXG4gIENoaXBDb21wb25lbnRcbj4gJiB7XG4gIG5hbWU6IFROYW1lO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQ/OiBib29sZWFuO1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG4gIGxhYmVsRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RNdWx0aUVsZW1lbnQ8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFRPcHRpb24sIFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgb25CbHVyLFxuICAgIGRpc2FibGVkLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgaXNOdWxsYWJsZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkID0gdHJ1ZSxcbiAgICB2YXJpYW50LFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gb3B0aW9uc0lucHV0IHx8IFtdLCBbb3B0aW9uc0lucHV0XSk7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvblt2YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25dIDogbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRPcHRpb25MYWJlbCA9IChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlICYmICFkaXNhYmxlRGVmYXVsdFNlbGVjdGVkKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZCwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGUsIGRpc2FibGVEZWZhdWx0U2VsZWN0ZWRdKTtcblxuICBjb25zdCBzZWxlY3RlZFZhbHVlID1cbiAgICBmaWVsZC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgPyBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gZmllbGQudmFsdWUuaW5jbHVkZXMoZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSkpXG4gICAgICA6IFtdO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVEZWZhdWx0U2VsZWN0ZWQgJiYgb3B0aW9ucy5sZW5ndGggPT09IDEgJiYgZmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZURlZmF1bHRTZWxlY3RlZCwgb3B0aW9ucy5sZW5ndGhdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiYgZmllbGQudmFsdWUubGVuZ3RoID4gMDtcblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAhaGFzVmFsdWUgJiZcbiAgICAgICFpc051bGxhYmxlICYmXG4gICAgICAhZGlzYWJsZURlZmF1bHRTZWxlY3RlZFxuICAgICkge1xuICAgICAgZmllbGQub25DaGFuZ2UoW2dldE9wdGlvblZhbHVlKG9wdGlvbnNbMF0pXSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW1xuICAgIG9wdGlvbnMsXG4gICAgZ2V0T3B0aW9uVmFsdWUsXG4gICAgZmllbGQub25DaGFuZ2UsXG4gICAgaXNOdWxsYWJsZSxcbiAgICBkaXNhYmxlRGVmYXVsdFNlbGVjdGVkLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgXzogU3ludGhldGljRXZlbnQsXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBUT3B0aW9uW10sXG4gICAgcmVhc29uOiBBdXRvY29tcGxldGVDaGFuZ2VSZWFzb25cbiAgKSA9PiB7XG4gICAgaWYgKHJlYXNvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgfSBlbHNlIGlmIChyZWFzb24gPT09ICdzZWxlY3RPcHRpb24nIHx8IHJlYXNvbiA9PT0gJ3JlbW92ZU9wdGlvbicpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHNlbGVjdGVkT3B0aW9ucy5tYXAob3B0aW9uID0+IGdldE9wdGlvblZhbHVlKG9wdGlvbikpO1xuXG4gICAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IG5ld1ZhbHVlcyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGljb24gPSA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIGZvbnRTaXplPVwic21hbGxcIiAvPjtcbiAgY29uc3QgY2hlY2tlZEljb24gPSA8Q2hlY2tCb3hJY29uIGZvbnRTaXplPVwic21hbGxcIiAvPjtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIG11bHRpcGxlXG4gICAgICB2YWx1ZT17c2VsZWN0ZWRWYWx1ZX1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgZ2V0T3B0aW9uTGFiZWw9e2dldE9wdGlvbkxhYmVsfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbHVlKSA9PlxuICAgICAgICBnZXRPcHRpb25WYWx1ZShvcHRpb24pID09PSBnZXRPcHRpb25WYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9uc1xuICAgICAgZGlzYWJsZUNsb3NlT25TZWxlY3RcbiAgICAgIHJlZj17ZmllbGQucmVmfVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBzeD17e1xuICAgICAgICAnJi5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlJbnB1dEJhc2Utcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmQsXG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmLk11aS1kaXNhYmxlZCAuTXVpQXV0b2NvbXBsZXRlLXBvcHVwSW5kaWNhdG9yJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCAuTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUZpbGxlZElucHV0LXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVuZGVyT3B0aW9uPXsocHJvcHMxLCBvcHRpb24sIHsgc2VsZWN0ZWQgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSB7Li4ucHJvcHMxfT5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBpY29uPXtpY29ufVxuICAgICAgICAgICAgICBjaGVja2VkSWNvbj17Y2hlY2tlZEljb259XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtnZXRPcHRpb25MYWJlbChvcHRpb24gYXMgVE9wdGlvbil9XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBJbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgIGVuZEFkb3JubWVudDogKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBjb2xvcj1cImluaGVyaXRcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFNlbGVjdE11bHRpRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWVcbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblNlbGVjdE11bHRpRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdTZWxlY3RNdWx0aUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB7IHVzZUVuaGFuY2VkVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFRleHRGaWVsZEVsZW1lbnQgY29tcG9uZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRGaWVsZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwiZmlyc3ROYW1lXCIgfCBcInVzZXIuZW1haWxcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXJcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGZpZWxkIGVycm9yIG9iamVjdFxuICAgKiBAcmV0dXJucyBDdXN0b20gZXJyb3IgbWVzc2FnZSBvciBjb21wb25lbnRcbiAgICovXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIC8qKlxuICAgKiBDdXN0b20gVGV4dEZpZWxkIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBkZWZhdWx0IE1VSSBUZXh0RmllbGRcbiAgICovXG4gIGNvbXBvbmVudD86IHR5cGVvZiBUZXh0RmllbGQ7XG4gIC8qKlxuICAgKiBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgZm9yIGlucHV0L291dHB1dFxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZmllbGRUeXBlIGZvciBjb21tb24gcGF0dGVybnMgb3IgY3VzdG9tIHRyYW5zZm9ybXMgZm9yIGNvbXBsZXggY2FzZXNcbiAgICovXG4gIHRyYW5zZm9ybT86IHtcbiAgICAvKiogVHJhbnNmb3JtIHZhbHVlIGJlZm9yZSBkaXNwbGF5aW5nIGluIGlucHV0ICovXG4gICAgaW5wdXQ/OiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4gVFZhbHVlO1xuICAgIC8qKiBUcmFuc2Zvcm0gaW5wdXQgZXZlbnQgdG8gZm9ybSB2YWx1ZSAqL1xuICAgIG91dHB1dD86IChcbiAgICAgIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPj4sXG4gICAgICB2YWx1ZT86IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPlxuICAgICkgPT4gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICB9O1xuICAvKipcbiAgICogQnVpbHQtaW4gZmllbGQgdHlwZSBmb3IgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uXG4gICAqIEBleGFtcGxlICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ3NlbGVjdCdcbiAgICovXG4gIGZpZWxkVHlwZT86IEZpZWxkVHlwZTtcbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWUgdG8gZGlzcGxheSB3aGVuIGZpZWxkIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkXG4gICAqIEBleGFtcGxlIFwiXCJcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFRWYWx1ZTtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0XG4gICAqIEBleGFtcGxlIFwiRW1haWwgQWRkcmVzc1wiXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKiBAZXhhbXBsZSBcIkVudGVyIHlvdXIgZW1haWxcIlxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciB0aGUgdW5kZXJseWluZyBUZXh0RmllbGQgY29tcG9uZW50XG4gICAqL1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgVGV4dEZpZWxkIHZhcmlhbnRcbiAgICogQGRlZmF1bHRWYWx1ZSBcIm91dGxpbmVkXCJcbiAgICovXG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdHlsZXMgZm9yIHRoZSBUZXh0RmllbGRcbiAgICovXG4gIC8qKlxuICAgKiBDdXN0b20gb25DaGFuZ2UgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdHJhbnNmb3JtYXRpb25cbiAgICovXG4gIG9uQ2hhbmdlPzogKFxuICAgIGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICogRW5hYmxlIGRldmVsb3BtZW50IHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb24gaXNzdWVzXG4gICAqIEBkZWZhdWx0VmFsdWUgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICovXG4gIGVuYWJsZVdhcm5pbmdzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGV4dEZpZWxkRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHByb3BzOiBUZXh0RmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgY29tcG9uZW50OiBUZXh0RmllbGRDb21wb25lbnQgPSBUZXh0RmllbGQsXG4gICAgdHJhbnNmb3JtLFxuICAgIGZpZWxkVHlwZSA9ICd0ZXh0JywgLy8gRGVmYXVsdCB0byB0ZXh0IHR5cGVcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICBlbmFibGVXYXJuaW5ncyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHJlcXVpcmVkLFxuICAgIGhlbHBlclRleHQsXG4gICAgaW5wdXRSZWYsXG4gICAgb25JbnB1dCxcbiAgICBvbkJsdXIsXG4gICAgZGlzYWJsZWQsXG4gICAgLi4ucmVzdFRleHRQcm9wc1xuICB9ID0gdGV4dEZpZWxkUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgLy8gVXNlIHRoZSBlbmhhbmNlZCB0cmFuc2Zvcm0gaG9vayB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZUVuaGFuY2VkVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4oXG4gICAge1xuICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dDogdHJhbnNmb3JtLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0OiB0cmFuc2Zvcm0ub3V0cHV0LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWVsZFR5cGU6ICF0cmFuc2Zvcm1cbiAgICAgICAgPyB0eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gJ251bWJlcidcbiAgICAgICAgICA6IGZpZWxkVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZCwgLy8gQXV0by1kZXRlY3QgbnVtYmVyIHR5cGVcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVuYWJsZVdhcm5pbmdzLFxuICAgIH1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgbmFtZT17ZmllbGQubmFtZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICAgICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3VzdG9tT25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25JbnB1dD17KGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbklucHV0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgIGVycm9yID8gKHBhcnNlRXJyb3IgPyBwYXJzZUVycm9yKGVycm9yKSA6IGVycm9yLm1lc3NhZ2UpIDogaGVscGVyVGV4dFxuICAgICAgfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgVGV4dEZpZWxkIGNvbXBvbmVudCB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uLFxuICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGJ1aWx0LWluIGZpZWxkIHR5cGUgaGFuZGxpbmcuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5IHdpdGggY3VzdG9tIHBhcnNpbmdcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gc3VwcG9ydFxuICogLSBCdWlsdC1pbiBmaWVsZCB0eXBlcyBmb3IgY29tbW9uIHBhdHRlcm5zXG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBPcHRpbWl6ZWQgbnVtYmVyIGlucHV0IGhhbmRsaW5nXG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoIG1lbW9pemVkIHRyYW5zZm9ybWF0aW9uc1xuICogLSBEZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nXG4gKiAtIFN0YWJsZSByZWZlcmVuY2VzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIG51bWJlciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFnZVwiXG4gKiAgIGxhYmVsPVwiQWdlXCJcbiAqICAgZmllbGRUeXBlPVwibnVtYmVyXCJcbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdBZ2UgaXMgcmVxdWlyZWQnLCBtaW46IHsgdmFsdWU6IDAsIG1lc3NhZ2U6ICdBZ2UgbXVzdCBiZSBwb3NpdGl2ZScgfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImVtYWlsXCJcbiAqICAgbGFiZWw9XCJFbWFpbFwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWwgYWRkcmVzc1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBydWxlcz17e1xuICogICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICogICAgIHBhdHRlcm46IHsgdmFsdWU6IC9cXFMrQFxcUytcXC5cXFMrLywgbWVzc2FnZTogJ0ludmFsaWQgZW1haWwnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicHJpY2VcIlxuICogICBsYWJlbD1cIlByaWNlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPyBgJCR7dmFsdWV9YCA6ICcnLFxuICogICAgIG91dHB1dDogKGV2ZW50KSA9PiBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKCckJywgJycpKSB8fCBudWxsXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGVycm9yIHBhcnNpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gKiAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiAoXG4gKiAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICdyZWQnIH19PlxuICogICAgICAgXHUyNkEwXHVGRTBGIHtlcnJvci5tZXNzYWdlfVxuICogICAgIDwvc3Bhbj5cbiAqICAgKX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRGaWVsZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogVGV4dEZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBHcmlkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbiAgVGltZVBpY2tlclByb3BzLFxuICBUaW1lUGlja2VyU2xvdFByb3BzLFxuICBUaW1lVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IHVzZUxvY2FsaXphdGlvbkNvbnRleHQgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFscyc7XG5pbXBvcnQgeyByZW5kZXJUaW1lVmlld0Nsb2NrIH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycy90aW1lVmlld1JlbmRlcmVycyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRQYXRoLFxuICBQYXRoVmFsdWUsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkVmFsdWVzLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZVRyYW5zZm9ybSB9IGZyb20gJ0AvaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE9yVmFsdWUgfSBmcm9tICdAL3R5cGVzJztcbmltcG9ydCB7IHJlYWRWYWx1ZUFzRGF0ZSB9IGZyb20gJ0AvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuPiB7XG4gIG5hbWU6IFROYW1lO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IgfCBUaW1lVmFsaWRhdGlvbkVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGlucHV0UHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICBoZWxwZXJUZXh0PzogVGV4dEZpZWxkUHJvcHNbJ2hlbHBlclRleHQnXTtcbiAgbGFiZWw/OiBSZWFjdE5vZGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0ZXh0UmVhZE9ubHk/OiBib29sZWFuO1xuICBzbG90UHJvcHM/OiBPbWl0PFxuICAgIFRpbWVQaWNrZXJTbG90UHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3RleHRGaWVsZCdcbiAgPjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRWYWx1ZSB8IG51bGw7XG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbiAgdGltZVBpY2tlclByb3BzPzogT21pdDxcbiAgICBUaW1lUGlja2VyUHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3ZhbHVlJyB8ICdzbG90UHJvcHMnXG4gID47XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGltZVBpY2tlckVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihwcm9wczogVGltZVBpY2tlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIHJlcXVpcmVkLFxuICAgIGlucHV0UHJvcHMsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBzbG90UHJvcHMsXG4gICAgdGltZVBpY2tlclByb3BzID0ge30sXG4gICAgdHJhbnNmb3JtLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGFkYXB0ZXIgPSB1c2VMb2NhbGl6YXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7IGRpc2FibGVkLCBpbnB1dFJlZiwgb25DbG9zZSwgLi4ucmVzdFRpbWVQaWNrZXJQcm9wcyB9ID1cbiAgICB0aW1lUGlja2VyUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuICB9KTtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZSB8IG51bGw+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IG5ld1ZhbHVlID0+IHJlYWRWYWx1ZUFzRGF0ZShhZGFwdGVyLCBuZXdWYWx1ZSksXG4gICAgICBvdXRwdXQ6IGRhdGEgPT4ge1xuICAgICAgICBpZiAoIWRheWpzLmlzRGF5anMoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihmaWVsZC5yZWYsIGlucHV0UmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUaW1lUGlja2VyXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGltZVBpY2tlclByb3BzfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb3Blbj17b3Blbn1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHZpZXdSZW5kZXJlcnM9e3tcbiAgICAgICAgaG91cnM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICAgIG1pbnV0ZXM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICAgIHNlY29uZHM6IHJlbmRlclRpbWVWaWV3Q2xvY2ssXG4gICAgICB9fVxuICAgICAgb25PcGVuPXsoKSA9PiBzZXRPcGVuKHRydWUpfVxuICAgICAgb25DbG9zZT17KC4uLmFyZ3MpID0+IHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBvbkNsb3NlPy4oLi4uYXJncyk7XG4gICAgICB9fVxuICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIHRpbWVQaWNrZXJQcm9wcy5vbkNoYW5nZT8uKG5ld1ZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH19XG4gICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgLi4uc2xvdFByb3BzLFxuICAgICAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NsZWFyJywgJ2NhbmNlbCcsICdhY2NlcHQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgIGN1cnNvcjogZGlzYWJsZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25CbHVyOiAoXG4gICAgICAgICAgICBldmVudDogUmVhY3QuRm9jdXNFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICAgICAgaW5wdXRQcm9wcz8ub25CbHVyPy4oZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICEhZXJyb3IsXG4gICAgICAgICAgaGVscGVyVGV4dDogZXJyb3JcbiAgICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgOiBpbnB1dFByb3BzPy5oZWxwZXJUZXh0IHx8IHJlc3QuaGVscGVyVGV4dCxcbiAgICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0TW9kZTogJ25vbmUnLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wcz8uaW5wdXRQcm9wcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRpbWVQaWNrZXJFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblRpbWVQaWNrZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1RpbWVQaWNrZXJFbGVtZW50JztcbiIsICJpbXBvcnQge1xyXG4gIEJveCxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtSGVscGVyVGV4dCxcclxuICBGb3JtTGFiZWwsXHJcbiAgR3JpZCxcclxuICBTbGlkZXIsXHJcbiAgdHlwZSBHcmlkUHJvcHMsXHJcbiAgdHlwZSBTbGlkZXJQcm9wcyxcclxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IHR5cGUgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZEVycm9yLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcclxuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcblxyXG4vKipcclxuICogUHJvcHMgZm9yIHRoZSBTbGlkZXJFbGVtZW50IGNvbXBvbmVudC5cclxuICpcclxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXHJcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVyRWxlbWVudFByb3BzPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+IHtcclxuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGZvcm0gKi9cclxuICBuYW1lOiBUTmFtZTtcclxuICAvKiogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybSAqL1xyXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XHJcbiAgLyoqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0ICovXHJcbiAgbGFiZWw/OiBSZWFjdE5vZGU7XHJcbiAgLyoqIEhlbHBlciB0ZXh0IHRvIGRpc3BsYXkgYmVsb3cgdGhlIHNsaWRlciAqL1xyXG4gIGhlbHBlclRleHQ/OiBSZWFjdE5vZGU7XHJcbiAgLyoqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlciAqL1xyXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcclxuICAvKiogTWluaW11bSB2YWx1ZSAqL1xyXG4gIG1pbj86IG51bWJlcjtcclxuICAvKiogTWF4aW11bSB2YWx1ZSAqL1xyXG4gIG1heD86IG51bWJlcjtcclxuICAvKiogU3RlcCBpbmNyZW1lbnQgKi9cclxuICBzdGVwPzogbnVtYmVyO1xyXG4gIC8qKiBTaG93IG1hcmtzIG9uIHRoZSBzbGlkZXIgKi9cclxuICBtYXJrcz86IGJvb2xlYW4gfCB7IHZhbHVlOiBudW1iZXI7IGxhYmVsPzogc3RyaW5nIH1bXTtcclxuICAvKiogV2hldGhlciB0aGUgZmllbGQgaXMgcmVxdWlyZWQgKi9cclxuICByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGRpc2FibGVkICovXHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgKi9cclxuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XHJcbiAgLyoqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIHRoZSBTbGlkZXIgY29tcG9uZW50ICovXHJcbiAgc2xpZGVyUHJvcHM/OiBPbWl0PFNsaWRlclByb3BzLCAndmFsdWUnIHwgJ29uQ2hhbmdlJyB8ICdtaW4nIHwgJ21heCcgfCAnc3RlcCcgfCAnbWFya3MnIHwgJ2Rpc2FibGVkJz47XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFNsaWRlckVsZW1lbnRDb3JlPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHByb3BzOiBPbWl0PFNsaWRlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPiwgJ2dyaWRQcm9wcyc+KSB7XHJcbiAgY29uc3Qge1xyXG4gICAgbmFtZSxcclxuICAgIGNvbnRyb2wsXHJcbiAgICBsYWJlbCxcclxuICAgIGhlbHBlclRleHQsXHJcbiAgICBwYXJzZUVycm9yLFxyXG4gICAgbWluID0gMCxcclxuICAgIG1heCA9IDEwMCxcclxuICAgIHN0ZXAgPSAxLFxyXG4gICAgbWFya3MgPSBmYWxzZSxcclxuICAgIHJlcXVpcmVkID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgc2xpZGVyUHJvcHMgPSB7fSxcclxuICB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGZpZWxkLFxyXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxyXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcclxuICAgIG5hbWUsXHJcbiAgICBjb250cm9sLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IG51bGw7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Rm9ybUNvbnRyb2xcclxuICAgICAgZnVsbFdpZHRoXHJcbiAgICAgIG1hcmdpbj1cIm5vcm1hbFwiXHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgID5cclxuICAgICAge2xhYmVsICYmIDxGb3JtTGFiZWwgc3g9e3sgbWI6IDIgfX0+e2xhYmVsfTwvRm9ybUxhYmVsPn1cclxuICAgICAgPEJveCBzeD17eyBweDogMiB9fT5cclxuICAgICAgICA8U2xpZGVyXHJcbiAgICAgICAgICB7Li4uc2xpZGVyUHJvcHN9XHJcbiAgICAgICAgICByZWY9e2ZpZWxkLnJlZn1cclxuICAgICAgICAgIG5hbWU9e2ZpZWxkLm5hbWV9XHJcbiAgICAgICAgICB2YWx1ZT17dHlwZW9mIGZpZWxkLnZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkLnZhbHVlIDogbWlufVxyXG4gICAgICAgICAgb25DaGFuZ2U9eyhfLCBuZXdWYWx1ZSkgPT4gZmllbGQub25DaGFuZ2UobmV3VmFsdWUpfVxyXG4gICAgICAgICAgb25CbHVyPXtmaWVsZC5vbkJsdXJ9XHJcbiAgICAgICAgICBtaW49e21pbn1cclxuICAgICAgICAgIG1heD17bWF4fVxyXG4gICAgICAgICAgc3RlcD17c3RlcH1cclxuICAgICAgICAgIG1hcmtzPXttYXJrc31cclxuICAgICAgICAgIHZhbHVlTGFiZWxEaXNwbGF5PVwiYXV0b1wiXHJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC9Cb3g+XHJcbiAgICAgIHsoZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHQpICYmIChcclxuICAgICAgICA8Rm9ybUhlbHBlclRleHQ+e2Vycm9yTWVzc2FnZSB8fCBoZWxwZXJUZXh0fTwvRm9ybUhlbHBlclRleHQ+XHJcbiAgICAgICl9XHJcbiAgICA8L0Zvcm1Db250cm9sPlxyXG4gICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBTbGlkZXIgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBGZWF0dXJlczpcclxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxyXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XHJcbiAqIC0gQ3VzdG9taXphYmxlIG1pbi9tYXgvc3RlcCB2YWx1ZXNcclxuICogLSBPcHRpb25hbCBtYXJrcyBkaXNwbGF5XHJcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHN4XHJcbiAqIDxTbGlkZXJFbGVtZW50XHJcbiAqICAgbmFtZT1cInJhdGluZ1wiXHJcbiAqICAgY29udHJvbD17Y29udHJvbH1cclxuICogICBsYWJlbD1cIlJhdGluZ1wiXHJcbiAqICAgbWluPXswfVxyXG4gKiAgIG1heD17MTB9XHJcbiAqICAgc3RlcD17MX1cclxuICogICBtYXJrc1xyXG4gKiAvPlxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBjb25zdCBTbGlkZXJFbGVtZW50ID0gPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHtcclxuICBncmlkUHJvcHMgPSB7fSxcclxuICAuLi5wcm9wc1xyXG59OiBTbGlkZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XHJcbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxyXG4gICAgPC9HcmlkPlxyXG4gICk7XHJcbn07XHJcblxyXG5TbGlkZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gJ1NsaWRlckVsZW1lbnQnO1xyXG4iLCAiaW1wb3J0IHtcclxuICBCb3gsXHJcbiAgQnV0dG9uLFxyXG4gIENoaXAsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUhlbHBlclRleHQsXHJcbiAgRm9ybUxhYmVsLFxyXG4gIEdyaWQsXHJcbiAgU3RhY2ssXHJcbiAgdHlwZSBHcmlkUHJvcHMsXHJcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCBDbG91ZFVwbG9hZEljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DbG91ZFVwbG9hZCc7XHJcbmltcG9ydCB0eXBlIHsgQ2hhbmdlRXZlbnQsIFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkRXJyb3IsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xyXG5pbXBvcnQgeyB1c2VDb250cm9sbGVyLCB1c2VGb3JtQ29udGV4dCB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcblxyXG4vKipcclxuICogUHJvcHMgZm9yIHRoZSBGaWxlVXBsb2FkRWxlbWVudCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxyXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVVcGxvYWRFbGVtZW50UHJvcHM8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ge1xyXG4gIC8qKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybSAqL1xyXG4gIG5hbWU6IFROYW1lO1xyXG4gIC8qKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtICovXHJcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcclxuICAvKiogVGhlIGlucHV0IGxhYmVsIHRleHQgKi9cclxuICBsYWJlbD86IFJlYWN0Tm9kZTtcclxuICAvKiogSGVscGVyIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgdXBsb2FkICovXHJcbiAgaGVscGVyVGV4dD86IFJlYWN0Tm9kZTtcclxuICAvKiogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyICovXHJcbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBhbGxvd2VkICovXHJcbiAgbWF4RmlsZXM/OiBudW1iZXI7XHJcbiAgLyoqIE1heGltdW0gZmlsZSBzaXplIGluIE1CICovXHJcbiAgbWF4U2l6ZU1CPzogbnVtYmVyO1xyXG4gIC8qKiBBbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyAoZS5nLiwgWycuanBnJywgJy5wbmcnLCAnLnBkZiddKSAqL1xyXG4gIGFsbG93ZWRFeHRlbnNpb25zPzogc3RyaW5nW107XHJcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIHJlcXVpcmVkICovXHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBmaWVsZCBpcyBkaXNhYmxlZCAqL1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAvKiogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyICovXHJcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xyXG4gIC8qKiBCdXR0b24gdGV4dCAqL1xyXG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIEZpbGVVcGxvYWRFbGVtZW50Q29yZTxcclxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxyXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcclxuPihwcm9wczogT21pdDxGaWxlVXBsb2FkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+LCAnZ3JpZFByb3BzJz4pIHtcclxuICBjb25zdCB7XHJcbiAgICBuYW1lLFxyXG4gICAgY29udHJvbCxcclxuICAgIGxhYmVsLFxyXG4gICAgaGVscGVyVGV4dCxcclxuICAgIHBhcnNlRXJyb3IsXHJcbiAgICBtYXhGaWxlcyA9IDUsXHJcbiAgICBtYXhTaXplTUIgPSAxMCxcclxuICAgIGFsbG93ZWRFeHRlbnNpb25zID0gWycuanBnJywgJy5qcGVnJywgJy5wbmcnLCAnLnBkZicsICcuZG9jJywgJy5kb2N4JywgJy54bHMnLCAnLnhsc3gnXSxcclxuICAgIHJlcXVpcmVkID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgYnV0dG9uVGV4dCA9ICdDaG9vc2UgRmlsZXMnLFxyXG4gIH0gPSBwcm9wcztcclxuXHJcbiAgY29uc3QgeyBzZXRFcnJvciwgY2xlYXJFcnJvcnMgfSA9IHVzZUZvcm1Db250ZXh0KCk7XHJcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICBjb25zdCB7XHJcbiAgICBmaWVsZCxcclxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcclxuICB9ID0gdXNlQ29udHJvbGxlcih7XHJcbiAgICBuYW1lLFxyXG4gICAgY29udHJvbCxcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpID8gZmllbGQudmFsdWUgOiBbXTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdGVGaWxlcyA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpOiBGaWxlW10gfCBzdHJpbmcgPT4ge1xyXG4gICAgICBpZiAoIWZpbGVMaXN0IHx8IGZpbGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA+IG1heEZpbGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGBNYXhpbXVtICR7bWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhTaXplQnl0ZXMgPSBtYXhTaXplTUIgKiAxMDI0ICogMTAyNDtcclxuICAgICAgY29uc3QgdmFsaWRGaWxlczogRmlsZVtdID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVMaXN0W2ldO1xyXG5cclxuICAgICAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZUJ5dGVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBleGNlZWRzICR7bWF4U2l6ZU1CfU1CIHNpemUgbGltaXRgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gJy4nICsgZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy5pbmNsdWRlcyhleHRlbnNpb24pKSB7XHJcbiAgICAgICAgICByZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBoYXMgaW52YWxpZCBleHRlbnNpb24uIEFsbG93ZWQ6ICR7YWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCAnKX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFsaWRGaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsaWRGaWxlcztcclxuICAgIH0sXHJcbiAgICBbbWF4RmlsZXMsIG1heFNpemVNQiwgYWxsb3dlZEV4dGVuc2lvbnNdXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZUZpbGVzKGV2ZW50LnRhcmdldC5maWxlcyk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBzZXRFcnJvcihuYW1lLCB7IHR5cGU6ICd2YWxpZGF0aW9uJywgbWVzc2FnZTogcmVzdWx0IH0pO1xyXG4gICAgICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGVhckVycm9ycyhuYW1lKTtcclxuICAgICAgZmllbGQub25DaGFuZ2UocmVzdWx0KTtcclxuICAgIH0sXHJcbiAgICBbdmFsaWRhdGVGaWxlcywgc2V0RXJyb3IsIGNsZWFyRXJyb3JzLCBuYW1lLCBmaWVsZF1cclxuICApO1xyXG5cclxuICBjb25zdCBoYW5kbGVSZW1vdmVGaWxlID0gdXNlQ2FsbGJhY2soXHJcbiAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBuZXdGaWxlcyA9IGZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xyXG4gICAgICBmaWVsZC5vbkNoYW5nZShuZXdGaWxlcyk7XHJcblxyXG4gICAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgW2ZpbGVzLCBmaWVsZF1cclxuICApO1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IG51bGw7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Rm9ybUNvbnRyb2xcclxuICAgICAgZnVsbFdpZHRoXHJcbiAgICAgIG1hcmdpbj1cIm5vcm1hbFwiXHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XHJcbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgID5cclxuICAgICAge2xhYmVsICYmIDxGb3JtTGFiZWwgc3g9e3sgbWI6IDEgfX0+e2xhYmVsfTwvRm9ybUxhYmVsPn1cclxuICAgICAgPEJveD5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgY29tcG9uZW50PVwibGFiZWxcIlxyXG4gICAgICAgICAgc3RhcnRJY29uPXs8Q2xvdWRVcGxvYWRJY29uIC8+fVxyXG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGZpbGVzLmxlbmd0aCA+PSBtYXhGaWxlc31cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7YnV0dG9uVGV4dH1cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cclxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgaGlkZGVuXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICB7ZmlsZXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8U3RhY2sgZGlyZWN0aW9uPVwicm93XCIgc3BhY2luZz17MX0gZmxleFdyYXA9XCJ3cmFwXCIgc3g9e3sgbXQ6IDIgfX0+XHJcbiAgICAgICAgICAgIHtmaWxlcy5tYXAoKGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIpID0+IChcclxuICAgICAgICAgICAgICA8Q2hpcFxyXG4gICAgICAgICAgICAgICAga2V5PXtgJHtmaWxlLm5hbWV9LSR7aW5kZXh9YH1cclxuICAgICAgICAgICAgICAgIGxhYmVsPXtgJHtmaWxlLm5hbWV9ICgkeyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQilgfVxyXG4gICAgICAgICAgICAgICAgb25EZWxldGU9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogKCkgPT4gaGFuZGxlUmVtb3ZlRmlsZShpbmRleCl9XHJcbiAgICAgICAgICAgICAgICBzeD17eyBtYjogMSB9fVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgPC9TdGFjaz5cclxuICAgICAgICApfVxyXG4gICAgICA8L0JveD5cclxuICAgICAgeyhlcnJvck1lc3NhZ2UgfHwgaGVscGVyVGV4dCkgJiYgKFxyXG4gICAgICAgIDxGb3JtSGVscGVyVGV4dD57ZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHR9PC9Gb3JtSGVscGVyVGV4dD5cclxuICAgICAgKX1cclxuICAgIDwvRm9ybUNvbnRyb2w+XHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIEZpbGUgVXBsb2FkIGNvbXBvbmVudC5cclxuICpcclxuICogRmVhdHVyZXM6XHJcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cclxuICogLSBNdWx0aXBsZSBmaWxlIHN1cHBvcnRcclxuICogLSBGaWxlIHNpemUgdmFsaWRhdGlvblxyXG4gKiAtIEZpbGUgdHlwZSB2YWxpZGF0aW9uXHJcbiAqIC0gVmlzdWFsIGZpbGUgbGlzdCB3aXRoIHJlbW92ZSBjYXBhYmlsaXR5XHJcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHN4XHJcbiAqIDxGaWxlVXBsb2FkRWxlbWVudFxyXG4gKiAgIG5hbWU9XCJkb2N1bWVudHNcIlxyXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XHJcbiAqICAgbGFiZWw9XCJVcGxvYWQgRG9jdW1lbnRzXCJcclxuICogICBtYXhGaWxlcz17M31cclxuICogICBtYXhTaXplTUI9ezV9XHJcbiAqICAgYWxsb3dlZEV4dGVuc2lvbnM9e1snLnBkZicsICcuZG9jJywgJy5kb2N4J119XHJcbiAqIC8+XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWRFbGVtZW50ID0gPFxyXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXHJcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxyXG4+KHtcclxuICBncmlkUHJvcHMgPSB7fSxcclxuICAuLi5wcm9wc1xyXG59OiBGaWxlVXBsb2FkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KTogUmVhY3RFbGVtZW50ID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxyXG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cclxuICAgIDwvR3JpZD5cclxuICApO1xyXG59O1xyXG5cclxuRmlsZVVwbG9hZEVsZW1lbnQuZGlzcGxheU5hbWUgPSAnRmlsZVVwbG9hZEVsZW1lbnQnO1xyXG4iLCAiaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHR5cGUgeyBUZXh0RmllbGRQcm9wcywgR3JpZFByb3BzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IFRleHRGaWVsZCwgSW5wdXRBZG9ybm1lbnQsIEdyaWQgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZEVycm9yLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcclxuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XHJcbmltcG9ydCB7IENvdW50cnlTZWxlY3RvciB9IGZyb20gJy4vQ291bnRyeVNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ09VTlRSSUVTLCBwYXJzZUUxNjRDb3VudHJ5LCBwYXJzZUUxNjRMb2NhbE51bWJlciB9IGZyb20gJy4vY291bnRyaWVzJztcclxuaW1wb3J0IHR5cGUgeyBDb3VudHJ5RGF0YSB9IGZyb20gJy4vY291bnRyaWVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGhvbmVOdW1iZXJFbGVtZW50UHJvcHM8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ge1xyXG4gIC8qKiBGaWVsZCBuYW1lIGluIHRoZSBmb3JtICovXHJcbiAgbmFtZTogVE5hbWU7XHJcbiAgLyoqIFJIRiBjb250cm9sIGluc3RhbmNlICovXHJcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcclxuICAvKiogSW5wdXQgbGFiZWwgKi9cclxuICBsYWJlbD86IHN0cmluZztcclxuICAvKiogSW5wdXQgcGxhY2Vob2xkZXIgKi9cclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICAvKipcclxuICAgKiBEZWZhdWx0IGNvdW50cnkgSVNPIDMxNjYtMSBhbHBoYS0yIGNvZGUgc2hvd24gd2hlbiB0aGUgZmllbGQgaXMgZW1wdHkuXHJcbiAgICogQGRlZmF1bHRWYWx1ZSAnVVMnXHJcbiAgICovXHJcbiAgZGVmYXVsdENvdW50cnk/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQ291bnRyeSBjb2RlcyB0byBzaG93IGZpcnN0IGluIHRoZSBwaWNrZXIgbGlzdC5cclxuICAgKiBAZXhhbXBsZSBbJ1VTJywgJ0dCJywgJ0NBJ11cclxuICAgKi9cclxuICBwcmVmZXJyZWRDb3VudHJpZXM/OiBzdHJpbmdbXTtcclxuICAvKiogUmVzdHJpY3QgcGlja2VyIHRvIG9ubHkgdGhlc2UgY291bnRyeSBjb2Rlcy4gKi9cclxuICBvbmx5Q291bnRyaWVzPzogc3RyaW5nW107XHJcbiAgLyoqIEV4Y2x1ZGUgdGhlc2UgY291bnRyeSBjb2RlcyBmcm9tIHRoZSBwaWNrZXIuICovXHJcbiAgZXhjbHVkZUNvdW50cmllcz86IHN0cmluZ1tdO1xyXG4gIC8qKiBEaXNhYmxlIHRoZSBmaWVsZCAqL1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICAvKiogU2hvdyByZXF1aXJlZCBhc3RlcmlzayAqL1xyXG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcclxuICAvKiogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSBvdXRlciB3cmFwcGVyICovXHJcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xyXG4gIC8qKiBDdXN0b20gZXJyb3IgcmVuZGVyZXIgKi9cclxuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XHJcbiAgLyoqIEFkZGl0aW9uYWwgcHJvcHMgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIE1VSSBUZXh0RmllbGQgKi9cclxuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJyB8ICd0eXBlJz47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmREZWZhdWx0Q291bnRyeShjb2RlOiBzdHJpbmcpOiBDb3VudHJ5RGF0YSB7XHJcbiAgY29uc3QgdXBwZXIgPSBjb2RlLnRvVXBwZXJDYXNlKCk7XHJcbiAgcmV0dXJuIENPVU5UUklFUy5maW5kKChjKSA9PiBjLmNvZGUgPT09IHVwcGVyKSA/PyBDT1VOVFJJRVMuZmluZCgoYykgPT4gYy5jb2RlID09PSAnVVMnKSE7XHJcbn1cclxuXHJcbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFBob25lTnVtYmVyRWw8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4ocHJvcHM6IFBob25lTnVtYmVyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XHJcbiAgY29uc3Qge1xyXG4gICAgbmFtZSxcclxuICAgIGNvbnRyb2wsXHJcbiAgICBsYWJlbCxcclxuICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgZGVmYXVsdENvdW50cnkgPSAnVVMnLFxyXG4gICAgcHJlZmVycmVkQ291bnRyaWVzLFxyXG4gICAgb25seUNvdW50cmllcyxcclxuICAgIGV4Y2x1ZGVDb3VudHJpZXMsXHJcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxyXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcclxuICAgIHBhcnNlRXJyb3IsXHJcbiAgICB0ZXh0RmllbGRQcm9wcyxcclxuICB9ID0gcHJvcHM7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGZpZWxkLFxyXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxyXG4gIH0gPSB1c2VDb250cm9sbGVyKHsgbmFtZSwgY29udHJvbCB9KTtcclxuXHJcbiAgY29uc3QgW3NlbGVjdGVkQ291bnRyeSwgc2V0U2VsZWN0ZWRDb3VudHJ5XSA9IHVzZVN0YXRlPENvdW50cnlEYXRhPigoKSA9PlxyXG4gICAgZmluZERlZmF1bHRDb3VudHJ5KGRlZmF1bHRDb3VudHJ5KVxyXG4gICk7XHJcbiAgY29uc3QgW2xvY2FsTnVtYmVyLCBzZXRMb2NhbE51bWJlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmllbGQudmFsdWUgY2hhbmdlIG9yaWdpbmF0ZWQgZnJvbSBvdXIgb3duIGhhbmRsZXJzLlxyXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHVzZUVmZmVjdCBzaG91bGQgc2tpcCByZXNldHRpbmcgaW50ZXJuYWwgc3RhdGUgc28gdGhhdDpcclxuICAgKiAgLSBUeXBpbmcgZGlnaXRzIGRvZXNuJ3QgcmVzZXQgc2VsZWN0ZWRDb3VudHJ5IHRvIGRlZmF1bHRcclxuICAgKiAgLSBDbGVhcmluZyB0aGUgbnVtYmVyIGlucHV0IGRvZXNuJ3QgcmVzZXQgc2VsZWN0ZWRDb3VudHJ5IHRvIGRlZmF1bHRcclxuICAgKiBPbmx5IGV4dGVybmFsIGNoYW5nZXMgKGUuZy4gZm9ybS5yZXNldCgpKSBzaG91bGQgdHJpZ2dlciBhIGZ1bGwgc3RhdGUgc3luYy5cclxuICAgKi9cclxuICBjb25zdCBpbnRlcm5hbENoYW5nZVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcblxyXG4gIC8vIFN5bmMgaW50ZXJuYWwgc3RhdGUgd2hlbiBSSEYgdmFsdWUgY2hhbmdlcyBleHRlcm5hbGx5IChlLmcuIGZvcm0ucmVzZXQoKSlcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKGludGVybmFsQ2hhbmdlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgaW50ZXJuYWxDaGFuZ2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47IC8vIE91ciBvd24gY2hhbmdlIFx1MjAxNCBkb24ndCBvdmVycmlkZSBpbnRlcm5hbCBzdGF0ZVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0ZXJuYWxWYWx1ZSA9IGZpZWxkLnZhbHVlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XHJcbiAgICBpZiAoIWV4dGVybmFsVmFsdWUgfHwgZXh0ZXJuYWxWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgLy8gRXh0ZXJuYWwgY2xlYXIgKGUuZy4gZm9ybS5yZXNldCgpKSBcdTIwMTQgcmVzZXQgdG8gZGVmYXVsdCBjb3VudHJ5ICsgZW1wdHkgbnVtYmVyXHJcbiAgICAgIHNldFNlbGVjdGVkQ291bnRyeShmaW5kRGVmYXVsdENvdW50cnkoZGVmYXVsdENvdW50cnkpKTtcclxuICAgICAgc2V0TG9jYWxOdW1iZXIoJycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGV4dGVybmFsVmFsdWUgPT09ICdzdHJpbmcnICYmIGV4dGVybmFsVmFsdWUuc3RhcnRzV2l0aCgnKycpKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gcGFyc2VFMTY0Q291bnRyeShleHRlcm5hbFZhbHVlKTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWRDb3VudHJ5KG1hdGNoKTtcclxuICAgICAgICBzZXRMb2NhbE51bWJlcihwYXJzZUUxNjRMb2NhbE51bWJlcihleHRlcm5hbFZhbHVlLCBtYXRjaC5kaWFsQ29kZSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE5vIG1hdGNoIFx1MjAxNCByZXNldCB0byBkZWZhdWx0IGNvdW50cnksIHN0cmlwIGxlYWRpbmcgJysnXHJcbiAgICAgICAgc2V0U2VsZWN0ZWRDb3VudHJ5KGZpbmREZWZhdWx0Q291bnRyeShkZWZhdWx0Q291bnRyeSkpO1xyXG4gICAgICAgIHNldExvY2FsTnVtYmVyKGV4dGVybmFsVmFsdWUucmVwbGFjZSgvXlxcKy8sICcnKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIElmIHZhbHVlIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnKycgaXQncyBub3QgRS4xNjQgXHUyMDE0IGxlYXZlIGludGVybmFsIHN0YXRlIHVuY2hhbmdlZFxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcclxuICB9LCBbZmllbGQudmFsdWVdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlTnVtYmVyQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICBjb25zdCBkaWdpdHMgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgc2V0TG9jYWxOdW1iZXIoZGlnaXRzKTtcclxuICAgIGludGVybmFsQ2hhbmdlUmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgaWYgKGRpZ2l0cyA9PT0gJycpIHtcclxuICAgICAgZmllbGQub25DaGFuZ2UoJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmllbGQub25DaGFuZ2Uoc2VsZWN0ZWRDb3VudHJ5LmRpYWxDb2RlICsgZGlnaXRzKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDb3VudHJ5Q2hhbmdlID0gKGNvdW50cnk6IENvdW50cnlEYXRhKSA9PiB7XHJcbiAgICBzZXRTZWxlY3RlZENvdW50cnkoY291bnRyeSk7XHJcbiAgICAvLyBPbmx5IHVwZGF0ZSBSSEYgdmFsdWUgd2hlbiB0aGVyZSdzIGEgbG9jYWwgbnVtYmVyIHRvIGNvbWJpbmUgd2l0aC5cclxuICAgIC8vIFdoZW4gbG9jYWxOdW1iZXIgaXMgZW1wdHkgd2UgZGVsaWJlcmF0ZWx5IHNraXAgZmllbGQub25DaGFuZ2UoJycpIHRvIGF2b2lkXHJcbiAgICAvLyB0cmlnZ2VyaW5nIHRoZSB1c2VFZmZlY3QgKHdoaWNoIHdvdWxkIHJlc2V0IHNlbGVjdGVkQ291bnRyeSBiYWNrIHRvIGRlZmF1bHQpLlxyXG4gICAgaWYgKGxvY2FsTnVtYmVyICE9PSAnJykge1xyXG4gICAgICBpbnRlcm5hbENoYW5nZVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgICAgZmllbGQub25DaGFuZ2UoY291bnRyeS5kaWFsQ29kZSArIGxvY2FsTnVtYmVyKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvclxyXG4gICAgPyAocGFyc2VFcnJvciA/IHBhcnNlRXJyb3IoZXJyb3IpIDogZXJyb3IubWVzc2FnZSlcclxuICAgIDogdGV4dEZpZWxkUHJvcHM/LmhlbHBlclRleHQ7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8VGV4dEZpZWxkXHJcbiAgICAgIHsuLi50ZXh0RmllbGRQcm9wc31cclxuICAgICAgbGFiZWw9e2xhYmVsfVxyXG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XHJcbiAgICAgIHR5cGU9XCJ0ZWxcIlxyXG4gICAgICB2YWx1ZT17bG9jYWxOdW1iZXJ9XHJcbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVOdW1iZXJDaGFuZ2V9XHJcbiAgICAgIG9uQmx1cj17ZmllbGQub25CbHVyfVxyXG4gICAgICBpbnB1dFJlZj17ZmllbGQucmVmfVxyXG4gICAgICBmdWxsV2lkdGhcclxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxyXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgIGVycm9yPXshIWVycm9yfVxyXG4gICAgICBoZWxwZXJUZXh0PXtlcnJvck1lc3NhZ2V9XHJcbiAgICAgIHNsb3RQcm9wcz17e1xyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBzdGFydEFkb3JubWVudDogKFxyXG4gICAgICAgICAgICA8SW5wdXRBZG9ybm1lbnQgcG9zaXRpb249XCJzdGFydFwiPlxyXG4gICAgICAgICAgICAgIDxDb3VudHJ5U2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZENvdW50cnl9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ291bnRyeUNoYW5nZX1cclxuICAgICAgICAgICAgICAgIHByZWZlcnJlZENvdW50cmllcz17cHJlZmVycmVkQ291bnRyaWVzfVxyXG4gICAgICAgICAgICAgICAgb25seUNvdW50cmllcz17b25seUNvdW50cmllc31cclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVDb3VudHJpZXM9e2V4Y2x1ZGVDb3VudHJpZXN9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9JbnB1dEFkb3JubWVudD5cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAuLi50ZXh0RmllbGRQcm9wcz8uc2xvdFByb3BzPy5pbnB1dCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRleHRGaWVsZFByb3BzPy5zbG90UHJvcHMsXHJcbiAgICAgIH19XHJcbiAgICAvPlxyXG4gICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBwaG9uZSBudW1iZXIgZmllbGQgd2l0aCBjb3VudHJ5IGNvZGUgc2VsZWN0b3IuXHJcbiAqXHJcbiAqIFN0b3JlcyB0aGUgdmFsdWUgYXMgYW4gRS4xNjQgc3RyaW5nIChlLmcuIGArMTU1NTEyMzQ1NjdgKS5cclxuICogV2hlbiB0aGUgbG9jYWwgbnVtYmVyIGlzIGVtcHR5IHRoZSBSSEYgdmFsdWUgaXMgYCcnYCwgc28gUmVxdWlyZWQgdmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzeFxyXG4gKiA8UGhvbmVOdW1iZXJFbGVtZW50XHJcbiAqICAgbmFtZT1cInBob25lXCJcclxuICogICBjb250cm9sPXtjb250cm9sfVxyXG4gKiAgIGxhYmVsPVwiUGhvbmUgTnVtYmVyXCJcclxuICogICBkZWZhdWx0Q291bnRyeT1cIlVTXCJcclxuICogICBwcmVmZXJyZWRDb3VudHJpZXM9e1snVVMnLCAnR0InLCAnQ0EnXX1cclxuICogICByZXF1aXJlZFxyXG4gKiAvPlxyXG4gKiBgYGBcclxuICpcclxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXHJcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBQaG9uZU51bWJlckVsZW1lbnQgPSA8XHJcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcclxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXHJcbj4oe1xyXG4gIGdyaWRQcm9wcyA9IHt9LFxyXG4gIC4uLnByb3BzXHJcbn06IFBob25lTnVtYmVyRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cclxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XHJcbiAgICA8L0dyaWQ+XHJcbiAgKTtcclxufTtcclxuIiwgImltcG9ydCB0eXBlIHsgTW91c2VFdmVudCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIFBvcG92ZXIsXHJcbiAgVGV4dEZpZWxkLFxyXG4gIERpdmlkZXIsXHJcbiAgQm94LFxyXG4gIElucHV0QWRvcm5tZW50LFxyXG4gIFR5cG9ncmFwaHksXHJcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCBBcnJvd0Ryb3BEb3duSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0Fycm93RHJvcERvd24nO1xyXG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1NlYXJjaCc7XHJcbmltcG9ydCB0eXBlIHsgQ291bnRyeURhdGEgfSBmcm9tICcuL2NvdW50cmllcyc7XHJcbmltcG9ydCB7IENPVU5UUklFUyB9IGZyb20gJy4vY291bnRyaWVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRyeVNlbGVjdG9yUHJvcHMge1xyXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgY291bnRyeSAqL1xyXG4gIHZhbHVlOiBDb3VudHJ5RGF0YTtcclxuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBwaWNrcyBhIGNvdW50cnkgKi9cclxuICBvbkNoYW5nZTogKGNvdW50cnk6IENvdW50cnlEYXRhKSA9PiB2b2lkO1xyXG4gIC8qKiBJU08gY29kZXMgdG8gc2hvdyBmaXJzdCBpbiB0aGUgbGlzdCAoZS5nLiBbJ1VTJywgJ0dCJywgJ0NBJ10pICovXHJcbiAgcHJlZmVycmVkQ291bnRyaWVzPzogc3RyaW5nW107XHJcbiAgLyoqIFJlc3RyaWN0IHRvIG9ubHkgdGhlc2UgSVNPIGNvZGVzICovXHJcbiAgb25seUNvdW50cmllcz86IHN0cmluZ1tdO1xyXG4gIC8qKiBFeGNsdWRlIHRoZXNlIElTTyBjb2RlcyAqL1xyXG4gIGV4Y2x1ZGVDb3VudHJpZXM/OiBzdHJpbmdbXTtcclxuICAvKiogRGlzYWJsZSB0aGUgc2VsZWN0b3IgKi9cclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZW5kZXJzIGEgc2luZ2xlIGNvdW50cnkgcm93IGFzIGEgcGxhaW4gPGJ1dHRvbj4gKG5vIE1VSSBwZXItaXRlbSBvdmVyaGVhZCkuXHJcbiAqIFN0eWxpbmcgaXMgZHJpdmVuIGJ5IHRoZSBwYXJlbnQgQm94IHN4IGNhc2NhZGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBDb3VudHJ5Um93KHtcclxuICBjb3VudHJ5LFxyXG4gIHNlbGVjdGVkLFxyXG4gIG9uU2VsZWN0LFxyXG59OiB7XHJcbiAgY291bnRyeTogQ291bnRyeURhdGE7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgb25TZWxlY3Q6ICgpID0+IHZvaWQ7XHJcbn0pIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzZWxlY3RlZCA/ICdzZWxlY3RlZCcgOiB1bmRlZmluZWR9IG9uQ2xpY2s9e29uU2VsZWN0fT5cclxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmxhZ1wiPntjb3VudHJ5LmZsYWd9PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJuYW1lXCI+e2NvdW50cnkubmFtZX08L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImRpYWxcIj57Y291bnRyeS5kaWFsQ29kZX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ291bnRyeSBjb2RlIHNlbGVjdG9yIHdpdGggc2VhcmNoYWJsZSBwb3BvdmVyLlxyXG4gKiBSZW5kZXJzIGFzIGEgY29tcGFjdCBidXR0b24gc2hvd2luZyBmbGFnICsgZGlhbCBjb2RlICsgZHJvcGRvd24gYXJyb3cuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ291bnRyeVNlbGVjdG9yKHtcclxuICB2YWx1ZSxcclxuICBvbkNoYW5nZSxcclxuICBwcmVmZXJyZWRDb3VudHJpZXMgPSBbXSxcclxuICBvbmx5Q291bnRyaWVzLFxyXG4gIGV4Y2x1ZGVDb3VudHJpZXMsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxufTogQ291bnRyeVNlbGVjdG9yUHJvcHMpIHtcclxuICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IHVzZVN0YXRlPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgY29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKTtcclxuXHJcbiAgY29uc3Qgb3BlbiA9IEJvb2xlYW4oYW5jaG9yRWwpO1xyXG5cclxuICBjb25zdCBoYW5kbGVPcGVuID0gKGU6IE1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBzZXRBbmNob3JFbChlLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgc2V0U2VhcmNoKCcnKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcclxuICAgIHNldEFuY2hvckVsKG51bGwpO1xyXG4gICAgc2V0U2VhcmNoKCcnKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoY291bnRyeTogQ291bnRyeURhdGEpID0+IHtcclxuICAgIG9uQ2hhbmdlKGNvdW50cnkpO1xyXG4gICAgaGFuZGxlQ2xvc2UoKTtcclxuICB9O1xyXG5cclxuICAvLyBCdWlsZCBmaWx0ZXJlZCArIHNvcnRlZCBsaXN0XHJcbiAgY29uc3QgeyBwcmVmZXJyZWQsIHJlc3QgfSA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgbGV0IGxpc3QgPSBDT1VOVFJJRVM7XHJcblxyXG4gICAgaWYgKG9ubHlDb3VudHJpZXMgJiYgb25seUNvdW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQob25seUNvdW50cmllcy5tYXAoKGMpID0+IGMudG9VcHBlckNhc2UoKSkpO1xyXG4gICAgICBsaXN0ID0gbGlzdC5maWx0ZXIoKGMpID0+IHNldC5oYXMoYy5jb2RlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4Y2x1ZGVDb3VudHJpZXMgJiYgZXhjbHVkZUNvdW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoZXhjbHVkZUNvdW50cmllcy5tYXAoKGMpID0+IGMudG9VcHBlckNhc2UoKSkpO1xyXG4gICAgICBsaXN0ID0gbGlzdC5maWx0ZXIoKGMpID0+ICFzZXQuaGFzKGMuY29kZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlYXJjaExvd2VyID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoc2VhcmNoTG93ZXIpIHtcclxuICAgICAgbGlzdCA9IGxpc3QuZmlsdGVyKFxyXG4gICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgYy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpIHx8XHJcbiAgICAgICAgICBjLmRpYWxDb2RlLmluY2x1ZGVzKHNlYXJjaExvd2VyKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZWZlcnJlZFNldCA9IG5ldyBTZXQocHJlZmVycmVkQ291bnRyaWVzLm1hcCgoYykgPT4gYy50b1VwcGVyQ2FzZSgpKSk7XHJcbiAgICBjb25zdCBwcmVmZXJyZWRMaXN0ID0gcHJlZmVycmVkQ291bnRyaWVzXHJcbiAgICAgIC5tYXAoKGNvZGUpID0+IGxpc3QuZmluZCgoYykgPT4gYy5jb2RlID09PSBjb2RlLnRvVXBwZXJDYXNlKCkpKVxyXG4gICAgICAuZmlsdGVyKChjKTogYyBpcyBDb3VudHJ5RGF0YSA9PiBjICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIGNvbnN0IHJlc3RMaXN0ID0gbGlzdC5maWx0ZXIoKGMpID0+ICFwcmVmZXJyZWRTZXQuaGFzKGMuY29kZSkpO1xyXG5cclxuICAgIHJldHVybiB7IHByZWZlcnJlZDogcHJlZmVycmVkTGlzdCwgcmVzdDogcmVzdExpc3QgfTtcclxuICB9LCBbc2VhcmNoLCBvbmx5Q291bnRyaWVzLCBleGNsdWRlQ291bnRyaWVzLCBwcmVmZXJyZWRDb3VudHJpZXNdKTtcclxuXHJcbiAgY29uc3Qgc2hvd0RpdmlkZXIgPSBwcmVmZXJyZWQubGVuZ3RoID4gMCAmJiByZXN0Lmxlbmd0aCA+IDA7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8PlxyXG4gICAgICA8QnV0dG9uXHJcbiAgICAgICAgdmFyaWFudD1cInRleHRcIlxyXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgb25DbGljaz17aGFuZGxlT3Blbn1cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgZGlzYWJsZUVsZXZhdGlvblxyXG4gICAgICAgIGVuZEljb249ezxBcnJvd0Ryb3BEb3duSWNvbiAvPn1cclxuICAgICAgICBzeD17e1xyXG4gICAgICAgICAgbWluV2lkdGg6IDAsXHJcbiAgICAgICAgICBweDogMSxcclxuICAgICAgICAgIHB5OiAwLFxyXG4gICAgICAgICAgY29sb3I6ICd0ZXh0LnByaW1hcnknLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAnbm9uZScsXHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcclxuICAgICAgICAgICcmOmhvdmVyJzogeyBiYWNrZ3JvdW5kQ29sb3I6ICdhY3Rpb24uaG92ZXInIH0sXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzeD17eyBtcjogMC41IH19PlxyXG4gICAgICAgICAge3ZhbHVlLmZsYWd9XHJcbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiB2YXJpYW50PVwiYm9keTJcIj5cclxuICAgICAgICAgIHt2YWx1ZS5kaWFsQ29kZX1cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgPFBvcG92ZXJcclxuICAgICAgICBvcGVuPXtvcGVufVxyXG4gICAgICAgIGFuY2hvckVsPXthbmNob3JFbH1cclxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICBhbmNob3JPcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cclxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cclxuICAgICAgICBzbG90UHJvcHM9e3tcclxuICAgICAgICAgIHBhcGVyOiB7IHN4OiB7IHdpZHRoOiAzMDAsIG1heEhlaWdodDogNDAwLCBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH0gfSxcclxuICAgICAgICB9fVxyXG4gICAgICA+XHJcbiAgICAgICAgPEJveCBzeD17eyBwOiAxLCBib3JkZXJCb3R0b206IDEsIGJvcmRlckNvbG9yOiAnZGl2aWRlcicgfX0+XHJcbiAgICAgICAgICA8VGV4dEZpZWxkXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1c1xyXG4gICAgICAgICAgICBmdWxsV2lkdGhcclxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY291bnRyeSBvciBjb2RlXHUyMDI2XCJcclxuICAgICAgICAgICAgdmFsdWU9e3NlYXJjaH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICBzbG90UHJvcHM9e3tcclxuICAgICAgICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRBZG9ybm1lbnQ6IChcclxuICAgICAgICAgICAgICAgICAgPElucHV0QWRvcm5tZW50IHBvc2l0aW9uPVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8U2VhcmNoSWNvbiBmb250U2l6ZT1cInNtYWxsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9JbnB1dEFkb3JubWVudD5cclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9Cb3g+XHJcblxyXG4gICAgICAgIHsvKlxyXG4gICAgICAgICAgUGxhaW4gPGJ1dHRvbj4gZWxlbWVudHMgaW5zdGVhZCBvZiBMaXN0SXRlbUJ1dHRvbitMaXN0SXRlbVRleHQrQm94K1R5cG9ncmFwaHkuXHJcbiAgICAgICAgICB+NCBET00gbm9kZXMgcGVyIGl0ZW0gdnMgfjEyIHByZXZpb3VzbHkgXHUyMDE0IDN4IGZld2VyIG5vZGVzIGZvciAyNDIgY291bnRyaWVzLlxyXG4gICAgICAgICAgU3R5bGluZyBpcyBoYW5kbGVkIGJ5IHRoZSBCb3ggc3ggY2FzY2FkZSB0byBhdm9pZCBwZXItaXRlbSBNVUkgb3ZlcmhlYWQuXHJcbiAgICAgICAgKi99XHJcbiAgICAgICAgPEJveFxyXG4gICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgIGZsZXg6IDEsXHJcbiAgICAgICAgICAgICcmIGJ1dHRvbic6IHtcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZ2FwOiAxLFxyXG4gICAgICAgICAgICAgIHB4OiAyLFxyXG4gICAgICAgICAgICAgIHB5OiAnNnB4JyxcclxuICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjg3NXJlbScsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnaW5oZXJpdCcsXHJcbiAgICAgICAgICAgICAgJyY6aG92ZXInOiB7IGJhY2tncm91bmRDb2xvcjogJ2FjdGlvbi5ob3ZlcicgfSxcclxuICAgICAgICAgICAgICAnJi5zZWxlY3RlZCc6IHsgYmFja2dyb3VuZENvbG9yOiAnYWN0aW9uLnNlbGVjdGVkJyB9LFxyXG4gICAgICAgICAgICAgICcmIC5mbGFnJzogeyBmb250U2l6ZTogJzEuMXJlbScsIGxpbmVIZWlnaHQ6IDEsIGZsZXhTaHJpbms6IDAgfSxcclxuICAgICAgICAgICAgICAnJiAubmFtZSc6IHsgZmxleDogMSwgb3ZlcmZsb3c6ICdoaWRkZW4nLCB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsIHdoaXRlU3BhY2U6ICdub3dyYXAnIH0sXHJcbiAgICAgICAgICAgICAgJyYgLmRpYWwnOiB7IGZvbnRTaXplOiAnMC43NXJlbScsIGNvbG9yOiAndGV4dC5zZWNvbmRhcnknLCBmbGV4U2hyaW5rOiAwIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtwcmVmZXJyZWQubWFwKChjb3VudHJ5KSA9PiAoXHJcbiAgICAgICAgICAgIDxDb3VudHJ5Um93XHJcbiAgICAgICAgICAgICAga2V5PXtgcHJlZmVycmVkLSR7Y291bnRyeS5jb2RlfWB9XHJcbiAgICAgICAgICAgICAgY291bnRyeT17Y291bnRyeX1cclxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y291bnRyeS5jb2RlID09PSB2YWx1ZS5jb2RlfVxyXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBoYW5kbGVTZWxlY3QoY291bnRyeSl9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApKX1cclxuXHJcbiAgICAgICAgICB7c2hvd0RpdmlkZXIgJiYgPERpdmlkZXIgLz59XHJcblxyXG4gICAgICAgICAge3Jlc3QubWFwKChjb3VudHJ5KSA9PiAoXHJcbiAgICAgICAgICAgIDxDb3VudHJ5Um93XHJcbiAgICAgICAgICAgICAga2V5PXtjb3VudHJ5LmNvZGV9XHJcbiAgICAgICAgICAgICAgY291bnRyeT17Y291bnRyeX1cclxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y291bnRyeS5jb2RlID09PSB2YWx1ZS5jb2RlfVxyXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBoYW5kbGVTZWxlY3QoY291bnRyeSl9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApKX1cclxuXHJcbiAgICAgICAgICB7cHJlZmVycmVkLmxlbmd0aCA9PT0gMCAmJiByZXN0Lmxlbmd0aCA9PT0gMCAmJiAoXHJcbiAgICAgICAgICAgIDxCb3ggc3g9e3sgcHg6IDIsIHB5OiAxLCBmb250U2l6ZTogJzAuODc1cmVtJywgY29sb3I6ICd0ZXh0LnNlY29uZGFyeScgfX0+XHJcbiAgICAgICAgICAgICAgTm8gY291bnRyaWVzIGZvdW5kXHJcbiAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L0JveD5cclxuICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBDb3VudHJ5RGF0YSB7XHJcbiAgY29kZTogc3RyaW5nOyAgICAgLy8gSVNPIDMxNjYtMSBhbHBoYS0yLCBlLmcuICdVUydcclxuICBkaWFsQ29kZTogc3RyaW5nOyAvLyBFLjE2NCBwcmVmaXgsIGUuZy4gJysxJ1xyXG4gIG5hbWU6IHN0cmluZzsgICAgIC8vIERpc3BsYXkgbmFtZSwgZS5nLiAnVW5pdGVkIFN0YXRlcydcclxuICBmbGFnOiBzdHJpbmc7ICAgICAvLyBGbGFnIGVtb2ppLCBlLmcuICdcdUQ4M0NcdURERkFcdUQ4M0NcdURERjgnXHJcbn1cclxuXHJcbi8qKiBHZW5lcmF0ZXMgYSBVbmljb2RlIGZsYWcgZW1vamkgZnJvbSBhIDItbGV0dGVyIElTTyBjb3VudHJ5IGNvZGUuICovXHJcbmZ1bmN0aW9uIGdldEZsYWcoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gY29kZVxyXG4gICAgLnRvVXBwZXJDYXNlKClcclxuICAgIC5zcGxpdCgnJylcclxuICAgIC5tYXAoKGMpID0+IFN0cmluZy5mcm9tQ29kZVBvaW50KGMuY2hhckNvZGVBdCgwKSAtIDY1ICsgMHgxZjFlNikpXHJcbiAgICAuam9pbignJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSYXcgY291bnRyeSBkYXRhOiBbSVNPIGNvZGUsIGRpYWwgY29kZSwgZGlzcGxheSBuYW1lXVxyXG4gKiBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgbmFtZSAofjI0MCBlbnRyaWVzKS5cclxuICovXHJcbmNvbnN0IFJBVzogQXJyYXk8W3N0cmluZywgc3RyaW5nLCBzdHJpbmddPiA9IFtcclxuICBbJ0FGJywgJys5MycsICdBZmdoYW5pc3RhbiddLFxyXG4gIFsnQUwnLCAnKzM1NScsICdBbGJhbmlhJ10sXHJcbiAgWydEWicsICcrMjEzJywgJ0FsZ2VyaWEnXSxcclxuICBbJ0FEJywgJyszNzYnLCAnQW5kb3JyYSddLFxyXG4gIFsnQU8nLCAnKzI0NCcsICdBbmdvbGEnXSxcclxuICBbJ0FJJywgJysxMjY0JywgJ0FuZ3VpbGxhJ10sXHJcbiAgWydBRycsICcrMTI2OCcsICdBbnRpZ3VhIGFuZCBCYXJidWRhJ10sXHJcbiAgWydBUicsICcrNTQnLCAnQXJnZW50aW5hJ10sXHJcbiAgWydBTScsICcrMzc0JywgJ0FybWVuaWEnXSxcclxuICBbJ0FXJywgJysyOTcnLCAnQXJ1YmEnXSxcclxuICBbJ0FVJywgJys2MScsICdBdXN0cmFsaWEnXSxcclxuICBbJ0FUJywgJys0MycsICdBdXN0cmlhJ10sXHJcbiAgWydBWicsICcrOTk0JywgJ0F6ZXJiYWlqYW4nXSxcclxuICBbJ0JTJywgJysxMjQyJywgJ0JhaGFtYXMnXSxcclxuICBbJ0JIJywgJys5NzMnLCAnQmFocmFpbiddLFxyXG4gIFsnQkQnLCAnKzg4MCcsICdCYW5nbGFkZXNoJ10sXHJcbiAgWydCQicsICcrMTI0NicsICdCYXJiYWRvcyddLFxyXG4gIFsnQlknLCAnKzM3NScsICdCZWxhcnVzJ10sXHJcbiAgWydCRScsICcrMzInLCAnQmVsZ2l1bSddLFxyXG4gIFsnQlonLCAnKzUwMScsICdCZWxpemUnXSxcclxuICBbJ0JKJywgJysyMjknLCAnQmVuaW4nXSxcclxuICBbJ0JNJywgJysxNDQxJywgJ0Jlcm11ZGEnXSxcclxuICBbJ0JUJywgJys5NzUnLCAnQmh1dGFuJ10sXHJcbiAgWydCTycsICcrNTkxJywgJ0JvbGl2aWEnXSxcclxuICBbJ0JBJywgJyszODcnLCAnQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSddLFxyXG4gIFsnQlcnLCAnKzI2NycsICdCb3Rzd2FuYSddLFxyXG4gIFsnQlInLCAnKzU1JywgJ0JyYXppbCddLFxyXG4gIFsnVkcnLCAnKzEyODQnLCAnQnJpdGlzaCBWaXJnaW4gSXNsYW5kcyddLFxyXG4gIFsnQk4nLCAnKzY3MycsICdCcnVuZWknXSxcclxuICBbJ0JHJywgJyszNTknLCAnQnVsZ2FyaWEnXSxcclxuICBbJ0JGJywgJysyMjYnLCAnQnVya2luYSBGYXNvJ10sXHJcbiAgWydCSScsICcrMjU3JywgJ0J1cnVuZGknXSxcclxuICBbJ0NWJywgJysyMzgnLCAnQ2FibyBWZXJkZSddLFxyXG4gIFsnS0gnLCAnKzg1NScsICdDYW1ib2RpYSddLFxyXG4gIFsnQ00nLCAnKzIzNycsICdDYW1lcm9vbiddLFxyXG4gIFsnQ0EnLCAnKzEnLCAnQ2FuYWRhJ10sXHJcbiAgWydLWScsICcrMTM0NScsICdDYXltYW4gSXNsYW5kcyddLFxyXG4gIFsnQ0YnLCAnKzIzNicsICdDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMnXSxcclxuICBbJ1REJywgJysyMzUnLCAnQ2hhZCddLFxyXG4gIFsnQ0wnLCAnKzU2JywgJ0NoaWxlJ10sXHJcbiAgWydDTicsICcrODYnLCAnQ2hpbmEnXSxcclxuICBbJ0NYJywgJys2MScsICdDaHJpc3RtYXMgSXNsYW5kJ10sXHJcbiAgWydDQycsICcrNjEnLCAnQ29jb3MgSXNsYW5kcyddLFxyXG4gIFsnQ08nLCAnKzU3JywgJ0NvbG9tYmlhJ10sXHJcbiAgWydLTScsICcrMjY5JywgJ0NvbW9yb3MnXSxcclxuICBbJ0NHJywgJysyNDInLCAnQ29uZ28gKFJlcHVibGljKSddLFxyXG4gIFsnQ0QnLCAnKzI0MycsICdDb25nbyAoRGVtb2NyYXRpYyBSZXB1YmxpYyknXSxcclxuICBbJ0NLJywgJys2ODInLCAnQ29vayBJc2xhbmRzJ10sXHJcbiAgWydDUicsICcrNTA2JywgJ0Nvc3RhIFJpY2EnXSxcclxuICBbJ0hSJywgJyszODUnLCAnQ3JvYXRpYSddLFxyXG4gIFsnQ1UnLCAnKzUzJywgJ0N1YmEnXSxcclxuICBbJ0NXJywgJys1OTknLCAnQ3VyYVx1MDBFN2FvJ10sXHJcbiAgWydDWScsICcrMzU3JywgJ0N5cHJ1cyddLFxyXG4gIFsnQ1onLCAnKzQyMCcsICdDemVjaCBSZXB1YmxpYyddLFxyXG4gIFsnREsnLCAnKzQ1JywgJ0Rlbm1hcmsnXSxcclxuICBbJ0RKJywgJysyNTMnLCAnRGppYm91dGknXSxcclxuICBbJ0RNJywgJysxNzY3JywgJ0RvbWluaWNhJ10sXHJcbiAgWydETycsICcrMTgwOScsICdEb21pbmljYW4gUmVwdWJsaWMnXSxcclxuICBbJ0VDJywgJys1OTMnLCAnRWN1YWRvciddLFxyXG4gIFsnRUcnLCAnKzIwJywgJ0VneXB0J10sXHJcbiAgWydTVicsICcrNTAzJywgJ0VsIFNhbHZhZG9yJ10sXHJcbiAgWydHUScsICcrMjQwJywgJ0VxdWF0b3JpYWwgR3VpbmVhJ10sXHJcbiAgWydFUicsICcrMjkxJywgJ0VyaXRyZWEnXSxcclxuICBbJ0VFJywgJyszNzInLCAnRXN0b25pYSddLFxyXG4gIFsnU1onLCAnKzI2OCcsICdFc3dhdGluaSddLFxyXG4gIFsnRVQnLCAnKzI1MScsICdFdGhpb3BpYSddLFxyXG4gIFsnRksnLCAnKzUwMCcsICdGYWxrbGFuZCBJc2xhbmRzJ10sXHJcbiAgWydGTycsICcrMjk4JywgJ0Zhcm9lIElzbGFuZHMnXSxcclxuICBbJ0ZKJywgJys2NzknLCAnRmlqaSddLFxyXG4gIFsnRkknLCAnKzM1OCcsICdGaW5sYW5kJ10sXHJcbiAgWydGUicsICcrMzMnLCAnRnJhbmNlJ10sXHJcbiAgWydHRicsICcrNTk0JywgJ0ZyZW5jaCBHdWlhbmEnXSxcclxuICBbJ1BGJywgJys2ODknLCAnRnJlbmNoIFBvbHluZXNpYSddLFxyXG4gIFsnR0EnLCAnKzI0MScsICdHYWJvbiddLFxyXG4gIFsnR00nLCAnKzIyMCcsICdHYW1iaWEnXSxcclxuICBbJ0dFJywgJys5OTUnLCAnR2VvcmdpYSddLFxyXG4gIFsnREUnLCAnKzQ5JywgJ0dlcm1hbnknXSxcclxuICBbJ0dIJywgJysyMzMnLCAnR2hhbmEnXSxcclxuICBbJ0dJJywgJyszNTAnLCAnR2licmFsdGFyJ10sXHJcbiAgWydHUicsICcrMzAnLCAnR3JlZWNlJ10sXHJcbiAgWydHTCcsICcrMjk5JywgJ0dyZWVubGFuZCddLFxyXG4gIFsnR0QnLCAnKzE0NzMnLCAnR3JlbmFkYSddLFxyXG4gIFsnR1AnLCAnKzU5MCcsICdHdWFkZWxvdXBlJ10sXHJcbiAgWydHVScsICcrMTY3MScsICdHdWFtJ10sXHJcbiAgWydHVCcsICcrNTAyJywgJ0d1YXRlbWFsYSddLFxyXG4gIFsnR0cnLCAnKzQ0JywgJ0d1ZXJuc2V5J10sXHJcbiAgWydHTicsICcrMjI0JywgJ0d1aW5lYSddLFxyXG4gIFsnR1cnLCAnKzI0NScsICdHdWluZWEtQmlzc2F1J10sXHJcbiAgWydHWScsICcrNTkyJywgJ0d1eWFuYSddLFxyXG4gIFsnSFQnLCAnKzUwOScsICdIYWl0aSddLFxyXG4gIFsnSE4nLCAnKzUwNCcsICdIb25kdXJhcyddLFxyXG4gIFsnSEsnLCAnKzg1MicsICdIb25nIEtvbmcnXSxcclxuICBbJ0hVJywgJyszNicsICdIdW5nYXJ5J10sXHJcbiAgWydJUycsICcrMzU0JywgJ0ljZWxhbmQnXSxcclxuICBbJ0lOJywgJys5MScsICdJbmRpYSddLFxyXG4gIFsnSUQnLCAnKzYyJywgJ0luZG9uZXNpYSddLFxyXG4gIFsnSVInLCAnKzk4JywgJ0lyYW4nXSxcclxuICBbJ0lRJywgJys5NjQnLCAnSXJhcSddLFxyXG4gIFsnSUUnLCAnKzM1MycsICdJcmVsYW5kJ10sXHJcbiAgWydJTScsICcrNDQnLCAnSXNsZSBvZiBNYW4nXSxcclxuICBbJ0lMJywgJys5NzInLCAnSXNyYWVsJ10sXHJcbiAgWydJVCcsICcrMzknLCAnSXRhbHknXSxcclxuICBbJ0pNJywgJysxODc2JywgJ0phbWFpY2EnXSxcclxuICBbJ0pQJywgJys4MScsICdKYXBhbiddLFxyXG4gIFsnSkUnLCAnKzQ0JywgJ0plcnNleSddLFxyXG4gIFsnSk8nLCAnKzk2MicsICdKb3JkYW4nXSxcclxuICBbJ0taJywgJys3JywgJ0themFraHN0YW4nXSxcclxuICBbJ0tFJywgJysyNTQnLCAnS2VueWEnXSxcclxuICBbJ0tJJywgJys2ODYnLCAnS2lyaWJhdGknXSxcclxuICBbJ1hLJywgJyszODMnLCAnS29zb3ZvJ10sXHJcbiAgWydLVycsICcrOTY1JywgJ0t1d2FpdCddLFxyXG4gIFsnS0cnLCAnKzk5NicsICdLeXJneXpzdGFuJ10sXHJcbiAgWydMQScsICcrODU2JywgJ0xhb3MnXSxcclxuICBbJ0xWJywgJyszNzEnLCAnTGF0dmlhJ10sXHJcbiAgWydMQicsICcrOTYxJywgJ0xlYmFub24nXSxcclxuICBbJ0xTJywgJysyNjYnLCAnTGVzb3RobyddLFxyXG4gIFsnTFInLCAnKzIzMScsICdMaWJlcmlhJ10sXHJcbiAgWydMWScsICcrMjE4JywgJ0xpYnlhJ10sXHJcbiAgWydMSScsICcrNDIzJywgJ0xpZWNodGVuc3RlaW4nXSxcclxuICBbJ0xUJywgJyszNzAnLCAnTGl0aHVhbmlhJ10sXHJcbiAgWydMVScsICcrMzUyJywgJ0x1eGVtYm91cmcnXSxcclxuICBbJ01PJywgJys4NTMnLCAnTWFjYW8nXSxcclxuICBbJ01HJywgJysyNjEnLCAnTWFkYWdhc2NhciddLFxyXG4gIFsnTVcnLCAnKzI2NScsICdNYWxhd2knXSxcclxuICBbJ01ZJywgJys2MCcsICdNYWxheXNpYSddLFxyXG4gIFsnTVYnLCAnKzk2MCcsICdNYWxkaXZlcyddLFxyXG4gIFsnTUwnLCAnKzIyMycsICdNYWxpJ10sXHJcbiAgWydNVCcsICcrMzU2JywgJ01hbHRhJ10sXHJcbiAgWydNSCcsICcrNjkyJywgJ01hcnNoYWxsIElzbGFuZHMnXSxcclxuICBbJ01RJywgJys1OTYnLCAnTWFydGluaXF1ZSddLFxyXG4gIFsnTVInLCAnKzIyMicsICdNYXVyaXRhbmlhJ10sXHJcbiAgWydNVScsICcrMjMwJywgJ01hdXJpdGl1cyddLFxyXG4gIFsnWVQnLCAnKzI2MicsICdNYXlvdHRlJ10sXHJcbiAgWydNWCcsICcrNTInLCAnTWV4aWNvJ10sXHJcbiAgWydGTScsICcrNjkxJywgJ01pY3JvbmVzaWEnXSxcclxuICBbJ01EJywgJyszNzMnLCAnTW9sZG92YSddLFxyXG4gIFsnTUMnLCAnKzM3NycsICdNb25hY28nXSxcclxuICBbJ01OJywgJys5NzYnLCAnTW9uZ29saWEnXSxcclxuICBbJ01FJywgJyszODInLCAnTW9udGVuZWdybyddLFxyXG4gIFsnTVMnLCAnKzE2NjQnLCAnTW9udHNlcnJhdCddLFxyXG4gIFsnTUEnLCAnKzIxMicsICdNb3JvY2NvJ10sXHJcbiAgWydNWicsICcrMjU4JywgJ01vemFtYmlxdWUnXSxcclxuICBbJ01NJywgJys5NScsICdNeWFubWFyJ10sXHJcbiAgWydOQScsICcrMjY0JywgJ05hbWliaWEnXSxcclxuICBbJ05SJywgJys2NzQnLCAnTmF1cnUnXSxcclxuICBbJ05QJywgJys5NzcnLCAnTmVwYWwnXSxcclxuICBbJ05MJywgJyszMScsICdOZXRoZXJsYW5kcyddLFxyXG4gIFsnTkMnLCAnKzY4NycsICdOZXcgQ2FsZWRvbmlhJ10sXHJcbiAgWydOWicsICcrNjQnLCAnTmV3IFplYWxhbmQnXSxcclxuICBbJ05JJywgJys1MDUnLCAnTmljYXJhZ3VhJ10sXHJcbiAgWydORScsICcrMjI3JywgJ05pZ2VyJ10sXHJcbiAgWydORycsICcrMjM0JywgJ05pZ2VyaWEnXSxcclxuICBbJ05VJywgJys2ODMnLCAnTml1ZSddLFxyXG4gIFsnTkYnLCAnKzY3MicsICdOb3Jmb2xrIElzbGFuZCddLFxyXG4gIFsnS1AnLCAnKzg1MCcsICdOb3J0aCBLb3JlYSddLFxyXG4gIFsnTUsnLCAnKzM4OScsICdOb3J0aCBNYWNlZG9uaWEnXSxcclxuICBbJ01QJywgJysxNjcwJywgJ05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyddLFxyXG4gIFsnTk8nLCAnKzQ3JywgJ05vcndheSddLFxyXG4gIFsnT00nLCAnKzk2OCcsICdPbWFuJ10sXHJcbiAgWydQSycsICcrOTInLCAnUGFraXN0YW4nXSxcclxuICBbJ1BXJywgJys2ODAnLCAnUGFsYXUnXSxcclxuICBbJ1BTJywgJys5NzAnLCAnUGFsZXN0aW5lJ10sXHJcbiAgWydQQScsICcrNTA3JywgJ1BhbmFtYSddLFxyXG4gIFsnUEcnLCAnKzY3NScsICdQYXB1YSBOZXcgR3VpbmVhJ10sXHJcbiAgWydQWScsICcrNTk1JywgJ1BhcmFndWF5J10sXHJcbiAgWydQRScsICcrNTEnLCAnUGVydSddLFxyXG4gIFsnUEgnLCAnKzYzJywgJ1BoaWxpcHBpbmVzJ10sXHJcbiAgWydQTCcsICcrNDgnLCAnUG9sYW5kJ10sXHJcbiAgWydQVCcsICcrMzUxJywgJ1BvcnR1Z2FsJ10sXHJcbiAgWydQUicsICcrMTc4NycsICdQdWVydG8gUmljbyddLFxyXG4gIFsnUUEnLCAnKzk3NCcsICdRYXRhciddLFxyXG4gIFsnUkUnLCAnKzI2MicsICdSXHUwMEU5dW5pb24nXSxcclxuICBbJ1JPJywgJys0MCcsICdSb21hbmlhJ10sXHJcbiAgWydSVScsICcrNycsICdSdXNzaWEnXSxcclxuICBbJ1JXJywgJysyNTAnLCAnUndhbmRhJ10sXHJcbiAgWydCTCcsICcrNTkwJywgJ1NhaW50IEJhcnRoXHUwMEU5bGVteSddLFxyXG4gIFsnU0gnLCAnKzI5MCcsICdTYWludCBIZWxlbmEnXSxcclxuICBbJ0tOJywgJysxODY5JywgJ1NhaW50IEtpdHRzIGFuZCBOZXZpcyddLFxyXG4gIFsnTEMnLCAnKzE3NTgnLCAnU2FpbnQgTHVjaWEnXSxcclxuICBbJ01GJywgJys1OTAnLCAnU2FpbnQgTWFydGluJ10sXHJcbiAgWydQTScsICcrNTA4JywgJ1NhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24nXSxcclxuICBbJ1ZDJywgJysxNzg0JywgJ1NhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzJ10sXHJcbiAgWydXUycsICcrNjg1JywgJ1NhbW9hJ10sXHJcbiAgWydTTScsICcrMzc4JywgJ1NhbiBNYXJpbm8nXSxcclxuICBbJ1NUJywgJysyMzknLCAnU2FvIFRvbWUgYW5kIFByaW5jaXBlJ10sXHJcbiAgWydTQScsICcrOTY2JywgJ1NhdWRpIEFyYWJpYSddLFxyXG4gIFsnU04nLCAnKzIyMScsICdTZW5lZ2FsJ10sXHJcbiAgWydSUycsICcrMzgxJywgJ1NlcmJpYSddLFxyXG4gIFsnU0MnLCAnKzI0OCcsICdTZXljaGVsbGVzJ10sXHJcbiAgWydTTCcsICcrMjMyJywgJ1NpZXJyYSBMZW9uZSddLFxyXG4gIFsnU0cnLCAnKzY1JywgJ1NpbmdhcG9yZSddLFxyXG4gIFsnU1gnLCAnKzE3MjEnLCAnU2ludCBNYWFydGVuJ10sXHJcbiAgWydTSycsICcrNDIxJywgJ1Nsb3Zha2lhJ10sXHJcbiAgWydTSScsICcrMzg2JywgJ1Nsb3ZlbmlhJ10sXHJcbiAgWydTQicsICcrNjc3JywgJ1NvbG9tb24gSXNsYW5kcyddLFxyXG4gIFsnU08nLCAnKzI1MicsICdTb21hbGlhJ10sXHJcbiAgWydaQScsICcrMjcnLCAnU291dGggQWZyaWNhJ10sXHJcbiAgWydLUicsICcrODInLCAnU291dGggS29yZWEnXSxcclxuICBbJ1NTJywgJysyMTEnLCAnU291dGggU3VkYW4nXSxcclxuICBbJ0VTJywgJyszNCcsICdTcGFpbiddLFxyXG4gIFsnTEsnLCAnKzk0JywgJ1NyaSBMYW5rYSddLFxyXG4gIFsnU0QnLCAnKzI0OScsICdTdWRhbiddLFxyXG4gIFsnU1InLCAnKzU5NycsICdTdXJpbmFtZSddLFxyXG4gIFsnU0UnLCAnKzQ2JywgJ1N3ZWRlbiddLFxyXG4gIFsnQ0gnLCAnKzQxJywgJ1N3aXR6ZXJsYW5kJ10sXHJcbiAgWydTWScsICcrOTYzJywgJ1N5cmlhJ10sXHJcbiAgWydUVycsICcrODg2JywgJ1RhaXdhbiddLFxyXG4gIFsnVEonLCAnKzk5MicsICdUYWppa2lzdGFuJ10sXHJcbiAgWydUWicsICcrMjU1JywgJ1RhbnphbmlhJ10sXHJcbiAgWydUSCcsICcrNjYnLCAnVGhhaWxhbmQnXSxcclxuICBbJ1RMJywgJys2NzAnLCAnVGltb3ItTGVzdGUnXSxcclxuICBbJ1RHJywgJysyMjgnLCAnVG9nbyddLFxyXG4gIFsnVEsnLCAnKzY5MCcsICdUb2tlbGF1J10sXHJcbiAgWydUTycsICcrNjc2JywgJ1RvbmdhJ10sXHJcbiAgWydUVCcsICcrMTg2OCcsICdUcmluaWRhZCBhbmQgVG9iYWdvJ10sXHJcbiAgWydUTicsICcrMjE2JywgJ1R1bmlzaWEnXSxcclxuICBbJ1RSJywgJys5MCcsICdUdXJrZXknXSxcclxuICBbJ1RNJywgJys5OTMnLCAnVHVya21lbmlzdGFuJ10sXHJcbiAgWydUQycsICcrMTY0OScsICdUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMnXSxcclxuICBbJ1RWJywgJys2ODgnLCAnVHV2YWx1J10sXHJcbiAgWydVRycsICcrMjU2JywgJ1VnYW5kYSddLFxyXG4gIFsnVUEnLCAnKzM4MCcsICdVa3JhaW5lJ10sXHJcbiAgWydBRScsICcrOTcxJywgJ1VuaXRlZCBBcmFiIEVtaXJhdGVzJ10sXHJcbiAgWydHQicsICcrNDQnLCAnVW5pdGVkIEtpbmdkb20nXSxcclxuICBbJ1VTJywgJysxJywgJ1VuaXRlZCBTdGF0ZXMnXSxcclxuICBbJ1ZJJywgJysxMzQwJywgJ1VTIFZpcmdpbiBJc2xhbmRzJ10sXHJcbiAgWydVWScsICcrNTk4JywgJ1VydWd1YXknXSxcclxuICBbJ1VaJywgJys5OTgnLCAnVXpiZWtpc3RhbiddLFxyXG4gIFsnVlUnLCAnKzY3OCcsICdWYW51YXR1J10sXHJcbiAgWydWQScsICcrMzknLCAnVmF0aWNhbiBDaXR5J10sXHJcbiAgWydWRScsICcrNTgnLCAnVmVuZXp1ZWxhJ10sXHJcbiAgWydWTicsICcrODQnLCAnVmlldG5hbSddLFxyXG4gIFsnV0YnLCAnKzY4MScsICdXYWxsaXMgYW5kIEZ1dHVuYSddLFxyXG4gIFsnWUUnLCAnKzk2NycsICdZZW1lbiddLFxyXG4gIFsnWk0nLCAnKzI2MCcsICdaYW1iaWEnXSxcclxuICBbJ1pXJywgJysyNjMnLCAnWmltYmFid2UnXSxcclxuXTtcclxuXHJcbi8qKiBBbGwgY291bnRyaWVzIHdpdGggY29tcHV0ZWQgZmxhZyBlbW9qaXMsIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBuYW1lLiAqL1xyXG5leHBvcnQgY29uc3QgQ09VTlRSSUVTOiBDb3VudHJ5RGF0YVtdID0gUkFXLm1hcCgoW2NvZGUsIGRpYWxDb2RlLCBuYW1lXSkgPT4gKHtcclxuICBjb2RlLFxyXG4gIGRpYWxDb2RlLFxyXG4gIG5hbWUsXHJcbiAgZmxhZzogZ2V0RmxhZyhjb2RlKSxcclxufSkpO1xyXG5cclxuLyoqXHJcbiAqIEZpbmQgdGhlIGJlc3QgbWF0Y2hpbmcgY291bnRyeSBmb3IgYW4gRS4xNjQgcGhvbmUgbnVtYmVyIHN0cmluZy5cclxuICogVXNlcyBsb25nZXN0IGRpYWwgY29kZSBwcmVmaXggbWF0Y2guIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vIG1hdGNoIGZvdW5kLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRTE2NENvdW50cnkodmFsdWU6IHN0cmluZyk6IENvdW50cnlEYXRhIHwgdW5kZWZpbmVkIHtcclxuICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5zdGFydHNXaXRoKCcrJykpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgLy8gU29ydCBieSBkaWFsQ29kZSBsZW5ndGggZGVzY2VuZGluZyBzbyBsb25nZXN0IG1hdGNoIHdpbnNcclxuICBjb25zdCBzb3J0ZWQgPSBbLi4uQ09VTlRSSUVTXS5zb3J0KChhLCBiKSA9PiBiLmRpYWxDb2RlLmxlbmd0aCAtIGEuZGlhbENvZGUubGVuZ3RoKTtcclxuICByZXR1cm4gc29ydGVkLmZpbmQoKGMpID0+IHZhbHVlLnN0YXJ0c1dpdGgoYy5kaWFsQ29kZSkpO1xyXG59XHJcblxyXG4vKipcclxuICogRXh0cmFjdCB0aGUgbG9jYWwgbnVtYmVyIHBhcnQgZnJvbSBhbiBFLjE2NCBzdHJpbmcgZ2l2ZW4gYSBkaWFsIGNvZGUuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFMTY0TG9jYWxOdW1iZXIodmFsdWU6IHN0cmluZywgZGlhbENvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc3RhcnRzV2l0aChkaWFsQ29kZSkpIHJldHVybiAnJztcclxuICByZXR1cm4gdmFsdWUuc2xpY2UoZGlhbENvZGUubGVuZ3RoKTtcclxufVxyXG4iLCAiaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICBHcmlkLFxuICBUZXh0RmllbGQsXG4gIHVzZVRoZW1lLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnQG11aS9tYXRlcmlhbC91dGlscyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBGcmFnbWVudCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgdXNlQ29udHJvbGxlcixcbiAgdHlwZSBGaWVsZFBhdGgsXG4gIHR5cGUgRmllbGRWYWx1ZXMsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNTZWxlY3RFbGVtZW50UHJvcHMsIE9wdGlvbk9iamVjdCB9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jU2VsZWN0UGF5bG9hZCB9IGZyb20gJ0AvdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBBc3luY1NlbGVjdEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPihcbiAgcHJvcHM6IEFzeW5jU2VsZWN0RWxlbWVudFByb3BzPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFRPcHRpb25cbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGNvbnRyb2wsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgLy8gaW5pdGlhbFZhbHVlLFxuICAgIC8vIGlzTnVsbGFibGUsXG4gICAgbGFiZWwsXG4gICAgcXVlcnlGbixcbiAgICB2YXJpYW50LFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnIGFzIFRMYWJlbEtleSxcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyBhcyBUVmFsdWVLZXksXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxUT3B0aW9uIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8cmVhZG9ubHkgVE9wdGlvbltdPihbXSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBUcmFjayB3aGF0IHZhbHVlIHdlJ3ZlIGxvYWRlZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAgY29uc3QgbG9hZGVkVmFsdWVSZWYgPSB1c2VSZWY8VE9wdGlvbltUVmFsdWVLZXldIHwgbnVsbCB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgY29uc3QgZmV0Y2hEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZGVib3VuY2UoXG4gICAgICAgIChcbiAgICAgICAgICBwYXlsb2FkOiBBc3luY1NlbGVjdFBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IChyZXN1bHRzPzogcmVhZG9ubHkgVE9wdGlvbltdKSA9PiB2b2lkXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Rm4ocGF5bG9hZCkudGhlbihjID0+IGNhbGxiYWNrKGMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgNDAwXG4gICAgICApLFxuICAgIFtxdWVyeUZuXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbik6IHN0cmluZyB8IG51bWJlciA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvblt2YWx1ZUZpZWxkXSkgOiAnJztcbiAgICB9LFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSkgOiAnJztcbiAgICB9LFxuICAgIFtsYWJlbEZpZWxkXVxuICApO1xuXG4gIC8vIEVmZmVjdDogSGFuZGxlIHNlYXJjaCBxdWVyeSBpbnB1dFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgLy8gQ29uZGl0aW9uIDE6IEEgdmFsdWUgaXMgc2V0IGZyb20gdGhlIGZvcm0sIGFuZCB3ZSBoYXZlbid0IGxvYWRlZCBpdCB5ZXQuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ICE9PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgIC8vIERvbid0IGZldGNoIGlmIHRoZSBzZWxlY3RlZCBvcHRpb24gaXMgYWxyZWFkeSBjb3JyZWN0XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgZ2V0T3B0aW9uVmFsdWUoc2VsZWN0ZWRPcHRpb24pID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ID0gY3VycmVudFZhbHVlO1xuXG4gICAgICBmZXRjaERhdGEoeyBRdWVyeTogbnVsbCwgU2VsZWN0ZWRWYWx1ZTogY3VycmVudFZhbHVlIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IHJlc3VsdHM/LmZpbmQoXG4gICAgICAgICAgb3B0aW9uID0+IFN0cmluZyhnZXRPcHRpb25WYWx1ZShvcHRpb24pKSA9PT0gU3RyaW5nKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZE9wdGlvbikge1xuICAgICAgICAgIHNldE9wdGlvbnMoW21hdGNoZWRPcHRpb25dKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbihtYXRjaGVkT3B0aW9uKTtcbiAgICAgICAgICBzZXRJbnB1dFZhbHVlKGdldE9wdGlvbkxhYmVsKG1hdGNoZWRPcHRpb24pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjsgLy8gRW5kIG9mIGVmZmVjdFxuICAgIH1cblxuICAgIC8vIENvbmRpdGlvbiAyOiBUaGUgdXNlciBpcyB0eXBpbmcgYSBzZWFyY2ggcXVlcnksIG9yIHRoZSBpbnB1dCBpcyBjbGVhcmVkLlxuICAgIC8vIFRoaXMgcnVucyBpZiB0aGUgaW5wdXQgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbC5cbiAgICBpZiAoaW5wdXRWYWx1ZSAhPT0gKHNlbGVjdGVkT3B0aW9uID8gZ2V0T3B0aW9uTGFiZWwoc2VsZWN0ZWRPcHRpb24pIDogJycpKSB7XG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgZW1wdHksIGNsZWFyIG9wdGlvbnMgaW1tZWRpYXRlbHkgd2l0aG91dCBhbiBBUEkgY2FsbC5cbiAgICAgIGlmIChpbnB1dFZhbHVlID09PSAnJykge1xuICAgICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGZldGNoIG5ldyBvcHRpb25zIGJhc2VkIG9uIHRoZSBpbnB1dC5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBpbnB1dFZhbHVlLCBTZWxlY3RlZFZhbHVlOiBudWxsIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0T3B0aW9ucyhyZXN1bHRzIHx8IFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47IC8vIEVuZCBvZiBlZmZlY3RcbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb24gMzogVGhlIHZhbHVlIGhhcyBiZWVuIGNsZWFyZWQgZnJvbSB0aGUgZm9ybS5cbiAgICBpZiAoIWN1cnJlbnRWYWx1ZSAmJiBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb24obnVsbCk7XG4gICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgIHNldE9wdGlvbnMoW10pO1xuICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIFtcbiAgICBmaWVsZC52YWx1ZSxcbiAgICBpbnB1dFZhbHVlLFxuICAgIGZldGNoRGF0YSxcbiAgICBnZXRPcHRpb25MYWJlbCxcbiAgICBnZXRPcHRpb25WYWx1ZSxcbiAgICBzZWxlY3RlZE9wdGlvbixcbiAgICBsYWJlbEZpZWxkLFxuICAgIHZhbHVlRmllbGQsXG4gIF0pO1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZGlzYWJsZWQgPz8gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChfOiBSZWFjdC5TeW50aGV0aWNFdmVudCwgbmV3U2VsZWN0ZWRPcHRpb246IFRPcHRpb24gfCBudWxsKSA9PiB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbihuZXdTZWxlY3RlZE9wdGlvbik7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld1NlbGVjdGVkT3B0aW9uXG4gICAgICAgID8gZ2V0T3B0aW9uVmFsdWUobmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IG5ld1ZhbHVlIGFzXG4gICAgICAgIHwgVE9wdGlvbltUVmFsdWVLZXldXG4gICAgICAgIHwgbnVsbFxuICAgICAgICB8IHVuZGVmaW5lZDsgLy8gVHJhY2sgY2hhbmdlXG5cbiAgICAgIC8vIFN5bmMgaW5wdXQgdmFsdWUgd2l0aCB0aGUgc2VsZWN0aW9uXG4gICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShnZXRPcHRpb25MYWJlbChuZXdTZWxlY3RlZE9wdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgIHNldE9wdGlvbnMoW10pOyAvLyBDbGVhciBvcHRpb25zIHdoZW4gc2VsZWN0aW9uIGlzIGNsZWFyZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWVsZCwgZ2V0T3B0aW9uVmFsdWUsIGdldE9wdGlvbkxhYmVsXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0LlN5bnRoZXRpY0V2ZW50LCBuZXdJbnB1dFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gV2hlbiBmb2N1cyBpcyBsb3N0LCBzeW5jIHRoZSBpbnB1dCB2YWx1ZSBiYWNrIHRvIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbFxuICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgc2V0SW5wdXRWYWx1ZShnZXRPcHRpb25MYWJlbChzZWxlY3RlZE9wdGlvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBub3RoaW5nIGlzIHNlbGVjdGVkLCBjbGVhciB0aGUgaW5wdXRcbiAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkT3B0aW9uLCBnZXRPcHRpb25MYWJlbF0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgb3Blbj17b3Blbn1cbiAgICAgIG9uT3Blbj17aGFuZGxlT3Blbn1cbiAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGdldE9wdGlvbktleT17Z2V0T3B0aW9uVmFsdWV9XG4gICAgICBpc09wdGlvbkVxdWFsVG9WYWx1ZT17KG9wdGlvbiwgdmFsdWUpID0+XG4gICAgICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGdldE9wdGlvblZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgICAgYXV0b0NvbXBsZXRlXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGluY2x1ZGVJbnB1dEluTGlzdFxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHZhbHVlPXtzZWxlY3RlZE9wdGlvbn1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9uc1xuICAgICAgZmlsdGVyT3B0aW9ucz17eCA9PiB4fVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uSW5wdXRDaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBub09wdGlvbnNUZXh0PVwiVHlwZSBTb21ldGhpbmcuLi5cIlxuICAgICAgcmVuZGVySW5wdXQ9e3BhcmFtcyA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICB7Li4ucGFyYW1zfVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHJlbmRlck9wdGlvbj17KHJlbmRlclByb3BzLCBvcHRpb24pID0+IHtcbiAgICAgICAgY29uc3QgeyBrZXksIC4uLm9wdGlvblByb3BzIH0gPSByZW5kZXJQcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2tleX0gey4uLm9wdGlvblByb3BzfT5cbiAgICAgICAgICAgIHtvcHRpb25bbGFiZWxGaWVsZF19XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn07XG5cbmNvbnN0IEFzeW5jU2VsZWN0RWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBBc3luY1NlbGVjdEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFRPcHRpb25cbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuQXN5bmNTZWxlY3RFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0FzeW5jU2VsZWN0RWxlbWVudCc7XG5cbmV4cG9ydCB7IEFzeW5jU2VsZWN0RWxlbWVudCB9O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZUVuaGFuY2VkVHJhbnNmb3JtIH0gZnJvbSAnQC9ob29rcyc7XG5pbXBvcnQgdHlwZSB7IEZpZWxkVHlwZSB9IGZyb20gJ0AvaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE9yVmFsdWUgfSBmcm9tICdAL3R5cGVzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFRleHRGaWVsZEVsZW1lbnQgY29tcG9uZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckZpZWxkRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSA9IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPixcbj4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGZvcm1cbiAgICogQGV4YW1wbGUgXCJmaXJzdE5hbWVcIiB8IFwidXNlci5lbWFpbFwiXG4gICAqL1xuICBuYW1lOiBUTmFtZTtcbiAgLyoqXG4gICAqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlclxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgZmllbGQgZXJyb3Igb2JqZWN0XG4gICAqIEByZXR1cm5zIEN1c3RvbSBlcnJvciBtZXNzYWdlIG9yIGNvbXBvbmVudFxuICAgKi9cbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZXh0RmllbGQgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGRlZmF1bHQgTVVJIFRleHRGaWVsZFxuICAgKi9cbiAgY29tcG9uZW50PzogdHlwZW9mIFRleHRGaWVsZDtcbiAgLyoqXG4gICAqIFZhbHVlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyBmb3IgaW5wdXQvb3V0cHV0XG4gICAqIEBkZXByZWNhdGVkIFVzZSBmaWVsZFR5cGUgZm9yIGNvbW1vbiBwYXR0ZXJucyBvciBjdXN0b20gdHJhbnNmb3JtcyBmb3IgY29tcGxleCBjYXNlc1xuICAgKi9cbiAgdHJhbnNmb3JtPzoge1xuICAgIC8qKiBUcmFuc2Zvcm0gdmFsdWUgYmVmb3JlIGRpc3BsYXlpbmcgaW4gaW5wdXQgKi9cbiAgICBpbnB1dD86ICh2YWx1ZTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiBUVmFsdWU7XG4gICAgLyoqIFRyYW5zZm9ybSBpbnB1dCBldmVudCB0byBmb3JtIHZhbHVlICovXG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIC8qKlxuICAgKiBCdWlsdC1pbiBmaWVsZCB0eXBlIGZvciBhdXRvbWF0aWMgdHJhbnNmb3JtYXRpb25cbiAgICogQGV4YW1wbGUgJ3RleHQnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAndGltZScgfCAnc2VsZWN0J1xuICAgKi9cbiAgZmllbGRUeXBlPzogRmllbGRUeXBlO1xuICAvKipcbiAgICogRGVmYXVsdCB2YWx1ZSB0byBkaXNwbGF5IHdoZW4gZmllbGQgdmFsdWUgaXMgbnVsbC91bmRlZmluZWRcbiAgICogQGV4YW1wbGUgXCJcIlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogVFZhbHVlO1xuICAvKipcbiAgICogVGhlIGlucHV0IGxhYmVsIHRleHRcbiAgICogQGV4YW1wbGUgXCJFbWFpbCBBZGRyZXNzXCJcbiAgICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0XG4gICAqIEBleGFtcGxlIFwiRW50ZXIgeW91ciBlbWFpbFwiXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIHRoZSB1bmRlcmx5aW5nIFRleHRGaWVsZCBjb21wb25lbnRcbiAgICovXG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgLyoqXG4gICAqIEdyaWQgbGF5b3V0IHByb3BzIGZvciB0aGUgd3JhcHBlciBHcmlkIGNvbXBvbmVudFxuICAgKiBAZGVmYXVsdFZhbHVlIHsgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IH1cbiAgICovXG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBUZXh0RmllbGQgdmFyaWFudFxuICAgKiBAZGVmYXVsdFZhbHVlIFwib3V0bGluZWRcIlxuICAgKi9cbiAgdmFyaWFudD86IFRleHRGaWVsZFZhcmlhbnRzO1xuICAvKipcbiAgICogQ3VzdG9tIG9uQ2hhbmdlIGhhbmRsZXIgY2FsbGVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uXG4gICAqL1xuICBvbkNoYW5nZT86IChcbiAgICBldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEVuYWJsZSBkZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nIHRyYW5zZm9ybWF0aW9uIGlzc3Vlc1xuICAgKiBAZGVmYXVsdFZhbHVlIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAqL1xuICBlbmFibGVXYXJuaW5ncz86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gTnVtYmVyRmllbGRFbGVtZW50PFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSA9IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPixcbj4ocHJvcHM6IE51bWJlckZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pIHtcbiAgY29uc3Qge1xuICAgIHBhcnNlRXJyb3IsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGNvbXBvbmVudDogVGV4dEZpZWxkQ29tcG9uZW50ID0gVGV4dEZpZWxkLFxuICAgIHRyYW5zZm9ybSxcbiAgICBmaWVsZFR5cGUgPSAndGV4dCcsIC8vIERlZmF1bHQgdG8gdGV4dCB0eXBlXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgdmFyaWFudCxcbiAgICBvbkNoYW5nZTogY3VzdG9tT25DaGFuZ2UsXG4gICAgZW5hYmxlV2FybmluZ3MgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICBtYXhMZW5ndGgsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIHR5cGUgPSAnbnVtYmVyJyxcbiAgICByZXF1aXJlZCxcbiAgICBoZWxwZXJUZXh0LFxuICAgIGlucHV0UmVmLFxuICAgIG9uSW5wdXQsXG4gICAgb25CbHVyLFxuICAgIGRpc2FibGVkLFxuICAgIC4uLnJlc3RUZXh0UHJvcHNcbiAgfSA9IHRleHRGaWVsZFByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIC8vIFVzZSB0aGUgZW5oYW5jZWQgdHJhbnNmb3JtIGhvb2sgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zXG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VFbmhhbmNlZFRyYW5zZm9ybTxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KFxuICAgIHtcbiAgICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiBmaWVsZC5vbkNoYW5nZSxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaW5wdXQ6IHRyYW5zZm9ybS5pbnB1dCxcbiAgICAgICAgICAgIG91dHB1dDogdHJhbnNmb3JtLm91dHB1dCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZmllbGRUeXBlOiAhdHJhbnNmb3JtXG4gICAgICAgID8gdHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IG1heExlbmd0aCAmJiBtYXhMZW5ndGggPiA1XG4gICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgOiAnbnVtYmVyJ1xuICAgICAgICAgIDogZmllbGRUeXBlXG4gICAgICAgIDogdW5kZWZpbmVkLCAvLyBBdXRvLWRldGVjdCBudW1iZXIgdHlwZVxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZW5hYmxlV2FybmluZ3MsXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihmaWVsZC5yZWYsIGlucHV0UmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUZXh0RmllbGRDb21wb25lbnRcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgey4uLnJlc3RUZXh0UHJvcHN9XG4gICAgICBuYW1lPXtmaWVsZC5uYW1lfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSAnJykge1xuICAgICAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3VzdG9tT25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbklucHV0PXsoZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgIG1heExlbmd0aCAmJlxuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnNsaWNlKDAsIG1heExlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbklucHV0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uV2hlZWw9e2UgPT4ge1xuICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH19XG4gICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICBpZiAoWydlJywgJ0UnLCAnQXJyb3dEb3duJywgJ0Fycm93VXAnXS5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IGhlbHBlclRleHRcbiAgICAgIH1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHNsb3RQcm9wcz17eyBodG1sSW5wdXQ6IHsgbWF4TGVuZ3RoIH0gfX1cbiAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIFRleHRGaWVsZCBjb21wb25lbnQgd2l0aCBhdXRvbWF0aWMgdmFsaWRhdGlvbixcbiAqIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIGFuZCBidWlsdC1pbiBmaWVsZCB0eXBlIGhhbmRsaW5nLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheSB3aXRoIGN1c3RvbSBwYXJzaW5nXG4gKiAtIFZhbHVlIHRyYW5zZm9ybWF0aW9uIHN1cHBvcnRcbiAqIC0gQnVpbHQtaW4gZmllbGQgdHlwZXMgZm9yIGNvbW1vbiBwYXR0ZXJuc1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gT3B0aW1pemVkIG51bWJlciBpbnB1dCBoYW5kbGluZ1xuICogLSBEaXNhYmxlZCBzdGF0ZSBzdHlsaW5nXG4gKiAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgd2l0aCBtZW1vaXplZCB0cmFuc2Zvcm1hdGlvbnNcbiAqIC0gRGV2ZWxvcG1lbnQgd2FybmluZ3MgZm9yIGRlYnVnZ2luZ1xuICogLSBTdGFibGUgcmVmZXJlbmNlcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBidWlsdC1pbiBudW1iZXIgaGFuZGxpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJhZ2VcIlxuICogICBsYWJlbD1cIkFnZVwiXG4gKiAgIGZpZWxkVHlwZT1cIm51bWJlclwiXG4gKiAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnQWdlIGlzIHJlcXVpcmVkJywgbWluOiB7IHZhbHVlOiAwLCBtZXNzYWdlOiAnQWdlIG11c3QgYmUgcG9zaXRpdmUnIH0gfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQWR2YW5jZWQgdXNhZ2Ugd2l0aCBjdXN0b20gZ3JpZCBsYXlvdXQ6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJlbWFpbFwiXG4gKiAgIGxhYmVsPVwiRW1haWxcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGVtYWlsIGFkZHJlc3NcIlxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgcnVsZXM9e3tcbiAqICAgICByZXF1aXJlZDogJ0VtYWlsIGlzIHJlcXVpcmVkJyxcbiAqICAgICBwYXR0ZXJuOiB7IHZhbHVlOiAvXFxTK0BcXFMrXFwuXFxTKy8sIG1lc3NhZ2U6ICdJbnZhbGlkIGVtYWlsJyB9XG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSB0cmFuc2Zvcm1hdGlvbjpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInByaWNlXCJcbiAqICAgbGFiZWw9XCJQcmljZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAodmFsdWUpID0+IHZhbHVlID8gYCQke3ZhbHVlfWAgOiAnJyxcbiAqICAgICBvdXRwdXQ6IChldmVudCkgPT4gcGFyc2VGbG9hdChldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgnJCcsICcnKSkgfHwgbnVsbFxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBlcnJvciBwYXJzaW5nOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwidXNlcm5hbWVcIlxuICogICBsYWJlbD1cIlVzZXJuYW1lXCJcbiAqICAgZmllbGRUeXBlPVwidGV4dFwiXG4gKiAgIHBhcnNlRXJyb3I9eyhlcnJvcikgPT4gKFxuICogICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAncmVkJyB9fT5cbiAqICAgICAgIFx1MjZBMFx1RkUwRiB7ZXJyb3IubWVzc2FnZX1cbiAqICAgICA8L3NwYW4+XG4gKiAgICl9XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1iZXJGaWVsZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogTnVtYmVyRmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPik6IFJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7IEJveFByb3BzLCBGb3JtSGVscGVyVGV4dFByb3BzLCBHcmlkUHJvcHMgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEJveCwgR3JpZCwgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgTXVpT3RwSW5wdXQsXG4gIHR5cGUgTXVpT3RwSW5wdXRQcm9wcyxcbn0gZnJvbSAnbXVpLW9uZS10aW1lLXBhc3N3b3JkLWlucHV0JztcbmltcG9ydCB0eXBlIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRyb2wsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkUGF0aCxcbiAgRmllbGRWYWx1ZXMsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgSGVscGVyVGV4dCB9IGZyb20gJy4vSGVscGVyVGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT1RQSW5wdXRFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGZvcm1cbiAgICogQGV4YW1wbGUgXCJmaXJzdE5hbWVcIiB8IFwidXNlci5lbWFpbFwiXG4gICAqL1xuICBuYW1lOiBUTmFtZTtcbiAgLyoqXG4gICAqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlclxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgZmllbGQgZXJyb3Igb2JqZWN0XG4gICAqIEByZXR1cm5zIEN1c3RvbSBlcnJvciBtZXNzYWdlIG9yIGNvbXBvbmVudFxuICAgKi9cbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcblxuICBtYXhTaXplPzogbnVtYmVyO1xuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIGhlbHBlclRleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG5cbiAgc2xvdFByb3BzPzoge1xuICAgIHdyYXBwZXI/OiBCb3hQcm9wcztcbiAgICBoZWxwZXJUZXh0PzogRm9ybUhlbHBlclRleHRQcm9wcztcbiAgICB0ZXh0ZmllbGQ/OiBNdWlPdHBJbnB1dFByb3BzWydUZXh0RmllbGRzUHJvcHMnXTtcbiAgfTtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xufVxuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBPVFBJbnB1dEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IE9UUElucHV0RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICAvLyBwYXJzZUVycm9yLFxuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBzbG90UHJvcHMsXG4gICAgaGVscGVyVGV4dCxcbiAgICBtYXhTaXplID0gNTYsXG4gICAgcGxhY2Vob2xkZXIgPSAnLScsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgLy8gY29uc3Qge1xuICAvLyAgIGZpZWxkLFxuICAvLyAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgLy8gfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAvLyAgIG5hbWUsXG4gIC8vICAgY29udHJvbCxcbiAgLy8gfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udHJvbGxlclxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gICAgICByZW5kZXI9eyh7IGZpZWxkLCBmaWVsZFN0YXRlOiB7IGVycm9yIH0gfSkgPT4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgey4uLnNsb3RQcm9wcz8ud3JhcHBlcn1cbiAgICAgICAgICBzeD17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgW2AmIC4ke2lucHV0QmFzZUNsYXNzZXMuaW5wdXR9YF06IHtcbiAgICAgICAgICAgICAgICBwOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiAnMS8xJyxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4U2l6ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShzbG90UHJvcHM/LndyYXBwZXI/LnN4KVxuICAgICAgICAgICAgICA/IChzbG90UHJvcHM/LndyYXBwZXI/LnN4ID8/IFtdKVxuICAgICAgICAgICAgICA6IFtzbG90UHJvcHM/LndyYXBwZXI/LnN4XSksXG4gICAgICAgICAgXX1cbiAgICAgICAgPlxuICAgICAgICAgIDxNdWlPdHBJbnB1dFxuICAgICAgICAgICAgey4uLmZpZWxkfVxuICAgICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgICBnYXA9ezEuNX1cbiAgICAgICAgICAgIGxlbmd0aD17NH1cbiAgICAgICAgICAgIFRleHRGaWVsZHNQcm9wcz17e1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgZXJyb3I6ICEhZXJyb3IsXG4gICAgICAgICAgICAgIC4uLnNsb3RQcm9wcz8udGV4dGZpZWxkLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8SGVscGVyVGV4dFxuICAgICAgICAgICAgey4uLnNsb3RQcm9wcz8uaGVscGVyVGV4dH1cbiAgICAgICAgICAgIGVycm9yTWVzc2FnZT17ZXJyb3I/Lm1lc3NhZ2V9XG4gICAgICAgICAgICBoZWxwZXJUZXh0PXtoZWxwZXJUZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IE9UUElucHV0RWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogT1RQSW5wdXRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBGb3JtSGVscGVyVGV4dFByb3BzIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgRm9ybUhlbHBlclRleHQgZnJvbSAnQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgSGVscGVyVGV4dFByb3BzID0gRm9ybUhlbHBlclRleHRQcm9wcyAmIHtcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICBkaXNhYmxlR3V0dGVycz86IGJvb2xlYW47XG4gIGhlbHBlclRleHQ/OiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gSGVscGVyVGV4dCh7XG4gIHN4LFxuICBoZWxwZXJUZXh0LFxuICBlcnJvck1lc3NhZ2UsXG4gIGRpc2FibGVHdXR0ZXJzLFxuICAuLi5vdGhlclxufTogSGVscGVyVGV4dFByb3BzKSB7XG4gIGlmIChlcnJvck1lc3NhZ2UgfHwgaGVscGVyVGV4dCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Rm9ybUhlbHBlclRleHRcbiAgICAgICAgZXJyb3I9eyEhZXJyb3JNZXNzYWdlfVxuICAgICAgICBzeD17W1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG14OiBkaXNhYmxlR3V0dGVycyA/IDAgOiAxLjc1LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3gpID8gc3ggOiBbc3hdKSxcbiAgICAgICAgXX1cbiAgICAgICAgey4uLm90aGVyfVxuICAgICAgPlxuICAgICAgICB7ZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHR9XG4gICAgICA8L0Zvcm1IZWxwZXJUZXh0PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsICJpbXBvcnQgeyBBc3luY1NlbGVjdE11bHRpRWxlbWVudCB9IGZyb20gJy4uL0FzeW5jTXVsdGlTZWxlY3QvQXN5bmNNdWx0aVNlbGVjdCc7XG5pbXBvcnQgeyBBc3luY1NlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi9Bc3luY1NlbGVjdCc7XG5pbXBvcnQgeyBDaGVja2JveEVsZW1lbnQgfSBmcm9tICcuLi9DaGVja2JveEVsZW1lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hHcm91cEVsZW1lbnQgfSBmcm9tICcuLi9DaGVja2JveEdyb3VwJztcbmltcG9ydCB7IERhdGVQaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vRGF0ZVBpY2tlckVsZW1lbnQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZEVsZW1lbnQgfSBmcm9tICcuLi9GaWxlVXBsb2FkRWxlbWVudCc7XG5pbXBvcnQgeyBOdW1iZXJGaWVsZEVsZW1lbnQgfSBmcm9tICcuLi9OdW1iZXJGaWVsZEVsZW1lbnQnO1xuaW1wb3J0IHsgT1RQSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vT1RQSW5wdXRFbGVtZW50L09UUElucHV0RWxlbWVudCc7XG5pbXBvcnQgeyBQYXNzd29yZEVsZW1lbnQgfSBmcm9tICcuLi9QYXNzd29yZEVsZW1lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJFbGVtZW50IH0gZnJvbSAnLi4vUGhvbmVOdW1iZXJFbGVtZW50JztcbmltcG9ydCB7IFJhZGlvQnV0dG9uR3JvdXAgfSBmcm9tICcuLi9SYWRpb0J1dHRvbkdyb3VwJztcbmltcG9ydCB7IFNlbGVjdENhc2NhZGVFbGVtZW50IH0gZnJvbSAnLi4vU2VsZWN0Q2FzY2FkZUVsZW1lbnQnO1xuaW1wb3J0IHsgU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uL1NlbGVjdEVsZW1lbnQnO1xuaW1wb3J0IHsgU2VsZWN0TXVsdGlFbGVtZW50IH0gZnJvbSAnLi4vU2VsZWN0TXVsdGlFbGVtZW50JztcbmltcG9ydCB7IFNsaWRlckVsZW1lbnQgfSBmcm9tICcuLi9TbGlkZXJFbGVtZW50JztcbmltcG9ydCB7IFRleHRGaWVsZEVsZW1lbnQgfSBmcm9tICcuLi9UZXh0RmllbGRFbGVtZW50JztcbmltcG9ydCB7IFRpbWVQaWNrZXJFbGVtZW50IH0gZnJvbSAnLi4vVGltZVBpY2tlckVsZW1lbnQnO1xuXG5jb25zdCBGaWVsZCA9IHtcbiAgVGV4dDogVGV4dEZpZWxkRWxlbWVudCxcbiAgTnVtYmVyOiBOdW1iZXJGaWVsZEVsZW1lbnQsXG4gIENoZWNrYm94OiBDaGVja2JveEVsZW1lbnQsXG4gIERhdGU6IERhdGVQaWNrZXJFbGVtZW50LFxuICBSYWRpb0dyb3VwOiBSYWRpb0J1dHRvbkdyb3VwLFxuICBQYXNzd29yZDogUGFzc3dvcmRFbGVtZW50LFxuICBQaG9uZTogUGhvbmVOdW1iZXJFbGVtZW50LFxuICBUaW1lOiBUaW1lUGlja2VyRWxlbWVudCxcbiAgU2VsZWN0OiBTZWxlY3RFbGVtZW50LFxuICBTZWxlY3RNdWx0aTogU2VsZWN0TXVsdGlFbGVtZW50LFxuICBTZWxlY3RDYXNjYWRlOiBTZWxlY3RDYXNjYWRlRWxlbWVudCxcbiAgQXN5bmNTZWxlY3Q6IEFzeW5jU2VsZWN0RWxlbWVudCxcbiAgQXN5bmNNdWx0aVNlbGVjdDogQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQsXG4gIENoZWNrYm94R3JvdXA6IENoZWNrYm94R3JvdXBFbGVtZW50LFxuICBPVFBJbnB1dDogT1RQSW5wdXRFbGVtZW50LFxuICBTbGlkZXI6IFNsaWRlckVsZW1lbnQsXG4gIEZpbGVVcGxvYWQ6IEZpbGVVcGxvYWRFbGVtZW50LFxufTtcblxuZXhwb3J0IHsgRmllbGQgfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OztBQTRGTyxTQUFTLGNBQWMsT0FBcUM7QUFDakUsU0FDRSxPQUFPLFVBQVUsWUFDakIsVUFBVSxRQUNWLFdBQVcsU0FDWCxXQUFXLFNBQ1gsT0FBUSxNQUFxQixVQUFVLGFBQ3RDLE9BQVEsTUFBcUIsVUFBVSxZQUN0QyxPQUFRLE1BQXFCLFVBQVUsWUFDdkMsT0FBUSxNQUFxQixVQUFVO0FBRTdDO0FBWU8sU0FBUyxpQkFDZCxTQUNBLGFBQWEsU0FDYixhQUFhLFNBQ0M7QUFDZCxTQUFPLFFBQVEsSUFBSSxhQUFXO0FBQUEsSUFDNUIsT0FBTyxPQUFPLE9BQU8sVUFBVSxLQUFLLEVBQUU7QUFBQSxJQUN0QyxPQUFPLE9BQU8sVUFBVTtBQUFBLElBQ3hCLFVBQVUsUUFBUSxPQUFPLFFBQVE7QUFBQSxFQUNuQyxFQUFF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QSxnQkFDVCxLQUFLO0FBQUEsZ0JBQ0wsUUFBUTtBQUFBLGdCQUNSLGlCQUFpQjtBQUFBLGtCQUNmO0FBQUEsa0JBQ0EsT0FBTyxDQUFDLENBQUM7QUFBQSxrQkFDVCxHQUFHLFdBQVc7QUFBQSxnQkFDaEI7QUFBQSxnQkFDQyxHQUFHO0FBQUE7QUFBQSxZQUNOO0FBQUEsWUFFQSxnQkFBQUE7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDRSxHQUFHLFdBQVc7QUFBQSxnQkFDZixjQUFjLE9BQU87QUFBQSxnQkFDckI7QUFBQTtBQUFBLFlBQ0Y7QUFBQTtBQUFBO0FBQUEsTUFDRjtBQUFBO0FBQUEsRUFFSjtBQUVKO0FBRU8sSUFBTUksbUJBQWtCLENBRzdCO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQUErRDtBQUM3RCxTQUNFLGdCQUFBSixNQUFDSyxRQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFMLE1BQUNFLGFBQUEsRUFBVyxHQUFHLE9BQU8sR0FDeEI7QUFFSjs7O0FFbkhBLElBQU0sUUFBUTtBQUFBLEVBQ1osTUFBTUk7QUFBQSxFQUNOLFFBQVFDO0FBQUEsRUFDUixVQUFVQztBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sWUFBWUM7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFBQSxFQUNQLE1BQU1DO0FBQUEsRUFDTixRQUFRQztBQUFBLEVBQ1IsYUFBYUM7QUFBQSxFQUNiLGVBQWVDO0FBQUEsRUFDZixhQUFhQztBQUFBLEVBQ2Isa0JBQWtCQztBQUFBLEVBQ2xCLGVBQWU7QUFBQSxFQUNmLFVBQVVDO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbInByb3BzIiwgIkFzeW5jU2VsZWN0TXVsdGlFbGVtZW50IiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJDaGVja2JveEVsZW1lbnQiLCAiR3JpZCIsICJDaGVja2JveCIsICJGb3JtQ29udHJvbCIsICJGb3JtQ29udHJvbExhYmVsIiwgIkZvcm1Hcm91cCIsICJGb3JtSGVscGVyVGV4dCIsICJHcmlkIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIkdyaWQiLCAiZm9yd2FyZFJlZiIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VNZW1vIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAianN4IiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJqc3giLCAiZm9yd2FyZFJlZiIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgIkdyaWQiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgInBhc3N3b3JkIiwgIkZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sTGFiZWwiLCAiRm9ybUhlbHBlclRleHQiLCAiRm9ybUxhYmVsIiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJGb3JtQ29udHJvbCIsICJGb3JtTGFiZWwiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJGb3JtSGVscGVyVGV4dCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIkdyaWQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAiU2VsZWN0Q2FzY2FkZUVsZW1lbnQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJTZWxlY3RFbGVtZW50IiwgIkdyaWQiLCAiQ2hlY2tib3giLCAiVGV4dEZpZWxkIiwgIkF1dG9jb21wbGV0ZSIsICJDaXJjdWxhclByb2dyZXNzIiwgInVzZVRoZW1lIiwgIkZyYWdtZW50IiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIlNlbGVjdE11bHRpRWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJUZXh0RmllbGQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiR3JpZCIsICJHcmlkIiwgInVzZUZvcmtSZWYiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDb250cm9sbGVyIiwgInVzZUZvcmtSZWYiLCAiVGltZVBpY2tlckVsZW1lbnQiLCAiR3JpZCIsICJGb3JtQ29udHJvbCIsICJGb3JtSGVscGVyVGV4dCIsICJGb3JtTGFiZWwiLCAiR3JpZCIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJqc3hzIiwgIkNvbXBvbmVudCIsICJCb3giLCAiRm9ybUNvbnRyb2wiLCAiRm9ybUhlbHBlclRleHQiLCAiRm9ybUxhYmVsIiwgIkdyaWQiLCAidXNlQ2FsbGJhY2siLCAidXNlUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAiVGV4dEZpZWxkIiwgIklucHV0QWRvcm5tZW50IiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VTdGF0ZSIsICJ1c2VNZW1vIiwgIkJ1dHRvbiIsICJUZXh0RmllbGQiLCAiQm94IiwgIklucHV0QWRvcm5tZW50IiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgInVzZVN0YXRlIiwgInVzZU1lbW8iLCAiQnV0dG9uIiwgIkJveCIsICJUZXh0RmllbGQiLCAiSW5wdXRBZG9ybm1lbnQiLCAianN4IiwgIkNvbXBvbmVudCIsICJ1c2VDb250cm9sbGVyIiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAibWF0Y2giLCAiVGV4dEZpZWxkIiwgIklucHV0QWRvcm5tZW50IiwgIkdyaWQiLCAiQXV0b2NvbXBsZXRlIiwgIkNpcmN1bGFyUHJvZ3Jlc3MiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAidXNlVGhlbWUiLCAiZGVib3VuY2UiLCAiRnJhZ21lbnQiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJUZXh0RmllbGQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIk51bWJlckZpZWxkRWxlbWVudCIsICJHcmlkIiwgIkJveCIsICJHcmlkIiwgIkZvcm1IZWxwZXJUZXh0IiwgImpzeCIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAiQm94IiwgIk9UUElucHV0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkNoZWNrYm94RWxlbWVudCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIlRpbWVQaWNrZXJFbGVtZW50IiwgIlNlbGVjdEVsZW1lbnQiLCAiU2VsZWN0TXVsdGlFbGVtZW50IiwgIlNlbGVjdENhc2NhZGVFbGVtZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJBc3luY1NlbGVjdE11bHRpRWxlbWVudCIsICJPVFBJbnB1dEVsZW1lbnQiXQp9Cg==
|