@nurihaus/web-design-system 1.4.41 → 1.4.42
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/index.js
CHANGED
|
@@ -13061,7 +13061,8 @@ var DropDownTrigger = function DropDownTrigger(props) {
|
|
|
13061
13061
|
var DropDownValue = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_module_react_.forwardRef)(function (props, ref) {
|
|
13062
13062
|
var asChild = props.asChild,
|
|
13063
13063
|
className = props.className,
|
|
13064
|
-
placeholder = props.placeholder
|
|
13064
|
+
placeholder = props.placeholder,
|
|
13065
|
+
style = props.style;
|
|
13065
13066
|
return __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_jsx__("span", {
|
|
13066
13067
|
className: "nuri-theme ".concat(className),
|
|
13067
13068
|
children: __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_jsx__(Value, {
|
|
@@ -13070,7 +13071,8 @@ var DropDownValue = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs
|
|
|
13070
13071
|
className: 'nuri-placeholder',
|
|
13071
13072
|
children: placeholder
|
|
13072
13073
|
}),
|
|
13073
|
-
ref: ref
|
|
13074
|
+
ref: ref,
|
|
13075
|
+
style: style
|
|
13074
13076
|
})
|
|
13075
13077
|
});
|
|
13076
13078
|
});
|
|
@@ -13203,10 +13205,15 @@ var DropDown = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
|
|
|
13203
13205
|
style: {
|
|
13204
13206
|
gap: '10px'
|
|
13205
13207
|
},
|
|
13206
|
-
children: [leftIcon, renderValue ? (
|
|
13207
|
-
|
|
13208
|
-
|
|
13209
|
-
|
|
13208
|
+
children: [leftIcon, renderValue ? __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_jsxs__(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_Fragment__, {
|
|
13209
|
+
children: [renderValue(value), __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_jsx__(base_drop_down.Value, {
|
|
13210
|
+
placeholder: placeholder,
|
|
13211
|
+
className: 'drop-down-single-value',
|
|
13212
|
+
ref: ref,
|
|
13213
|
+
style: {
|
|
13214
|
+
display: 'none'
|
|
13215
|
+
}
|
|
13216
|
+
})]
|
|
13210
13217
|
}) : __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_179142b8_jsx__(base_drop_down.Value, {
|
|
13211
13218
|
placeholder: placeholder,
|
|
13212
13219
|
className: 'drop-down-single-value',
|
|
@@ -14264,4 +14271,4 @@ var OverlayLoading = function OverlayLoading(_a) {
|
|
|
14264
14271
|
|
|
14265
14272
|
export { avatar as Avatar, cta_button as CTAButton, check_box as Checkbox, collapsible_menu as CollapsibleMenu, data_table as DataTable, drop_down as DropDown, icon_text_badge as IconTextBadge, icon_text_option_badge as IconTextOptionBadge, inline_loading as InlineLoading, modal_with_double_button as ModalWithDoubleButton, option_badge as OptionBadge, overlay_loading as OverlayLoading, radio_radio as Radio, spinner as Spinner, text_text as Text, text_field as TextField, tooltip_tooltip as Tooltip, colors };
|
|
14266
14273
|
|
|
14267
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTywwR0FBMEcsS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxVQUFVLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFB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Tyw2QkFBNkIsNENBQTRDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDZCQUE2Qiw0Q0FBNEMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDZCQUE2Qiw0Q0FBNEMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDhCQUE4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QWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsY0FBYyxhQUFhLHVDQUF1QyxtQ0FBbUMsbUNBQW1DLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyx1Q0FBdUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLG9DQUFvQyxtQ0FBbUMsbUNBQW1DLG1DQUFtQyxtQ0FBbUMsbUNBQW1DLG1DQUFtQyxtQ0FBbUMsbUNBQW1DLHNDQUFzQyxxQ0FBcUMsb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyx5Q0FBeUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsc0NBQXNDLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLHNDQUFzQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyx1Q0FBdUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHNDQUFzQyxxQ0FBcUMsd0NBQXdDLHNDQUFzQyxzQ0FBc0Ms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RUFDbkJDLFFBQVEsRUFBRSxTQUFTO0VBQ25CQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsV0FBVyxFQUFFLFNBQVM7RUFDdEJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsV0FBVyxFQUFFLFNBQVM7RUFDdEJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsYUFBYSxFQUFFLFNBQVM7RUFDeEJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsYUFBYSxFQUFFLFNBQVM7RUFDeEJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFO0FBQ3BCLENBQUMsQzs7QUN4R0QsSUFB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEtBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRLEVBQUUsMEJBQVE7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsK0JBQStCLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsWUFBWTtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxZQUFZO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q2pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vZXh0ZXJuYWwgbW9kdWxlIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIixcIm1vZHVsZVwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy9qdXN0aWZ5LWNvbnRlbnQuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvZmxleC1kaXJlY3Rpb24uY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY2hlY2stYm94L2NoZWNrLWJveC1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL3Jlc2V0LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vY3Vyc29yLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvcG9zaXRpb24uY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3RleHQtZmllbGQvdGV4dC1maWVsZC1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL292ZXJmbG93LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy9hbGlnbi1pdGVtcy5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vcmFkaXVzLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vZm9udC5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9iYWRnZS1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmxpbmUtbG9hZGluZy9pbmxpbmUtbG9hZGluZy1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9lbGVtZW50cy90ZXh0L3RleHQtc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8tc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy90b2tlbi9jb2xvci5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL2Rpc3BsYXkuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzPzUyMGUiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL2luZGV4LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvaW5kZXguY3NzPzJkYjQiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL2V4dGVybmFsIG1vZHVsZSB7XCJyb290XCI6XCJqc3gtcnVudGltZVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC9qc3gtcnVudGltZVwiLFwiY29tbW9uanNcIjpcInJlYWN0L2pzeC1ydW50aW1lXCIsXCJhbWRcIjpcInJlYWN0L2pzeC1ydW50aW1lXCIsXCJtb2R1bGVcIjpcInJlYWN0L2pzeC1ydW50aW1lXCJ9Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcy5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vY29sb3JzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnMvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1zbG90L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2UvYmFzZS1iYWRnZS50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtY29udGV4dC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWYvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vZXh0ZXJuYWwgbW9kdWxlIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIixcIm1vZHVsZVwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdXNlLWlzLWh5ZHJhdGVkL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtYXZhdGFyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2Fzc2V0cy9pY29ucy9kZWZhdWx0QXZhdGFyLnN2ZyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2F2YXRhci9iYXNlLWF2YXRhci50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2J1dHRvbi9iYXNlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYnV0dG9uL2N0YS1idXR0b24udHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdXNlLWVzY2FwZS1rZXlkb3duL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtZGlzbWlzc2FibGUtbGF5ZXIvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1pZC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3JlYWN0LWRvbS9kaXN0L2Zsb2F0aW5nLXVpLnJlYWN0LWRvbS5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1hcnJvdy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcG9wcGVyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcG9ydGFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJlc2VuY2UvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC11c2UtY29udHJvbGxhYmxlLXN0YXRlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdG9vbHRpcC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvYmFzZS10b29sdGlwLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC1wcm9wcy50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9iYWRnZS1wcm9wcy50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzcz9lYTdmIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2Uvb3B0aW9uLWJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2JhZGdlL2ljb24tdGV4dC1iYWRnZS50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9pY29uLXRleHQtb3B0aW9uLWJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3RhYmxlL2Jhc2UtdGFibGUudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvdGFibGUvdGFibGUtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90YWJsZS9kYXRhLXRhYmxlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2VsZW1lbnRzL3RleHQvdGV4dC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL2Jhc2UtdGV4dC1maWVsZC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL3RleHQtZmllbGQtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL3RleHQtZmllbGQudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvaG9va3MvdXNlRXh0ZXJuYWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2NvcmUvY29tcG9zZXIvaW5kZXgudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvcmFkaW8vYmFzZS1yYWRpby50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9yYWRpby9yYWRpby50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vYXNzZXRzL2ljb25zL2NoZWNrLnN2ZyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1wcmV2aW91cy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY2hlY2stYm94L2Jhc2UtY2hlY2stYm94LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2NoZWNrLWJveC9jaGVjay1ib3gtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2stYm94LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9hc3NldHMvaWNvbnMvY2hldnJvbkRvd24uc3ZnIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvbnVtYmVyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtY29sbGVjdGlvbi9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWRpcmVjdGlvbi9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWZvY3VzLWd1YXJkcy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWZvY3VzLXNjb3BlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L2Fzc2lnblJlZi5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VSZWYuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlTWVyZ2VSZWYuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L2V4cG9ydHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvYWdncmVzaXZlQ2FwdHVyZS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9oYW5kbGVTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvU2lkZUVmZmVjdC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3Qtc2VsZWN0L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvZHJvcC1kb3duL2Jhc2UtZHJvcC1kb3duLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWNvbGxhcHNpYmxlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9iYXNlLWNvbGxhcHNpYmxlLW1lbnUudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9hc3NldHMvaWNvbnMvbXVsdGlmbHkuc3ZnIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtZGlhbG9nL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbW9kYWwvYmFzZS1tb2RhbC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1wcm9wcy50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC13aXRoLWRvdWJsZS1idXR0b24udHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmxpbmUtbG9hZGluZy9pbmxpbmUtbG9hZGluZy50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmcudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWF2YXRhciB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICYuYXZhdGFyLWltYWdlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qIGF2YXRhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4uYXZhdGFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgJi5zaXplLXhsIHtcbiAgICB3aWR0aDogMTI0cHg7XG4gICAgaGVpZ2h0OiAxMjRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIHdpZHRoOiA3NHB4O1xuICAgIGhlaWdodDogNzRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIHdpZHRoOiA1OHB4O1xuICAgIGhlaWdodDogNThweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLXMge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgfVxuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixnQkFBZ0I7O0VBRWhCO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWixpQkFBaUI7RUFDbkI7QUFDRjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7O0VBRXZCO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYXZhdGFyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcblxcbiAgJi5hdmF0YXItaW1hZ2Uge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogYXZhdGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uYXZhdGFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFxuICAmLnNpemUteGwge1xcbiAgICB3aWR0aDogMTI0cHg7XFxuICAgIGhlaWdodDogMTI0cHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNGU0ZTc7XFxuXFxuICAgICYuYmFkZ2Utb3B0aW9uIHtcXG4gICAgICB3aWR0aDogNDhweDtcXG4gICAgICBoZWlnaHQ6IDQ4cHg7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDc0cHg7XFxuICAgIGhlaWdodDogNzRweDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTRlNztcXG5cXG4gICAgJi5iYWRnZS1vcHRpb24ge1xcbiAgICAgIHdpZHRoOiAzMHB4O1xcbiAgICAgIGhlaWdodDogMzBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICB3aWR0aDogNThweDtcXG4gICAgaGVpZ2h0OiA1OHB4O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xcblxcbiAgICAmLmJhZGdlLW9wdGlvbiB7XFxuICAgICAgd2lkdGg6IDI0cHg7XFxuICAgICAgaGVpZ2h0OiAyNHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICAmLnNpemUtcyB7XFxuICAgIHdpZHRoOiA0MHB4O1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNGU0ZTc7XFxuXFxuICAgICYuYmFkZ2Utb3B0aW9uIHtcXG4gICAgICB3aWR0aDogMThweDtcXG4gICAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLm51cmktanVzdGlmeS1jb250ZW50LXN0YXJ0IHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5udXJpLWp1c3RpZnktY29udGVudC1lbmQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLm51cmktanVzdGlmeS1jb250ZW50LWFyb3VuZCB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9qdXN0aWZ5LWNvbnRlbnQuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0UsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsNkJBQTZCO0FBQy9CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLWp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5udXJpLWp1c3RpZnktY29udGVudC1jZW50ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbi5udXJpLWp1c3RpZnktY29udGVudC1lbmQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLm51cmktanVzdGlmeS1jb250ZW50LWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG5cXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWZsZXgtcm93IHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cblxuLm51cmktZmxleC1yb3ctcmV2ZXJzZSB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbn1cblxuLm51cmktZmxleC1jb2x1bW4ge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4ubnVyaS1mbGV4LWNvbHVtbi1yZXZlcnNlIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvZmxleC1kaXJlY3Rpb24uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0Usc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsOEJBQThCO0FBQ2hDXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLWZsZXgtcm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5udXJpLWZsZXgtcm93LXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG5cXG4ubnVyaS1mbGV4LWNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4ubnVyaS1mbGV4LWNvbHVtbi1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1jaGVjay1ib3gge1xuICAmLmxhYmVsIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGNoZWNrLWJveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5jaGVjay1ib3gge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuLmNoZWNrLWJveC1pbmRpY2F0b3Ige1xuICAmLndyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICB9XG5cbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcblxuICAmLnNpemUtbCB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gIH1cblxuICAmW2RhdGEtc3RhdGU9J3VuY2hlY2tlZCddIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB9XG5cbiAgJltkYXRhLXN0YXRlPSdjaGVja2VkJ10ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gIH1cblxuICAmW2RhdGEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvY2hlY2stYm94L2NoZWNrLWJveC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLDhCQUE4QjtJQUM5QixzQ0FBc0M7SUFDdEMsaUNBQWlDO0VBQ25DO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsU0FBUzs7RUFFVCw2QkFBNkI7RUFDN0IsWUFBWTtBQUNkOztBQUVBO0VBQ0U7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsZ0RBQWdEO0VBQ2xEOztFQUVBLFdBQVc7RUFDWCxZQUFZOztFQUVaO0lBQ0UsV0FBVztJQUNYLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFdBQVc7SUFDWCxZQUFZO0VBQ2Q7O0VBRUE7SUFDRSxXQUFXO0lBQ1gsWUFBWTtFQUNkOztFQUVBO0lBQ0Usc0JBQXNCO0VBQ3hCOztFQUVBO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiw4Q0FBOEM7RUFDaEQ7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1jaGVjay1ib3gge1xcbiAgJi5sYWJlbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBjaGVjay1ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmNoZWNrLWJveCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogMTBweDtcXG5cXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uY2hlY2stYm94LWluZGljYXRvciB7XFxuICAmLndyYXBwZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICB9XFxuXFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDI0cHg7XFxuICAgIGhlaWdodDogMjRweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1tIHtcXG4gICAgd2lkdGg6IDIwcHg7XFxuICAgIGhlaWdodDogMjBweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gIH1cXG5cXG4gICZbZGF0YS1zdGF0ZT0ndW5jaGVja2VkJ10ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgfVxcblxcbiAgJltkYXRhLXN0YXRlPSdjaGVja2VkJ10ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xcbiAgfVxcblxcbiAgJltkYXRhLWRpc2FibGVkPSd0cnVlJ10ge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAvKiDrqqjrk6Ag7JqU7IaM7J2YIOuniOynhOqzvCDtjKjrlKkg7KCc6rGwICovXG4qIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiDquLDrs7gg7Y+w7Yq4IOyEpOyglSDrsI8g7YWN7Iqk7Yq4IOugjOuNlOungSDstZzsoIHtmZQgKi9cbmh0bWwge1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4vKiDrpqzsiqTtirgg7Iqk7YOA7J28IOygnOqxsCAqL1xudWwsXG5vbCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi8qIOunge2BrCDsiqTtg4Dsnbwg7LSI6riw7ZmUICovXG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLyog67KE7Yq8IOyKpO2DgOydvCDstIjquLDtmZQgKi9cbmJ1dHRvbiB7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiDsnbTrr7jsp4Ag6rSA66CoIOyEpOyglSAqL1xuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDtj7wg7JqU7IaMIOyKpO2DgOydvCDstIjquLDtmZQgKi9cbmlucHV0LFxudGV4dGFyZWEsXG5zZWxlY3Qge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG5wIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Jlc2V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSxxQkFBcUI7QUFDckI7RUFDRSxTQUFTO0VBQ1QsVUFBVTtFQUNWLHNCQUFzQjtBQUN4Qjs7QUFFQSwyQkFBMkI7QUFDM0I7RUFDRSw4QkFBOEI7RUFDOUIsbUNBQW1DO0VBQ25DLGtDQUFrQztBQUNwQzs7QUFFQSxlQUFlO0FBQ2Y7O0VBRUUsZ0JBQWdCO0FBQ2xCOztBQUVBLGVBQWU7QUFDZjtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBLGVBQWU7QUFDZjtFQUNFLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsZUFBZTtBQUNqQjs7QUFFQSxjQUFjO0FBQ2Q7RUFDRSxlQUFlO0VBQ2YsWUFBWTtFQUNaLGNBQWM7QUFDaEI7O0FBRUEsaUJBQWlCO0FBQ2pCOzs7RUFHRSxvQkFBb0I7RUFDcEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGdCQUFnQjtBQUNsQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiDrqqjrk6Ag7JqU7IaM7J2YIOuniOynhOqzvCDtjKjrlKkg7KCc6rGwICovXFxuKiB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLyog6riw67O4IO2PsO2KuCDshKTsoJUg67CPIO2FjeyKpO2KuCDroIzrjZTrp4Eg7LWc7KCB7ZmUICovXFxuaHRtbCB7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxufVxcblxcbi8qIOumrOyKpO2KuCDsiqTtg4Dsnbwg7KCc6rGwICovXFxudWwsXFxub2wge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLyog66eB7YGsIOyKpO2DgOydvCDstIjquLDtmZQgKi9cXG5hIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4vKiDrsoTtirwg7Iqk7YOA7J28IOy0iOq4sO2ZlCAqL1xcbmJ1dHRvbiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4vKiDsnbTrr7jsp4Ag6rSA66CoIOyEpOyglSAqL1xcbmltZyB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLyog7Y+8IOyalOyGjCDsiqTtg4Dsnbwg7LSI6riw7ZmUICovXFxuaW5wdXQsXFxudGV4dGFyZWEsXFxuc2VsZWN0IHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5wIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLXRoZW1lIHtcbiAgLS1jdXJzb3ItYnV0dG9uOiBwb2ludGVyO1xuICAtLWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4gIC0tY3Vyc29yLWxpbms6IHBvaW50ZXI7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy90b2tlbi9jdXJzb3IuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usd0JBQXdCO0VBQ3hCLDhCQUE4QjtFQUM5QixzQkFBc0I7QUFDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLm51cmktdGhlbWUge1xcbiAgLS1jdXJzb3ItYnV0dG9uOiBwb2ludGVyO1xcbiAgLS1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkO1xcbiAgLS1jdXJzb3ItbGluazogcG9pbnRlcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS1wb3NpdGlvbi1zdGF0aWMge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4ubnVyaS1wb3NpdGlvbi1yZWxhdGl2ZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51cmktcG9zaXRpb24tYWJzb2x1dGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi5udXJpLXBvc2l0aW9uLWZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuXG4ubnVyaS1wb3NpdGlvbi1zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvcG9zaXRpb24uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIubnVyaS1wb3NpdGlvbi1zdGF0aWMge1xcbiAgcG9zaXRpb246IHN0YXRpYztcXG59XFxuXFxuLm51cmktcG9zaXRpb24tcmVsYXRpdmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ubnVyaS1wb3NpdGlvbi1hYnNvbHV0ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5udXJpLXBvc2l0aW9uLWZpeGVkIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLm51cmktcG9zaXRpb24tc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmJhc2UtY29sbGFwc2libGUtbWVudSB7XG4gICYudHJpZ2dlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDEwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogY29sbGFwc2libGUtbWVudSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmNvbGxhcHNpYmxlLW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDRweDtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1tIHtcbiAgLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1sIHtcbiAgLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgYWxsOiB1bnNldDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IDEwcHg7XG5cbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtdGV4dC1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTNmKSk7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1ob3Zlci1iZy1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KSk7XG4gIH1cblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1hY3RpdmUtYmctY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCkpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtNDEpKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tY29sbGFwc2libGUtbWVudS1hY3RpdmUtZm9udC13ZWlnaHQsIDYwMCk7XG4gIH1cblxuICAmOmRpc2FibGVkLFxuICAmW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBjb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1kaXNhYmxlZC10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpKTtcbiAgfVxufVxuXG4uY29sbGFwc2libGUtbWVudS1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uY29sbGFwc2libGUtbWVudS1sZWZ0ID4gKiB7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtY2hldnJvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktNzEpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTYwbXMgZWFzZTtcbn1cblxuLmJhc2UtY29sbGFwc2libGUtbWVudS50cmlnZ2VyW2RhdGEtc3RhdGU9J29wZW4nXSAuY29sbGFwc2libGUtbWVudS1jaGV2cm9uIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9jb2xsYXBzaWJsZS1tZW51L2NvbGxhcHNpYmxlLW1lbnUtc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0U7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5QixTQUFTO0lBQ1QsV0FBVztFQUNiO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsUUFBUTtBQUNWOztBQUVBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkO0FBQ0Y7O0FBRUE7RUFDRSxVQUFVO0VBQ1Ysc0JBQXNCO0VBQ3RCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLFNBQVM7O0VBRVQsV0FBVztFQUNYLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsZUFBZTs7RUFFZiw4QkFBOEI7RUFDOUIsa0NBQWtDO0VBQ2xDLHNDQUFzQztFQUN0Qyx1RUFBdUU7O0VBRXZFO0lBQ0Usc0ZBQXNGO0VBQ3hGOztFQUVBO0lBQ0UsdUZBQXVGO0lBQ3ZGLDhFQUE4RTtJQUM5RSw0REFBNEQ7RUFDOUQ7O0VBRUE7O0lBRUUsbUJBQW1CO0lBQ25CLGdGQUFnRjtFQUNsRjtBQUNGOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixTQUFTO0VBQ1QsWUFBWTtBQUNkOztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixtQ0FBbUM7RUFDbkMsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixRQUFRO0VBQ1IsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1jb2xsYXBzaWJsZS1tZW51IHtcXG4gICYudHJpZ2dlciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgZ2FwOiAxMHB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBjb2xsYXBzaWJsZS1tZW51ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1tIHtcXG4gIC5jb2xsYXBzaWJsZS1tZW51LXJvdyB7XFxuICAgIGhlaWdodDogNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1sIHtcXG4gIC5jb2xsYXBzaWJsZS1tZW51LXJvdyB7XFxuICAgIGhlaWdodDogNDhweDtcXG4gIH1cXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcXG4gIGFsbDogdW5zZXQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBnYXA6IDEwcHg7XFxuXFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LXRleHQtY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZikpO1xcblxcbiAgJjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtaG92ZXItYmctY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCkpO1xcbiAgfVxcblxcbiAgJi5pcy1hY3RpdmUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS1iZy1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtNDEpKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtYWN0aXZlLWZvbnQtd2VpZ2h0LCA2MDApO1xcbiAgfVxcblxcbiAgJjpkaXNhYmxlZCxcXG4gICZbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtZGlzYWJsZWQtdGV4dC1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKSk7XFxuICB9XFxufVxcblxcbi5jb2xsYXBzaWJsZS1tZW51LWxlZnQge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uY29sbGFwc2libGUtbWVudS1sZWZ0ID4gKiB7XFxuICBtaW4td2lkdGg6IDA7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1tZW51LWNoZXZyb24ge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxKTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xcbn1cXG5cXG4uYmFzZS1jb2xsYXBzaWJsZS1tZW51LnRyaWdnZXJbZGF0YS1zdGF0ZT0nb3BlbiddIC5jb2xsYXBzaWJsZS1tZW51LWNoZXZyb24ge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUtY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRleHQtZmllbGQge1xuICAmLmlucHV0IHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGJhc2UtdGV4dC1maWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi50ZXh0LWZpZWxkLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4udGV4dC1maWVsZC1pbnB1dC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IDEwcHg7XG5cbiAgcGFkZGluZzogMCAxNHB4O1xuXG4gICYuc2l6ZS1tIHtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cblxuICAmLnNpemUtbCB7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG5cbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xuXG4gICY6aGFzKFtkYXRhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgfVxuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICB9XG5cbiAgPiBpbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLnRleHQtZmllbGQtaGVscGVyLXRleHQge1xuICBtYXJnaW4tdG9wOiA0cHg7XG5cbiAgJi5lcnJvciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZGYpO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvdGV4dC1maWVsZC90ZXh0LWZpZWxkLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYiw2QkFBNkI7O0lBRTdCLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsc0NBQXNDOztJQUV0QztNQUNFLG1DQUFtQztJQUNyQztFQUNGO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLFNBQVM7O0VBRVQsZUFBZTs7RUFFZjtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQSxrQkFBa0I7RUFDbEIsOENBQThDOztFQUU5QztJQUNFLDBDQUEwQztJQUMxQyw4Q0FBOEM7RUFDaEQ7O0VBRUE7SUFDRSw4Q0FBOEM7RUFDaEQ7O0VBRUE7SUFDRSxXQUFXO0VBQ2I7QUFDRjs7QUFFQTtFQUNFLGVBQWU7O0VBRWY7SUFDRSxpQ0FBaUM7RUFDbkM7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS10ZXh0LWZpZWxkIHtcXG4gICYuaW5wdXQge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcblxcbiAgICAmOjpwbGFjZWhvbGRlciB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBiYXNlLXRleHQtZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLnRleHQtZmllbGQtdGl0bGUge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG5cXG4udGV4dC1maWVsZC1pbnB1dC13cmFwcGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgZ2FwOiAxMHB4O1xcblxcbiAgcGFkZGluZzogMCAxNHB4O1xcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICB9XFxuXFxuICAmLnNpemUtbCB7XFxuICAgIGhlaWdodDogNTBweDtcXG4gIH1cXG5cXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XFxuXFxuICAmOmhhcyhbZGF0YS1kaXNhYmxlZD0ndHJ1ZSddKSB7XFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gIH1cXG5cXG4gICY6Zm9jdXMtd2l0aGluIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gIH1cXG5cXG4gID4gaW5wdXQge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG59XFxuXFxuLnRleHQtZmllbGQtaGVscGVyLXRleHQge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcblxcbiAgJi5lcnJvciB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS1vdmVyZmxvdy12aXNpYmxlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi5udXJpLW92ZXJmbG93LWhpZGRlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5udXJpLW92ZXJmbG93LXNjcm9sbCB7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbi5udXJpLW92ZXJmbG93LWF1dG8ge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLm51cmktb3ZlcmZsb3cteC12aXNpYmxlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbn1cblxuLm51cmktb3ZlcmZsb3cteC1oaWRkZW4ge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5cbi5udXJpLW92ZXJmbG93LXgtc2Nyb2xsIHtcbiAgb3ZlcmZsb3cteDogc2Nyb2xsO1xufVxuXG4ubnVyaS1vdmVyZmxvdy14LWF1dG8ge1xuICBvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4ubnVyaS1vdmVyZmxvdy15LXZpc2libGUge1xuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuXG4ubnVyaS1vdmVyZmxvdy15LWhpZGRlbiB7XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbn1cblxuLm51cmktb3ZlcmZsb3cteS1zY3JvbGwge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbi5udXJpLW92ZXJmbG93LXktYXV0byB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9vdmVyZmxvdy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLW92ZXJmbG93LXZpc2libGUge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LWhpZGRlbiB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteC12aXNpYmxlIHtcXG4gIG92ZXJmbG93LXg6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LXgtaGlkZGVuIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteC1zY3JvbGwge1xcbiAgb3ZlcmZsb3cteDogc2Nyb2xsO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy14LWF1dG8ge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteS12aXNpYmxlIHtcXG4gIG92ZXJmbG93LXk6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LXktaGlkZGVuIHtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteS1zY3JvbGwge1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy15LWF1dG8ge1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWFpLXN0YXJ0IHtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5udXJpLWFpLWNlbnRlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5udXJpLWFpLWVuZCB7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuLm51cmktYWktc3RyZXRjaCB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4ubnVyaS1haS1iYXNlbGluZSB7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL2FsaWduLWl0ZW1zLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIubnVyaS1haS1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLm51cmktYWktY2VudGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5udXJpLWFpLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5udXJpLWFpLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5udXJpLWFpLWJhc2VsaW5lIHtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuXG4gIC5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5ib2R5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuXG4gIC5jZWxsIHtcbiAgICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogZGF0YS10YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmRhdGEtdGFibGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGF0YS10YWJsZS1oZWFkZXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDM7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU3O1xufVxuXG4uZGF0YS10YWJsZS1yb3cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgei1pbmRleDogMjtcblxuICAgICYgPiAqIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG5cbi5ib2R5IC5kYXRhLXRhYmxlLXJvdzpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG5cbiAgLmZpeGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICB9XG59XG5cbi5maXhlZC1jZWxsIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbGVmdDogMDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSx5QkFBeUI7RUFDekIsa0JBQWtCOztFQUVsQjtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsV0FBVztFQUNiOztFQUVBO0lBQ0UsV0FBVztFQUNiOztFQUVBO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHVCQUF1QjtFQUN6QjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxrQkFBa0I7RUFDbEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLE1BQU07RUFDTixzQkFBc0I7RUFDdEIsVUFBVTtFQUNWLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLGtCQUFrQjs7RUFFbEI7SUFDRSxnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLFVBQVU7O0lBRVY7TUFDRSxrQkFBa0I7TUFDbEIsVUFBVTtJQUNaO0VBQ0Y7QUFDRjs7QUFFQTtFQUNFLHlCQUF5Qjs7RUFFekI7SUFDRSx5QkFBeUI7RUFDM0I7QUFDRjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixPQUFPO0FBQ1RcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtdGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG5cXG4gIC5oZWFkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIC5ib2R5IHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICAucm93IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIC5jZWxsIHtcXG4gICAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqIGRhdGEtdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uZGF0YS10YWJsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmRhdGEtdGFibGUtaGVhZGVyIHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgei1pbmRleDogMztcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU3O1xcbn1cXG5cXG4uZGF0YS10YWJsZS1yb3cge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcblxcbiAgLmZpeGVkIHtcXG4gICAgcG9zaXRpb246IHN0aWNreTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gICAgei1pbmRleDogMjtcXG5cXG4gICAgJiA+ICoge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICB6LWluZGV4OiAxO1xcbiAgICB9XFxuICB9XFxufVxcblxcbi5ib2R5IC5kYXRhLXRhYmxlLXJvdzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xcblxcbiAgLmZpeGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcXG4gIH1cXG59XFxuXFxuLmZpeGVkLWNlbGwge1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIGxlZnQ6IDA7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmJhc2UtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiBjdGEtYnV0dG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4uY3RhLWJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcblxuICAmLnZhcmlhbnQtcHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00MSk7XG4gICAgfVxuICB9XG5cbiAgJi52YXJpYW50LXNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWU5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcblxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWY0KTtcbiAgICB9XG4gIH1cblxuICAmLnZhcmlhbnQtZ2hvc3Qge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XG4gICAgfVxuICB9XG5cbiAgJi52YXJpYW50LXdoaXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcblxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgICB9XG4gIH1cblxuICAmLnZhcmlhbnQtd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1kZik7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcbiAgICB9XG4gIH1cblxuICAmLnNpemUteGwge1xuICAgIGhlaWdodDogNjBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtbGcpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1sIHtcbiAgICBoZWlnaHQ6IDU0cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLXIge1xuICAgIGhlaWdodDogNDhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA1MHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUteHMge1xuICAgIGhlaWdodDogMzBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixTQUFTO0VBQ1Qsa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixlQUFlOztFQUVmO0lBQ0UsYUFBYTtJQUNiLGdCQUFnQjtFQUNsQjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxrQkFBa0I7O0VBRWxCO0lBQ0UsOENBQThDO0lBQzlDLGlDQUFpQzs7SUFFakM7TUFDRSw4Q0FBOEM7SUFDaEQ7RUFDRjs7RUFFQTtJQUNFLDhDQUE4QztJQUM5QyxtQ0FBbUM7O0lBRW5DO01BQ0UsOENBQThDO0lBQ2hEO0VBQ0Y7O0VBRUE7SUFDRSw0Q0FBNEM7SUFDNUMsOENBQThDO0lBQzlDLG1DQUFtQzs7SUFFbkM7TUFDRSw4Q0FBOEM7SUFDaEQ7RUFDRjs7RUFFQTtJQUNFLDRDQUE0QztJQUM1QyxtQ0FBbUM7O0lBRW5DO01BQ0UsOENBQThDO0lBQ2hEO0VBQ0Y7O0VBRUE7SUFDRSw0Q0FBNEM7SUFDNUMsaUNBQWlDOztJQUVqQztNQUNFLDRDQUE0QztJQUM5QztFQUNGOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLG9DQUFvQztFQUN0Qzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosZ0NBQWdDO0lBQ2hDLG9DQUFvQztJQUNwQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosK0JBQStCO0lBQy9CLG1DQUFtQztJQUNuQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyxtQkFBbUI7SUFDbkIsWUFBWTtFQUNkO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAmOmZvY3VzLXZpc2libGUge1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgICBib3gtc2hhZG93OiBub25lO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqIGN0YS1idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uY3RhLWJ1dHRvbiB7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICAmLnZhcmlhbnQtcHJpbWFyeSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTQxKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi52YXJpYW50LXNlY29uZGFyeSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1lOSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtZjQpO1xcbiAgICB9XFxuICB9XFxuXFxuICAmLnZhcmlhbnQtZ2hvc3Qge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XFxuXFxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYudmFyaWFudC13aGl0ZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi52YXJpYW50LXdhcm5pbmcge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5zaXplLXhsIHtcXG4gICAgaGVpZ2h0OiA2MHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sZyk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1sZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgaGVpZ2h0OiA1NHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWJhc2UpO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtciB7XFxuICAgIGhlaWdodDogNDhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS14cyB7XFxuICAgIGhlaWdodDogMzBweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmOmRpc2FibGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgW2RhdGEtcmFkaXVzXSB7XG4gIC8qIOuUlOyekOyduCDsi5zsiqTthZzsnZgg67OA64+ZIOqwgOuKpeyEseycvOuhnCDsnbjtlbQg7YGs6riw7Iic7J20IOyVhOuLjCDsg53shLHsiJzsnLzroZwg7KCV66Cs7ZWp64uI64ukLiAqL1xuICAtLXJhZGl1cy0xOiA2cHg7XG4gIC0tcmFkaXVzLTI6IDRweDtcbiAgLS1yYWRpdXMtMzogNDBweDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Rva2VuL3JhZGl1cy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSw4Q0FBOEM7RUFDOUMsZUFBZTtFQUNmLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiW2RhdGEtcmFkaXVzXSB7XFxuICAvKiDrlJTsnpDsnbgg7Iuc7Iqk7YWc7J2YIOuzgOuPmSDqsIDriqXshLHsnLzroZwg7J247ZW0IO2BrOq4sOyInOydtCDslYTri4wg7IOd7ISx7Iic7Jy866GcIOygleugrO2VqeuLiOuLpC4gKi9cXG4gIC0tcmFkaXVzLTE6IDZweDtcXG4gIC0tcmFkaXVzLTI6IDRweDtcXG4gIC0tcmFkaXVzLTM6IDQwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvb3Jpb25jYWN0dXMvcHJldGVuZGFyZEB2MS4zLjgvZGlzdC93ZWIvc3RhdGljL3ByZXRlbmRhcmQuY3NzKTtcIl0pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcCk7XCJdKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zKTtcIl0pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS10aGVtZSB7XG4gIC0tZm9udC1zaXplLXhzbTogMTJweDtcbiAgLS1mb250LXNpemUtc206IDE0cHg7XG4gIC0tZm9udC1zaXplLWJhc2U6IDE2cHg7XG4gIC0tZm9udC1zaXplLWxnOiAxOHB4O1xuICAtLWZvbnQtc2l6ZS14bDogMjBweDtcbiAgLS1mb250LXNpemUtMnhsOiAyNHB4O1xuICAtLWZvbnQtc2l6ZS0zeGw6IDMwcHg7XG4gIC0tZm9udC1zaXplLTR4bDogMzZweDtcbiAgLS1mb250LXNpemUtNXhsOiA0OHB4O1xuICAtLWZvbnQtc2l6ZS02eGw6IDYwcHg7XG5cbiAgLS1saW5lLWhlaWdodC14c206IDE4cHg7XG4gIC0tbGluZS1oZWlnaHQtc206IDE4cHg7XG4gIC0tbGluZS1oZWlnaHQtYmFzZTogMjJweDtcbiAgLS1saW5lLWhlaWdodC1sZzogMjRweDtcbiAgLS1saW5lLWhlaWdodC14bDogMjhweDtcbiAgLS1saW5lLWhlaWdodC0yeGw6IDMycHg7XG4gIC0tbGluZS1oZWlnaHQtM3hsOiAzNnB4O1xuICAtLWxpbmUtaGVpZ2h0LTR4bDogNDNweDtcbiAgLS1saW5lLWhlaWdodC01eGw6IDY2cHg7XG4gIC0tbGluZS1oZWlnaHQtNnhsOiA4MnB4O1xuXG4gIC0tZm9udC13ZWlnaHQtcmVndWxhcjogNDAwO1xuICAtLWZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xuICAtLWZvbnQtd2VpZ2h0LXNlbWlib2xkOiA2MDA7XG4gIC0tZm9udC13ZWlnaHQtYm9sZDogNzAwO1xuICAtLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDogODAwO1xuXG4gIGZvbnQtZmFtaWx5OlxuICAgICdUd2Vtb2ppIENvdW50cnkgRmxhZ3MnLFxuICAgICdQcmV0ZW5kYXJkJyxcbiAgICBQcmV0ZW5kYXJkLFxuICAgIC1hcHBsZS1zeXN0ZW0sXG4gICAgQmxpbmtNYWNTeXN0ZW1Gb250LFxuICAgIHN5c3RlbS11aSxcbiAgICBSb2JvdG8sXG4gICAgJ0hlbHZldGljYSBOZXVlJyxcbiAgICAnU2Vnb2UgVUknLFxuICAgICdBcHBsZSBTRCBHb3RoaWMgTmVvJyxcbiAgICAnTm90byBTYW5zIEtSJyxcbiAgICAnTWFsZ3VuIEdvdGhpYycsXG4gICAgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdOb3RvIENvbG9yIEVtb2ppJyxcbiAgICBzYW5zLXNlcmlmO1xufVxuXG4ubnVyaS1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpO1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvdG9rZW4vZm9udC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBSUE7RUFDRSxxQkFBcUI7RUFDckIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixvQkFBb0I7RUFDcEIsb0JBQW9CO0VBQ3BCLHFCQUFxQjtFQUNyQixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixxQkFBcUI7O0VBRXJCLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsd0JBQXdCO0VBQ3hCLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsdUJBQXVCO0VBQ3ZCLHVCQUF1QjtFQUN2Qix1QkFBdUI7RUFDdkIsdUJBQXVCO0VBQ3ZCLHVCQUF1Qjs7RUFFdkIsMEJBQTBCO0VBQzFCLHlCQUF5QjtFQUN6QiwyQkFBMkI7RUFDM0IsdUJBQXVCO0VBQ3ZCLDRCQUE0Qjs7RUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBaUJZO0FBQ2Q7O0FBRUE7RUFDRSxtQ0FBbUM7QUFDckNcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9vcmlvbmNhY3R1cy9wcmV0ZW5kYXJkQHYxLjMuOC9kaXN0L3dlYi9zdGF0aWMvcHJldGVuZGFyZC5jc3MnKTtcXG5AaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwJyk7XFxuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnMnKTtcXG5cXG4ubnVyaS10aGVtZSB7XFxuICAtLWZvbnQtc2l6ZS14c206IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1zbTogMTRweDtcXG4gIC0tZm9udC1zaXplLWJhc2U6IDE2cHg7XFxuICAtLWZvbnQtc2l6ZS1sZzogMThweDtcXG4gIC0tZm9udC1zaXplLXhsOiAyMHB4O1xcbiAgLS1mb250LXNpemUtMnhsOiAyNHB4O1xcbiAgLS1mb250LXNpemUtM3hsOiAzMHB4O1xcbiAgLS1mb250LXNpemUtNHhsOiAzNnB4O1xcbiAgLS1mb250LXNpemUtNXhsOiA0OHB4O1xcbiAgLS1mb250LXNpemUtNnhsOiA2MHB4O1xcblxcbiAgLS1saW5lLWhlaWdodC14c206IDE4cHg7XFxuICAtLWxpbmUtaGVpZ2h0LXNtOiAxOHB4O1xcbiAgLS1saW5lLWhlaWdodC1iYXNlOiAyMnB4O1xcbiAgLS1saW5lLWhlaWdodC1sZzogMjRweDtcXG4gIC0tbGluZS1oZWlnaHQteGw6IDI4cHg7XFxuICAtLWxpbmUtaGVpZ2h0LTJ4bDogMzJweDtcXG4gIC0tbGluZS1oZWlnaHQtM3hsOiAzNnB4O1xcbiAgLS1saW5lLWhlaWdodC00eGw6IDQzcHg7XFxuICAtLWxpbmUtaGVpZ2h0LTV4bDogNjZweDtcXG4gIC0tbGluZS1oZWlnaHQtNnhsOiA4MnB4O1xcblxcbiAgLS1mb250LXdlaWdodC1yZWd1bGFyOiA0MDA7XFxuICAtLWZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xcbiAgLS1mb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiAgLS1mb250LXdlaWdodC1ib2xkOiA3MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDogODAwO1xcblxcbiAgZm9udC1mYW1pbHk6XFxuICAgICdUd2Vtb2ppIENvdW50cnkgRmxhZ3MnLFxcbiAgICAnUHJldGVuZGFyZCcsXFxuICAgIFByZXRlbmRhcmQsXFxuICAgIC1hcHBsZS1zeXN0ZW0sXFxuICAgIEJsaW5rTWFjU3lzdGVtRm9udCxcXG4gICAgc3lzdGVtLXVpLFxcbiAgICBSb2JvdG8sXFxuICAgICdIZWx2ZXRpY2EgTmV1ZScsXFxuICAgICdTZWdvZSBVSScsXFxuICAgICdBcHBsZSBTRCBHb3RoaWMgTmVvJyxcXG4gICAgJ05vdG8gU2FucyBLUicsXFxuICAgICdNYWxndW4gR290aGljJyxcXG4gICAgJ0FwcGxlIENvbG9yIEVtb2ppJyxcXG4gICAgJ1NlZ29lIFVJIEVtb2ppJyxcXG4gICAgJ1NlZ29lIFVJIFN5bWJvbCcsXFxuICAgICdOb3RvIENvbG9yIEVtb2ppJyxcXG4gICAgc2Fucy1zZXJpZjtcXG59XFxuXFxuLm51cmktcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG59XG52YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSxcbiAgdXNlRWZmZWN0ID0gUmVhY3QudXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QgPSBSZWFjdC51c2VMYXlvdXRFZmZlY3QsXG4gIHVzZURlYnVnVmFsdWUgPSBSZWFjdC51c2VEZWJ1Z1ZhbHVlO1xuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUkMihzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gIHZhciB2YWx1ZSA9IGdldFNuYXBzaG90KCksXG4gICAgX3VzZVN0YXRlID0gdXNlU3RhdGUoeyBpbnN0OiB7IHZhbHVlOiB2YWx1ZSwgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH0gfSksXG4gICAgaW5zdCA9IF91c2VTdGF0ZVswXS5pbnN0LFxuICAgIGZvcmNlVXBkYXRlID0gX3VzZVN0YXRlWzFdO1xuICB1c2VMYXlvdXRFZmZlY3QoXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgaW5zdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgfSxcbiAgICBbc3Vic2NyaWJlLCB2YWx1ZSwgZ2V0U25hcHNob3RdXG4gICk7XG4gIHVzZUVmZmVjdChcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlVXBkYXRlKHsgaW5zdDogaW5zdCB9KTtcbiAgICAgIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlVXBkYXRlKHsgaW5zdDogaW5zdCB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3N1YnNjcmliZV1cbiAgKTtcbiAgdXNlRGVidWdWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICBpbnN0ID0gaW5zdC52YWx1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIW9iamVjdElzKGluc3QsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICEwO1xuICB9XG59XG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcbiAgcmV0dXJuIGdldFNuYXBzaG90KCk7XG59XG52YXIgc2hpbSA9XG4gIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cgfHxcbiAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudCB8fFxuICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICA/IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDFcbiAgICA6IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDI7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID1cbiAgdm9pZCAwICE9PSBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZSA/IFJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlIDogc2hpbTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDQwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogYXR0cihkYXRhLWJhY2tncm91bmRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuICBjb2xvcjogYXR0cihkYXRhLXRleHRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuICBib3JkZXI6IGF0dHIoZGF0YS1ib3JkZXJDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuXG4gICYuc2l6ZS1sIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIGhlaWdodDogNDBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtciB7XG4gICAgaGVpZ2h0OiAzNnB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICBoZWlnaHQ6IDMycHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIH1cblxuICAmLnNpemUtc20ge1xuICAgIGhlaWdodDogMjhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgJi5pY29uLXRleHQtb3B0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgcGFkZGluZzogMCAyMHB4O1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLm9wdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5pY29uLXRleHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG5cbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGljb24tdGV4dC1vcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5pY29uLXRleHQtb3B0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIHBhZGRpbmc6IDAgMjBweDtcblxuICA+IHNwYW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDRweDtcbiAgfVxufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGtCQUFrQjtFQUNsQixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFFBQVE7RUFDUixtQkFBbUI7O0VBRW5CLCtEQUErRDtFQUMvRCw4Q0FBOEM7RUFDOUMsaURBQWlEOztFQUVqRDtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsb0NBQW9DO0VBQ3RDOztFQUVBO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7O0lBRTlCLGVBQWU7RUFDakI7QUFDRjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7O0VBRXZCLGlCQUFpQjtFQUNqQixtQkFBbUI7QUFDckI7O0FBRUE7Ozs7bUdBSW1HOztBQUVuRztFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLFFBQVE7O0VBRVIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTs7OztvR0FJb0c7O0FBRXBHO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7O0VBRTlCLGVBQWU7O0VBRWY7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFFBQVE7RUFDVjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLWJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4O1xcblxcbiAgYmFja2dyb3VuZC1jb2xvcjogYXR0cihkYXRhLWJhY2tncm91bmRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xcbiAgY29sb3I6IGF0dHIoZGF0YS10ZXh0Q29sb3IgY29sb3IsIHRyYW5zcGFyZW50KTtcXG4gIGJvcmRlcjogYXR0cihkYXRhLWJvcmRlckNvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XFxuXFxuICAmLnNpemUtbCB7XFxuICAgIGhlaWdodDogNDhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1yIHtcXG4gICAgaGVpZ2h0OiAzNnB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtcyB7XFxuICAgIGhlaWdodDogMzJweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtc20ge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLmljb24tdGV4dC1vcHRpb24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFxuICAgIHBhZGRpbmc6IDAgMjBweDtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4ub3B0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qIG9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmljb24tdGV4dCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxuXFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogaWNvbi10ZXh0LW9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblxcbi5pY29uLXRleHQtb3B0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcblxcbiAgcGFkZGluZzogMCAyMHB4O1xcblxcbiAgPiBzcGFuIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRvb2x0aXAge1xuICB6LWluZGV4OiAzO1xuICAmLmNvbnRlbnQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4udG9vbHRpcC10cmlnZ2VyIHtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xufVxuXG4udG9vbHRpcC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgcGFkZGluZzogMTJweDtcblxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIH1cblxuICAmLmRpcmVjdGlvbi10b3Age1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJvdHRvbTogLThweDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIGJvcmRlci13aWR0aDogOHB4IDhweCAwIDhweDtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cblxuICAmLmRpcmVjdGlvbi1ib3R0b20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiAtOHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwIDhweCA4cHggOHB4O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxuXG4gICYuZGlyZWN0aW9uLWxlZnQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHJpZ2h0OiAtOHB4O1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICBib3JkZXItd2lkdGg6IDhweCAwIDhweCA4cHg7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gICAgfVxuICB9XG5cbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbGVmdDogLThweDtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggOHB4IDhweCAwO1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxVQUFVO0VBQ1Y7SUFDRSxrQkFBa0I7RUFDcEI7QUFDRjs7QUFFQTs7OztvR0FJb0c7O0FBRXBHO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIsU0FBUzs7RUFFVCw4Q0FBOEM7RUFDOUMsaUNBQWlDO0VBQ2pDLGtCQUFrQjtFQUNsQixhQUFhOztFQUViLDhCQUE4QjtFQUM5QixrQ0FBa0M7RUFDbEMsdUNBQXVDOztFQUV2QyxrQkFBa0I7O0VBRWxCO0lBQ0UsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsU0FBUztJQUNULG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLDRCQUE0QjtJQUM1QjtNQUNFLFlBQVk7TUFDWixTQUFTO01BQ1QsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDJCQUEyQjtJQUMzQjtNQUNFLFNBQVM7TUFDVCxTQUFTO01BQ1QsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDRCQUE0QjtJQUM1QjtNQUNFLFdBQVc7TUFDWCxRQUFRO01BQ1IsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDJCQUEyQjtJQUMzQjtNQUNFLFVBQVU7TUFDVixRQUFRO01BQ1IsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLXRvb2x0aXAge1xcbiAgei1pbmRleDogMztcXG4gICYuY29udGVudCB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLnRvb2x0aXAtdHJpZ2dlciB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxufVxcblxcbi50b29sdGlwLWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogMTBweDtcXG5cXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBwYWRkaW5nOiAxMnB4O1xcblxcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcXG5cXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gICY6OmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAwO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICB9XFxuXFxuICAmLmRpcmVjdGlvbi10b3Age1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xcbiAgICAmOjpiZWZvcmUge1xcbiAgICAgIGJvdHRvbTogLThweDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgICAgIGJvcmRlci13aWR0aDogOHB4IDhweCAwIDhweDtcXG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuZGlyZWN0aW9uLWJvdHRvbSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcXG4gICAgJjo6YmVmb3JlIHtcXG4gICAgICB0b3A6IC04cHg7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgICBib3JkZXItd2lkdGg6IDAgOHB4IDhweCA4cHg7XFxuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50O1xcbiAgICB9XFxuICB9XFxuXFxuICAmLmRpcmVjdGlvbi1sZWZ0IHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMHB4KTtcXG4gICAgJjo6YmVmb3JlIHtcXG4gICAgICByaWdodDogLThweDtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggMCA4cHggOHB4O1xcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTBweCk7XFxuICAgICY6OmJlZm9yZSB7XFxuICAgICAgbGVmdDogLThweDtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggOHB4IDhweCAwO1xcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWRyb3AtZG93biB7XG4gICYudHJpZ2dlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDEwcHg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogZHJvcC1kb3duLXNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5kcm9wLWRvd24tc2luZ2xlLXRyaWdnZXIge1xuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBwYWRkaW5nOiAwIDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuXG4gICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1wdXJwbGUtMzkpO1xuICB9XG5cbiAgJltkYXRhLXBsYWNlaG9sZGVyXSB7XG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgcGF0aCB7XG4gICAgICAgIGZpbGw6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJjpub3QoW2RhdGEtcGxhY2Vob2xkZXJdKSB7XG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHBhdGgge1xuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmW2RhdGEtc3RhdGU9J29wZW4nXSB7XG4gICAgLnJvdGF0ZSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xuICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgICB9XG4gIH1cbn1cblxuLmRyb3AtZG93bi1zaW5nbGUtdmFsdWUge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuXG4gIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gIH1cbn1cblxuLmRyb3AtZG93bi1zaW5nbGUtY29udGVudCB7XG4gIGJveC1zaGFkb3c6XG4gICAgMHB4IDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDYpLFxuICAgIDBweCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA2cHg7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcbiAgfVxuXG4gID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNnB4O1xuICB9XG59XG5cbi5kcm9wLWRvd24tc2luZ2xlLWl0ZW0ge1xuICBwYWRkaW5nOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgaGVpZ2h0OiA0NnB4O1xuXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG5cbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvZHJvcC1kb3duL2Ryb3AtZG93bi1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsOEJBQThCO0lBQzlCLFNBQVM7RUFDWDtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQSw4Q0FBOEM7RUFDOUMsa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixlQUFlO0VBQ2YsNENBQTRDOztFQUU1QztJQUNFLDRDQUE0QztFQUM5Qzs7RUFFQTtJQUNFO01BQ0UsbUNBQW1DO0lBQ3JDOztJQUVBO01BQ0U7UUFDRSxrQ0FBa0M7TUFDcEM7SUFDRjtFQUNGOztFQUVBO0lBQ0U7TUFDRSxpQ0FBaUM7SUFDbkM7O0lBRUE7TUFDRTtRQUNFLGdDQUFnQztNQUNsQztJQUNGO0VBQ0Y7O0VBRUE7SUFDRTtNQUNFLHlCQUF5QjtNQUN6Qix5QkFBeUI7TUFDekIsZ0NBQWdDO01BQ2hDLHNCQUFzQjtJQUN4QjtFQUNGO0FBQ0Y7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsa0NBQWtDO0VBQ2xDLHNDQUFzQzs7RUFFdEMsZ0JBQWdCOztFQUVoQjtJQUNFLG1DQUFtQztFQUNyQztBQUNGOztBQUVBO0VBQ0U7O3lDQUV1Qzs7RUFFdkMsa0JBQWtCOztFQUVsQjtJQUNFLDJCQUEyQjtJQUMzQiw0QkFBNEI7RUFDOUI7O0VBRUE7SUFDRSw4QkFBOEI7SUFDOUIsK0JBQStCO0VBQ2pDO0FBQ0Y7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsNENBQTRDO0VBQzVDLGFBQWE7RUFDYixZQUFZOztFQUVaLDhCQUE4QjtFQUM5QixrQ0FBa0M7RUFDbEMsc0NBQXNDOztFQUV0QyxlQUFlOztFQUVmO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsOENBQThDO0lBQzlDLG1DQUFtQztJQUNuQyxtQkFBbUI7RUFDckI7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1kcm9wLWRvd24ge1xcbiAgJi50cmlnZ2VyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBnYXA6IDEwcHg7XFxuICB9XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogZHJvcC1kb3duLXNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uZHJvcC1kb3duLXNpbmdsZS10cmlnZ2VyIHtcXG4gICYuc2l6ZS1tIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcbiAgfVxcblxcbiAgJi5zaXplLWwge1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuICB9XFxuXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMCAxNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XFxuXFxuICAmOmZvY3VzIHtcXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXB1cnBsZS0zOSk7XFxuICB9XFxuXFxuICAmW2RhdGEtcGxhY2Vob2xkZXJdIHtcXG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICBwYXRoIHtcXG4gICAgICAgIGZpbGw6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICAmOm5vdChbZGF0YS1wbGFjZWhvbGRlcl0pIHtcXG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xcbiAgICB9XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgcGF0aCB7XFxuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbZGF0YS1zdGF0ZT0nb3BlbiddIHtcXG4gICAgLnJvdGF0ZSB7XFxuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xcbiAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLmRyb3AtZG93bi1zaW5nbGUtdmFsdWUge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcblxcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG5cXG4gIDo6cGxhY2Vob2xkZXIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcXG4gIH1cXG59XFxuXFxuLmRyb3AtZG93bi1zaW5nbGUtY29udGVudCB7XFxuICBib3gtc2hhZG93OlxcbiAgICAwcHggNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4wNiksXFxuICAgIDBweCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuXFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICA+IDpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcXG4gIH1cXG5cXG4gID4gOmxhc3QtY2hpbGQge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XFxuICB9XFxufVxcblxcbi5kcm9wLWRvd24tc2luZ2xlLWl0ZW0ge1xcbiAgcGFkZGluZzogMTRweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGhlaWdodDogNDZweDtcXG5cXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG5cXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xcbiAgfVxcblxcbiAgJjpmb2N1cyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICB9XFxuXFxuICAmOmRpc2FibGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmNvbXBvbmVudC1sb2FkaW5nLWlubGluZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9sb2FkaW5nL2lubGluZS1sb2FkaW5nL2lubGluZS1sb2FkaW5nLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLG1CQUFtQjtFQUNyQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuY29tcG9uZW50LWxvYWRpbmctaW5saW5lIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIGNvbXBvbmVudHMvbG9hZGluZy9vdmVybGF5LWxvYWRpbmcvb3ZlcmxheS1sb2FkaW5nLXN0eWxlLmNzcyAqL1xuLnBhZ2UtbG9hZGluZy1jb250YWluZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5wYWdlLWxvYWRpbmctYmFja2Ryb3AgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOyB9XG4ucGFnZS1sb2FkaW5nLWNvbnRlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTZweDtcbn1cbi8qIOq4sOuzuCDsiqTtlLzrhIgoMjBweCnrpbwg7ZmV64yAICovXG4ucGFnZS1sb2FkaW5nLWluZGljYXRvciB7IHRyYW5zZm9ybTogc2NhbGUoMy4yKTsgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOyB9XG4ucGFnZS1sb2FkaW5nLXRleHQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLGlFQUFpRTtBQUNqRTtFQUNFLGVBQWU7RUFDZixRQUFRO0VBQ1IsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7QUFDekI7QUFDQSx5QkFBeUIsa0JBQWtCLEVBQUUsUUFBUSxFQUFFO0FBQ3ZEO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsbUJBQW1CO0VBQ25CLFNBQVM7QUFDWDtBQUNBLHFCQUFxQjtBQUNyQiwwQkFBMEIscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUU7QUFDM0UscUJBQXFCLGtCQUFrQixFQUFFXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIGNvbXBvbmVudHMvbG9hZGluZy9vdmVybGF5LWxvYWRpbmcvb3ZlcmxheS1sb2FkaW5nLXN0eWxlLmNzcyAqL1xcbi5wYWdlLWxvYWRpbmctY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGluc2V0OiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnBhZ2UtbG9hZGluZy1iYWNrZHJvcCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IH1cXG4ucGFnZS1sb2FkaW5nLWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxNnB4O1xcbn1cXG4vKiDquLDrs7gg7Iqk7ZS864SIKDIwcHgp66W8IO2ZleuMgCAqL1xcbi5wYWdlLWxvYWRpbmctaW5kaWNhdG9yIHsgdHJhbnNmb3JtOiBzY2FsZSgzLjIpOyB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7IH1cXG4ucGFnZS1sb2FkaW5nLXRleHQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS10ZXh0IHtcbiAgJjp3aGVyZSgueHNtKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcbiAgfVxuICAmOndoZXJlKC5zbSkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICB9XG4gICY6d2hlcmUoLmJhc2UpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7XG4gIH1cbiAgJjp3aGVyZSgubGcpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sZyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWxnKTtcbiAgfVxuICAmOndoZXJlKC54bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteGwpO1xuICB9XG4gICY6d2hlcmUoLnQtMnhsKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMnhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtMnhsKTtcbiAgfVxuICAmOndoZXJlKC50LTN4bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTN4bCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTN4bCk7XG4gIH1cbiAgJjp3aGVyZSgudC00eGwpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS00eGwpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC00eGwpO1xuICB9XG4gICY6d2hlcmUoLnQtNXhsKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtNXhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtNXhsKTtcbiAgfVxuICAmOndoZXJlKC50LTZ4bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTZ4bCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTZ4bCk7XG4gIH1cblxuICAmOndoZXJlKC5yZWd1bGFyKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xuICB9XG4gICY6d2hlcmUoLm1lZGl1bSkge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuICB9XG4gICY6d2hlcmUoLnNlbWlib2xkKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuICAmOndoZXJlKC5ib2xkKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG4gICY6d2hlcmUoLmV4dHJhYm9sZCkge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1leHRyYWJvbGQpO1xuICB9XG5cbiAgJltjbGFzcyo9J3RleHRBbGlnbi0nXSB7XG4gICAgJi50ZXh0QWxpZ24tbGVmdCB7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAmLnRleHRBbGlnbi1jZW50ZXIge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd0ZXh0RGVjb3JhdGlvbi0nXSB7XG4gICAgJi50ZXh0RGVjb3JhdGlvbi11bmRlcmxpbmUge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tbm9uZSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tbGluZVRocm91Z2gge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tb3ZlcmxpbmUge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTtcbiAgICB9XG4gICAgJi50ZXh0RGVjb3JhdGlvbi1ibGluayB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd3b3JkQnJlYWstJ10ge1xuICAgICYud29yZEJyZWFrLW5vcm1hbCB7XG4gICAgICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWJyZWFrQWxsIHtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICB9XG4gICAgJi53b3JkQnJlYWstYnJlYWtXb3JkIHtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWtlZXBBbGwge1xuICAgICAgd29yZC1icmVhazoga2VlcC1hbGw7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWtlZXBXb3JkIHtcbiAgICAgIHdvcmQtYnJlYWs6IGtlZXAtd29yZDtcbiAgICB9XG4gICAgJi53b3JkQnJlYWstYnJlYWtTcGFjZXMge1xuICAgICAgd29yZC1icmVhazogYnJlYWstc3BhY2VzO1xuICAgIH1cbiAgICAmLndvcmRCcmVhay1hbGwge1xuICAgICAgd29yZC1icmVhazogYWxsO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd3aGl0ZVNwYWNlLSddIHtcbiAgICAmLndoaXRlU3BhY2Utbm9ybWFsIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgfVxuICAgICYud2hpdGVTcGFjZS1ub3dyYXAge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgJi53aGl0ZVNwYWNlLXByZSB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIH1cbiAgICAmLndoaXRlU3BhY2UtcHJlTGluZSB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG4gICAgfVxuICAgICYud2hpdGVTcGFjZS1wcmVXcmFwIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICB9XG4gIH1cblxuICAmW2NsYXNzKj0nY29sb3ItJ10ge1xuICAgICYuY29sb3ItYmxhY2sge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xuICAgIH1cbiAgICAmLmNvbG9yLXdoaXRlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5RmEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mYSk7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheUY0IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXlFNCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0KTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5RDQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheUExIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXk3MSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxKTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5NTIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS01Mik7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheTNmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktM2YpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXkyNyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTI3KTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5MTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0xOCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRjQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1mNCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRTkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1lOSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRGQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1kZCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlQzMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1jMyk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlQTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1hOCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlOTUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS05NSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS02Zik7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNGMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00Yyk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00MSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlMzkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkRmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZEZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mZmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZEZiIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWRGMyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mMyk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkRTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZTgpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZERmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWRDOSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1jOSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkQjAge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtYjApO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZDhmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLThmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWQ2ZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC02ZSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UGlua0ZmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcGluay1mZik7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UGlua0ZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRmQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZkKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRjQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWY0KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRDkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWQ5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rQjkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWI5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rOTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLTkzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rNmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLTZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRmMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRjgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWY4KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRjIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWYyKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRTEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWUxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhQzgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWM4KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhQTkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWE5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhODMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTgzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhNWUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTVlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlRjEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWYxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlRTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWUzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlQzcge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWM3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlQTUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWE1KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlODEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTgxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMjUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTI1KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMTYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTE2KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50RWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50RDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWQxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50QTcge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWE3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50NmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MmQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTJkKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTAxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MGIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTBiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MGYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTBmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MTEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTExKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTEzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbkVjIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tZWMpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuRDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi1kMSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW5BNyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLWE3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tNmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuNDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi00MSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW4yMiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTIyKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjE2IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMjgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0yOCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW4xNjYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNjYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMTQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmMpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZiIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZmIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dFMCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1lMCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93QjUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctYjUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvdzhhIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LThhKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3c1ZiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy01Zik7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmIpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUY5IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWY5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VFYSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1lYSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlQzIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtYzIpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZTlhIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLTlhKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2U3YyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS03Yyk7XG4gICAgfVxuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMv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QztJQUNyQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0UscUNBQXFDO0lBQ3ZDO0lBQ0E7TUFDRSxxQ0FBcUM7SUFDdkM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0UscUNBQXFDO0lBQ3ZDO0lBQ0E7TUFDRSxxQ0FBcUM7SUFDdkM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0UscUNBQXFDO0lBQ3ZDO0lBQ0E7TUFDRSxxQ0FBcUM7SUFDdkM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxtQ0FBbUM7SUFDckM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxtQ0FBbUM7SUFDckM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLXRleHQge1xcbiAgJjp3aGVyZSgueHNtKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xcbiAgfVxcbiAgJjp3aGVyZSguc20pIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgfVxcbiAgJjp3aGVyZSguYmFzZSkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWJhc2UpO1xcbiAgfVxcbiAgJjp3aGVyZSgubGcpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGcpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtbGcpO1xcbiAgfVxcbiAgJjp3aGVyZSgueGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteGwpO1xcbiAgfVxcbiAgJjp3aGVyZSgudC0yeGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMnhsKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTJ4bCk7XFxuICB9XFxuICAmOndoZXJlKC50LTN4bCkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0zeGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtM3hsKTtcXG4gIH1cXG4gICY6d2hlcmUoLnQtNHhsKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTR4bCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC00eGwpO1xcbiAgfVxcbiAgJjp3aGVyZSgudC01eGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtNXhsKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTV4bCk7XFxuICB9XFxuICAmOndoZXJlKC50LTZ4bCkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS02eGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtNnhsKTtcXG4gIH1cXG5cXG4gICY6d2hlcmUoLnJlZ3VsYXIpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xcbiAgfVxcbiAgJjp3aGVyZSgubWVkaXVtKSB7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbiAgfVxcbiAgJjp3aGVyZSguc2VtaWJvbGQpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG4gICY6d2hlcmUoLmJvbGQpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbiAgfVxcbiAgJjp3aGVyZSguZXh0cmFib2xkKSB7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1leHRyYWJvbGQpO1xcbiAgfVxcblxcbiAgJltjbGFzcyo9J3RleHRBbGlnbi0nXSB7XFxuICAgICYudGV4dEFsaWduLWxlZnQge1xcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIH1cXG4gICAgJi50ZXh0QWxpZ24tY2VudGVyIHtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd0ZXh0RGVjb3JhdGlvbi0nXSB7XFxuICAgICYudGV4dERlY29yYXRpb24tdW5kZXJsaW5lIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLW5vbmUge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLWxpbmVUaHJvdWdoIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLW92ZXJsaW5lIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lO1xcbiAgICB9XFxuICAgICYudGV4dERlY29yYXRpb24tYmxpbmsge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd3b3JkQnJlYWstJ10ge1xcbiAgICAmLndvcmRCcmVhay1ub3JtYWwge1xcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1icmVha0FsbCB7XFxuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xcbiAgICB9XFxuICAgICYud29yZEJyZWFrLWJyZWFrV29yZCB7XFxuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1rZWVwQWxsIHtcXG4gICAgICB3b3JkLWJyZWFrOiBrZWVwLWFsbDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1rZWVwV29yZCB7XFxuICAgICAgd29yZC1icmVhazoga2VlcC13b3JkO1xcbiAgICB9XFxuICAgICYud29yZEJyZWFrLWJyZWFrU3BhY2VzIHtcXG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1zcGFjZXM7XFxuICAgIH1cXG4gICAgJi53b3JkQnJlYWstYWxsIHtcXG4gICAgICB3b3JkLWJyZWFrOiBhbGw7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd3aGl0ZVNwYWNlLSddIHtcXG4gICAgJi53aGl0ZVNwYWNlLW5vcm1hbCB7XFxuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgfVxcbiAgICAmLndoaXRlU3BhY2Utbm93cmFwIHtcXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB9XFxuICAgICYud2hpdGVTcGFjZS1wcmUge1xcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XFxuICAgIH1cXG4gICAgJi53aGl0ZVNwYWNlLXByZUxpbmUge1xcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcXG4gICAgfVxcbiAgICAmLndoaXRlU3BhY2UtcHJlV3JhcCB7XFxuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgICB9XFxuICB9XFxuXFxuICAmW2NsYXNzKj0nY29sb3ItJ10ge1xcbiAgICAmLmNvbG9yLWJsYWNrIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XFxuICAgIH1cXG4gICAgJi5jb2xvci13aGl0ZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheUZhIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWZhKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXlGNCB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5RTQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZTQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheUQ0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXlBMSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5NzEge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktNzEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheTUyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTUyKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXkzZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5Mjcge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktMjcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheTE4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTE4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUY0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWY0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUU5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWU5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZURkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWRkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUMzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWMzKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUE4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWE4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTk1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTk1KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTZmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTRjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTRjKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTM5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWRGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWZmZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWRGYiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkRjMge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWYzKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEU4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1lOCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWREZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkQzkge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWM5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEIwIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1iMCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWQ4ZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtOGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkNmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLTZlKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFBpbmtGZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFBpbmtGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcGluay1mZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0ZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0ZkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0Y0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZjQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0VjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0Q5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZDkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0I5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstYjkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGluazkzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstOTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGluazZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstNmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUZjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUY4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjgpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUYyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUVjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUUxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUM4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYzgpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUE5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYTkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YTgzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YTVlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtNWUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUYxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtZjEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUUzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtZTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUM3IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtYzcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUE1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtYTUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTgxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtODEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTI1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMjUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTE2IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMTYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEVjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtZDEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEE3IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtYTcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtNmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDJkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMmQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDAxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMDEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDBiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMGIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDBmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDExIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMTEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDEzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW5FYyB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi1lYyk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbkQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLWQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuQTcge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW42ZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi02ZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMjIge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW4xNiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjI4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTI4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMTY2IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTE2Nik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjE0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTE0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mYyk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGYiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmZiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RTAge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWUwKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0I1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1iNSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3c4YSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctOGEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93NWYge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LTVmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGOSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZjkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRWEge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWVhKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUMyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2U5YSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtOWEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlN2Mge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLTdjKTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5jb21wb25lbnQtbG9hZGluZy1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmxvYWRpbmctaW5kaWNhdG9yLXJpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG59XG5cbi5sb2FkaW5nLWluZGljYXRvci1zaW5nbGUtcmluZyB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogM3B4IHNvbGlkO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICAvKiDquLDrs7jqsJLsnYAgd2hpdGUsIOyDgeychOyXkOyEnCAtLXNwaW5uZXItYm9yZGVyLWNvbG9yIOyjvOyehSAqL1xuICBib3JkZXItY29sb3I6IHZhcigtLXNwaW5uZXItYm9yZGVyLWNvbG9yLCB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKSkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi8qIG50aC1jaGlsZCDsp4Dsl7DsnYAg6re464yA66GcIENTUyBvciDsnbjrnbzsnbgg7KSRIO2VmOuCmOunjCDsgqzsmqntlZzri6TrqbQsIOyVhOuemOuKlCDsoJzqsbAg6rCA64qlICjsp4DquIjsnYAg7J2465287J24IOyCrOyaqSDspJEpICovXG4vKlxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuNDVzOyB9XG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5OiAtMC4zczsgfVxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuMTVzOyB9XG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDQpIHsgYW5pbWF0aW9uLWRlbGF5OiAwczsgfVxuKi9cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsYUFBYTtFQUNiLFdBQVc7RUFDWCxZQUFZO0VBQ1osbUJBQW1CO0VBQ25CLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixXQUFXO0VBQ1gsWUFBWTtBQUNkOztBQUVBO0VBQ0Usc0JBQXNCO0VBQ3RCLGNBQWM7RUFDZCxrQkFBa0I7RUFDbEIsV0FBVztFQUNYLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsa0JBQWtCO0VBQ2xCLDhEQUE4RDtFQUM5RCwrQ0FBK0M7RUFDL0MseUdBQXlHO0FBQzNHOztBQUVBLHVFQUF1RTtBQUN2RTs7Ozs7Q0FLQzs7QUFFRDtFQUNFLEtBQUssdUJBQXVCLEVBQUU7RUFDOUIsT0FBTyx5QkFBeUIsRUFBRTtBQUNwQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuY29tcG9uZW50LWxvYWRpbmctY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmxvYWRpbmctaW5kaWNhdG9yLXJpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxufVxcblxcbi5sb2FkaW5nLWluZGljYXRvci1zaW5nbGUtcmluZyB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogM3B4IHNvbGlkO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XFxuICAvKiDquLDrs7jqsJLsnYAgd2hpdGUsIOyDgeychOyXkOyEnCAtLXNwaW5uZXItYm9yZGVyLWNvbG9yIOyjvOyehSAqL1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zcGlubmVyLWJvcmRlci1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSkpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4vKiBudGgtY2hpbGQg7KeA7Jew7J2AIOq3uOuMgOuhnCBDU1Mgb3Ig7J2465287J24IOykkSDtlZjrgpjrp4wg7IKs7Jqp7ZWc64uk66m0LCDslYTrnpjripQg7KCc6rGwIOqwgOuKpSAo7KeA6riI7J2AIOyduOudvOyduCDsgqzsmqkg7KSRKSAqL1xcbi8qXFxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuNDVzOyB9XFxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuM3M7IH1cXG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDMpIHsgYW5pbWF0aW9uLWRlbGF5OiAtMC4xNXM7IH1cXG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDQpIHsgYW5pbWF0aW9uLWRlbGF5OiAwczsgfVxcbiovXFxuXFxuQGtleWZyYW1lcyBsZHMtcmluZyB7XFxuICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XFxuICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLnJhZGlvIHtcbiAgJjp3aGVyZSgucmFkaW8tZ3JvdXApIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxNnB4O1xuICB9XG4gICY6d2hlcmUoLnJhZGlvLWJ1dHRvbikge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XG4gIH1cbiAgJjp3aGVyZSgucmFkaW8taW5kaWNhdG9yKSB7XG4gICAgd2lkdGg6IDhweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcbiAgfVxuICAmOndoZXJlKC5yYWRpby1sYWJlbCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XG4gIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9yYWRpby9yYWRpby1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsU0FBUztFQUNYO0VBQ0E7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiw4Q0FBOEM7RUFDaEQ7RUFDQTtJQUNFLFVBQVU7SUFDVixXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLDhDQUE4QztFQUNoRDtFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLHNDQUFzQztJQUN0QyxpQ0FBaUM7RUFDbkM7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIucmFkaW8ge1xcbiAgJjp3aGVyZSgucmFkaW8tZ3JvdXApIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiAxNnB4O1xcbiAgfVxcbiAgJjp3aGVyZSgucmFkaW8tYnV0dG9uKSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XFxuICB9XFxuICAmOndoZXJlKC5yYWRpby1pbmRpY2F0b3IpIHtcXG4gICAgd2lkdGg6IDhweDtcXG4gICAgaGVpZ2h0OiA4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gIH1cXG4gICY6d2hlcmUoLnJhZGlvLWxhYmVsKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1tb2RhbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZzogMzBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuXG4gICYubW9kYWwtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHotaW5kZXg6IDk5OTk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG4gIH1cblxuICAmLm1vZGFsLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIHotaW5kZXg6IDk5OTg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRhaW5lciB7XG4gICYuc2l6ZS1zIHtcbiAgICB3aWR0aDogNDAwcHg7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgd2lkdGg6IDQ1MHB4O1xuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIHdpZHRoOiA1MDBweDtcbiAgfVxufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24ge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAzMHB4O1xuXG4gICYucm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxNnB4O1xuXG4gICAgPiAqIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgfVxuICB9XG5cbiAgJi5jb2x1bW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTBweDtcblxuICAgID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLG1CQUFtQjs7RUFFbkIsYUFBYTtFQUNiLGtCQUFrQjs7RUFFbEI7SUFDRSxlQUFlO0lBQ2YsUUFBUTtJQUNSLFNBQVM7SUFDVCxnQ0FBZ0M7SUFDaEMsYUFBYTtJQUNiLDRDQUE0QztFQUM5Qzs7RUFFQTtJQUNFLGVBQWU7SUFDZixNQUFNO0lBQ04sT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1Qsb0NBQW9DO0lBQ3BDLGFBQWE7RUFDZjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxhQUFhO0VBQ2IsMkJBQTJCO0VBQzNCLG1CQUFtQjtFQUNuQixXQUFXO0FBQ2I7O0FBRUE7RUFDRTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDtBQUNGOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLDhCQUE4QjtFQUM5QixtQkFBbUI7RUFDbkIsU0FBUztFQUNULFdBQVc7RUFDWCxnQkFBZ0I7O0VBRWhCO0lBQ0UsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsU0FBUzs7SUFFVDtNQUNFLE9BQU87SUFDVDtFQUNGOztFQUVBO0lBQ0UsYUFBYTtJQUNiLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLFNBQVM7O0lBRVQ7TUFDRSxXQUFXO0lBQ2I7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLW1vZGFsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gIHBhZGRpbmc6IDMwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICAmLm1vZGFsLWNvbnRhaW5lciB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiA1MCU7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgIHotaW5kZXg6IDk5OTk7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgfVxcblxcbiAgJi5tb2RhbC1vdmVybGF5IHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBib3R0b206IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gICAgei1pbmRleDogOTk5ODtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBtb2RhbC13aXRoLWRvdWJsZS1idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jb250YWluZXIge1xcbiAgJi5zaXplLXMge1xcbiAgICB3aWR0aDogNDAwcHg7XFxuICB9XFxuXFxuICAmLnNpemUtbSB7XFxuICAgIHdpZHRoOiA0NTBweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDUwMHB4O1xcbiAgfVxcbn1cXG5cXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24ge1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcblxcbi5tb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbn1cXG5cXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxNnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAzMHB4O1xcblxcbiAgJi5yb3cge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAxNnB4O1xcblxcbiAgICA+ICoge1xcbiAgICAgIGZsZXg6IDE7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuY29sdW1uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMTBweDtcXG5cXG4gICAgPiAqIHtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS10aGVtZSB7XG4gIC0tY29sb3ItcHJpbWFyeS1ibGFjazogIzAwMDAwMDtcbiAgLS1jb2xvci1wcmltYXJ5LXdoaXRlOiAjZmZmZmZmO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS1mYTogI2ZhZmFmYTtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktZjQ6ICNmNGY0ZjU7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0OiAjZTRlNGU3O1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS1kNDogI2Q0ZDRkODtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktYTE6ICNhMWExYWE7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxOiAjNzE3MTdhO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS01MjogIzUyNTI1YjtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktM2Y6ICMzZjNmNDY7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTI3OiAjMjcyNzJhO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS0xODogIzE4MTgxYjtcblxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1mNDogI2Y0ZWZmYTtcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtZTk6ICNlOWUwZjU7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLWRkOiAjZGRkMWYwO1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1jMzogI2MzYjRkZDtcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtYTg6ICNhODk0Yzc7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTk1OiAjOTU3ZWI0O1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS02ZjogIzZmNTZhMztcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtNGM6ICM0YzI3N2M7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTQxOiAjNGMxZDg4O1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS0zOTogIzM5MWQ1ZDtcblxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmY6ICNmZmY1ZjY7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1mZmU6ICNmZmU4ZTk7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1mYjogI2ZiY2ZkMjtcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWYzOiAjZjM5YWEwO1xuICAtLWNvbG9yLWFjY2VudC1yZWQtZTg6ICNlODZmNzc7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1kZjogI2RmNTM1YztcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWM5OiAjYzk0NzUxO1xuICAtLWNvbG9yLWFjY2VudC1yZWQtYjA6ICNiMDJlNGM7XG4gIC0tY29sb3ItYWNjZW50LXJlZC04ZjogIzhmMjQzYTtcbiAgLS1jb2xvci1hY2NlbnQtcmVkLTZlOiAjNmUxYTJjO1xuXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmY6ICNmZmYxZjY7XG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmZlOiAjZmZlNGVlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWZlOiAjZmVjZmUzO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWZkOiAjZmRhNGNjO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWY0OiAjZjQ3MmI2O1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWVjOiAjZWM2ZmFlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWQ5OiAjZDk1ZDlhO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWI5OiAjYjk0YTdlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLTkzOiAjOTMzODVmO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLTZlOiAjNmUyNjQ0O1xuXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmU6ICNmZWYwZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmM6ICNmY2U0ZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjg6ICNmOGM2ZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjI6ICNmMjliZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZWM6ICNlYzVjZWY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTE6ICNlMTNiZTc7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYzg6ICNjODJmY2M7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYTk6ICNhOTIzYTg7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODM6ICM4MzFjODM7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtNWU6ICM1ZTE0NWU7XG5cbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1mMTogI2YxZjRmZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1lMzogI2UzZThmZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1jNzogI2M3ZDJmZTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1hNTogI2E1YjRmYztcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS04MTogIzgxOGNmODtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0yNTogIzI1NjNlYjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZjogIzFmNTJjOTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZTogIzFlNDBhZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xYzogIzFjMzQ4YTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xNjogIzE2Mjc2MztcblxuICAtLWNvbG9yLWFjY2VudC1taW50LWVjOiAjZWNmZWZkO1xuICAtLWNvbG9yLWFjY2VudC1taW50LWQxOiAjZDFmYWY3O1xuICAtLWNvbG9yLWFjY2VudC1taW50LWE3OiAjYTdmM2VlO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTZlOiAjNmVlN2UwO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTJkOiAjMmRkNGNiO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTAxOiAjMDFlY2UxO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTBiOiAjMGJjNWJjO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTBmOiAjMGY5Zjk5O1xuICAtLWNvbG9yLWFjY2VudC1taW50LTExOiAjMTE3ZDc4O1xuICAtLWNvbG9yLWFjY2VudC1taW50LTEzOiAjMTM1YzU4O1xuXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLWVjOiAjZWNmZGYzO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi1kMTogI2QxZmFlMTtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTc6ICNhN2YzYzg7XG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTZlOiAjNmVlN2EzO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi00MTogIzQxZTE3NjtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjI6ICMyMmM1NWU7XG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTE2OiAjMTZhMzRhO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0yODogIzI4OWEzYTtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTY2OiAjMTY2NTM0O1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0xNDogIzE0NTMyZDtcblxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmY6ICNmZmZiZWI7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy1mZTogI2ZlZjNjNztcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWZkOiAjZmRlNjhhO1xuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmM6ICNmY2QzNGQ7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy1mYjogI2ZiYmYyNDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWZmYjogI2ZmYjgwMDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWUwOiAjZTBhMTA2O1xuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctYjU6ICNiNTgxMDU7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy04YTogIzhhNjQwNDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LTVmOiAjNWY0NzAzO1xuXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZjogI2ZmZjdlZDtcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZTogI2ZmZWRkNTtcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZlOiAjZmVkN2FhO1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmQ6ICNmZGJhNzQ7XG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYjogI2ZiOTIzYztcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWY5OiAjZjk3MzE2O1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZWE6ICNlYTU4MGM7XG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMjogI2MyNDEwYztcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLTlhOiAjOWEzNDEyO1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtN2M6ICM3YzJkMTI7XG5cbiAgLS1jb2xvci1ldGMtc2tlbGV0b24tZTQ6ICMwZjBmMTc7XG4gIC0tY29sb3ItZXRjLXNrZWxldG9uLWY3OiAjZjdmN2Y4O1xuICAtLWNvbG9yLWV0Yy1za2VsZXRvbi1mZjogI2ZmZmZmZjtcblxuICAtLWNvbG9yLWV0Yy1ob3Zlci1lZTogI2VlZWVlZTtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Rva2VuL2NvbG9yLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDOztFQUVoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7O0VBRWhDLDhCQUE4QjtFQUM5QiwrQkFBK0I7RUFDL0IsOEJBQThCO0VBQzlCLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsOEJBQThCO0VBQzlCLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsOEJBQThCO0VBQzlCLDhCQUE4Qjs7RUFFOUIsK0JBQStCO0VBQy9CLGdDQUFnQztFQUNoQywrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCOztFQUUvQixrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7O0VBRWxDLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjs7RUFFL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCOztFQUUvQixnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGlDQUFpQztFQUNqQyxnQ0FBZ0M7O0VBRWhDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsa0NBQWtDO0VBQ2xDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQzs7RUFFakMsaUNBQWlDO0VBQ2pDLGtDQUFrQztFQUNsQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDOztFQUVqQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQzs7RUFFaEMsNkJBQTZCO0FBQy9CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLXRoZW1lIHtcXG4gIC0tY29sb3ItcHJpbWFyeS1ibGFjazogIzAwMDAwMDtcXG4gIC0tY29sb3ItcHJpbWFyeS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWZhOiAjZmFmYWZhO1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktZjQ6ICNmNGY0ZjU7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS1lNDogI2U0ZTRlNztcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0OiAjZDRkNGQ4O1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktYTE6ICNhMWExYWE7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS03MTogIzcxNzE3YTtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTUyOiAjNTI1MjViO1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktM2Y6ICMzZjNmNDY7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS0yNzogIzI3MjcyYTtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTE4OiAjMTgxODFiO1xcblxcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtZjQ6ICNmNGVmZmE7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1lOTogI2U5ZTBmNTtcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLWRkOiAjZGRkMWYwO1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtYzM6ICNjM2I0ZGQ7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1hODogI2E4OTRjNztcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTk1OiAjOTU3ZWI0O1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtNmY6ICM2ZjU2YTM7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS00YzogIzRjMjc3YztcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTQxOiAjNGMxZDg4O1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtMzk6ICMzOTFkNWQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmY6ICNmZmY1ZjY7XFxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmZlOiAjZmZlOGU5O1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWZiOiAjZmJjZmQyO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWYzOiAjZjM5YWEwO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWU4OiAjZTg2Zjc3O1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWRmOiAjZGY1MzVjO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWM5OiAjYzk0NzUxO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWIwOiAjYjAyZTRjO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLThmOiAjOGYyNDNhO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLTZlOiAjNmUxYTJjO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtcGluay1mZjogI2ZmZjFmNjtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmZlOiAjZmZlNGVlO1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay1mZTogI2ZlY2ZlMztcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmQ6ICNmZGE0Y2M7XFxuICAtLWNvbG9yLWFjY2VudC1waW5rLWY0OiAjZjQ3MmI2O1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay1lYzogI2VjNmZhZTtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZDk6ICNkOTVkOWE7XFxuICAtLWNvbG9yLWFjY2VudC1waW5rLWI5OiAjYjk0YTdlO1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay05MzogIzkzMzg1ZjtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstNmU6ICM2ZTI2NDQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZlOiAjZmVmMGZmO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1mYzogI2ZjZTRmZjtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjg6ICNmOGM2ZmY7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWYyOiAjZjI5YmZmO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1lYzogI2VjNWNlZjtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTE6ICNlMTNiZTc7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWM4OiAjYzgyZmNjO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1hOTogI2E5MjNhODtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODM6ICM4MzFjODM7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTVlOiAjNWUxNDVlO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1mMTogI2YxZjRmZjtcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtZTM6ICNlM2U4ZmY7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLWM3OiAjYzdkMmZlO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1hNTogI2E1YjRmYztcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtODE6ICM4MThjZjg7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLTI1OiAjMjU2M2ViO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZjogIzFmNTJjOTtcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtMWU6ICMxZTQwYWY7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLTFjOiAjMWMzNDhhO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xNjogIzE2Mjc2MztcXG5cXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtZWM6ICNlY2ZlZmQ7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LWQxOiAjZDFmYWY3O1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC1hNzogI2E3ZjNlZTtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtNmU6ICM2ZWU3ZTA7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LTJkOiAjMmRkNGNiO1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC0wMTogIzAxZWNlMTtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtMGI6ICMwYmM1YmM7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LTBmOiAjMGY5Zjk5O1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC0xMTogIzExN2Q3ODtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtMTM6ICMxMzVjNTg7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi1lYzogI2VjZmRmMztcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLWQxOiAjZDFmYWUxO1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTc6ICNhN2YzYzg7XFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi02ZTogIzZlZTdhMztcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTQxOiAjNDFlMTc2O1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjI6ICMyMmM1NWU7XFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0xNjogIzE2YTM0YTtcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTI4OiAjMjg5YTNhO1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTY2OiAjMTY2NTM0O1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTQ6ICMxNDUzMmQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmY6ICNmZmZiZWI7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmU6ICNmZWYzYzc7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmQ6ICNmZGU2OGE7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmM6ICNmY2QzNGQ7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmI6ICNmYmJmMjQ7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmZiOiAjZmZiODAwO1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWUwOiAjZTBhMTA2O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWI1OiAjYjU4MTA1O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LThhOiAjOGE2NDA0O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LTVmOiAjNWY0NzAzO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmOiAjZmZmN2VkO1xcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZTogI2ZmZWRkNTtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZTogI2ZlZDdhYTtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZDogI2ZkYmE3NDtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYjogI2ZiOTIzYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mOTogI2Y5NzMxNjtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1lYTogI2VhNTgwYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMjogI2MyNDEwYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS05YTogIzlhMzQxMjtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS03YzogIzdjMmQxMjtcXG5cXG4gIC0tY29sb3ItZXRjLXNrZWxldG9uLWU0OiAjMGYwZjE3O1xcbiAgLS1jb2xvci1ldGMtc2tlbGV0b24tZjc6ICNmN2Y3Zjg7XFxuICAtLWNvbG9yLWV0Yy1za2VsZXRvbi1mZjogI2ZmZmZmZjtcXG5cXG4gIC0tY29sb3ItZXRjLWhvdmVyLWVlOiAjZWVlZWVlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWRpc3BsYXktZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5udXJpLWRpc3BsYXktaW5saW5lLWZsZXgge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cblxuLm51cmktZGlzcGxheS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubnVyaS1kaXNwbGF5LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLm51cmktZGlzcGxheS1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbn1cblxuLm51cmktZGlzcGxheS1pbmxpbmUtZ3JpZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ncmlkO1xufVxuXG4ubnVyaS1kaXNwbGF5LWNvbnRlbnRzIHtcbiAgZGlzcGxheTogY29udGVudHM7XG59XG5cbi5udXJpLWRpc3BsYXktbm9uZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9kaXNwbGF5LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxhQUFhO0FBQ2ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLm51cmktZGlzcGxheS1mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWZsZXgge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcblxcbi5udXJpLWRpc3BsYXktYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm51cmktZGlzcGxheS1ncmlkIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWdyaWQge1xcbiAgZGlzcGxheTogaW5saW5lLWdyaWQ7XFxufVxcblxcbi5udXJpLWRpc3BsYXktY29udGVudHMge1xcbiAgZGlzcGxheTogY29udGVudHM7XFxufVxcblxcbi5udXJpLWRpc3BsYXktbm9uZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNDBweDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBhdHRyKGRhdGEtYmFja2dyb3VuZENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG4gIGNvbG9yOiBhdHRyKGRhdGEtdGV4dENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG4gIGJvcmRlcjogYXR0cihkYXRhLWJvcmRlckNvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG5cbiAgJi5zaXplLWwge1xuICAgIGhlaWdodDogNDhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1yIHtcbiAgICBoZWlnaHQ6IDM2cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLXMge1xuICAgIGhlaWdodDogMzJweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zbSB7XG4gICAgaGVpZ2h0OiAyOHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIH1cblxuICAmLmljb24tdGV4dC1vcHRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qIG9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4ub3B0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmljb24tdGV4dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDRweDtcblxuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogaWNvbi10ZXh0LW9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmljb24tdGV4dC1vcHRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgcGFkZGluZzogMCAyMHB4O1xuXG4gID4gc3BhbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsUUFBUTtFQUNSLG1CQUFtQjs7RUFFbkIsK0RBQStEO0VBQy9ELDhDQUE4QztFQUM5QyxpREFBaUQ7O0VBRWpEO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLG9DQUFvQztFQUN0Qzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosK0JBQStCO0lBQy9CLG1DQUFtQztJQUNuQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4Qjs7SUFFOUIsZUFBZTtFQUNqQjtBQUNGOztBQUVBOzs7O21HQUltRzs7QUFFbkc7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1Qjs7RUFFdkIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsUUFBUTs7RUFFUixpQkFBaUI7RUFDakIsbUJBQW1CO0FBQ3JCOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDhCQUE4Qjs7RUFFOUIsZUFBZTs7RUFFZjtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsUUFBUTtFQUNWO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYmFkZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHg7XFxuXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBhdHRyKGRhdGEtYmFja2dyb3VuZENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XFxuICBjb2xvcjogYXR0cihkYXRhLXRleHRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xcbiAgYm9yZGVyOiBhdHRyKGRhdGEtYm9yZGVyQ29sb3IgY29sb3IsIHRyYW5zcGFyZW50KTtcXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgaGVpZ2h0OiA0OHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtbSB7XFxuICAgIGhlaWdodDogNDBweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLXIge1xcbiAgICBoZWlnaHQ6IDM2cHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgaGVpZ2h0OiAzMnB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zbSB7XFxuICAgIGhlaWdodDogMjhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuaWNvbi10ZXh0LW9wdGlvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG5cXG4gICAgcGFkZGluZzogMCAyMHB4O1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblxcbi5vcHRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uaWNvbi10ZXh0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG5cXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBpY29uLXRleHQtb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmljb24tdGV4dC1vcHRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFxuICBwYWRkaW5nOiAwIDIwcHg7XFxuXFxuICA+IHNwYW4ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2NvbG9yLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2ZvbnQuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdG9rZW4vcmFkaXVzLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2N1cnNvci5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9yZXNldC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9kaXNwbGF5LmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Bvc2l0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfN19fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZsZXgtZGlyZWN0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOF9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FsaWduLWl0ZW1zLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2p1c3RpZnktY29udGVudC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzEwX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vb3ZlcmZsb3cuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXItc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTNfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2stYm94LXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9lbGVtZW50cy90ZXh0L3RleHQtc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xNl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTdfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9sb2FkaW5nL2lubGluZS1sb2FkaW5nL2lubGluZS1sb2FkaW5nLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMThfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xOV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL21vZGFsL21vZGFsLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjBfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9yYWRpby9yYWRpby1zdHlsZS5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIxX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUtc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yMl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL3RleHQtZmllbGQvdGV4dC1maWVsZC1zdHlsZS5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIzX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9jb2xsYXBzaWJsZS1tZW51L2NvbGxhcHNpYmxlLW1lbnUtc3R5bGUuY3NzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfN19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTBfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzExX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTNfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzE0X19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xNV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTZfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzE3X19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xOF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTlfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIwX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjJfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIzX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yNF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjVfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAvKiBUb2tlbiBzdHlsZXMgKi9cblxuLyogUmVzZXQgc3R5bGVzICovXG5cbi8qIFV0aWxpdHkgc3R5bGVzICovXG5cbi8qIENvbXBvbmVudCBzdHlsZXMgKi9gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9pbmRleC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsaUJBQWlCOztBQU1qQixpQkFBaUI7O0FBR2pCLG1CQUFtQjs7QUFRbkIscUJBQXFCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIFRva2VuIHN0eWxlcyAqL1xcbkBpbXBvcnQgJy4vdG9rZW4vY29sb3IuY3NzJztcXG5AaW1wb3J0ICcuL3Rva2VuL2ZvbnQuY3NzJztcXG5AaW1wb3J0ICcuL3Rva2VuL3JhZGl1cy5jc3MnO1xcbkBpbXBvcnQgJy4vdG9rZW4vY3Vyc29yLmNzcyc7XFxuXFxuLyogUmVzZXQgc3R5bGVzICovXFxuQGltcG9ydCAnLi9yZXNldC5jc3MnO1xcblxcbi8qIFV0aWxpdHkgc3R5bGVzICovXFxuQGltcG9ydCAnLi9kaXNwbGF5LmNzcyc7XFxuQGltcG9ydCAnLi9wb3NpdGlvbi5jc3MnO1xcbkBpbXBvcnQgJy4vZmxleC1kaXJlY3Rpb24uY3NzJztcXG5AaW1wb3J0ICcuL2FsaWduLWl0ZW1zLmNzcyc7XFxuQGltcG9ydCAnLi9qdXN0aWZ5LWNvbnRlbnQuY3NzJztcXG5AaW1wb3J0ICcuL292ZXJmbG93LmNzcyc7XFxuXFxuLyogQ29tcG9uZW50IHN0eWxlcyAqL1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24tc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2NoZWNrLWJveC9jaGVjay1ib3gtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2VsZW1lbnRzL3RleHQvdGV4dC1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2xvYWRpbmcvaW5saW5lLWxvYWRpbmcvaW5saW5lLWxvYWRpbmctc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2xvYWRpbmcvb3ZlcmxheS1sb2FkaW5nL292ZXJsYXktbG9hZGluZy1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLXN0eWxlLmNzcyc7XFxuQGltcG9ydCAnLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvdGV4dC1maWVsZC90ZXh0LWZpZWxkLXN0eWxlLmNzcyc7XFxuQGltcG9ydCAnLi4vY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2NvbGxhcHNpYmxlLW1lbnUvY29sbGFwc2libGUtbWVudS1zdHlsZS5jc3MnO1wiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2luZGV4LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanMhLi9pbmRleC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCIiLCJjb25zdCBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcbiAgbGV0IGNsYXNzZXMgPSAnJztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAoYXJnKSB7XG4gICAgICBjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcztcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZShhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuICB9XG5cbiAgaWYgKFxuICAgIGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJlxuICAgICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpXG4gICkge1xuICAgIHJldHVybiBhcmcudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGxldCBjbGFzc2VzID0gJyc7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gYXJnKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuICAgICAgY2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzKHZhbHVlLCBuZXdDbGFzcykge1xuICBpZiAoIW5ld0NsYXNzKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUgKyAnICcgKyBuZXdDbGFzcyA6IG5ld0NsYXNzO1xufVxuXG5leHBvcnQgeyBjbGFzc05hbWVzIH07XG4iLCJleHBvcnQgdmFyIGNvbG9ycyA9IHtcbiAgICB0cmFuc3BhcmVudDogJ3RyYW5zcGFyZW50JyxcbiAgICBibGFjazogJyMwMDAwMDAnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgZ3JheUZhOiAnI2ZhZmFmYScsXG4gICAgZ3JheUY0OiAnI2Y0ZjRmNScsXG4gICAgZ3JheUU0OiAnI2U0ZTRlNycsXG4gICAgZ3JheUQ0OiAnI2Q0ZDRkOCcsXG4gICAgZ3JheUExOiAnI2ExYTFhYScsXG4gICAgZ3JheTcxOiAnIzcxNzE3YScsXG4gICAgZ3JheTUyOiAnIzUyNTI1YicsXG4gICAgZ3JheTNmOiAnIzNmM2Y0NicsXG4gICAgZ3JheTI3OiAnIzI3MjcyYScsXG4gICAgZ3JheTE4OiAnIzE4MTgxYicsXG4gICAgcHVycGxlRjQ6ICcjZjRlZmZhJyxcbiAgICBwdXJwbGVFOTogJyNlOWUwZjUnLFxuICAgIHB1cnBsZURkOiAnI2RkZDFmMCcsXG4gICAgcHVycGxlQzM6ICcjYzNiNGRkJyxcbiAgICBwdXJwbGVBODogJyNhODk0YzcnLFxuICAgIHB1cnBsZTk1OiAnIzk1N2ViNCcsXG4gICAgcHVycGxlNmY6ICcjNmY1NmEzJyxcbiAgICBwdXJwbGU0YzogJyM0YzI3N2MnLFxuICAgIHB1cnBsZTQxOiAnIzRjMWQ4OCcsXG4gICAgcHVycGxlMzk6ICcjMzkxZDVkJyxcbiAgICBhY2NlbnRSZWRGZjogJyNmZmY1ZjYnLFxuICAgIGFjY2VudFJlZEZmZTogJyNmZmU4ZTknLFxuICAgIGFjY2VudFJlZEZiOiAnI2ZiY2ZkMicsXG4gICAgYWNjZW50UmVkRjM6ICcjZjM5YWEwJyxcbiAgICBhY2NlbnRSZWRFODogJyNlODZmNzcnLFxuICAgIGFjY2VudFJlZERmOiAnI2RmNTM1YycsXG4gICAgYWNjZW50UmVkQzk6ICcjYzk0NzUxJyxcbiAgICBhY2NlbnRSZWRCMDogJyNiMDJlNGMnLFxuICAgIGFjY2VudFJlZDhmOiAnIzhmMjQzYScsXG4gICAgYWNjZW50UmVkNmU6ICcjNmUxYTJjJyxcbiAgICBhY2NlbnRQaW5rRmY6ICcjZmZmMWY2JyxcbiAgICBhY2NlbnRQaW5rRmZlOiAnI2ZmZTRlZScsXG4gICAgYWNjZW50UGlua0ZlOiAnI2ZlY2ZlMycsXG4gICAgYWNjZW50UGlua0ZkOiAnI2ZkYTRjYycsXG4gICAgYWNjZW50UGlua0Y0OiAnI2Y0NzJiNicsXG4gICAgYWNjZW50UGlua0VjOiAnI2VjNmZhZScsXG4gICAgYWNjZW50UGlua0Q5OiAnI2Q5NWQ5YScsXG4gICAgYWNjZW50UGlua0I5OiAnI2I5NGE3ZScsXG4gICAgYWNjZW50UGluazkzOiAnIzkzMzg1ZicsXG4gICAgYWNjZW50UGluazZlOiAnIzZlMjY0NCcsXG4gICAgYWNjZW50TWFnZW50YUZlOiAnI2ZlZjBmZicsXG4gICAgYWNjZW50TWFnZW50YUZjOiAnI2ZjZTRmZicsXG4gICAgYWNjZW50TWFnZW50YUY4OiAnI2Y4YzZmZicsXG4gICAgYWNjZW50TWFnZW50YUYyOiAnI2YyOWJmZicsXG4gICAgYWNjZW50TWFnZW50YUVjOiAnI2VjNWNlZicsXG4gICAgYWNjZW50TWFnZW50YUUxOiAnI2UxM2JlNycsXG4gICAgYWNjZW50TWFnZW50YUM4OiAnI2M4MmZjYycsXG4gICAgYWNjZW50TWFnZW50YUE5OiAnI2E5MjNhOCcsXG4gICAgYWNjZW50TWFnZW50YTgzOiAnIzgzMWM4MycsXG4gICAgYWNjZW50TWFnZW50YTVlOiAnIzVlMTQ1ZScsXG4gICAgYWNjZW50Qmx1ZUYxOiAnI2YxZjRmZicsXG4gICAgYWNjZW50Qmx1ZUUzOiAnI2UzZThmZicsXG4gICAgYWNjZW50Qmx1ZUM3OiAnI2M3ZDJmZScsXG4gICAgYWNjZW50Qmx1ZUE1OiAnI2E1YjRmYycsXG4gICAgYWNjZW50Qmx1ZTgxOiAnIzgxOGNmOCcsXG4gICAgYWNjZW50Qmx1ZTI1OiAnIzI1NjNlYicsXG4gICAgYWNjZW50Qmx1ZTFmOiAnIzFmNTJjOScsXG4gICAgYWNjZW50Qmx1ZTFlOiAnIzFlNDBhZicsXG4gICAgYWNjZW50Qmx1ZTFjOiAnIzFjMzQ4YScsXG4gICAgYWNjZW50Qmx1ZTE2OiAnIzE2Mjc2MycsXG4gICAgYWNjZW50TWludEVjOiAnI2VjZmVmZCcsXG4gICAgYWNjZW50TWludEQxOiAnI2QxZmFmNycsXG4gICAgYWNjZW50TWludEE3OiAnI2E3ZjNlZScsXG4gICAgYWNjZW50TWludDZlOiAnIzZlZTdlMCcsXG4gICAgYWNjZW50TWludDJkOiAnIzJkZDRjYicsXG4gICAgYWNjZW50TWludDAxOiAnIzAxZWNlMScsXG4gICAgYWNjZW50TWludDBiOiAnIzBiYzViYycsXG4gICAgYWNjZW50TWludDBmOiAnIzBmOWY5OScsXG4gICAgYWNjZW50TWludDExOiAnIzExN2Q3OCcsXG4gICAgYWNjZW50TWludDEzOiAnIzEzNWM1OCcsXG4gICAgYWNjZW50R3JlZW5FYzogJyNlY2ZkZjMnLFxuICAgIGFjY2VudEdyZWVuRDE6ICcjZDFmYWUxJyxcbiAgICBhY2NlbnRHcmVlbkE3OiAnI2E3ZjNjOCcsXG4gICAgYWNjZW50R3JlZW42ZTogJyM2ZWU3YTMnLFxuICAgIGFjY2VudEdyZWVuNDE6ICcjNDFlMTc2JyxcbiAgICBhY2NlbnRHcmVlbjIyOiAnIzIyYzU1ZScsXG4gICAgYWNjZW50R3JlZW4xNjogJyMxNmEzNGEnLFxuICAgIGFjY2VudEdyZWVuMjg6ICcjMjg5YTNhJyxcbiAgICBhY2NlbnRHcmVlbjE2NjogJyMxNjY1MzQnLFxuICAgIGFjY2VudEdyZWVuMTQ6ICcjMTQ1MzJkJyxcbiAgICBhY2NlbnRZZWxsb3dGZjogJyNmZmZiZWInLFxuICAgIGFjY2VudFllbGxvd0ZlOiAnI2ZlZjNjNycsXG4gICAgYWNjZW50WWVsbG93RmQ6ICcjZmRlNjhhJyxcbiAgICBhY2NlbnRZZWxsb3dGYzogJyNmY2QzNGQnLFxuICAgIGFjY2VudFllbGxvd0ZiOiAnI2ZiYmYyNCcsXG4gICAgYWNjZW50WWVsbG93RmZiOiAnI2ZmYjgwMCcsXG4gICAgYWNjZW50WWVsbG93RTA6ICcjZTBhMTA2JyxcbiAgICBhY2NlbnRZZWxsb3dCNTogJyNiNTgxMDUnLFxuICAgIGFjY2VudFllbGxvdzhhOiAnIzhhNjQwNCcsXG4gICAgYWNjZW50WWVsbG93NWY6ICcjNWY0NzAzJyxcbiAgICBhY2NlbnRPcmFuZ2VGZjogJyNmZmY3ZWQnLFxuICAgIGFjY2VudE9yYW5nZUZmZTogJyNmZmVkZDUnLFxuICAgIGFjY2VudE9yYW5nZUZlOiAnI2ZlZDdhYScsXG4gICAgYWNjZW50T3JhbmdlRmQ6ICcjZmRiYTc0JyxcbiAgICBhY2NlbnRPcmFuZ2VGYjogJyNmYjkyM2MnLFxuICAgIGFjY2VudE9yYW5nZUY5OiAnI2Y5NzMxNicsXG4gICAgYWNjZW50T3JhbmdlRWE6ICcjZWE1ODBjJyxcbiAgICBhY2NlbnRPcmFuZ2VDMjogJyNjMjQxMGMnLFxuICAgIGFjY2VudE9yYW5nZTlhOiAnIzlhMzQxMicsXG4gICAgYWNjZW50T3JhbmdlN2M6ICcjN2MyZDEyJyxcbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Rva2VuL2NvbG9ycyc7XG5mdW5jdGlvbiBnZXRNZXJnZWRQcm9wcyhwcm9wcywgcHJvcHNXaXRoVHlwZXMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICB2YXIgdGFyZ2V0UHJvcHMgPSBfX2Fzc2lnbih7fSwgcHJvcHMpO1xuICAgIHZhciBwcmV2Q2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBwcmV2U3R5bGUgPSBwcm9wcy5zdHlsZTtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gKF9iID0gKF9hID0gdGFyZ2V0UHJvcHNba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvcHNXaXRoVHlwZXNba2V5XS5kZWZhdWx0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvcFR5cGUgPSBwcm9wc1dpdGhUeXBlc1trZXldO1xuICAgICAgICBpZiAocHJvcFR5cGUudHlwZSA9PT0gJ2NsYXNzTmFtZScpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBwcm9wVHlwZS5jbGFzc05hbWUgKyAnLScgKyB2YWx1ZSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFR5cGUudHlwZSA9PT0gJ3N0eWxlJykge1xuICAgICAgICAgICAgcHJvcFR5cGUua2V5LmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHN0eWxlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVHlwZS50eXBlID09PSAnY3NzJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluIGNvbG9ycykge1xuICAgICAgICAgICAgICAgIHN0eWxlW3Byb3BUeXBlLmtleV0gPSBjb2xvcnNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbcHJvcFR5cGUua2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRQcm9wc1trZXldO1xuICAgIH07XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzV2l0aFR5cGVzKSB7XG4gICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCB0YXJnZXRQcm9wcyksIHsgc3R5bGU6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2U3R5bGUpLCBzdHlsZSksIGNsYXNzTmFtZTogW3ByZXZDbGFzc05hbWUsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB9KTtcbn1cbmV4cG9ydCB7IGdldE1lcmdlZFByb3BzIH07XG4iLCIvLyBwYWNrYWdlcy9yZWFjdC9jb21wb3NlLXJlZnMvc3JjL2NvbXBvc2UtcmVmcy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHZvaWQgMCkge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbXBvc2VSZWZzKC4uLnJlZnMpIHtcbiAgcmV0dXJuIChub2RlKSA9PiB7XG4gICAgbGV0IGhhc0NsZWFudXAgPSBmYWxzZTtcbiAgICBjb25zdCBjbGVhbnVwcyA9IHJlZnMubWFwKChyZWYpID0+IHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBzZXRSZWYocmVmLCBub2RlKTtcbiAgICAgIGlmICghaGFzQ2xlYW51cCAmJiB0eXBlb2YgY2xlYW51cCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaGFzQ2xlYW51cCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xlYW51cDtcbiAgICB9KTtcbiAgICBpZiAoaGFzQ2xlYW51cCkge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbnVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSBjbGVhbnVwc1tpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFJlZihyZWZzW2ldLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdXNlQ29tcG9zZWRSZWZzKC4uLnJlZnMpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGNvbXBvc2VSZWZzKC4uLnJlZnMpLCByZWZzKTtcbn1cbmV4cG9ydCB7XG4gIGNvbXBvc2VSZWZzLFxuICB1c2VDb21wb3NlZFJlZnNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvc2xvdC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9zZVJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgYXMgRnJhZ21lbnQyLCBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5mdW5jdGlvbiBjcmVhdGVTbG90KG93bmVyTmFtZSkge1xuICBjb25zdCBTbG90Q2xvbmUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlU2xvdENsb25lKG93bmVyTmFtZSk7XG4gIGNvbnN0IFNsb3QyID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNsb3RQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHNsb3R0YWJsZSA9IGNoaWxkcmVuQXJyYXkuZmluZChpc1Nsb3R0YWJsZSk7XG4gICAgaWYgKHNsb3R0YWJsZSkge1xuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHNsb3R0YWJsZS5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gY2hpbGRyZW5BcnJheS5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gc2xvdHRhYmxlKSB7XG4gICAgICAgICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KG5ld0VsZW1lbnQpID4gMSkgcmV0dXJuIFJlYWN0LkNoaWxkcmVuLm9ubHkobnVsbCk7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0VsZW1lbnQpID8gbmV3RWxlbWVudC5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNsb3RDbG9uZSwgeyAuLi5zbG90UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBjaGlsZHJlbjogUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3RWxlbWVudCkgPyBSZWFjdC5jbG9uZUVsZW1lbnQobmV3RWxlbWVudCwgdm9pZCAwLCBuZXdDaGlsZHJlbikgOiBudWxsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChTbG90Q2xvbmUsIHsgLi4uc2xvdFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiwgY2hpbGRyZW4gfSk7XG4gIH0pO1xuICBTbG90Mi5kaXNwbGF5TmFtZSA9IGAke293bmVyTmFtZX0uU2xvdGA7XG4gIHJldHVybiBTbG90Mjtcbn1cbnZhciBTbG90ID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZVNsb3QoXCJTbG90XCIpO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGNyZWF0ZVNsb3RDbG9uZShvd25lck5hbWUpIHtcbiAgY29uc3QgU2xvdENsb25lID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNsb3RQcm9wcyB9ID0gcHJvcHM7XG4gICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgY2hpbGRyZW5SZWYgPSBnZXRFbGVtZW50UmVmKGNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IHByb3BzMiA9IG1lcmdlUHJvcHMoc2xvdFByb3BzLCBjaGlsZHJlbi5wcm9wcyk7XG4gICAgICBpZiAoY2hpbGRyZW4udHlwZSAhPT0gUmVhY3QuRnJhZ21lbnQpIHtcbiAgICAgICAgcHJvcHMyLnJlZiA9IGZvcndhcmRlZFJlZiA/IGNvbXBvc2VSZWZzKGZvcndhcmRlZFJlZiwgY2hpbGRyZW5SZWYpIDogY2hpbGRyZW5SZWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBwcm9wczIpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID4gMSA/IFJlYWN0LkNoaWxkcmVuLm9ubHkobnVsbCkgOiBudWxsO1xuICB9KTtcbiAgU2xvdENsb25lLmRpc3BsYXlOYW1lID0gYCR7b3duZXJOYW1lfS5TbG90Q2xvbmVgO1xuICByZXR1cm4gU2xvdENsb25lO1xufVxudmFyIFNMT1RUQUJMRV9JREVOVElGSUVSID0gU3ltYm9sKFwicmFkaXguc2xvdHRhYmxlXCIpO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGNyZWF0ZVNsb3R0YWJsZShvd25lck5hbWUpIHtcbiAgY29uc3QgU2xvdHRhYmxlMiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudDIsIHsgY2hpbGRyZW4gfSk7XG4gIH07XG4gIFNsb3R0YWJsZTIuZGlzcGxheU5hbWUgPSBgJHtvd25lck5hbWV9LlNsb3R0YWJsZWA7XG4gIFNsb3R0YWJsZTIuX19yYWRpeElkID0gU0xPVFRBQkxFX0lERU5USUZJRVI7XG4gIHJldHVybiBTbG90dGFibGUyO1xufVxudmFyIFNsb3R0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVTbG90dGFibGUoXCJTbG90dGFibGVcIik7XG5mdW5jdGlvbiBpc1Nsb3R0YWJsZShjaGlsZCkge1xuICByZXR1cm4gUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHR5cGVvZiBjaGlsZC50eXBlID09PSBcImZ1bmN0aW9uXCIgJiYgXCJfX3JhZGl4SWRcIiBpbiBjaGlsZC50eXBlICYmIGNoaWxkLnR5cGUuX19yYWRpeElkID09PSBTTE9UVEFCTEVfSURFTlRJRklFUjtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoc2xvdFByb3BzLCBjaGlsZFByb3BzKSB7XG4gIGNvbnN0IG92ZXJyaWRlUHJvcHMgPSB7IC4uLmNoaWxkUHJvcHMgfTtcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBjaGlsZFByb3BzKSB7XG4gICAgY29uc3Qgc2xvdFByb3BWYWx1ZSA9IHNsb3RQcm9wc1twcm9wTmFtZV07XG4gICAgY29uc3QgY2hpbGRQcm9wVmFsdWUgPSBjaGlsZFByb3BzW3Byb3BOYW1lXTtcbiAgICBjb25zdCBpc0hhbmRsZXIgPSAvXm9uW0EtWl0vLnRlc3QocHJvcE5hbWUpO1xuICAgIGlmIChpc0hhbmRsZXIpIHtcbiAgICAgIGlmIChzbG90UHJvcFZhbHVlICYmIGNoaWxkUHJvcFZhbHVlKSB7XG4gICAgICAgIG92ZXJyaWRlUHJvcHNbcHJvcE5hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGlsZFByb3BWYWx1ZSguLi5hcmdzKTtcbiAgICAgICAgICBzbG90UHJvcFZhbHVlKC4uLmFyZ3MpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHNsb3RQcm9wVmFsdWUpIHtcbiAgICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBzbG90UHJvcFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcE5hbWUgPT09IFwic3R5bGVcIikge1xuICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSB7IC4uLnNsb3RQcm9wVmFsdWUsIC4uLmNoaWxkUHJvcFZhbHVlIH07XG4gICAgfSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gXCJjbGFzc05hbWVcIikge1xuICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBbc2xvdFByb3BWYWx1ZSwgY2hpbGRQcm9wVmFsdWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgLi4uc2xvdFByb3BzLCAuLi5vdmVycmlkZVByb3BzIH07XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50UmVmKGVsZW1lbnQpIHtcbiAgbGV0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudC5wcm9wcywgXCJyZWZcIik/LmdldDtcbiAgbGV0IG1heVdhcm4gPSBnZXR0ZXIgJiYgXCJpc1JlYWN0V2FybmluZ1wiIGluIGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmc7XG4gIGlmIChtYXlXYXJuKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucmVmO1xuICB9XG4gIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudCwgXCJyZWZcIik/LmdldDtcbiAgbWF5V2FybiA9IGdldHRlciAmJiBcImlzUmVhY3RXYXJuaW5nXCIgaW4gZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZztcbiAgaWYgKG1heVdhcm4pIHtcbiAgICByZXR1cm4gZWxlbWVudC5wcm9wcy5yZWY7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQucHJvcHMucmVmIHx8IGVsZW1lbnQucmVmO1xufVxuZXhwb3J0IHtcbiAgU2xvdCBhcyBSb290LFxuICBTbG90LFxuICBTbG90dGFibGUsXG4gIGNyZWF0ZVNsb3QsXG4gIGNyZWF0ZVNsb3R0YWJsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICdyYWRpeC11aSc7XG5leHBvcnQgdmFyIEJhc2VCYWRnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBwcm9wcy5hc0NoaWxkLCBhc0NoaWxkID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJhc0NoaWxkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl0pO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IFNsb3QuUm9vdCA6ICdkaXYnO1xuICAgIHJldHVybiAoX2pzeChDb21wLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWJhZGdlIFwiLmNvbmNhdChjbGFzc05hbWUgIT09IG51bGwgJiYgY2xhc3NOYW1lICE9PSB2b2lkIDAgPyBjbGFzc05hbWUgOiAnJykgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkpO1xufSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIHNpemUgPSBbJ3hsJywgJ2wnLCAnbScsICdzJ107XG52YXIgY29tbW9uQXZhdGFyUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG59O1xuZXhwb3J0IHZhciBhdmF0YXJQcm9wcyA9IF9fYXNzaWduKHt9LCBjb21tb25BdmF0YXJQcm9wcyk7XG4iLCIvLyBwYWNrYWdlcy9yZWFjdC9jb250ZXh0L3NyYy9jcmVhdGUtY29udGV4dC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0Mihyb290Q29tcG9uZW50TmFtZSwgZGVmYXVsdENvbnRleHQpIHtcbiAgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoZGVmYXVsdENvbnRleHQpO1xuICBjb25zdCBQcm92aWRlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLmNvbnRleHQgfSA9IHByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiBjb250ZXh0LCBPYmplY3QudmFsdWVzKGNvbnRleHQpKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbiB9KTtcbiAgfTtcbiAgUHJvdmlkZXIuZGlzcGxheU5hbWUgPSByb290Q29tcG9uZW50TmFtZSArIFwiUHJvdmlkZXJcIjtcbiAgZnVuY3Rpb24gdXNlQ29udGV4dDIoY29uc3VtZXJOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0O1xuICAgIGlmIChkZWZhdWx0Q29udGV4dCAhPT0gdm9pZCAwKSByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke2NvbnN1bWVyTmFtZX1cXGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcXGAke3Jvb3RDb21wb25lbnROYW1lfVxcYGApO1xuICB9XG4gIHJldHVybiBbUHJvdmlkZXIsIHVzZUNvbnRleHQyXTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRTY29wZShzY29wZU5hbWUsIGNyZWF0ZUNvbnRleHRTY29wZURlcHMgPSBbXSkge1xuICBsZXQgZGVmYXVsdENvbnRleHRzID0gW107XG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQzKHJvb3RDb21wb25lbnROYW1lLCBkZWZhdWx0Q29udGV4dCkge1xuICAgIGNvbnN0IEJhc2VDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChkZWZhdWx0Q29udGV4dCk7XG4gICAgY29uc3QgaW5kZXggPSBkZWZhdWx0Q29udGV4dHMubGVuZ3RoO1xuICAgIGRlZmF1bHRDb250ZXh0cyA9IFsuLi5kZWZhdWx0Q29udGV4dHMsIGRlZmF1bHRDb250ZXh0XTtcbiAgICBjb25zdCBQcm92aWRlciA9IChwcm9wcykgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4sIC4uLmNvbnRleHQgfSA9IHByb3BzO1xuICAgICAgY29uc3QgQ29udGV4dCA9IHNjb3BlPy5bc2NvcGVOYW1lXT8uW2luZGV4XSB8fCBCYXNlQ29udGV4dDtcbiAgICAgIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiBjb250ZXh0LCBPYmplY3QudmFsdWVzKGNvbnRleHQpKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWUsIGNoaWxkcmVuIH0pO1xuICAgIH07XG4gICAgUHJvdmlkZXIuZGlzcGxheU5hbWUgPSByb290Q29tcG9uZW50TmFtZSArIFwiUHJvdmlkZXJcIjtcbiAgICBmdW5jdGlvbiB1c2VDb250ZXh0Mihjb25zdW1lck5hbWUsIHNjb3BlKSB7XG4gICAgICBjb25zdCBDb250ZXh0ID0gc2NvcGU/LltzY29wZU5hbWVdPy5baW5kZXhdIHx8IEJhc2VDb250ZXh0O1xuICAgICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQ7XG4gICAgICBpZiAoZGVmYXVsdENvbnRleHQgIT09IHZvaWQgMCkgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke2NvbnN1bWVyTmFtZX1cXGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcXGAke3Jvb3RDb21wb25lbnROYW1lfVxcYGApO1xuICAgIH1cbiAgICByZXR1cm4gW1Byb3ZpZGVyLCB1c2VDb250ZXh0Ml07XG4gIH1cbiAgY29uc3QgY3JlYXRlU2NvcGUgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2NvcGVDb250ZXh0cyA9IGRlZmF1bHRDb250ZXh0cy5tYXAoKGRlZmF1bHRDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlQ29udGV4dChkZWZhdWx0Q29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNjb3BlKHNjb3BlKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHNjb3BlPy5bc2NvcGVOYW1lXSB8fCBzY29wZUNvbnRleHRzO1xuICAgICAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oXG4gICAgICAgICgpID0+ICh7IFtgX19zY29wZSR7c2NvcGVOYW1lfWBdOiB7IC4uLnNjb3BlLCBbc2NvcGVOYW1lXTogY29udGV4dHMgfSB9KSxcbiAgICAgICAgW3Njb3BlLCBjb250ZXh0c11cbiAgICAgICk7XG4gICAgfTtcbiAgfTtcbiAgY3JlYXRlU2NvcGUuc2NvcGVOYW1lID0gc2NvcGVOYW1lO1xuICByZXR1cm4gW2NyZWF0ZUNvbnRleHQzLCBjb21wb3NlQ29udGV4dFNjb3BlcyhjcmVhdGVTY29wZSwgLi4uY3JlYXRlQ29udGV4dFNjb3BlRGVwcyldO1xufVxuZnVuY3Rpb24gY29tcG9zZUNvbnRleHRTY29wZXMoLi4uc2NvcGVzKSB7XG4gIGNvbnN0IGJhc2VTY29wZSA9IHNjb3Blc1swXTtcbiAgaWYgKHNjb3Blcy5sZW5ndGggPT09IDEpIHJldHVybiBiYXNlU2NvcGU7XG4gIGNvbnN0IGNyZWF0ZVNjb3BlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlSG9va3MgPSBzY29wZXMubWFwKChjcmVhdGVTY29wZTIpID0+ICh7XG4gICAgICB1c2VTY29wZTogY3JlYXRlU2NvcGUyKCksXG4gICAgICBzY29wZU5hbWU6IGNyZWF0ZVNjb3BlMi5zY29wZU5hbWVcbiAgICB9KSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZUNvbXBvc2VkU2NvcGVzKG92ZXJyaWRlU2NvcGVzKSB7XG4gICAgICBjb25zdCBuZXh0U2NvcGVzID0gc2NvcGVIb29rcy5yZWR1Y2UoKG5leHRTY29wZXMyLCB7IHVzZVNjb3BlLCBzY29wZU5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBzY29wZVByb3BzID0gdXNlU2NvcGUob3ZlcnJpZGVTY29wZXMpO1xuICAgICAgICBjb25zdCBjdXJyZW50U2NvcGUgPSBzY29wZVByb3BzW2BfX3Njb3BlJHtzY29wZU5hbWV9YF07XG4gICAgICAgIHJldHVybiB7IC4uLm5leHRTY29wZXMyLCAuLi5jdXJyZW50U2NvcGUgfTtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7IFtgX19zY29wZSR7YmFzZVNjb3BlLnNjb3BlTmFtZX1gXTogbmV4dFNjb3BlcyB9KSwgW25leHRTY29wZXNdKTtcbiAgICB9O1xuICB9O1xuICBjcmVhdGVTY29wZS5zY29wZU5hbWUgPSBiYXNlU2NvcGUuc2NvcGVOYW1lO1xuICByZXR1cm4gY3JlYXRlU2NvcGU7XG59XG5leHBvcnQge1xuICBjcmVhdGVDb250ZXh0MiBhcyBjcmVhdGVDb250ZXh0LFxuICBjcmVhdGVDb250ZXh0U2NvcGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtY2FsbGJhY2stcmVmL3NyYy91c2UtY2FsbGJhY2stcmVmLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5mdW5jdGlvbiB1c2VDYWxsYmFja1JlZihjYWxsYmFjaykge1xuICBjb25zdCBjYWxsYmFja1JlZiA9IFJlYWN0LnVzZVJlZihjYWxsYmFjayk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNhbGxiYWNrO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gKC4uLmFyZ3MpID0+IGNhbGxiYWNrUmVmLmN1cnJlbnQ/LiguLi5hcmdzKSwgW10pO1xufVxuZXhwb3J0IHtcbiAgdXNlQ2FsbGJhY2tSZWZcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtbGF5b3V0LWVmZmVjdC9zcmMvdXNlLWxheW91dC1lZmZlY3QudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbnZhciB1c2VMYXlvdXRFZmZlY3QyID0gZ2xvYmFsVGhpcz8uZG9jdW1lbnQgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiAoKSA9PiB7XG59O1xuZXhwb3J0IHtcbiAgdXNlTGF5b3V0RWZmZWN0MiBhcyB1c2VMYXlvdXRFZmZlY3Rcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIiLCIvLyBzcmMvcHJpbWl0aXZlLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBjcmVhdGVTbG90IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1zbG90XCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBOT0RFUyA9IFtcbiAgXCJhXCIsXG4gIFwiYnV0dG9uXCIsXG4gIFwiZGl2XCIsXG4gIFwiZm9ybVwiLFxuICBcImgyXCIsXG4gIFwiaDNcIixcbiAgXCJpbWdcIixcbiAgXCJpbnB1dFwiLFxuICBcImxhYmVsXCIsXG4gIFwibGlcIixcbiAgXCJuYXZcIixcbiAgXCJvbFwiLFxuICBcInBcIixcbiAgXCJzZWxlY3RcIixcbiAgXCJzcGFuXCIsXG4gIFwic3ZnXCIsXG4gIFwidWxcIlxuXTtcbnZhciBQcmltaXRpdmUgPSBOT0RFUy5yZWR1Y2UoKHByaW1pdGl2ZSwgbm9kZSkgPT4ge1xuICBjb25zdCBTbG90ID0gY3JlYXRlU2xvdChgUHJpbWl0aXZlLiR7bm9kZX1gKTtcbiAgY29uc3QgTm9kZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IGFzQ2hpbGQsIC4uLnByaW1pdGl2ZVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiBub2RlO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3dbU3ltYm9sLmZvcihcInJhZGl4LXVpXCIpXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENvbXAsIHsgLi4ucHJpbWl0aXZlUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pO1xuICB9KTtcbiAgTm9kZS5kaXNwbGF5TmFtZSA9IGBQcmltaXRpdmUuJHtub2RlfWA7XG4gIHJldHVybiB7IC4uLnByaW1pdGl2ZSwgW25vZGVdOiBOb2RlIH07XG59LCB7fSk7XG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnQodGFyZ2V0LCBldmVudCkge1xuICBpZiAodGFyZ2V0KSBSZWFjdERPTS5mbHVzaFN5bmMoKCkgPT4gdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpKTtcbn1cbnZhciBSb290ID0gUHJpbWl0aXZlO1xuZXhwb3J0IHtcbiAgUHJpbWl0aXZlLFxuICBSb290LFxuICBkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdXNlLWlzLWh5ZHJhdGVkLnRzeFxuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tIFwidXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbVwiO1xuZnVuY3Rpb24gdXNlSXNIeWRyYXRlZCgpIHtcbiAgcmV0dXJuIHVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIHN1YnNjcmliZSxcbiAgICAoKSA9PiB0cnVlLFxuICAgICgpID0+IGZhbHNlXG4gICk7XG59XG5mdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gIH07XG59XG5leHBvcnQge1xuICB1c2VJc0h5ZHJhdGVkXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9hdmF0YXIudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyB1c2VJc0h5ZHJhdGVkIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtaXMtaHlkcmF0ZWRcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIEFWQVRBUl9OQU1FID0gXCJBdmF0YXJcIjtcbnZhciBbY3JlYXRlQXZhdGFyQ29udGV4dCwgY3JlYXRlQXZhdGFyU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKEFWQVRBUl9OQU1FKTtcbnZhciBbQXZhdGFyUHJvdmlkZXIsIHVzZUF2YXRhckNvbnRleHRdID0gY3JlYXRlQXZhdGFyQ29udGV4dChBVkFUQVJfTkFNRSk7XG52YXIgQXZhdGFyID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVBdmF0YXIsIC4uLmF2YXRhclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbaW1hZ2VMb2FkaW5nU3RhdHVzLCBzZXRJbWFnZUxvYWRpbmdTdGF0dXNdID0gUmVhY3QudXNlU3RhdGUoXCJpZGxlXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgQXZhdGFyUHJvdmlkZXIsXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBfX3Njb3BlQXZhdGFyLFxuICAgICAgICBpbWFnZUxvYWRpbmdTdGF0dXMsXG4gICAgICAgIG9uSW1hZ2VMb2FkaW5nU3RhdHVzQ2hhbmdlOiBzZXRJbWFnZUxvYWRpbmdTdGF0dXMsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5zcGFuLCB7IC4uLmF2YXRhclByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5BdmF0YXIuZGlzcGxheU5hbWUgPSBBVkFUQVJfTkFNRTtcbnZhciBJTUFHRV9OQU1FID0gXCJBdmF0YXJJbWFnZVwiO1xudmFyIEF2YXRhckltYWdlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVBdmF0YXIsIHNyYywgb25Mb2FkaW5nU3RhdHVzQ2hhbmdlID0gKCkgPT4ge1xuICAgIH0sIC4uLmltYWdlUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VBdmF0YXJDb250ZXh0KElNQUdFX05BTUUsIF9fc2NvcGVBdmF0YXIpO1xuICAgIGNvbnN0IGltYWdlTG9hZGluZ1N0YXR1cyA9IHVzZUltYWdlTG9hZGluZ1N0YXR1cyhzcmMsIGltYWdlUHJvcHMpO1xuICAgIGNvbnN0IGhhbmRsZUxvYWRpbmdTdGF0dXNDaGFuZ2UgPSB1c2VDYWxsYmFja1JlZigoc3RhdHVzKSA9PiB7XG4gICAgICBvbkxvYWRpbmdTdGF0dXNDaGFuZ2Uoc3RhdHVzKTtcbiAgICAgIGNvbnRleHQub25JbWFnZUxvYWRpbmdTdGF0dXNDaGFuZ2Uoc3RhdHVzKTtcbiAgICB9KTtcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGltYWdlTG9hZGluZ1N0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiAgICAgICAgaGFuZGxlTG9hZGluZ1N0YXR1c0NoYW5nZShpbWFnZUxvYWRpbmdTdGF0dXMpO1xuICAgICAgfVxuICAgIH0sIFtpbWFnZUxvYWRpbmdTdGF0dXMsIGhhbmRsZUxvYWRpbmdTdGF0dXNDaGFuZ2VdKTtcbiAgICByZXR1cm4gaW1hZ2VMb2FkaW5nU3RhdHVzID09PSBcImxvYWRlZFwiID8gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuaW1nLCB7IC4uLmltYWdlUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBzcmMgfSkgOiBudWxsO1xuICB9XG4pO1xuQXZhdGFySW1hZ2UuZGlzcGxheU5hbWUgPSBJTUFHRV9OQU1FO1xudmFyIEZBTExCQUNLX05BTUUgPSBcIkF2YXRhckZhbGxiYWNrXCI7XG52YXIgQXZhdGFyRmFsbGJhY2sgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZUF2YXRhciwgZGVsYXlNcywgLi4uZmFsbGJhY2tQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUF2YXRhckNvbnRleHQoRkFMTEJBQ0tfTkFNRSwgX19zY29wZUF2YXRhcik7XG4gICAgY29uc3QgW2NhblJlbmRlciwgc2V0Q2FuUmVuZGVyXSA9IFJlYWN0LnVzZVN0YXRlKGRlbGF5TXMgPT09IHZvaWQgMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChkZWxheU1zICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3QgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHNldENhblJlbmRlcih0cnVlKSwgZGVsYXlNcyk7XG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgfVxuICAgIH0sIFtkZWxheU1zXSk7XG4gICAgcmV0dXJuIGNhblJlbmRlciAmJiBjb250ZXh0LmltYWdlTG9hZGluZ1N0YXR1cyAhPT0gXCJsb2FkZWRcIiA/IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLnNwYW4sIHsgLi4uZmFsbGJhY2tQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuQXZhdGFyRmFsbGJhY2suZGlzcGxheU5hbWUgPSBGQUxMQkFDS19OQU1FO1xuZnVuY3Rpb24gcmVzb2x2ZUxvYWRpbmdTdGF0dXMoaW1hZ2UsIHNyYykge1xuICBpZiAoIWltYWdlKSB7XG4gICAgcmV0dXJuIFwiaWRsZVwiO1xuICB9XG4gIGlmICghc3JjKSB7XG4gICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgfVxuICBpZiAoaW1hZ2Uuc3JjICE9PSBzcmMpIHtcbiAgICBpbWFnZS5zcmMgPSBzcmM7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmNvbXBsZXRlICYmIGltYWdlLm5hdHVyYWxXaWR0aCA+IDAgPyBcImxvYWRlZFwiIDogXCJsb2FkaW5nXCI7XG59XG5mdW5jdGlvbiB1c2VJbWFnZUxvYWRpbmdTdGF0dXMoc3JjLCB7IHJlZmVycmVyUG9saWN5LCBjcm9zc09yaWdpbiB9KSB7XG4gIGNvbnN0IGlzSHlkcmF0ZWQgPSB1c2VJc0h5ZHJhdGVkKCk7XG4gIGNvbnN0IGltYWdlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBpbWFnZSA9ICgoKSA9PiB7XG4gICAgaWYgKCFpc0h5ZHJhdGVkKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIWltYWdlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGltYWdlUmVmLmN1cnJlbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgfVxuICAgIHJldHVybiBpbWFnZVJlZi5jdXJyZW50O1xuICB9KSgpO1xuICBjb25zdCBbbG9hZGluZ1N0YXR1cywgc2V0TG9hZGluZ1N0YXR1c10gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiByZXNvbHZlTG9hZGluZ1N0YXR1cyhpbWFnZSwgc3JjKVxuICApO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvYWRpbmdTdGF0dXMocmVzb2x2ZUxvYWRpbmdTdGF0dXMoaW1hZ2UsIHNyYykpO1xuICB9LCBbaW1hZ2UsIHNyY10pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVN0YXR1cyA9IChzdGF0dXMpID0+ICgpID0+IHtcbiAgICAgIHNldExvYWRpbmdTdGF0dXMoc3RhdHVzKTtcbiAgICB9O1xuICAgIGlmICghaW1hZ2UpIHJldHVybjtcbiAgICBjb25zdCBoYW5kbGVMb2FkID0gdXBkYXRlU3RhdHVzKFwibG9hZGVkXCIpO1xuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gdXBkYXRlU3RhdHVzKFwiZXJyb3JcIik7XG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgaGFuZGxlTG9hZCk7XG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZUVycm9yKTtcbiAgICBpZiAocmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgIGltYWdlLnJlZmVycmVyUG9saWN5ID0gcmVmZXJyZXJQb2xpY3k7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY3Jvc3NPcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCBoYW5kbGVMb2FkKTtcbiAgICAgIGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVFcnJvcik7XG4gICAgfTtcbiAgfSwgW2ltYWdlLCBjcm9zc09yaWdpbiwgcmVmZXJyZXJQb2xpY3ldKTtcbiAgcmV0dXJuIGxvYWRpbmdTdGF0dXM7XG59XG52YXIgUm9vdCA9IEF2YXRhcjtcbnZhciBJbWFnZSA9IEF2YXRhckltYWdlO1xudmFyIEZhbGxiYWNrID0gQXZhdGFyRmFsbGJhY2s7XG5leHBvcnQge1xuICBBdmF0YXIsXG4gIEF2YXRhckZhbGxiYWNrLFxuICBBdmF0YXJJbWFnZSxcbiAgRmFsbGJhY2ssXG4gIEltYWdlLFxuICBSb290LFxuICBjcmVhdGVBdmF0YXJTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfY2lyY2xlLCBfY2lyY2xlMiwgX3BhdGg7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIFN2Z0RlZmF1bHRBdmF0YXIgPSBmdW5jdGlvbiBTdmdEZWZhdWx0QXZhdGFyKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTI0LFxuICAgIGhlaWdodDogMTI0LFxuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIHByb3BzKSwgX2NpcmNsZSB8fCAoX2NpcmNsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNjIsXG4gICAgY3k6IDYyLFxuICAgIHI6IDYyLFxuICAgIGZpbGw6IFwiI0M0QzRDNFwiXG4gIH0pKSwgX2NpcmNsZTIgfHwgKF9jaXJjbGUyID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiA2MixcbiAgICBjeTogNDAsXG4gICAgcjogMTUsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSkpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTk2IDg0LjAyNkM5NiA5Ny4yOTUgODAuNzc4IDk5IDYyIDk5cy0zNC0xLjcwNS0zNC0xNC45NzRTNDMuMjIyIDYwIDYyIDYwczM0IDEwLjc1NyAzNCAyNC4wMjZcIlxuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFN2Z0RlZmF1bHRBdmF0YXI7IiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQXZhdGFyIH0gZnJvbSAncmFkaXgtdWknO1xuaW1wb3J0IERlZmF1bHRBdmF0YXJJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9pY29ucy9kZWZhdWx0QXZhdGFyLnN2Zyc7XG52YXIgQmFzZUF2YXRhciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzcmMgPSBwcm9wcy5zcmMsIF9hID0gcHJvcHMuYWx0LCBhbHQgPSBfYSA9PT0gdm9pZCAwID8gJ2F2YXRhcicgOiBfYSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJzcmNcIiwgXCJhbHRcIl0pO1xuICAgIHJldHVybiAoX2pzeHMoQXZhdGFyLlJvb3QsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIGJhc2UtYXZhdGFyIFwiLmNvbmNhdChjbGFzc05hbWUgIT09IG51bGwgJiYgY2xhc3NOYW1lICE9PSB2b2lkIDAgPyBjbGFzc05hbWUgOiAnJykgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBbX2pzeChBdmF0YXIuSW1hZ2UsIHsgc3JjOiBzcmMsIGFsdDogYWx0LCBjbGFzc05hbWU6ICdhdmF0YXItaW1hZ2UnIH0pLCBfanN4KEF2YXRhci5GYWxsYmFjaywgeyBjaGlsZHJlbjogX2pzeChEZWZhdWx0QXZhdGFySWNvbiwgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KSB9KV0gfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgQmFzZUF2YXRhcjtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCB7IEJhc2VCYWRnZSB9IGZyb20gJy4uL2JhZGdlL2Jhc2UtYmFkZ2UnO1xuaW1wb3J0IHsgYXZhdGFyUHJvcHMgfSBmcm9tICcuL2F2YXRhci1wcm9wcyc7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tICcuL2Jhc2UtYXZhdGFyJztcbnZhciBBdmF0YXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGF2YXRhclByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBzcmMgPSBfYS5zcmMsIGFsdCA9IF9hLmFsdCwgYmFkZ2VPcHRpb24gPSBfYS5iYWRnZU9wdGlvbiwgcmVzdFByb3BzID0gX19yZXN0KF9hLCBbXCJjbGFzc05hbWVcIiwgXCJzcmNcIiwgXCJhbHRcIiwgXCJiYWRnZU9wdGlvblwiXSk7XG4gICAgdmFyIGF2YXRhckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnYXZhdGFyJyk7XG4gICAgcmV0dXJuIChfanN4cyhcInNwYW5cIiwgeyBzdHlsZTogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZGlzcGxheTogJ2lubGluZS1ibG9jaycgfSwgY2hpbGRyZW46IFtfanN4KEJhc2VBdmF0YXIsIF9fYXNzaWduKHsgc3JjOiBzcmMsIGFsdDogYWx0LCBjbGFzc05hbWU6IGF2YXRhckNsYXNzTmFtZSwgcmVmOiByZWYgfSwgcmVzdFByb3BzKSksIGJhZGdlT3B0aW9uICYmIChfanN4KEJhc2VCYWRnZSwgeyBhc0NoaWxkOiB0cnVlLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGF2YXRhckNsYXNzTmFtZSwgJ2JhZGdlLW9wdGlvbicpLCBjaGlsZHJlbjogYmFkZ2VPcHRpb24gfSkpXSB9KSk7XG59KTtcbkF2YXRhci5kaXNwbGF5TmFtZSA9ICdBdmF0YXInO1xuZXhwb3J0IGRlZmF1bHQgQXZhdGFyO1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gXCIuLi8uLi8uLi9zdHlsZXMvdG9rZW4vY29sb3JzXCI7XG52YXIgU3Bpbm5lciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYS5jb2xvciwgY29sb3IgPSBfYyA9PT0gdm9pZCAwID8gXCJncmF5RTRcIiA6IF9jO1xuICAgIHZhciBib3JkZXIgPSBcIlwiLmNvbmNhdChjb2xvcnNbY29sb3JdLCBcIiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudFwiKTtcbiAgICByZXR1cm4gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBjb21wb25lbnQtbG9hZGluZy1jb250YWluZXJcIiwgY2hpbGRyZW46IF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibG9hZGluZy1pbmRpY2F0b3ItcmluZ1wiLCBzdHlsZTogKF9iID0ge30sIF9iW1wiLS1zcGlubmVyLWJvcmRlci1jb2xvclwiXSA9IGNvbG9yc1tjb2xvcl0sIF9iKSwgY2hpbGRyZW46IFswLCAxLCAyLCAzXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nXCIsIHN0eWxlOiB7IGJvcmRlckNvbG9yOiBib3JkZXIsIGFuaW1hdGlvbkRlbGF5OiBpID09PSAwID8gJy0wLjQ1cycgOiBpID09PSAxID8gJy0wLjNzJyA6IGkgPT09IDIgPyAnLTAuMTVzJyA6ICcwcycgfSB9LCBpKSk7IH0pIH0pIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTcGlubmVyO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ3JhZGl4LXVpJztcbnZhciBCYXNlQnV0dG9uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBfYiA9IF9hLmFzQ2hpbGQsIGFzQ2hpbGQgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBsb2FkaW5nID0gX2EubG9hZGluZywgbG9hZGluZ0NvbXBvbmVudCA9IF9hLmxvYWRpbmdDb21wb25lbnQsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcImFzQ2hpbGRcIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImxvYWRpbmdcIiwgXCJsb2FkaW5nQ29tcG9uZW50XCJdKTtcbiAgICB2YXIgQ29tcCA9IGFzQ2hpbGQgPyBTbG90LlJvb3QgOiAnYnV0dG9uJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgX19hc3NpZ24oeyByZWY6IHJlZiwgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1idXR0b24gXCIuY29uY2F0KGNsYXNzTmFtZSAhPT0gbnVsbCAmJiBjbGFzc05hbWUgIT09IHZvaWQgMCA/IGNsYXNzTmFtZSA6ICcnKSwgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLCBcImFyaWEtYnVzeVwiOiBsb2FkaW5nLCBkaXNhYmxlZDogZGlzYWJsZWQsIG9uTW91c2VEb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgKF9hID0gcHJvcHMub25Nb3VzZURvd24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHByb3BzLCBlKTtcbiAgICAgICAgfSB9LCBwcm9wcywgeyBjaGlsZHJlbjogbG9hZGluZyA/IGxvYWRpbmdDb21wb25lbnQgOiBjaGlsZHJlbiB9KSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBCYXNlQnV0dG9uO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciB2YXJpYW50ID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdnaG9zdCcsICd3aGl0ZScsICd3YXJuaW5nJ107XG52YXIgc2l6ZSA9IFsneGwnLCAnbCcsICdtJywgJ3InLCAncyddO1xudmFyIGNvbW1vbkJ1dHRvblByb3BzID0ge307XG5leHBvcnQgdmFyIGN0YUJ1dHRvblByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkJ1dHRvblByb3BzKSwgeyB2YXJpYW50OiB7XG4gICAgICAgIHR5cGU6ICdjbGFzc05hbWUnLFxuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYW50JyxcbiAgICAgICAgdmFsdWVzOiB2YXJpYW50LFxuICAgICAgICBkZWZhdWx0OiAncHJpbWFyeScsXG4gICAgfSwgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0gfSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBTcGlubmVyIGZyb20gJy4uL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyJztcbmltcG9ydCBCYXNlQnV0dG9uIGZyb20gJy4vYmFzZS1idXR0b24nO1xuaW1wb3J0IHsgY3RhQnV0dG9uUHJvcHMgfSBmcm9tICcuL2J1dHRvbi1wcm9wcyc7XG52YXIgQ1RBQnV0dG9uID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIHRleHQgPSBwcm9wcy50ZXh0LCBsZWZ0SWNvbiA9IHByb3BzLmxlZnRJY29uLCByaWdodEljb24gPSBwcm9wcy5yaWdodEljb247XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGN0YUJ1dHRvblByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIGJ1dHRvbkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnY3RhLWJ1dHRvbicpO1xuICAgIHJldHVybiAoX2pzeHMoQmFzZUJ1dHRvbiwgX19hc3NpZ24oe30sIHJlc3RQcm9wcywgeyBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzTmFtZSwgbG9hZGluZ0NvbXBvbmVudDogX2pzeChTcGlubmVyLCB7fSksIGNoaWxkcmVuOiBbbGVmdEljb24sIHRleHQsIHJpZ2h0SWNvbl0gfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDVEFCdXR0b247XG4iLCIvLyBzcmMvcHJpbWl0aXZlLnRzeFxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbmZ1bmN0aW9uIGNvbXBvc2VFdmVudEhhbmRsZXJzKG9yaWdpbmFsRXZlbnRIYW5kbGVyLCBvdXJFdmVudEhhbmRsZXIsIHsgY2hlY2tGb3JEZWZhdWx0UHJldmVudGVkID0gdHJ1ZSB9ID0ge30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgb3JpZ2luYWxFdmVudEhhbmRsZXI/LihldmVudCk7XG4gICAgaWYgKGNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCA9PT0gZmFsc2UgfHwgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybiBvdXJFdmVudEhhbmRsZXI/LihldmVudCk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0T3duZXJXaW5kb3coZWxlbWVudCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhY2Nlc3Mgd2luZG93IG91dHNpZGUgb2YgdGhlIERPTVwiKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudD8ub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFjY2VzcyBkb2N1bWVudCBvdXRzaWRlIG9mIHRoZSBET01cIik7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ/Lm93bmVyRG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KG5vZGUsIGFjdGl2ZURlc2NlbmRhbnQgPSBmYWxzZSkge1xuICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IGdldE93bmVyRG9jdW1lbnQobm9kZSk7XG4gIGlmICghYWN0aXZlRWxlbWVudD8ubm9kZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNGcmFtZShhY3RpdmVFbGVtZW50KSAmJiBhY3RpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudCkge1xuICAgIHJldHVybiBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHksIGFjdGl2ZURlc2NlbmRhbnQpO1xuICB9XG4gIGlmIChhY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgY29uc3QgaWQgPSBhY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRPd25lckRvY3VtZW50KGFjdGl2ZUVsZW1lbnQpLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzRnJhbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50YWdOYW1lID09PSBcIklGUkFNRVwiO1xufVxuZXhwb3J0IHtcbiAgY2FuVXNlRE9NLFxuICBjb21wb3NlRXZlbnRIYW5kbGVycyxcbiAgZ2V0QWN0aXZlRWxlbWVudCxcbiAgZ2V0T3duZXJEb2N1bWVudCxcbiAgZ2V0T3duZXJXaW5kb3csXG4gIGlzRnJhbWVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtZXNjYXBlLWtleWRvd24vc3JjL3VzZS1lc2NhcGUta2V5ZG93bi50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmZ1bmN0aW9uIHVzZUVzY2FwZUtleWRvd24ob25Fc2NhcGVLZXlEb3duUHJvcCwgb3duZXJEb2N1bWVudCA9IGdsb2JhbFRoaXM/LmRvY3VtZW50KSB7XG4gIGNvbnN0IG9uRXNjYXBlS2V5RG93biA9IHVzZUNhbGxiYWNrUmVmKG9uRXNjYXBlS2V5RG93blByb3ApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgb25Fc2NhcGVLZXlEb3duKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJldHVybiAoKSA9PiBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfSwgW29uRXNjYXBlS2V5RG93biwgb3duZXJEb2N1bWVudF0pO1xufVxuZXhwb3J0IHtcbiAgdXNlRXNjYXBlS2V5ZG93blxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvZGlzbWlzc2FibGUtbGF5ZXIudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNvbXBvc2VFdmVudEhhbmRsZXJzIH0gZnJvbSBcIkByYWRpeC11aS9wcmltaXRpdmVcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSwgZGlzcGF0Y2hEaXNjcmV0ZUN1c3RvbUV2ZW50IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNhbGxiYWNrLXJlZlwiO1xuaW1wb3J0IHsgdXNlRXNjYXBlS2V5ZG93biB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWVzY2FwZS1rZXlkb3duXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBESVNNSVNTQUJMRV9MQVlFUl9OQU1FID0gXCJEaXNtaXNzYWJsZUxheWVyXCI7XG52YXIgQ09OVEVYVF9VUERBVEUgPSBcImRpc21pc3NhYmxlTGF5ZXIudXBkYXRlXCI7XG52YXIgUE9JTlRFUl9ET1dOX09VVFNJREUgPSBcImRpc21pc3NhYmxlTGF5ZXIucG9pbnRlckRvd25PdXRzaWRlXCI7XG52YXIgRk9DVVNfT1VUU0lERSA9IFwiZGlzbWlzc2FibGVMYXllci5mb2N1c091dHNpZGVcIjtcbnZhciBvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzO1xudmFyIERpc21pc3NhYmxlTGF5ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGxheWVyczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSxcbiAgbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG4gIGJyYW5jaGVzOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpXG59KTtcbnZhciBEaXNtaXNzYWJsZUxheWVyID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHMgPSBmYWxzZSxcbiAgICAgIG9uRXNjYXBlS2V5RG93bixcbiAgICAgIG9uUG9pbnRlckRvd25PdXRzaWRlLFxuICAgICAgb25Gb2N1c091dHNpZGUsXG4gICAgICBvbkludGVyYWN0T3V0c2lkZSxcbiAgICAgIG9uRGlzbWlzcyxcbiAgICAgIC4uLmxheWVyUHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGlzbWlzc2FibGVMYXllckNvbnRleHQpO1xuICAgIGNvbnN0IFtub2RlLCBzZXROb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBub2RlPy5vd25lckRvY3VtZW50ID8/IGdsb2JhbFRoaXM/LmRvY3VtZW50O1xuICAgIGNvbnN0IFssIGZvcmNlXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCAobm9kZTIpID0+IHNldE5vZGUobm9kZTIpKTtcbiAgICBjb25zdCBsYXllcnMgPSBBcnJheS5mcm9tKGNvbnRleHQubGF5ZXJzKTtcbiAgICBjb25zdCBbaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdID0gWy4uLmNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdLnNsaWNlKC0xKTtcbiAgICBjb25zdCBoaWdoZXN0TGF5ZXJXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZEluZGV4ID0gbGF5ZXJzLmluZGV4T2YoaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQpO1xuICAgIGNvbnN0IGluZGV4ID0gbm9kZSA/IGxheWVycy5pbmRleE9mKG5vZGUpIDogLTE7XG4gICAgY29uc3QgaXNCb2R5UG9pbnRlckV2ZW50c0Rpc2FibGVkID0gY29udGV4dC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplID4gMDtcbiAgICBjb25zdCBpc1BvaW50ZXJFdmVudHNFbmFibGVkID0gaW5kZXggPj0gaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRJbmRleDtcbiAgICBjb25zdCBwb2ludGVyRG93bk91dHNpZGUgPSB1c2VQb2ludGVyRG93bk91dHNpZGUoKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBjb25zdCBpc1BvaW50ZXJEb3duT25CcmFuY2ggPSBbLi4uY29udGV4dC5icmFuY2hlc10uc29tZSgoYnJhbmNoKSA9PiBicmFuY2guY29udGFpbnModGFyZ2V0KSk7XG4gICAgICBpZiAoIWlzUG9pbnRlckV2ZW50c0VuYWJsZWQgfHwgaXNQb2ludGVyRG93bk9uQnJhbmNoKSByZXR1cm47XG4gICAgICBvblBvaW50ZXJEb3duT3V0c2lkZT8uKGV2ZW50KTtcbiAgICAgIG9uSW50ZXJhY3RPdXRzaWRlPy4oZXZlbnQpO1xuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSBvbkRpc21pc3M/LigpO1xuICAgIH0sIG93bmVyRG9jdW1lbnQpO1xuICAgIGNvbnN0IGZvY3VzT3V0c2lkZSA9IHVzZUZvY3VzT3V0c2lkZSgoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGNvbnN0IGlzRm9jdXNJbkJyYW5jaCA9IFsuLi5jb250ZXh0LmJyYW5jaGVzXS5zb21lKChicmFuY2gpID0+IGJyYW5jaC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgIGlmIChpc0ZvY3VzSW5CcmFuY2gpIHJldHVybjtcbiAgICAgIG9uRm9jdXNPdXRzaWRlPy4oZXZlbnQpO1xuICAgICAgb25JbnRlcmFjdE91dHNpZGU/LihldmVudCk7XG4gICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIG9uRGlzbWlzcz8uKCk7XG4gICAgfSwgb3duZXJEb2N1bWVudCk7XG4gICAgdXNlRXNjYXBlS2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGlzSGlnaGVzdExheWVyID0gaW5kZXggPT09IGNvbnRleHQubGF5ZXJzLnNpemUgLSAxO1xuICAgICAgaWYgKCFpc0hpZ2hlc3RMYXllcikgcmV0dXJuO1xuICAgICAgb25Fc2NhcGVLZXlEb3duPy4oZXZlbnQpO1xuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIG9uRGlzbWlzcykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc21pc3MoKTtcbiAgICAgIH1cbiAgICB9LCBvd25lckRvY3VtZW50KTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICBpZiAoZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzKSB7XG4gICAgICAgIGlmIChjb250ZXh0LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemUgPT09IDApIHtcbiAgICAgICAgICBvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzID0gb3duZXJEb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM7XG4gICAgICAgICAgb3duZXJEb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChub2RlKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQubGF5ZXJzLmFkZChub2RlKTtcbiAgICAgIGRpc3BhdGNoVXBkYXRlKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzICYmIGNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgIG93bmVyRG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzID0gb3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBbbm9kZSwgb3duZXJEb2N1bWVudCwgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzLCBjb250ZXh0XSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgICBjb250ZXh0LmxheWVycy5kZWxldGUobm9kZSk7XG4gICAgICAgIGNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICBkaXNwYXRjaFVwZGF0ZSgpO1xuICAgICAgfTtcbiAgICB9LCBbbm9kZSwgY29udGV4dF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVVcGRhdGUgPSAoKSA9PiBmb3JjZSh7fSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKENPTlRFWFRfVVBEQVRFLCBoYW5kbGVVcGRhdGUpO1xuICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9VUERBVEUsIGhhbmRsZVVwZGF0ZSk7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmRpdixcbiAgICAgIHtcbiAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNCb2R5UG9pbnRlckV2ZW50c0Rpc2FibGVkID8gaXNQb2ludGVyRXZlbnRzRW5hYmxlZCA/IFwiYXV0b1wiIDogXCJub25lXCIgOiB2b2lkIDAsXG4gICAgICAgICAgLi4ucHJvcHMuc3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgb25Gb2N1c0NhcHR1cmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uRm9jdXNDYXB0dXJlLCBmb2N1c091dHNpZGUub25Gb2N1c0NhcHR1cmUpLFxuICAgICAgICBvbkJsdXJDYXB0dXJlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkJsdXJDYXB0dXJlLCBmb2N1c091dHNpZGUub25CbHVyQ2FwdHVyZSksXG4gICAgICAgIG9uUG9pbnRlckRvd25DYXB0dXJlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhcbiAgICAgICAgICBwcm9wcy5vblBvaW50ZXJEb3duQ2FwdHVyZSxcbiAgICAgICAgICBwb2ludGVyRG93bk91dHNpZGUub25Qb2ludGVyRG93bkNhcHR1cmVcbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5EaXNtaXNzYWJsZUxheWVyLmRpc3BsYXlOYW1lID0gRElTTUlTU0FCTEVfTEFZRVJfTkFNRTtcbnZhciBCUkFOQ0hfTkFNRSA9IFwiRGlzbWlzc2FibGVMYXllckJyYW5jaFwiO1xudmFyIERpc21pc3NhYmxlTGF5ZXJCcmFuY2ggPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERpc21pc3NhYmxlTGF5ZXJDb250ZXh0KTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCByZWYpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSByZWYuY3VycmVudDtcbiAgICBpZiAobm9kZSkge1xuICAgICAgY29udGV4dC5icmFuY2hlcy5hZGQobm9kZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb250ZXh0LmJyYW5jaGVzLmRlbGV0ZShub2RlKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY29udGV4dC5icmFuY2hlc10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuZGl2LCB7IC4uLnByb3BzLCByZWY6IGNvbXBvc2VkUmVmcyB9KTtcbn0pO1xuRGlzbWlzc2FibGVMYXllckJyYW5jaC5kaXNwbGF5TmFtZSA9IEJSQU5DSF9OQU1FO1xuZnVuY3Rpb24gdXNlUG9pbnRlckRvd25PdXRzaWRlKG9uUG9pbnRlckRvd25PdXRzaWRlLCBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcz8uZG9jdW1lbnQpIHtcbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gdXNlQ2FsbGJhY2tSZWYob25Qb2ludGVyRG93bk91dHNpZGUpO1xuICBjb25zdCBpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVDbGlja1JlZiA9IFJlYWN0LnVzZVJlZigoKSA9PiB7XG4gIH0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCkge1xuICAgICAgICBsZXQgaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVBbmREaXNwYXRjaEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgUE9JTlRFUl9ET1dOX09VVFNJREUsXG4gICAgICAgICAgICBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUsXG4gICAgICAgICAgICBldmVudERldGFpbCxcbiAgICAgICAgICAgIHsgZGlzY3JldGU6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50ID0gaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDI7XG4gICAgICAgIGNvbnN0IGV2ZW50RGV0YWlsID0geyBvcmlnaW5hbEV2ZW50OiBldmVudCB9O1xuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFwidG91Y2hcIikge1xuICAgICAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQgPSBoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50MjtcbiAgICAgICAgICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDbGlja1JlZi5jdXJyZW50LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2tSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtvd25lckRvY3VtZW50LCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGVdKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBlbnN1cmVzIHdlIGNoZWNrIFJlYWN0IGNvbXBvbmVudCB0cmVlIChub3QganVzdCBET00gdHJlZSlcbiAgICBvblBvaW50ZXJEb3duQ2FwdHVyZTogKCkgPT4gaXNQb2ludGVySW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQgPSB0cnVlXG4gIH07XG59XG5mdW5jdGlvbiB1c2VGb2N1c091dHNpZGUob25Gb2N1c091dHNpZGUsIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzPy5kb2N1bWVudCkge1xuICBjb25zdCBoYW5kbGVGb2N1c091dHNpZGUgPSB1c2VDYWxsYmFja1JlZihvbkZvY3VzT3V0c2lkZSk7XG4gIGNvbnN0IGlzRm9jdXNJbnNpZGVSZWFjdFRyZWVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFpc0ZvY3VzSW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnREZXRhaWwgPSB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH07XG4gICAgICAgIGhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQoRk9DVVNfT1VUU0lERSwgaGFuZGxlRm9jdXNPdXRzaWRlLCBldmVudERldGFpbCwge1xuICAgICAgICAgIGRpc2NyZXRlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgaGFuZGxlRm9jdXMpO1xuICAgIHJldHVybiAoKSA9PiBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIGhhbmRsZUZvY3VzKTtcbiAgfSwgW293bmVyRG9jdW1lbnQsIGhhbmRsZUZvY3VzT3V0c2lkZV0pO1xuICByZXR1cm4ge1xuICAgIG9uRm9jdXNDYXB0dXJlOiAoKSA9PiBpc0ZvY3VzSW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQgPSB0cnVlLFxuICAgIG9uQmx1ckNhcHR1cmU6ICgpID0+IGlzRm9jdXNJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCA9IGZhbHNlXG4gIH07XG59XG5mdW5jdGlvbiBkaXNwYXRjaFVwZGF0ZSgpIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQ09OVEVYVF9VUERBVEUpO1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQobmFtZSwgaGFuZGxlciwgZGV0YWlsLCB7IGRpc2NyZXRlIH0pIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGV0YWlsLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7IGJ1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWwgfSk7XG4gIGlmIChoYW5kbGVyKSB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG4gIGlmIChkaXNjcmV0ZSkge1xuICAgIGRpc3BhdGNoRGlzY3JldGVDdXN0b21FdmVudCh0YXJnZXQsIGV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cbn1cbnZhciBSb290ID0gRGlzbWlzc2FibGVMYXllcjtcbnZhciBCcmFuY2ggPSBEaXNtaXNzYWJsZUxheWVyQnJhbmNoO1xuZXhwb3J0IHtcbiAgQnJhbmNoLFxuICBEaXNtaXNzYWJsZUxheWVyLFxuICBEaXNtaXNzYWJsZUxheWVyQnJhbmNoLFxuICBSb290XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiLy8gcGFja2FnZXMvcmVhY3QvaWQvc3JjL2lkLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1sYXlvdXQtZWZmZWN0XCI7XG52YXIgdXNlUmVhY3RJZCA9IFJlYWN0W1wiIHVzZUlkIFwiLnRyaW0oKS50b1N0cmluZygpXSB8fCAoKCkgPT4gdm9pZCAwKTtcbnZhciBjb3VudCA9IDA7XG5mdW5jdGlvbiB1c2VJZChkZXRlcm1pbmlzdGljSWQpIHtcbiAgY29uc3QgW2lkLCBzZXRJZF0gPSBSZWFjdC51c2VTdGF0ZSh1c2VSZWFjdElkKCkpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGV0ZXJtaW5pc3RpY0lkKSBzZXRJZCgocmVhY3RJZCkgPT4gcmVhY3RJZCA/PyBTdHJpbmcoY291bnQrKykpO1xuICB9LCBbZGV0ZXJtaW5pc3RpY0lkXSk7XG4gIHJldHVybiBkZXRlcm1pbmlzdGljSWQgfHwgKGlkID8gYHJhZGl4LSR7aWR9YCA6IFwiXCIpO1xufVxuZXhwb3J0IHtcbiAgdXNlSWRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIGFycm93IGFzIGFycm93JDIsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmV4cG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGdldE92ZXJmbG93QW5jZXN0b3JzLCBwbGF0Zm9ybSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcblxudmFyIGlzQ2xpZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgaW5kZXggPSBpc0NsaWVudCA/IHVzZUxheW91dEVmZmVjdCA6IG5vb3A7XG5cbi8vIEZvcmsgb2YgYGZhc3QtZGVlcC1lcXVhbGAgdGhhdCBvbmx5IGRvZXMgdGhlIGNvbXBhcmlzb25zIHdlIG5lZWQgYW5kIGNvbXBhcmVzXG4vLyBmdW5jdGlvbnNcbmZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGEgPT09ICdmdW5jdGlvbicgJiYgYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgbGVuZ3RoO1xuICBsZXQgaTtcbiAgbGV0IGtleXM7XG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICBpZiAoIXt9Lmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoa2V5ID09PSAnX293bmVyJyAmJiBhLiQkdHlwZW9mKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGEgIT09IGEgJiYgYiAhPT0gYjtcbn1cblxuZnVuY3Rpb24gZ2V0RFBSKGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgY29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuIHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIoZWxlbWVudCwgdmFsdWUpIHtcbiAgY29uc3QgZHByID0gZ2V0RFBSKGVsZW1lbnQpO1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRwcikgLyBkcHI7XG59XG5cbmZ1bmN0aW9uIHVzZUxhdGVzdFJlZih2YWx1ZSkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuICBpbmRleCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhIGZsb2F0aW5nIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdXNlRmxvYXRpbmdcbiAqL1xuZnVuY3Rpb24gdXNlRmxvYXRpbmcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzOiB7XG4gICAgICByZWZlcmVuY2U6IGV4dGVybmFsUmVmZXJlbmNlLFxuICAgICAgZmxvYXRpbmc6IGV4dGVybmFsRmxvYXRpbmdcbiAgICB9ID0ge30sXG4gICAgdHJhbnNmb3JtID0gdHJ1ZSxcbiAgICB3aGlsZUVsZW1lbnRzTW91bnRlZCxcbiAgICBvcGVuXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHN0cmF0ZWd5LFxuICAgIHBsYWNlbWVudCxcbiAgICBtaWRkbGV3YXJlRGF0YToge30sXG4gICAgaXNQb3NpdGlvbmVkOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgW2xhdGVzdE1pZGRsZXdhcmUsIHNldExhdGVzdE1pZGRsZXdhcmVdID0gUmVhY3QudXNlU3RhdGUobWlkZGxld2FyZSk7XG4gIGlmICghZGVlcEVxdWFsKGxhdGVzdE1pZGRsZXdhcmUsIG1pZGRsZXdhcmUpKSB7XG4gICAgc2V0TGF0ZXN0TWlkZGxld2FyZShtaWRkbGV3YXJlKTtcbiAgfVxuICBjb25zdCBbX3JlZmVyZW5jZSwgX3NldFJlZmVyZW5jZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW19mbG9hdGluZywgX3NldEZsb2F0aW5nXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBzZXRSZWZlcmVuY2UgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPT0gcmVmZXJlbmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZmVyZW5jZVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIF9zZXRSZWZlcmVuY2Uobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IHNldEZsb2F0aW5nID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgaWYgKG5vZGUgIT09IGZsb2F0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZsb2F0aW5nUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgX3NldEZsb2F0aW5nKG5vZGUpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IGV4dGVybmFsUmVmZXJlbmNlIHx8IF9yZWZlcmVuY2U7XG4gIGNvbnN0IGZsb2F0aW5nRWwgPSBleHRlcm5hbEZsb2F0aW5nIHx8IF9mbG9hdGluZztcbiAgY29uc3QgcmVmZXJlbmNlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBmbG9hdGluZ1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgZGF0YVJlZiA9IFJlYWN0LnVzZVJlZihkYXRhKTtcbiAgY29uc3QgaGFzV2hpbGVFbGVtZW50c01vdW50ZWQgPSB3aGlsZUVsZW1lbnRzTW91bnRlZCAhPSBudWxsO1xuICBjb25zdCB3aGlsZUVsZW1lbnRzTW91bnRlZFJlZiA9IHVzZUxhdGVzdFJlZih3aGlsZUVsZW1lbnRzTW91bnRlZCk7XG4gIGNvbnN0IHBsYXRmb3JtUmVmID0gdXNlTGF0ZXN0UmVmKHBsYXRmb3JtKTtcbiAgY29uc3Qgb3BlblJlZiA9IHVzZUxhdGVzdFJlZihvcGVuKTtcbiAgY29uc3QgdXBkYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghcmVmZXJlbmNlUmVmLmN1cnJlbnQgfHwgIWZsb2F0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlOiBsYXRlc3RNaWRkbGV3YXJlXG4gICAgfTtcbiAgICBpZiAocGxhdGZvcm1SZWYuY3VycmVudCkge1xuICAgICAgY29uZmlnLnBsYXRmb3JtID0gcGxhdGZvcm1SZWYuY3VycmVudDtcbiAgICB9XG4gICAgY29tcHV0ZVBvc2l0aW9uKHJlZmVyZW5jZVJlZi5jdXJyZW50LCBmbG9hdGluZ1JlZi5jdXJyZW50LCBjb25maWcpLnRoZW4oZGF0YSA9PiB7XG4gICAgICBjb25zdCBmdWxsRGF0YSA9IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLy8gVGhlIGZsb2F0aW5nIGVsZW1lbnQncyBwb3NpdGlvbiBtYXkgYmUgcmVjb21wdXRlZCB3aGlsZSBpdCdzIGNsb3NlZFxuICAgICAgICAvLyBidXQgc3RpbGwgbW91bnRlZCAoc3VjaCBhcyB3aGVuIHRyYW5zaXRpb25pbmcgb3V0KS4gVG8gZW5zdXJlXG4gICAgICAgIC8vIGBpc1Bvc2l0aW9uZWRgIHdpbGwgYmUgYGZhbHNlYCBpbml0aWFsbHkgb24gdGhlIG5leHQgb3BlbiwgYXZvaWRcbiAgICAgICAgLy8gc2V0dGluZyBpdCB0byBgdHJ1ZWAgd2hlbiBgb3BlbiA9PT0gZmFsc2VgIChtdXN0IGJlIHNwZWNpZmllZCkuXG4gICAgICAgIGlzUG9zaXRpb25lZDogb3BlblJlZi5jdXJyZW50ICE9PSBmYWxzZVxuICAgICAgfTtcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiAhZGVlcEVxdWFsKGRhdGFSZWYuY3VycmVudCwgZnVsbERhdGEpKSB7XG4gICAgICAgIGRhdGFSZWYuY3VycmVudCA9IGZ1bGxEYXRhO1xuICAgICAgICBSZWFjdERPTS5mbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldERhdGEoZnVsbERhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW2xhdGVzdE1pZGRsZXdhcmUsIHBsYWNlbWVudCwgc3RyYXRlZ3ksIHBsYXRmb3JtUmVmLCBvcGVuUmVmXSk7XG4gIGluZGV4KCgpID0+IHtcbiAgICBpZiAob3BlbiA9PT0gZmFsc2UgJiYgZGF0YVJlZi5jdXJyZW50LmlzUG9zaXRpb25lZCkge1xuICAgICAgZGF0YVJlZi5jdXJyZW50LmlzUG9zaXRpb25lZCA9IGZhbHNlO1xuICAgICAgc2V0RGF0YShkYXRhID0+ICh7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGlzUG9zaXRpb25lZDogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIFtvcGVuXSk7XG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGluZGV4KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpbmRleCgoKSA9PiB7XG4gICAgaWYgKHJlZmVyZW5jZUVsKSByZWZlcmVuY2VSZWYuY3VycmVudCA9IHJlZmVyZW5jZUVsO1xuICAgIGlmIChmbG9hdGluZ0VsKSBmbG9hdGluZ1JlZi5jdXJyZW50ID0gZmxvYXRpbmdFbDtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgZmxvYXRpbmdFbCkge1xuICAgICAgaWYgKHdoaWxlRWxlbWVudHNNb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHdoaWxlRWxlbWVudHNNb3VudGVkUmVmLmN1cnJlbnQocmVmZXJlbmNlRWwsIGZsb2F0aW5nRWwsIHVwZGF0ZSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0sIFtyZWZlcmVuY2VFbCwgZmxvYXRpbmdFbCwgdXBkYXRlLCB3aGlsZUVsZW1lbnRzTW91bnRlZFJlZiwgaGFzV2hpbGVFbGVtZW50c01vdW50ZWRdKTtcbiAgY29uc3QgcmVmcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZVJlZixcbiAgICBmbG9hdGluZzogZmxvYXRpbmdSZWYsXG4gICAgc2V0UmVmZXJlbmNlLFxuICAgIHNldEZsb2F0aW5nXG4gIH0pLCBbc2V0UmVmZXJlbmNlLCBzZXRGbG9hdGluZ10pO1xuICBjb25zdCBlbGVtZW50cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUVsLFxuICAgIGZsb2F0aW5nOiBmbG9hdGluZ0VsXG4gIH0pLCBbcmVmZXJlbmNlRWwsIGZsb2F0aW5nRWxdKTtcbiAgY29uc3QgZmxvYXRpbmdTdHlsZXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsU3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG4gICAgaWYgKCFlbGVtZW50cy5mbG9hdGluZykge1xuICAgICAgcmV0dXJuIGluaXRpYWxTdHlsZXM7XG4gICAgfVxuICAgIGNvbnN0IHggPSByb3VuZEJ5RFBSKGVsZW1lbnRzLmZsb2F0aW5nLCBkYXRhLngpO1xuICAgIGNvbnN0IHkgPSByb3VuZEJ5RFBSKGVsZW1lbnRzLmZsb2F0aW5nLCBkYXRhLnkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluaXRpYWxTdHlsZXMsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIixcbiAgICAgICAgLi4uKGdldERQUihlbGVtZW50cy5mbG9hdGluZykgPj0gMS41ICYmIHtcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJ1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBzdHJhdGVneSxcbiAgICAgIGxlZnQ6IHgsXG4gICAgICB0b3A6IHlcbiAgICB9O1xuICB9LCBbc3RyYXRlZ3ksIHRyYW5zZm9ybSwgZWxlbWVudHMuZmxvYXRpbmcsIGRhdGEueCwgZGF0YS55XSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgLi4uZGF0YSxcbiAgICB1cGRhdGUsXG4gICAgcmVmcyxcbiAgICBlbGVtZW50cyxcbiAgICBmbG9hdGluZ1N0eWxlc1xuICB9KSwgW2RhdGEsIHVwZGF0ZSwgcmVmcywgZWxlbWVudHMsIGZsb2F0aW5nU3R5bGVzXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogVGhpcyB3cmFwcyB0aGUgY29yZSBgYXJyb3dgIG1pZGRsZXdhcmUgdG8gYWxsb3cgUmVhY3QgcmVmcyBhcyB0aGUgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyQxID0gb3B0aW9ucyA9PiB7XG4gIGZ1bmN0aW9uIGlzUmVmKHZhbHVlKSB7XG4gICAgcmV0dXJuIHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjdXJyZW50Jyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXJyb3cnLFxuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFkZGluZ1xuICAgICAgfSA9IHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucyhzdGF0ZSkgOiBvcHRpb25zO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgaXNSZWYoZWxlbWVudCkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGFycm93JDIoe1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudC5jdXJyZW50LFxuICAgICAgICAgICAgcGFkZGluZ1xuICAgICAgICAgIH0pLmZuKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gYXJyb3ckMih7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBwYWRkaW5nXG4gICAgICAgIH0pLmZuKHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4ub2Zmc2V0JDEob3B0aW9ucyksXG4gIG9wdGlvbnM6IFtvcHRpb25zLCBkZXBzXVxufSk7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IChvcHRpb25zLCBkZXBzKSA9PiAoe1xuICAuLi5zaGlmdCQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmxpbWl0U2hpZnQkMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uZmxpcCQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uc2l6ZSQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IChvcHRpb25zLCBkZXBzKSA9PiAoe1xuICAuLi5hdXRvUGxhY2VtZW50JDEob3B0aW9ucyksXG4gIG9wdGlvbnM6IFtvcHRpb25zLCBkZXBzXVxufSk7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmhpZGUkMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmlubGluZSQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIFRoaXMgd3JhcHMgdGhlIGNvcmUgYGFycm93YCBtaWRkbGV3YXJlIHRvIGFsbG93IFJlYWN0IHJlZnMgYXMgdGhlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uYXJyb3ckMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSwgdXNlRmxvYXRpbmcgfTtcbiIsIi8vIHNyYy9hcnJvdy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIE5BTUUgPSBcIkFycm93XCI7XG52YXIgQXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHdpZHRoID0gMTAsIGhlaWdodCA9IDUsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBQcmltaXRpdmUuc3ZnLFxuICAgIHtcbiAgICAgIC4uLmFycm93UHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdmlld0JveDogXCIwIDAgMzAgMTBcIixcbiAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IFwibm9uZVwiLFxuICAgICAgY2hpbGRyZW46IHByb3BzLmFzQ2hpbGQgPyBjaGlsZHJlbiA6IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJwb2x5Z29uXCIsIHsgcG9pbnRzOiBcIjAsMCAzMCwwIDE1LDEwXCIgfSlcbiAgICB9XG4gICk7XG59KTtcbkFycm93LmRpc3BsYXlOYW1lID0gTkFNRTtcbnZhciBSb290ID0gQXJyb3c7XG5leHBvcnQge1xuICBBcnJvdyxcbiAgUm9vdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIi8vIHBhY2thZ2VzL3JlYWN0L3VzZS1zaXplL3NyYy91c2Utc2l6ZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xuZnVuY3Rpb24gdXNlU2l6ZShlbGVtZW50KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IFJlYWN0LnVzZVN0YXRlKHZvaWQgMCk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHNldFNpemUoeyB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCB9KTtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgbGV0IHdpZHRoO1xuICAgICAgICBsZXQgaGVpZ2h0O1xuICAgICAgICBpZiAoXCJib3JkZXJCb3hTaXplXCIgaW4gZW50cnkpIHtcbiAgICAgICAgICBjb25zdCBib3JkZXJTaXplRW50cnkgPSBlbnRyeVtcImJvcmRlckJveFNpemVcIl07XG4gICAgICAgICAgY29uc3QgYm9yZGVyU2l6ZSA9IEFycmF5LmlzQXJyYXkoYm9yZGVyU2l6ZUVudHJ5KSA/IGJvcmRlclNpemVFbnRyeVswXSA6IGJvcmRlclNpemVFbnRyeTtcbiAgICAgICAgICB3aWR0aCA9IGJvcmRlclNpemVbXCJpbmxpbmVTaXplXCJdO1xuICAgICAgICAgIGhlaWdodCA9IGJvcmRlclNpemVbXCJibG9ja1NpemVcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHNldFNpemUoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgfSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHsgYm94OiBcImJvcmRlci1ib3hcIiB9KTtcbiAgICAgIHJldHVybiAoKSA9PiByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNpemUodm9pZCAwKTtcbiAgICB9XG4gIH0sIFtlbGVtZW50XSk7XG4gIHJldHVybiBzaXplO1xufVxuZXhwb3J0IHtcbiAgdXNlU2l6ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvcG9wcGVyLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICB1c2VGbG9hdGluZyxcbiAgYXV0b1VwZGF0ZSxcbiAgb2Zmc2V0LFxuICBzaGlmdCxcbiAgbGltaXRTaGlmdCxcbiAgaGlkZSxcbiAgYXJyb3cgYXMgZmxvYXRpbmdVSWFycm93LFxuICBmbGlwLFxuICBzaXplXG59IGZyb20gXCJAZmxvYXRpbmctdWkvcmVhY3QtZG9tXCI7XG5pbXBvcnQgKiBhcyBBcnJvd1ByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWFycm93XCI7XG5pbXBvcnQgeyB1c2VDb21wb3NlZFJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dFNjb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IHVzZVNpemUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBTSURFX09QVElPTlMgPSBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl07XG52YXIgQUxJR05fT1BUSU9OUyA9IFtcInN0YXJ0XCIsIFwiY2VudGVyXCIsIFwiZW5kXCJdO1xudmFyIFBPUFBFUl9OQU1FID0gXCJQb3BwZXJcIjtcbnZhciBbY3JlYXRlUG9wcGVyQ29udGV4dCwgY3JlYXRlUG9wcGVyU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKFBPUFBFUl9OQU1FKTtcbnZhciBbUG9wcGVyUHJvdmlkZXIsIHVzZVBvcHBlckNvbnRleHRdID0gY3JlYXRlUG9wcGVyQ29udGV4dChQT1BQRVJfTkFNRSk7XG52YXIgUG9wcGVyID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZVBvcHBlciwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICBjb25zdCBbYW5jaG9yLCBzZXRBbmNob3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlUG9wcGVyLCBhbmNob3IsIG9uQW5jaG9yQ2hhbmdlOiBzZXRBbmNob3IsIGNoaWxkcmVuIH0pO1xufTtcblBvcHBlci5kaXNwbGF5TmFtZSA9IFBPUFBFUl9OQU1FO1xudmFyIEFOQ0hPUl9OQU1FID0gXCJQb3BwZXJBbmNob3JcIjtcbnZhciBQb3BwZXJBbmNob3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVBvcHBlciwgdmlydHVhbFJlZiwgLi4uYW5jaG9yUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VQb3BwZXJDb250ZXh0KEFOQ0hPUl9OQU1FLCBfX3Njb3BlUG9wcGVyKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgcmVmKTtcbiAgICBjb25zdCBhbmNob3JSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzQW5jaG9yID0gYW5jaG9yUmVmLmN1cnJlbnQ7XG4gICAgICBhbmNob3JSZWYuY3VycmVudCA9IHZpcnR1YWxSZWY/LmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQ7XG4gICAgICBpZiAocHJldmlvdXNBbmNob3IgIT09IGFuY2hvclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnRleHQub25BbmNob3JDaGFuZ2UoYW5jaG9yUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2aXJ0dWFsUmVmID8gbnVsbCA6IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyAuLi5hbmNob3JQcm9wcywgcmVmOiBjb21wb3NlZFJlZnMgfSk7XG4gIH1cbik7XG5Qb3BwZXJBbmNob3IuZGlzcGxheU5hbWUgPSBBTkNIT1JfTkFNRTtcbnZhciBDT05URU5UX05BTUUgPSBcIlBvcHBlckNvbnRlbnRcIjtcbnZhciBbUG9wcGVyQ29udGVudFByb3ZpZGVyLCB1c2VDb250ZW50Q29udGV4dF0gPSBjcmVhdGVQb3BwZXJDb250ZXh0KENPTlRFTlRfTkFNRSk7XG52YXIgUG9wcGVyQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZVBvcHBlcixcbiAgICAgIHNpZGUgPSBcImJvdHRvbVwiLFxuICAgICAgc2lkZU9mZnNldCA9IDAsXG4gICAgICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gICAgICBhbGlnbk9mZnNldCA9IDAsXG4gICAgICBhcnJvd1BhZGRpbmcgPSAwLFxuICAgICAgYXZvaWRDb2xsaXNpb25zID0gdHJ1ZSxcbiAgICAgIGNvbGxpc2lvbkJvdW5kYXJ5ID0gW10sXG4gICAgICBjb2xsaXNpb25QYWRkaW5nOiBjb2xsaXNpb25QYWRkaW5nUHJvcCA9IDAsXG4gICAgICBzdGlja3kgPSBcInBhcnRpYWxcIixcbiAgICAgIGhpZGVXaGVuRGV0YWNoZWQgPSBmYWxzZSxcbiAgICAgIHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kgPSBcIm9wdGltaXplZFwiLFxuICAgICAgb25QbGFjZWQsXG4gICAgICAuLi5jb250ZW50UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZVBvcHBlckNvbnRleHQoQ09OVEVOVF9OQU1FLCBfX3Njb3BlUG9wcGVyKTtcbiAgICBjb25zdCBbY29udGVudCwgc2V0Q29udGVudF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCAobm9kZSkgPT4gc2V0Q29udGVudChub2RlKSk7XG4gICAgY29uc3QgW2Fycm93LCBzZXRBcnJvd10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBhcnJvd1NpemUgPSB1c2VTaXplKGFycm93KTtcbiAgICBjb25zdCBhcnJvd1dpZHRoID0gYXJyb3dTaXplPy53aWR0aCA/PyAwO1xuICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gYXJyb3dTaXplPy5oZWlnaHQgPz8gMDtcbiAgICBjb25zdCBkZXNpcmVkUGxhY2VtZW50ID0gc2lkZSArIChhbGlnbiAhPT0gXCJjZW50ZXJcIiA/IFwiLVwiICsgYWxpZ24gOiBcIlwiKTtcbiAgICBjb25zdCBjb2xsaXNpb25QYWRkaW5nID0gdHlwZW9mIGNvbGxpc2lvblBhZGRpbmdQcm9wID09PSBcIm51bWJlclwiID8gY29sbGlzaW9uUGFkZGluZ1Byb3AgOiB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgLi4uY29sbGlzaW9uUGFkZGluZ1Byb3AgfTtcbiAgICBjb25zdCBib3VuZGFyeSA9IEFycmF5LmlzQXJyYXkoY29sbGlzaW9uQm91bmRhcnkpID8gY29sbGlzaW9uQm91bmRhcnkgOiBbY29sbGlzaW9uQm91bmRhcnldO1xuICAgIGNvbnN0IGhhc0V4cGxpY2l0Qm91bmRhcmllcyA9IGJvdW5kYXJ5Lmxlbmd0aCA+IDA7XG4gICAgY29uc3QgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zID0ge1xuICAgICAgcGFkZGluZzogY29sbGlzaW9uUGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeS5maWx0ZXIoaXNOb3ROdWxsKSxcbiAgICAgIC8vIHdpdGggYHN0cmF0ZWd5OiAnZml4ZWQnYCwgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IGl0IHRvIHJlc3BlY3QgYm91bmRhcmllc1xuICAgICAgYWx0Qm91bmRhcnk6IGhhc0V4cGxpY2l0Qm91bmRhcmllc1xuICAgIH07XG4gICAgY29uc3QgeyByZWZzLCBmbG9hdGluZ1N0eWxlcywgcGxhY2VtZW50LCBpc1Bvc2l0aW9uZWQsIG1pZGRsZXdhcmVEYXRhIH0gPSB1c2VGbG9hdGluZyh7XG4gICAgICAvLyBkZWZhdWx0IHRvIGBmaXhlZGAgc3RyYXRlZ3kgc28gdXNlcnMgZG9uJ3QgaGF2ZSB0byBwaWNrIGFuZCB3ZSBhbHNvIGF2b2lkIGZvY3VzIHNjcm9sbCBpc3N1ZXNcbiAgICAgIHN0cmF0ZWd5OiBcImZpeGVkXCIsXG4gICAgICBwbGFjZW1lbnQ6IGRlc2lyZWRQbGFjZW1lbnQsXG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgY2xlYW51cCA9IGF1dG9VcGRhdGUoLi4uYXJncywge1xuICAgICAgICAgIGFuaW1hdGlvbkZyYW1lOiB1cGRhdGVQb3NpdGlvblN0cmF0ZWd5ID09PSBcImFsd2F5c1wiXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xlYW51cDtcbiAgICAgIH0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IGNvbnRleHQuYW5jaG9yXG4gICAgICB9LFxuICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICBvZmZzZXQoeyBtYWluQXhpczogc2lkZU9mZnNldCArIGFycm93SGVpZ2h0LCBhbGlnbm1lbnRBeGlzOiBhbGlnbk9mZnNldCB9KSxcbiAgICAgICAgYXZvaWRDb2xsaXNpb25zICYmIHNoaWZ0KHtcbiAgICAgICAgICBtYWluQXhpczogdHJ1ZSxcbiAgICAgICAgICBjcm9zc0F4aXM6IGZhbHNlLFxuICAgICAgICAgIGxpbWl0ZXI6IHN0aWNreSA9PT0gXCJwYXJ0aWFsXCIgPyBsaW1pdFNoaWZ0KCkgOiB2b2lkIDAsXG4gICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICAgIH0pLFxuICAgICAgICBhdm9pZENvbGxpc2lvbnMgJiYgZmxpcCh7IC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyB9KSxcbiAgICAgICAgc2l6ZSh7XG4gICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgIGFwcGx5OiAoeyBlbGVtZW50cywgcmVjdHMsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aDogYW5jaG9yV2lkdGgsIGhlaWdodDogYW5jaG9ySGVpZ2h0IH0gPSByZWN0cy5yZWZlcmVuY2U7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3R5bGUgPSBlbGVtZW50cy5mbG9hdGluZy5zdHlsZTtcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZS5zZXRQcm9wZXJ0eShcIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aFwiLCBgJHthdmFpbGFibGVXaWR0aH1weGApO1xuICAgICAgICAgICAgY29udGVudFN0eWxlLnNldFByb3BlcnR5KFwiLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodFwiLCBgJHthdmFpbGFibGVIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZS5zZXRQcm9wZXJ0eShcIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aFwiLCBgJHthbmNob3JXaWR0aH1weGApO1xuICAgICAgICAgICAgY29udGVudFN0eWxlLnNldFByb3BlcnR5KFwiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodFwiLCBgJHthbmNob3JIZWlnaHR9cHhgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBhcnJvdyAmJiBmbG9hdGluZ1VJYXJyb3coeyBlbGVtZW50OiBhcnJvdywgcGFkZGluZzogYXJyb3dQYWRkaW5nIH0pLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW4oeyBhcnJvd1dpZHRoLCBhcnJvd0hlaWdodCB9KSxcbiAgICAgICAgaGlkZVdoZW5EZXRhY2hlZCAmJiBoaWRlKHsgc3RyYXRlZ3k6IFwicmVmZXJlbmNlSGlkZGVuXCIsIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyB9KVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IFtwbGFjZWRTaWRlLCBwbGFjZWRBbGlnbl0gPSBnZXRTaWRlQW5kQWxpZ25Gcm9tUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgY29uc3QgaGFuZGxlUGxhY2VkID0gdXNlQ2FsbGJhY2tSZWYob25QbGFjZWQpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNQb3NpdGlvbmVkKSB7XG4gICAgICAgIGhhbmRsZVBsYWNlZD8uKCk7XG4gICAgICB9XG4gICAgfSwgW2lzUG9zaXRpb25lZCwgaGFuZGxlUGxhY2VkXSk7XG4gICAgY29uc3QgYXJyb3dYID0gbWlkZGxld2FyZURhdGEuYXJyb3c/Lng7XG4gICAgY29uc3QgYXJyb3dZID0gbWlkZGxld2FyZURhdGEuYXJyb3c/Lnk7XG4gICAgY29uc3QgY2Fubm90Q2VudGVyQXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdz8uY2VudGVyT2Zmc2V0ICE9PSAwO1xuICAgIGNvbnN0IFtjb250ZW50WkluZGV4LCBzZXRDb250ZW50WkluZGV4XSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChjb250ZW50KSBzZXRDb250ZW50WkluZGV4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpLnpJbmRleCk7XG4gICAgfSwgW2NvbnRlbnRdKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHJlZjogcmVmcy5zZXRGbG9hdGluZyxcbiAgICAgICAgXCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXJcIjogXCJcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5mbG9hdGluZ1N0eWxlcyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzUG9zaXRpb25lZCA/IGZsb2F0aW5nU3R5bGVzLnRyYW5zZm9ybSA6IFwidHJhbnNsYXRlKDAsIC0yMDAlKVwiLFxuICAgICAgICAgIC8vIGtlZXAgb2ZmIHRoZSBwYWdlIHdoZW4gbWVhc3VyaW5nXG4gICAgICAgICAgbWluV2lkdGg6IFwibWF4LWNvbnRlbnRcIixcbiAgICAgICAgICB6SW5kZXg6IGNvbnRlbnRaSW5kZXgsXG4gICAgICAgICAgW1wiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpblwiXTogW1xuICAgICAgICAgICAgbWlkZGxld2FyZURhdGEudHJhbnNmb3JtT3JpZ2luPy54LFxuICAgICAgICAgICAgbWlkZGxld2FyZURhdGEudHJhbnNmb3JtT3JpZ2luPy55XG4gICAgICAgICAgXS5qb2luKFwiIFwiKSxcbiAgICAgICAgICAvLyBoaWRlIHRoZSBjb250ZW50IGlmIHVzaW5nIHRoZSBoaWRlIG1pZGRsZXdhcmUgYW5kIHNob3VsZCBiZSBoaWRkZW5cbiAgICAgICAgICAvLyBzZXQgdmlzaWJpbGl0eSB0byBoaWRkZW4gYW5kIGRpc2FibGUgcG9pbnRlciBldmVudHMgc28gdGhlIFVJIGJlaGF2ZXNcbiAgICAgICAgICAvLyBhcyBpZiB0aGUgUG9wcGVyQ29udGVudCBpc24ndCB0aGVyZSBhdCBhbGxcbiAgICAgICAgICAuLi5taWRkbGV3YXJlRGF0YS5oaWRlPy5yZWZlcmVuY2VIaWRkZW4gJiYge1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkaXI6IHByb3BzLmRpcixcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgUG9wcGVyQ29udGVudFByb3ZpZGVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiBfX3Njb3BlUG9wcGVyLFxuICAgICAgICAgICAgcGxhY2VkU2lkZSxcbiAgICAgICAgICAgIG9uQXJyb3dDaGFuZ2U6IHNldEFycm93LFxuICAgICAgICAgICAgYXJyb3dYLFxuICAgICAgICAgICAgYXJyb3dZLFxuICAgICAgICAgICAgc2hvdWxkSGlkZUFycm93OiBjYW5ub3RDZW50ZXJBcnJvdyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJkYXRhLXNpZGVcIjogcGxhY2VkU2lkZSxcbiAgICAgICAgICAgICAgICBcImRhdGEtYWxpZ25cIjogcGxhY2VkQWxpZ24sXG4gICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAuLi5jb250ZW50UHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgUG9wcGVyQ29udGVudCBoYXNuJ3QgYmVlbiBwbGFjZWQgeWV0IChub3QgYWxsIG1lYXN1cmVtZW50cyBkb25lKVxuICAgICAgICAgICAgICAgICAgLy8gd2UgcHJldmVudCBhbmltYXRpb25zIHNvIHRoYXQgdXNlcnMncyBhbmltYXRpb24gZG9uJ3Qga2ljayBpbiB0b28gZWFybHkgcmVmZXJyaW5nIHdyb25nIHNpZGVzXG4gICAgICAgICAgICAgICAgICBhbmltYXRpb246ICFpc1Bvc2l0aW9uZWQgPyBcIm5vbmVcIiA6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5Qb3BwZXJDb250ZW50LmRpc3BsYXlOYW1lID0gQ09OVEVOVF9OQU1FO1xudmFyIEFSUk9XX05BTUUgPSBcIlBvcHBlckFycm93XCI7XG52YXIgT1BQT1NJVEVfU0lERSA9IHtcbiAgdG9wOiBcImJvdHRvbVwiLFxuICByaWdodDogXCJsZWZ0XCIsXG4gIGJvdHRvbTogXCJ0b3BcIixcbiAgbGVmdDogXCJyaWdodFwiXG59O1xudmFyIFBvcHBlckFycm93ID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXJBcnJvdzIocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7IF9fc2NvcGVQb3BwZXIsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZUNvbnRlbnRDb250ZXh0KEFSUk9XX05BTUUsIF9fc2NvcGVQb3BwZXIpO1xuICBjb25zdCBiYXNlU2lkZSA9IE9QUE9TSVRFX1NJREVbY29udGVudENvbnRleHQucGxhY2VkU2lkZV07XG4gIHJldHVybiAoXG4gICAgLy8gd2UgaGF2ZSB0byB1c2UgYW4gZXh0cmEgd3JhcHBlciBiZWNhdXNlIGBSZXNpemVPYnNlcnZlcmAgKHVzZWQgYnkgYHVzZVNpemVgKVxuICAgIC8vIGRvZXNuJ3QgcmVwb3J0IHNpemUgYXMgd2UnZCBleHBlY3Qgb24gU1ZHIGVsZW1lbnRzLlxuICAgIC8vIGl0IHJlcG9ydHMgdGhlaXIgYm91bmRpbmcgYm94IHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBsYXJnZXN0IHBhdGggaW5zaWRlIHRoZSBTVkcuXG4gICAgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFwic3BhblwiLFxuICAgICAge1xuICAgICAgICByZWY6IGNvbnRlbnRDb250ZXh0Lm9uQXJyb3dDaGFuZ2UsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBsZWZ0OiBjb250ZW50Q29udGV4dC5hcnJvd1gsXG4gICAgICAgICAgdG9wOiBjb250ZW50Q29udGV4dC5hcnJvd1ksXG4gICAgICAgICAgW2Jhc2VTaWRlXTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgICAgIHRvcDogXCJcIixcbiAgICAgICAgICAgIHJpZ2h0OiBcIjAgMFwiLFxuICAgICAgICAgICAgYm90dG9tOiBcImNlbnRlciAwXCIsXG4gICAgICAgICAgICBsZWZ0OiBcIjEwMCUgMFwiXG4gICAgICAgICAgfVtjb250ZW50Q29udGV4dC5wbGFjZWRTaWRlXSxcbiAgICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICAgIHRvcDogXCJ0cmFuc2xhdGVZKDEwMCUpXCIsXG4gICAgICAgICAgICByaWdodDogXCJ0cmFuc2xhdGVZKDUwJSkgcm90YXRlKDkwZGVnKSB0cmFuc2xhdGVYKC01MCUpXCIsXG4gICAgICAgICAgICBib3R0b206IGByb3RhdGUoMTgwZGVnKWAsXG4gICAgICAgICAgICBsZWZ0OiBcInRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGVYKDUwJSlcIlxuICAgICAgICAgIH1bY29udGVudENvbnRleHQucGxhY2VkU2lkZV0sXG4gICAgICAgICAgdmlzaWJpbGl0eTogY29udGVudENvbnRleHQuc2hvdWxkSGlkZUFycm93ID8gXCJoaWRkZW5cIiA6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICBBcnJvd1ByaW1pdGl2ZS5Sb290LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmFycm93UHJvcHMsXG4gICAgICAgICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIC4uLmFycm93UHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgIC8vIGVuc3VyZXMgdGhlIGVsZW1lbnQgY2FuIGJlIG1lYXN1cmVkIGNvcnJlY3RseSAobW9zdGx5IGZvciBpZiBTVkcpXG4gICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIClcbiAgKTtcbn0pO1xuUG9wcGVyQXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xuZnVuY3Rpb24gaXNOb3ROdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbn1cbnZhciB0cmFuc2Zvcm1PcmlnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgbmFtZTogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgb3B0aW9ucyxcbiAgZm4oZGF0YSkge1xuICAgIGNvbnN0IHsgcGxhY2VtZW50LCByZWN0cywgbWlkZGxld2FyZURhdGEgfSA9IGRhdGE7XG4gICAgY29uc3QgY2Fubm90Q2VudGVyQXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdz8uY2VudGVyT2Zmc2V0ICE9PSAwO1xuICAgIGNvbnN0IGlzQXJyb3dIaWRkZW4gPSBjYW5ub3RDZW50ZXJBcnJvdztcbiAgICBjb25zdCBhcnJvd1dpZHRoID0gaXNBcnJvd0hpZGRlbiA/IDAgOiBvcHRpb25zLmFycm93V2lkdGg7XG4gICAgY29uc3QgYXJyb3dIZWlnaHQgPSBpc0Fycm93SGlkZGVuID8gMCA6IG9wdGlvbnMuYXJyb3dIZWlnaHQ7XG4gICAgY29uc3QgW3BsYWNlZFNpZGUsIHBsYWNlZEFsaWduXSA9IGdldFNpZGVBbmRBbGlnbkZyb21QbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICBjb25zdCBub0Fycm93QWxpZ24gPSB7IHN0YXJ0OiBcIjAlXCIsIGNlbnRlcjogXCI1MCVcIiwgZW5kOiBcIjEwMCVcIiB9W3BsYWNlZEFsaWduXTtcbiAgICBjb25zdCBhcnJvd1hDZW50ZXIgPSAobWlkZGxld2FyZURhdGEuYXJyb3c/LnggPz8gMCkgKyBhcnJvd1dpZHRoIC8gMjtcbiAgICBjb25zdCBhcnJvd1lDZW50ZXIgPSAobWlkZGxld2FyZURhdGEuYXJyb3c/LnkgPz8gMCkgKyBhcnJvd0hlaWdodCAvIDI7XG4gICAgbGV0IHggPSBcIlwiO1xuICAgIGxldCB5ID0gXCJcIjtcbiAgICBpZiAocGxhY2VkU2lkZSA9PT0gXCJib3R0b21cIikge1xuICAgICAgeCA9IGlzQXJyb3dIaWRkZW4gPyBub0Fycm93QWxpZ24gOiBgJHthcnJvd1hDZW50ZXJ9cHhgO1xuICAgICAgeSA9IGAkey1hcnJvd0hlaWdodH1weGA7XG4gICAgfSBlbHNlIGlmIChwbGFjZWRTaWRlID09PSBcInRvcFwiKSB7XG4gICAgICB4ID0gaXNBcnJvd0hpZGRlbiA/IG5vQXJyb3dBbGlnbiA6IGAke2Fycm93WENlbnRlcn1weGA7XG4gICAgICB5ID0gYCR7cmVjdHMuZmxvYXRpbmcuaGVpZ2h0ICsgYXJyb3dIZWlnaHR9cHhgO1xuICAgIH0gZWxzZSBpZiAocGxhY2VkU2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB4ID0gYCR7LWFycm93SGVpZ2h0fXB4YDtcbiAgICAgIHkgPSBpc0Fycm93SGlkZGVuID8gbm9BcnJvd0FsaWduIDogYCR7YXJyb3dZQ2VudGVyfXB4YDtcbiAgICB9IGVsc2UgaWYgKHBsYWNlZFNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICB4ID0gYCR7cmVjdHMuZmxvYXRpbmcud2lkdGggKyBhcnJvd0hlaWdodH1weGA7XG4gICAgICB5ID0gaXNBcnJvd0hpZGRlbiA/IG5vQXJyb3dBbGlnbiA6IGAke2Fycm93WUNlbnRlcn1weGA7XG4gICAgfVxuICAgIHJldHVybiB7IGRhdGE6IHsgeCwgeSB9IH07XG4gIH1cbn0pO1xuZnVuY3Rpb24gZ2V0U2lkZUFuZEFsaWduRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgY29uc3QgW3NpZGUsIGFsaWduID0gXCJjZW50ZXJcIl0gPSBwbGFjZW1lbnQuc3BsaXQoXCItXCIpO1xuICByZXR1cm4gW3NpZGUsIGFsaWduXTtcbn1cbnZhciBSb290MiA9IFBvcHBlcjtcbnZhciBBbmNob3IgPSBQb3BwZXJBbmNob3I7XG52YXIgQ29udGVudCA9IFBvcHBlckNvbnRlbnQ7XG52YXIgQXJyb3cgPSBQb3BwZXJBcnJvdztcbmV4cG9ydCB7XG4gIEFMSUdOX09QVElPTlMsXG4gIEFuY2hvcixcbiAgQXJyb3csXG4gIENvbnRlbnQsXG4gIFBvcHBlcixcbiAgUG9wcGVyQW5jaG9yLFxuICBQb3BwZXJBcnJvdyxcbiAgUG9wcGVyQ29udGVudCxcbiAgUm9vdDIgYXMgUm9vdCxcbiAgU0lERV9PUFRJT05TLFxuICBjcmVhdGVQb3BwZXJTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvcG9ydGFsLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIFBPUlRBTF9OQU1FID0gXCJQb3J0YWxcIjtcbnZhciBQb3J0YWwgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHsgY29udGFpbmVyOiBjb250YWluZXJQcm9wLCAuLi5wb3J0YWxQcm9wcyB9ID0gcHJvcHM7XG4gIGNvbnN0IFttb3VudGVkLCBzZXRNb3VudGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHNldE1vdW50ZWQodHJ1ZSksIFtdKTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCBtb3VudGVkICYmIGdsb2JhbFRoaXM/LmRvY3VtZW50Py5ib2R5O1xuICByZXR1cm4gY29udGFpbmVyID8gUmVhY3RET00uY3JlYXRlUG9ydGFsKC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyAuLi5wb3J0YWxQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSksIGNvbnRhaW5lcikgOiBudWxsO1xufSk7XG5Qb3J0YWwuZGlzcGxheU5hbWUgPSBQT1JUQUxfTkFNRTtcbnZhciBSb290ID0gUG9ydGFsO1xuZXhwb3J0IHtcbiAgUG9ydGFsLFxuICBSb290XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9wcmVzZW5jZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0MiBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1sYXlvdXQtZWZmZWN0XCI7XG5cbi8vIHNyYy91c2Utc3RhdGUtbWFjaGluZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuZnVuY3Rpb24gdXNlU3RhdGVNYWNoaW5lKGluaXRpYWxTdGF0ZSwgbWFjaGluZSkge1xuICByZXR1cm4gUmVhY3QudXNlUmVkdWNlcigoc3RhdGUsIGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gbWFjaGluZVtzdGF0ZV1bZXZlbnRdO1xuICAgIHJldHVybiBuZXh0U3RhdGUgPz8gc3RhdGU7XG4gIH0sIGluaXRpYWxTdGF0ZSk7XG59XG5cbi8vIHNyYy9wcmVzZW5jZS50c3hcbnZhciBQcmVzZW5jZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHByZXNlbnQsIGNoaWxkcmVuIH0gPSBwcm9wcztcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VQcmVzZW5jZShwcmVzZW50KTtcbiAgY29uc3QgY2hpbGQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKHsgcHJlc2VudDogcHJlc2VuY2UuaXNQcmVzZW50IH0pIDogUmVhY3QyLkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICBjb25zdCByZWYgPSB1c2VDb21wb3NlZFJlZnMocHJlc2VuY2UucmVmLCBnZXRFbGVtZW50UmVmKGNoaWxkKSk7XG4gIGNvbnN0IGZvcmNlTW91bnQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIjtcbiAgcmV0dXJuIGZvcmNlTW91bnQgfHwgcHJlc2VuY2UuaXNQcmVzZW50ID8gUmVhY3QyLmNsb25lRWxlbWVudChjaGlsZCwgeyByZWYgfSkgOiBudWxsO1xufTtcblByZXNlbmNlLmRpc3BsYXlOYW1lID0gXCJQcmVzZW5jZVwiO1xuZnVuY3Rpb24gdXNlUHJlc2VuY2UocHJlc2VudCkge1xuICBjb25zdCBbbm9kZSwgc2V0Tm9kZV0gPSBSZWFjdDIudXNlU3RhdGUoKTtcbiAgY29uc3Qgc3R5bGVzUmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgY29uc3QgcHJldlByZXNlbnRSZWYgPSBSZWFjdDIudXNlUmVmKHByZXNlbnQpO1xuICBjb25zdCBwcmV2QW5pbWF0aW9uTmFtZVJlZiA9IFJlYWN0Mi51c2VSZWYoXCJub25lXCIpO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBwcmVzZW50ID8gXCJtb3VudGVkXCIgOiBcInVubW91bnRlZFwiO1xuICBjb25zdCBbc3RhdGUsIHNlbmRdID0gdXNlU3RhdGVNYWNoaW5lKGluaXRpYWxTdGF0ZSwge1xuICAgIG1vdW50ZWQ6IHtcbiAgICAgIFVOTU9VTlQ6IFwidW5tb3VudGVkXCIsXG4gICAgICBBTklNQVRJT05fT1VUOiBcInVubW91bnRTdXNwZW5kZWRcIlxuICAgIH0sXG4gICAgdW5tb3VudFN1c3BlbmRlZDoge1xuICAgICAgTU9VTlQ6IFwibW91bnRlZFwiLFxuICAgICAgQU5JTUFUSU9OX0VORDogXCJ1bm1vdW50ZWRcIlxuICAgIH0sXG4gICAgdW5tb3VudGVkOiB7XG4gICAgICBNT1VOVDogXCJtb3VudGVkXCJcbiAgICB9XG4gIH0pO1xuICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50QW5pbWF0aW9uTmFtZSA9IGdldEFuaW1hdGlvbk5hbWUoc3R5bGVzUmVmLmN1cnJlbnQpO1xuICAgIHByZXZBbmltYXRpb25OYW1lUmVmLmN1cnJlbnQgPSBzdGF0ZSA9PT0gXCJtb3VudGVkXCIgPyBjdXJyZW50QW5pbWF0aW9uTmFtZSA6IFwibm9uZVwiO1xuICB9LCBbc3RhdGVdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSBzdHlsZXNSZWYuY3VycmVudDtcbiAgICBjb25zdCB3YXNQcmVzZW50ID0gcHJldlByZXNlbnRSZWYuY3VycmVudDtcbiAgICBjb25zdCBoYXNQcmVzZW50Q2hhbmdlZCA9IHdhc1ByZXNlbnQgIT09IHByZXNlbnQ7XG4gICAgaWYgKGhhc1ByZXNlbnRDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBwcmV2QW5pbWF0aW9uTmFtZSA9IHByZXZBbmltYXRpb25OYW1lUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50QW5pbWF0aW9uTmFtZSA9IGdldEFuaW1hdGlvbk5hbWUoc3R5bGVzKTtcbiAgICAgIGlmIChwcmVzZW50KSB7XG4gICAgICAgIHNlbmQoXCJNT1VOVFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEFuaW1hdGlvbk5hbWUgPT09IFwibm9uZVwiIHx8IHN0eWxlcz8uZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgc2VuZChcIlVOTU9VTlRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc0FuaW1hdGluZyA9IHByZXZBbmltYXRpb25OYW1lICE9PSBjdXJyZW50QW5pbWF0aW9uTmFtZTtcbiAgICAgICAgaWYgKHdhc1ByZXNlbnQgJiYgaXNBbmltYXRpbmcpIHtcbiAgICAgICAgICBzZW5kKFwiQU5JTUFUSU9OX09VVFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZW5kKFwiVU5NT1VOVFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJldlByZXNlbnRSZWYuY3VycmVudCA9IHByZXNlbnQ7XG4gICAgfVxuICB9LCBbcHJlc2VudCwgc2VuZF0pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChub2RlKSB7XG4gICAgICBsZXQgdGltZW91dElkO1xuICAgICAgY29uc3Qgb3duZXJXaW5kb3cgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gd2luZG93O1xuICAgICAgY29uc3QgaGFuZGxlQW5pbWF0aW9uRW5kID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbmltYXRpb25OYW1lID0gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXNSZWYuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudEFuaW1hdGlvbiA9IGN1cnJlbnRBbmltYXRpb25OYW1lLmluY2x1ZGVzKENTUy5lc2NhcGUoZXZlbnQuYW5pbWF0aW9uTmFtZSkpO1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBub2RlICYmIGlzQ3VycmVudEFuaW1hdGlvbikge1xuICAgICAgICAgIHNlbmQoXCJBTklNQVRJT05fRU5EXCIpO1xuICAgICAgICAgIGlmICghcHJldlByZXNlbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGxNb2RlID0gbm9kZS5zdHlsZS5hbmltYXRpb25GaWxsTW9kZTtcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPSBcImZvcndhcmRzXCI7XG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBvd25lcldpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPT09IFwiZm9yd2FyZHNcIikge1xuICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPSBjdXJyZW50RmlsbE1vZGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZUFuaW1hdGlvblN0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IG5vZGUpIHtcbiAgICAgICAgICBwcmV2QW5pbWF0aW9uTmFtZVJlZi5jdXJyZW50ID0gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXNSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25zdGFydFwiLCBoYW5kbGVBbmltYXRpb25TdGFydCk7XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25jYW5jZWxcIiwgaGFuZGxlQW5pbWF0aW9uRW5kKTtcbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVBbmltYXRpb25FbmQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgb3duZXJXaW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbnN0YXJ0XCIsIGhhbmRsZUFuaW1hdGlvblN0YXJ0KTtcbiAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uY2FuY2VsXCIsIGhhbmRsZUFuaW1hdGlvbkVuZCk7XG4gICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVBbmltYXRpb25FbmQpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZChcIkFOSU1BVElPTl9FTkRcIik7XG4gICAgfVxuICB9LCBbbm9kZSwgc2VuZF0pO1xuICByZXR1cm4ge1xuICAgIGlzUHJlc2VudDogW1wibW91bnRlZFwiLCBcInVubW91bnRTdXNwZW5kZWRcIl0uaW5jbHVkZXMoc3RhdGUpLFxuICAgIHJlZjogUmVhY3QyLnVzZUNhbGxiYWNrKChub2RlMikgPT4ge1xuICAgICAgc3R5bGVzUmVmLmN1cnJlbnQgPSBub2RlMiA/IGdldENvbXB1dGVkU3R5bGUobm9kZTIpIDogbnVsbDtcbiAgICAgIHNldE5vZGUobm9kZTIpO1xuICAgIH0sIFtdKVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXMpIHtcbiAgcmV0dXJuIHN0eWxlcz8uYW5pbWF0aW9uTmFtZSB8fCBcIm5vbmVcIjtcbn1cbmZ1bmN0aW9uIGdldEVsZW1lbnRSZWYoZWxlbWVudCkge1xuICBsZXQgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlbGVtZW50LnByb3BzLCBcInJlZlwiKT8uZ2V0O1xuICBsZXQgbWF5V2FybiA9IGdldHRlciAmJiBcImlzUmVhY3RXYXJuaW5nXCIgaW4gZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZztcbiAgaWYgKG1heVdhcm4pIHtcbiAgICByZXR1cm4gZWxlbWVudC5yZWY7XG4gIH1cbiAgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlbGVtZW50LCBcInJlZlwiKT8uZ2V0O1xuICBtYXlXYXJuID0gZ2V0dGVyICYmIFwiaXNSZWFjdFdhcm5pbmdcIiBpbiBnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICBpZiAobWF5V2Fybikge1xuICAgIHJldHVybiBlbGVtZW50LnByb3BzLnJlZjtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wcm9wcy5yZWYgfHwgZWxlbWVudC5yZWY7XG59XG52YXIgUm9vdCA9IFByZXNlbmNlO1xuZXhwb3J0IHtcbiAgUHJlc2VuY2UsXG4gIFJvb3Rcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdXNlLWNvbnRyb2xsYWJsZS1zdGF0ZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0W1wiIHVzZUluc2VydGlvbkVmZmVjdCBcIi50cmltKCkudG9TdHJpbmcoKV0gfHwgdXNlTGF5b3V0RWZmZWN0O1xuZnVuY3Rpb24gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICBwcm9wLFxuICBkZWZhdWx0UHJvcCxcbiAgb25DaGFuZ2UgPSAoKSA9PiB7XG4gIH0sXG4gIGNhbGxlclxufSkge1xuICBjb25zdCBbdW5jb250cm9sbGVkUHJvcCwgc2V0VW5jb250cm9sbGVkUHJvcCwgb25DaGFuZ2VSZWZdID0gdXNlVW5jb250cm9sbGVkU3RhdGUoe1xuICAgIGRlZmF1bHRQcm9wLFxuICAgIG9uQ2hhbmdlXG4gIH0pO1xuICBjb25zdCBpc0NvbnRyb2xsZWQgPSBwcm9wICE9PSB2b2lkIDA7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gcHJvcCA6IHVuY29udHJvbGxlZFByb3A7XG4gIGlmICh0cnVlKSB7XG4gICAgY29uc3QgaXNDb250cm9sbGVkUmVmID0gUmVhY3QudXNlUmVmKHByb3AgIT09IHZvaWQgMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0NvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWRSZWYuY3VycmVudDtcbiAgICAgIGlmICh3YXNDb250cm9sbGVkICE9PSBpc0NvbnRyb2xsZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHdhc0NvbnRyb2xsZWQgPyBcImNvbnRyb2xsZWRcIiA6IFwidW5jb250cm9sbGVkXCI7XG4gICAgICAgIGNvbnN0IHRvID0gaXNDb250cm9sbGVkID8gXCJjb250cm9sbGVkXCIgOiBcInVuY29udHJvbGxlZFwiO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCR7Y2FsbGVyfSBpcyBjaGFuZ2luZyBmcm9tICR7ZnJvbX0gdG8gJHt0b30uIENvbXBvbmVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdmFsdWUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlzQ29udHJvbGxlZFJlZi5jdXJyZW50ID0gaXNDb250cm9sbGVkO1xuICAgIH0sIFtpc0NvbnRyb2xsZWQsIGNhbGxlcl0pO1xuICB9XG4gIGNvbnN0IHNldFZhbHVlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG5leHRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgICBjb25zdCB2YWx1ZTIgPSBpc0Z1bmN0aW9uKG5leHRWYWx1ZSkgPyBuZXh0VmFsdWUocHJvcCkgOiBuZXh0VmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZTIgIT09IHByb3ApIHtcbiAgICAgICAgICBvbkNoYW5nZVJlZi5jdXJyZW50Py4odmFsdWUyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VW5jb250cm9sbGVkUHJvcChuZXh0VmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzQ29udHJvbGxlZCwgcHJvcCwgc2V0VW5jb250cm9sbGVkUHJvcCwgb25DaGFuZ2VSZWZdXG4gICk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlXTtcbn1cbmZ1bmN0aW9uIHVzZVVuY29udHJvbGxlZFN0YXRlKHtcbiAgZGVmYXVsdFByb3AsXG4gIG9uQ2hhbmdlXG59KSB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFByb3ApO1xuICBjb25zdCBwcmV2VmFsdWVSZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuICBjb25zdCBvbkNoYW5nZVJlZiA9IFJlYWN0LnVzZVJlZihvbkNoYW5nZSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdCgoKSA9PiB7XG4gICAgb25DaGFuZ2VSZWYuY3VycmVudCA9IG9uQ2hhbmdlO1xuICB9LCBbb25DaGFuZ2VdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldlZhbHVlUmVmLmN1cnJlbnQgIT09IHZhbHVlKSB7XG4gICAgICBvbkNoYW5nZVJlZi5jdXJyZW50Py4odmFsdWUpO1xuICAgICAgcHJldlZhbHVlUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgcHJldlZhbHVlUmVmXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlLCBvbkNoYW5nZVJlZl07XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLy8gc3JjL3VzZS1jb250cm9sbGFibGUtc3RhdGUtcmVkdWNlci50c3hcbmltcG9ydCAqIGFzIFJlYWN0MiBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtZWZmZWN0LWV2ZW50XCI7XG52YXIgU1lOQ19TVEFURSA9IFN5bWJvbChcIlJBRElYOlNZTkNfU1RBVEVcIik7XG5mdW5jdGlvbiB1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXIocmVkdWNlciwgdXNlckFyZ3MsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgY29uc3QgeyBwcm9wOiBjb250cm9sbGVkU3RhdGUsIGRlZmF1bHRQcm9wLCBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLCBjYWxsZXIgfSA9IHVzZXJBcmdzO1xuICBjb25zdCBpc0NvbnRyb2xsZWQgPSBjb250cm9sbGVkU3RhdGUgIT09IHZvaWQgMDtcbiAgY29uc3Qgb25DaGFuZ2UgPSB1c2VFZmZlY3RFdmVudChvbkNoYW5nZVByb3ApO1xuICBpZiAodHJ1ZSkge1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZFJlZiA9IFJlYWN0Mi51c2VSZWYoY29udHJvbGxlZFN0YXRlICE9PSB2b2lkIDApO1xuICAgIFJlYWN0Mi51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgd2FzQ29udHJvbGxlZCA9IGlzQ29udHJvbGxlZFJlZi5jdXJyZW50O1xuICAgICAgaWYgKHdhc0NvbnRyb2xsZWQgIT09IGlzQ29udHJvbGxlZCkge1xuICAgICAgICBjb25zdCBmcm9tID0gd2FzQ29udHJvbGxlZCA/IFwiY29udHJvbGxlZFwiIDogXCJ1bmNvbnRyb2xsZWRcIjtcbiAgICAgICAgY29uc3QgdG8gPSBpc0NvbnRyb2xsZWQgPyBcImNvbnRyb2xsZWRcIiA6IFwidW5jb250cm9sbGVkXCI7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtjYWxsZXJ9IGlzIGNoYW5naW5nIGZyb20gJHtmcm9tfSB0byAke3RvfS4gQ29tcG9uZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB2YWx1ZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaXNDb250cm9sbGVkUmVmLmN1cnJlbnQgPSBpc0NvbnRyb2xsZWQ7XG4gICAgfSwgW2lzQ29udHJvbGxlZCwgY2FsbGVyXSk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFt7IC4uLmluaXRpYWxBcmcsIHN0YXRlOiBkZWZhdWx0UHJvcCB9XTtcbiAgaWYgKGluaXQpIHtcbiAgICBhcmdzLnB1c2goaW5pdCk7XG4gIH1cbiAgY29uc3QgW2ludGVybmFsU3RhdGUsIGRpc3BhdGNoXSA9IFJlYWN0Mi51c2VSZWR1Y2VyKFxuICAgIChzdGF0ZTIsIGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBTWU5DX1NUQVRFKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlMiwgc3RhdGU6IGFjdGlvbi5zdGF0ZSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dCA9IHJlZHVjZXIoc3RhdGUyLCBhY3Rpb24pO1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAmJiAhT2JqZWN0LmlzKG5leHQuc3RhdGUsIHN0YXRlMi5zdGF0ZSkpIHtcbiAgICAgICAgb25DaGFuZ2UobmV4dC5zdGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9LFxuICAgIC4uLmFyZ3NcbiAgKTtcbiAgY29uc3QgdW5jb250cm9sbGVkU3RhdGUgPSBpbnRlcm5hbFN0YXRlLnN0YXRlO1xuICBjb25zdCBwcmV2VmFsdWVSZWYgPSBSZWFjdDIudXNlUmVmKHVuY29udHJvbGxlZFN0YXRlKTtcbiAgUmVhY3QyLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZWYWx1ZVJlZi5jdXJyZW50ICE9PSB1bmNvbnRyb2xsZWRTdGF0ZSkge1xuICAgICAgcHJldlZhbHVlUmVmLmN1cnJlbnQgPSB1bmNvbnRyb2xsZWRTdGF0ZTtcbiAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgIG9uQ2hhbmdlKHVuY29udHJvbGxlZFN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtvbkNoYW5nZSwgdW5jb250cm9sbGVkU3RhdGUsIHByZXZWYWx1ZVJlZiwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IHN0YXRlID0gUmVhY3QyLnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZDIgPSBjb250cm9sbGVkU3RhdGUgIT09IHZvaWQgMDtcbiAgICBpZiAoaXNDb250cm9sbGVkMikge1xuICAgICAgcmV0dXJuIHsgLi4uaW50ZXJuYWxTdGF0ZSwgc3RhdGU6IGNvbnRyb2xsZWRTdGF0ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxTdGF0ZTtcbiAgfSwgW2ludGVybmFsU3RhdGUsIGNvbnRyb2xsZWRTdGF0ZV0pO1xuICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDb250cm9sbGVkICYmICFPYmplY3QuaXMoY29udHJvbGxlZFN0YXRlLCBpbnRlcm5hbFN0YXRlLnN0YXRlKSkge1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiBTWU5DX1NUQVRFLCBzdGF0ZTogY29udHJvbGxlZFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRyb2xsZWRTdGF0ZSwgaW50ZXJuYWxTdGF0ZS5zdGF0ZSwgaXNDb250cm9sbGVkXSk7XG4gIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoXTtcbn1cbmV4cG9ydCB7XG4gIHVzZUNvbnRyb2xsYWJsZVN0YXRlLFxuICB1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdmlzdWFsbHktaGlkZGVuLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZVwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgVklTVUFMTFlfSElEREVOX1NUWUxFUyA9IE9iamVjdC5mcmVlemUoe1xuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIGJvcmRlcjogMCxcbiAgd2lkdGg6IDEsXG4gIGhlaWdodDogMSxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAtMSxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIGNsaXA6IFwicmVjdCgwLCAwLCAwLCAwKVwiLFxuICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICB3b3JkV3JhcDogXCJub3JtYWxcIlxufSk7XG52YXIgTkFNRSA9IFwiVmlzdWFsbHlIaWRkZW5cIjtcbnZhciBWaXN1YWxseUhpZGRlbiA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuc3BhbixcbiAgICAgIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICBzdHlsZTogeyAuLi5WSVNVQUxMWV9ISURERU5fU1RZTEVTLCAuLi5wcm9wcy5zdHlsZSB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcblZpc3VhbGx5SGlkZGVuLmRpc3BsYXlOYW1lID0gTkFNRTtcbnZhciBSb290ID0gVmlzdWFsbHlIaWRkZW47XG5leHBvcnQge1xuICBSb290LFxuICBWSVNVQUxMWV9ISURERU5fU1RZTEVTLFxuICBWaXN1YWxseUhpZGRlblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdG9vbHRpcC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgRGlzbWlzc2FibGVMYXllciB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZGlzbWlzc2FibGUtbGF5ZXJcIjtcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1pZFwiO1xuaW1wb3J0ICogYXMgUG9wcGVyUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcG9wcGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXJTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcG9wcGVyXCI7XG5pbXBvcnQgeyBQb3J0YWwgYXMgUG9ydGFsUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3J0YWxcIjtcbmltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmVzZW5jZVwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3R0YWJsZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3Qtc2xvdFwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCAqIGFzIFZpc3VhbGx5SGlkZGVuUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuXCI7XG5pbXBvcnQgeyBqc3gsIGpzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBbY3JlYXRlVG9vbHRpcENvbnRleHQsIGNyZWF0ZVRvb2x0aXBTY29wZV0gPSBjcmVhdGVDb250ZXh0U2NvcGUoXCJUb29sdGlwXCIsIFtcbiAgY3JlYXRlUG9wcGVyU2NvcGVcbl0pO1xudmFyIHVzZVBvcHBlclNjb3BlID0gY3JlYXRlUG9wcGVyU2NvcGUoKTtcbnZhciBQUk9WSURFUl9OQU1FID0gXCJUb29sdGlwUHJvdmlkZXJcIjtcbnZhciBERUZBVUxUX0RFTEFZX0RVUkFUSU9OID0gNzAwO1xudmFyIFRPT0xUSVBfT1BFTiA9IFwidG9vbHRpcC5vcGVuXCI7XG52YXIgW1Rvb2x0aXBQcm92aWRlckNvbnRleHRQcm92aWRlciwgdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dF0gPSBjcmVhdGVUb29sdGlwQ29udGV4dChQUk9WSURFUl9OQU1FKTtcbnZhciBUb29sdGlwUHJvdmlkZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIF9fc2NvcGVUb29sdGlwLFxuICAgIGRlbGF5RHVyYXRpb24gPSBERUZBVUxUX0RFTEFZX0RVUkFUSU9OLFxuICAgIHNraXBEZWxheUR1cmF0aW9uID0gMzAwLFxuICAgIGRpc2FibGVIb3ZlcmFibGVDb250ZW50ID0gZmFsc2UsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpc09wZW5EZWxheWVkUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICBjb25zdCBpc1BvaW50ZXJJblRyYW5zaXRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwRGVsYXlUaW1lclJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBza2lwRGVsYXlUaW1lciA9IHNraXBEZWxheVRpbWVyUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQoc2tpcERlbGF5VGltZXIpO1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFRvb2x0aXBQcm92aWRlckNvbnRleHRQcm92aWRlcixcbiAgICB7XG4gICAgICBzY29wZTogX19zY29wZVRvb2x0aXAsXG4gICAgICBpc09wZW5EZWxheWVkUmVmLFxuICAgICAgZGVsYXlEdXJhdGlvbixcbiAgICAgIG9uT3BlbjogUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNraXBEZWxheVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICBpc09wZW5EZWxheWVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0sIFtdKSxcbiAgICAgIG9uQ2xvc2U6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChza2lwRGVsYXlUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgc2tpcERlbGF5VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+IGlzT3BlbkRlbGF5ZWRSZWYuY3VycmVudCA9IHRydWUsXG4gICAgICAgICAgc2tpcERlbGF5RHVyYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH0sIFtza2lwRGVsYXlEdXJhdGlvbl0pLFxuICAgICAgaXNQb2ludGVySW5UcmFuc2l0UmVmLFxuICAgICAgb25Qb2ludGVySW5UcmFuc2l0Q2hhbmdlOiBSZWFjdC51c2VDYWxsYmFjaygoaW5UcmFuc2l0KSA9PiB7XG4gICAgICAgIGlzUG9pbnRlckluVHJhbnNpdFJlZi5jdXJyZW50ID0gaW5UcmFuc2l0O1xuICAgICAgfSwgW10pLFxuICAgICAgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQsXG4gICAgICBjaGlsZHJlblxuICAgIH1cbiAgKTtcbn07XG5Ub29sdGlwUHJvdmlkZXIuZGlzcGxheU5hbWUgPSBQUk9WSURFUl9OQU1FO1xudmFyIFRPT0xUSVBfTkFNRSA9IFwiVG9vbHRpcFwiO1xudmFyIFtUb29sdGlwQ29udGV4dFByb3ZpZGVyLCB1c2VUb29sdGlwQ29udGV4dF0gPSBjcmVhdGVUb29sdGlwQ29udGV4dChUT09MVElQX05BTUUpO1xudmFyIFRvb2x0aXAgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIF9fc2NvcGVUb29sdGlwLFxuICAgIGNoaWxkcmVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHRPcGVuLFxuICAgIG9uT3BlbkNoYW5nZSxcbiAgICBkaXNhYmxlSG92ZXJhYmxlQ29udGVudDogZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRQcm9wLFxuICAgIGRlbGF5RHVyYXRpb246IGRlbGF5RHVyYXRpb25Qcm9wXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJvdmlkZXJDb250ZXh0ID0gdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dChUT09MVElQX05BTUUsIHByb3BzLl9fc2NvcGVUb29sdGlwKTtcbiAgY29uc3QgcG9wcGVyU2NvcGUgPSB1c2VQb3BwZXJTY29wZShfX3Njb3BlVG9vbHRpcCk7XG4gIGNvbnN0IFt0cmlnZ2VyLCBzZXRUcmlnZ2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBjb250ZW50SWQgPSB1c2VJZCgpO1xuICBjb25zdCBvcGVuVGltZXJSZWYgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IGRpc2FibGVIb3ZlcmFibGVDb250ZW50ID0gZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRQcm9wID8/IHByb3ZpZGVyQ29udGV4dC5kaXNhYmxlSG92ZXJhYmxlQ29udGVudDtcbiAgY29uc3QgZGVsYXlEdXJhdGlvbiA9IGRlbGF5RHVyYXRpb25Qcm9wID8/IHByb3ZpZGVyQ29udGV4dC5kZWxheUR1cmF0aW9uO1xuICBjb25zdCB3YXNPcGVuRGVsYXllZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICBwcm9wOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0UHJvcDogZGVmYXVsdE9wZW4gPz8gZmFsc2UsXG4gICAgb25DaGFuZ2U6IChvcGVuMikgPT4ge1xuICAgICAgaWYgKG9wZW4yKSB7XG4gICAgICAgIHByb3ZpZGVyQ29udGV4dC5vbk9wZW4oKTtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoVE9PTFRJUF9PUEVOKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm92aWRlckNvbnRleHQub25DbG9zZSgpO1xuICAgICAgfVxuICAgICAgb25PcGVuQ2hhbmdlPy4ob3BlbjIpO1xuICAgIH0sXG4gICAgY2FsbGVyOiBUT09MVElQX05BTUVcbiAgfSk7XG4gIGNvbnN0IHN0YXRlQXR0cmlidXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW4gPyB3YXNPcGVuRGVsYXllZFJlZi5jdXJyZW50ID8gXCJkZWxheWVkLW9wZW5cIiA6IFwiaW5zdGFudC1vcGVuXCIgOiBcImNsb3NlZFwiO1xuICB9LCBbb3Blbl0pO1xuICBjb25zdCBoYW5kbGVPcGVuID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob3BlblRpbWVyUmVmLmN1cnJlbnQpO1xuICAgIG9wZW5UaW1lclJlZi5jdXJyZW50ID0gMDtcbiAgICB3YXNPcGVuRGVsYXllZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgfSwgW3NldE9wZW5dKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dChvcGVuVGltZXJSZWYuY3VycmVudCk7XG4gICAgb3BlblRpbWVyUmVmLmN1cnJlbnQgPSAwO1xuICAgIHNldE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0T3Blbl0pO1xuICBjb25zdCBoYW5kbGVEZWxheWVkT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9wZW5UaW1lclJlZi5jdXJyZW50KTtcbiAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdhc09wZW5EZWxheWVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgIG9wZW5UaW1lclJlZi5jdXJyZW50ID0gMDtcbiAgICB9LCBkZWxheUR1cmF0aW9uKTtcbiAgfSwgW2RlbGF5RHVyYXRpb24sIHNldE9wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG9wZW5UaW1lclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob3BlblRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IDA7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQb3BwZXJQcmltaXRpdmUuUm9vdCwgeyAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgVG9vbHRpcENvbnRleHRQcm92aWRlcixcbiAgICB7XG4gICAgICBzY29wZTogX19zY29wZVRvb2x0aXAsXG4gICAgICBjb250ZW50SWQsXG4gICAgICBvcGVuLFxuICAgICAgc3RhdGVBdHRyaWJ1dGUsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyQ2hhbmdlOiBzZXRUcmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyRW50ZXI6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHByb3ZpZGVyQ29udGV4dC5pc09wZW5EZWxheWVkUmVmLmN1cnJlbnQpIGhhbmRsZURlbGF5ZWRPcGVuKCk7XG4gICAgICAgIGVsc2UgaGFuZGxlT3BlbigpO1xuICAgICAgfSwgW3Byb3ZpZGVyQ29udGV4dC5pc09wZW5EZWxheWVkUmVmLCBoYW5kbGVEZWxheWVkT3BlbiwgaGFuZGxlT3Blbl0pLFxuICAgICAgb25UcmlnZ2VyTGVhdmU6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKGRpc2FibGVIb3ZlcmFibGVDb250ZW50KSB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9wZW5UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0sIFtoYW5kbGVDbG9zZSwgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRdKSxcbiAgICAgIG9uT3BlbjogaGFuZGxlT3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQsXG4gICAgICBjaGlsZHJlblxuICAgIH1cbiAgKSB9KTtcbn07XG5Ub29sdGlwLmRpc3BsYXlOYW1lID0gVE9PTFRJUF9OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiVG9vbHRpcFRyaWdnZXJcIjtcbnZhciBUb29sdGlwVHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlVG9vbHRpcCwgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoVFJJR0dFUl9OQU1FLCBfX3Njb3BlVG9vbHRpcCk7XG4gICAgY29uc3QgcHJvdmlkZXJDb250ZXh0ID0gdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dChUUklHR0VSX05BTUUsIF9fc2NvcGVUb29sdGlwKTtcbiAgICBjb25zdCBwb3BwZXJTY29wZSA9IHVzZVBvcHBlclNjb3BlKF9fc2NvcGVUb29sdGlwKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgcmVmLCBjb250ZXh0Lm9uVHJpZ2dlckNoYW5nZSk7XG4gICAgY29uc3QgaXNQb2ludGVyRG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgaGFzUG9pbnRlck1vdmVPcGVuZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGlzUG9pbnRlckRvd25SZWYuY3VycmVudCA9IGZhbHNlLCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgfSwgW2hhbmRsZVBvaW50ZXJVcF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BbmNob3IsIHsgYXNDaGlsZDogdHJ1ZSwgLi4ucG9wcGVyU2NvcGUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmJ1dHRvbixcbiAgICAgIHtcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGNvbnRleHQub3BlbiA/IGNvbnRleHQuY29udGVudElkIDogdm9pZCAwLFxuICAgICAgICBcImRhdGEtc3RhdGVcIjogY29udGV4dC5zdGF0ZUF0dHJpYnV0ZSxcbiAgICAgICAgLi4udHJpZ2dlclByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgb25Qb2ludGVyTW92ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25Qb2ludGVyTW92ZSwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIpIHJldHVybjtcbiAgICAgICAgICBpZiAoIWhhc1BvaW50ZXJNb3ZlT3BlbmVkUmVmLmN1cnJlbnQgJiYgIXByb3ZpZGVyQ29udGV4dC5pc1BvaW50ZXJJblRyYW5zaXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29udGV4dC5vblRyaWdnZXJFbnRlcigpO1xuICAgICAgICAgICAgaGFzUG9pbnRlck1vdmVPcGVuZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgb25Qb2ludGVyTGVhdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uUG9pbnRlckxlYXZlLCAoKSA9PiB7XG4gICAgICAgICAgY29udGV4dC5vblRyaWdnZXJMZWF2ZSgpO1xuICAgICAgICAgIGhhc1BvaW50ZXJNb3ZlT3BlbmVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICAgIG9uUG9pbnRlckRvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uUG9pbnRlckRvd24sICgpID0+IHtcbiAgICAgICAgICBpZiAoY29udGV4dC5vcGVuKSB7XG4gICAgICAgICAgICBjb250ZXh0Lm9uQ2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNQb2ludGVyRG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgb25Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25Gb2N1cywgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNQb2ludGVyRG93blJlZi5jdXJyZW50KSBjb250ZXh0Lm9uT3BlbigpO1xuICAgICAgICB9KSxcbiAgICAgICAgb25CbHVyOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkJsdXIsIGNvbnRleHQub25DbG9zZSksXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uQ2xpY2ssIGNvbnRleHQub25DbG9zZSlcbiAgICAgIH1cbiAgICApIH0pO1xuICB9XG4pO1xuVG9vbHRpcFRyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgUE9SVEFMX05BTUUgPSBcIlRvb2x0aXBQb3J0YWxcIjtcbnZhciBbUG9ydGFsUHJvdmlkZXIsIHVzZVBvcnRhbENvbnRleHRdID0gY3JlYXRlVG9vbHRpcENvbnRleHQoUE9SVEFMX05BTUUsIHtcbiAgZm9yY2VNb3VudDogdm9pZCAwXG59KTtcbnZhciBUb29sdGlwUG9ydGFsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZVRvb2x0aXAsIGZvcmNlTW91bnQsIGNoaWxkcmVuLCBjb250YWluZXIgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoUE9SVEFMX05BTUUsIF9fc2NvcGVUb29sdGlwKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJvdmlkZXIsIHsgc2NvcGU6IF9fc2NvcGVUb29sdGlwLCBmb3JjZU1vdW50LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJpbWl0aXZlLCB7IGFzQ2hpbGQ6IHRydWUsIGNvbnRhaW5lciwgY2hpbGRyZW4gfSkgfSkgfSk7XG59O1xuVG9vbHRpcFBvcnRhbC5kaXNwbGF5TmFtZSA9IFBPUlRBTF9OQU1FO1xudmFyIENPTlRFTlRfTkFNRSA9IFwiVG9vbHRpcENvbnRlbnRcIjtcbnZhciBUb29sdGlwQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgcG9ydGFsQ29udGV4dCA9IHVzZVBvcnRhbENvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlVG9vbHRpcCk7XG4gICAgY29uc3QgeyBmb3JjZU1vdW50ID0gcG9ydGFsQ29udGV4dC5mb3JjZU1vdW50LCBzaWRlID0gXCJ0b3BcIiwgLi4uY29udGVudFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlVG9vbHRpcCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJlc2VuY2UsIHsgcHJlc2VudDogZm9yY2VNb3VudCB8fCBjb250ZXh0Lm9wZW4sIGNoaWxkcmVuOiBjb250ZXh0LmRpc2FibGVIb3ZlcmFibGVDb250ZW50ID8gLyogQF9fUFVSRV9fICovIGpzeChUb29sdGlwQ29udGVudEltcGwsIHsgc2lkZSwgLi4uY29udGVudFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goVG9vbHRpcENvbnRlbnRIb3ZlcmFibGUsIHsgc2lkZSwgLi4uY29udGVudFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSB9KTtcbiAgfVxuKTtcbnZhciBUb29sdGlwQ29udGVudEhvdmVyYWJsZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZVRvb2x0aXBDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVRvb2x0aXApO1xuICBjb25zdCBwcm92aWRlckNvbnRleHQgPSB1c2VUb29sdGlwUHJvdmlkZXJDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVRvb2x0aXApO1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHJlZik7XG4gIGNvbnN0IFtwb2ludGVyR3JhY2VBcmVhLCBzZXRQb2ludGVyR3JhY2VBcmVhXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHRyaWdnZXIsIG9uQ2xvc2UgfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGNvbnRlbnQgPSByZWYuY3VycmVudDtcbiAgY29uc3QgeyBvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2UgfSA9IHByb3ZpZGVyQ29udGV4dDtcbiAgY29uc3QgaGFuZGxlUmVtb3ZlR3JhY2VBcmVhID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFBvaW50ZXJHcmFjZUFyZWEobnVsbCk7XG4gICAgb25Qb2ludGVySW5UcmFuc2l0Q2hhbmdlKGZhbHNlKTtcbiAgfSwgW29uUG9pbnRlckluVHJhbnNpdENoYW5nZV0pO1xuICBjb25zdCBoYW5kbGVDcmVhdGVHcmFjZUFyZWEgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQsIGhvdmVyVGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIGNvbnN0IGV4aXRQb2ludCA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9O1xuICAgICAgY29uc3QgZXhpdFNpZGUgPSBnZXRFeGl0U2lkZUZyb21SZWN0KGV4aXRQb2ludCwgY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICBjb25zdCBwYWRkZWRFeGl0UG9pbnRzID0gZ2V0UGFkZGVkRXhpdFBvaW50cyhleGl0UG9pbnQsIGV4aXRTaWRlKTtcbiAgICAgIGNvbnN0IGhvdmVyVGFyZ2V0UG9pbnRzID0gZ2V0UG9pbnRzRnJvbVJlY3QoaG92ZXJUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgY29uc3QgZ3JhY2VBcmVhID0gZ2V0SHVsbChbLi4ucGFkZGVkRXhpdFBvaW50cywgLi4uaG92ZXJUYXJnZXRQb2ludHNdKTtcbiAgICAgIHNldFBvaW50ZXJHcmFjZUFyZWEoZ3JhY2VBcmVhKTtcbiAgICAgIG9uUG9pbnRlckluVHJhbnNpdENoYW5nZSh0cnVlKTtcbiAgICB9LFxuICAgIFtvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2VdXG4gICk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IGhhbmRsZVJlbW92ZUdyYWNlQXJlYSgpO1xuICB9LCBbaGFuZGxlUmVtb3ZlR3JhY2VBcmVhXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRyaWdnZXIgJiYgY29udGVudCkge1xuICAgICAgY29uc3QgaGFuZGxlVHJpZ2dlckxlYXZlID0gKGV2ZW50KSA9PiBoYW5kbGVDcmVhdGVHcmFjZUFyZWEoZXZlbnQsIGNvbnRlbnQpO1xuICAgICAgY29uc3QgaGFuZGxlQ29udGVudExlYXZlID0gKGV2ZW50KSA9PiBoYW5kbGVDcmVhdGVHcmFjZUFyZWEoZXZlbnQsIHRyaWdnZXIpO1xuICAgICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmxlYXZlXCIsIGhhbmRsZVRyaWdnZXJMZWF2ZSk7XG4gICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgaGFuZGxlQ29udGVudExlYXZlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyTGVhdmUpO1xuICAgICAgICBjb250ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgaGFuZGxlQ29udGVudExlYXZlKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbdHJpZ2dlciwgY29udGVudCwgaGFuZGxlQ3JlYXRlR3JhY2VBcmVhLCBoYW5kbGVSZW1vdmVHcmFjZUFyZWFdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocG9pbnRlckdyYWNlQXJlYSkge1xuICAgICAgY29uc3QgaGFuZGxlVHJhY2tQb2ludGVyR3JhY2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBwb2ludGVyUG9zaXRpb24gPSB7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfTtcbiAgICAgICAgY29uc3QgaGFzRW50ZXJlZFRhcmdldCA9IHRyaWdnZXI/LmNvbnRhaW5zKHRhcmdldCkgfHwgY29udGVudD8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgY29uc3QgaXNQb2ludGVyT3V0c2lkZUdyYWNlQXJlYSA9ICFpc1BvaW50SW5Qb2x5Z29uKHBvaW50ZXJQb3NpdGlvbiwgcG9pbnRlckdyYWNlQXJlYSk7XG4gICAgICAgIGlmIChoYXNFbnRlcmVkVGFyZ2V0KSB7XG4gICAgICAgICAgaGFuZGxlUmVtb3ZlR3JhY2VBcmVhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQb2ludGVyT3V0c2lkZUdyYWNlQXJlYSkge1xuICAgICAgICAgIGhhbmRsZVJlbW92ZUdyYWNlQXJlYSgpO1xuICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBoYW5kbGVUcmFja1BvaW50ZXJHcmFjZSk7XG4gICAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIGhhbmRsZVRyYWNrUG9pbnRlckdyYWNlKTtcbiAgICB9XG4gIH0sIFt0cmlnZ2VyLCBjb250ZW50LCBwb2ludGVyR3JhY2VBcmVhLCBvbkNsb3NlLCBoYW5kbGVSZW1vdmVHcmFjZUFyZWFdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goVG9vbHRpcENvbnRlbnRJbXBsLCB7IC4uLnByb3BzLCByZWY6IGNvbXBvc2VkUmVmcyB9KTtcbn0pO1xudmFyIFtWaXN1YWxseUhpZGRlbkNvbnRlbnRDb250ZXh0UHJvdmlkZXIsIHVzZVZpc3VhbGx5SGlkZGVuQ29udGVudENvbnRleHRdID0gY3JlYXRlVG9vbHRpcENvbnRleHQoVE9PTFRJUF9OQU1FLCB7IGlzSW5zaWRlOiBmYWxzZSB9KTtcbnZhciBTbG90dGFibGUgPSBjcmVhdGVTbG90dGFibGUoXCJUb29sdGlwQ29udGVudFwiKTtcbnZhciBUb29sdGlwQ29udGVudEltcGwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIF9fc2NvcGVUb29sdGlwLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgb25Fc2NhcGVLZXlEb3duLFxuICAgICAgb25Qb2ludGVyRG93bk91dHNpZGUsXG4gICAgICAuLi5jb250ZW50UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZVRvb2x0aXBDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHsgb25DbG9zZSB9ID0gY29udGV4dDtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUT09MVElQX09QRU4sIG9uQ2xvc2UpO1xuICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVE9PTFRJUF9PUEVOLCBvbkNsb3NlKTtcbiAgICB9LCBbb25DbG9zZV0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC50cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICBpZiAodGFyZ2V0Py5jb250YWlucyhjb250ZXh0LnRyaWdnZXIpKSBvbkNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSwgW2NvbnRleHQudHJpZ2dlciwgb25DbG9zZV0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgRGlzbWlzc2FibGVMYXllcixcbiAgICAgIHtcbiAgICAgICAgYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgICAgb25Fc2NhcGVLZXlEb3duLFxuICAgICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgICAgb25Gb2N1c091dHNpZGU6IChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgb25EaXNtaXNzOiBvbkNsb3NlLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeHMoXG4gICAgICAgICAgUG9wcGVyUHJpbWl0aXZlLkNvbnRlbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGNvbnRleHQuc3RhdGVBdHRyaWJ1dGUsXG4gICAgICAgICAgICAuLi5wb3BwZXJTY29wZSxcbiAgICAgICAgICAgIC4uLmNvbnRlbnRQcm9wcyxcbiAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgICAvLyByZS1uYW1lc3BhY2UgZXhwb3NlZCBjb250ZW50IGN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBcIi0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW5cIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilcIixcbiAgICAgICAgICAgICAgICBcIi0tcmFkaXgtdG9vbHRpcC1jb250ZW50LWF2YWlsYWJsZS13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0XCI6IFwidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtdHJpZ2dlci13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtdHJpZ2dlci1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodClcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGpzeChTbG90dGFibGUsIHsgY2hpbGRyZW4gfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goVmlzdWFsbHlIaWRkZW5Db250ZW50Q29udGV4dFByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlVG9vbHRpcCwgaXNJbnNpZGU6IHRydWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFZpc3VhbGx5SGlkZGVuUHJpbWl0aXZlLlJvb3QsIHsgaWQ6IGNvbnRleHQuY29udGVudElkLCByb2xlOiBcInRvb2x0aXBcIiwgY2hpbGRyZW46IGFyaWFMYWJlbCB8fCBjaGlsZHJlbiB9KSB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5Ub29sdGlwQ29udGVudC5kaXNwbGF5TmFtZSA9IENPTlRFTlRfTkFNRTtcbnZhciBBUlJPV19OQU1FID0gXCJUb29sdGlwQXJyb3dcIjtcbnZhciBUb29sdGlwQXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVRvb2x0aXAsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHZpc3VhbGx5SGlkZGVuQ29udGVudENvbnRleHQgPSB1c2VWaXN1YWxseUhpZGRlbkNvbnRlbnRDb250ZXh0KFxuICAgICAgQVJST1dfTkFNRSxcbiAgICAgIF9fc2NvcGVUb29sdGlwXG4gICAgKTtcbiAgICByZXR1cm4gdmlzdWFsbHlIaWRkZW5Db250ZW50Q29udGV4dC5pc0luc2lkZSA/IG51bGwgOiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BcnJvdywgeyAuLi5wb3BwZXJTY29wZSwgLi4uYXJyb3dQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSk7XG4gIH1cbik7XG5Ub29sdGlwQXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xuZnVuY3Rpb24gZ2V0RXhpdFNpZGVGcm9tUmVjdChwb2ludCwgcmVjdCkge1xuICBjb25zdCB0b3AgPSBNYXRoLmFicyhyZWN0LnRvcCAtIHBvaW50LnkpO1xuICBjb25zdCBib3R0b20gPSBNYXRoLmFicyhyZWN0LmJvdHRvbSAtIHBvaW50LnkpO1xuICBjb25zdCByaWdodCA9IE1hdGguYWJzKHJlY3QucmlnaHQgLSBwb2ludC54KTtcbiAgY29uc3QgbGVmdCA9IE1hdGguYWJzKHJlY3QubGVmdCAtIHBvaW50LngpO1xuICBzd2l0Y2ggKE1hdGgubWluKHRvcCwgYm90dG9tLCByaWdodCwgbGVmdCkpIHtcbiAgICBjYXNlIGxlZnQ6XG4gICAgICByZXR1cm4gXCJsZWZ0XCI7XG4gICAgY2FzZSByaWdodDpcbiAgICAgIHJldHVybiBcInJpZ2h0XCI7XG4gICAgY2FzZSB0b3A6XG4gICAgICByZXR1cm4gXCJ0b3BcIjtcbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIHJldHVybiBcImJvdHRvbVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnJlYWNoYWJsZVwiKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UGFkZGVkRXhpdFBvaW50cyhleGl0UG9pbnQsIGV4aXRTaWRlLCBwYWRkaW5nID0gNSkge1xuICBjb25zdCBwYWRkZWRFeGl0UG9pbnRzID0gW107XG4gIHN3aXRjaCAoZXhpdFNpZGUpIHtcbiAgICBjYXNlIFwidG9wXCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggLSBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSArIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCArIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgcGFkZGVkRXhpdFBvaW50cy5wdXNoKFxuICAgICAgICB7IHg6IGV4aXRQb2ludC54IC0gcGFkZGluZywgeTogZXhpdFBvaW50LnkgLSBwYWRkaW5nIH0sXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggKyBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggKyBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCArIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggLSBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCAtIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHBhZGRlZEV4aXRQb2ludHM7XG59XG5mdW5jdGlvbiBnZXRQb2ludHNGcm9tUmVjdChyZWN0KSB7XG4gIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSByZWN0O1xuICByZXR1cm4gW1xuICAgIHsgeDogbGVmdCwgeTogdG9wIH0sXG4gICAgeyB4OiByaWdodCwgeTogdG9wIH0sXG4gICAgeyB4OiByaWdodCwgeTogYm90dG9tIH0sXG4gICAgeyB4OiBsZWZ0LCB5OiBib3R0b20gfVxuICBdO1xufVxuZnVuY3Rpb24gaXNQb2ludEluUG9seWdvbihwb2ludCwgcG9seWdvbikge1xuICBjb25zdCB7IHgsIHkgfSA9IHBvaW50O1xuICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwLCBqID0gcG9seWdvbi5sZW5ndGggLSAxOyBpIDwgcG9seWdvbi5sZW5ndGg7IGogPSBpKyspIHtcbiAgICBjb25zdCBpaSA9IHBvbHlnb25baV07XG4gICAgY29uc3QgamogPSBwb2x5Z29uW2pdO1xuICAgIGNvbnN0IHhpID0gaWkueDtcbiAgICBjb25zdCB5aSA9IGlpLnk7XG4gICAgY29uc3QgeGogPSBqai54O1xuICAgIGNvbnN0IHlqID0gamoueTtcbiAgICBjb25zdCBpbnRlcnNlY3QgPSB5aSA+IHkgIT09IHlqID4geSAmJiB4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aTtcbiAgICBpZiAoaW50ZXJzZWN0KSBpbnNpZGUgPSAhaW5zaWRlO1xuICB9XG4gIHJldHVybiBpbnNpZGU7XG59XG5mdW5jdGlvbiBnZXRIdWxsKHBvaW50cykge1xuICBjb25zdCBuZXdQb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcbiAgbmV3UG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS54IDwgYi54KSByZXR1cm4gLTE7XG4gICAgZWxzZSBpZiAoYS54ID4gYi54KSByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChhLnkgPCBiLnkpIHJldHVybiAtMTtcbiAgICBlbHNlIGlmIChhLnkgPiBiLnkpIHJldHVybiAxO1xuICAgIGVsc2UgcmV0dXJuIDA7XG4gIH0pO1xuICByZXR1cm4gZ2V0SHVsbFByZXNvcnRlZChuZXdQb2ludHMpO1xufVxuZnVuY3Rpb24gZ2V0SHVsbFByZXNvcnRlZChwb2ludHMpIHtcbiAgaWYgKHBvaW50cy5sZW5ndGggPD0gMSkgcmV0dXJuIHBvaW50cy5zbGljZSgpO1xuICBjb25zdCB1cHBlckh1bGwgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgIHdoaWxlICh1cHBlckh1bGwubGVuZ3RoID49IDIpIHtcbiAgICAgIGNvbnN0IHEgPSB1cHBlckh1bGxbdXBwZXJIdWxsLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgciA9IHVwcGVySHVsbFt1cHBlckh1bGwubGVuZ3RoIC0gMl07XG4gICAgICBpZiAoKHEueCAtIHIueCkgKiAocC55IC0gci55KSA+PSAocS55IC0gci55KSAqIChwLnggLSByLngpKSB1cHBlckh1bGwucG9wKCk7XG4gICAgICBlbHNlIGJyZWFrO1xuICAgIH1cbiAgICB1cHBlckh1bGwucHVzaChwKTtcbiAgfVxuICB1cHBlckh1bGwucG9wKCk7XG4gIGNvbnN0IGxvd2VySHVsbCA9IFtdO1xuICBmb3IgKGxldCBpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICB3aGlsZSAobG93ZXJIdWxsLmxlbmd0aCA+PSAyKSB7XG4gICAgICBjb25zdCBxID0gbG93ZXJIdWxsW2xvd2VySHVsbC5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHIgPSBsb3dlckh1bGxbbG93ZXJIdWxsLmxlbmd0aCAtIDJdO1xuICAgICAgaWYgKChxLnggLSByLngpICogKHAueSAtIHIueSkgPj0gKHEueSAtIHIueSkgKiAocC54IC0gci54KSkgbG93ZXJIdWxsLnBvcCgpO1xuICAgICAgZWxzZSBicmVhaztcbiAgICB9XG4gICAgbG93ZXJIdWxsLnB1c2gocCk7XG4gIH1cbiAgbG93ZXJIdWxsLnBvcCgpO1xuICBpZiAodXBwZXJIdWxsLmxlbmd0aCA9PT0gMSAmJiBsb3dlckh1bGwubGVuZ3RoID09PSAxICYmIHVwcGVySHVsbFswXS54ID09PSBsb3dlckh1bGxbMF0ueCAmJiB1cHBlckh1bGxbMF0ueSA9PT0gbG93ZXJIdWxsWzBdLnkpIHtcbiAgICByZXR1cm4gdXBwZXJIdWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cHBlckh1bGwuY29uY2F0KGxvd2VySHVsbCk7XG4gIH1cbn1cbnZhciBQcm92aWRlciA9IFRvb2x0aXBQcm92aWRlcjtcbnZhciBSb290MyA9IFRvb2x0aXA7XG52YXIgVHJpZ2dlciA9IFRvb2x0aXBUcmlnZ2VyO1xudmFyIFBvcnRhbCA9IFRvb2x0aXBQb3J0YWw7XG52YXIgQ29udGVudDIgPSBUb29sdGlwQ29udGVudDtcbnZhciBBcnJvdzIgPSBUb29sdGlwQXJyb3c7XG5leHBvcnQge1xuICBBcnJvdzIgYXMgQXJyb3csXG4gIENvbnRlbnQyIGFzIENvbnRlbnQsXG4gIFBvcnRhbCxcbiAgUHJvdmlkZXIsXG4gIFJvb3QzIGFzIFJvb3QsXG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBBcnJvdyxcbiAgVG9vbHRpcENvbnRlbnQsXG4gIFRvb2x0aXBQb3J0YWwsXG4gIFRvb2x0aXBQcm92aWRlcixcbiAgVG9vbHRpcFRyaWdnZXIsXG4gIFRyaWdnZXIsXG4gIGNyZWF0ZVRvb2x0aXBTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ3JhZGl4LXVpJztcbnZhciBUb29sdGlwUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gKF9qc3goVG9vbHRpcC5Qcm92aWRlciwgeyBjaGlsZHJlbjogX2pzeChUb29sdGlwLlJvb3QsIF9fYXNzaWduKHt9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKSB9KSk7XG59O1xudmFyIFRvb2x0aXBUcmlnZ2VyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgcmV0dXJuIChfanN4KFRvb2x0aXAuVHJpZ2dlciwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdudXJpLXRoZW1lIHRvb2x0aXAtdHJpZ2dlciB0cmlnZ2VyJyB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRvb2x0aXBDb250ZW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIF9hID0gcHJvcHMuZGlyZWN0aW9uLCBkaXJlY3Rpb24gPSBfYSA9PT0gdm9pZCAwID8gJ2JvdHRvbScgOiBfYSwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZGlyZWN0aW9uXCIsIFwiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goVG9vbHRpcC5Qb3J0YWwsIHsgY2hpbGRyZW46IF9qc3goVG9vbHRpcC5Db250ZW50LCBfX2Fzc2lnbih7IHNpZGU6IGRpcmVjdGlvbiwgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS10b29sdGlwIGNvbnRlbnQgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkgfSkpO1xufTtcblRvb2x0aXBSb290LlRyaWdnZXIgPSBUb29sdGlwVHJpZ2dlcjtcblRvb2x0aXBSb290LkNvbnRlbnQgPSBUb29sdGlwQ29udGVudDtcbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBSb290O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBkaXJlY3Rpb24gPSBbJ3RvcCcsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCddO1xuZXhwb3J0IHZhciBjb21tb25Ub29sdGlwUHJvcHMgPSB7fTtcbmV4cG9ydCB2YXIgdG9vbHRpcENvbnRlbnRQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25Ub29sdGlwUHJvcHMpLCB7IGRpcmVjdGlvbjoge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnZGlyZWN0aW9uJyxcbiAgICAgICAgdmFsdWVzOiBkaXJlY3Rpb24sXG4gICAgICAgIGRlZmF1bHQ6ICdib3R0b20nLFxuICAgIH0gfSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwUm9vdCBmcm9tICcuL2Jhc2UtdG9vbHRpcCc7XG5pbXBvcnQgeyB0b29sdGlwQ29udGVudFByb3BzIH0gZnJvbSAnLi90b29sdGlwLXByb3BzJztcbnZhciBUb29sdGlwID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIHRyaWdnZXIgPSBwcm9wcy50cmlnZ2VyLCBjb250ZW50ID0gcHJvcHMuY29udGVudCwgX2EgPSBwcm9wcy5kaXJlY3Rpb24sIGRpcmVjdGlvbiA9IF9hID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF9hLCBfYiA9IHByb3BzLmRlbGF5RHVyYXRpb24sIGRlbGF5RHVyYXRpb24gPSBfYiA9PT0gdm9pZCAwID8gMTAwIDogX2IsIHJlc3RQcm9wcyA9IF9fcmVzdChwcm9wcywgW1widHJpZ2dlclwiLCBcImNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJkZWxheUR1cmF0aW9uXCJdKTtcbiAgICB2YXIgY29udGVudENsYXNzTmFtZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCB0b29sdGlwQ29udGVudFByb3BzKS5jbGFzc05hbWU7XG4gICAgcmV0dXJuIChfanN4cyhUb29sdGlwUm9vdCwgX19hc3NpZ24oeyBkZWxheUR1cmF0aW9uOiBkZWxheUR1cmF0aW9uLCBkaXNhYmxlSG92ZXJhYmxlQ29udGVudDogdHJ1ZSB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtfanN4KFRvb2x0aXBSb290LlRyaWdnZXIsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IHRyaWdnZXIgfSksIF9qc3goVG9vbHRpcFJvb3QuQ29udGVudCwgeyBkaXJlY3Rpb246IGRpcmVjdGlvbiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGNvbnRlbnRDbGFzc05hbWUsICd0b29sdGlwLWNvbnRlbnQnKSwgY2hpbGRyZW46IGNvbnRlbnQgfSldIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuLi8uLi9zdHlsZXMvdG9rZW4vY29sb3JzJztcbmV4cG9ydCB2YXIgc2l6ZSA9IFsnbCcsICdtJywgJ3InLCAncycsICdzbScsICd4cyddO1xudmFyIGNvbW1vbkJhZGdlUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ2wnLFxuICAgIH0sXG4gICAgYm9yZGVyQ29sb3I6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgdmFsdWVzOiBPYmplY3Qua2V5cyhjb2xvcnMpLFxuICAgICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgdmFsdWVzOiBPYmplY3Qua2V5cyhjb2xvcnMpLFxuICAgICAgICBkZWZhdWx0OiAnYmxhY2snLFxuICAgIH0sXG4gICAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgICAgIHR5cGU6ICdjc3MnLFxuICAgICAgICBrZXk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgICB2YWx1ZXM6IE9iamVjdC5rZXlzKGNvbG9ycyksXG4gICAgICAgIGRlZmF1bHQ6ICd3aGl0ZScsXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgICB0eXBlOiAnY3NzJyxcbiAgICAgICAga2V5OiAnd2lkdGgnLFxuICAgICAgICBkZWZhdWx0OiAnMTAwJScsXG4gICAgfSxcbn07XG5leHBvcnQgdmFyIGljb25UZXh0QmFkZ2VQcm9wcyA9IF9fYXNzaWduKHt9LCBjb21tb25CYWRnZVByb3BzKTtcbmV4cG9ydCB2YXIgaWNvblRleHRPcHRpb25CYWRnZVByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkJhZGdlUHJvcHMpO1xuZXhwb3J0IHZhciBvcHRpb25CYWRnZVByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkJhZGdlUHJvcHMpO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanMhLi9iYWRnZS1zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYmFkZ2Utc3R5bGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBvcHRpb25CYWRnZVByb3BzIH0gZnJvbSAnLi9iYWRnZS1wcm9wcyc7XG5pbXBvcnQgeyBCYXNlQmFkZ2UgfSBmcm9tICcuL2Jhc2UtYmFkZ2UnO1xuaW1wb3J0ICcuL2JhZGdlLXN0eWxlLmNzcyc7XG52YXIgT3B0aW9uQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIG9wdGlvbkJhZGdlUHJvcHMpLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIG9wdGlvbiA9IF9hLm9wdGlvbiwgdG9vbHRpcCA9IF9hLnRvb2x0aXAsIHJlc3RQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwib3B0aW9uXCIsIFwidG9vbHRpcFwiXSk7XG4gICAgdmFyIGJhZGdlQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsICdvcHRpb24nKTtcbiAgICByZXR1cm4gdG9vbHRpcCA/IChfanN4KFRvb2x0aXAsIHsgdHJpZ2dlcjogX2pzeChCYXNlQmFkZ2UsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogYmFkZ2VDbGFzc05hbWUgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBvcHRpb24gfSkgfSkpLCBjb250ZW50OiBfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogdG9vbHRpcC5jb250ZW50IH0pLCBkaXJlY3Rpb246IHRvb2x0aXAucG9zaXRpb24sIGRlbGF5RHVyYXRpb246IHRvb2x0aXAuZGVsYXlEdXJhdGlvbiB9KSkgOiAoX2pzeChCYXNlQmFkZ2UsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogYmFkZ2VDbGFzc05hbWUgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBvcHRpb24gfSkgfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgT3B0aW9uQmFkZ2U7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBpY29uVGV4dEJhZGdlUHJvcHMgfSBmcm9tICcuL2JhZGdlLXByb3BzJztcbmltcG9ydCB7IEJhc2VCYWRnZSB9IGZyb20gJy4vYmFzZS1iYWRnZSc7XG52YXIgSWNvblRleHRCYWRnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgaWNvblRleHRCYWRnZVByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBpY29uID0gX2EuaWNvbiwgdGV4dCA9IF9hLnRleHQsIHRvb2x0aXAgPSBfYS50b29sdGlwLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiLCBcImljb25cIiwgXCJ0ZXh0XCIsIFwidG9vbHRpcFwiXSk7XG4gICAgdmFyIGJhZGdlQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsICdpY29uLXRleHQnKTtcbiAgICByZXR1cm4gdG9vbHRpcCA/IChfanN4KFRvb2x0aXAsIHsgdHJpZ2dlcjogX2pzeHMoQmFzZUJhZGdlLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IGJhZGdlQ2xhc3NOYW1lIH0sIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogW2ljb24sIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IHRleHQgfSldIH0pKSwgY29udGVudDogX2pzeChfRnJhZ21lbnQsIHsgY2hpbGRyZW46IHRvb2x0aXAuY29udGVudCB9KSwgZGlyZWN0aW9uOiB0b29sdGlwLnBvc2l0aW9uLCBkZWxheUR1cmF0aW9uOiB0b29sdGlwLmRlbGF5RHVyYXRpb24gfSkpIDogKF9qc3hzKEJhc2VCYWRnZSwgX19hc3NpZ24oeyByZWY6IHJlZiwgY2xhc3NOYW1lOiBiYWRnZUNsYXNzTmFtZSB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtpY29uLCBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiB0ZXh0IH0pXSB9KSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBJY29uVGV4dEJhZGdlO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IHsgaWNvblRleHRPcHRpb25CYWRnZVByb3BzIH0gZnJvbSAnLi9iYWRnZS1wcm9wcyc7XG5pbXBvcnQgeyBCYXNlQmFkZ2UgfSBmcm9tICcuL2Jhc2UtYmFkZ2UnO1xudmFyIEljb25UZXh0T3B0aW9uQmFkZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGljb25UZXh0T3B0aW9uQmFkZ2VQcm9wcyksIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgaWNvbiA9IF9hLmljb24sIHRleHQgPSBfYS50ZXh0LCBvcHRpb24gPSBfYS5vcHRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwiaWNvblwiLCBcInRleHRcIiwgXCJvcHRpb25cIl0pO1xuICAgIHZhciBiYWRnZUNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnaWNvbi10ZXh0LW9wdGlvbicpO1xuICAgIHJldHVybiAoX2pzeHMoQmFzZUJhZGdlLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IGJhZGdlQ2xhc3NOYW1lIH0sIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbaWNvbiwgX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogdGV4dCB9KV0gfSksIG9wdGlvbl0gfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgSWNvblRleHRPcHRpb25CYWRnZTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbnZhciBUYWJsZVJvb3QgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIl0pO1xuICAgIHJldHVybiAoX2pzeChcInRhYmxlXCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImJhc2UtdGFibGUgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSwgcmVzdCwgeyBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4gfSkpKTtcbn07XG52YXIgVGFibGVIZWFkZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIl0pO1xuICAgIHJldHVybiAoX2pzeChcInRoZWFkXCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImJhc2UtdGFibGUgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgaGVhZGVyXCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRhYmxlQm9keSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNsYXNzTmFtZVwiXSk7XG4gICAgcmV0dXJuIChfanN4KFwidGJvZHlcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiYmFzZS10YWJsZSBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBib2R5XCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRhYmxlUm93ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goXCJ0clwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJiYXNlLXRhYmxlIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIHJvd1wiKSB9LCByZXN0LCB7IGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSkpO1xufTtcbnZhciBUYWJsZUNlbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goXCJ0ZFwiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IFwiYmFzZS10YWJsZSBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBjZWxsXCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59KTtcblRhYmxlUm9vdC5IZWFkZXIgPSBUYWJsZUhlYWRlcjtcblRhYmxlUm9vdC5Cb2R5ID0gVGFibGVCb2R5O1xuVGFibGVSb290LlJvdyA9IFRhYmxlUm93O1xuVGFibGVSb290LkNlbGwgPSBUYWJsZUNlbGw7XG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvb3Q7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuZXhwb3J0IHZhciBoZWFkZXJIZWlnaHQgPSBbNjAsIDg1XTtcbmV4cG9ydCB2YXIgcm93SGVpZ2h0ID0gWzYwXTtcbnZhciBkYXRhVGFibGVDb21tb25Qcm9wcyA9IHt9O1xuZXhwb3J0IHZhciBkYXRhVGFibGVIZWFkZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkYXRhVGFibGVDb21tb25Qcm9wcyksIHsgaGVhZGVySGVpZ2h0OiB7XG4gICAgICAgIHR5cGU6ICdzdHlsZScsXG4gICAgICAgIHN0eWxlOiAnaGVhZGVySGVpZ2h0JyxcbiAgICAgICAga2V5OiBbJ2hlaWdodCddLFxuICAgICAgICB2YWx1ZXM6IGhlYWRlckhlaWdodCxcbiAgICAgICAgZGVmYXVsdDogODUsXG4gICAgfSB9KTtcbmV4cG9ydCB2YXIgZGF0YVRhYmxlUm93UHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGF0YVRhYmxlQ29tbW9uUHJvcHMpLCB7IHJvd0hlaWdodDoge1xuICAgICAgICB0eXBlOiAnc3R5bGUnLFxuICAgICAgICBzdHlsZTogJ3Jvd0hlaWdodCcsXG4gICAgICAgIGtleTogWydoZWlnaHQnXSxcbiAgICAgICAgdmFsdWVzOiByb3dIZWlnaHQsXG4gICAgICAgIGRlZmF1bHQ6IDYwLFxuICAgIH0gfSk7XG5leHBvcnQgdmFyIGRhdGFUYWJsZUNlbGxQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkYXRhVGFibGVDb21tb25Qcm9wcyksIHsgY2VsbEhlaWdodDoge1xuICAgICAgICB0eXBlOiAnc3R5bGUnLFxuICAgICAgICBzdHlsZTogJ2NlbGxIZWlnaHQnLFxuICAgICAgICBrZXk6IFsnaGVpZ2h0J10sXG4gICAgICAgIHZhbHVlczogcm93SGVpZ2h0LFxuICAgICAgICBkZWZhdWx0OiA2MCxcbiAgICB9IH0pO1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGdldE1lcmdlZFByb3BzIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscy9nZXRNZXJnZWRQcm9wcyc7XG5pbXBvcnQgVGFibGVSb290IGZyb20gJy4vYmFzZS10YWJsZSc7XG5pbXBvcnQgeyBkYXRhVGFibGVDZWxsUHJvcHMsIGRhdGFUYWJsZUhlYWRlclByb3BzLCBkYXRhVGFibGVSb3dQcm9wcywgfSBmcm9tICcuL3RhYmxlLXByb3BzJztcbnZhciBEYXRhVGFibGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgcm93cyA9IHByb3BzLnJvd3MsIGNvbHVtbnMgPSBwcm9wcy5jb2x1bW5zLCBfYSA9IHByb3BzLmZpeGVkUm93c0luZGV4LCBmaXhlZFJvd3NJbmRleCA9IF9hID09PSB2b2lkIDAgPyAwIDogX2EsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICB2YXIgaGVhZGVyU3R5bGUgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgZGF0YVRhYmxlSGVhZGVyUHJvcHMpLnN0eWxlO1xuICAgIHZhciByb3dTdHlsZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBkYXRhVGFibGVSb3dQcm9wcykuc3R5bGU7XG4gICAgdmFyIGNlbGxTdHlsZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBkYXRhVGFibGVDZWxsUHJvcHMpLnN0eWxlO1xuICAgIHJldHVybiAoX2pzeHMoVGFibGVSb290LCB7IGNsYXNzTmFtZTogXCJkYXRhLXRhYmxlIFwiLmNvbmNhdChjbGFzc05hbWUpLCBjaGlsZHJlbjogW19qc3goVGFibGVSb290LkhlYWRlciwgeyBjbGFzc05hbWU6ICdkYXRhLXRhYmxlLWhlYWRlcicsIHN0eWxlOiBoZWFkZXJTdHlsZSwgY2hpbGRyZW46IF9qc3goVGFibGVSb290LlJvdywgeyBjbGFzc05hbWU6ICdkYXRhLXRhYmxlLXJvdycsIHN0eWxlOiByb3dTdHlsZSwgY2hpbGRyZW46IHJvd3MubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkgeyByZXR1cm4gKF9qc3goVGFibGVSb290LkNlbGwsIHsgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChpbmRleCA8IGZpeGVkUm93c0luZGV4ICYmICdmaXhlZCcpLCByZWY6IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBmaXhlZFJvd3NJbmRleCAmJiBlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxzID0gKF9hID0gZWwucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnF1ZXJ5U2VsZWN0b3JBbGwoJy5maXhlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBjZWxsc1tpXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5sZWZ0ID0gbGVmdFBvc2l0aW9uICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGl0ZW0ub25DbGlja1JvdykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoaXRlbSwgaXRlbS5pZCk7IH0sIGNoaWxkcmVuOiBpdGVtLnZhbHVlIH0sIGl0ZW0uaWQpKTsgfSkgfSkgfSksIF9qc3goVGFibGVSb290LkJvZHksIHsgY2xhc3NOYW1lOiAnZGF0YS10YWJsZScsIGNoaWxkcmVuOiBjb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uS2V5ID0gT2JqZWN0LmtleXMoY29sdW1uKS5qb2luKCdfXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3goVGFibGVSb290LlJvdywgeyBzdHlsZTogcm93U3R5bGUsIGNsYXNzTmFtZTogJ2RhdGEtdGFibGUtcm93JywgY2hpbGRyZW46IHJvd3MubWFwKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxEYXRhID0gY29sdW1uW2l0ZW0uaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsVmFsdWUgPSBjZWxsRGF0YSA9PT0gbnVsbCB8fCBjZWxsRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2VsbERhdGEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfanN4KFRhYmxlUm9vdC5DZWxsLCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQoaSA8IGZpeGVkUm93c0luZGV4ICYmICdmaXhlZCcpLCBcImRhdGEtaWRcIjogaXRlbS5pZCwgcmVmOiBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZml4ZWRSb3dzSW5kZXggJiYgZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbHMgPSAoX2EgPSBlbC5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3RvckFsbCgnLmZpeGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gY2VsbHNbal0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUubGVmdCA9IGxlZnRQb3NpdGlvbiArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgdmFyIF9hOyByZXR1cm4gKF9hID0gY2VsbERhdGEgPT09IG51bGwgfHwgY2VsbERhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNlbGxEYXRhLm9uQ2xpY2tDZWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChjZWxsRGF0YSk7IH0sIHN0eWxlOiBjZWxsU3R5bGUsIGNoaWxkcmVuOiB0eXBlb2YgY2VsbFZhbHVlID09PSAnZnVuY3Rpb24nID8gY2VsbFZhbHVlKGl0ZW0pIDogY2VsbFZhbHVlIH0sIFwiXCIuY29uY2F0KGNvbHVtbktleSwgXCJfX1wiKS5jb25jYXQoaXRlbS5pZCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0sIFwiY29sdW1uX19cIi5jb25jYXQoY29sdW1uS2V5LCBcIl9fXCIpLmNvbmNhdChjb2x1bW5JbmRleCkpKTtcbiAgICAgICAgICAgICAgICB9KSB9KV0gfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERhdGFUYWJsZTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIFRleHQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdGV4dCA9IHByb3BzLnRleHQsIHNpemUgPSBwcm9wcy5zaXplLCB3ZWlnaHQgPSBwcm9wcy53ZWlnaHQsIGNvbG9yID0gcHJvcHMuY29sb3IsIHRleHRBbGlnbiA9IHByb3BzLnRleHRBbGlnbiwgdGV4dERlY29yYXRpb24gPSBwcm9wcy50ZXh0RGVjb3JhdGlvbiwgd29yZEJyZWFrID0gcHJvcHMud29yZEJyZWFrLCB3aGl0ZVNwYWNlID0gcHJvcHMud2hpdGVTcGFjZSwgYXMgPSBwcm9wcy5hcywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBDb21wID0gYXMgPyBhcyA6ICdwJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLXRleHQgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgXCIpLmNvbmNhdCgvXlxcZCt4bCQvLnRlc3Qoc2l6ZSkgPyBcInQtXCIuY29uY2F0KHNpemUpIDogc2l6ZSwgXCIgXCIpLmNvbmNhdCh3ZWlnaHQsIFwiIHRleHRBbGlnbi1cIikuY29uY2F0KHRleHRBbGlnbiwgXCIgdGV4dERlY29yYXRpb24tXCIpLmNvbmNhdCh0ZXh0RGVjb3JhdGlvbiwgXCIgd29yZEJyZWFrLVwiKS5jb25jYXQod29yZEJyZWFrLCBcIiB3aGl0ZVNwYWNlLVwiKS5jb25jYXQod2hpdGVTcGFjZSwgXCIgXCIpLmNvbmNhdChjb2xvciA/IFwiY29sb3ItXCIuY29uY2F0KGNvbG9yKSA6ICcnKSwgc3R5bGU6IF9fYXNzaWduKHt9LCBzdHlsZSksIGNoaWxkcmVuOiB0ZXh0IH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBUZXh0O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBmb3J3YXJkUmVmLCB1c2VDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vZWxlbWVudHMvdGV4dC90ZXh0JztcbnZhciBUZXh0RmllbGRDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgdmFsdWU6ICcnLFxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoKSB7IH0sXG59KTtcbnZhciBUZXh0RmllbGRSb290ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIHZhbHVlID0gcHJvcHMudmFsdWUsIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICB2YXIgaXNDb250cm9sbGVkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgX2EgPSB1c2VTdGF0ZShkZWZhdWx0VmFsdWUgIT09IG51bGwgJiYgZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBkZWZhdWx0VmFsdWUgOiAnJyksIGlubmVyVmFsdWUgPSBfYVswXSwgc2V0SW5uZXJWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciBpbnB1dFZhbHVlID0gaXNDb250cm9sbGVkID8gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6ICcnKSA6IGlubmVyVmFsdWU7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgICAgICBzZXRJbm5lclZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3goVGV4dEZpZWxkQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBUZXh0TGFiZWwgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdGV4dCA9IHByb3BzLnRleHQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnID8gKF9qc3goVGV4dCwgeyB0ZXh0OiB0ZXh0LCBzaXplOiAnc20nLCB3ZWlnaHQ6ICdib2xkJywgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS10ZXh0LWZpZWxkIFwiLmNvbmNhdChjbGFzc05hbWUpIH0pKSA6ICh0ZXh0KTtcbn07XG52YXIgSW5wdXRGaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlciwgbmFtZSA9IHByb3BzLm5hbWUsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJwbGFjZWhvbGRlclwiLCBcIm5hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIF9hID0gdXNlQ29udGV4dChUZXh0RmllbGRDb250ZXh0KSwgdmFsdWUgPSBfYS52YWx1ZSwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgaW5wdXRDbGFzc05hbWUgPSBjbGFzc05hbWVzKCdudXJpLXRoZW1lIGJhc2UtdGV4dC1maWVsZCBpbnB1dCcsIGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChfanN4KFwiaW5wdXRcIiwgX19hc3NpZ24oeyByZWY6IHJlZiwgdmFsdWU6IHZhbHVlLCBvbkNoYW5nZTogb25DaGFuZ2UsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgbmFtZTogbmFtZSwgZGlzYWJsZWQ6IGRpc2FibGVkLCBcImRhdGEtZGlzYWJsZWRcIjogZGlzYWJsZWQsIGNsYXNzTmFtZTogaW5wdXRDbGFzc05hbWUgfSwgcmVzdFByb3BzKSkpO1xufSk7XG52YXIgSGVscGVyVGV4dCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciB0ZXh0ID0gcHJvcHMudGV4dCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyAoX2pzeChUZXh0LCB7IHRleHQ6IHRleHQsIHNpemU6ICdzbScsIHdlaWdodDogJ3JlZ3VsYXInLCBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLXRleHQtZmllbGQgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSkpIDogKHRleHQpO1xufTtcblRleHRGaWVsZFJvb3QuVGV4dExhYmVsID0gVGV4dExhYmVsO1xuVGV4dEZpZWxkUm9vdC5JbnB1dEZpZWxkID0gSW5wdXRGaWVsZDtcblRleHRGaWVsZFJvb3QuSGVscGVyVGV4dCA9IEhlbHBlclRleHQ7XG5leHBvcnQgZGVmYXVsdCBUZXh0RmllbGRSb290O1xuIiwiZXhwb3J0IHZhciBzaXplID0gWydtJywgJ2wnXTtcbmV4cG9ydCB2YXIgdGV4dEZpZWxkUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ3dpZHRoJyxcbiAgICAgICAgZGVmYXVsdDogJzEwMCUnLFxuICAgIH0sXG59O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IFRleHRGaWVsZFJvb3QgZnJvbSAnLi9iYXNlLXRleHQtZmllbGQnO1xuaW1wb3J0IHsgdGV4dEZpZWxkUHJvcHMgfSBmcm9tICcuL3RleHQtZmllbGQtcHJvcHMnO1xudmFyIFRleHRGaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgdGV4dEZpZWxkUHJvcHMpLCBtZXJnZWRDbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIHN0eWxlID0gX2Euc3R5bGUsIGxlZnRJY29uID0gX2EubGVmdEljb24sIHJpZ2h0SWNvbiA9IF9hLnJpZ2h0SWNvbiwgbmFtZSA9IF9hLm5hbWUsIHRpdGxlID0gX2EudGl0bGUsIHZhbHVlID0gX2EudmFsdWUsIG9uQ2hhbmdlID0gX2Eub25DaGFuZ2UsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaGVscGVyVGV4dCA9IF9hLmhlbHBlclRleHQsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGlzRXJyb3IgPSBfYS5pc0Vycm9yLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibGVmdEljb25cIiwgXCJyaWdodEljb25cIiwgXCJuYW1lXCIsIFwidGl0bGVcIiwgXCJ2YWx1ZVwiLCBcIm9uQ2hhbmdlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJoZWxwZXJUZXh0XCIsIFwiZGlzYWJsZWRcIiwgXCJpc0Vycm9yXCJdKTtcbiAgICB2YXIgaW5wdXRXcmFwcGVyQ2xhc3NOYW1lID0gY2xhc3NOYW1lcygnbnVyaS10aGVtZSB0ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXInLCBtZXJnZWRDbGFzc05hbWUpO1xuICAgIHJldHVybiAoX2pzeChUZXh0RmllbGRSb290LCB7IHZhbHVlOiB2YWx1ZSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgY2hpbGRyZW46IF9qc3hzKFwiZGl2XCIsIHsgc3R5bGU6IHsgaGVpZ2h0OiAnZml0LWNvbnRlbnQnIH0sIGNoaWxkcmVuOiBbdGl0bGUgJiYgX2pzeChUZXh0RmllbGRSb290LlRleHRMYWJlbCwgeyB0ZXh0OiB0aXRsZSwgY2xhc3NOYW1lOiAndGV4dC1maWVsZC10aXRsZScgfSksIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBpbnB1dFdyYXBwZXJDbGFzc05hbWUsIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IFtsZWZ0SWNvbiwgX2pzeChUZXh0RmllbGRSb290LklucHV0RmllbGQsIF9fYXNzaWduKHsgcmVmOiByZWYsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgbmFtZTogbmFtZSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHJlc3RQcm9wcykpLCByaWdodEljb25dIH0pLCBoZWxwZXJUZXh0ICYmIChfanN4KFRleHRGaWVsZFJvb3QuSGVscGVyVGV4dCwgeyB0ZXh0OiBoZWxwZXJUZXh0LCBjbGFzc05hbWU6IFwidGV4dC1maWVsZC1oZWxwZXItdGV4dCBcIi5jb25jYXQoaXNFcnJvciA/ICdlcnJvcicgOiAnJykgfSkpXSB9KSB9KSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IFRleHRGaWVsZDtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciB1c2VFeHRlcm5hbFN0YXRlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHByb3AgPSBfYS5wcm9wLCBoYW5kbGVyID0gX2EuaGFuZGxlciwgZGVmYXVsdFByb3AgPSBfYS5kZWZhdWx0UHJvcDtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShwcm9wICE9PSBudWxsICYmIHByb3AgIT09IHZvaWQgMCA/IHByb3AgOiBkZWZhdWx0UHJvcCksIGlubmVyU3RhdGUgPSBfYlswXSwgc2V0SW5uZXJTdGF0ZSA9IF9iWzFdO1xuICAgIHZhciBpc0NvbnRyb2xsZWRCeUV4dGVybmFsID0gcHJvcCAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSA9IGlzQ29udHJvbGxlZEJ5RXh0ZXJuYWwgPyBwcm9wIDogaW5uZXJTdGF0ZTtcbiAgICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbiAoaGFuZGxlZFZhbHVlKSB7XG4gICAgICAgIGlmIChpc0NvbnRyb2xsZWRCeUV4dGVybmFsKSB7XG4gICAgICAgICAgICB2YXIgc2V0dGVyID0gaGFuZGxlZFZhbHVlO1xuICAgICAgICAgICAgdmFyIHZhbHVlXzEgPSB0eXBlb2YgaGFuZGxlZFZhbHVlID09PSAnZnVuY3Rpb24nID8gc2V0dGVyKHByb3AgIT09IG51bGwgJiYgcHJvcCAhPT0gdm9pZCAwID8gcHJvcCA6IGRlZmF1bHRQcm9wKSA6IGhhbmRsZWRWYWx1ZTtcbiAgICAgICAgICAgIGhhbmRsZXIgPT09IG51bGwgfHwgaGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGFuZGxlcih2YWx1ZV8xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldElubmVyU3RhdGUoaGFuZGxlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVdO1xufTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBmb3J3YXJkUmVmLCBpc1ZhbGlkRWxlbWVudCwgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBDb21wb3NlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY29tcG9zZXJQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIl0pO1xuICAgIHZhciBjaGlsZEFycmF5ID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wb3NlciBjYW4gb25seSBoYXZlIG9uZSBjaGlsZFwiKTtcbiAgICB9XG4gICAgdmFyIGlzVmFsaWRDaGlsZCA9IGlzVmFsaWRFbGVtZW50KGNoaWxkQXJyYXlbMF0pO1xuICAgIGlmICghaXNWYWxpZENoaWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNoaWxkIHNob3VsZCBiZSBSZWFjdCBub2RlIVwiKTtcbiAgICB9XG4gICAgdmFyIGNoaWxkID0gY2hpbGRBcnJheVswXTtcbiAgICB2YXIgY2hpbGRSZWYgPSBnZXRFbGVtZW50UmVmKGNoaWxkKTtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKGNvbXBvc2VyUHJvcHMsIGNoaWxkLnByb3BzKTtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbWVyZ2VkUHJvcHMpLCB7IHJlZjogcmVmID8gY29tcG9zZVJlZnMocmVmLCBjaGlsZFJlZikgOiBjaGlsZFJlZiB9KSk7XG59KTtcbkNvbXBvc2VyLmRpc3BsYXlOYW1lID0gXCJDb21wb3NlclwiO1xuZnVuY3Rpb24gbWVyZ2VQcm9wcyhjb21wb3NlclByb3BzLCBjaGlsZFByb3BzKSB7XG4gICAgdmFyIG92ZXJyaWRlUHJvcHMgPSBfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyk7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgdmFyIGNvbXBvc2VyUHJvcFZhbHVlID0gY29tcG9zZXJQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIHZhciBjaGlsZFByb3BWYWx1ZSA9IGNoaWxkUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB2YXIgaXNIYW5kbGVyID0gL15vbltBLVpdLy50ZXN0KHByb3BOYW1lKTtcbiAgICAgICAgaWYgKGlzSGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKGNvbXBvc2VyUHJvcFZhbHVlICYmIGNoaWxkUHJvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRQcm9wVmFsdWUuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZXJQcm9wVmFsdWUuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJQcm9wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvdmVycmlkZVByb3BzW3Byb3BOYW1lXSA9IGNvbXBvc2VyUHJvcFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIG92ZXJyaWRlUHJvcHNbcHJvcE5hbWVdID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbXBvc2VyUHJvcFZhbHVlKSwgY2hpbGRQcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSBcImNsYXNzTmFtZVwiKSB7XG4gICAgICAgICAgICBvdmVycmlkZVByb3BzW3Byb3BOYW1lXSA9IFtjb21wb3NlclByb3BWYWx1ZSwgY2hpbGRQcm9wVmFsdWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gY29tcG9zZXJQcm9wcykge1xuICAgICAgICBfbG9vcF8xKHByb3BOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21wb3NlclByb3BzKSwgb3ZlcnJpZGVQcm9wcyk7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50UmVmKGVsZW1lbnQpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjaGlsZEdldHRlciA9IChfYSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudC5wcm9wcywgXCJyZWZcIikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXQ7XG4gICAgdmFyIG1heVdhcm5JbkNoaWxkID0gY2hpbGRHZXR0ZXIgJiZcbiAgICAgICAgXCJpc1JlYWN0V2FybmluZ1wiIGluIGNoaWxkR2V0dGVyICYmXG4gICAgICAgIGNoaWxkR2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICAgIGlmIChtYXlXYXJuSW5DaGlsZCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5yZWY7XG4gICAgfVxuICAgIHZhciBnZXR0ZXIgPSAoX2IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVsZW1lbnQsIFwicmVmXCIpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0O1xuICAgIHZhciBtYXlXYXJuID0gZ2V0dGVyICYmIFwiaXNSZWFjdFdhcm5pbmdcIiBpbiBnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICAgIGlmIChtYXlXYXJuKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnByb3BzLnJlZjtcbiAgICB9XG4gICAgcmV0dXJuIChlbGVtZW50LnByb3BzLnJlZiB8fCBlbGVtZW50LnJlZik7XG59XG52YXIgY29tcG9zZVJlZnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICByZWZzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb21wb3NlcjtcbiIsImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXh0ZXJuYWxTdGF0ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaG9va3MvdXNlRXh0ZXJuYWxTdGF0ZSc7XG5pbXBvcnQgQmFzZUJ1dHRvbiBmcm9tICcuLi9idXR0b24vYmFzZS1idXR0b24nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4uL2NvcmUvY29tcG9zZXInO1xudmFyIFJhZGlvQnV0dG9uID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGlkID0gcHJvcHMuaWQsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgdmFyIF9hID0gdXNlQ29udGV4dChSYWRpb0NvbnRleHQpLCBzZWxlY3RlZCA9IF9hLnNlbGVjdGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogQmFzZUJ1dHRvbjtcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkNoYW5nZShpZCk7IH0sIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBkaXNhYmxlZDogZGlzYWJsZWQsIHN0eWxlOiB7IHBhZGRpbmc6ICcwJyB9LCBjaGlsZHJlbjogaWQgPT09IHNlbGVjdGVkID8gY2hpbGRyZW4gOiBudWxsIH0pKTtcbn07XG52YXIgUmFkaW9JbmRpY2F0b3IgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIGlkID0gcHJvcHMuaWQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICB2YXIgc2VsZWN0ZWQgPSB1c2VDb250ZXh0KFJhZGlvQ29udGV4dCkuc2VsZWN0ZWQ7XG4gICAgdmFyIENvbXAgPSBhc0NoaWxkID8gQ29tcG9zZXIgOiAnaW5wdXQnO1xuICAgIHJldHVybiAoX2pzeChDb21wLCB7IHR5cGU6ICdyYWRpbycsIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChzZWxlY3RlZCA9PT0gaWQgPyAnc2VsZWN0ZWQnIDogJycsIFwiIFwiKS5jb25jYXQoY2xhc3NOYW1lKSwgY2hlY2tlZDogc2VsZWN0ZWQgPT09IGlkLCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBSYWRpb0xhYmVsID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGlkID0gcHJvcHMuaWQsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgdmFyIG9uQ2hhbmdlID0gdXNlQ29udGV4dChSYWRpb0NvbnRleHQpLm9uQ2hhbmdlO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogJ2xhYmVsJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBcIi5jb25jYXQoY2xhc3NOYW1lKSwgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWRpc2FibGVkICYmIG9uQ2hhbmdlKGlkKTsgfSwgY2hpbGRyZW46IGNoaWxkcmVuIH0pKTtcbn07XG52YXIgUmFkaW9PcHRpb25Hcm91cCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhc0NoaWxkID0gcHJvcHMuYXNDaGlsZCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogJ3VsJztcbiAgICByZXR1cm4gX2pzeChDb21wLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCBjaGlsZHJlbjogY2hpbGRyZW4gfSk7XG59O1xudmFyIFJhZGlvQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIG9wdGlvbnM6IFtdLFxuICAgIHNlbGVjdGVkOiBudWxsLFxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoaWQpIHsgfSxcbn0pO1xudmFyIFJhZGlvUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBvcHRpb25zID0gcHJvcHMub3B0aW9ucywgX2EgPSBwcm9wcy5zZWxlY3RlZCwgc2VsZWN0ZWQgPSBfYSA9PT0gdm9pZCAwID8gbnVsbCA6IF9hLCBleHRlcm5hbE9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgdmFyIF9iID0gdXNlRXh0ZXJuYWxTdGF0ZSh7XG4gICAgICAgIHByb3A6IHNlbGVjdGVkLFxuICAgICAgICBoYW5kbGVyOiBleHRlcm5hbE9uQ2hhbmdlLFxuICAgICAgICBkZWZhdWx0UHJvcDogc2VsZWN0ZWQsXG4gICAgfSksIHNlbGVjdGVkSWQgPSBfYlswXSwgc2V0U2VsZWN0ZWRJZCA9IF9iWzFdO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBzZXRTZWxlY3RlZElkKGlkKTtcbiAgICB9O1xuICAgIHJldHVybiAoX2pzeChSYWRpb0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgc2VsZWN0ZWQ6IHNlbGVjdGVkSWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSwgb3B0aW9uczogb3B0aW9ucyB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcblJhZGlvUm9vdC5JbmRpY2F0b3IgPSBSYWRpb0luZGljYXRvcjtcblJhZGlvUm9vdC5MYWJlbCA9IFJhZGlvTGFiZWw7XG5SYWRpb1Jvb3QuT3B0aW9uR3JvdXAgPSBSYWRpb09wdGlvbkdyb3VwO1xuUmFkaW9Sb290LkJ1dHRvbiA9IFJhZGlvQnV0dG9uO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9Sb290O1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSYWRpb1Jvb3QgZnJvbSAnLi9iYXNlLXJhZGlvJztcbnZhciBSYWRpbyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBzZWxlY3RlZCA9IHByb3BzLnNlbGVjdGVkLCBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLCBvcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgICByZXR1cm4gKF9qc3goUmFkaW9Sb290LCB7IG9wdGlvbnM6IG9wdGlvbnMsIHNlbGVjdGVkOiBzZWxlY3RlZCwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBjaGlsZHJlbjogX2pzeChSYWRpb1Jvb3QuT3B0aW9uR3JvdXAsIHsgY2xhc3NOYW1lOiAncmFkaW8gcmFkaW8tZ3JvdXAnLCBjaGlsZHJlbjogb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gKF9qc3hzKFwibGlcIiwgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc2cHgnIH0sIGNoaWxkcmVuOiBbX2pzeChSYWRpb1Jvb3QuQnV0dG9uLCB7IGlkOiBvcHRpb24uaWQsIGNsYXNzTmFtZTogJ3JhZGlvIHJhZGlvLWJ1dHRvbicsIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsIGNoaWxkcmVuOiBfanN4KFJhZGlvUm9vdC5JbmRpY2F0b3IsIHsgaWQ6IG9wdGlvbi5pZCwgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAncmFkaW8gcmFkaW8taW5kaWNhdG9yJywgY2hpbGRyZW46IF9qc3goXCJkaXZcIiwge30pIH0pIH0pLCBfanN4KFJhZGlvUm9vdC5MYWJlbCwgeyBpZDogb3B0aW9uLmlkLCBjbGFzc05hbWU6ICdyYWRpbyByYWRpby1sYWJlbCcsIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsIGNoaWxkcmVuOiBvcHRpb24ubGFiZWwgfSldIH0sIG9wdGlvbi5pZCkpOyB9KSB9KSB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87XG4iLCJ2YXIgX3BhdGg7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIFN2Z0NoZWNrID0gZnVuY3Rpb24gU3ZnQ2hlY2socHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIHByb3BzKSwgX3BhdGggfHwgKF9wYXRoID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiI2ZmZlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgIHN0cm9rZVdpZHRoOiAxLjUsXG4gICAgZDogXCJNMi42NjcgOC44IDUuNzE0IDEybDcuNjItOFwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgU3ZnQ2hlY2s7IiwiLy8gcGFja2FnZXMvcmVhY3QvdXNlLXByZXZpb3VzL3NyYy91c2UtcHJldmlvdXMudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmZ1bmN0aW9uIHVzZVByZXZpb3VzKHZhbHVlKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZih7IHZhbHVlLCBwcmV2aW91czogdmFsdWUgfSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmLmN1cnJlbnQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICByZWYuY3VycmVudC5wcmV2aW91cyA9IHJlZi5jdXJyZW50LnZhbHVlO1xuICAgICAgcmVmLmN1cnJlbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50LnByZXZpb3VzO1xuICB9LCBbdmFsdWVdKTtcbn1cbmV4cG9ydCB7XG4gIHVzZVByZXZpb3VzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9jaGVja2JveC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCB7IHVzZVByZXZpb3VzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtcHJldmlvdXNcIjtcbmltcG9ydCB7IHVzZVNpemUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplXCI7XG5pbXBvcnQgeyBQcmVzZW5jZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJlc2VuY2VcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwganN4LCBqc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgQ0hFQ0tCT1hfTkFNRSA9IFwiQ2hlY2tib3hcIjtcbnZhciBbY3JlYXRlQ2hlY2tib3hDb250ZXh0LCBjcmVhdGVDaGVja2JveFNjb3BlXSA9IGNyZWF0ZUNvbnRleHRTY29wZShDSEVDS0JPWF9OQU1FKTtcbnZhciBbQ2hlY2tib3hQcm92aWRlckltcGwsIHVzZUNoZWNrYm94Q29udGV4dF0gPSBjcmVhdGVDaGVja2JveENvbnRleHQoQ0hFQ0tCT1hfTkFNRSk7XG5mdW5jdGlvbiBDaGVja2JveFByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBfX3Njb3BlQ2hlY2tib3gsXG4gICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgY2hpbGRyZW4sXG4gICAgZGVmYXVsdENoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9ybSxcbiAgICBuYW1lLFxuICAgIG9uQ2hlY2tlZENoYW5nZSxcbiAgICByZXF1aXJlZCxcbiAgICB2YWx1ZSA9IFwib25cIixcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbY2hlY2tlZCwgc2V0Q2hlY2tlZF0gPSB1c2VDb250cm9sbGFibGVTdGF0ZSh7XG4gICAgcHJvcDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdFByb3A6IGRlZmF1bHRDaGVja2VkID8/IGZhbHNlLFxuICAgIG9uQ2hhbmdlOiBvbkNoZWNrZWRDaGFuZ2UsXG4gICAgY2FsbGVyOiBDSEVDS0JPWF9OQU1FXG4gIH0pO1xuICBjb25zdCBbY29udHJvbCwgc2V0Q29udHJvbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2J1YmJsZUlucHV0LCBzZXRCdWJibGVJbnB1dF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc0Zvcm1Db250cm9sID0gY29udHJvbCA/ICEhZm9ybSB8fCAhIWNvbnRyb2wuY2xvc2VzdChcImZvcm1cIikgOiAoXG4gICAgLy8gV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBieSBkZWZhdWx0IHNvIHRoYXQgZXZlbnRzIGJ1YmJsZSB0byBmb3JtcyB3aXRob3V0IEpTIChTU1IpXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgc2V0Q2hlY2tlZCxcbiAgICBjb250cm9sLFxuICAgIHNldENvbnRyb2wsXG4gICAgbmFtZSxcbiAgICBmb3JtLFxuICAgIHZhbHVlLFxuICAgIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmLFxuICAgIHJlcXVpcmVkLFxuICAgIGRlZmF1bHRDaGVja2VkOiBpc0luZGV0ZXJtaW5hdGUoZGVmYXVsdENoZWNrZWQpID8gZmFsc2UgOiBkZWZhdWx0Q2hlY2tlZCxcbiAgICBpc0Zvcm1Db250cm9sLFxuICAgIGJ1YmJsZUlucHV0LFxuICAgIHNldEJ1YmJsZUlucHV0XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIENoZWNrYm94UHJvdmlkZXJJbXBsLFxuICAgIHtcbiAgICAgIHNjb3BlOiBfX3Njb3BlQ2hlY2tib3gsXG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgY2hpbGRyZW46IGlzRnVuY3Rpb24oaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXIpID8gaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXIoY29udGV4dCkgOiBjaGlsZHJlblxuICAgIH1cbiAgKTtcbn1cbnZhciBUUklHR0VSX05BTUUgPSBcIkNoZWNrYm94VHJpZ2dlclwiO1xudmFyIENoZWNrYm94VHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gICh7IF9fc2NvcGVDaGVja2JveCwgb25LZXlEb3duLCBvbkNsaWNrLCAuLi5jaGVja2JveFByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRyb2wsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgY2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc2V0Q29udHJvbCxcbiAgICAgIHNldENoZWNrZWQsXG4gICAgICBoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZixcbiAgICAgIGlzRm9ybUNvbnRyb2wsXG4gICAgICBidWJibGVJbnB1dFxuICAgIH0gPSB1c2VDaGVja2JveENvbnRleHQoVFJJR0dFUl9OQU1FLCBfX3Njb3BlQ2hlY2tib3gpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHNldENvbnRyb2wpO1xuICAgIGNvbnN0IGluaXRpYWxDaGVja2VkU3RhdGVSZWYgPSBSZWFjdC51c2VSZWYoY2hlY2tlZCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm0gPSBjb250cm9sPy5mb3JtO1xuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSAoKSA9PiBzZXRDaGVja2VkKGluaXRpYWxDaGVja2VkU3RhdGVSZWYuY3VycmVudCk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0XCIsIHJlc2V0KTtcbiAgICAgICAgcmV0dXJuICgpID0+IGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2V0XCIsIHJlc2V0KTtcbiAgICAgIH1cbiAgICB9LCBbY29udHJvbCwgc2V0Q2hlY2tlZF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmJ1dHRvbixcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgcm9sZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkgPyBcIm1peGVkXCIgOiBjaGVja2VkLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogcmVxdWlyZWQsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjaGVja2VkKSxcbiAgICAgICAgXCJkYXRhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAuLi5jaGVja2JveFByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgb25LZXlEb3duOiBjb21wb3NlRXZlbnRIYW5kbGVycyhvbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIChldmVudCkgPT4ge1xuICAgICAgICAgIHNldENoZWNrZWQoKHByZXZDaGVja2VkKSA9PiBpc0luZGV0ZXJtaW5hdGUocHJldkNoZWNrZWQpID8gdHJ1ZSA6ICFwcmV2Q2hlY2tlZCk7XG4gICAgICAgICAgaWYgKGJ1YmJsZUlucHV0ICYmIGlzRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmLmN1cnJlbnQgPSBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICAgICAgaWYgKCFoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcbkNoZWNrYm94VHJpZ2dlci5kaXNwbGF5TmFtZSA9IFRSSUdHRVJfTkFNRTtcbnZhciBDaGVja2JveCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZUNoZWNrYm94LFxuICAgICAgbmFtZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hlY2tlZENoYW5nZSxcbiAgICAgIGZvcm0sXG4gICAgICAuLi5jaGVja2JveFByb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgQ2hlY2tib3hQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgX19zY29wZUNoZWNrYm94LFxuICAgICAgICBjaGVja2VkLFxuICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICBvbkNoZWNrZWRDaGFuZ2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjogKHsgaXNGb3JtQ29udHJvbCB9KSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgICBDaGVja2JveFRyaWdnZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmNoZWNrYm94UHJvcHMsXG4gICAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgICBfX3Njb3BlQ2hlY2tib3hcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIGlzRm9ybUNvbnRyb2wgJiYgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICAgIENoZWNrYm94QnViYmxlSW5wdXQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9fc2NvcGVDaGVja2JveFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSB9KVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5DaGVja2JveC5kaXNwbGF5TmFtZSA9IENIRUNLQk9YX05BTUU7XG52YXIgSU5ESUNBVE9SX05BTUUgPSBcIkNoZWNrYm94SW5kaWNhdG9yXCI7XG52YXIgQ2hlY2tib3hJbmRpY2F0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZUNoZWNrYm94LCBmb3JjZU1vdW50LCAuLi5pbmRpY2F0b3JQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUNoZWNrYm94Q29udGV4dChJTkRJQ0FUT1JfTkFNRSwgX19zY29wZUNoZWNrYm94KTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByZXNlbmNlLFxuICAgICAge1xuICAgICAgICBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGlzSW5kZXRlcm1pbmF0ZShjb250ZXh0LmNoZWNrZWQpIHx8IGNvbnRleHQuY2hlY2tlZCA9PT0gdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgUHJpbWl0aXZlLnNwYW4sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGdldFN0YXRlKGNvbnRleHQuY2hlY2tlZCksXG4gICAgICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogY29udGV4dC5kaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgICAgICAuLi5pbmRpY2F0b3JQcm9wcyxcbiAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgc3R5bGU6IHsgcG9pbnRlckV2ZW50czogXCJub25lXCIsIC4uLnByb3BzLnN0eWxlIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ2hlY2tib3hJbmRpY2F0b3IuZGlzcGxheU5hbWUgPSBJTkRJQ0FUT1JfTkFNRTtcbnZhciBCVUJCTEVfSU5QVVRfTkFNRSA9IFwiQ2hlY2tib3hCdWJibGVJbnB1dFwiO1xudmFyIENoZWNrYm94QnViYmxlSW5wdXQgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAoeyBfX3Njb3BlQ2hlY2tib3gsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRyb2wsXG4gICAgICBoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZixcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBmb3JtLFxuICAgICAgYnViYmxlSW5wdXQsXG4gICAgICBzZXRCdWJibGVJbnB1dFxuICAgIH0gPSB1c2VDaGVja2JveENvbnRleHQoQlVCQkxFX0lOUFVUX05BTUUsIF9fc2NvcGVDaGVja2JveCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgc2V0QnViYmxlSW5wdXQpO1xuICAgIGNvbnN0IHByZXZDaGVja2VkID0gdXNlUHJldmlvdXMoY2hlY2tlZCk7XG4gICAgY29uc3QgY29udHJvbFNpemUgPSB1c2VTaXplKGNvbnRyb2wpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGJ1YmJsZUlucHV0O1xuICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgICAgY29uc3QgaW5wdXRQcm90byA9IHdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICBpbnB1dFByb3RvLFxuICAgICAgICBcImNoZWNrZWRcIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNldENoZWNrZWQgPSBkZXNjcmlwdG9yLnNldDtcbiAgICAgIGNvbnN0IGJ1YmJsZXMgPSAhaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWYuY3VycmVudDtcbiAgICAgIGlmIChwcmV2Q2hlY2tlZCAhPT0gY2hlY2tlZCAmJiBzZXRDaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KFwiY2xpY2tcIiwgeyBidWJibGVzIH0pO1xuICAgICAgICBpbnB1dC5pbmRldGVybWluYXRlID0gaXNJbmRldGVybWluYXRlKGNoZWNrZWQpO1xuICAgICAgICBzZXRDaGVja2VkLmNhbGwoaW5wdXQsIGlzSW5kZXRlcm1pbmF0ZShjaGVja2VkKSA/IGZhbHNlIDogY2hlY2tlZCk7XG4gICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0sIFtidWJibGVJbnB1dCwgcHJldkNoZWNrZWQsIGNoZWNrZWQsIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmXSk7XG4gICAgY29uc3QgZGVmYXVsdENoZWNrZWRSZWYgPSBSZWFjdC51c2VSZWYoaXNJbmRldGVybWluYXRlKGNoZWNrZWQpID8gZmFsc2UgOiBjaGVja2VkKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5pbnB1dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGRlZmF1bHRDaGVja2VkOiBkZWZhdWx0Q2hlY2tlZCA/PyBkZWZhdWx0Q2hlY2tlZFJlZi5jdXJyZW50LFxuICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmb3JtLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5wcm9wcy5zdHlsZSxcbiAgICAgICAgICAuLi5jb250cm9sU2l6ZSxcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgIC8vIFdlIHRyYW5zZm9ybSBiZWNhdXNlIHRoZSBpbnB1dCBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYnV0IHdlIGhhdmVcbiAgICAgICAgICAvLyByZW5kZXJlZCBpdCAqKmFmdGVyKiogdGhlIGJ1dHRvbi4gVGhpcyBwdWxscyBpdCBiYWNrIHRvIHNpdCBvbiB0b3BcbiAgICAgICAgICAvLyBvZiB0aGUgYnV0dG9uLlxuICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKC0xMDAlKVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ2hlY2tib3hCdWJibGVJbnB1dC5kaXNwbGF5TmFtZSA9IEJVQkJMRV9JTlBVVF9OQU1FO1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkge1xuICByZXR1cm4gY2hlY2tlZCA9PT0gXCJpbmRldGVybWluYXRlXCI7XG59XG5mdW5jdGlvbiBnZXRTdGF0ZShjaGVja2VkKSB7XG4gIHJldHVybiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkgPyBcImluZGV0ZXJtaW5hdGVcIiA6IGNoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwidW5jaGVja2VkXCI7XG59XG5leHBvcnQge1xuICBDaGVja2JveCxcbiAgQ2hlY2tib3hJbmRpY2F0b3IsXG4gIENoZWNrYm94SW5kaWNhdG9yIGFzIEluZGljYXRvcixcbiAgQ2hlY2tib3ggYXMgUm9vdCxcbiAgY3JlYXRlQ2hlY2tib3hTY29wZSxcbiAgQ2hlY2tib3hCdWJibGVJbnB1dCBhcyB1bnN0YWJsZV9CdWJibGVJbnB1dCxcbiAgQ2hlY2tib3hCdWJibGVJbnB1dCBhcyB1bnN0YWJsZV9DaGVja2JveEJ1YmJsZUlucHV0LFxuICBDaGVja2JveFByb3ZpZGVyIGFzIHVuc3RhYmxlX0NoZWNrYm94UHJvdmlkZXIsXG4gIENoZWNrYm94VHJpZ2dlciBhcyB1bnN0YWJsZV9DaGVja2JveFRyaWdnZXIsXG4gIENoZWNrYm94UHJvdmlkZXIgYXMgdW5zdGFibGVfUHJvdmlkZXIsXG4gIENoZWNrYm94VHJpZ2dlciBhcyB1bnN0YWJsZV9UcmlnZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hlY2tib3gsIFNsb3QgfSBmcm9tICdyYWRpeC11aSc7XG52YXIgQ2hlY2tCb3hDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgaWQ6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbn0pO1xudmFyIENoZWNrQm94Um9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBpZCA9IHByb3BzLmlkLCBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkLCBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlO1xuICAgIHJldHVybiAoX2pzeChDaGVja2JveC5Sb290LCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBpZDogaWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgY2hlY2tlZDogY2hlY2tlZCwgb25DaGVja2VkQ2hhbmdlOiBvbkNoYW5nZSwgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlkOiBpZCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSB9KSk7XG59O1xudmFyIENoZWNrQm94TGFiZWwgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIHByZXZlbnRDaGFuZ2VPbkNsaWNrID0gcHJvcHMucHJldmVudENoYW5nZU9uQ2xpY2ssIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGlkID0gdXNlQ29udGV4dChDaGVja0JveENvbnRleHQpLmlkO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IFNsb3QuUm9vdCA6ICdsYWJlbCc7XG4gICAgcmV0dXJuIChfanN4KENvbXAsIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1jaGVjay1ib3ggbGFiZWxcIiwgaHRtbEZvcjogaWQsIG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAocHJldmVudENoYW5nZU9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBDaGVja0JveEluZGljYXRvciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdKTtcbiAgICB2YXIgZGlzYWJsZWQgPSB1c2VDb250ZXh0KENoZWNrQm94Q29udGV4dCkuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIChfanN4KENoZWNrYm94LkluZGljYXRvciwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWNoZWNrLWJveCBpbmRpY2F0b3IgXCIuY29uY2F0KGNsYXNzTmFtZSksIFwiZGF0YS1kaXNhYmxlZFwiOiBkaXNhYmxlZCB9LCByZXN0LCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkpO1xufTtcbkNoZWNrQm94Um9vdC5MYWJlbCA9IENoZWNrQm94TGFiZWw7XG5DaGVja0JveFJvb3QuSW5kaWNhdG9yID0gQ2hlY2tCb3hJbmRpY2F0b3I7XG5leHBvcnQgZGVmYXVsdCBDaGVja0JveFJvb3Q7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuZXhwb3J0IHZhciBzaXplID0gWydsJywgJ20nLCAncyddO1xudmFyIGNvbW1vbkNoZWNrQm94SW5kaWNhdG9yUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG59O1xuZXhwb3J0IHZhciBjaGVja0JveEluZGljYXRvclByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkNoZWNrQm94SW5kaWNhdG9yUHJvcHMpO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgQ2hlY2tCb3hJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IENoZWNrQm94Um9vdCBmcm9tICcuL2Jhc2UtY2hlY2stYm94JztcbmltcG9ydCB7IGNoZWNrQm94SW5kaWNhdG9yUHJvcHMgfSBmcm9tICcuL2NoZWNrLWJveC1wcm9wcyc7XG52YXIgQ2hlY2tCb3ggPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgcm9vdENsYXNzTmFtZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCB7fSkuY2xhc3NOYW1lO1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBjaGVja0JveEluZGljYXRvclByb3BzKSwgbGFiZWwgPSBfYS5sYWJlbCwgaW5kaWNhdG9yQ2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBjaGVja0JveFByb3BzID0gX19yZXN0KF9hLCBbXCJsYWJlbFwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIGNoZWNrQm94Um9vdENsYXNzTmFtZSA9IGNsYXNzTmFtZXMocm9vdENsYXNzTmFtZSwgJ2NoZWNrLWJveCcpO1xuICAgIHZhciBjaGVja0JveEluZGljYXRvckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoaW5kaWNhdG9yQ2xhc3NOYW1lLCAnY2hlY2stYm94LWluZGljYXRvciB3cmFwcGVyJyk7XG4gICAgcmV0dXJuIChfanN4cyhDaGVja0JveFJvb3QsIF9fYXNzaWduKHt9LCBjaGVja0JveFByb3BzLCB7IGNsYXNzTmFtZTogY2hlY2tCb3hSb290Q2xhc3NOYW1lLCBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNoZWNrQm94SW5kaWNhdG9yQ2xhc3NOYW1lLCBcImRhdGEtZGlzYWJsZWRcIjogY2hlY2tCb3hQcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hSb290LkluZGljYXRvciwgeyBjbGFzc05hbWU6ICdjaGVjay1ib3gtaW5kaWNhdG9yJywgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hJY29uLCB7fSkgfSkgfSksIF9qc3goQ2hlY2tCb3hSb290LkxhYmVsLCB7IGNoaWxkcmVuOiBsYWJlbCB9KV0gfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDaGVja0JveDtcbiIsInZhciBfcGF0aDtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgU3ZnQ2hldnJvbkRvd24gPSBmdW5jdGlvbiBTdmdDaGV2cm9uRG93bihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgcHJvcHMpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMzk4IDEyLjM5OGEuNTYuNTYgMCAwIDEtLjc5NiAwbC02LTZhLjU2My41NjMgMCAwIDEgLjc5Ni0uNzk2TDkgMTEuMjA0bDUuNjAyLTUuNjAyYS41NjIuNTYyIDAgMSAxIC43OTYuNzk2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFN2Z0NoZXZyb25Eb3duOyIsIi8vIHBhY2thZ2VzL2NvcmUvbnVtYmVyL3NyYy9udW1iZXIudHNcbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cbmV4cG9ydCB7XG4gIGNsYW1wXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9jb2xsZWN0aW9uLWxlZ2FjeS50c3hcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbihuYW1lKSB7XG4gIGNvbnN0IFBST1ZJREVSX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uUHJvdmlkZXJcIjtcbiAgY29uc3QgW2NyZWF0ZUNvbGxlY3Rpb25Db250ZXh0LCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKFBST1ZJREVSX05BTUUpO1xuICBjb25zdCBbQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgdXNlQ29sbGVjdGlvbkNvbnRleHRdID0gY3JlYXRlQ29sbGVjdGlvbkNvbnRleHQoXG4gICAgUFJPVklERVJfTkFNRSxcbiAgICB7IGNvbGxlY3Rpb25SZWY6IHsgY3VycmVudDogbnVsbCB9LCBpdGVtTWFwOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpIH1cbiAgKTtcbiAgY29uc3QgQ29sbGVjdGlvblByb3ZpZGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBpdGVtTWFwID0gUmVhY3QudXNlUmVmKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmN1cnJlbnQ7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgeyBzY29wZSwgaXRlbU1hcCwgY29sbGVjdGlvblJlZjogcmVmLCBjaGlsZHJlbiB9KTtcbiAgfTtcbiAgQ29sbGVjdGlvblByb3ZpZGVyLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRTtcbiAgY29uc3QgQ09MTEVDVElPTl9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uU2xvdFwiO1xuICBjb25zdCBDb2xsZWN0aW9uU2xvdEltcGwgPSBjcmVhdGVTbG90KENPTExFQ1RJT05fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvblNsb3QgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAgIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgICBjb25zdCB7IHNjb3BlLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQoQ09MTEVDVElPTl9TTE9UX05BTUUsIHNjb3BlKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRleHQuY29sbGVjdGlvblJlZik7XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChDb2xsZWN0aW9uU2xvdEltcGwsIHsgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvblNsb3QuZGlzcGxheU5hbWUgPSBDT0xMRUNUSU9OX1NMT1RfTkFNRTtcbiAgY29uc3QgSVRFTV9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uSXRlbVNsb3RcIjtcbiAgY29uc3QgSVRFTV9EQVRBX0FUVFIgPSBcImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtXCI7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdEltcGwgPSBjcmVhdGVTbG90KElURU1fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvbkl0ZW1TbG90ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4sIC4uLml0ZW1EYXRhIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHJlZik7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQoSVRFTV9TTE9UX05BTUUsIHNjb3BlKTtcbiAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnRleHQuaXRlbU1hcC5zZXQocmVmLCB7IHJlZiwgLi4uaXRlbURhdGEgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB2b2lkIGNvbnRleHQuaXRlbU1hcC5kZWxldGUocmVmKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvbkl0ZW1TbG90SW1wbCwgeyAuLi57IFtJVEVNX0RBVEFfQVRUUl06IFwiXCIgfSwgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvbkl0ZW1TbG90LmRpc3BsYXlOYW1lID0gSVRFTV9TTE9UX05BTUU7XG4gIGZ1bmN0aW9uIHVzZUNvbGxlY3Rpb24oc2NvcGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQobmFtZSArIFwiQ29sbGVjdGlvbkNvbnN1bWVyXCIsIHNjb3BlKTtcbiAgICBjb25zdCBnZXRJdGVtcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25Ob2RlID0gY29udGV4dC5jb2xsZWN0aW9uUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWNvbGxlY3Rpb25Ob2RlKSByZXR1cm4gW107XG4gICAgICBjb25zdCBvcmRlcmVkTm9kZXMgPSBBcnJheS5mcm9tKGNvbGxlY3Rpb25Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoYFske0lURU1fREFUQV9BVFRSfV1gKSk7XG4gICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oY29udGV4dC5pdGVtTWFwLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IGl0ZW1zLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBvcmRlcmVkTm9kZXMuaW5kZXhPZihhLnJlZi5jdXJyZW50KSAtIG9yZGVyZWROb2Rlcy5pbmRleE9mKGIucmVmLmN1cnJlbnQpXG4gICAgICApO1xuICAgICAgcmV0dXJuIG9yZGVyZWRJdGVtcztcbiAgICB9LCBbY29udGV4dC5jb2xsZWN0aW9uUmVmLCBjb250ZXh0Lml0ZW1NYXBdKTtcbiAgICByZXR1cm4gZ2V0SXRlbXM7XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IFByb3ZpZGVyOiBDb2xsZWN0aW9uUHJvdmlkZXIsIFNsb3Q6IENvbGxlY3Rpb25TbG90LCBJdGVtU2xvdDogQ29sbGVjdGlvbkl0ZW1TbG90IH0sXG4gICAgdXNlQ29sbGVjdGlvbixcbiAgICBjcmVhdGVDb2xsZWN0aW9uU2NvcGVcbiAgXTtcbn1cblxuLy8gc3JjL2NvbGxlY3Rpb24udHN4XG5pbXBvcnQgUmVhY3QyIGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dFNjb3BlIGFzIGNyZWF0ZUNvbnRleHRTY29wZTIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyBhcyB1c2VDb21wb3NlZFJlZnMyIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgYXMgY3JlYXRlU2xvdDIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcblxuLy8gc3JjL29yZGVyZWQtZGljdGlvbmFyeS50c1xudmFyIF9faW5zdGFuY2lhdGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgT3JkZXJlZERpY3QgPSBjbGFzcyBfT3JkZXJlZERpY3QgZXh0ZW5kcyBNYXAge1xuICAja2V5cztcbiAgY29uc3RydWN0b3IoZW50cmllcykge1xuICAgIHN1cGVyKGVudHJpZXMpO1xuICAgIHRoaXMuI2tleXMgPSBbLi4uc3VwZXIua2V5cygpXTtcbiAgICBfX2luc3RhbmNpYXRlZC5zZXQodGhpcywgdHJ1ZSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoX19pbnN0YW5jaWF0ZWQuZ2V0KHRoaXMpKSB7XG4gICAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLiNrZXlzW3RoaXMuI2tleXMuaW5kZXhPZihrZXkpXSA9IGtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2tleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgaW5zZXJ0KGluZGV4LCBrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgaGFzID0gdGhpcy5oYXMoa2V5KTtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiNrZXlzLmxlbmd0aDtcbiAgICBjb25zdCByZWxhdGl2ZUluZGV4ID0gdG9TYWZlSW50ZWdlcihpbmRleCk7XG4gICAgbGV0IGFjdHVhbEluZGV4ID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbmd0aCArIHJlbGF0aXZlSW5kZXg7XG4gICAgY29uc3Qgc2FmZUluZGV4ID0gYWN0dWFsSW5kZXggPCAwIHx8IGFjdHVhbEluZGV4ID49IGxlbmd0aCA/IC0xIDogYWN0dWFsSW5kZXg7XG4gICAgaWYgKHNhZmVJbmRleCA9PT0gdGhpcy5zaXplIHx8IGhhcyAmJiBzYWZlSW5kZXggPT09IHRoaXMuc2l6ZSAtIDEgfHwgc2FmZUluZGV4ID09PSAtMSkge1xuICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZSArIChoYXMgPyAwIDogMSk7XG4gICAgaWYgKHJlbGF0aXZlSW5kZXggPCAwKSB7XG4gICAgICBhY3R1YWxJbmRleCsrO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gWy4uLnRoaXMuI2tleXNdO1xuICAgIGxldCBuZXh0VmFsdWU7XG4gICAgbGV0IHNob3VsZFNraXAgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gYWN0dWFsSW5kZXg7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gaSkge1xuICAgICAgICBsZXQgbmV4dEtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXlzW2ldID09PSBrZXkpIHtcbiAgICAgICAgICBuZXh0S2V5ID0ga2V5c1tpICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhcykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5nZXQobmV4dEtleSk7XG4gICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFzaG91bGRTa2lwICYmIGtleXNbaSAtIDFdID09PSBrZXkpIHtcbiAgICAgICAgICBzaG91bGRTa2lwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0ga2V5c1tzaG91bGRTa2lwID8gaSA6IGkgLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICBuZXh0VmFsdWUgPSB0aGlzLmdldChjdXJyZW50S2V5KTtcbiAgICAgICAgdGhpcy5kZWxldGUoY3VycmVudEtleSk7XG4gICAgICAgIHRoaXMuc2V0KGN1cnJlbnRLZXksIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHdpdGgoaW5kZXgsIGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IF9PcmRlcmVkRGljdCh0aGlzKTtcbiAgICBjb3B5Lmluc2VydChpbmRleCwga2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cbiAgYmVmb3JlKGtleSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5cy5pbmRleE9mKGtleSkgLSAxO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVudHJ5QXQoaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IGtleS12YWx1ZSBwYWlyIGF0IHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGdpdmVuIGtleS5cbiAgICovXG4gIHNldEJlZm9yZShrZXksIG5ld0tleSwgdmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZXgsIG5ld0tleSwgdmFsdWUpO1xuICB9XG4gIGFmdGVyKGtleSkge1xuICAgIGxldCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGluZGV4ID0gaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLnNpemUgLSAxID8gLTEgOiBpbmRleCArIDE7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW50cnlBdChpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcga2V5LXZhbHVlIHBhaXIgYXQgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBnaXZlbiBrZXkuXG4gICAqL1xuICBzZXRBZnRlcihrZXksIG5ld0tleSwgdmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZXggKyAxLCBuZXdLZXksIHZhbHVlKTtcbiAgfVxuICBmaXJzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeUF0KDApO1xuICB9XG4gIGxhc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlBdCgtMSk7XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4ja2V5cyA9IFtdO1xuICAgIHJldHVybiBzdXBlci5jbGVhcigpO1xuICB9XG4gIGRlbGV0ZShrZXkpIHtcbiAgICBjb25zdCBkZWxldGVkID0gc3VwZXIuZGVsZXRlKGtleSk7XG4gICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgIHRoaXMuI2tleXMuc3BsaWNlKHRoaXMuI2tleXMuaW5kZXhPZihrZXkpLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cbiAgZGVsZXRlQXQoaW5kZXgpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmtleUF0KGluZGV4KTtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXQoaW5kZXgpIHtcbiAgICBjb25zdCBrZXkgPSBhdCh0aGlzLiNrZXlzLCBpbmRleCk7XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZW50cnlBdChpbmRleCkge1xuICAgIGNvbnN0IGtleSA9IGF0KHRoaXMuI2tleXMsIGluZGV4KTtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBba2V5LCB0aGlzLmdldChrZXkpXTtcbiAgICB9XG4gIH1cbiAgaW5kZXhPZihrZXkpIHtcbiAgICByZXR1cm4gdGhpcy4ja2V5cy5pbmRleE9mKGtleSk7XG4gIH1cbiAga2V5QXQoaW5kZXgpIHtcbiAgICByZXR1cm4gYXQodGhpcy4ja2V5cywgaW5kZXgpO1xuICB9XG4gIGZyb20oa2V5LCBvZmZzZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBkZXN0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgaWYgKGRlc3QgPCAwKSBkZXN0ID0gMDtcbiAgICBpZiAoZGVzdCA+PSB0aGlzLnNpemUpIGRlc3QgPSB0aGlzLnNpemUgLSAxO1xuICAgIHJldHVybiB0aGlzLmF0KGRlc3QpO1xuICB9XG4gIGtleUZyb20oa2V5LCBvZmZzZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBkZXN0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgaWYgKGRlc3QgPCAwKSBkZXN0ID0gMDtcbiAgICBpZiAoZGVzdCA+PSB0aGlzLnNpemUpIGRlc3QgPSB0aGlzLnNpemUgLSAxO1xuICAgIHJldHVybiB0aGlzLmtleUF0KGRlc3QpO1xuICB9XG4gIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMpIHtcbiAgICAgIGlmIChSZWZsZWN0LmFwcGx5KHByZWRpY2F0ZSwgdGhpc0FyZywgW2VudHJ5LCBpbmRleCwgdGhpc10pKSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBpZiAoUmVmbGVjdC5hcHBseShwcmVkaWNhdGUsIHRoaXNBcmcsIFtlbnRyeSwgaW5kZXgsIHRoaXNdKSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcykge1xuICAgICAgaWYgKFJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX09yZGVyZWREaWN0KGVudHJpZXMpO1xuICB9XG4gIG1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKSB7XG4gICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBlbnRyaWVzLnB1c2goW2VudHJ5WzBdLCBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrZm4sIHRoaXNBcmcsIFtlbnRyeSwgaW5kZXgsIHRoaXNdKV0pO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfT3JkZXJlZERpY3QoZW50cmllcyk7XG4gIH1cbiAgcmVkdWNlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlXSA9IGFyZ3M7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWUgPz8gdGhpcy5hdCgwKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBhY2N1bXVsYXRvciA9IGVudHJ5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrZm4sIHRoaXMsIFthY2N1bXVsYXRvciwgZW50cnksIGluZGV4LCB0aGlzXSk7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbiAgcmVkdWNlUmlnaHQoLi4uYXJncykge1xuICAgIGNvbnN0IFtjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWVdID0gYXJncztcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWUgPz8gdGhpcy5hdCgtMSk7XG4gICAgZm9yIChsZXQgaW5kZXggPSB0aGlzLnNpemUgLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuYXQoaW5kZXgpO1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLnNpemUgLSAxICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gZW50cnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRvciA9IFJlZmxlY3QuYXBwbHkoY2FsbGJhY2tmbiwgdGhpcywgW2FjY3VtdWxhdG9yLCBlbnRyeSwgaW5kZXgsIHRoaXNdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG4gIHRvU29ydGVkKGNvbXBhcmVGbikge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldLnNvcnQoY29tcGFyZUZuKTtcbiAgICByZXR1cm4gbmV3IF9PcmRlcmVkRGljdChlbnRyaWVzKTtcbiAgfVxuICB0b1JldmVyc2VkKCkge1xuICAgIGNvbnN0IHJldmVyc2VkID0gbmV3IF9PcmRlcmVkRGljdCgpO1xuICAgIGZvciAobGV0IGluZGV4ID0gdGhpcy5zaXplIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5rZXlBdChpbmRleCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHJldmVyc2VkLnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV2ZXJzZWQ7XG4gIH1cbiAgdG9TcGxpY2VkKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcygpXTtcbiAgICBlbnRyaWVzLnNwbGljZSguLi5hcmdzKTtcbiAgICByZXR1cm4gbmV3IF9PcmRlcmVkRGljdChlbnRyaWVzKTtcbiAgfVxuICBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IF9PcmRlcmVkRGljdCgpO1xuICAgIGxldCBzdG9wID0gdGhpcy5zaXplIC0gMTtcbiAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgc3RhcnQgPSBzdGFydCArIHRoaXMuc2l6ZTtcbiAgICB9XG4gICAgaWYgKGVuZCAhPT0gdm9pZCAwICYmIGVuZCA+IDApIHtcbiAgICAgIHN0b3AgPSBlbmQgLSAxO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8PSBzdG9wOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmtleUF0KGluZGV4KTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldChrZXkpO1xuICAgICAgcmVzdWx0LnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBpZiAoIVJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc29tZShwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcykge1xuICAgICAgaWYgKFJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5mdW5jdGlvbiBhdChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKFwiYXRcIiBpbiBBcnJheS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmF0LmNhbGwoYXJyYXksIGluZGV4KTtcbiAgfVxuICBjb25zdCBhY3R1YWxJbmRleCA9IHRvU2FmZUluZGV4KGFycmF5LCBpbmRleCk7XG4gIHJldHVybiBhY3R1YWxJbmRleCA9PT0gLTEgPyB2b2lkIDAgOiBhcnJheVthY3R1YWxJbmRleF07XG59XG5mdW5jdGlvbiB0b1NhZmVJbmRleChhcnJheSwgaW5kZXgpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBjb25zdCByZWxhdGl2ZUluZGV4ID0gdG9TYWZlSW50ZWdlcihpbmRleCk7XG4gIGNvbnN0IGFjdHVhbEluZGV4ID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbmd0aCArIHJlbGF0aXZlSW5kZXg7XG4gIHJldHVybiBhY3R1YWxJbmRleCA8IDAgfHwgYWN0dWFsSW5kZXggPj0gbGVuZ3RoID8gLTEgOiBhY3R1YWxJbmRleDtcbn1cbmZ1bmN0aW9uIHRvU2FmZUludGVnZXIobnVtYmVyKSB7XG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogTWF0aC50cnVuYyhudW1iZXIpO1xufVxuXG4vLyBzcmMvY29sbGVjdGlvbi50c3hcbmltcG9ydCB7IGpzeCBhcyBqc3gyIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVDb2xsZWN0aW9uMihuYW1lKSB7XG4gIGNvbnN0IFBST1ZJREVSX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uUHJvdmlkZXJcIjtcbiAgY29uc3QgW2NyZWF0ZUNvbGxlY3Rpb25Db250ZXh0LCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlMihQUk9WSURFUl9OQU1FKTtcbiAgY29uc3QgW0NvbGxlY3Rpb25Db250ZXh0UHJvdmlkZXIsIHVzZUNvbGxlY3Rpb25Db250ZXh0XSA9IGNyZWF0ZUNvbGxlY3Rpb25Db250ZXh0KFxuICAgIFBST1ZJREVSX05BTUUsXG4gICAge1xuICAgICAgY29sbGVjdGlvbkVsZW1lbnQ6IG51bGwsXG4gICAgICBjb2xsZWN0aW9uUmVmOiB7IGN1cnJlbnQ6IG51bGwgfSxcbiAgICAgIGNvbGxlY3Rpb25SZWZPYmplY3Q6IHsgY3VycmVudDogbnVsbCB9LFxuICAgICAgaXRlbU1hcDogbmV3IE9yZGVyZWREaWN0KCksXG4gICAgICBzZXRJdGVtTWFwOiAoKSA9PiB2b2lkIDBcbiAgICB9XG4gICk7XG4gIGNvbnN0IENvbGxlY3Rpb25Qcm92aWRlciA9ICh7IHN0YXRlLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlID8gLyogQF9fUFVSRV9fICovIGpzeDIoQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgeyAuLi5wcm9wcywgc3RhdGUgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uSW5pdCwgeyAuLi5wcm9wcyB9KTtcbiAgfTtcbiAgQ29sbGVjdGlvblByb3ZpZGVyLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRTtcbiAgY29uc3QgQ29sbGVjdGlvbkluaXQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZUluaXRDb2xsZWN0aW9uKCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3gyKENvbGxlY3Rpb25Qcm92aWRlckltcGwsIHsgLi4ucHJvcHMsIHN0YXRlIH0pO1xuICB9O1xuICBDb2xsZWN0aW9uSW5pdC5kaXNwbGF5TmFtZSA9IFBST1ZJREVSX05BTUUgKyBcIkluaXRcIjtcbiAgY29uc3QgQ29sbGVjdGlvblByb3ZpZGVySW1wbCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNoaWxkcmVuLCBzdGF0ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgcmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbY29sbGVjdGlvbkVsZW1lbnQsIHNldENvbGxlY3Rpb25FbGVtZW50XSA9IFJlYWN0Mi51c2VTdGF0ZShcbiAgICAgIG51bGxcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvc2VSZWZzID0gdXNlQ29tcG9zZWRSZWZzMihyZWYsIHNldENvbGxlY3Rpb25FbGVtZW50KTtcbiAgICBjb25zdCBbaXRlbU1hcCwgc2V0SXRlbU1hcF0gPSBzdGF0ZTtcbiAgICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghY29sbGVjdGlvbkVsZW1lbnQpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gZ2V0Q2hpbGRMaXN0T2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgfSk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGNvbGxlY3Rpb25FbGVtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0sIFtjb2xsZWN0aW9uRWxlbWVudF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihcbiAgICAgIENvbGxlY3Rpb25Db250ZXh0UHJvdmlkZXIsXG4gICAgICB7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpdGVtTWFwLFxuICAgICAgICBzZXRJdGVtTWFwLFxuICAgICAgICBjb2xsZWN0aW9uUmVmOiBjb21wb3NlUmVmcyxcbiAgICAgICAgY29sbGVjdGlvblJlZk9iamVjdDogcmVmLFxuICAgICAgICBjb2xsZWN0aW9uRWxlbWVudCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgIH1cbiAgICApO1xuICB9O1xuICBDb2xsZWN0aW9uUHJvdmlkZXJJbXBsLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRSArIFwiSW1wbFwiO1xuICBjb25zdCBDT0xMRUNUSU9OX1NMT1RfTkFNRSA9IG5hbWUgKyBcIkNvbGxlY3Rpb25TbG90XCI7XG4gIGNvbnN0IENvbGxlY3Rpb25TbG90SW1wbCA9IGNyZWF0ZVNsb3QyKENPTExFQ1RJT05fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvblNsb3QgPSBSZWFjdDIuZm9yd2FyZFJlZihcbiAgICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICAgICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxlY3Rpb25Db250ZXh0KENPTExFQ1RJT05fU0xPVF9OQU1FLCBzY29wZSk7XG4gICAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMyKGZvcndhcmRlZFJlZiwgY29udGV4dC5jb2xsZWN0aW9uUmVmKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uU2xvdEltcGwsIHsgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvblNsb3QuZGlzcGxheU5hbWUgPSBDT0xMRUNUSU9OX1NMT1RfTkFNRTtcbiAgY29uc3QgSVRFTV9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uSXRlbVNsb3RcIjtcbiAgY29uc3QgSVRFTV9EQVRBX0FUVFIgPSBcImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtXCI7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdEltcGwgPSBjcmVhdGVTbG90MihJVEVNX1NMT1RfTkFNRSk7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdCA9IFJlYWN0Mi5mb3J3YXJkUmVmKFxuICAgIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgICBjb25zdCB7IHNjb3BlLCBjaGlsZHJlbiwgLi4uaXRlbURhdGEgfSA9IHByb3BzO1xuICAgICAgY29uc3QgcmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgICAgIGNvbnN0IFtlbGVtZW50LCBzZXRFbGVtZW50XSA9IFJlYWN0Mi51c2VTdGF0ZShudWxsKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmczIoZm9yd2FyZGVkUmVmLCByZWYsIHNldEVsZW1lbnQpO1xuICAgICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxlY3Rpb25Db250ZXh0KElURU1fU0xPVF9OQU1FLCBzY29wZSk7XG4gICAgICBjb25zdCB7IHNldEl0ZW1NYXAgfSA9IGNvbnRleHQ7XG4gICAgICBjb25zdCBpdGVtRGF0YVJlZiA9IFJlYWN0Mi51c2VSZWYoaXRlbURhdGEpO1xuICAgICAgaWYgKCFzaGFsbG93RXF1YWwoaXRlbURhdGFSZWYuY3VycmVudCwgaXRlbURhdGEpKSB7XG4gICAgICAgIGl0ZW1EYXRhUmVmLmN1cnJlbnQgPSBpdGVtRGF0YTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lbW9pemVkSXRlbURhdGEgPSBpdGVtRGF0YVJlZi5jdXJyZW50O1xuICAgICAgUmVhY3QyLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1EYXRhMiA9IG1lbW9pemVkSXRlbURhdGE7XG4gICAgICAgIHNldEl0ZW1NYXAoKG1hcCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBtYXAuc2V0KGVsZW1lbnQsIHsgLi4uaXRlbURhdGEyLCBlbGVtZW50IH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcC50b1NvcnRlZChzb3J0QnlEb2N1bWVudFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hcC5zZXQoZWxlbWVudCwgeyAuLi5pdGVtRGF0YTIsIGVsZW1lbnQgfSkudG9Tb3J0ZWQoc29ydEJ5RG9jdW1lbnRQb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHNldEl0ZW1NYXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFtYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkRGljdChtYXApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSwgW2VsZW1lbnQsIG1lbW9pemVkSXRlbURhdGEsIHNldEl0ZW1NYXBdKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uSXRlbVNsb3RJbXBsLCB7IC4uLnsgW0lURU1fREFUQV9BVFRSXTogXCJcIiB9LCByZWY6IGNvbXBvc2VkUmVmcywgY2hpbGRyZW4gfSk7XG4gICAgfVxuICApO1xuICBDb2xsZWN0aW9uSXRlbVNsb3QuZGlzcGxheU5hbWUgPSBJVEVNX1NMT1RfTkFNRTtcbiAgZnVuY3Rpb24gdXNlSW5pdENvbGxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0Mi51c2VTdGF0ZShuZXcgT3JkZXJlZERpY3QoKSk7XG4gIH1cbiAgZnVuY3Rpb24gdXNlQ29sbGVjdGlvbihzY29wZSkge1xuICAgIGNvbnN0IHsgaXRlbU1hcCB9ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQobmFtZSArIFwiQ29sbGVjdGlvbkNvbnN1bWVyXCIsIHNjb3BlKTtcbiAgICByZXR1cm4gaXRlbU1hcDtcbiAgfVxuICBjb25zdCBmdW5jdGlvbnMgPSB7XG4gICAgY3JlYXRlQ29sbGVjdGlvblNjb3BlLFxuICAgIHVzZUNvbGxlY3Rpb24sXG4gICAgdXNlSW5pdENvbGxlY3Rpb25cbiAgfTtcbiAgcmV0dXJuIFtcbiAgICB7IFByb3ZpZGVyOiBDb2xsZWN0aW9uUHJvdmlkZXIsIFNsb3Q6IENvbGxlY3Rpb25TbG90LCBJdGVtU2xvdDogQ29sbGVjdGlvbkl0ZW1TbG90IH0sXG4gICAgZnVuY3Rpb25zXG4gIF07XG59XG5mdW5jdGlvbiBzaGFsbG93RXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnRQcmVjZWRpbmcoYSwgYikge1xuICByZXR1cm4gISEoYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKTtcbn1cbmZ1bmN0aW9uIHNvcnRCeURvY3VtZW50UG9zaXRpb24oYSwgYikge1xuICByZXR1cm4gIWFbMV0uZWxlbWVudCB8fCAhYlsxXS5lbGVtZW50ID8gMCA6IGlzRWxlbWVudFByZWNlZGluZyhhWzFdLmVsZW1lbnQsIGJbMV0uZWxlbWVudCkgPyAtMSA6IDE7XG59XG5mdW5jdGlvbiBnZXRDaGlsZExpc3RPYnNlcnZlcihjYWxsYmFjaykge1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufVxuZXhwb3J0IHtcbiAgY3JlYXRlQ29sbGVjdGlvbixcbiAgY3JlYXRlQ29sbGVjdGlvbjIgYXMgdW5zdGFibGVfY3JlYXRlQ29sbGVjdGlvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIi8vIHBhY2thZ2VzL3JlYWN0L2RpcmVjdGlvbi9zcmMvZGlyZWN0aW9uLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBEaXJlY3Rpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh2b2lkIDApO1xudmFyIERpcmVjdGlvblByb3ZpZGVyID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZGlyLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KERpcmVjdGlvbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGRpciwgY2hpbGRyZW4gfSk7XG59O1xuZnVuY3Rpb24gdXNlRGlyZWN0aW9uKGxvY2FsRGlyKSB7XG4gIGNvbnN0IGdsb2JhbERpciA9IFJlYWN0LnVzZUNvbnRleHQoRGlyZWN0aW9uQ29udGV4dCk7XG4gIHJldHVybiBsb2NhbERpciB8fCBnbG9iYWxEaXIgfHwgXCJsdHJcIjtcbn1cbnZhciBQcm92aWRlciA9IERpcmVjdGlvblByb3ZpZGVyO1xuZXhwb3J0IHtcbiAgRGlyZWN0aW9uUHJvdmlkZXIsXG4gIFByb3ZpZGVyLFxuICB1c2VEaXJlY3Rpb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2ZvY3VzLWd1YXJkcy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIGNvdW50ID0gMDtcbmZ1bmN0aW9uIEZvY3VzR3VhcmRzKHByb3BzKSB7XG4gIHVzZUZvY3VzR3VhcmRzKCk7XG4gIHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIHVzZUZvY3VzR3VhcmRzKCkge1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVkZ2VHdWFyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBlZGdlR3VhcmRzWzBdID8/IGNyZWF0ZUZvY3VzR3VhcmQoKSk7XG4gICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgZWRnZUd1YXJkc1sxXSA/PyBjcmVhdGVGb2N1c0d1YXJkKCkpO1xuICAgIGNvdW50Kys7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdXCIpLmZvckVhY2goKG5vZGUpID0+IG5vZGUucmVtb3ZlKCkpO1xuICAgICAgfVxuICAgICAgY291bnQtLTtcbiAgICB9O1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGb2N1c0d1YXJkKCkge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1yYWRpeC1mb2N1cy1ndWFyZFwiLCBcIlwiKTtcbiAgZWxlbWVudC50YWJJbmRleCA9IDA7XG4gIGVsZW1lbnQuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIHJldHVybiBlbGVtZW50O1xufVxuZXhwb3J0IHtcbiAgRm9jdXNHdWFyZHMsXG4gIEZvY3VzR3VhcmRzIGFzIFJvb3QsXG4gIHVzZUZvY3VzR3VhcmRzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9mb2N1cy1zY29wZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNhbGxiYWNrLXJlZlwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgQVVUT0ZPQ1VTX09OX01PVU5UID0gXCJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnRcIjtcbnZhciBBVVRPRk9DVVNfT05fVU5NT1VOVCA9IFwiZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnRcIjtcbnZhciBFVkVOVF9PUFRJT05TID0geyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogdHJ1ZSB9O1xudmFyIEZPQ1VTX1NDT1BFX05BTUUgPSBcIkZvY3VzU2NvcGVcIjtcbnZhciBGb2N1c1Njb3BlID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgbG9vcCA9IGZhbHNlLFxuICAgIHRyYXBwZWQgPSBmYWxzZSxcbiAgICBvbk1vdW50QXV0b0ZvY3VzOiBvbk1vdW50QXV0b0ZvY3VzUHJvcCxcbiAgICBvblVubW91bnRBdXRvRm9jdXM6IG9uVW5tb3VudEF1dG9Gb2N1c1Byb3AsXG4gICAgLi4uc2NvcGVQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb250YWluZXIsIHNldENvbnRhaW5lcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qgb25Nb3VudEF1dG9Gb2N1cyA9IHVzZUNhbGxiYWNrUmVmKG9uTW91bnRBdXRvRm9jdXNQcm9wKTtcbiAgY29uc3Qgb25Vbm1vdW50QXV0b0ZvY3VzID0gdXNlQ2FsbGJhY2tSZWYob25Vbm1vdW50QXV0b0ZvY3VzUHJvcCk7XG4gIGNvbnN0IGxhc3RGb2N1c2VkRWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgKG5vZGUpID0+IHNldENvbnRhaW5lcihub2RlKSk7XG4gIGNvbnN0IGZvY3VzU2NvcGUgPSBSZWFjdC51c2VSZWYoe1xuICAgIHBhdXNlZDogZmFsc2UsXG4gICAgcGF1c2UoKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgfSxcbiAgICByZXN1bWUoKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSkuY3VycmVudDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHJhcHBlZCkge1xuICAgICAgbGV0IGhhbmRsZUZvY3VzSW4yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGZvY3VzU2NvcGUucGF1c2VkIHx8ICFjb250YWluZXIpIHJldHVybjtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoY29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb2N1cyhsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCwgeyBzZWxlY3Q6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGhhbmRsZUZvY3VzT3V0MiA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGlmIChmb2N1c1Njb3BlLnBhdXNlZCB8fCAhY29udGFpbmVyKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgIGZvY3VzKGxhc3RGb2N1c2VkRWxlbWVudFJlZi5jdXJyZW50LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgaGFuZGxlTXV0YXRpb25zMiA9IGZ1bmN0aW9uKG11dGF0aW9ucykge1xuICAgICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChmb2N1c2VkRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMCkgZm9jdXMoY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBoYW5kbGVGb2N1c0luID0gaGFuZGxlRm9jdXNJbjIsIGhhbmRsZUZvY3VzT3V0ID0gaGFuZGxlRm9jdXNPdXQyLCBoYW5kbGVNdXRhdGlvbnMgPSBoYW5kbGVNdXRhdGlvbnMyO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgaGFuZGxlRm9jdXNJbjIpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGhhbmRsZUZvY3VzT3V0Mik7XG4gICAgICBjb25zdCBtdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTXV0YXRpb25zMik7XG4gICAgICBpZiAoY29udGFpbmVyKSBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIGhhbmRsZUZvY3VzSW4yKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGhhbmRsZUZvY3VzT3V0Mik7XG4gICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFt0cmFwcGVkLCBjb250YWluZXIsIGZvY3VzU2NvcGUucGF1c2VkXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgZm9jdXNTY29wZXNTdGFjay5hZGQoZm9jdXNTY29wZSk7XG4gICAgICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgY29uc3QgaGFzRm9jdXNlZENhbmRpZGF0ZSA9IGNvbnRhaW5lci5jb250YWlucyhwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO1xuICAgICAgaWYgKCFoYXNGb2N1c2VkQ2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IG1vdW50RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQVVUT0ZPQ1VTX09OX01PVU5ULCBFVkVOVF9PUFRJT05TKTtcbiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoQVVUT0ZPQ1VTX09OX01PVU5ULCBvbk1vdW50QXV0b0ZvY3VzKTtcbiAgICAgICAgY29udGFpbmVyLmRpc3BhdGNoRXZlbnQobW91bnRFdmVudCk7XG4gICAgICAgIGlmICghbW91bnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgZm9jdXNGaXJzdChyZW1vdmVMaW5rcyhnZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyKSksIHsgc2VsZWN0OiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvY3VzKGNvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihBVVRPRk9DVVNfT05fTU9VTlQsIG9uTW91bnRBdXRvRm9jdXMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bm1vdW50RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQVVUT0ZPQ1VTX09OX1VOTU9VTlQsIEVWRU5UX09QVElPTlMpO1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKEFVVE9GT0NVU19PTl9VTk1PVU5ULCBvblVubW91bnRBdXRvRm9jdXMpO1xuICAgICAgICAgIGNvbnRhaW5lci5kaXNwYXRjaEV2ZW50KHVubW91bnRFdmVudCk7XG4gICAgICAgICAgaWYgKCF1bm1vdW50RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgZm9jdXMocHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID8/IGRvY3VtZW50LmJvZHksIHsgc2VsZWN0OiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihBVVRPRk9DVVNfT05fVU5NT1VOVCwgb25Vbm1vdW50QXV0b0ZvY3VzKTtcbiAgICAgICAgICBmb2N1c1Njb3Blc1N0YWNrLnJlbW92ZShmb2N1c1Njb3BlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgb25Nb3VudEF1dG9Gb2N1cywgb25Vbm1vdW50QXV0b0ZvY3VzLCBmb2N1c1Njb3BlXSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghbG9vcCAmJiAhdHJhcHBlZCkgcmV0dXJuO1xuICAgICAgaWYgKGZvY3VzU2NvcGUucGF1c2VkKSByZXR1cm47XG4gICAgICBjb25zdCBpc1RhYktleSA9IGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5O1xuICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGlzVGFiS2V5ICYmIGZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjIgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBjb25zdCBbZmlyc3QsIGxhc3RdID0gZ2V0VGFiYmFibGVFZGdlcyhjb250YWluZXIyKTtcbiAgICAgICAgY29uc3QgaGFzVGFiYmFibGVFbGVtZW50c0luc2lkZSA9IGZpcnN0ICYmIGxhc3Q7XG4gICAgICAgIGlmICghaGFzVGFiYmFibGVFbGVtZW50c0luc2lkZSkge1xuICAgICAgICAgIGlmIChmb2N1c2VkRWxlbWVudCA9PT0gY29udGFpbmVyMikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGZvY3VzZWRFbGVtZW50ID09PSBsYXN0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKGxvb3ApIGZvY3VzKGZpcnN0LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGZvY3VzZWRFbGVtZW50ID09PSBmaXJzdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChsb29wKSBmb2N1cyhsYXN0LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtsb29wLCB0cmFwcGVkLCBmb2N1c1Njb3BlLnBhdXNlZF1cbiAgKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyB0YWJJbmRleDogLTEsIC4uLnNjb3BlUHJvcHMsIHJlZjogY29tcG9zZWRSZWZzLCBvbktleURvd246IGhhbmRsZUtleURvd24gfSk7XG59KTtcbkZvY3VzU2NvcGUuZGlzcGxheU5hbWUgPSBGT0NVU19TQ09QRV9OQU1FO1xuZnVuY3Rpb24gZm9jdXNGaXJzdChjYW5kaWRhdGVzLCB7IHNlbGVjdCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgZm9jdXMoY2FuZGlkYXRlLCB7IHNlbGVjdCB9KTtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSByZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRhYmJhYmxlRWRnZXMoY29udGFpbmVyKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyKTtcbiAgY29uc3QgZmlyc3QgPSBmaW5kVmlzaWJsZShjYW5kaWRhdGVzLCBjb250YWluZXIpO1xuICBjb25zdCBsYXN0ID0gZmluZFZpc2libGUoY2FuZGlkYXRlcy5yZXZlcnNlKCksIGNvbnRhaW5lcik7XG4gIHJldHVybiBbZmlyc3QsIGxhc3RdO1xufVxuZnVuY3Rpb24gZ2V0VGFiYmFibGVDYW5kaWRhdGVzKGNvbnRhaW5lcikge1xuICBjb25zdCBub2RlcyA9IFtdO1xuICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGNvbnRhaW5lciwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICBhY2NlcHROb2RlOiAobm9kZSkgPT4ge1xuICAgICAgY29uc3QgaXNIaWRkZW5JbnB1dCA9IG5vZGUudGFnTmFtZSA9PT0gXCJJTlBVVFwiICYmIG5vZGUudHlwZSA9PT0gXCJoaWRkZW5cIjtcbiAgICAgIGlmIChub2RlLmRpc2FibGVkIHx8IG5vZGUuaGlkZGVuIHx8IGlzSGlkZGVuSW5wdXQpIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgcmV0dXJuIG5vZGUudGFiSW5kZXggPj0gMCA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgfVxuICB9KTtcbiAgd2hpbGUgKHdhbGtlci5uZXh0Tm9kZSgpKSBub2Rlcy5wdXNoKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gIHJldHVybiBub2Rlcztcbn1cbmZ1bmN0aW9uIGZpbmRWaXNpYmxlKGVsZW1lbnRzLCBjb250YWluZXIpIHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgaWYgKCFpc0hpZGRlbihlbGVtZW50LCB7IHVwVG86IGNvbnRhaW5lciB9KSkgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSGlkZGVuKG5vZGUsIHsgdXBUbyB9KSB7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHJldHVybiB0cnVlO1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmICh1cFRvICE9PSB2b2lkIDAgJiYgbm9kZSA9PT0gdXBUbykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLmRpc3BsYXkgPT09IFwibm9uZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzU2VsZWN0YWJsZUlucHV0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIFwic2VsZWN0XCIgaW4gZWxlbWVudDtcbn1cbmZ1bmN0aW9uIGZvY3VzKGVsZW1lbnQsIHsgc2VsZWN0ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuZm9jdXMpIHtcbiAgICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIGlmIChlbGVtZW50ICE9PSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgJiYgaXNTZWxlY3RhYmxlSW5wdXQoZWxlbWVudCkgJiYgc2VsZWN0KVxuICAgICAgZWxlbWVudC5zZWxlY3QoKTtcbiAgfVxufVxudmFyIGZvY3VzU2NvcGVzU3RhY2sgPSBjcmVhdGVGb2N1c1Njb3Blc1N0YWNrKCk7XG5mdW5jdGlvbiBjcmVhdGVGb2N1c1Njb3Blc1N0YWNrKCkge1xuICBsZXQgc3RhY2sgPSBbXTtcbiAgcmV0dXJuIHtcbiAgICBhZGQoZm9jdXNTY29wZSkge1xuICAgICAgY29uc3QgYWN0aXZlRm9jdXNTY29wZSA9IHN0YWNrWzBdO1xuICAgICAgaWYgKGZvY3VzU2NvcGUgIT09IGFjdGl2ZUZvY3VzU2NvcGUpIHtcbiAgICAgICAgYWN0aXZlRm9jdXNTY29wZT8ucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIHN0YWNrID0gYXJyYXlSZW1vdmUoc3RhY2ssIGZvY3VzU2NvcGUpO1xuICAgICAgc3RhY2sudW5zaGlmdChmb2N1c1Njb3BlKTtcbiAgICB9LFxuICAgIHJlbW92ZShmb2N1c1Njb3BlKSB7XG4gICAgICBzdGFjayA9IGFycmF5UmVtb3ZlKHN0YWNrLCBmb2N1c1Njb3BlKTtcbiAgICAgIHN0YWNrWzBdPy5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBhcnJheVJlbW92ZShhcnJheSwgaXRlbSkge1xuICBjb25zdCB1cGRhdGVkQXJyYXkgPSBbLi4uYXJyYXldO1xuICBjb25zdCBpbmRleCA9IHVwZGF0ZWRBcnJheS5pbmRleE9mKGl0ZW0pO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdXBkYXRlZEFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZWRBcnJheTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxpbmtzKGl0ZW1zKSB7XG4gIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFnTmFtZSAhPT0gXCJBXCIpO1xufVxudmFyIFJvb3QgPSBGb2N1c1Njb3BlO1xuZXhwb3J0IHtcbiAgRm9jdXNTY29wZSxcbiAgUm9vdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBnZXREZWZhdWx0UGFyZW50ID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzYW1wbGVUYXJnZXQgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0WzBdIDogb3JpZ2luYWxUYXJnZXQ7XG4gICAgcmV0dXJuIHNhbXBsZVRhcmdldC5vd25lckRvY3VtZW50LmJvZHk7XG59O1xudmFyIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xudmFyIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBtYXJrZXJNYXAgPSB7fTtcbnZhciBsb2NrQ291bnQgPSAwO1xudmFyIHVud3JhcEhvc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIChub2RlLmhvc3QgfHwgdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpKTtcbn07XG52YXIgY29ycmVjdFRhcmdldHMgPSBmdW5jdGlvbiAocGFyZW50LCB0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChwYXJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ycmVjdGVkVGFyZ2V0ID0gdW53cmFwSG9zdCh0YXJnZXQpO1xuICAgICAgICBpZiAoY29ycmVjdGVkVGFyZ2V0ICYmIHBhcmVudC5jb250YWlucyhjb3JyZWN0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdGVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuJywgdGFyZ2V0LCAnaW4gbm90IGNvbnRhaW5lZCBpbnNpZGUnLCBwYXJlbnQsICcuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfSk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbnRyb2xBdHRyaWJ1dGVdIC0gaHRtbCBBdHRyaWJ1dGUgdG8gY29udHJvbFxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbnZhciBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lLCBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldHMgPSBjb3JyZWN0VGFyZ2V0cyhwYXJlbnROb2RlLCBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgaWYgKCFtYXJrZXJNYXBbbWFya2VyTmFtZV0pIHtcbiAgICAgICAgbWFya2VyTWFwW21hcmtlck5hbWVdID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgdmFyIG1hcmtlckNvdW50ZXIgPSBtYXJrZXJNYXBbbWFya2VyTmFtZV07XG4gICAgdmFyIGhpZGRlbk5vZGVzID0gW107XG4gICAgdmFyIGVsZW1lbnRzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgIHZhciBlbGVtZW50c1RvU3RvcCA9IG5ldyBTZXQodGFyZ2V0cyk7XG4gICAgdmFyIGtlZXAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9O1xuICAgIHRhcmdldHMuZm9yRWFjaChrZWVwKTtcbiAgICB2YXIgZGVlcCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgZWxlbWVudHNUb1N0b3AuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlIaWRkZW4gPSBhdHRyICE9PSBudWxsICYmIGF0dHIgIT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSAoY291bnRlck1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJWYWx1ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobWFya2VyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uICcsIG5vZGUsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyXG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgbWFya2VyTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWFyaWEtaGlkZGVuJzsgfVxuICAgIHZhciB0YXJnZXRzID0gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2hvdWxkIG5vdCBoaWRlIGFyaWEtbGl2ZSBlbGVtZW50cyAtIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvYXJpYS1oaWRkZW4vaXNzdWVzLzEwXG4gICAgLy8gYW5kIHNjcmlwdCBlbGVtZW50cywgYXMgdGhleSBoYXZlIG5vIGltcGFjdCBvbiBhY2Nlc3NpYmlsaXR5LlxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0sIHNjcmlwdCcpKSk7XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnModGFyZ2V0cywgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2FyaWEtaGlkZGVuJyk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBpbmVydFxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBpbmVydE90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWluZXJ0LWVkJzsgfVxuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKG9yaWdpbmFsVGFyZ2V0LCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnaW5lcnQnKTtcbn07XG4vKipcbiAqIEByZXR1cm5zIGlmIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBpbmVydFxuICovXG5leHBvcnQgdmFyIHN1cHBvcnRzSW5lcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgSFRNTEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpbmVydCcpO1xufTtcbi8qKlxuICogQXV0b21hdGljIGZ1bmN0aW9uIHRvIFwic3VwcHJlc3NcIiBET00gZWxlbWVudHMgLSBfaGlkZV8gb3IgX2luZXJ0XyBpbiB0aGUgYmVzdCBwb3NzaWJsZSB3YXlcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgc3VwcHJlc3NPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1zdXBwcmVzc2VkJzsgfVxuICAgIHJldHVybiAoc3VwcG9ydHNJbmVydCgpID8gaW5lcnRPdGhlcnMgOiBoaWRlT3RoZXJzKShvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSk7XG59O1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIiwiZXhwb3J0IHZhciB6ZXJvUmlnaHRDbGFzc05hbWUgPSAncmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbic7XG5leHBvcnQgdmFyIGZ1bGxXaWR0aENsYXNzTmFtZSA9ICd3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhcic7XG5leHBvcnQgdmFyIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSA9ICd3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbic7XG4vKipcbiAqIE5hbWUgb2YgYSBDU1MgdmFyaWFibGUgY29udGFpbmluZyB0aGUgYW1vdW50IG9mIFwiaGlkZGVuXCIgc2Nyb2xsYmFyXG4gKiAhIG1pZ2h0IGJlIHVuZGVmaW5lZCAhIHVzZSB3aWxsIGZhbGxiYWNrIVxuICovXG5leHBvcnQgdmFyIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgPSAnLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplJztcbiIsIi8qKlxuICogQXNzaWducyBhIHZhbHVlIGZvciBhIGdpdmVuIHJlZiwgbm8gbWF0dGVyIG9mIHRoZSByZWYgZm9ybWF0XG4gKiBAcGFyYW0ge1JlZk9iamVjdH0gcmVmIC0gYSBjYWxsYmFjayBmdW5jdGlvbiBvciByZWYgb2JqZWN0XG4gKiBAcGFyYW0gdmFsdWUgLSBhIG5ldyB2YWx1ZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI2Fzc2lnbnJlZlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZk9iamVjdCA9IHVzZVJlZigpO1xuICogY29uc3QgcmVmRm4gPSAocmVmKSA9PiB7Li4uLn1cbiAqXG4gKiBhc3NpZ25SZWYocmVmT2JqZWN0LCBcInJlZlZhbHVlXCIpO1xuICogYXNzaWduUmVmKHJlZkZuLCBcInJlZlZhbHVlXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduUmVmKHJlZiwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZjtcbn1cbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ25SZWYgfSBmcm9tICcuL2Fzc2lnblJlZic7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG52YXIgY3VycmVudFZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE1lcmdlcyB0d28gb3IgbW9yZSByZWZzIHRvZ2V0aGVyIHByb3ZpZGluZyBhIHNpbmdsZSBpbnRlcmZhY2UgdG8gc2V0IHRoZWlyIHZhbHVlXG4gKiBAcGFyYW0ge1JlZk9iamVjdHxSZWZ9IHJlZnNcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fSAtIGEgbmV3IHJlZiwgd2hpY2ggdHJhbnNsYXRlcyBhbGwgY2hhbmdlcyB0byB7cmVmc31cbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZVJlZnN9IGEgdmVyc2lvbiB3aXRob3V0IGJ1aXQtaW4gbWVtb2l6YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZW1lcmdlcmVmc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgY29uc3Qgb3duUmVmID0gdXNlUmVmKCk7XG4gKiAgIGNvbnN0IGRvbVJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBvd25SZWZdKTsgLy8g8J+RiCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgbm90aGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm47XG59O1xuLyoqXG4gKiBSZW1vdmVzIHNjcm9sbGJhciBmcm9tIHRoZSBwYWdlIGFuZCBjb250YWluIHRoZSBzY3JvbGwgd2l0aGluIHRoZSBMb2NrXG4gKi9cbnZhciBSZW1vdmVTY3JvbGwgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25XaGVlbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbm90aGluZyxcbiAgICB9KSwgY2FsbGJhY2tzID0gX2FbMF0sIHNldENhbGxiYWNrcyA9IF9hWzFdO1xuICAgIHZhciBmb3J3YXJkUHJvcHMgPSBwcm9wcy5mb3J3YXJkUHJvcHMsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVtb3ZlU2Nyb2xsQmFyID0gcHJvcHMucmVtb3ZlU2Nyb2xsQmFyLCBlbmFibGVkID0gcHJvcHMuZW5hYmxlZCwgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgbm9SZWxhdGl2ZSA9IHByb3BzLm5vUmVsYXRpdmUsIG5vSXNvbGF0aW9uID0gcHJvcHMubm9Jc29sYXRpb24sIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIF9iID0gcHJvcHMuYXMsIENvbnRhaW5lciA9IF9iID09PSB2b2lkIDAgPyAnZGl2JyA6IF9iLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiZm9yd2FyZFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZW1vdmVTY3JvbGxCYXJcIiwgXCJlbmFibGVkXCIsIFwic2hhcmRzXCIsIFwic2lkZUNhclwiLCBcIm5vUmVsYXRpdmVcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9SZWxhdGl2ZTogbm9SZWxhdGl2ZSwgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFNpZGVDYXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2lkZUNhciA9IF9hLnNpZGVDYXIsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcInNpZGVDYXJcIl0pO1xuICAgIGlmICghc2lkZUNhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhcicpO1xuICAgIH1cbiAgICB2YXIgVGFyZ2V0ID0gc2lkZUNhci5yZWFkKCk7XG4gICAgaWYgKCFUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFyZ2V0LCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xufTtcblNpZGVDYXIuaXNTaWRlQ2FyRXhwb3J0ID0gdHJ1ZTtcbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRTaWRlY2FyKG1lZGl1bSwgZXhwb3J0ZWQpIHtcbiAgICBtZWRpdW0udXNlTWVkaXVtKGV4cG9ydGVkKTtcbiAgICByZXR1cm4gU2lkZUNhcjtcbn1cbiIsInZhciBjdXJyZW50Tm9uY2U7XG5leHBvcnQgdmFyIHNldE5vbmNlID0gZnVuY3Rpb24gKG5vbmNlKSB7XG4gICAgY3VycmVudE5vbmNlID0gbm9uY2U7XG59O1xuZXhwb3J0IHZhciBnZXROb25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3VycmVudE5vbmNlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9uY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBfX3dlYnBhY2tfbm9uY2VfXztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gJ2dldC1ub25jZSc7XG5mdW5jdGlvbiBtYWtlU3R5bGVUYWcoKSB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgdGFnLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIHZhciBub25jZSA9IGdldE5vbmNlKCk7XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFnO1xufVxuZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHRhZywgY3NzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YWcuc3R5bGVTaGVldCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhZy5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVUYWcodGFnKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xufVxuZXhwb3J0IHZhciBzdHlsZXNoZWV0U2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlc2hlZXQgPSBtYWtlU3R5bGVUYWcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG4vKipcbiAqIGNyZWF0ZXMgYSBob29rIHRvIGNvbnRyb2wgc3R5bGUgc2luZ2xldG9uXG4gKiBAc2VlIHtAbGluayBzdHlsZVNpbmdsZXRvbn0gZm9yIGEgc2FmZXIgY29tcG9uZW50IHZlcnNpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gKiAvLy9cbiAqIHVzZVN0eWxlKCdib2R5IHsgb3ZlcmZsb3c6IGhpZGRlbn0nKTtcbiAqL1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzLCBpc0R5bmFtaWMpIHtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZChzdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaGVldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtzdHlsZXMgJiYgaXNEeW5hbWljXSk7XG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuLyoqXG4gKiBjcmVhdGUgYSBDb21wb25lbnQgdG8gYWRkIHN0eWxlcyBvbiBkZW1hbmRcbiAqIC0gc3R5bGVzIGFyZSBhZGRlZCB3aGVuIGZpcnN0IGluc3RhbmNlIGlzIG1vdW50ZWRcbiAqIC0gc3R5bGVzIGFyZSByZW1vdmVkIHdoZW4gdGhlIGxhc3QgaW5zdGFuY2UgaXMgdW5tb3VudGVkXG4gKiAtIGNoYW5naW5nIHN0eWxlcyBpbiBydW50aW1lIGRvZXMgbm90aGluZyB1bmxlc3MgZHluYW1pYyBpcyBzZXQuIEJ1dCB3aXRoIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBjYW4gbGVhZCB0byB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gICAgdmFyIFNoZWV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBfYS5zdHlsZXMsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICB1c2VTdHlsZShzdHlsZXMsIGR5bmFtaWMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBTaGVldDtcbn07XG4iLCJleHBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJy4vY29tcG9uZW50JztcbmV4cG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG5leHBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuIiwiZXhwb3J0IHZhciB6ZXJvR2FwID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGdhcDogMCxcbn07XG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcGFyc2VJbnQoeCB8fCAnJywgMTApIHx8IDA7IH07XG52YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICB2YXIgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICB2YXIgbGVmdCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nTGVmdCcgOiAnbWFyZ2luTGVmdCddO1xuICAgIHZhciB0b3AgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1RvcCcgOiAnbWFyZ2luVG9wJ107XG4gICAgdmFyIHJpZ2h0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdSaWdodCcgOiAnbWFyZ2luUmlnaHQnXTtcbiAgICByZXR1cm4gW3BhcnNlKGxlZnQpLCBwYXJzZSh0b3ApLCBwYXJzZShyaWdodCldO1xufTtcbmV4cG9ydCB2YXIgZ2V0R2FwV2lkdGggPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB6ZXJvR2FwO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldChnYXBNb2RlKTtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBvZmZzZXRzWzBdLFxuICAgICAgICB0b3A6IG9mZnNldHNbMV0sXG4gICAgICAgIHJpZ2h0OiBvZmZzZXRzWzJdLFxuICAgICAgICBnYXA6IE1hdGgubWF4KDAsIHdpbmRvd1dpZHRoIC0gZG9jdW1lbnRXaWR0aCArIG9mZnNldHNbMl0gLSBvZmZzZXRzWzBdKSxcbiAgICB9O1xufTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbmV4cG9ydCB2YXIgbG9ja0F0dHJpYnV0ZSA9ICdkYXRhLXNjcm9sbC1sb2NrZWQnO1xuLy8gaW1wb3J0YW50IHRpcCAtIG9uY2Ugd2UgbWVhc3VyZSBzY3JvbGxCYXIgd2lkdGggYW5kIHJlbW92ZSB0aGVtXG4vLyB3ZSBjb3VsZCBub3QgcmVwZWF0IHRoaXMgb3BlcmF0aW9uXG4vLyB0aHVzIHdlIGFyZSB1c2luZyBzdHlsZS1zaW5nbGV0b24gLSBvbmx5IHRoZSBmaXJzdCBcInlldCBjb3JyZWN0XCIgc3R5bGUgd2lsbCBiZSBhcHBsaWVkLlxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uIChfYSwgYWxsb3dSZWxhdGl2ZSwgZ2FwTW9kZSwgaW1wb3J0YW50KSB7XG4gICAgdmFyIGxlZnQgPSBfYS5sZWZ0LCB0b3AgPSBfYS50b3AsIHJpZ2h0ID0gX2EucmlnaHQsIGdhcCA9IF9hLmdhcDtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIHJldHVybiBcIlxcbiAgLlwiLmNvbmNhdChub1Njcm9sbGJhcnNDbGFzc05hbWUsIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XFxuICAgIFwiKS5jb25jYXQoW1xuICAgICAgICBhbGxvd1JlbGF0aXZlICYmIFwicG9zaXRpb246IHJlbGF0aXZlIFwiLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ21hcmdpbicgJiZcbiAgICAgICAgICAgIFwiXFxuICAgIHBhZGRpbmctbGVmdDogXCIuY29uY2F0KGxlZnQsIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIikuY29uY2F0KHRvcCwgXCJweDtcXG4gICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChyaWdodCwgXCJweDtcXG4gICAgbWFyZ2luLWxlZnQ6MDtcXG4gICAgbWFyZ2luLXRvcDowO1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgXCIpLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIi5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcnKSwgXCJcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgXCIpLmNvbmNhdChyZW1vdmVkQmFyU2l6ZVZhcmlhYmxlLCBcIjogXCIpLmNvbmNhdChnYXAsIFwicHg7XFxuICB9XFxuXCIpO1xufTtcbnZhciBnZXRDdXJyZW50VXNlQ291bnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IHBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpIHx8ICcwJywgMTApO1xuICAgIHJldHVybiBpc0Zpbml0ZShjb3VudGVyKSA/IGNvdW50ZXIgOiAwO1xufTtcbmV4cG9ydCB2YXIgdXNlTG9ja0F0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCAoZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0NvdW50ZXIgPSBnZXRDdXJyZW50VXNlQ291bnRlcigpIC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdDb3VudGVyIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIG5ld0NvdW50ZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogUmVtb3ZlcyBwYWdlIHNjcm9sbGJhciBhbmQgYmxvY2tzIHBhZ2Ugc2Nyb2xsIHdoZW4gbW91bnRlZFxuICovXG5leHBvcnQgdmFyIFJlbW92ZVNjcm9sbEJhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBub1JlbGF0aXZlID0gX2Eubm9SZWxhdGl2ZSwgbm9JbXBvcnRhbnQgPSBfYS5ub0ltcG9ydGFudCwgX2IgPSBfYS5nYXBNb2RlLCBnYXBNb2RlID0gX2IgPT09IHZvaWQgMCA/ICdtYXJnaW4nIDogX2I7XG4gICAgdXNlTG9ja0F0dHJpYnV0ZSgpO1xuICAgIC8qXG4gICAgIGdhcCB3aWxsIGJlIG1lYXN1cmVkIG9uIGV2ZXJ5IGNvbXBvbmVudCBtb3VudFxuICAgICBob3dldmVyIGl0IHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHRoZSBcImZpcnN0XCIgaW52b2NhdGlvblxuICAgICBkdWUgdG8gc2luZ2xldG9uIG5hdHVyZSBvZiA8U3R5bGVcbiAgICAgKi9cbiAgICB2YXIgZ2FwID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRHYXBXaWR0aChnYXBNb2RlKTsgfSwgW2dhcE1vZGVdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyAnIWltcG9ydGFudCcgOiAnJykgfSk7XG59O1xuIiwiaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgemVyb1JpZ2h0Q2xhc3NOYW1lLCBmdWxsV2lkdGhDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBSZW1vdmVTY3JvbGxCYXIsIHplcm9SaWdodENsYXNzTmFtZSwgZnVsbFdpZHRoQ2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIGdldEdhcFdpZHRoLCB9O1xuIiwidmFyIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgdmFyIG5vblBhc3NpdmUgPSBwYXNzaXZlU3VwcG9ydGVkID8geyBwYXNzaXZlOiBmYWxzZSB9IDogZmFsc2U7XG4iLCJ2YXIgYWx3YXlzQ29udGFpbnNTY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHRleHRhcmVhIHdpbGwgYWx3YXlzIF9jb250YWluXyBzY3JvbGwgaW5zaWRlIHNlbGYuIEl0IG9ubHkgY2FuIGJlIGhpZGRlblxuICAgIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG59O1xudmFyIGVsZW1lbnRDYW5CZVNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUsIG92ZXJmbG93KSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIHJldHVybiAoXG4gICAgLy8gbm90LW5vdC1zY3JvbGxhYmxlXG4gICAgc3R5bGVzW292ZXJmbG93XSAhPT0gJ2hpZGRlbicgJiZcbiAgICAgICAgLy8gY29udGFpbnMgc2Nyb2xsIGluc2lkZSBzZWxmXG4gICAgICAgICEoc3R5bGVzLm92ZXJmbG93WSA9PT0gc3R5bGVzLm92ZXJmbG93WCAmJiAhYWx3YXlzQ29udGFpbnNTY3JvbGwobm9kZSkgJiYgc3R5bGVzW292ZXJmbG93XSA9PT0gJ3Zpc2libGUnKSk7XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1knKTsgfTtcbnZhciBlbGVtZW50Q291bGRCZUhTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dYJyk7IH07XG5leHBvcnQgdmFyIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgZG8ge1xuICAgICAgICAvLyBTa2lwIG92ZXIgc2hhZG93IHJvb3RcbiAgICAgICAgaWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzY3JvbGxIZWlnaHQgPSBfYVsxXSwgY2xpZW50SGVpZ2h0ID0gX2FbMl07XG4gICAgICAgICAgICBpZiAoc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciBnZXRWU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IF9hLnNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0ID0gX2Euc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgPSBfYS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICBdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICBdO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQobm9kZSkgOiBlbGVtZW50Q291bGRCZUhTY3JvbGxlZChub2RlKTtcbn07XG52YXIgZ2V0U2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZ2V0VlNjcm9sbFZhcmlhYmxlcyhub2RlKSA6IGdldEhTY3JvbGxWYXJpYWJsZXMobm9kZSk7XG59O1xudmFyIGdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uIChheGlzLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGRpcmVjdGlvbiBpcyBydGwgKHJpZ2h0LXRvLWxlZnQpLCB0aGVuIHNjcm9sbExlZnQgaXMgMCB3aGVuIHRoZSBzY3JvbGxiYXIgaXMgYXQgaXRzIHJpZ2h0bW9zdCBwb3NpdGlvbixcbiAgICAgKiBhbmQgdGhlbiBpbmNyZWFzaW5nbHkgbmVnYXRpdmUgYXMgeW91IHNjcm9sbCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gICAgICovXG4gICAgcmV0dXJuIGF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxO1xufTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIHRhcmdldCksIHBvc2l0aW9uID0gX2FbMF0sIHNjcm9sbF8xID0gX2FbMV0sIGNhcGFjaXR5ID0gX2FbMl07XG4gICAgICAgIHZhciBlbGVtZW50U2Nyb2xsID0gc2Nyb2xsXzEgLSBjYXBhY2l0eSAtIGRpcmVjdGlvbkZhY3RvciAqIHBvc2l0aW9uO1xuICAgICAgICBpZiAocG9zaXRpb24gfHwgZWxlbWVudFNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQoYXhpcywgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbCArPSBlbGVtZW50U2Nyb2xsO1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbFRvcCArPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50XzEgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gd2Ugd2lsbCBcImJ1YmJsZVwiIGZyb20gU2hhZG93RG9tIGluIGNhc2Ugd2UgYXJlLCBvciBqdXN0IHRvIHRoZSBwYXJlbnQgaW4gbm9ybWFsIGNhc2VcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBsb2dpYyB1c2VkIGluIGZvY3VzLWxvY2tcbiAgICAgICAgdGFyZ2V0ID0gKHBhcmVudF8xICYmIHBhcmVudF8xLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPyBwYXJlbnRfMS5ob3N0IDogcGFyZW50XzEpO1xuICAgIH0gd2hpbGUgKFxuICAgIC8vIHBvcnRhbGVkIGNvbnRlbnRcbiAgICAoIXRhcmdldEluTG9jayAmJiB0YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHx8XG4gICAgICAgIC8vIHNlbGYgY29udGVudFxuICAgICAgICAodGFyZ2V0SW5Mb2NrICYmIChlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KSB8fCBlbmRUYXJnZXQgPT09IHRhcmdldCkpKTtcbiAgICAvLyBoYW5kbGUgZXBzaWxvbiBhcm91bmQgMCAobm9uIHN0YW5kYXJkIHpvb20gbGV2ZWxzKVxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGxUb3ApIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgLWRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsVG9wKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZENhbmNlbFNjcm9sbDtcbn07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxCYXIgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhcic7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBub25QYXNzaXZlIH0gZnJvbSAnLi9hZ2dyZXNpdmVDYXB0dXJlJztcbmltcG9ydCB7IGhhbmRsZVNjcm9sbCwgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgfSBmcm9tICcuL2hhbmRsZVNjcm9sbCc7XG5leHBvcnQgdmFyIGdldFRvdWNoWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NoYW5nZWRUb3VjaGVzJyBpbiBldmVudCA/IFtldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLCBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZXSA6IFswLCAwXTtcbn07XG5leHBvcnQgdmFyIGdldERlbHRhWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIFtldmVudC5kZWx0YVgsIGV2ZW50LmRlbHRhWV07IH07XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG52YXIgZGVsdGFDb21wYXJlID0gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHhbMF0gPT09IHlbMF0gJiYgeFsxXSA9PT0geVsxXTsgfTtcbnZhciBnZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGlkKSB7IHJldHVybiBcIlxcbiAgLmJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IG5vbmU7fVxcbiAgLmFsbG93LWludGVyYWN0aXZpdHktXCIpLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBhbGw7fVxcblwiKTsgfTtcbnZhciBpZENvdW50ZXIgPSAwO1xudmFyIGxvY2tTdGFjayA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIFJlbW92ZVNjcm9sbFNpZGVDYXIocHJvcHMpIHtcbiAgICB2YXIgc2hvdWxkUHJldmVudFF1ZXVlID0gUmVhY3QudXNlUmVmKFtdKTtcbiAgICB2YXIgdG91Y2hTdGFydFJlZiA9IFJlYWN0LnVzZVJlZihbMCwgMF0pO1xuICAgIHZhciBhY3RpdmVBeGlzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgdmFyIGlkID0gUmVhY3QudXNlU3RhdGUoaWRDb3VudGVyKyspWzBdO1xuICAgIHZhciBTdHlsZSA9IFJlYWN0LnVzZVN0YXRlKHN0eWxlU2luZ2xldG9uKVswXTtcbiAgICB2YXIgbGFzdFByb3BzID0gUmVhY3QudXNlUmVmKHByb3BzKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0UHJvcHMuY3VycmVudCA9IHByb3BzO1xuICAgIH0sIFtwcm9wc10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9wcy5pbmVydCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgIHZhciBhbGxvd18xID0gX19zcHJlYWRBcnJheShbcHJvcHMubG9ja1JlZi5jdXJyZW50XSwgKHByb3BzLnNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpLCB0cnVlKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSwgW3Byb3BzLmluZXJ0LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQsIHByb3BzLnNoYXJkc10pO1xuICAgIHZhciBzaG91bGRDYW5jZWxFdmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCwgcGFyZW50KSB7XG4gICAgICAgIGlmICgoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB8fCAoZXZlbnQudHlwZSA9PT0gJ3doZWVsJyAmJiBldmVudC5jdHJsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIC8vIGFsbG93IGhvcml6b250YWwgdG91Y2ggbW92ZSBvbiBSYW5nZSBpbnB1dHMuIFRoZXkgd2lsbCBub3QgY2F1c2UgYW55IHNjcm9sbFxuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIG1vdmVEaXJlY3Rpb24gPT09ICdoJyAmJiB0YXJnZXQudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ICYmIChkZWx0YVggfHwgZGVsdGFZKSkge1xuICAgICAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gY3VycmVudEF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50QXhpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbmNlbGluZ0F4aXMgPSBhY3RpdmVBeGlzLmN1cnJlbnQgfHwgY3VycmVudEF4aXM7XG4gICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGwoY2FuY2VsaW5nQXhpcywgcGFyZW50LCBldmVudCwgY2FuY2VsaW5nQXhpcyA9PT0gJ2gnID8gZGVsdGFYIDogZGVsdGFZLCB0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX2V2ZW50KSB7XG4gICAgICAgIHZhciBldmVudCA9IF9ldmVudDtcbiAgICAgICAgaWYgKCFsb2NrU3RhY2subGVuZ3RoIHx8IGxvY2tTdGFja1tsb2NrU3RhY2subGVuZ3RoIC0gMV0gIT09IFN0eWxlKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIGxhc3QgYWN0aXZlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbHRhID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBnZXREZWx0YVhZKGV2ZW50KSA6IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgc291cmNlRXZlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJiAoZS50YXJnZXQgPT09IGV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQgPT09IGUuc2hhZG93UGFyZW50KSAmJiBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpOyB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3V0c2lkZSBvciBzaGFyZCBldmVudFxuICAgICAgICBpZiAoIXNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc2hhcmROb2RlcyA9IChsYXN0UHJvcHMuY3VycmVudC5zaGFyZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7IH0pO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBzaGFyZE5vZGVzLmxlbmd0aCA+IDAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSkgOiAhbGFzdFByb3BzLmN1cnJlbnQubm9Jc29sYXRpb247XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRDYW5jZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmFtZSwgZGVsdGEsIHRhcmdldCwgc2hvdWxkKSB7XG4gICAgICAgIHZhciBldmVudCA9IHsgbmFtZTogbmFtZSwgZGVsdGE6IGRlbHRhLCB0YXJnZXQ6IHRhcmdldCwgc2hvdWxkOiBzaG91bGQsIHNoYWRvd1BhcmVudDogZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KHRhcmdldCkgfTtcbiAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQucHVzaChldmVudCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgIT09IGV2ZW50OyB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaFN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRvdWNoU3RhcnRSZWYuY3VycmVudCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxXaGVlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0RGVsdGFYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXRUb3VjaFhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2tTdGFjay5wdXNoKFN0eWxlKTtcbiAgICAgICAgcHJvcHMuc2V0Q2FsbGJhY2tzKHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvbldoZWVsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IHNjcm9sbFRvdWNoTW92ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IG5vUmVsYXRpdmU6IHByb3BzLm5vUmVsYXRpdmUsIGdhcE1vZGU6IHByb3BzLmdhcE1vZGUgfSkgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQobm9kZSkge1xuICAgIHZhciBzaGFkb3dQYXJlbnQgPSBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgc2hhZG93UGFyZW50ID0gbm9kZS5ob3N0O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93UGFyZW50O1xufVxuIiwiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbFNpZGVDYXIgfSBmcm9tICcuL1NpZGVFZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIFJlbW92ZVNjcm9sbFNpZGVDYXIpO1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJy4vVUknO1xuaW1wb3J0IFNpZGVDYXIgZnJvbSAnLi9zaWRlY2FyJztcbnZhciBSZWFjdFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHsgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlbW92ZVNjcm9sbCwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogcmVmLCBzaWRlQ2FyOiBTaWRlQ2FyIH0pKSk7IH0pO1xuUmVhY3RSZW1vdmVTY3JvbGwuY2xhc3NOYW1lcyA9IFJlbW92ZVNjcm9sbC5jbGFzc05hbWVzO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZW1vdmVTY3JvbGw7XG4iLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3NlbGVjdC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwiQHJhZGl4LXVpL251bWJlclwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29sbGVjdGlvbiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29sbGVjdGlvblwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRGlyZWN0aW9uIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1kaXJlY3Rpb25cIjtcbmltcG9ydCB7IERpc21pc3NhYmxlTGF5ZXIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWRpc21pc3NhYmxlLWxheWVyXCI7XG5pbXBvcnQgeyB1c2VGb2N1c0d1YXJkcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZm9jdXMtZ3VhcmRzXCI7XG5pbXBvcnQgeyBGb2N1c1Njb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1mb2N1cy1zY29wZVwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWlkXCI7XG5pbXBvcnQgKiBhcyBQb3BwZXJQcmltaXRpdmUgZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3BwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlclNjb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3BwZXJcIjtcbmltcG9ydCB7IFBvcnRhbCBhcyBQb3J0YWxQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXBvcnRhbFwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrUmVmIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtY2FsbGJhY2stcmVmXCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGFibGVTdGF0ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNvbnRyb2xsYWJsZS1zdGF0ZVwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xuaW1wb3J0IHsgdXNlUHJldmlvdXMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1wcmV2aW91c1wiO1xuaW1wb3J0IHsgVklTVUFMTFlfSElEREVOX1NUWUxFUyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuXCI7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSBcImFyaWEtaGlkZGVuXCI7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tIFwicmVhY3QtcmVtb3ZlLXNjcm9sbFwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIE9QRU5fS0VZUyA9IFtcIiBcIiwgXCJFbnRlclwiLCBcIkFycm93VXBcIiwgXCJBcnJvd0Rvd25cIl07XG52YXIgU0VMRUNUSU9OX0tFWVMgPSBbXCIgXCIsIFwiRW50ZXJcIl07XG52YXIgU0VMRUNUX05BTUUgPSBcIlNlbGVjdFwiO1xudmFyIFtDb2xsZWN0aW9uLCB1c2VDb2xsZWN0aW9uLCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29sbGVjdGlvbihTRUxFQ1RfTkFNRSk7XG52YXIgW2NyZWF0ZVNlbGVjdENvbnRleHQsIGNyZWF0ZVNlbGVjdFNjb3BlXSA9IGNyZWF0ZUNvbnRleHRTY29wZShTRUxFQ1RfTkFNRSwgW1xuICBjcmVhdGVDb2xsZWN0aW9uU2NvcGUsXG4gIGNyZWF0ZVBvcHBlclNjb3BlXG5dKTtcbnZhciB1c2VQb3BwZXJTY29wZSA9IGNyZWF0ZVBvcHBlclNjb3BlKCk7XG52YXIgW1NlbGVjdFByb3ZpZGVyLCB1c2VTZWxlY3RDb250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoU0VMRUNUX05BTUUpO1xudmFyIFtTZWxlY3ROYXRpdmVPcHRpb25zUHJvdmlkZXIsIHVzZVNlbGVjdE5hdGl2ZU9wdGlvbnNDb250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoU0VMRUNUX05BTUUpO1xudmFyIFNlbGVjdCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgX19zY29wZVNlbGVjdCxcbiAgICBjaGlsZHJlbixcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0T3BlbixcbiAgICBvbk9wZW5DaGFuZ2UsXG4gICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25WYWx1ZUNoYW5nZSxcbiAgICBkaXIsXG4gICAgbmFtZSxcbiAgICBhdXRvQ29tcGxldGUsXG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWQsXG4gICAgZm9ybVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IFt0cmlnZ2VyLCBzZXRUcmlnZ2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdmFsdWVOb2RlLCBzZXRWYWx1ZU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZU5vZGVIYXNDaGlsZHJlbiwgc2V0VmFsdWVOb2RlSGFzQ2hpbGRyZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBkaXJlY3Rpb24gPSB1c2VEaXJlY3Rpb24oZGlyKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICAgIHByb3A6IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHRQcm9wOiBkZWZhdWx0T3BlbiA/PyBmYWxzZSxcbiAgICBvbkNoYW5nZTogb25PcGVuQ2hhbmdlLFxuICAgIGNhbGxlcjogU0VMRUNUX05BTUVcbiAgfSk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICAgIHByb3A6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0UHJvcDogZGVmYXVsdFZhbHVlLFxuICAgIG9uQ2hhbmdlOiBvblZhbHVlQ2hhbmdlLFxuICAgIGNhbGxlcjogU0VMRUNUX05BTUVcbiAgfSk7XG4gIGNvbnN0IHRyaWdnZXJQb2ludGVyRG93blBvc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaXNGb3JtQ29udHJvbCA9IHRyaWdnZXIgPyBmb3JtIHx8ICEhdHJpZ2dlci5jbG9zZXN0KFwiZm9ybVwiKSA6IHRydWU7XG4gIGNvbnN0IFtuYXRpdmVPcHRpb25zU2V0LCBzZXROYXRpdmVPcHRpb25zU2V0XSA9IFJlYWN0LnVzZVN0YXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xuICBjb25zdCBuYXRpdmVTZWxlY3RLZXkgPSBBcnJheS5mcm9tKG5hdGl2ZU9wdGlvbnNTZXQpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ucHJvcHMudmFsdWUpLmpvaW4oXCI7XCIpO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQb3BwZXJQcmltaXRpdmUuUm9vdCwgeyAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3hzKFxuICAgIFNlbGVjdFByb3ZpZGVyLFxuICAgIHtcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyQ2hhbmdlOiBzZXRUcmlnZ2VyLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgb25WYWx1ZU5vZGVDaGFuZ2U6IHNldFZhbHVlTm9kZSxcbiAgICAgIHZhbHVlTm9kZUhhc0NoaWxkcmVuLFxuICAgICAgb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTogc2V0VmFsdWVOb2RlSGFzQ2hpbGRyZW4sXG4gICAgICBjb250ZW50SWQ6IHVzZUlkKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uVmFsdWVDaGFuZ2U6IHNldFZhbHVlLFxuICAgICAgb3BlbixcbiAgICAgIG9uT3BlbkNoYW5nZTogc2V0T3BlbixcbiAgICAgIGRpcjogZGlyZWN0aW9uLFxuICAgICAgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8ganN4KENvbGxlY3Rpb24uUHJvdmlkZXIsIHsgc2NvcGU6IF9fc2NvcGVTZWxlY3QsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgIFNlbGVjdE5hdGl2ZU9wdGlvbnNQcm92aWRlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZTogcHJvcHMuX19zY29wZVNlbGVjdCxcbiAgICAgICAgICAgIG9uTmF0aXZlT3B0aW9uQWRkOiBSZWFjdC51c2VDYWxsYmFjaygob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHNldE5hdGl2ZU9wdGlvbnNTZXQoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG9wdGlvbikpO1xuICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgb25OYXRpdmVPcHRpb25SZW1vdmU6IFJlYWN0LnVzZUNhbGxiYWNrKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgc2V0TmF0aXZlT3B0aW9uc1NldCgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNTZXQgPSBuZXcgU2V0KHByZXYpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnNTZXQuZGVsZXRlKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNTZXQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgICkgfSksXG4gICAgICAgIGlzRm9ybUNvbnRyb2wgPyAvKiBAX19QVVJFX18gKi8ganN4cyhcbiAgICAgICAgICBTZWxlY3RCdWJibGVJbnB1dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoZXZlbnQpID0+IHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSksXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdm9pZCAwID8gLyogQF9fUFVSRV9fICovIGpzeChcIm9wdGlvblwiLCB7IHZhbHVlOiBcIlwiIH0pIDogbnVsbCxcbiAgICAgICAgICAgICAgQXJyYXkuZnJvbShuYXRpdmVPcHRpb25zU2V0KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmF0aXZlU2VsZWN0S2V5XG4gICAgICAgICkgOiBudWxsXG4gICAgICBdXG4gICAgfVxuICApIH0pO1xufTtcblNlbGVjdC5kaXNwbGF5TmFtZSA9IFNFTEVDVF9OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiU2VsZWN0VHJpZ2dlclwiO1xudmFyIFNlbGVjdFRyaWdnZXIgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgZGlzYWJsZWQgPSBmYWxzZSwgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBwb3BwZXJTY29wZSA9IHVzZVBvcHBlclNjb3BlKF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KFRSSUdHRVJfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IGNvbnRleHQuZGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgY29udGV4dC5vblRyaWdnZXJDaGFuZ2UpO1xuICAgIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBwb2ludGVyVHlwZVJlZiA9IFJlYWN0LnVzZVJlZihcInRvdWNoXCIpO1xuICAgIGNvbnN0IFtzZWFyY2hSZWYsIGhhbmRsZVR5cGVhaGVhZFNlYXJjaCwgcmVzZXRUeXBlYWhlYWRdID0gdXNlVHlwZWFoZWFkU2VhcmNoKChzZWFyY2gpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGdldEl0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGVuYWJsZWRJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBjb250ZXh0LnZhbHVlKTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gZmluZE5leHRJdGVtKGVuYWJsZWRJdGVtcywgc2VhcmNoLCBjdXJyZW50SXRlbSk7XG4gICAgICBpZiAobmV4dEl0ZW0gIT09IHZvaWQgMCkge1xuICAgICAgICBjb250ZXh0Lm9uVmFsdWVDaGFuZ2UobmV4dEl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZU9wZW4gPSAocG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgY29udGV4dC5vbk9wZW5DaGFuZ2UodHJ1ZSk7XG4gICAgICAgIHJlc2V0VHlwZWFoZWFkKCk7XG4gICAgICB9XG4gICAgICBpZiAocG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnRleHQudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChwb2ludGVyRXZlbnQucGFnZVgpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocG9pbnRlckV2ZW50LnBhZ2VZKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9wcGVyUHJpbWl0aXZlLkFuY2hvciwgeyBhc0NoaWxkOiB0cnVlLCAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuYnV0dG9uLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBjb250ZXh0LmNvbnRlbnRJZCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGNvbnRleHQub3BlbixcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IGNvbnRleHQucmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJub25lXCIsXG4gICAgICAgIGRpcjogY29udGV4dC5kaXIsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBjb250ZXh0Lm9wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgIFwiZGF0YS1wbGFjZWhvbGRlclwiOiBzaG91bGRTaG93UGxhY2Vob2xkZXIoY29udGV4dC52YWx1ZSkgPyBcIlwiIDogdm9pZCAwLFxuICAgICAgICAuLi50cmlnZ2VyUHJvcHMsXG4gICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyh0cmlnZ2VyUHJvcHMub25DbGljaywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5mb2N1cygpO1xuICAgICAgICAgIGlmIChwb2ludGVyVHlwZVJlZi5jdXJyZW50ICE9PSBcIm1vdXNlXCIpIHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG9uUG9pbnRlckRvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHRyaWdnZXJQcm9wcy5vblBvaW50ZXJEb3duLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBwb2ludGVyVHlwZVJlZi5jdXJyZW50ID0gZXZlbnQucG9pbnRlclR5cGU7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgIGlmICh0YXJnZXQuaGFzUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LmN0cmxLZXkgPT09IGZhbHNlICYmIGV2ZW50LnBvaW50ZXJUeXBlID09PSBcIm1vdXNlXCIpIHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBvbktleURvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHRyaWdnZXJQcm9wcy5vbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzVHlwaW5nQWhlYWQgPSBzZWFyY2hSZWYuY3VycmVudCAhPT0gXCJcIjtcbiAgICAgICAgICBjb25zdCBpc01vZGlmaWVyS2V5ID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQubWV0YUtleTtcbiAgICAgICAgICBpZiAoIWlzTW9kaWZpZXJLZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkgaGFuZGxlVHlwZWFoZWFkU2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgaWYgKGlzVHlwaW5nQWhlYWQgJiYgZXZlbnQua2V5ID09PSBcIiBcIikgcmV0dXJuO1xuICAgICAgICAgIGlmIChPUEVOX0tFWVMuaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgaGFuZGxlT3BlbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgKSB9KTtcbiAgfVxuKTtcblNlbGVjdFRyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgVkFMVUVfTkFNRSA9IFwiU2VsZWN0VmFsdWVcIjtcbnZhciBTZWxlY3RWYWx1ZSA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCBjbGFzc05hbWUsIHN0eWxlLCBjaGlsZHJlbiwgcGxhY2Vob2xkZXIgPSBcIlwiLCAuLi52YWx1ZVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChWQUxVRV9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCB7IG9uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2UgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBjaGlsZHJlbiAhPT0gdm9pZCAwO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRleHQub25WYWx1ZU5vZGVDaGFuZ2UpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBvblZhbHVlTm9kZUhhc0NoaWxkcmVuQ2hhbmdlKGhhc0NoaWxkcmVuKTtcbiAgICB9LCBbb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZSwgaGFzQ2hpbGRyZW5dKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5zcGFuLFxuICAgICAge1xuICAgICAgICAuLi52YWx1ZVByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgc3R5bGU6IHsgcG9pbnRlckV2ZW50czogXCJub25lXCIgfSxcbiAgICAgICAgY2hpbGRyZW46IHNob3VsZFNob3dQbGFjZWhvbGRlcihjb250ZXh0LnZhbHVlKSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IHBsYWNlaG9sZGVyIH0pIDogY2hpbGRyZW5cbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuU2VsZWN0VmFsdWUuZGlzcGxheU5hbWUgPSBWQUxVRV9OQU1FO1xudmFyIElDT05fTkFNRSA9IFwiU2VsZWN0SWNvblwiO1xudmFyIFNlbGVjdEljb24gPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgY2hpbGRyZW4sIC4uLmljb25Qcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLnNwYW4sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCAuLi5pY29uUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBjaGlsZHJlbjogY2hpbGRyZW4gfHwgXCJcXHUyNUJDXCIgfSk7XG4gIH1cbik7XG5TZWxlY3RJY29uLmRpc3BsYXlOYW1lID0gSUNPTl9OQU1FO1xudmFyIFBPUlRBTF9OQU1FID0gXCJTZWxlY3RQb3J0YWxcIjtcbnZhciBTZWxlY3RQb3J0YWwgPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJpbWl0aXZlLCB7IGFzQ2hpbGQ6IHRydWUsIC4uLnByb3BzIH0pO1xufTtcblNlbGVjdFBvcnRhbC5kaXNwbGF5TmFtZSA9IFBPUlRBTF9OQU1FO1xudmFyIENPTlRFTlRfTkFNRSA9IFwiU2VsZWN0Q29udGVudFwiO1xudmFyIFNlbGVjdENvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgW2ZyYWdtZW50LCBzZXRGcmFnbWVudF0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRGcmFnbWVudChuZXcgRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICB9LCBbXSk7XG4gICAgaWYgKCFjb250ZXh0Lm9wZW4pIHtcbiAgICAgIGNvbnN0IGZyYWcgPSBmcmFnbWVudDtcbiAgICAgIHJldHVybiBmcmFnID8gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdENvbnRlbnRQcm92aWRlciwgeyBzY29wZTogcHJvcHMuX19zY29wZVNlbGVjdCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvbi5TbG90LCB7IHNjb3BlOiBwcm9wcy5fX3Njb3BlU2VsZWN0LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSB9KSB9KSxcbiAgICAgICAgZnJhZ1xuICAgICAgKSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdENvbnRlbnRJbXBsLCB7IC4uLnByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcblNlbGVjdENvbnRlbnQuZGlzcGxheU5hbWUgPSBDT05URU5UX05BTUU7XG52YXIgQ09OVEVOVF9NQVJHSU4gPSAxMDtcbnZhciBbU2VsZWN0Q29udGVudFByb3ZpZGVyLCB1c2VTZWxlY3RDb250ZW50Q29udGV4dF0gPSBjcmVhdGVTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSk7XG52YXIgQ09OVEVOVF9JTVBMX05BTUUgPSBcIlNlbGVjdENvbnRlbnRJbXBsXCI7XG52YXIgU2xvdCA9IGNyZWF0ZVNsb3QoXCJTZWxlY3RDb250ZW50LlJlbW92ZVNjcm9sbFwiKTtcbnZhciBTZWxlY3RDb250ZW50SW1wbCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZVNlbGVjdCxcbiAgICAgIHBvc2l0aW9uID0gXCJpdGVtLWFsaWduZWRcIixcbiAgICAgIG9uQ2xvc2VBdXRvRm9jdXMsXG4gICAgICBvbkVzY2FwZUtleURvd24sXG4gICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgIC8vXG4gICAgICAvLyBQb3BwZXJDb250ZW50IHByb3BzXG4gICAgICBzaWRlLFxuICAgICAgc2lkZU9mZnNldCxcbiAgICAgIGFsaWduLFxuICAgICAgYWxpZ25PZmZzZXQsXG4gICAgICBhcnJvd1BhZGRpbmcsXG4gICAgICBjb2xsaXNpb25Cb3VuZGFyeSxcbiAgICAgIGNvbGxpc2lvblBhZGRpbmcsXG4gICAgICBzdGlja3ksXG4gICAgICBoaWRlV2hlbkRldGFjaGVkLFxuICAgICAgYXZvaWRDb2xsaXNpb25zLFxuICAgICAgLy9cbiAgICAgIC4uLmNvbnRlbnRQcm9wc1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChDT05URU5UX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IFtjb250ZW50LCBzZXRDb250ZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgKG5vZGUpID0+IHNldENvbnRlbnQobm9kZSkpO1xuICAgIGNvbnN0IFtzZWxlY3RlZEl0ZW0sIHNldFNlbGVjdGVkSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRJdGVtVGV4dCwgc2V0U2VsZWN0ZWRJdGVtVGV4dF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAgIG51bGxcbiAgICApO1xuICAgIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGZpcnN0VmFsaWRJdGVtRm91bmRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY29udGVudCkgcmV0dXJuIGhpZGVPdGhlcnMoY29udGVudCk7XG4gICAgfSwgW2NvbnRlbnRdKTtcbiAgICB1c2VGb2N1c0d1YXJkcygpO1xuICAgIGNvbnN0IGZvY3VzRmlyc3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgIChjYW5kaWRhdGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IFtmaXJzdEl0ZW0sIC4uLnJlc3RJdGVtc10gPSBnZXRJdGVtcygpLm1hcCgoaXRlbSkgPT4gaXRlbS5yZWYuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IFtsYXN0SXRlbV0gPSByZXN0SXRlbXMuc2xpY2UoLTEpO1xuICAgICAgICBjb25zdCBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlID09PSBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCkgcmV0dXJuO1xuICAgICAgICAgIGNhbmRpZGF0ZT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJuZWFyZXN0XCIgfSk7XG4gICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gZmlyc3RJdGVtICYmIHZpZXdwb3J0KSB2aWV3cG9ydC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgIGlmIChjYW5kaWRhdGUgPT09IGxhc3RJdGVtICYmIHZpZXdwb3J0KSB2aWV3cG9ydC5zY3JvbGxUb3AgPSB2aWV3cG9ydC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgY2FuZGlkYXRlPy5mb2N1cygpO1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2dldEl0ZW1zLCB2aWV3cG9ydF1cbiAgICApO1xuICAgIGNvbnN0IGZvY3VzU2VsZWN0ZWRJdGVtID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBmb2N1c0ZpcnN0KFtzZWxlY3RlZEl0ZW0sIGNvbnRlbnRdKSxcbiAgICAgIFtmb2N1c0ZpcnN0LCBzZWxlY3RlZEl0ZW0sIGNvbnRlbnRdXG4gICAgKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzUG9zaXRpb25lZCkge1xuICAgICAgICBmb2N1c1NlbGVjdGVkSXRlbSgpO1xuICAgICAgfVxuICAgIH0sIFtpc1Bvc2l0aW9uZWQsIGZvY3VzU2VsZWN0ZWRJdGVtXSk7XG4gICAgY29uc3QgeyBvbk9wZW5DaGFuZ2UsIHRyaWdnZXJQb2ludGVyRG93blBvc1JlZiB9ID0gY29udGV4dDtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IHBvaW50ZXJNb3ZlRGVsdGEgPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICBwb2ludGVyTW92ZURlbHRhID0ge1xuICAgICAgICAgICAgeDogTWF0aC5hYnMoTWF0aC5yb3VuZChldmVudC5wYWdlWCkgLSAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ/LnggPz8gMCkpLFxuICAgICAgICAgICAgeTogTWF0aC5hYnMoTWF0aC5yb3VuZChldmVudC5wYWdlWSkgLSAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ/LnkgPz8gMCkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHBvaW50ZXJNb3ZlRGVsdGEueCA8PSAxMCAmJiBwb2ludGVyTW92ZURlbHRhLnkgPD0gMTApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgIG9uT3BlbkNoYW5nZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBoYW5kbGVQb2ludGVyTW92ZSk7XG4gICAgICAgICAgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgaGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgaGFuZGxlUG9pbnRlclVwLCB7IGNhcHR1cmU6IHRydWUsIG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgaGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgaGFuZGxlUG9pbnRlclVwLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwgW2NvbnRlbnQsIG9uT3BlbkNoYW5nZSwgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4gb25PcGVuQ2hhbmdlKGZhbHNlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBjbG9zZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjbG9zZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgY2xvc2UpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjbG9zZSk7XG4gICAgICB9O1xuICAgIH0sIFtvbk9wZW5DaGFuZ2VdKTtcbiAgICBjb25zdCBbc2VhcmNoUmVmLCBoYW5kbGVUeXBlYWhlYWRTZWFyY2hdID0gdXNlVHlwZWFoZWFkU2VhcmNoKChzZWFyY2gpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGdldEl0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGVuYWJsZWRJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnJlZi5jdXJyZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gZmluZE5leHRJdGVtKGVuYWJsZWRJdGVtcywgc2VhcmNoLCBjdXJyZW50SXRlbSk7XG4gICAgICBpZiAobmV4dEl0ZW0pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBuZXh0SXRlbS5yZWYuY3VycmVudC5mb2N1cygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpdGVtUmVmQ2FsbGJhY2sgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgIChub2RlLCB2YWx1ZSwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgY29uc3QgaXNGaXJzdFZhbGlkSXRlbSA9ICFmaXJzdFZhbGlkSXRlbUZvdW5kUmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkSXRlbSA9IGNvbnRleHQudmFsdWUgIT09IHZvaWQgMCAmJiBjb250ZXh0LnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRJdGVtIHx8IGlzRmlyc3RWYWxpZEl0ZW0pIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZEl0ZW0obm9kZSk7XG4gICAgICAgICAgaWYgKGlzRmlyc3RWYWxpZEl0ZW0pIGZpcnN0VmFsaWRJdGVtRm91bmRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbY29udGV4dC52YWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IGhhbmRsZUl0ZW1MZWF2ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGNvbnRlbnQ/LmZvY3VzKCksIFtjb250ZW50XSk7XG4gICAgY29uc3QgaXRlbVRleHRSZWZDYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICAgKG5vZGUsIHZhbHVlLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICBjb25zdCBpc0ZpcnN0VmFsaWRJdGVtID0gIWZpcnN0VmFsaWRJdGVtRm91bmRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQ7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRJdGVtID0gY29udGV4dC52YWx1ZSAhPT0gdm9pZCAwICYmIGNvbnRleHQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZEl0ZW0gfHwgaXNGaXJzdFZhbGlkSXRlbSkge1xuICAgICAgICAgIHNldFNlbGVjdGVkSXRlbVRleHQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbY29udGV4dC52YWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IFNlbGVjdFBvc2l0aW9uID0gcG9zaXRpb24gPT09IFwicG9wcGVyXCIgPyBTZWxlY3RQb3BwZXJQb3NpdGlvbiA6IFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb247XG4gICAgY29uc3QgcG9wcGVyQ29udGVudFByb3BzID0gU2VsZWN0UG9zaXRpb24gPT09IFNlbGVjdFBvcHBlclBvc2l0aW9uID8ge1xuICAgICAgc2lkZSxcbiAgICAgIHNpZGVPZmZzZXQsXG4gICAgICBhbGlnbixcbiAgICAgIGFsaWduT2Zmc2V0LFxuICAgICAgYXJyb3dQYWRkaW5nLFxuICAgICAgY29sbGlzaW9uQm91bmRhcnksXG4gICAgICBjb2xsaXNpb25QYWRkaW5nLFxuICAgICAgc3RpY2t5LFxuICAgICAgaGlkZVdoZW5EZXRhY2hlZCxcbiAgICAgIGF2b2lkQ29sbGlzaW9uc1xuICAgIH0gOiB7fTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFNlbGVjdENvbnRlbnRQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHZpZXdwb3J0LFxuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlOiBzZXRWaWV3cG9ydCxcbiAgICAgICAgaXRlbVJlZkNhbGxiYWNrLFxuICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgIG9uSXRlbUxlYXZlOiBoYW5kbGVJdGVtTGVhdmUsXG4gICAgICAgIGl0ZW1UZXh0UmVmQ2FsbGJhY2ssXG4gICAgICAgIGZvY3VzU2VsZWN0ZWRJdGVtLFxuICAgICAgICBzZWxlY3RlZEl0ZW1UZXh0LFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgaXNQb3NpdGlvbmVkLFxuICAgICAgICBzZWFyY2hSZWYsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFJlbW92ZVNjcm9sbCwgeyBhczogU2xvdCwgYWxsb3dQaW5jaFpvb206IHRydWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgIEZvY3VzU2NvcGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICAgIHRyYXBwZWQ6IGNvbnRleHQub3BlbixcbiAgICAgICAgICAgIG9uTW91bnRBdXRvRm9jdXM6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVW5tb3VudEF1dG9Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbG9zZUF1dG9Gb2N1cywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnRleHQudHJpZ2dlcj8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICAgICAgRGlzbWlzc2FibGVMYXllcixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5RG93bixcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgICAgICAgICAgICBvbkZvY3VzT3V0c2lkZTogKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICAgICAgICAgIG9uRGlzbWlzczogKCkgPT4gY29udGV4dC5vbk9wZW5DaGFuZ2UoZmFsc2UpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICAgICAgU2VsZWN0UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IFwibGlzdGJveFwiLFxuICAgICAgICAgICAgICAgICAgICBpZDogY29udGV4dC5jb250ZW50SWQsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBjb250ZXh0Lm9wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgIGRpcjogY29udGV4dC5kaXIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ29udGV4dE1lbnU6IChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAuLi5wb3BwZXJDb250ZW50UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG9uUGxhY2VkOiAoKSA9PiBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGZsZXggbGF5b3V0IHNvIHdlIGNhbiBwbGFjZSB0aGUgc2Nyb2xsIGJ1dHRvbnMgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBvdXRsaW5lIGJ5IGRlZmF1bHQgYXMgdGhlIGNvbnRlbnQgTUFZIGdldCBmb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLnN0eWxlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bjogY29tcG9zZUV2ZW50SGFuZGxlcnMoY29udGVudFByb3BzLm9uS2V5RG93biwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNb2RpZmllcktleSA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTW9kaWZpZXJLZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkgaGFuZGxlVHlwZWFoZWFkU2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFtcIkFycm93VXBcIiwgXCJBcnJvd0Rvd25cIiwgXCJIb21lXCIsIFwiRW5kXCJdLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmRpc2FibGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYW5kaWRhdGVOb2RlcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5yZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoW1wiQXJyb3dVcFwiLCBcIkVuZFwiXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZU5vZGVzID0gY2FuZGlkYXRlTm9kZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoW1wiQXJyb3dVcFwiLCBcIkFycm93RG93blwiXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjYW5kaWRhdGVOb2Rlcy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTm9kZXMgPSBjYW5kaWRhdGVOb2Rlcy5zbGljZShjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNGaXJzdChjYW5kaWRhdGVOb2RlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApIH0pXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcblNlbGVjdENvbnRlbnRJbXBsLmRpc3BsYXlOYW1lID0gQ09OVEVOVF9JTVBMX05BTUU7XG52YXIgSVRFTV9BTElHTkVEX1BPU0lUSU9OX05BTUUgPSBcIlNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25cIjtcbnZhciBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG9uUGxhY2VkLCAuLi5wb3BwZXJQcm9wcyB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IGNvbnRlbnRDb250ZXh0ID0gdXNlU2VsZWN0Q29udGVudENvbnRleHQoQ09OVEVOVF9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgW2NvbnRlbnRXcmFwcGVyLCBzZXRDb250ZW50V3JhcHBlcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2NvbnRlbnQsIHNldENvbnRlbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIChub2RlKSA9PiBzZXRDb250ZW50KG5vZGUpKTtcbiAgY29uc3QgZ2V0SXRlbXMgPSB1c2VDb2xsZWN0aW9uKF9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBzaG91bGRFeHBhbmRPblNjcm9sbFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNob3VsZFJlcG9zaXRpb25SZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gIGNvbnN0IHsgdmlld3BvcnQsIHNlbGVjdGVkSXRlbSwgc2VsZWN0ZWRJdGVtVGV4dCwgZm9jdXNTZWxlY3RlZEl0ZW0gfSA9IGNvbnRlbnRDb250ZXh0O1xuICBjb25zdCBwb3NpdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoY29udGV4dC50cmlnZ2VyICYmIGNvbnRleHQudmFsdWVOb2RlICYmIGNvbnRlbnRXcmFwcGVyICYmIGNvbnRlbnQgJiYgdmlld3BvcnQgJiYgc2VsZWN0ZWRJdGVtICYmIHNlbGVjdGVkSXRlbVRleHQpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZWN0ID0gY29udGV4dC50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGVudFJlY3QgPSBjb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdmFsdWVOb2RlUmVjdCA9IGNvbnRleHQudmFsdWVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXRlbVRleHRSZWN0ID0gc2VsZWN0ZWRJdGVtVGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChjb250ZXh0LmRpciAhPT0gXCJydGxcIikge1xuICAgICAgICBjb25zdCBpdGVtVGV4dE9mZnNldCA9IGl0ZW1UZXh0UmVjdC5sZWZ0IC0gY29udGVudFJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHZhbHVlTm9kZVJlY3QubGVmdCAtIGl0ZW1UZXh0T2Zmc2V0O1xuICAgICAgICBjb25zdCBsZWZ0RGVsdGEgPSB0cmlnZ2VyUmVjdC5sZWZ0IC0gbGVmdDtcbiAgICAgICAgY29uc3QgbWluQ29udGVudFdpZHRoID0gdHJpZ2dlclJlY3Qud2lkdGggKyBsZWZ0RGVsdGE7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KG1pbkNvbnRlbnRXaWR0aCwgY29udGVudFJlY3Qud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodEVkZ2UgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgICBjb25zdCBjbGFtcGVkTGVmdCA9IGNsYW1wKGxlZnQsIFtcbiAgICAgICAgICBDT05URU5UX01BUkdJTixcbiAgICAgICAgICAvLyBQcmV2ZW50cyB0aGUgY29udGVudCBmcm9tIGdvaW5nIG9mZiB0aGUgc3RhcnRpbmcgZWRnZSBvZiB0aGVcbiAgICAgICAgICAvLyB2aWV3cG9ydC4gSXQgbWF5IHN0aWxsIGdvIG9mZiB0aGUgZW5kaW5nIGVkZ2UsIGJ1dCB0aGlzIGNhbiBiZVxuICAgICAgICAgIC8vIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIgc2luY2UgdGhleSBtYXkgd2FudCB0byBtYW5hZ2Ugb3ZlcmZsb3cgaW4gYVxuICAgICAgICAgIC8vIHNwZWNpZmljIHdheS5cbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmFkaXgtdWkvcHJpbWl0aXZlcy9pc3N1ZXMvMjA0OVxuICAgICAgICAgIE1hdGgubWF4KENPTlRFTlRfTUFSR0lOLCByaWdodEVkZ2UgLSBjb250ZW50V2lkdGgpXG4gICAgICAgIF0pO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5taW5XaWR0aCA9IG1pbkNvbnRlbnRXaWR0aCArIFwicHhcIjtcbiAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubGVmdCA9IGNsYW1wZWRMZWZ0ICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlbVRleHRPZmZzZXQgPSBjb250ZW50UmVjdC5yaWdodCAtIGl0ZW1UZXh0UmVjdC5yaWdodDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHZhbHVlTm9kZVJlY3QucmlnaHQgLSBpdGVtVGV4dE9mZnNldDtcbiAgICAgICAgY29uc3QgcmlnaHREZWx0YSA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdHJpZ2dlclJlY3QucmlnaHQgLSByaWdodDtcbiAgICAgICAgY29uc3QgbWluQ29udGVudFdpZHRoID0gdHJpZ2dlclJlY3Qud2lkdGggKyByaWdodERlbHRhO1xuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heChtaW5Db250ZW50V2lkdGgsIGNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICAgICAgY29uc3QgbGVmdEVkZ2UgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgICBjb25zdCBjbGFtcGVkUmlnaHQgPSBjbGFtcChyaWdodCwgW1xuICAgICAgICAgIENPTlRFTlRfTUFSR0lOLFxuICAgICAgICAgIE1hdGgubWF4KENPTlRFTlRfTUFSR0lOLCBsZWZ0RWRnZSAtIGNvbnRlbnRXaWR0aClcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLm1pbldpZHRoID0gbWluQ29udGVudFdpZHRoICsgXCJweFwiO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5yaWdodCA9IGNsYW1wZWRSaWdodCArIFwicHhcIjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoKTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIENPTlRFTlRfTUFSR0lOICogMjtcbiAgICAgIGNvbnN0IGl0ZW1zSGVpZ2h0ID0gdmlld3BvcnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgY29uc3QgY29udGVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpO1xuICAgICAgY29uc3QgY29udGVudEJvcmRlclRvcFdpZHRoID0gcGFyc2VJbnQoY29udGVudFN0eWxlcy5ib3JkZXJUb3BXaWR0aCwgMTApO1xuICAgICAgY29uc3QgY29udGVudFBhZGRpbmdUb3AgPSBwYXJzZUludChjb250ZW50U3R5bGVzLnBhZGRpbmdUb3AsIDEwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aCA9IHBhcnNlSW50KGNvbnRlbnRTdHlsZXMuYm9yZGVyQm90dG9tV2lkdGgsIDEwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRQYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoY29udGVudFN0eWxlcy5wYWRkaW5nQm90dG9tLCAxMCk7XG4gICAgICBjb25zdCBmdWxsQ29udGVudEhlaWdodCA9IGNvbnRlbnRCb3JkZXJUb3BXaWR0aCArIGNvbnRlbnRQYWRkaW5nVG9wICsgaXRlbXNIZWlnaHQgKyBjb250ZW50UGFkZGluZ0JvdHRvbSArIGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aDtcbiAgICAgIGNvbnN0IG1pbkNvbnRlbnRIZWlnaHQgPSBNYXRoLm1pbihzZWxlY3RlZEl0ZW0ub2Zmc2V0SGVpZ2h0ICogNSwgZnVsbENvbnRlbnRIZWlnaHQpO1xuICAgICAgY29uc3Qgdmlld3BvcnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWV3cG9ydCk7XG4gICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmdUb3AgPSBwYXJzZUludCh2aWV3cG9ydFN0eWxlcy5wYWRkaW5nVG9wLCAxMCk7XG4gICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmdCb3R0b20gPSBwYXJzZUludCh2aWV3cG9ydFN0eWxlcy5wYWRkaW5nQm90dG9tLCAxMCk7XG4gICAgICBjb25zdCB0b3BFZGdlVG9UcmlnZ2VyTWlkZGxlID0gdHJpZ2dlclJlY3QudG9wICsgdHJpZ2dlclJlY3QuaGVpZ2h0IC8gMiAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgY29uc3QgdHJpZ2dlck1pZGRsZVRvQm90dG9tRWRnZSA9IGF2YWlsYWJsZUhlaWdodCAtIHRvcEVkZ2VUb1RyaWdnZXJNaWRkbGU7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1IYWxmSGVpZ2h0ID0gc2VsZWN0ZWRJdGVtLm9mZnNldEhlaWdodCAvIDI7XG4gICAgICBjb25zdCBpdGVtT2Zmc2V0TWlkZGxlID0gc2VsZWN0ZWRJdGVtLm9mZnNldFRvcCArIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHQ7XG4gICAgICBjb25zdCBjb250ZW50VG9wVG9JdGVtTWlkZGxlID0gY29udGVudEJvcmRlclRvcFdpZHRoICsgY29udGVudFBhZGRpbmdUb3AgKyBpdGVtT2Zmc2V0TWlkZGxlO1xuICAgICAgY29uc3QgaXRlbU1pZGRsZVRvQ29udGVudEJvdHRvbSA9IGZ1bGxDb250ZW50SGVpZ2h0IC0gY29udGVudFRvcFRvSXRlbU1pZGRsZTtcbiAgICAgIGNvbnN0IHdpbGxBbGlnbldpdGhvdXRUb3BPdmVyZmxvdyA9IGNvbnRlbnRUb3BUb0l0ZW1NaWRkbGUgPD0gdG9wRWRnZVRvVHJpZ2dlck1pZGRsZTtcbiAgICAgIGlmICh3aWxsQWxpZ25XaXRob3V0VG9wT3ZlcmZsb3cpIHtcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IGl0ZW1zLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJdGVtID09PSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5yZWYuY3VycmVudDtcbiAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUuYm90dG9tID0gXCIwcHhcIjtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRPZmZzZXRCb3R0b20gPSBjb250ZW50LmNsaWVudEhlaWdodCAtIHZpZXdwb3J0Lm9mZnNldFRvcCAtIHZpZXdwb3J0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgY2xhbXBlZFRyaWdnZXJNaWRkbGVUb0JvdHRvbUVkZ2UgPSBNYXRoLm1heChcbiAgICAgICAgICB0cmlnZ2VyTWlkZGxlVG9Cb3R0b21FZGdlLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHQgKyAvLyB2aWV3cG9ydCBtaWdodCBoYXZlIHBhZGRpbmcgYm90dG9tLCBpbmNsdWRlIGl0IHRvIGF2b2lkIGEgc2Nyb2xsYWJsZSB2aWV3cG9ydFxuICAgICAgICAgIChpc0xhc3RJdGVtID8gdmlld3BvcnRQYWRkaW5nQm90dG9tIDogMCkgKyB2aWV3cG9ydE9mZnNldEJvdHRvbSArIGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjb250ZW50VG9wVG9JdGVtTWlkZGxlICsgY2xhbXBlZFRyaWdnZXJNaWRkbGVUb0JvdHRvbUVkZ2U7XG4gICAgICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzRmlyc3RJdGVtID0gaXRlbXMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEl0ZW0gPT09IGl0ZW1zWzBdLnJlZi5jdXJyZW50O1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS50b3AgPSBcIjBweFwiO1xuICAgICAgICBjb25zdCBjbGFtcGVkVG9wRWRnZVRvVHJpZ2dlck1pZGRsZSA9IE1hdGgubWF4KFxuICAgICAgICAgIHRvcEVkZ2VUb1RyaWdnZXJNaWRkbGUsXG4gICAgICAgICAgY29udGVudEJvcmRlclRvcFdpZHRoICsgdmlld3BvcnQub2Zmc2V0VG9wICsgLy8gdmlld3BvcnQgbWlnaHQgaGF2ZSBwYWRkaW5nIHRvcCwgaW5jbHVkZSBpdCB0byBhdm9pZCBhIHNjcm9sbGFibGUgdmlld3BvcnRcbiAgICAgICAgICAoaXNGaXJzdEl0ZW0gPyB2aWV3cG9ydFBhZGRpbmdUb3AgOiAwKSArIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY2xhbXBlZFRvcEVkZ2VUb1RyaWdnZXJNaWRkbGUgKyBpdGVtTWlkZGxlVG9Db250ZW50Qm90dG9tO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIHZpZXdwb3J0LnNjcm9sbFRvcCA9IGNvbnRlbnRUb3BUb0l0ZW1NaWRkbGUgLSB0b3BFZGdlVG9UcmlnZ2VyTWlkZGxlICsgdmlld3BvcnQub2Zmc2V0VG9wO1xuICAgICAgfVxuICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubWFyZ2luID0gYCR7Q09OVEVOVF9NQVJHSU59cHggMGA7XG4gICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5taW5IZWlnaHQgPSBtaW5Db250ZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubWF4SGVpZ2h0ID0gYXZhaWxhYmxlSGVpZ2h0ICsgXCJweFwiO1xuICAgICAgb25QbGFjZWQ/LigpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmLmN1cnJlbnQgPSB0cnVlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBnZXRJdGVtcyxcbiAgICBjb250ZXh0LnRyaWdnZXIsXG4gICAgY29udGV4dC52YWx1ZU5vZGUsXG4gICAgY29udGVudFdyYXBwZXIsXG4gICAgY29udGVudCxcbiAgICB2aWV3cG9ydCxcbiAgICBzZWxlY3RlZEl0ZW0sXG4gICAgc2VsZWN0ZWRJdGVtVGV4dCxcbiAgICBjb250ZXh0LmRpcixcbiAgICBvblBsYWNlZFxuICBdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHBvc2l0aW9uKCksIFtwb3NpdGlvbl0pO1xuICBjb25zdCBbY29udGVudFpJbmRleCwgc2V0Q29udGVudFpJbmRleF0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjb250ZW50KSBzZXRDb250ZW50WkluZGV4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpLnpJbmRleCk7XG4gIH0sIFtjb250ZW50XSk7XG4gIGNvbnN0IGhhbmRsZVNjcm9sbEJ1dHRvbkNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSAmJiBzaG91bGRSZXBvc2l0aW9uUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgcG9zaXRpb24oKTtcbiAgICAgICAgZm9jdXNTZWxlY3RlZEl0ZW0/LigpO1xuICAgICAgICBzaG91bGRSZXBvc2l0aW9uUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwb3NpdGlvbiwgZm9jdXNTZWxlY3RlZEl0ZW1dXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFNlbGVjdFZpZXdwb3J0UHJvdmlkZXIsXG4gICAge1xuICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICBjb250ZW50V3JhcHBlcixcbiAgICAgIHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmLFxuICAgICAgb25TY3JvbGxCdXR0b25DaGFuZ2U6IGhhbmRsZVNjcm9sbEJ1dHRvbkNoYW5nZSxcbiAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBzZXRDb250ZW50V3JhcHBlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHpJbmRleDogY29udGVudFpJbmRleFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wb3BwZXJQcm9wcyxcbiAgICAgICAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdGhlIGhlaWdodCBvZiB0aGUgY29udGVudCwgaXQgaW5jbHVkZXMgYm9yZGVycy4gSWYgd2Ugd2VyZSB0byBzZXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgaGVpZ2h0IHdpdGhvdXQgaGF2aW5nIGBib3hTaXppbmc6ICdib3JkZXItYm94J2AgaXQgd291bGQgYmUgdG9vIGJpZy5cbiAgICAgICAgICAgICAgICBib3hTaXppbmc6IFwiYm9yZGVyLWJveFwiLFxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3QgZ2V0IHRhbGxlciB0aGFuIHRoZSB3cmFwcGVyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAuLi5wb3BwZXJQcm9wcy5zdHlsZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICApO1xufSk7XG5TZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uLmRpc3BsYXlOYW1lID0gSVRFTV9BTElHTkVEX1BPU0lUSU9OX05BTUU7XG52YXIgUE9QUEVSX1BPU0lUSU9OX05BTUUgPSBcIlNlbGVjdFBvcHBlclBvc2l0aW9uXCI7XG52YXIgU2VsZWN0UG9wcGVyUG9zaXRpb24gPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfX3Njb3BlU2VsZWN0LFxuICAgIGFsaWduID0gXCJzdGFydFwiLFxuICAgIGNvbGxpc2lvblBhZGRpbmcgPSBDT05URU5UX01BUkdJTixcbiAgICAuLi5wb3BwZXJQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVNlbGVjdCk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFBvcHBlclByaW1pdGl2ZS5Db250ZW50LFxuICAgIHtcbiAgICAgIC4uLnBvcHBlclNjb3BlLFxuICAgICAgLi4ucG9wcGVyUHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIGFsaWduLFxuICAgICAgY29sbGlzaW9uUGFkZGluZyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC8vIEVuc3VyZSBib3JkZXItYm94IGZvciBmbG9hdGluZy11aSBjYWxjdWxhdGlvbnNcbiAgICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgICAgLi4ucG9wcGVyUHJvcHMuc3R5bGUsXG4gICAgICAgIC8vIHJlLW5hbWVzcGFjZSBleHBvc2VkIGNvbnRlbnQgY3VzdG9tIHByb3BlcnRpZXNcbiAgICAgICAgLi4ue1xuICAgICAgICAgIFwiLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luXCI6IFwidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pXCIsXG4gICAgICAgICAgXCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgpXCIsXG4gICAgICAgICAgXCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClcIixcbiAgICAgICAgICBcIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGhcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKVwiLFxuICAgICAgICAgIFwiLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodClcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApO1xufSk7XG5TZWxlY3RQb3BwZXJQb3NpdGlvbi5kaXNwbGF5TmFtZSA9IFBPUFBFUl9QT1NJVElPTl9OQU1FO1xudmFyIFtTZWxlY3RWaWV3cG9ydFByb3ZpZGVyLCB1c2VTZWxlY3RWaWV3cG9ydENvbnRleHRdID0gY3JlYXRlU2VsZWN0Q29udGV4dChDT05URU5UX05BTUUsIHt9KTtcbnZhciBWSUVXUE9SVF9OQU1FID0gXCJTZWxlY3RWaWV3cG9ydFwiO1xudmFyIFNlbGVjdFZpZXdwb3J0ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG5vbmNlLCAuLi52aWV3cG9ydFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFZJRVdQT1JUX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGV4dCA9IHVzZVNlbGVjdFZpZXdwb3J0Q29udGV4dChWSUVXUE9SVF9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCBjb250ZW50Q29udGV4dC5vblZpZXdwb3J0Q2hhbmdlKTtcbiAgICBjb25zdCBwcmV2U2Nyb2xsVG9wUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgIF9faHRtbDogYFtkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF17c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7fVtkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF06Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub25jZVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChDb2xsZWN0aW9uLlNsb3QsIHsgc2NvcGU6IF9fc2NvcGVTZWxlY3QsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICB7XG4gICAgICAgICAgXCJkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydFwiOiBcIlwiLFxuICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgLi4udmlld3BvcnRQcm9wcyxcbiAgICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgLy8gd2UgdXNlIHBvc2l0aW9uOiAncmVsYXRpdmUnIGhlcmUgb24gdGhlIGB2aWV3cG9ydGAgc28gdGhhdCB3aGVuIHdlIGNhbGxcbiAgICAgICAgICAgIC8vIGBzZWxlY3RlZEl0ZW0ub2Zmc2V0VG9wYCBpbiBjYWxjdWxhdGlvbnMsIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAvLyAoaW5kZXBlbmRlbnQgb2YgdGhlIHNjcm9sbFVwQnV0dG9uKS5cbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgLy8gVmlld3BvcnQgc2hvdWxkIG9ubHkgYmUgc2Nyb2xsYWJsZSBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uLlxuICAgICAgICAgICAgLy8gVGhpcyB3b24ndCB3b3JrIGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZXMsIHNvIHdlJ2xsIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJldmlzaXQgdGhpcyBpZi93aGVuIHRoYXQgaXMgc3VwcG9ydGVkXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvdmVydGljYWwtZm9ybS1jb250cm9sc1xuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuIGF1dG9cIixcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0UHJvcHMuc3R5bGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU2Nyb2xsOiBjb21wb3NlRXZlbnRIYW5kbGVycyh2aWV3cG9ydFByb3BzLm9uU2Nyb2xsLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGVudFdyYXBwZXIsIHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmIH0gPSB2aWV3cG9ydENvbnRleHQ7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY/LmN1cnJlbnQgJiYgY29udGVudFdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZWRCeSA9IE1hdGguYWJzKHByZXZTY3JvbGxUb3BSZWYuY3VycmVudCAtIHZpZXdwb3J0LnNjcm9sbFRvcCk7XG4gICAgICAgICAgICAgIGlmIChzY3JvbGxlZEJ5ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIENPTlRFTlRfTUFSR0lOICogMjtcbiAgICAgICAgICAgICAgICBjb25zdCBjc3NNaW5IZWlnaHQgPSBwYXJzZUZsb2F0KGNvbnRlbnRXcmFwcGVyLnN0eWxlLm1pbkhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3NzSGVpZ2h0ID0gcGFyc2VGbG9hdChjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZIZWlnaHQgPSBNYXRoLm1heChjc3NNaW5IZWlnaHQsIGNzc0hlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZIZWlnaHQgPCBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRIZWlnaHQgPSBwcmV2SGVpZ2h0ICsgc2Nyb2xsZWRCeTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYW1wZWROZXh0SGVpZ2h0ID0gTWF0aC5taW4oYXZhaWxhYmxlSGVpZ2h0LCBuZXh0SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodERpZmYgPSBuZXh0SGVpZ2h0IC0gY2xhbXBlZE5leHRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBjbGFtcGVkTmV4dEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50V3JhcHBlci5zdHlsZS5ib3R0b20gPT09IFwiMHB4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQuc2Nyb2xsVG9wID0gaGVpZ2h0RGlmZiA+IDAgPyBoZWlnaHREaWZmIDogMDtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImZsZXgtZW5kXCI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSB2aWV3cG9ydC5zY3JvbGxUb3A7XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKSB9KVxuICAgIF0gfSk7XG4gIH1cbik7XG5TZWxlY3RWaWV3cG9ydC5kaXNwbGF5TmFtZSA9IFZJRVdQT1JUX05BTUU7XG52YXIgR1JPVVBfTkFNRSA9IFwiU2VsZWN0R3JvdXBcIjtcbnZhciBbU2VsZWN0R3JvdXBDb250ZXh0UHJvdmlkZXIsIHVzZVNlbGVjdEdyb3VwQ29udGV4dF0gPSBjcmVhdGVTZWxlY3RDb250ZXh0KEdST1VQX05BTUUpO1xudmFyIFNlbGVjdEdyb3VwID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIC4uLmdyb3VwUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGdyb3VwSWQgPSB1c2VJZCgpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdEdyb3VwQ29udGV4dFByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlU2VsZWN0LCBpZDogZ3JvdXBJZCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyByb2xlOiBcImdyb3VwXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGdyb3VwSWQsIC4uLmdyb3VwUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pIH0pO1xuICB9XG4pO1xuU2VsZWN0R3JvdXAuZGlzcGxheU5hbWUgPSBHUk9VUF9OQU1FO1xudmFyIExBQkVMX05BTUUgPSBcIlNlbGVjdExhYmVsXCI7XG52YXIgU2VsZWN0TGFiZWwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4ubGFiZWxQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgZ3JvdXBDb250ZXh0ID0gdXNlU2VsZWN0R3JvdXBDb250ZXh0KExBQkVMX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5kaXYsIHsgaWQ6IGdyb3VwQ29udGV4dC5pZCwgLi4ubGFiZWxQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSk7XG4gIH1cbik7XG5TZWxlY3RMYWJlbC5kaXNwbGF5TmFtZSA9IExBQkVMX05BTUU7XG52YXIgSVRFTV9OQU1FID0gXCJTZWxlY3RJdGVtXCI7XG52YXIgW1NlbGVjdEl0ZW1Db250ZXh0UHJvdmlkZXIsIHVzZVNlbGVjdEl0ZW1Db250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoSVRFTV9OQU1FKTtcbnZhciBTZWxlY3RJdGVtID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBfX3Njb3BlU2VsZWN0LFxuICAgICAgdmFsdWUsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgdGV4dFZhbHVlOiB0ZXh0VmFsdWVQcm9wLFxuICAgICAgLi4uaXRlbVByb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KElURU1fTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgY29udGVudENvbnRleHQgPSB1c2VTZWxlY3RDb250ZW50Q29udGV4dChJVEVNX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjb250ZXh0LnZhbHVlID09PSB2YWx1ZTtcbiAgICBjb25zdCBbdGV4dFZhbHVlLCBzZXRUZXh0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUodGV4dFZhbHVlUHJvcCA/PyBcIlwiKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhcbiAgICAgIGZvcndhcmRlZFJlZixcbiAgICAgIChub2RlKSA9PiBjb250ZW50Q29udGV4dC5pdGVtUmVmQ2FsbGJhY2s/Lihub2RlLCB2YWx1ZSwgZGlzYWJsZWQpXG4gICAgKTtcbiAgICBjb25zdCB0ZXh0SWQgPSB1c2VJZCgpO1xuICAgIGNvbnN0IHBvaW50ZXJUeXBlUmVmID0gUmVhY3QudXNlUmVmKFwidG91Y2hcIik7XG4gICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBjb250ZXh0Lm9uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgICBjb250ZXh0Lm9uT3BlbkNoYW5nZShmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBIDxTZWxlY3QuSXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgU2VsZWN0SXRlbUNvbnRleHRQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgdGV4dElkLFxuICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICBvbkl0ZW1UZXh0Q2hhbmdlOiBSZWFjdC51c2VDYWxsYmFjaygobm9kZSkgPT4ge1xuICAgICAgICAgIHNldFRleHRWYWx1ZSgocHJldlRleHRWYWx1ZSkgPT4gcHJldlRleHRWYWx1ZSB8fCAobm9kZT8udGV4dENvbnRlbnQgPz8gXCJcIikudHJpbSgpKTtcbiAgICAgICAgfSwgW10pLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICBDb2xsZWN0aW9uLkl0ZW1TbG90LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiBfX3Njb3BlU2VsZWN0LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIHRleHRWYWx1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0ZXh0SWQsXG4gICAgICAgICAgICAgICAgXCJkYXRhLWhpZ2hsaWdodGVkXCI6IGlzRm9jdXNlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzU2VsZWN0ZWQgJiYgaXNGb2N1c2VkLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBpc1NlbGVjdGVkID8gXCJjaGVja2VkXCIgOiBcInVuY2hlY2tlZFwiLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCB8fCB2b2lkIDAsXG4gICAgICAgICAgICAgICAgXCJkYXRhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICB0YWJJbmRleDogZGlzYWJsZWQgPyB2b2lkIDAgOiAtMSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtUHJvcHMsXG4gICAgICAgICAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uRm9jdXMsICgpID0+IHNldElzRm9jdXNlZCh0cnVlKSksXG4gICAgICAgICAgICAgICAgb25CbHVyOiBjb21wb3NlRXZlbnRIYW5kbGVycyhpdGVtUHJvcHMub25CbHVyLCAoKSA9PiBzZXRJc0ZvY3VzZWQoZmFsc2UpKSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyhpdGVtUHJvcHMub25DbGljaywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgIT09IFwibW91c2VcIikgaGFuZGxlU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb25Qb2ludGVyVXA6IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vblBvaW50ZXJVcCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPT09IFwibW91c2VcIikgaGFuZGxlU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb25Qb2ludGVyRG93bjogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uUG9pbnRlckRvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGVSZWYuY3VycmVudCA9IGV2ZW50LnBvaW50ZXJUeXBlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG9uUG9pbnRlck1vdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vblBvaW50ZXJNb3ZlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSBldmVudC5wb2ludGVyVHlwZTtcbiAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGV4dC5vbkl0ZW1MZWF2ZT8uKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPT09IFwibW91c2VcIikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJMZWF2ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uUG9pbnRlckxlYXZlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRDb250ZXh0Lm9uSXRlbUxlYXZlPy4oKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvbktleURvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUeXBpbmdBaGVhZCA9IGNvbnRlbnRDb250ZXh0LnNlYXJjaFJlZj8uY3VycmVudCAhPT0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1R5cGluZ0FoZWFkICYmIGV2ZW50LmtleSA9PT0gXCIgXCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGlmIChTRUxFQ1RJT05fS0VZUy5pbmNsdWRlcyhldmVudC5rZXkpKSBoYW5kbGVTZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiIFwiKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuU2VsZWN0SXRlbS5kaXNwbGF5TmFtZSA9IElURU1fTkFNRTtcbnZhciBJVEVNX1RFWFRfTkFNRSA9IFwiU2VsZWN0SXRlbVRleHRcIjtcbnZhciBTZWxlY3RJdGVtVGV4dCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCBjbGFzc05hbWUsIHN0eWxlLCAuLi5pdGVtVGV4dFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgY29udGVudENvbnRleHQgPSB1c2VTZWxlY3RDb250ZW50Q29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgaXRlbUNvbnRleHQgPSB1c2VTZWxlY3RJdGVtQ29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgbmF0aXZlT3B0aW9uc0NvbnRleHQgPSB1c2VTZWxlY3ROYXRpdmVPcHRpb25zQ29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgW2l0ZW1UZXh0Tm9kZSwgc2V0SXRlbVRleHROb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhcbiAgICAgIGZvcndhcmRlZFJlZixcbiAgICAgIChub2RlKSA9PiBzZXRJdGVtVGV4dE5vZGUobm9kZSksXG4gICAgICBpdGVtQ29udGV4dC5vbkl0ZW1UZXh0Q2hhbmdlLFxuICAgICAgKG5vZGUpID0+IGNvbnRlbnRDb250ZXh0Lml0ZW1UZXh0UmVmQ2FsbGJhY2s/Lihub2RlLCBpdGVtQ29udGV4dC52YWx1ZSwgaXRlbUNvbnRleHQuZGlzYWJsZWQpXG4gICAgKTtcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGl0ZW1UZXh0Tm9kZT8udGV4dENvbnRlbnQ7XG4gICAgY29uc3QgbmF0aXZlT3B0aW9uID0gUmVhY3QudXNlTWVtbyhcbiAgICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJvcHRpb25cIiwgeyB2YWx1ZTogaXRlbUNvbnRleHQudmFsdWUsIGRpc2FibGVkOiBpdGVtQ29udGV4dC5kaXNhYmxlZCwgY2hpbGRyZW46IHRleHRDb250ZW50IH0sIGl0ZW1Db250ZXh0LnZhbHVlKSxcbiAgICAgIFtpdGVtQ29udGV4dC5kaXNhYmxlZCwgaXRlbUNvbnRleHQudmFsdWUsIHRleHRDb250ZW50XVxuICAgICk7XG4gICAgY29uc3QgeyBvbk5hdGl2ZU9wdGlvbkFkZCwgb25OYXRpdmVPcHRpb25SZW1vdmUgfSA9IG5hdGl2ZU9wdGlvbnNDb250ZXh0O1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBvbk5hdGl2ZU9wdGlvbkFkZChuYXRpdmVPcHRpb24pO1xuICAgICAgcmV0dXJuICgpID0+IG9uTmF0aXZlT3B0aW9uUmVtb3ZlKG5hdGl2ZU9wdGlvbik7XG4gICAgfSwgW29uTmF0aXZlT3B0aW9uQWRkLCBvbk5hdGl2ZU9wdGlvblJlbW92ZSwgbmF0aXZlT3B0aW9uXSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5zcGFuLCB7IGlkOiBpdGVtQ29udGV4dC50ZXh0SWQsIC4uLml0ZW1UZXh0UHJvcHMsIHJlZjogY29tcG9zZWRSZWZzIH0pLFxuICAgICAgaXRlbUNvbnRleHQuaXNTZWxlY3RlZCAmJiBjb250ZXh0LnZhbHVlTm9kZSAmJiAhY29udGV4dC52YWx1ZU5vZGVIYXNDaGlsZHJlbiA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChpdGVtVGV4dFByb3BzLmNoaWxkcmVuLCBjb250ZXh0LnZhbHVlTm9kZSkgOiBudWxsXG4gICAgXSB9KTtcbiAgfVxuKTtcblNlbGVjdEl0ZW1UZXh0LmRpc3BsYXlOYW1lID0gSVRFTV9URVhUX05BTUU7XG52YXIgSVRFTV9JTkRJQ0FUT1JfTkFNRSA9IFwiU2VsZWN0SXRlbUluZGljYXRvclwiO1xudmFyIFNlbGVjdEl0ZW1JbmRpY2F0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4uaXRlbUluZGljYXRvclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBpdGVtQ29udGV4dCA9IHVzZVNlbGVjdEl0ZW1Db250ZXh0KElURU1fSU5ESUNBVE9SX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiBpdGVtQ29udGV4dC5pc1NlbGVjdGVkID8gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuc3BhbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIC4uLml0ZW1JbmRpY2F0b3JQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuU2VsZWN0SXRlbUluZGljYXRvci5kaXNwbGF5TmFtZSA9IElURU1fSU5ESUNBVE9SX05BTUU7XG52YXIgU0NST0xMX1VQX0JVVFRPTl9OQU1FID0gXCJTZWxlY3RTY3JvbGxVcEJ1dHRvblwiO1xudmFyIFNlbGVjdFNjcm9sbFVwQnV0dG9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFNDUk9MTF9VUF9CVVRUT05fTkFNRSwgcHJvcHMuX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IHZpZXdwb3J0Q29udGV4dCA9IHVzZVNlbGVjdFZpZXdwb3J0Q29udGV4dChTQ1JPTExfVVBfQlVUVE9OX05BTUUsIHByb3BzLl9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBbY2FuU2Nyb2xsVXAsIHNldENhblNjcm9sbFVwXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgdmlld3BvcnRDb250ZXh0Lm9uU2Nyb2xsQnV0dG9uQ2hhbmdlKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY29udGVudENvbnRleHQudmlld3BvcnQgJiYgY29udGVudENvbnRleHQuaXNQb3NpdGlvbmVkKSB7XG4gICAgICBsZXQgaGFuZGxlU2Nyb2xsMiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBjYW5TY3JvbGxVcDIgPSB2aWV3cG9ydC5zY3JvbGxUb3AgPiAwO1xuICAgICAgICBzZXRDYW5TY3JvbGxVcChjYW5TY3JvbGxVcDIpO1xuICAgICAgfTtcbiAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBoYW5kbGVTY3JvbGwyO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBjb250ZW50Q29udGV4dC52aWV3cG9ydDtcbiAgICAgIGhhbmRsZVNjcm9sbDIoKTtcbiAgICAgIHZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsMik7XG4gICAgICByZXR1cm4gKCkgPT4gdmlld3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwyKTtcbiAgICB9XG4gIH0sIFtjb250ZW50Q29udGV4dC52aWV3cG9ydCwgY29udGVudENvbnRleHQuaXNQb3NpdGlvbmVkXSk7XG4gIHJldHVybiBjYW5TY3JvbGxVcCA/IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbCxcbiAgICB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgb25BdXRvU2Nyb2xsOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnQsIHNlbGVjdGVkSXRlbSB9ID0gY29udGVudENvbnRleHQ7XG4gICAgICAgIGlmICh2aWV3cG9ydCAmJiBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICB2aWV3cG9ydC5zY3JvbGxUb3AgPSB2aWV3cG9ydC5zY3JvbGxUb3AgLSBzZWxlY3RlZEl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApIDogbnVsbDtcbn0pO1xuU2VsZWN0U2Nyb2xsVXBCdXR0b24uZGlzcGxheU5hbWUgPSBTQ1JPTExfVVBfQlVUVE9OX05BTUU7XG52YXIgU0NST0xMX0RPV05fQlVUVE9OX05BTUUgPSBcIlNlbGVjdFNjcm9sbERvd25CdXR0b25cIjtcbnZhciBTZWxlY3RTY3JvbGxEb3duQnV0dG9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFNDUk9MTF9ET1dOX0JVVFRPTl9OQU1FLCBwcm9wcy5fX3Njb3BlU2VsZWN0KTtcbiAgY29uc3Qgdmlld3BvcnRDb250ZXh0ID0gdXNlU2VsZWN0Vmlld3BvcnRDb250ZXh0KFNDUk9MTF9ET1dOX0JVVFRPTl9OQU1FLCBwcm9wcy5fX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgW2NhblNjcm9sbERvd24sIHNldENhblNjcm9sbERvd25dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCB2aWV3cG9ydENvbnRleHQub25TY3JvbGxCdXR0b25DaGFuZ2UpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjb250ZW50Q29udGV4dC52aWV3cG9ydCAmJiBjb250ZW50Q29udGV4dC5pc1Bvc2l0aW9uZWQpIHtcbiAgICAgIGxldCBoYW5kbGVTY3JvbGwyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbCA9IHZpZXdwb3J0LnNjcm9sbEhlaWdodCAtIHZpZXdwb3J0LmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgY2FuU2Nyb2xsRG93bjIgPSBNYXRoLmNlaWwodmlld3BvcnQuc2Nyb2xsVG9wKSA8IG1heFNjcm9sbDtcbiAgICAgICAgc2V0Q2FuU2Nyb2xsRG93bihjYW5TY3JvbGxEb3duMik7XG4gICAgICB9O1xuICAgICAgdmFyIGhhbmRsZVNjcm9sbCA9IGhhbmRsZVNjcm9sbDI7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGNvbnRlbnRDb250ZXh0LnZpZXdwb3J0O1xuICAgICAgaGFuZGxlU2Nyb2xsMigpO1xuICAgICAgdmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwyKTtcbiAgICAgIHJldHVybiAoKSA9PiB2aWV3cG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbDIpO1xuICAgIH1cbiAgfSwgW2NvbnRlbnRDb250ZXh0LnZpZXdwb3J0LCBjb250ZW50Q29udGV4dC5pc1Bvc2l0aW9uZWRdKTtcbiAgcmV0dXJuIGNhblNjcm9sbERvd24gPyAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFNlbGVjdFNjcm9sbEJ1dHRvbkltcGwsXG4gICAge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgIG9uQXV0b1Njcm9sbDogKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHZpZXdwb3J0LCBzZWxlY3RlZEl0ZW0gfSA9IGNvbnRlbnRDb250ZXh0O1xuICAgICAgICBpZiAodmlld3BvcnQgJiYgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgdmlld3BvcnQuc2Nyb2xsVG9wID0gdmlld3BvcnQuc2Nyb2xsVG9wICsgc2VsZWN0ZWRJdGVtLm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgKSA6IG51bGw7XG59KTtcblNlbGVjdFNjcm9sbERvd25CdXR0b24uZGlzcGxheU5hbWUgPSBTQ1JPTExfRE9XTl9CVVRUT05fTkFNRTtcbnZhciBTZWxlY3RTY3JvbGxCdXR0b25JbXBsID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG9uQXV0b1Njcm9sbCwgLi4uc2Nyb2xsSW5kaWNhdG9yUHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFwiU2VsZWN0U2Nyb2xsQnV0dG9uXCIsIF9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBhdXRvU2Nyb2xsVGltZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgY2xlYXJBdXRvU2Nyb2xsVGltZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGF1dG9TY3JvbGxUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCk7XG4gICAgICBhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyQXV0b1Njcm9sbFRpbWVyKCk7XG4gIH0sIFtjbGVhckF1dG9TY3JvbGxUaW1lcl0pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSBnZXRJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ucmVmLmN1cnJlbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGFjdGl2ZUl0ZW0/LnJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW2dldEl0ZW1zXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFByaW1pdGl2ZS5kaXYsXG4gICAge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgLi4uc2Nyb2xsSW5kaWNhdG9yUHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIHN0eWxlOiB7IGZsZXhTaHJpbms6IDAsIC4uLnNjcm9sbEluZGljYXRvclByb3BzLnN0eWxlIH0sXG4gICAgICBvblBvaW50ZXJEb3duOiBjb21wb3NlRXZlbnRIYW5kbGVycyhzY3JvbGxJbmRpY2F0b3JQcm9wcy5vblBvaW50ZXJEb3duLCAoKSA9PiB7XG4gICAgICAgIGlmIChhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGF1dG9TY3JvbGxUaW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKG9uQXV0b1Njcm9sbCwgNTApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG9uUG9pbnRlck1vdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHNjcm9sbEluZGljYXRvclByb3BzLm9uUG9pbnRlck1vdmUsICgpID0+IHtcbiAgICAgICAgY29udGVudENvbnRleHQub25JdGVtTGVhdmU/LigpO1xuICAgICAgICBpZiAoYXV0b1Njcm9sbFRpbWVyUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRJbnRlcnZhbChvbkF1dG9TY3JvbGwsIDUwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBvblBvaW50ZXJMZWF2ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMoc2Nyb2xsSW5kaWNhdG9yUHJvcHMub25Qb2ludGVyTGVhdmUsICgpID0+IHtcbiAgICAgICAgY2xlYXJBdXRvU2Nyb2xsVGltZXIoKTtcbiAgICAgIH0pXG4gICAgfVxuICApO1xufSk7XG52YXIgU0VQQVJBVE9SX05BTUUgPSBcIlNlbGVjdFNlcGFyYXRvclwiO1xudmFyIFNlbGVjdFNlcGFyYXRvciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCAuLi5zZXBhcmF0b3JQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIC4uLnNlcGFyYXRvclByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcblNlbGVjdFNlcGFyYXRvci5kaXNwbGF5TmFtZSA9IFNFUEFSQVRPUl9OQU1FO1xudmFyIEFSUk9XX05BTUUgPSBcIlNlbGVjdEFycm93XCI7XG52YXIgU2VsZWN0QXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4uYXJyb3dQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgcG9wcGVyU2NvcGUgPSB1c2VQb3BwZXJTY29wZShfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChBUlJPV19OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KEFSUk9XX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiBjb250ZXh0Lm9wZW4gJiYgY29udGVudENvbnRleHQucG9zaXRpb24gPT09IFwicG9wcGVyXCIgPyAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BcnJvdywgeyAuLi5wb3BwZXJTY29wZSwgLi4uYXJyb3dQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuU2VsZWN0QXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xudmFyIEJVQkJMRV9JTlBVVF9OQU1FID0gXCJTZWxlY3RCdWJibGVJbnB1dFwiO1xudmFyIFNlbGVjdEJ1YmJsZUlucHV0ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHsgX19zY29wZVNlbGVjdCwgdmFsdWUsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCByZWYpO1xuICAgIGNvbnN0IHByZXZWYWx1ZSA9IHVzZVByZXZpb3VzKHZhbHVlKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ID0gcmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIXNlbGVjdCkgcmV0dXJuO1xuICAgICAgY29uc3Qgc2VsZWN0UHJvdG8gPSB3aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgIHNlbGVjdFByb3RvLFxuICAgICAgICBcInZhbHVlXCJcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXRWYWx1ZSA9IGRlc2NyaXB0b3Iuc2V0O1xuICAgICAgaWYgKHByZXZWYWx1ZSAhPT0gdmFsdWUgJiYgc2V0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pO1xuICAgICAgICBzZXRWYWx1ZS5jYWxsKHNlbGVjdCwgdmFsdWUpO1xuICAgICAgICBzZWxlY3QuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfSwgW3ByZXZWYWx1ZSwgdmFsdWVdKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5zZWxlY3QsXG4gICAgICB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBzdHlsZTogeyAuLi5WSVNVQUxMWV9ISURERU5fU1RZTEVTLCAuLi5wcm9wcy5zdHlsZSB9LFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5TZWxlY3RCdWJibGVJbnB1dC5kaXNwbGF5TmFtZSA9IEJVQkJMRV9JTlBVVF9OQU1FO1xuZnVuY3Rpb24gc2hvdWxkU2hvd1BsYWNlaG9sZGVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gdm9pZCAwO1xufVxuZnVuY3Rpb24gdXNlVHlwZWFoZWFkU2VhcmNoKG9uU2VhcmNoQ2hhbmdlKSB7XG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IHVzZUNhbGxiYWNrUmVmKG9uU2VhcmNoQ2hhbmdlKTtcbiAgY29uc3Qgc2VhcmNoUmVmID0gUmVhY3QudXNlUmVmKFwiXCIpO1xuICBjb25zdCB0aW1lclJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgaGFuZGxlVHlwZWFoZWFkU2VhcmNoID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gc2VhcmNoUmVmLmN1cnJlbnQgKyBrZXk7XG4gICAgICBoYW5kbGVTZWFyY2hDaGFuZ2Uoc2VhcmNoKTtcbiAgICAgIChmdW5jdGlvbiB1cGRhdGVTZWFyY2godmFsdWUpIHtcbiAgICAgICAgc2VhcmNoUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBcIlwiKSB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdXBkYXRlU2VhcmNoKFwiXCIpLCAxZTMpO1xuICAgICAgfSkoc2VhcmNoKTtcbiAgICB9LFxuICAgIFtoYW5kbGVTZWFyY2hDaGFuZ2VdXG4gICk7XG4gIGNvbnN0IHJlc2V0VHlwZWFoZWFkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNlYXJjaFJlZi5jdXJyZW50ID0gXCJcIjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtzZWFyY2hSZWYsIGhhbmRsZVR5cGVhaGVhZFNlYXJjaCwgcmVzZXRUeXBlYWhlYWRdO1xufVxuZnVuY3Rpb24gZmluZE5leHRJdGVtKGl0ZW1zLCBzZWFyY2gsIGN1cnJlbnRJdGVtKSB7XG4gIGNvbnN0IGlzUmVwZWF0ZWQgPSBzZWFyY2gubGVuZ3RoID4gMSAmJiBBcnJheS5mcm9tKHNlYXJjaCkuZXZlcnkoKGNoYXIpID0+IGNoYXIgPT09IHNlYXJjaFswXSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBpc1JlcGVhdGVkID8gc2VhcmNoWzBdIDogc2VhcmNoO1xuICBjb25zdCBjdXJyZW50SXRlbUluZGV4ID0gY3VycmVudEl0ZW0gPyBpdGVtcy5pbmRleE9mKGN1cnJlbnRJdGVtKSA6IC0xO1xuICBsZXQgd3JhcHBlZEl0ZW1zID0gd3JhcEFycmF5KGl0ZW1zLCBNYXRoLm1heChjdXJyZW50SXRlbUluZGV4LCAwKSk7XG4gIGNvbnN0IGV4Y2x1ZGVDdXJyZW50SXRlbSA9IG5vcm1hbGl6ZWRTZWFyY2gubGVuZ3RoID09PSAxO1xuICBpZiAoZXhjbHVkZUN1cnJlbnRJdGVtKSB3cmFwcGVkSXRlbXMgPSB3cmFwcGVkSXRlbXMuZmlsdGVyKCh2KSA9PiB2ICE9PSBjdXJyZW50SXRlbSk7XG4gIGNvbnN0IG5leHRJdGVtID0gd3JhcHBlZEl0ZW1zLmZpbmQoXG4gICAgKGl0ZW0pID0+IGl0ZW0udGV4dFZhbHVlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChub3JtYWxpemVkU2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gICk7XG4gIHJldHVybiBuZXh0SXRlbSAhPT0gY3VycmVudEl0ZW0gPyBuZXh0SXRlbSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHdyYXBBcnJheShhcnJheSwgc3RhcnRJbmRleCkge1xuICByZXR1cm4gYXJyYXkubWFwKChfLCBpbmRleCkgPT4gYXJyYXlbKHN0YXJ0SW5kZXggKyBpbmRleCkgJSBhcnJheS5sZW5ndGhdKTtcbn1cbnZhciBSb290MiA9IFNlbGVjdDtcbnZhciBUcmlnZ2VyID0gU2VsZWN0VHJpZ2dlcjtcbnZhciBWYWx1ZSA9IFNlbGVjdFZhbHVlO1xudmFyIEljb24gPSBTZWxlY3RJY29uO1xudmFyIFBvcnRhbCA9IFNlbGVjdFBvcnRhbDtcbnZhciBDb250ZW50MiA9IFNlbGVjdENvbnRlbnQ7XG52YXIgVmlld3BvcnQgPSBTZWxlY3RWaWV3cG9ydDtcbnZhciBHcm91cCA9IFNlbGVjdEdyb3VwO1xudmFyIExhYmVsID0gU2VsZWN0TGFiZWw7XG52YXIgSXRlbSA9IFNlbGVjdEl0ZW07XG52YXIgSXRlbVRleHQgPSBTZWxlY3RJdGVtVGV4dDtcbnZhciBJdGVtSW5kaWNhdG9yID0gU2VsZWN0SXRlbUluZGljYXRvcjtcbnZhciBTY3JvbGxVcEJ1dHRvbiA9IFNlbGVjdFNjcm9sbFVwQnV0dG9uO1xudmFyIFNjcm9sbERvd25CdXR0b24gPSBTZWxlY3RTY3JvbGxEb3duQnV0dG9uO1xudmFyIFNlcGFyYXRvciA9IFNlbGVjdFNlcGFyYXRvcjtcbnZhciBBcnJvdzIgPSBTZWxlY3RBcnJvdztcbmV4cG9ydCB7XG4gIEFycm93MiBhcyBBcnJvdyxcbiAgQ29udGVudDIgYXMgQ29udGVudCxcbiAgR3JvdXAsXG4gIEljb24sXG4gIEl0ZW0sXG4gIEl0ZW1JbmRpY2F0b3IsXG4gIEl0ZW1UZXh0LFxuICBMYWJlbCxcbiAgUG9ydGFsLFxuICBSb290MiBhcyBSb290LFxuICBTY3JvbGxEb3duQnV0dG9uLFxuICBTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0LFxuICBTZWxlY3RBcnJvdyxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEljb24sXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdEl0ZW1JbmRpY2F0b3IsXG4gIFNlbGVjdEl0ZW1UZXh0LFxuICBTZWxlY3RMYWJlbCxcbiAgU2VsZWN0UG9ydGFsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbiAgU2VsZWN0Vmlld3BvcnQsXG4gIFNlcGFyYXRvcixcbiAgVHJpZ2dlcixcbiAgVmFsdWUsXG4gIFZpZXdwb3J0LFxuICBjcmVhdGVTZWxlY3RTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAncmFkaXgtdWknO1xudmFyIERyb3BEb3duUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IHByb3BzLmRlZmF1bHRPcGVuLCBvcGVuID0gcHJvcHMub3Blbiwgb25PcGVuQ2hhbmdlID0gcHJvcHMub25PcGVuQ2hhbmdlLCB2YWx1ZSA9IHByb3BzLnZhbHVlLCBvblZhbHVlQ2hhbmdlID0gcHJvcHMub25WYWx1ZUNoYW5nZSwgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCwgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuUm9vdCwgeyBkZWZhdWx0T3BlbjogZGVmYXVsdE9wZW4sIG9wZW46IG9wZW4sIG9uT3BlbkNoYW5nZTogb25PcGVuQ2hhbmdlLCB2YWx1ZTogdmFsdWUsIG9uVmFsdWVDaGFuZ2U6IG9uVmFsdWVDaGFuZ2UsIGRpc2FibGVkOiBkaXNhYmxlZCwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIERyb3BEb3duVHJpZ2dlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhc0NoaWxkID0gcHJvcHMuYXNDaGlsZCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuVHJpZ2dlciwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWRyb3AtZG93biB0cmlnZ2VyIFwiLmNvbmNhdChjbGFzc05hbWUpLCBhc0NoaWxkOiBhc0NoaWxkLCBzdHlsZTogc3R5bGUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIERyb3BEb3duVmFsdWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHBsYWNlaG9sZGVyID0gcHJvcHMucGxhY2Vob2xkZXI7XG4gICAgcmV0dXJuIChfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBjaGlsZHJlbjogX2pzeChTZWxlY3QuVmFsdWUsIHsgYXNDaGlsZDogYXNDaGlsZCwgcGxhY2Vob2xkZXI6IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAnbnVyaS1wbGFjZWhvbGRlcicsIGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSwgcmVmOiByZWYgfSkgfSkpO1xufSk7XG52YXIgRHJvcERvd25Db250ZW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNpZGUgPSBwcm9wcy5zaWRlLCBhbGlnbiA9IHByb3BzLmFsaWduLCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uLCBzdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuQ29udGVudCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBcIi5jb25jYXQoY2xhc3NOYW1lKSwgYXNDaGlsZDogYXNDaGlsZCwgc2lkZTogc2lkZSwgYWxpZ246IGFsaWduLCBwb3NpdGlvbjogcG9zaXRpb24sIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IF9qc3goU2VsZWN0LlZpZXdwb3J0LCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSB9KSk7XG59O1xudmFyIERyb3BEb3duSXRlbSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhc0NoaWxkID0gcHJvcHMuYXNDaGlsZCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCB2YWx1ZSA9IHByb3BzLnZhbHVlLCBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLCBvbkNsaWNrID0gcHJvcHMub25DbGljaztcbiAgICByZXR1cm4gKF9qc3goU2VsZWN0Lkl0ZW0sIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgXCIuY29uY2F0KGNsYXNzTmFtZSksIGFzQ2hpbGQ6IGFzQ2hpbGQsIHZhbHVlOiB2YWx1ZSwgZGlzYWJsZWQ6IGRpc2FibGVkLCBvbkNsaWNrOiBvbkNsaWNrLCBjaGlsZHJlbjogX2pzeChTZWxlY3QuSXRlbVRleHQsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pIH0pKTtcbn07XG5Ecm9wRG93blJvb3QuVHJpZ2dlciA9IERyb3BEb3duVHJpZ2dlcjtcbkRyb3BEb3duUm9vdC5WYWx1ZSA9IERyb3BEb3duVmFsdWU7XG5Ecm9wRG93blJvb3QuQ29udGVudCA9IERyb3BEb3duQ29udGVudDtcbkRyb3BEb3duUm9vdC5JdGVtID0gRHJvcERvd25JdGVtO1xuZXhwb3J0IGRlZmF1bHQgRHJvcERvd25Sb290O1xuIiwiZXhwb3J0IHZhciBzaXplID0gWydtJywgJ2wnXTtcbmV4cG9ydCB2YXIgZHJvcERvd25TaW5nbGVQcm9wcyA9IHtcbiAgICBzaXplOiB7XG4gICAgICAgIHR5cGU6ICdjbGFzc05hbWUnLFxuICAgICAgICBjbGFzc05hbWU6ICdzaXplJyxcbiAgICAgICAgdmFsdWVzOiBzaXplLFxuICAgICAgICBkZWZhdWx0OiAnbScsXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgICB0eXBlOiAnY3NzJyxcbiAgICAgICAga2V5OiAnd2lkdGgnLFxuICAgICAgICBkZWZhdWx0OiAnZml0LWNvbnRlbnQnLFxuICAgIH0sXG59O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IENoZXZyb25Eb3duSWNvbiBmcm9tICcuLi8uLi9hc3NldHMvaWNvbnMvY2hldnJvbkRvd24uc3ZnJztcbmltcG9ydCB7IHVzZUV4dGVybmFsU3RhdGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2hvb2tzL3VzZUV4dGVybmFsU3RhdGUnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IERyb3BEb3duUm9vdCBmcm9tICcuL2Jhc2UtZHJvcC1kb3duJztcbmltcG9ydCB7IGRyb3BEb3duU2luZ2xlUHJvcHMgfSBmcm9tICcuL2Ryb3AtZG93bi1wcm9wcyc7XG52YXIgRHJvcERvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGRyb3BEb3duU2luZ2xlUHJvcHMpLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIHJlbmRlclZhbHVlID0gX2EucmVuZGVyVmFsdWUsIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCB2YWx1ZSA9IF9hLnZhbHVlLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBsZWZ0SWNvbiA9IF9hLmxlZnRJY29uLCByaWdodEljb24gPSBfYS5yaWdodEljb24sIHN0eWxlID0gX2Euc3R5bGUsIHJlbmRlck9wdGlvbiA9IF9hLnJlbmRlck9wdGlvbiwgc2lkZSA9IF9hLnNpZGUsIGFsaWduID0gX2EuYWxpZ24sIHBvc2l0aW9uID0gX2EucG9zaXRpb24sIG9wZW5Qcm9wID0gX2Eub3Blbiwgb25PcGVuQ2hhbmdlUHJvcCA9IF9hLm9uT3BlbkNoYW5nZSwgZGVmYXVsdE9wZW4gPSBfYS5kZWZhdWx0T3BlbiwgZHJvcERvd25Qcm9wcyA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwicmVuZGVyVmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcIm9wdGlvbnNcIiwgXCJ2YWx1ZVwiLCBcImRpc2FibGVkXCIsIFwibGVmdEljb25cIiwgXCJyaWdodEljb25cIiwgXCJzdHlsZVwiLCBcInJlbmRlck9wdGlvblwiLCBcInNpZGVcIiwgXCJhbGlnblwiLCBcInBvc2l0aW9uXCIsIFwib3BlblwiLCBcIm9uT3BlbkNoYW5nZVwiLCBcImRlZmF1bHRPcGVuXCJdKTtcbiAgICB2YXIgdHJpZ2dlckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnZHJvcC1kb3duLXNpbmdsZS10cmlnZ2VyJyk7XG4gICAgdmFyIF9iID0gdXNlRXh0ZXJuYWxTdGF0ZSh7XG4gICAgICAgIHByb3A6IG9wZW5Qcm9wLFxuICAgICAgICBoYW5kbGVyOiBvbk9wZW5DaGFuZ2VQcm9wLFxuICAgICAgICBkZWZhdWx0UHJvcDogZGVmYXVsdE9wZW4gIT09IG51bGwgJiYgZGVmYXVsdE9wZW4gIT09IHZvaWQgMCA/IGRlZmF1bHRPcGVuIDogZmFsc2UsXG4gICAgfSksIG9wZW4gPSBfYlswXSwgc2V0T3BlbiA9IF9iWzFdO1xuICAgIHZhciBjbG9zZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNldE9wZW4oZmFsc2UpOyB9O1xuICAgIHJldHVybiAoX2pzeHMoRHJvcERvd25Sb290LCBfX2Fzc2lnbih7IHZhbHVlOiB2YWx1ZSwgZGlzYWJsZWQ6IGRpc2FibGVkLCBvcGVuOiBvcGVuLCBvbk9wZW5DaGFuZ2U6IHNldE9wZW4gfSwgZHJvcERvd25Qcm9wcywgeyBjaGlsZHJlbjogW19qc3hzKERyb3BEb3duUm9vdC5UcmlnZ2VyLCB7IGNsYXNzTmFtZTogdHJpZ2dlckNsYXNzTmFtZSwgc3R5bGU6IHN0eWxlLCBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ251cmktZGlzcGxheS1mbGV4IG51cmktYWktY2VudGVyJywgc3R5bGU6IHsgZ2FwOiAnMTBweCcgfSwgY2hpbGRyZW46IFtsZWZ0SWNvbiwgcmVuZGVyVmFsdWUgPyAoKHJlbmRlclZhbHVlID09PSBudWxsIHx8IHJlbmRlclZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZW5kZXJWYWx1ZSh2YWx1ZSkpIHx8IChfanN4KERyb3BEb3duUm9vdC5WYWx1ZSwgeyBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGNsYXNzTmFtZTogJ2Ryb3AtZG93bi1zaW5nbGUtdmFsdWUnLCByZWY6IHJlZiB9KSkpIDogKF9qc3goRHJvcERvd25Sb290LlZhbHVlLCB7IHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgY2xhc3NOYW1lOiAnZHJvcC1kb3duLXNpbmdsZS12YWx1ZScsIHJlZjogcmVmIH0pKV0gfSksIHJpZ2h0SWNvbiB8fCBfanN4KENoZXZyb25Eb3duSWNvbiwgeyBjbGFzc05hbWU6ICdkcm9wLWRvd24tc2luZ2xlLWljb24gcm90YXRlJyB9KV0gfSksIF9qc3goRHJvcERvd25Sb290LkNvbnRlbnQsIHsgY2xhc3NOYW1lOiAnZHJvcC1kb3duLXNpbmdsZS1jb250ZW50Jywgc2lkZTogc2lkZSwgYWxpZ246IGFsaWduLCBwb3NpdGlvbjogcG9zaXRpb24sIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IHJlbmRlck9wdGlvblxuICAgICAgICAgICAgICAgICAgICA/IHJlbmRlck9wdGlvbih7IGlzT3Blbjogb3BlbiwgY2xvc2U6IGNsb3NlIH0pXG4gICAgICAgICAgICAgICAgICAgIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7IHJldHVybiAoX2pzeChEcm9wRG93blJvb3QuSXRlbSwgeyB2YWx1ZTogb3B0aW9uLnZhbHVlLCBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkLCBjbGFzc05hbWU6ICdkcm9wLWRvd24tc2luZ2xlLWl0ZW0nLCBjaGlsZHJlbjogb3B0aW9uLmxhYmVsIH0sIG9wdGlvbi52YWx1ZSkpOyB9KSB9KV0gfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgRHJvcERvd247XG4iLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2NvbGxhcHNpYmxlLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjb21wb3NlRXZlbnRIYW5kbGVycyB9IGZyb20gXCJAcmFkaXgtdWkvcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0U2NvcGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUNvbnRyb2xsYWJsZVN0YXRlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtY29udHJvbGxhYmxlLXN0YXRlXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1sYXlvdXQtZWZmZWN0XCI7XG5pbXBvcnQgeyB1c2VDb21wb3NlZFJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmVzZW5jZVwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWlkXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBDT0xMQVBTSUJMRV9OQU1FID0gXCJDb2xsYXBzaWJsZVwiO1xudmFyIFtjcmVhdGVDb2xsYXBzaWJsZUNvbnRleHQsIGNyZWF0ZUNvbGxhcHNpYmxlU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKENPTExBUFNJQkxFX05BTUUpO1xudmFyIFtDb2xsYXBzaWJsZVByb3ZpZGVyLCB1c2VDb2xsYXBzaWJsZUNvbnRleHRdID0gY3JlYXRlQ29sbGFwc2libGVDb250ZXh0KENPTExBUFNJQkxFX05BTUUpO1xudmFyIENvbGxhcHNpYmxlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBfX3Njb3BlQ29sbGFwc2libGUsXG4gICAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBvbk9wZW5DaGFuZ2UsXG4gICAgICAuLi5jb2xsYXBzaWJsZVByb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICAgIHByb3A6IG9wZW5Qcm9wLFxuICAgICAgZGVmYXVsdFByb3A6IGRlZmF1bHRPcGVuID8/IGZhbHNlLFxuICAgICAgb25DaGFuZ2U6IG9uT3BlbkNoYW5nZSxcbiAgICAgIGNhbGxlcjogQ09MTEFQU0lCTEVfTkFNRVxuICAgIH0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgQ29sbGFwc2libGVQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IF9fc2NvcGVDb2xsYXBzaWJsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbnRlbnRJZDogdXNlSWQoKSxcbiAgICAgICAgb3BlbixcbiAgICAgICAgb25PcGVuVG9nZ2xlOiBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRPcGVuKChwcmV2T3BlbikgPT4gIXByZXZPcGVuKSwgW3NldE9wZW5dKSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgUHJpbWl0aXZlLmRpdixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImRhdGEtc3RhdGVcIjogZ2V0U3RhdGUob3BlbiksXG4gICAgICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogZGlzYWJsZWQgPyBcIlwiIDogdm9pZCAwLFxuICAgICAgICAgICAgLi4uY29sbGFwc2libGVQcm9wcyxcbiAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcbkNvbGxhcHNpYmxlLmRpc3BsYXlOYW1lID0gQ09MTEFQU0lCTEVfTkFNRTtcbnZhciBUUklHR0VSX05BTUUgPSBcIkNvbGxhcHNpYmxlVHJpZ2dlclwiO1xudmFyIENvbGxhcHNpYmxlVHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlQ29sbGFwc2libGUsIC4uLnRyaWdnZXJQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxhcHNpYmxlQ29udGV4dChUUklHR0VSX05BTUUsIF9fc2NvcGVDb2xsYXBzaWJsZSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuYnV0dG9uLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogY29udGV4dC5jb250ZW50SWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBjb250ZXh0Lm9wZW4gfHwgZmFsc2UsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjb250ZXh0Lm9wZW4pLFxuICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogY29udGV4dC5kaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgIGRpc2FibGVkOiBjb250ZXh0LmRpc2FibGVkLFxuICAgICAgICAuLi50cmlnZ2VyUHJvcHMsXG4gICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkNsaWNrLCBjb250ZXh0Lm9uT3BlblRvZ2dsZSlcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ29sbGFwc2libGVUcmlnZ2VyLmRpc3BsYXlOYW1lID0gVFJJR0dFUl9OQU1FO1xudmFyIENPTlRFTlRfTkFNRSA9IFwiQ29sbGFwc2libGVDb250ZW50XCI7XG52YXIgQ29sbGFwc2libGVDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IGZvcmNlTW91bnQsIC4uLmNvbnRlbnRQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxhcHNpYmxlQ29udGV4dChDT05URU5UX05BTUUsIHByb3BzLl9fc2NvcGVDb2xsYXBzaWJsZSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJlc2VuY2UsIHsgcHJlc2VudDogZm9yY2VNb3VudCB8fCBjb250ZXh0Lm9wZW4sIGNoaWxkcmVuOiAoeyBwcmVzZW50IH0pID0+IC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGFwc2libGVDb250ZW50SW1wbCwgeyAuLi5jb250ZW50UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBwcmVzZW50IH0pIH0pO1xuICB9XG4pO1xuQ29sbGFwc2libGVDb250ZW50LmRpc3BsYXlOYW1lID0gQ09OVEVOVF9OQU1FO1xudmFyIENvbGxhcHNpYmxlQ29udGVudEltcGwgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZUNvbGxhcHNpYmxlLCBwcmVzZW50LCBjaGlsZHJlbiwgLi4uY29udGVudFByb3BzIH0gPSBwcm9wcztcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxhcHNpYmxlQ29udGV4dChDT05URU5UX05BTUUsIF9fc2NvcGVDb2xsYXBzaWJsZSk7XG4gIGNvbnN0IFtpc1ByZXNlbnQsIHNldElzUHJlc2VudF0gPSBSZWFjdC51c2VTdGF0ZShwcmVzZW50KTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCByZWYpO1xuICBjb25zdCBoZWlnaHRSZWYgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IGhlaWdodCA9IGhlaWdodFJlZi5jdXJyZW50O1xuICBjb25zdCB3aWR0aFJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3Qgd2lkdGggPSB3aWR0aFJlZi5jdXJyZW50O1xuICBjb25zdCBpc09wZW4gPSBjb250ZXh0Lm9wZW4gfHwgaXNQcmVzZW50O1xuICBjb25zdCBpc01vdW50QW5pbWF0aW9uUHJldmVudGVkUmVmID0gUmVhY3QudXNlUmVmKGlzT3Blbik7XG4gIGNvbnN0IG9yaWdpbmFsU3R5bGVzUmVmID0gUmVhY3QudXNlUmVmKHZvaWQgMCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgckFGID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGlzTW91bnRBbmltYXRpb25QcmV2ZW50ZWRSZWYuY3VycmVudCA9IGZhbHNlKTtcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUockFGKTtcbiAgfSwgW10pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSByZWYuY3VycmVudDtcbiAgICBpZiAobm9kZSkge1xuICAgICAgb3JpZ2luYWxTdHlsZXNSZWYuY3VycmVudCA9IG9yaWdpbmFsU3R5bGVzUmVmLmN1cnJlbnQgfHwge1xuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IG5vZGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgICBhbmltYXRpb25OYW1lOiBub2RlLnN0eWxlLmFuaW1hdGlvbk5hbWVcbiAgICAgIH07XG4gICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IFwiMHNcIjtcbiAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uTmFtZSA9IFwibm9uZVwiO1xuICAgICAgY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBoZWlnaHRSZWYuY3VycmVudCA9IHJlY3QuaGVpZ2h0O1xuICAgICAgd2lkdGhSZWYuY3VycmVudCA9IHJlY3Qud2lkdGg7XG4gICAgICBpZiAoIWlzTW91bnRBbmltYXRpb25QcmV2ZW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBub2RlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IG9yaWdpbmFsU3R5bGVzUmVmLmN1cnJlbnQudHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgICAgICBub2RlLnN0eWxlLmFuaW1hdGlvbk5hbWUgPSBvcmlnaW5hbFN0eWxlc1JlZi5jdXJyZW50LmFuaW1hdGlvbk5hbWU7XG4gICAgICB9XG4gICAgICBzZXRJc1ByZXNlbnQocHJlc2VudCk7XG4gICAgfVxuICB9LCBbY29udGV4dC5vcGVuLCBwcmVzZW50XSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFByaW1pdGl2ZS5kaXYsXG4gICAge1xuICAgICAgXCJkYXRhLXN0YXRlXCI6IGdldFN0YXRlKGNvbnRleHQub3BlbiksXG4gICAgICBcImRhdGEtZGlzYWJsZWRcIjogY29udGV4dC5kaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICBpZDogY29udGV4dC5jb250ZW50SWQsXG4gICAgICBoaWRkZW46ICFpc09wZW4sXG4gICAgICAuLi5jb250ZW50UHJvcHMsXG4gICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIFtgLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LWhlaWdodGBdOiBoZWlnaHQgPyBgJHtoZWlnaHR9cHhgIDogdm9pZCAwLFxuICAgICAgICBbYC0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC13aWR0aGBdOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IHZvaWQgMCxcbiAgICAgICAgLi4ucHJvcHMuc3R5bGVcbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogaXNPcGVuICYmIGNoaWxkcmVuXG4gICAgfVxuICApO1xufSk7XG5mdW5jdGlvbiBnZXRTdGF0ZShvcGVuKSB7XG4gIHJldHVybiBvcGVuID8gXCJvcGVuXCIgOiBcImNsb3NlZFwiO1xufVxudmFyIFJvb3QgPSBDb2xsYXBzaWJsZTtcbnZhciBUcmlnZ2VyID0gQ29sbGFwc2libGVUcmlnZ2VyO1xudmFyIENvbnRlbnQgPSBDb2xsYXBzaWJsZUNvbnRlbnQ7XG5leHBvcnQge1xuICBDb2xsYXBzaWJsZSxcbiAgQ29sbGFwc2libGVDb250ZW50LFxuICBDb2xsYXBzaWJsZVRyaWdnZXIsXG4gIENvbnRlbnQsXG4gIFJvb3QsXG4gIFRyaWdnZXIsXG4gIGNyZWF0ZUNvbGxhcHNpYmxlU2NvcGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IENvbGxhcHNpYmxlIH0gZnJvbSAncmFkaXgtdWknO1xudmFyIENvbGxhcHNpYmxlTWVudVJvb3QgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiXSk7XG4gICAgcmV0dXJuIF9qc3goQ29sbGFwc2libGUuUm9vdCwgX19hc3NpZ24oe30sIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBDb2xsYXBzaWJsZU1lbnVUcmlnZ2VyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBfYSA9IHByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lID0gX2EgPT09IHZvaWQgMCA/ICcnIDogX2EsIHN0eWxlID0gcHJvcHMuc3R5bGUsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIChfanN4KENvbGxhcHNpYmxlLlRyaWdnZXIsIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1jb2xsYXBzaWJsZS1tZW51IHRyaWdnZXIgXCIuY29uY2F0KGNsYXNzTmFtZSksIGFzQ2hpbGQ6IGFzQ2hpbGQsIGRpc2FibGVkOiBkaXNhYmxlZCwgc3R5bGU6IHN0eWxlLCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBDb2xsYXBzaWJsZU1lbnVDb250ZW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBfYSA9IHByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lID0gX2EgPT09IHZvaWQgMCA/ICcnIDogX2EsIHN0eWxlID0gcHJvcHMuc3R5bGU7XG4gICAgcmV0dXJuIChfanN4KENvbGxhcHNpYmxlLkNvbnRlbnQsIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1jb2xsYXBzaWJsZS1tZW51IGNvbnRlbnQgXCIuY29uY2F0KGNsYXNzTmFtZSksIGFzQ2hpbGQ6IGFzQ2hpbGQsIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IGNoaWxkcmVuIH0pKTtcbn07XG5Db2xsYXBzaWJsZU1lbnVSb290LlRyaWdnZXIgPSBDb2xsYXBzaWJsZU1lbnVUcmlnZ2VyO1xuQ29sbGFwc2libGVNZW51Um9vdC5Db250ZW50ID0gQ29sbGFwc2libGVNZW51Q29udGVudDtcbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNpYmxlTWVudVJvb3Q7XG4iLCJleHBvcnQgdmFyIHNpemUgPSBbJ20nLCAnbCddO1xuZXhwb3J0IHZhciBjb2xsYXBzaWJsZU1lbnVQcm9wcyA9IHtcbiAgICBzaXplOiB7XG4gICAgICAgIHR5cGU6ICdjbGFzc05hbWUnLFxuICAgICAgICBjbGFzc05hbWU6ICdzaXplJyxcbiAgICAgICAgdmFsdWVzOiBzaXplLFxuICAgICAgICBkZWZhdWx0OiAnbScsXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgICB0eXBlOiAnY3NzJyxcbiAgICAgICAga2V5OiAnd2lkdGgnLFxuICAgICAgICBkZWZhdWx0OiAnMjQwcHgnLFxuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbGFzc05hbWVzIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscy9jbGFzc05hbWVzJztcbmltcG9ydCB7IGdldE1lcmdlZFByb3BzIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscy9nZXRNZXJnZWRQcm9wcyc7XG5pbXBvcnQgQ29sbGFwc2libGVNZW51Um9vdCBmcm9tICcuL2Jhc2UtY29sbGFwc2libGUtbWVudSc7XG5pbXBvcnQgeyBjb2xsYXBzaWJsZU1lbnVQcm9wcyB9IGZyb20gJy4vY29sbGFwc2libGUtbWVudS1wcm9wcyc7XG52YXIgQ29sbGFwc2libGVNZW51ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBjb2xsYXBzaWJsZU1lbnVQcm9wcyksIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgc3R5bGUgPSBfYS5zdHlsZSwgaXRlbXMgPSBfYS5pdGVtcywgYWN0aXZlS2V5ID0gX2EuYWN0aXZlS2V5LCBvbkFjdGl2ZUtleUNoYW5nZSA9IF9hLm9uQWN0aXZlS2V5Q2hhbmdlLCBfYiA9IF9hLmluZGVudCwgaW5kZW50ID0gX2IgPT09IHZvaWQgMCA/IDEyIDogX2IsIGNoZXZyb24gPSBfYS5jaGV2cm9uO1xuICAgIHZhciByb290Q2xhc3NOYW1lID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsICdjb2xsYXBzaWJsZS1tZW51Jyk7XG4gICAgdmFyIGhhc0FjdGl2ZURlc2NlbmRhbnQgPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoIWFjdGl2ZUtleSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBhY3RpdmVLZXkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IGl0ZW0uY2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zb21lKGhhc0FjdGl2ZURlc2NlbmRhbnQpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcbiAgICB9O1xuICAgIHZhciByZW5kZXJJdGVtcyA9IGZ1bmN0aW9uICh0YXJnZXRJdGVtcywgZGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldEl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGhhc0NoaWxkcmVuID0gISEoKF9hID0gaXRlbS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmVLZXkgPT09IGl0ZW0ua2V5O1xuICAgICAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRyaWdnZXJDbGFzc05hbWUgPSBjbGFzc05hbWVzKCdjb2xsYXBzaWJsZS1tZW51LXRyaWdnZXInLCAnY29sbGFwc2libGUtbWVudS1yb3cnLCBoYXNBY3RpdmVEZXNjZW5kYW50KGl0ZW0pICYmICdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3hzKENvbGxhcHNpYmxlTWVudVJvb3QsIHsgZGVmYXVsdE9wZW46IGl0ZW0uZGVmYXVsdE9wZW4sIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLCBjaGlsZHJlbjogW19qc3goQ29sbGFwc2libGVNZW51Um9vdC5UcmlnZ2VyLCB7IGNsYXNzTmFtZTogdHJpZ2dlckNsYXNzTmFtZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsIGNoaWxkcmVuOiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ2NvbGxhcHNpYmxlLW1lbnUtbGVmdCcsIHN0eWxlOiB7IHBhZGRpbmdMZWZ0OiBcIlwiLmNvbmNhdChkZXB0aCAqIGluZGVudCwgXCJweFwiKSB9LCBjaGlsZHJlbjogaXRlbS5pdGVtIH0pIH0pLCBfanN4KENvbGxhcHNpYmxlTWVudVJvb3QuQ29udGVudCwgeyBjbGFzc05hbWU6ICdjb2xsYXBzaWJsZS1tZW51LWNvbnRlbnQnLCBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbiA/IHJlbmRlckl0ZW1zKGl0ZW0uY2hpbGRyZW4sIGRlcHRoICsgMSkgOiBudWxsIH0pXSB9LCBpdGVtLmtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGl0ZW1DbGFzc05hbWUgPSBjbGFzc05hbWVzKCdjb2xsYXBzaWJsZS1tZW51LWl0ZW0nLCAnY29sbGFwc2libGUtbWVudS1yb3cnLCBpc0FjdGl2ZSAmJiAnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IChfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ2NvbGxhcHNpYmxlLW1lbnUtbGVmdCcsIHN0eWxlOiB7IHBhZGRpbmdMZWZ0OiBcIlwiLmNvbmNhdChkZXB0aCAqIGluZGVudCwgXCJweFwiKSB9LCBjaGlsZHJlbjogaXRlbS5pdGVtIH0pKTtcbiAgICAgICAgICAgIGlmIChpdGVtLmhyZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3goXCJhXCIsIHsgY2xhc3NOYW1lOiBpdGVtQ2xhc3NOYW1lLCBocmVmOiBpdGVtLmhyZWYsIFwiYXJpYS1jdXJyZW50XCI6IGlzQWN0aXZlID8gJ3BhZ2UnIDogdW5kZWZpbmVkLCBcImFyaWEtZGlzYWJsZWRcIjogaXRlbS5kaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCwgb25DbGljazogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQWN0aXZlS2V5Q2hhbmdlID09PSBudWxsIHx8IG9uQWN0aXZlS2V5Q2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFjdGl2ZUtleUNoYW5nZShpdGVtLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBpdGVtLm9uU2VsZWN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IGxlZnQgfSwgaXRlbS5rZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoX2pzeChcImJ1dHRvblwiLCB7IHR5cGU6ICdidXR0b24nLCBjbGFzc05hbWU6IGl0ZW1DbGFzc05hbWUsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgb25BY3RpdmVLZXlDaGFuZ2UgPT09IG51bGwgfHwgb25BY3RpdmVLZXlDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQWN0aXZlS2V5Q2hhbmdlKGl0ZW0ua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gaXRlbS5vblNlbGVjdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IGxlZnQgfSwgaXRlbS5rZXkpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3goXCJuYXZcIiwgeyByZWY6IHJlZiwgY2xhc3NOYW1lOiByb290Q2xhc3NOYW1lLCBzdHlsZTogc3R5bGUsIFwiYXJpYS1sYWJlbFwiOiAnQ29sbGFwc2libGUgbWVudScsIGNoaWxkcmVuOiByZW5kZXJJdGVtcyhpdGVtcywgMCkgfSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBDb2xsYXBzaWJsZU1lbnU7XG4iLCJ2YXIgX3BhdGgsIF9wYXRoMjtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgU3ZnTXVsdGlmbHkgPSBmdW5jdGlvbiBTdmdNdWx0aWZseShwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDIwLFxuICAgIGhlaWdodDogMjAsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgcHJvcHMpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzcxNzE3QVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg0NCA0Ljg0NGEuNjI1LjYyNSAwIDAgMSAuODg0IDBsOS40MjggOS40MjhhLjYyNS42MjUgMCAwIDEtLjg4NC44ODRMNC44NDQgNS43MjhhLjYyNS42MjUgMCAwIDEgMC0uODg0XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKSwgX3BhdGgyIHx8IChfcGF0aDIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzcxNzE3QVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS4xNTYgNC44NDRhLjYyNS42MjUgMCAwIDEgMCAuODg0bC05LjQyOCA5LjQyOGEuNjI1LjYyNSAwIDEgMS0uODg0LS44ODRsOS40MjgtOS40MjhhLjYyNS42MjUgMCAwIDEgLjg4NCAwXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgU3ZnTXVsdGlmbHk7IiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9kaWFsb2cudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNvbXBvc2VFdmVudEhhbmRsZXJzIH0gZnJvbSBcIkByYWRpeC11aS9wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBjcmVhdGVDb250ZXh0U2NvcGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1pZFwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCB7IERpc21pc3NhYmxlTGF5ZXIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWRpc21pc3NhYmxlLWxheWVyXCI7XG5pbXBvcnQgeyBGb2N1c1Njb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1mb2N1cy1zY29wZVwiO1xuaW1wb3J0IHsgUG9ydGFsIGFzIFBvcnRhbFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcG9ydGFsXCI7XG5pbXBvcnQgeyBQcmVzZW5jZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJlc2VuY2VcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyB1c2VGb2N1c0d1YXJkcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZm9jdXMtZ3VhcmRzXCI7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tIFwicmVhY3QtcmVtb3ZlLXNjcm9sbFwiO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gXCJhcmlhLWhpZGRlblwiO1xuaW1wb3J0IHsgY3JlYXRlU2xvdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3Qtc2xvdFwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIERJQUxPR19OQU1FID0gXCJEaWFsb2dcIjtcbnZhciBbY3JlYXRlRGlhbG9nQ29udGV4dCwgY3JlYXRlRGlhbG9nU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKERJQUxPR19OQU1FKTtcbnZhciBbRGlhbG9nUHJvdmlkZXIsIHVzZURpYWxvZ0NvbnRleHRdID0gY3JlYXRlRGlhbG9nQ29udGV4dChESUFMT0dfTkFNRSk7XG52YXIgRGlhbG9nID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfX3Njb3BlRGlhbG9nLFxuICAgIGNoaWxkcmVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHRPcGVuLFxuICAgIG9uT3BlbkNoYW5nZSxcbiAgICBtb2RhbCA9IHRydWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmlnZ2VyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250ZW50UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VDb250cm9sbGFibGVTdGF0ZSh7XG4gICAgcHJvcDogb3BlblByb3AsXG4gICAgZGVmYXVsdFByb3A6IGRlZmF1bHRPcGVuID8/IGZhbHNlLFxuICAgIG9uQ2hhbmdlOiBvbk9wZW5DaGFuZ2UsXG4gICAgY2FsbGVyOiBESUFMT0dfTkFNRVxuICB9KTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgRGlhbG9nUHJvdmlkZXIsXG4gICAge1xuICAgICAgc2NvcGU6IF9fc2NvcGVEaWFsb2csXG4gICAgICB0cmlnZ2VyUmVmLFxuICAgICAgY29udGVudFJlZixcbiAgICAgIGNvbnRlbnRJZDogdXNlSWQoKSxcbiAgICAgIHRpdGxlSWQ6IHVzZUlkKCksXG4gICAgICBkZXNjcmlwdGlvbklkOiB1c2VJZCgpLFxuICAgICAgb3BlbixcbiAgICAgIG9uT3BlbkNoYW5nZTogc2V0T3BlbixcbiAgICAgIG9uT3BlblRvZ2dsZTogUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2V0T3BlbigocHJldk9wZW4pID0+ICFwcmV2T3BlbiksIFtzZXRPcGVuXSksXG4gICAgICBtb2RhbCxcbiAgICAgIGNoaWxkcmVuXG4gICAgfVxuICApO1xufTtcbkRpYWxvZy5kaXNwbGF5TmFtZSA9IERJQUxPR19OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiRGlhbG9nVHJpZ2dlclwiO1xudmFyIERpYWxvZ1RyaWdnZXIgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZURpYWxvZywgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChUUklHR0VSX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICAgIGNvbnN0IGNvbXBvc2VkVHJpZ2dlclJlZiA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRleHQudHJpZ2dlclJlZik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuYnV0dG9uLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJkaWFsb2dcIixcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGNvbnRleHQub3BlbixcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGNvbnRleHQuY29udGVudElkLFxuICAgICAgICBcImRhdGEtc3RhdGVcIjogZ2V0U3RhdGUoY29udGV4dC5vcGVuKSxcbiAgICAgICAgLi4udHJpZ2dlclByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkVHJpZ2dlclJlZixcbiAgICAgICAgb25DbGljazogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25DbGljaywgY29udGV4dC5vbk9wZW5Ub2dnbGUpXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcbkRpYWxvZ1RyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgUE9SVEFMX05BTUUgPSBcIkRpYWxvZ1BvcnRhbFwiO1xudmFyIFtQb3J0YWxQcm92aWRlciwgdXNlUG9ydGFsQ29udGV4dF0gPSBjcmVhdGVEaWFsb2dDb250ZXh0KFBPUlRBTF9OQU1FLCB7XG4gIGZvcmNlTW91bnQ6IHZvaWQgMFxufSk7XG52YXIgRGlhbG9nUG9ydGFsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZURpYWxvZywgZm9yY2VNb3VudCwgY2hpbGRyZW4sIGNvbnRhaW5lciB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KFBPUlRBTF9OQU1FLCBfX3Njb3BlRGlhbG9nKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJvdmlkZXIsIHsgc2NvcGU6IF9fc2NvcGVEaWFsb2csIGZvcmNlTW91bnQsIGNoaWxkcmVuOiBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCkgPT4gLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJpbWl0aXZlLCB7IGFzQ2hpbGQ6IHRydWUsIGNvbnRhaW5lciwgY2hpbGRyZW46IGNoaWxkIH0pIH0pKSB9KTtcbn07XG5EaWFsb2dQb3J0YWwuZGlzcGxheU5hbWUgPSBQT1JUQUxfTkFNRTtcbnZhciBPVkVSTEFZX05BTUUgPSBcIkRpYWxvZ092ZXJsYXlcIjtcbnZhciBEaWFsb2dPdmVybGF5ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBwb3J0YWxDb250ZXh0ID0gdXNlUG9ydGFsQ29udGV4dChPVkVSTEFZX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIGNvbnN0IHsgZm9yY2VNb3VudCA9IHBvcnRhbENvbnRleHQuZm9yY2VNb3VudCwgLi4ub3ZlcmxheVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChPVkVSTEFZX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiBjb250ZXh0Lm1vZGFsID8gLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goRGlhbG9nT3ZlcmxheUltcGwsIHsgLi4ub3ZlcmxheVByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSB9KSA6IG51bGw7XG4gIH1cbik7XG5EaWFsb2dPdmVybGF5LmRpc3BsYXlOYW1lID0gT1ZFUkxBWV9OQU1FO1xudmFyIFNsb3QgPSBjcmVhdGVTbG90KFwiRGlhbG9nT3ZlcmxheS5SZW1vdmVTY3JvbGxcIik7XG52YXIgRGlhbG9nT3ZlcmxheUltcGwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZURpYWxvZywgLi4ub3ZlcmxheVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChPVkVSTEFZX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiAoXG4gICAgICAvLyBNYWtlIHN1cmUgYENvbnRlbnRgIGlzIHNjcm9sbGFibGUgZXZlbiB3aGVuIGl0IGRvZXNuJ3QgbGl2ZSBpbnNpZGUgYFJlbW92ZVNjcm9sbGBcbiAgICAgIC8vIGllLiB3aGVuIGBPdmVybGF5YCBhbmQgYENvbnRlbnRgIGFyZSBzaWJsaW5nc1xuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChSZW1vdmVTY3JvbGwsIHsgYXM6IFNsb3QsIGFsbG93UGluY2hab29tOiB0cnVlLCBzaGFyZHM6IFtjb250ZXh0LmNvbnRlbnRSZWZdLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgUHJpbWl0aXZlLmRpdixcbiAgICAgICAge1xuICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjb250ZXh0Lm9wZW4pLFxuICAgICAgICAgIC4uLm92ZXJsYXlQcm9wcyxcbiAgICAgICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgICAgICBzdHlsZTogeyBwb2ludGVyRXZlbnRzOiBcImF1dG9cIiwgLi4ub3ZlcmxheVByb3BzLnN0eWxlIH1cbiAgICAgICAgfVxuICAgICAgKSB9KVxuICAgICk7XG4gIH1cbik7XG52YXIgQ09OVEVOVF9OQU1FID0gXCJEaWFsb2dDb250ZW50XCI7XG52YXIgRGlhbG9nQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgcG9ydGFsQ29udGV4dCA9IHVzZVBvcnRhbENvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlRGlhbG9nKTtcbiAgICBjb25zdCB7IGZvcmNlTW91bnQgPSBwb3J0YWxDb250ZXh0LmZvcmNlTW91bnQsIC4uLmNvbnRlbnRQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZURpYWxvZ0NvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlRGlhbG9nKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46IGNvbnRleHQubW9kYWwgPyAvKiBAX19QVVJFX18gKi8ganN4KERpYWxvZ0NvbnRlbnRNb2RhbCwgeyAuLi5jb250ZW50UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChEaWFsb2dDb250ZW50Tm9uTW9kYWwsIHsgLi4uY29udGVudFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSB9KTtcbiAgfVxuKTtcbkRpYWxvZ0NvbnRlbnQuZGlzcGxheU5hbWUgPSBDT05URU5UX05BTUU7XG52YXIgRGlhbG9nQ29udGVudE1vZGFsID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChDT05URU5UX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIGNvbnN0IGNvbnRlbnRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgY29udGV4dC5jb250ZW50UmVmLCBjb250ZW50UmVmKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudCA9IGNvbnRlbnRSZWYuY3VycmVudDtcbiAgICAgIGlmIChjb250ZW50KSByZXR1cm4gaGlkZU90aGVycyhjb250ZW50KTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBEaWFsb2dDb250ZW50SW1wbCxcbiAgICAgIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICB0cmFwRm9jdXM6IGNvbnRleHQub3BlbixcbiAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICBvbkNsb3NlQXV0b0ZvY3VzOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkNsb3NlQXV0b0ZvY3VzLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbnRleHQudHJpZ2dlclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICB9KSxcbiAgICAgICAgb25Qb2ludGVyRG93bk91dHNpZGU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uUG9pbnRlckRvd25PdXRzaWRlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEV2ZW50ID0gZXZlbnQuZGV0YWlsLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgY29uc3QgY3RybExlZnRDbGljayA9IG9yaWdpbmFsRXZlbnQuYnV0dG9uID09PSAwICYmIG9yaWdpbmFsRXZlbnQuY3RybEtleSA9PT0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBpc1JpZ2h0Q2xpY2sgPSBvcmlnaW5hbEV2ZW50LmJ1dHRvbiA9PT0gMiB8fCBjdHJsTGVmdENsaWNrO1xuICAgICAgICAgIGlmIChpc1JpZ2h0Q2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvbkZvY3VzT3V0c2lkZTogY29tcG9zZUV2ZW50SGFuZGxlcnMoXG4gICAgICAgICAgcHJvcHMub25Gb2N1c091dHNpZGUsXG4gICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xudmFyIERpYWxvZ0NvbnRlbnROb25Nb2RhbCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZURpYWxvZ0NvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlRGlhbG9nKTtcbiAgICBjb25zdCBoYXNJbnRlcmFjdGVkT3V0c2lkZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgaGFzUG9pbnRlckRvd25PdXRzaWRlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIERpYWxvZ0NvbnRlbnRJbXBsLFxuICAgICAge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgICAgIHRyYXBGb2N1czogZmFsc2UsXG4gICAgICAgIGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czogZmFsc2UsXG4gICAgICAgIG9uQ2xvc2VBdXRvRm9jdXM6IChldmVudCkgPT4ge1xuICAgICAgICAgIHByb3BzLm9uQ2xvc2VBdXRvRm9jdXM/LihldmVudCk7XG4gICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAoIWhhc0ludGVyYWN0ZWRPdXRzaWRlUmVmLmN1cnJlbnQpIGNvbnRleHQudHJpZ2dlclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzSW50ZXJhY3RlZE91dHNpZGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgIGhhc1BvaW50ZXJEb3duT3V0c2lkZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSW50ZXJhY3RPdXRzaWRlOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBwcm9wcy5vbkludGVyYWN0T3V0c2lkZT8uKGV2ZW50KTtcbiAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGhhc0ludGVyYWN0ZWRPdXRzaWRlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwicG9pbnRlcmRvd25cIikge1xuICAgICAgICAgICAgICBoYXNQb2ludGVyRG93bk91dHNpZGVSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRJc1RyaWdnZXIgPSBjb250ZXh0LnRyaWdnZXJSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgICBpZiAodGFyZ2V0SXNUcmlnZ2VyKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChldmVudC5kZXRhaWwub3JpZ2luYWxFdmVudC50eXBlID09PSBcImZvY3VzaW5cIiAmJiBoYXNQb2ludGVyRG93bk91dHNpZGVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xudmFyIERpYWxvZ0NvbnRlbnRJbXBsID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVEaWFsb2csIHRyYXBGb2N1cywgb25PcGVuQXV0b0ZvY3VzLCBvbkNsb3NlQXV0b0ZvY3VzLCAuLi5jb250ZW50UHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZURpYWxvZyk7XG4gICAgY29uc3QgY29udGVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCBjb250ZW50UmVmKTtcbiAgICB1c2VGb2N1c0d1YXJkcygpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgRm9jdXNTY29wZSxcbiAgICAgICAge1xuICAgICAgICAgIGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgICAgICB0cmFwcGVkOiB0cmFwRm9jdXMsXG4gICAgICAgICAgb25Nb3VudEF1dG9Gb2N1czogb25PcGVuQXV0b0ZvY3VzLFxuICAgICAgICAgIG9uVW5tb3VudEF1dG9Gb2N1czogb25DbG9zZUF1dG9Gb2N1cyxcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICAgIERpc21pc3NhYmxlTGF5ZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICAgIGlkOiBjb250ZXh0LmNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGNvbnRleHQuZGVzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogY29udGV4dC50aXRsZUlkLFxuICAgICAgICAgICAgICBcImRhdGEtc3RhdGVcIjogZ2V0U3RhdGUoY29udGV4dC5vcGVuKSxcbiAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLFxuICAgICAgICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgICAgICAgb25EaXNtaXNzOiAoKSA9PiBjb250ZXh0Lm9uT3BlbkNoYW5nZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8ganN4KFRpdGxlV2FybmluZywgeyB0aXRsZUlkOiBjb250ZXh0LnRpdGxlSWQgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goRGVzY3JpcHRpb25XYXJuaW5nLCB7IGNvbnRlbnRSZWYsIGRlc2NyaXB0aW9uSWQ6IGNvbnRleHQuZGVzY3JpcHRpb25JZCB9KVxuICAgICAgXSB9KVxuICAgIF0gfSk7XG4gIH1cbik7XG52YXIgVElUTEVfTkFNRSA9IFwiRGlhbG9nVGl0bGVcIjtcbnZhciBEaWFsb2dUaXRsZSA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlRGlhbG9nLCAuLi50aXRsZVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChUSVRMRV9OQU1FLCBfX3Njb3BlRGlhbG9nKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuaDIsIHsgaWQ6IGNvbnRleHQudGl0bGVJZCwgLi4udGl0bGVQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSk7XG4gIH1cbik7XG5EaWFsb2dUaXRsZS5kaXNwbGF5TmFtZSA9IFRJVExFX05BTUU7XG52YXIgREVTQ1JJUFRJT05fTkFNRSA9IFwiRGlhbG9nRGVzY3JpcHRpb25cIjtcbnZhciBEaWFsb2dEZXNjcmlwdGlvbiA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlRGlhbG9nLCAuLi5kZXNjcmlwdGlvblByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChERVNDUklQVElPTl9OQU1FLCBfX3Njb3BlRGlhbG9nKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUucCwgeyBpZDogY29udGV4dC5kZXNjcmlwdGlvbklkLCAuLi5kZXNjcmlwdGlvblByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcbkRpYWxvZ0Rlc2NyaXB0aW9uLmRpc3BsYXlOYW1lID0gREVTQ1JJUFRJT05fTkFNRTtcbnZhciBDTE9TRV9OQU1FID0gXCJEaWFsb2dDbG9zZVwiO1xudmFyIERpYWxvZ0Nsb3NlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVEaWFsb2csIC4uLmNsb3NlUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KENMT1NFX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmJ1dHRvbixcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgLi4uY2xvc2VQcm9wcyxcbiAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uQ2xpY2ssICgpID0+IGNvbnRleHQub25PcGVuQ2hhbmdlKGZhbHNlKSlcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuRGlhbG9nQ2xvc2UuZGlzcGxheU5hbWUgPSBDTE9TRV9OQU1FO1xuZnVuY3Rpb24gZ2V0U3RhdGUob3Blbikge1xuICByZXR1cm4gb3BlbiA/IFwib3BlblwiIDogXCJjbG9zZWRcIjtcbn1cbnZhciBUSVRMRV9XQVJOSU5HX05BTUUgPSBcIkRpYWxvZ1RpdGxlV2FybmluZ1wiO1xudmFyIFtXYXJuaW5nUHJvdmlkZXIsIHVzZVdhcm5pbmdDb250ZXh0XSA9IGNyZWF0ZUNvbnRleHQoVElUTEVfV0FSTklOR19OQU1FLCB7XG4gIGNvbnRlbnROYW1lOiBDT05URU5UX05BTUUsXG4gIHRpdGxlTmFtZTogVElUTEVfTkFNRSxcbiAgZG9jc1NsdWc6IFwiZGlhbG9nXCJcbn0pO1xudmFyIFRpdGxlV2FybmluZyA9ICh7IHRpdGxlSWQgfSkgPT4ge1xuICBjb25zdCB0aXRsZVdhcm5pbmdDb250ZXh0ID0gdXNlV2FybmluZ0NvbnRleHQoVElUTEVfV0FSTklOR19OQU1FKTtcbiAgY29uc3QgTUVTU0FHRSA9IGBcXGAke3RpdGxlV2FybmluZ0NvbnRleHQuY29udGVudE5hbWV9XFxgIHJlcXVpcmVzIGEgXFxgJHt0aXRsZVdhcm5pbmdDb250ZXh0LnRpdGxlTmFtZX1cXGAgZm9yIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlciB1c2Vycy5cblxuSWYgeW91IHdhbnQgdG8gaGlkZSB0aGUgXFxgJHt0aXRsZVdhcm5pbmdDb250ZXh0LnRpdGxlTmFtZX1cXGAsIHlvdSBjYW4gd3JhcCBpdCB3aXRoIG91ciBWaXN1YWxseUhpZGRlbiBjb21wb25lbnQuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9yYWRpeC11aS5jb20vcHJpbWl0aXZlcy9kb2NzL2NvbXBvbmVudHMvJHt0aXRsZVdhcm5pbmdDb250ZXh0LmRvY3NTbHVnfWA7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpdGxlSWQpIHtcbiAgICAgIGNvbnN0IGhhc1RpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGl0bGVJZCk7XG4gICAgICBpZiAoIWhhc1RpdGxlKSBjb25zb2xlLmVycm9yKE1FU1NBR0UpO1xuICAgIH1cbiAgfSwgW01FU1NBR0UsIHRpdGxlSWRdKTtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIERFU0NSSVBUSU9OX1dBUk5JTkdfTkFNRSA9IFwiRGlhbG9nRGVzY3JpcHRpb25XYXJuaW5nXCI7XG52YXIgRGVzY3JpcHRpb25XYXJuaW5nID0gKHsgY29udGVudFJlZiwgZGVzY3JpcHRpb25JZCB9KSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0aW9uV2FybmluZ0NvbnRleHQgPSB1c2VXYXJuaW5nQ29udGV4dChERVNDUklQVElPTl9XQVJOSU5HX05BTUUpO1xuICBjb25zdCBNRVNTQUdFID0gYFdhcm5pbmc6IE1pc3NpbmcgXFxgRGVzY3JpcHRpb25cXGAgb3IgXFxgYXJpYS1kZXNjcmliZWRieT17dW5kZWZpbmVkfVxcYCBmb3IgeyR7ZGVzY3JpcHRpb25XYXJuaW5nQ29udGV4dC5jb250ZW50TmFtZX19LmA7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpYmVkQnlJZCA9IGNvbnRlbnRSZWYuY3VycmVudD8uZ2V0QXR0cmlidXRlKFwiYXJpYS1kZXNjcmliZWRieVwiKTtcbiAgICBpZiAoZGVzY3JpcHRpb25JZCAmJiBkZXNjcmliZWRCeUlkKSB7XG4gICAgICBjb25zdCBoYXNEZXNjcmlwdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlc2NyaXB0aW9uSWQpO1xuICAgICAgaWYgKCFoYXNEZXNjcmlwdGlvbikgY29uc29sZS53YXJuKE1FU1NBR0UpO1xuICAgIH1cbiAgfSwgW01FU1NBR0UsIGNvbnRlbnRSZWYsIGRlc2NyaXB0aW9uSWRdKTtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIFJvb3QgPSBEaWFsb2c7XG52YXIgVHJpZ2dlciA9IERpYWxvZ1RyaWdnZXI7XG52YXIgUG9ydGFsID0gRGlhbG9nUG9ydGFsO1xudmFyIE92ZXJsYXkgPSBEaWFsb2dPdmVybGF5O1xudmFyIENvbnRlbnQgPSBEaWFsb2dDb250ZW50O1xudmFyIFRpdGxlID0gRGlhbG9nVGl0bGU7XG52YXIgRGVzY3JpcHRpb24gPSBEaWFsb2dEZXNjcmlwdGlvbjtcbnZhciBDbG9zZSA9IERpYWxvZ0Nsb3NlO1xuZXhwb3J0IHtcbiAgQ2xvc2UsXG4gIENvbnRlbnQsXG4gIERlc2NyaXB0aW9uLFxuICBEaWFsb2csXG4gIERpYWxvZ0Nsb3NlLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nT3ZlcmxheSxcbiAgRGlhbG9nUG9ydGFsLFxuICBEaWFsb2dUaXRsZSxcbiAgRGlhbG9nVHJpZ2dlcixcbiAgT3ZlcmxheSxcbiAgUG9ydGFsLFxuICBSb290LFxuICBUaXRsZSxcbiAgVHJpZ2dlcixcbiAgV2FybmluZ1Byb3ZpZGVyLFxuICBjcmVhdGVEaWFsb2dTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAncmFkaXgtdWknO1xudmFyIE1vZGFsUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBfYSA9IHByb3BzLm9wZW4sIG9wZW4gPSBfYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9hLCBvbk9wZW5DaGFuZ2UgPSBwcm9wcy5vbk9wZW5DaGFuZ2U7XG4gICAgcmV0dXJuIF9qc3goRGlhbG9nLlJvb3QsIHsgb25PcGVuQ2hhbmdlOiBvbk9wZW5DaGFuZ2UsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KTtcbn07XG52YXIgTW9kYWxDb250YWluZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBmb3JjZU1vdW50ID0gcHJvcHMuZm9yY2VNb3VudDtcbiAgICByZXR1cm4gKF9qc3hzKERpYWxvZy5Qb3J0YWwsIHsgZm9yY2VNb3VudDogZm9yY2VNb3VudCwgY2hpbGRyZW46IFtfanN4KERpYWxvZy5PdmVybGF5LCB7IGZvcmNlTW91bnQ6IHRydWUsIGNsYXNzTmFtZTogJ251cmktdGhlbWUgYmFzZS1tb2RhbCBtb2RhbC1vdmVybGF5JyB9KSwgX2pzeChEaWFsb2cuQ29udGVudCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLW1vZGFsIG1vZGFsLWNvbnRhaW5lciBcIi5jb25jYXQoY2xhc3NOYW1lKSwgY2hpbGRyZW46IGNoaWxkcmVuIH0pXSB9KSk7XG59O1xudmFyIE1vZGFsVHJpZ2dlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgIHJldHVybiBfanN4KERpYWxvZy5UcmlnZ2VyLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KTtcbn07XG52YXIgTW9kYWxUaXRsZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiXSk7XG4gICAgcmV0dXJuIF9qc3goRGlhbG9nLlRpdGxlLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBNb2RhbFN1YlRpdGxlID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gX2pzeChEaWFsb2cuRGVzY3JpcHRpb24sIF9fYXNzaWduKHt9LCByZXN0LCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIE1vZGFsQ2xvc2UgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2hpbGRyZW5cIl0pO1xuICAgIHJldHVybiBfanN4KERpYWxvZy5DbG9zZSwgX19hc3NpZ24oe30sIHJlc3QsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKTtcbn07XG5Nb2RhbFJvb3QuQ29udGFpbmVyID0gTW9kYWxDb250YWluZXI7XG5Nb2RhbFJvb3QuVHJpZ2dlciA9IE1vZGFsVHJpZ2dlcjtcbk1vZGFsUm9vdC5UaXRsZSA9IE1vZGFsVGl0bGU7XG5Nb2RhbFJvb3QuU3ViVGl0bGUgPSBNb2RhbFN1YlRpdGxlO1xuTW9kYWxSb290LkNsb3NlID0gTW9kYWxDbG9zZTtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsUm9vdDtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5leHBvcnQgdmFyIHNpemUgPSBbJ3MnLCAnbScsICdsJ107XG52YXIgY29tbW9uTW9kYWxQcm9wcyA9IHt9O1xuZXhwb3J0IHZhciBtb2RhbFdpdGhEb3VibGVCdXR0b25Qcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25Nb2RhbFByb3BzKSwgeyBzaXplOiB7XG4gICAgICAgIHR5cGU6ICdjbGFzc05hbWUnLFxuICAgICAgICBjbGFzc05hbWU6ICdzaXplJyxcbiAgICAgICAgdmFsdWVzOiBzaXplLFxuICAgICAgICBkZWZhdWx0OiAnbScsXG4gICAgfSB9KTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICcuLi8uLi9hc3NldHMvaWNvbnMvbXVsdGlmbHkuc3ZnJztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBCYXNlQnV0dG9uIGZyb20gJy4uL2J1dHRvbi9iYXNlLWJ1dHRvbic7XG5pbXBvcnQgQ1RBQnV0dG9uIGZyb20gJy4uL2J1dHRvbi9jdGEtYnV0dG9uJztcbmltcG9ydCBUZXh0IGZyb20gJy4uL2VsZW1lbnRzL3RleHQvdGV4dCc7XG5pbXBvcnQgTW9kYWxSb290IGZyb20gJy4vYmFzZS1tb2RhbCc7XG5pbXBvcnQgeyBtb2RhbFdpdGhEb3VibGVCdXR0b25Qcm9wcyB9IGZyb20gJy4vbW9kYWwtcHJvcHMnO1xudmFyIFJvdyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBtb2RhbFdpdGhEb3VibGVCdXR0b25Qcm9wcyksIGNvbnRlbnQgPSBfYS5jb250ZW50LCB0aXRsZSA9IF9hLnRpdGxlLCBzdWJUaXRsZSA9IF9hLnN1YlRpdGxlLCB0aXRsZUljb24gPSBfYS50aXRsZUljb24sIHNob3dDbG9zZUljb24gPSBfYS5zaG93Q2xvc2VJY29uLCBzaG93VGl0bGVMaW5lID0gX2Euc2hvd1RpdGxlTGluZSwgbGVmdCA9IF9hLmxlZnQsIHJpZ2h0ID0gX2EucmlnaHQsIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZTtcbiAgICB2YXIgbW9kYWxDb250YWluZXJDbGFzc05hbWUgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jb250YWluZXInKTtcbiAgICByZXR1cm4gKF9qc3goTW9kYWxSb290LCB7IGNoaWxkcmVuOiBfanN4cyhNb2RhbFJvb3QuQ29udGFpbmVyLCB7IGZvcmNlTW91bnQ6IHRydWUsIGNsYXNzTmFtZTogbW9kYWxDb250YWluZXJDbGFzc05hbWUsIGNoaWxkcmVuOiBbc2hvd0Nsb3NlSWNvbiAmJiAoX2pzeChCYXNlQnV0dG9uLCB7IGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24nLCBhc0NoaWxkOiB0cnVlLCBjaGlsZHJlbjogX2pzeChDbG9zZUljb24sIHt9KSB9KSksIHRpdGxlSWNvbiAmJiAoX2pzeChNb2RhbFJvb3QuVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24nLCBjaGlsZHJlbjogdGl0bGVJY29uIH0pKSwgdGl0bGUgJiYgKF9qc3goTW9kYWxSb290LlRpdGxlLCB7IGFzQ2hpbGQ6IHRydWUsIGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi10aXRsZScsIGNoaWxkcmVuOiBfanN4KFRleHQsIHsgdGV4dDogdGl0bGUsIHNpemU6ICdsZycsIHdlaWdodDogJ2JvbGQnLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0pIH0pKSwgc3ViVGl0bGUgJiYgKF9qc3goTW9kYWxSb290LlN1YlRpdGxlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiB0eXBlb2Ygc3ViVGl0bGUgPT09ICdzdHJpbmcnID8gKF9qc3goVGV4dCwgeyB0ZXh0OiBzdWJUaXRsZSwgc2l6ZTogJ3NtJywgd2VpZ2h0OiAnbWVkaXVtJywgY29sb3I6ICdncmF5NTInLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0pKSA6IChzdWJUaXRsZSkgfSkpLCBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRlbnQnLCBjaGlsZHJlbjogY29udGVudCB9KSwgX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY2xvc2Ugcm93JywgY2hpbGRyZW46IFtfanN4KE1vZGFsUm9vdC5DbG9zZSwgeyBhc0NoaWxkOiB0cnVlLCBjaGlsZHJlbjogX2pzeChDVEFCdXR0b24sIF9fYXNzaWduKHsgdmFyaWFudDogJ2dob3N0JyB9LCBsZWZ0KSkgfSksIF9qc3goTW9kYWxSb290LkNsb3NlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENUQUJ1dHRvbiwgX19hc3NpZ24oe30sIHJpZ2h0KSkgfSldIH0pXSB9KSB9KSk7XG59O1xudmFyIENvbHVtbiA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBtb2RhbFdpdGhEb3VibGVCdXR0b25Qcm9wcyksIGNvbnRlbnQgPSBfYS5jb250ZW50LCB0aXRsZSA9IF9hLnRpdGxlLCBzdWJUaXRsZSA9IF9hLnN1YlRpdGxlLCB0aXRsZUljb24gPSBfYS50aXRsZUljb24sIHNob3dDbG9zZUljb24gPSBfYS5zaG93Q2xvc2VJY29uLCBzaG93VGl0bGVMaW5lID0gX2Euc2hvd1RpdGxlTGluZSwgbGVmdCA9IF9hLmxlZnQsIHJpZ2h0ID0gX2EucmlnaHQsIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZTtcbiAgICB2YXIgbW9kYWxDb250YWluZXJDbGFzc05hbWUgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jb250YWluZXInKTtcbiAgICByZXR1cm4gKF9qc3goTW9kYWxSb290LCB7IGNoaWxkcmVuOiBfanN4cyhNb2RhbFJvb3QuQ29udGFpbmVyLCB7IGZvcmNlTW91bnQ6IHRydWUsIGNsYXNzTmFtZTogbW9kYWxDb250YWluZXJDbGFzc05hbWUsIGNoaWxkcmVuOiBbc2hvd0Nsb3NlSWNvbiAmJiAoX2pzeChCYXNlQnV0dG9uLCB7IGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24nLCBhc0NoaWxkOiB0cnVlLCBjaGlsZHJlbjogX2pzeChDbG9zZUljb24sIHt9KSB9KSksIHRpdGxlSWNvbiAmJiAoX2pzeChNb2RhbFJvb3QuVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24nLCBjaGlsZHJlbjogdGl0bGVJY29uIH0pKSwgdGl0bGUgJiYgKF9qc3goTW9kYWxSb290LlRpdGxlLCB7IGFzQ2hpbGQ6IHRydWUsIGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi10aXRsZScsIGNoaWxkcmVuOiBfanN4KFRleHQsIHsgdGV4dDogdGl0bGUsIHNpemU6ICdsZycsIHdlaWdodDogJ2JvbGQnLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0pIH0pKSwgc3ViVGl0bGUgJiYgKF9qc3goTW9kYWxSb290LlN1YlRpdGxlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiB0eXBlb2Ygc3ViVGl0bGUgPT09ICdzdHJpbmcnID8gKF9qc3goVGV4dCwgeyB0ZXh0OiBzdWJUaXRsZSwgc2l6ZTogJ3NtJywgd2VpZ2h0OiAnbWVkaXVtJywgY29sb3I6ICdncmF5NTInLCB0ZXh0QWxpZ246ICdjZW50ZXInIH0pKSA6IChzdWJUaXRsZSkgfSkpLCBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRlbnQnLCBjaGlsZHJlbjogY29udGVudCB9KSwgX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY2xvc2UgY29sdW1uJywgY2hpbGRyZW46IFtfanN4KE1vZGFsUm9vdC5DbG9zZSwgeyBhc0NoaWxkOiB0cnVlLCBjaGlsZHJlbjogX2pzeChDVEFCdXR0b24sIF9fYXNzaWduKHt9LCBsZWZ0KSkgfSksIF9qc3goTW9kYWxSb290LkNsb3NlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENUQUJ1dHRvbiwgX19hc3NpZ24oeyB2YXJpYW50OiAnZ2hvc3QnIH0sIHJpZ2h0KSkgfSldIH0pXSB9KSB9KSk7XG59O1xudmFyIE1vZGFsV2l0aERvdWJsZUJ1dHRvbiA9IHtcbiAgICBSb3c6IFJvdyxcbiAgICBDb2x1bW46IENvbHVtbixcbn07XG5leHBvcnQgZGVmYXVsdCBNb2RhbFdpdGhEb3VibGVCdXR0b247XG4iLCJpbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuLy8gY29tcG9uZW50cy9sb2FkaW5nL2lubGluZS1sb2FkaW5nL2lubGluZS1sb2FkaW5nLnRzeFxuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSBcIi4uLy4uLy4uL3N0eWxlcy90b2tlbi9jb2xvcnNcIjtcbnZhciBJbmxpbmVMb2FkaW5nID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpemUgPSBfYS5zaXplLCBfYiA9IF9hLmp1c3RpZnlDb250ZW50LCBqdXN0aWZ5Q29udGVudCA9IF9iID09PSB2b2lkIDAgPyBcImZsZXgtc3RhcnRcIiA6IF9iLCBfYyA9IF9hLmluZGljYXRvckNvbG9yLCBpbmRpY2F0b3JDb2xvciA9IF9jID09PSB2b2lkIDAgPyBcImdyYXlFNFwiIDogX2M7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gY29sb3JzW2luZGljYXRvckNvbG9yXTtcbiAgICByZXR1cm4gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBjb21wb25lbnQtbG9hZGluZy1pbmxpbmVcIiwgXCJkYXRhLXRlc3RpZFwiOiBcImxvYWRpbmctY29tcG9uZW50XCIsIHN0eWxlOiB7IGp1c3RpZnlDb250ZW50OiBqdXN0aWZ5Q29udGVudCB9LCBjaGlsZHJlbjogX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJsb2FkaW5nLWluZGljYXRvci1yaW5nXCIsIHN0eWxlOiB7IHdpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemUgfSwgY2hpbGRyZW46IFswLCAxLCAyLCAzXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nXCIsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAzLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCJcIi5jb25jYXQoYm9yZGVyQ29sb3IsIFwiIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50XCIpLFxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25EZWxheTogaSA9PT0gMCA/IFwiLTAuNDVzXCIgOiBpID09PSAxID8gXCItMC4zc1wiIDogaSA9PT0gMiA/IFwiLTAuMTVzXCIgOiBcIjBzXCIsXG4gICAgICAgICAgICAgICAgfSB9LCBpKSk7IH0pIH0pIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBJbmxpbmVMb2FkaW5nO1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBTcGlubmVyIGZyb20gXCIuLi9zcGlubmVyL3NwaW5uZXJcIjtcbmltcG9ydCBUZXh0IGZyb20gXCIuLi8uLi9lbGVtZW50cy90ZXh0L3RleHRcIjtcbnZhciBPdmVybGF5TG9hZGluZyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLm9wZW4sIG9wZW4gPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBtZXNzYWdlID0gX2EubWVzc2FnZSwgX2MgPSBfYS5zcGlubmVyQ29sb3IsIHNwaW5uZXJDb2xvciA9IF9jID09PSB2b2lkIDAgPyBcImdyYXlFNFwiIDogX2MsIF9kID0gX2EuYmFja2Ryb3BPcGFjaXR5LCBiYWNrZHJvcE9wYWNpdHkgPSBfZCA9PT0gdm9pZCAwID8gMC42IDogX2QsIF9lID0gX2EuekluZGV4LCB6SW5kZXggPSBfZSA9PT0gdm9pZCAwID8gMTIwMCA6IF9lO1xuICAgIGlmICghb3BlbilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIHBhZ2UtbG9hZGluZy1jb250YWluZXJcIiwgcm9sZTogXCJzdGF0dXNcIiwgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiwgXCJhcmlhLWJ1c3lcIjogXCJ0cnVlXCIsIHN0eWxlOiB7IHpJbmRleDogekluZGV4IH0sIGNoaWxkcmVuOiBbX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwYWdlLWxvYWRpbmctYmFja2Ryb3BcIiwgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMCwwLDAsXCIuY29uY2F0KGJhY2tkcm9wT3BhY2l0eSwgXCIpXCIpIH0gfSksIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBhZ2UtbG9hZGluZy1jb250ZW50XCIsIGNoaWxkcmVuOiBbX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwYWdlLWxvYWRpbmctaW5kaWNhdG9yXCIsIGNoaWxkcmVuOiBfanN4KFNwaW5uZXIsIHsgY29sb3I6IHNwaW5uZXJDb2xvciB9KSB9KSwgbWVzc2FnZSAmJiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwYWdlLWxvYWRpbmctdGV4dFwiLCBjaGlsZHJlbjogX2pzeChUZXh0LCB7IHRleHQ6IG1lc3NhZ2UsIHNpemU6IFwic21cIiwgd2VpZ2h0OiBcInJlZ3VsYXJcIiwgY29sb3I6IFwid2hpdGVcIiwgdGV4dEFsaWduOiBcImNlbnRlclwiIH0pIH0pKV0gfSldIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBPdmVybGF5TG9hZGluZztcbiIsIi8vIENvbXBvbmVudHNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3Bpbm5lciB9IGZyb20gXCIuL3NwaW5uZXIvc3Bpbm5lclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbmxpbmVMb2FkaW5nIH0gZnJvbSBcIi4vaW5saW5lLWxvYWRpbmcvaW5saW5lLWxvYWRpbmdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheUxvYWRpbmcgfSBmcm9tIFwiLi9vdmVybGF5LWxvYWRpbmcvb3ZlcmxheS1sb2FkaW5nXCI7XG4iLCIvLyBJbXBvcnQgZ2xvYmFsIHN0eWxlc1xuaW1wb3J0ICcuL3N0eWxlcy9pbmRleC5jc3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBdmF0YXIgfSBmcm9tICcuL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENUQUJ1dHRvbiB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b24vY3RhLWJ1dHRvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbkJhZGdlIH0gZnJvbSAnLi9jb21wb25lbnRzL2JhZGdlL29wdGlvbi1iYWRnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEljb25UZXh0QmFkZ2UgfSBmcm9tICcuL2NvbXBvbmVudHMvYmFkZ2UvaWNvbi10ZXh0LWJhZGdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvblRleHRPcHRpb25CYWRnZSB9IGZyb20gJy4vY29tcG9uZW50cy9iYWRnZS9pY29uLXRleHQtb3B0aW9uLWJhZGdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGF0YVRhYmxlIH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL2RhdGEtdGFibGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RmllbGQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGV4dC1maWVsZC90ZXh0LWZpZWxkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmFkaW8gfSBmcm9tICcuL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2stYm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRHJvcERvd24gfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcC1kb3duL2Ryb3AtZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbGxhcHNpYmxlTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9jb2xsYXBzaWJsZS1tZW51L2NvbGxhcHNpYmxlLW1lbnUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0IH0gZnJvbSAnLi9jb21wb25lbnRzL2VsZW1lbnRzL3RleHQvdGV4dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvb2x0aXAgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWxXaXRoRG91YmxlQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnRzL21vZGFsL21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbic7XG5leHBvcnQgeyBTcGlubmVyLCBJbmxpbmVMb2FkaW5nLCBPdmVybGF5TG9hZGluZyB9IGZyb20gJy4vY29tcG9uZW50cy9sb2FkaW5nJztcbmV4cG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vc3R5bGVzL3Rva2VuL2NvbG9ycyc7XG4iXSwibmFtZXMiOlsiY29sb3JzIiwidHJhbnNwYXJlbnQiLCJibGFjayIsIndoaXRlIiwiZ3JheUZhIiwiZ3JheUY0IiwiZ3JheUU0IiwiZ3JheUQ0IiwiZ3JheUExIiwiZ3JheTcxIiwiZ3JheTUyIiwiZ3JheTNmIiwiZ3JheTI3IiwiZ3JheTE4IiwicHVycGxlRjQiLCJwdXJwbGVFOSIsInB1cnBsZURkIiwicHVycGxlQzMiLCJwdXJwbGVBOCIsInB1cnBsZTk1IiwicHVycGxlNmYiLCJwdXJwbGU0YyIsInB1cnBsZTQxIiwicHVycGxlMzkiLCJhY2NlbnRSZWRGZiIsImFjY2VudFJlZEZmZSIsImFjY2VudFJlZEZiIiwiYWNjZW50UmVkRjMiLCJhY2NlbnRSZWRFOCIsImFjY2VudFJlZERmIiwiYWNjZW50UmVkQzkiLCJhY2NlbnRSZWRCMCIsImFjY2VudFJlZDhmIiwiYWNjZW50UmVkNmUiLCJhY2NlbnRQaW5rRmYiLCJhY2NlbnRQaW5rRmZlIiwiYWNjZW50UGlua0ZlIiwiYWNjZW50UGlua0ZkIiwiYWNjZW50UGlua0Y0IiwiYWNjZW50UGlua0VjIiwiYWNjZW50UGlua0Q5IiwiYWNjZW50UGlua0I5IiwiYWNjZW50UGluazkzIiwiYWNjZW50UGluazZlIiwiYWNjZW50TWFnZW50YUZlIiwiYWNjZW50TWFnZW50YUZjIiwiYWNjZW50TWFnZW50YUY4IiwiYWNjZW50TWFnZW50YUYyIiwiYWNjZW50TWFnZW50YUVjIiwiYWNjZW50TWFnZW50YUUxIiwiYWNjZW50TWFnZW50YUM4IiwiYWNjZW50TWFnZW50YUE5IiwiYWNjZW50TWFnZW50YTgzIiwiYWNjZW50TWFnZW50YTVlIiwiYWNjZW50Qmx1ZUYxIiwiYWNjZW50Qmx1ZUUzIiwiYWNjZW50Qmx1ZUM3IiwiYWNjZW50Qmx1ZUE1IiwiYWNjZW50Qmx1ZTgxIiwiYWNjZW50Qmx1ZTI1IiwiYWNjZW50Qmx1ZTFmIiwiYWNjZW50Qmx1ZTFlIiwiYWNjZW50Qmx1ZTFjIiwiYWNjZW50Qmx1ZTE2IiwiYWNjZW50TWludEVjIiwiYWNjZW50TWludEQxIiwiYWNjZW50TWludEE3IiwiYWNjZW50TWludDZlIiwiYWNjZW50TWludDJkIiwiYWNjZW50TWludDAxIiwiYWNjZW50TWludDBiIiwiYWNjZW50TWludDBmIiwiYWNjZW50TWludDExIiwiYWNjZW50TWludDEzIiwiYWNjZW50R3JlZW5FYyIsImFjY2VudEdyZWVuRDEiLCJhY2NlbnRHcmVlbkE3IiwiYWNjZW50R3JlZW42ZSIsImFjY2VudEdyZWVuNDEiLCJhY2NlbnRHcmVlbjIyIiwiYWNjZW50R3JlZW4xNiIsImFjY2VudEdyZWVuMjgiLCJhY2NlbnRHcmVlbjE2NiIsImFjY2VudEdyZWVuMTQiLCJhY2NlbnRZZWxsb3dGZiIsImFjY2VudFllbGxvd0ZlIiwiYWNjZW50WWVsbG93RmQiLCJhY2NlbnRZZWxsb3dGYyIsImFjY2VudFllbGxvd0ZiIiwiYWNjZW50WWVsbG93RmZiIiwiYWNjZW50WWVsbG93RTAiLCJhY2NlbnRZZWxsb3dCNSIsImFjY2VudFllbGxvdzhhIiwiYWNjZW50WWVsbG93NWYiLCJhY2NlbnRPcmFuZ2VGZiIsImFjY2VudE9yYW5nZUZmZSIsImFjY2VudE9yYW5nZUZlIiwiYWNjZW50T3JhbmdlRmQiLCJhY2NlbnRPcmFuZ2VGYiIsImFjY2VudE9yYW5nZUY5IiwiYWNjZW50T3JhbmdlRWEiLCJhY2NlbnRPcmFuZ2VDMiIsImFjY2VudE9yYW5nZTlhIiwiYWNjZW50T3JhbmdlN2MiLCJfX2Fzc2lnbiIsIk9iamVjdCIsImFzc2lnbiIsInQiLCJzIiwiaSIsIm4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJwIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJnZXRNZXJnZWRQcm9wcyIsInByb3BzIiwicHJvcHNXaXRoVHlwZXMiLCJfYSIsIl9iIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJ0YXJnZXRQcm9wcyIsInByZXZDbGFzc05hbWUiLCJwcmV2U3R5bGUiLCJfbG9vcF8xIiwia2V5IiwidmFsdWUiLCJwcm9wVHlwZSIsInR5cGUiLCJmb3JFYWNoIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJfX3Jlc3QiLCJlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwianN4IiwiX2pzeCIsImZvcndhcmRSZWYiLCJTbG90IiwiQmFzZUJhZGdlIiwicmVmIiwiYXNDaGlsZCIsImNoaWxkcmVuIiwicmVzdFByb3BzIiwiQ29tcCIsIlJvb3QiLCJjb25jYXQiLCJzaXplIiwiY29tbW9uQXZhdGFyUHJvcHMiLCJ2YWx1ZXMiLCJhdmF0YXJQcm9wcyIsImpzeHMiLCJfanN4cyIsIkF2YXRhciIsIkRlZmF1bHRBdmF0YXJJY29uIiwiQmFzZUF2YXRhciIsInNyYyIsImFsdCIsIkltYWdlIiwiRmFsbGJhY2siLCJ3aWR0aCIsImhlaWdodCIsImNsYXNzTmFtZXMiLCJiYWRnZU9wdGlvbiIsImF2YXRhckNsYXNzTmFtZSIsInBvc2l0aW9uIiwiZGlzcGxheSIsInJpZ2h0IiwiYm90dG9tIiwiZGlzcGxheU5hbWUiLCJTcGlubmVyIiwiX2MiLCJjb2xvciIsImJvcmRlciIsIm1hcCIsImJvcmRlckNvbG9yIiwiYW5pbWF0aW9uRGVsYXkiLCJCYXNlQnV0dG9uIiwiZGlzYWJsZWQiLCJsb2FkaW5nIiwibG9hZGluZ0NvbXBvbmVudCIsIm9uTW91c2VEb3duIiwicHJldmVudERlZmF1bHQiLCJ2YXJpYW50IiwiY29tbW9uQnV0dG9uUHJvcHMiLCJjdGFCdXR0b25Qcm9wcyIsIkNUQUJ1dHRvbiIsInRleHQiLCJsZWZ0SWNvbiIsInJpZ2h0SWNvbiIsImJ1dHRvbkNsYXNzTmFtZSIsIlRvb2x0aXAiLCJUb29sdGlwUm9vdCIsIlByb3ZpZGVyIiwiVG9vbHRpcFRyaWdnZXIiLCJUcmlnZ2VyIiwiVG9vbHRpcENvbnRlbnQiLCJkaXJlY3Rpb24iLCJQb3J0YWwiLCJDb250ZW50Iiwic2lkZSIsImNvbW1vblRvb2x0aXBQcm9wcyIsInRvb2x0aXBDb250ZW50UHJvcHMiLCJ0cmlnZ2VyIiwiY29udGVudCIsImRlbGF5RHVyYXRpb24iLCJjb250ZW50Q2xhc3NOYW1lIiwiZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQiLCJjb21tb25CYWRnZVByb3BzIiwia2V5cyIsImJhY2tncm91bmRDb2xvciIsImljb25UZXh0QmFkZ2VQcm9wcyIsImljb25UZXh0T3B0aW9uQmFkZ2VQcm9wcyIsIm9wdGlvbkJhZGdlUHJvcHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlJlYWN0IiwiT3B0aW9uQmFkZ2UiLCJvcHRpb24iLCJ0b29sdGlwIiwiYmFkZ2VDbGFzc05hbWUiLCJJY29uVGV4dEJhZGdlIiwiaWNvbiIsIkljb25UZXh0T3B0aW9uQmFkZ2UiLCJUYWJsZVJvb3QiLCJyZXN0IiwiVGFibGVIZWFkZXIiLCJUYWJsZUJvZHkiLCJUYWJsZVJvdyIsIlRhYmxlQ2VsbCIsIkhlYWRlciIsIkJvZHkiLCJSb3ciLCJDZWxsIiwiaGVhZGVySGVpZ2h0Iiwicm93SGVpZ2h0IiwiZGF0YVRhYmxlQ29tbW9uUHJvcHMiLCJkYXRhVGFibGVIZWFkZXJQcm9wcyIsImRhdGFUYWJsZVJvd1Byb3BzIiwiZGF0YVRhYmxlQ2VsbFByb3BzIiwiY2VsbEhlaWdodCIsIkRhdGFUYWJsZSIsInJvd3MiLCJjb2x1bW5zIiwiZml4ZWRSb3dzSW5kZXgiLCJoZWFkZXJTdHlsZSIsInJvd1N0eWxlIiwiY2VsbFN0eWxlIiwiaXRlbSIsImluZGV4IiwiZWwiLCJsZWZ0UG9zaXRpb24iLCJjZWxscyIsInBhcmVudEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwib2Zmc2V0V2lkdGgiLCJsZWZ0Iiwib25DbGljayIsIm9uQ2xpY2tSb3ciLCJpZCIsImNvbHVtbiIsImNvbHVtbkluZGV4IiwiY29sdW1uS2V5IiwiY2VsbERhdGEiLCJjZWxsVmFsdWUiLCJqIiwib25DbGlja0NlbGwiLCJUZXh0Iiwid2VpZ2h0IiwidGV4dEFsaWduIiwidGV4dERlY29yYXRpb24iLCJ3b3JkQnJlYWsiLCJ3aGl0ZVNwYWNlIiwiYXMiLCJ0ZXN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VTdGF0ZSIsIlRleHRGaWVsZENvbnRleHQiLCJvbkNoYW5nZSIsIlRleHRGaWVsZFJvb3QiLCJkZWZhdWx0VmFsdWUiLCJpc0NvbnRyb2xsZWQiLCJ1bmRlZmluZWQiLCJpbm5lclZhbHVlIiwic2V0SW5uZXJWYWx1ZSIsImlucHV0VmFsdWUiLCJoYW5kbGVDaGFuZ2UiLCJ0YXJnZXQiLCJUZXh0TGFiZWwiLCJJbnB1dEZpZWxkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwiaW5wdXRDbGFzc05hbWUiLCJIZWxwZXJUZXh0IiwidGV4dEZpZWxkUHJvcHMiLCJUZXh0RmllbGQiLCJtZXJnZWRDbGFzc05hbWUiLCJ0aXRsZSIsImhlbHBlclRleHQiLCJpc0Vycm9yIiwiaW5wdXRXcmFwcGVyQ2xhc3NOYW1lIiwidXNlRXh0ZXJuYWxTdGF0ZSIsInByb3AiLCJoYW5kbGVyIiwiZGVmYXVsdFByb3AiLCJpbm5lclN0YXRlIiwic2V0SW5uZXJTdGF0ZSIsImlzQ29udHJvbGxlZEJ5RXh0ZXJuYWwiLCJzZXRWYWx1ZSIsImhhbmRsZWRWYWx1ZSIsInNldHRlciIsInZhbHVlXzEiLCJDaGlsZHJlbiIsImNsb25lRWxlbWVudCIsImlzVmFsaWRFbGVtZW50IiwiQ29tcG9zZXIiLCJjb21wb3NlclByb3BzIiwiY2hpbGRBcnJheSIsInRvQXJyYXkiLCJFcnJvciIsImlzVmFsaWRDaGlsZCIsImNoaWxkIiwiY2hpbGRSZWYiLCJnZXRFbGVtZW50UmVmIiwibWVyZ2VkUHJvcHMiLCJtZXJnZVByb3BzIiwiY29tcG9zZVJlZnMiLCJjaGlsZFByb3BzIiwib3ZlcnJpZGVQcm9wcyIsInByb3BOYW1lIiwiY29tcG9zZXJQcm9wVmFsdWUiLCJjaGlsZFByb3BWYWx1ZSIsImlzSGFuZGxlciIsImFyZ3MiLCJfaSIsImVsZW1lbnQiLCJjaGlsZEdldHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldCIsIm1heVdhcm5JbkNoaWxkIiwiaXNSZWFjdFdhcm5pbmciLCJnZXR0ZXIiLCJtYXlXYXJuIiwicmVmcyIsIm5vZGUiLCJjdXJyZW50IiwiUmFkaW9CdXR0b24iLCJSYWRpb0NvbnRleHQiLCJzZWxlY3RlZCIsInBhZGRpbmciLCJSYWRpb0luZGljYXRvciIsImNoZWNrZWQiLCJSYWRpb0xhYmVsIiwiUmFkaW9PcHRpb25Hcm91cCIsIm9wdGlvbnMiLCJSYWRpb1Jvb3QiLCJleHRlcm5hbE9uQ2hhbmdlIiwic2VsZWN0ZWRJZCIsInNldFNlbGVjdGVkSWQiLCJJbmRpY2F0b3IiLCJMYWJlbCIsIk9wdGlvbkdyb3VwIiwiQnV0dG9uIiwiUmFkaW8iLCJhbGlnbkl0ZW1zIiwiZ2FwIiwibGFiZWwiLCJDaGVja2JveCIsIkNoZWNrQm94Q29udGV4dCIsIkNoZWNrQm94Um9vdCIsIm9uQ2hlY2tlZENoYW5nZSIsIkNoZWNrQm94TGFiZWwiLCJwcmV2ZW50Q2hhbmdlT25DbGljayIsImh0bWxGb3IiLCJzdG9wUHJvcGFnYXRpb24iLCJDaGVja0JveEluZGljYXRvciIsImNvbW1vbkNoZWNrQm94SW5kaWNhdG9yUHJvcHMiLCJjaGVja0JveEluZGljYXRvclByb3BzIiwiQ2hlY2tCb3hJY29uIiwiQ2hlY2tCb3giLCJyb290Q2xhc3NOYW1lIiwiaW5kaWNhdG9yQ2xhc3NOYW1lIiwiY2hlY2tCb3hQcm9wcyIsImNoZWNrQm94Um9vdENsYXNzTmFtZSIsImNoZWNrQm94SW5kaWNhdG9yQ2xhc3NOYW1lIiwiU2VsZWN0IiwiRHJvcERvd25Sb290IiwiZGVmYXVsdE9wZW4iLCJvcGVuIiwib25PcGVuQ2hhbmdlIiwib25WYWx1ZUNoYW5nZSIsIkRyb3BEb3duVHJpZ2dlciIsIkRyb3BEb3duVmFsdWUiLCJWYWx1ZSIsIkRyb3BEb3duQ29udGVudCIsImFsaWduIiwiVmlld3BvcnQiLCJEcm9wRG93bkl0ZW0iLCJJdGVtIiwiSXRlbVRleHQiLCJkcm9wRG93blNpbmdsZVByb3BzIiwiQ2hldnJvbkRvd25JY29uIiwiRHJvcERvd24iLCJyZW5kZXJWYWx1ZSIsInJlbmRlck9wdGlvbiIsIm9wZW5Qcm9wIiwib25PcGVuQ2hhbmdlUHJvcCIsImRyb3BEb3duUHJvcHMiLCJ0cmlnZ2VyQ2xhc3NOYW1lIiwic2V0T3BlbiIsImNsb3NlIiwiaXNPcGVuIiwiQ29sbGFwc2libGUiLCJDb2xsYXBzaWJsZU1lbnVSb290IiwiQ29sbGFwc2libGVNZW51VHJpZ2dlciIsIkNvbGxhcHNpYmxlTWVudUNvbnRlbnQiLCJjb2xsYXBzaWJsZU1lbnVQcm9wcyIsIkNvbGxhcHNpYmxlTWVudSIsIml0ZW1zIiwiYWN0aXZlS2V5Iiwib25BY3RpdmVLZXlDaGFuZ2UiLCJpbmRlbnQiLCJjaGV2cm9uIiwiaGFzQWN0aXZlRGVzY2VuZGFudCIsInNvbWUiLCJyZW5kZXJJdGVtcyIsInRhcmdldEl0ZW1zIiwiZGVwdGgiLCJoYXNDaGlsZHJlbiIsImlzQWN0aXZlIiwicGFkZGluZ0xlZnQiLCJpdGVtQ2xhc3NOYW1lIiwiaHJlZiIsIm9uU2VsZWN0IiwiRGlhbG9nIiwiTW9kYWxSb290IiwiTW9kYWxDb250YWluZXIiLCJmb3JjZU1vdW50IiwiT3ZlcmxheSIsIk1vZGFsVHJpZ2dlciIsIk1vZGFsVGl0bGUiLCJUaXRsZSIsIk1vZGFsU3ViVGl0bGUiLCJEZXNjcmlwdGlvbiIsIk1vZGFsQ2xvc2UiLCJDbG9zZSIsIkNvbnRhaW5lciIsIlN1YlRpdGxlIiwiY29tbW9uTW9kYWxQcm9wcyIsIm1vZGFsV2l0aERvdWJsZUJ1dHRvblByb3BzIiwiQ2xvc2VJY29uIiwic3ViVGl0bGUiLCJ0aXRsZUljb24iLCJzaG93Q2xvc2VJY29uIiwic2hvd1RpdGxlTGluZSIsIm1vZGFsQ29udGFpbmVyQ2xhc3NOYW1lIiwiQ29sdW1uIiwiTW9kYWxXaXRoRG91YmxlQnV0dG9uIiwiSW5saW5lTG9hZGluZyIsImp1c3RpZnlDb250ZW50IiwiaW5kaWNhdG9yQ29sb3IiLCJib3JkZXJXaWR0aCIsIk92ZXJsYXlMb2FkaW5nIiwibWVzc2FnZSIsInNwaW5uZXJDb2xvciIsIl9kIiwiYmFja2Ryb3BPcGFjaXR5IiwiX2UiLCJ6SW5kZXgiLCJyb2xlIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=
|
|
14274
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTywwR0FBMEcsS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsTUFBTSxLQUFLLFlBQVksYUFBYSxNQUFNLEtBQUssWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sS0FBSyxVQUFVLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFB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Tyw2QkFBNkIsNENBQTRDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sK0JBQStCLDhDQUE4QyxPQUFPLCtCQUErQiw4Q0FBOEMsT0FBTywrQkFBK0IsOENBQThDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw0QkFBNEIsMkNBQTJDLE9BQU8sNEJBQTRCLDJDQUEyQyxPQUFPLDRCQUE0QiwyQ0FBMkMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDZCQUE2Qiw0Q0FBNEMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDZCQUE2Qiw0Q0FBNEMsT0FBTyw2QkFBNkIsNENBQTRDLE9BQU8sNkJBQTZCLDRDQUE0QyxPQUFPLDhCQUE4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QWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLGFBQWEsY0FBYyxhQUFhLHVDQUF1QyxtQ0FBbUMsbUNBQW1DLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyx1Q0FBdUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLG9DQUFvQyxtQ0FBbUMsbUNBQW1DLG1DQUFtQyxtQ0FBbUMsbUNBQW1DLG1DQUFtQyxtQ0FBbUMsbUNBQW1DLHNDQUFzQyxxQ0FBcUMsb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyx5Q0FBeUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsc0NBQXNDLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLHNDQUFzQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0Msb0NBQW9DLG9DQUFvQyx1Q0FBdUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHNDQUFzQyxxQ0FBcUMsd0NBQXdDLHNDQUFzQyxzQ0FBc0Ms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RUFDbkJDLFFBQVEsRUFBRSxTQUFTO0VBQ25CQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsV0FBVyxFQUFFLFNBQVM7RUFDdEJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsV0FBVyxFQUFFLFNBQVM7RUFDdEJDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxXQUFXLEVBQUUsU0FBUztFQUN0QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxlQUFlLEVBQUUsU0FBUztFQUMxQkMsZUFBZSxFQUFFLFNBQVM7RUFDMUJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsYUFBYSxFQUFFLFNBQVM7RUFDeEJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsYUFBYSxFQUFFLFNBQVM7RUFDeEJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGFBQWEsRUFBRSxTQUFTO0VBQ3hCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGVBQWUsRUFBRSxTQUFTO0VBQzFCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFLFNBQVM7RUFDekJDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxjQUFjLEVBQUUsU0FBUztFQUN6QkMsY0FBYyxFQUFFO0FBQ3BCLENBQUMsQzs7QUN4R0QsSUFB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEtBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRLEVBQUUsMEJBQVE7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsK0JBQStCLEtBQUs7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsWUFBWTtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxZQUFZO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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RDtBQUNvQjs7O0FDRjNFO0FBQzRCO0FBQ21DO0FBQ087QUFDRztBQUNLO0FBQ2E7QUFDdEI7QUFDSztBQUNkO0FBQ1c7QUFDQTtBQUNxQjtBQUMxQjtBQUNBO0FBQzZCO0FBQ2pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vZXh0ZXJuYWwgbW9kdWxlIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIixcIm1vZHVsZVwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy9qdXN0aWZ5LWNvbnRlbnQuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvZmxleC1kaXJlY3Rpb24uY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY2hlY2stYm94L2NoZWNrLWJveC1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL3Jlc2V0LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vY3Vyc29yLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvcG9zaXRpb24uY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3RleHQtZmllbGQvdGV4dC1maWVsZC1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL292ZXJmbG93LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy9hbGlnbi1pdGVtcy5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vcmFkaXVzLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vZm9udC5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9iYWRnZS1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLXN0eWxlLmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmxpbmUtbG9hZGluZy9pbmxpbmUtbG9hZGluZy1zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9lbGVtZW50cy90ZXh0L3RleHQtc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8tc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtc3R5bGUuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL3N0eWxlcy90b2tlbi9jb2xvci5jc3MiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL2Rpc3BsYXkuY3NzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzPzUyMGUiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vc3R5bGVzL2luZGV4LmNzcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvaW5kZXguY3NzPzJkYjQiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtL2V4dGVybmFsIG1vZHVsZSB7XCJyb290XCI6XCJqc3gtcnVudGltZVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC9qc3gtcnVudGltZVwiLFwiY29tbW9uanNcIjpcInJlYWN0L2pzeC1ydW50aW1lXCIsXCJhbWRcIjpcInJlYWN0L2pzeC1ydW50aW1lXCIsXCJtb2R1bGVcIjpcInJlYWN0L2pzeC1ydW50aW1lXCJ9Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcy5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9zdHlsZXMvdG9rZW4vY29sb3JzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnMvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1zbG90L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2UvYmFzZS1iYWRnZS50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtY29udGV4dC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWYvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vZXh0ZXJuYWwgbW9kdWxlIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIixcIm1vZHVsZVwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdXNlLWlzLWh5ZHJhdGVkL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtYXZhdGFyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2Fzc2V0cy9pY29ucy9kZWZhdWx0QXZhdGFyLnN2ZyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2F2YXRhci9iYXNlLWF2YXRhci50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2J1dHRvbi9iYXNlLWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYnV0dG9uL2N0YS1idXR0b24udHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdXNlLWVzY2FwZS1rZXlkb3duL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtZGlzbWlzc2FibGUtbGF5ZXIvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1pZC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3JlYWN0LWRvbS9kaXN0L2Zsb2F0aW5nLXVpLnJlYWN0LWRvbS5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1hcnJvdy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcG9wcGVyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcG9ydGFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJlc2VuY2UvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC11c2UtY29udHJvbGxhYmxlLXN0YXRlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtdG9vbHRpcC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvYmFzZS10b29sdGlwLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC1wcm9wcy50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9iYWRnZS1wcm9wcy50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzcz9lYTdmIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvYmFkZ2Uvb3B0aW9uLWJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2JhZGdlL2ljb24tdGV4dC1iYWRnZS50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9iYWRnZS9pY29uLXRleHQtb3B0aW9uLWJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL3RhYmxlL2Jhc2UtdGFibGUudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvdGFibGUvdGFibGUtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90YWJsZS9kYXRhLXRhYmxlLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2VsZW1lbnRzL3RleHQvdGV4dC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL2Jhc2UtdGV4dC1maWVsZC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL3RleHQtZmllbGQtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL3RleHQtZmllbGQudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2hlbHBlcnMvaG9va3MvdXNlRXh0ZXJuYWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2NvcmUvY29tcG9zZXIvaW5kZXgudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvcmFkaW8vYmFzZS1yYWRpby50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9yYWRpby9yYWRpby50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vYXNzZXRzL2ljb25zL2NoZWNrLnN2ZyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXVzZS1wcmV2aW91cy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY2hlY2stYm94L2Jhc2UtY2hlY2stYm94LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2NoZWNrLWJveC9jaGVjay1ib3gtcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2stYm94LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9hc3NldHMvaWNvbnMvY2hldnJvbkRvd24uc3ZnIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvbnVtYmVyL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtY29sbGVjdGlvbi9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWRpcmVjdGlvbi9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWZvY3VzLWd1YXJkcy9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWZvY3VzLXNjb3BlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L2Fzc2lnblJlZi5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VSZWYuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlTWVyZ2VSZWYuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L2V4cG9ydHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvYWdncmVzaXZlQ2FwdHVyZS5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9oYW5kbGVTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvU2lkZUVmZmVjdC5qcyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3Qtc2VsZWN0L2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvZHJvcC1kb3duL2Jhc2UtZHJvcC1kb3duLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tcHJvcHMudHMiLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duLnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LWNvbGxhcHNpYmxlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9iYXNlLWNvbGxhcHNpYmxlLW1lbnUudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LXByb3BzLnRzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvY29sbGFwc2libGUtbWVudS9jb2xsYXBzaWJsZS1tZW51LnRzeCIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9hc3NldHMvaWNvbnMvbXVsdGlmbHkuc3ZnIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtZGlhbG9nL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbW9kYWwvYmFzZS1tb2RhbC50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1wcm9wcy50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC13aXRoLWRvdWJsZS1idXR0b24udHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmxpbmUtbG9hZGluZy9pbmxpbmUtbG9hZGluZy50c3giLCJ3ZWJwYWNrOi8vQG51cmloYXVzL3dlYi1kZXNpZ24tc3lzdGVtLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmcudHN4Iiwid2VicGFjazovL0BudXJpaGF1cy93ZWItZGVzaWduLXN5c3RlbS8uL2NvbXBvbmVudHMvbG9hZGluZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AbnVyaWhhdXMvd2ViLWRlc2lnbi1zeXN0ZW0vLi9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWF2YXRhciB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICYuYXZhdGFyLWltYWdlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qIGF2YXRhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4uYXZhdGFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgJi5zaXplLXhsIHtcbiAgICB3aWR0aDogMTI0cHg7XG4gICAgaGVpZ2h0OiAxMjRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIHdpZHRoOiA3NHB4O1xuICAgIGhlaWdodDogNzRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIHdpZHRoOiA1OHB4O1xuICAgIGhlaWdodDogNThweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaXplLXMge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xuXG4gICAgJi5iYWRnZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgfVxuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixnQkFBZ0I7O0VBRWhCO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWixpQkFBaUI7RUFDbkI7QUFDRjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7O0VBRXZCO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGOztFQUVBO0lBQ0UsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7O0lBRXpCO01BQ0UsV0FBVztNQUNYLFlBQVk7SUFDZDtFQUNGO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYXZhdGFyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcblxcbiAgJi5hdmF0YXItaW1hZ2Uge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogYXZhdGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uYXZhdGFyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFxuICAmLnNpemUteGwge1xcbiAgICB3aWR0aDogMTI0cHg7XFxuICAgIGhlaWdodDogMTI0cHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNGU0ZTc7XFxuXFxuICAgICYuYmFkZ2Utb3B0aW9uIHtcXG4gICAgICB3aWR0aDogNDhweDtcXG4gICAgICBoZWlnaHQ6IDQ4cHg7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDc0cHg7XFxuICAgIGhlaWdodDogNzRweDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTRlNztcXG5cXG4gICAgJi5iYWRnZS1vcHRpb24ge1xcbiAgICAgIHdpZHRoOiAzMHB4O1xcbiAgICAgIGhlaWdodDogMzBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICB3aWR0aDogNThweDtcXG4gICAgaGVpZ2h0OiA1OHB4O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNGU3O1xcblxcbiAgICAmLmJhZGdlLW9wdGlvbiB7XFxuICAgICAgd2lkdGg6IDI0cHg7XFxuICAgICAgaGVpZ2h0OiAyNHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICAmLnNpemUtcyB7XFxuICAgIHdpZHRoOiA0MHB4O1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNGU0ZTc7XFxuXFxuICAgICYuYmFkZ2Utb3B0aW9uIHtcXG4gICAgICB3aWR0aDogMThweDtcXG4gICAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLm51cmktanVzdGlmeS1jb250ZW50LXN0YXJ0IHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5udXJpLWp1c3RpZnktY29udGVudC1lbmQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLm51cmktanVzdGlmeS1jb250ZW50LWFyb3VuZCB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xufVxuXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9qdXN0aWZ5LWNvbnRlbnQuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0UsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsNkJBQTZCO0FBQy9CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLWp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5udXJpLWp1c3RpZnktY29udGVudC1jZW50ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbi5udXJpLWp1c3RpZnktY29udGVudC1lbmQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLm51cmktanVzdGlmeS1jb250ZW50LWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG5cXG4ubnVyaS1qdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWZsZXgtcm93IHtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cblxuLm51cmktZmxleC1yb3ctcmV2ZXJzZSB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbn1cblxuLm51cmktZmxleC1jb2x1bW4ge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4ubnVyaS1mbGV4LWNvbHVtbi1yZXZlcnNlIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvZmxleC1kaXJlY3Rpb24uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0Usc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsOEJBQThCO0FBQ2hDXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLWZsZXgtcm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5udXJpLWZsZXgtcm93LXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG5cXG4ubnVyaS1mbGV4LWNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4ubnVyaS1mbGV4LWNvbHVtbi1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1jaGVjay1ib3gge1xuICAmLmxhYmVsIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGNoZWNrLWJveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5jaGVjay1ib3gge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuLmNoZWNrLWJveC1pbmRpY2F0b3Ige1xuICAmLndyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICB9XG5cbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcblxuICAmLnNpemUtbCB7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gIH1cblxuICAmW2RhdGEtc3RhdGU9J3VuY2hlY2tlZCddIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB9XG5cbiAgJltkYXRhLXN0YXRlPSdjaGVja2VkJ10ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gIH1cblxuICAmW2RhdGEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvY2hlY2stYm94L2NoZWNrLWJveC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLDhCQUE4QjtJQUM5QixzQ0FBc0M7SUFDdEMsaUNBQWlDO0VBQ25DO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsU0FBUzs7RUFFVCw2QkFBNkI7RUFDN0IsWUFBWTtBQUNkOztBQUVBO0VBQ0U7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsZ0RBQWdEO0VBQ2xEOztFQUVBLFdBQVc7RUFDWCxZQUFZOztFQUVaO0lBQ0UsV0FBVztJQUNYLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFdBQVc7SUFDWCxZQUFZO0VBQ2Q7O0VBRUE7SUFDRSxXQUFXO0lBQ1gsWUFBWTtFQUNkOztFQUVBO0lBQ0Usc0JBQXNCO0VBQ3hCOztFQUVBO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiw4Q0FBOEM7RUFDaEQ7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1jaGVjay1ib3gge1xcbiAgJi5sYWJlbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBjaGVjay1ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmNoZWNrLWJveCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogMTBweDtcXG5cXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uY2hlY2stYm94LWluZGljYXRvciB7XFxuICAmLndyYXBwZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICB9XFxuXFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDI0cHg7XFxuICAgIGhlaWdodDogMjRweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1tIHtcXG4gICAgd2lkdGg6IDIwcHg7XFxuICAgIGhlaWdodDogMjBweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gIH1cXG5cXG4gICZbZGF0YS1zdGF0ZT0ndW5jaGVja2VkJ10ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgfVxcblxcbiAgJltkYXRhLXN0YXRlPSdjaGVja2VkJ10ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xcbiAgfVxcblxcbiAgJltkYXRhLWRpc2FibGVkPSd0cnVlJ10ge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAvKiDrqqjrk6Ag7JqU7IaM7J2YIOuniOynhOqzvCDtjKjrlKkg7KCc6rGwICovXG4qIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiDquLDrs7gg7Y+w7Yq4IOyEpOyglSDrsI8g7YWN7Iqk7Yq4IOugjOuNlOungSDstZzsoIHtmZQgKi9cbmh0bWwge1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4vKiDrpqzsiqTtirgg7Iqk7YOA7J28IOygnOqxsCAqL1xudWwsXG5vbCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi8qIOunge2BrCDsiqTtg4Dsnbwg7LSI6riw7ZmUICovXG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLyog67KE7Yq8IOyKpO2DgOydvCDstIjquLDtmZQgKi9cbmJ1dHRvbiB7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiDsnbTrr7jsp4Ag6rSA66CoIOyEpOyglSAqL1xuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDtj7wg7JqU7IaMIOyKpO2DgOydvCDstIjquLDtmZQgKi9cbmlucHV0LFxudGV4dGFyZWEsXG5zZWxlY3Qge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG5wIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Jlc2V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSxxQkFBcUI7QUFDckI7RUFDRSxTQUFTO0VBQ1QsVUFBVTtFQUNWLHNCQUFzQjtBQUN4Qjs7QUFFQSwyQkFBMkI7QUFDM0I7RUFDRSw4QkFBOEI7RUFDOUIsbUNBQW1DO0VBQ25DLGtDQUFrQztBQUNwQzs7QUFFQSxlQUFlO0FBQ2Y7O0VBRUUsZ0JBQWdCO0FBQ2xCOztBQUVBLGVBQWU7QUFDZjtFQUNFLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBLGVBQWU7QUFDZjtFQUNFLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsZUFBZTtBQUNqQjs7QUFFQSxjQUFjO0FBQ2Q7RUFDRSxlQUFlO0VBQ2YsWUFBWTtFQUNaLGNBQWM7QUFDaEI7O0FBRUEsaUJBQWlCO0FBQ2pCOzs7RUFHRSxvQkFBb0I7RUFDcEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGdCQUFnQjtBQUNsQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiDrqqjrk6Ag7JqU7IaM7J2YIOuniOynhOqzvCDtjKjrlKkg7KCc6rGwICovXFxuKiB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuLyog6riw67O4IO2PsO2KuCDshKTsoJUg67CPIO2FjeyKpO2KuCDroIzrjZTrp4Eg7LWc7KCB7ZmUICovXFxuaHRtbCB7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxufVxcblxcbi8qIOumrOyKpO2KuCDsiqTtg4Dsnbwg7KCc6rGwICovXFxudWwsXFxub2wge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuLyog66eB7YGsIOyKpO2DgOydvCDstIjquLDtmZQgKi9cXG5hIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4vKiDrsoTtirwg7Iqk7YOA7J28IOy0iOq4sO2ZlCAqL1xcbmJ1dHRvbiB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4vKiDsnbTrr7jsp4Ag6rSA66CoIOyEpOyglSAqL1xcbmltZyB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLyog7Y+8IOyalOyGjCDsiqTtg4Dsnbwg7LSI6riw7ZmUICovXFxuaW5wdXQsXFxudGV4dGFyZWEsXFxuc2VsZWN0IHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5wIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLXRoZW1lIHtcbiAgLS1jdXJzb3ItYnV0dG9uOiBwb2ludGVyO1xuICAtLWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4gIC0tY3Vyc29yLWxpbms6IHBvaW50ZXI7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy90b2tlbi9jdXJzb3IuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usd0JBQXdCO0VBQ3hCLDhCQUE4QjtFQUM5QixzQkFBc0I7QUFDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLm51cmktdGhlbWUge1xcbiAgLS1jdXJzb3ItYnV0dG9uOiBwb2ludGVyO1xcbiAgLS1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkO1xcbiAgLS1jdXJzb3ItbGluazogcG9pbnRlcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS1wb3NpdGlvbi1zdGF0aWMge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4ubnVyaS1wb3NpdGlvbi1yZWxhdGl2ZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51cmktcG9zaXRpb24tYWJzb2x1dGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi5udXJpLXBvc2l0aW9uLWZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuXG4ubnVyaS1wb3NpdGlvbi1zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvcG9zaXRpb24uY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIubnVyaS1wb3NpdGlvbi1zdGF0aWMge1xcbiAgcG9zaXRpb246IHN0YXRpYztcXG59XFxuXFxuLm51cmktcG9zaXRpb24tcmVsYXRpdmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ubnVyaS1wb3NpdGlvbi1hYnNvbHV0ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5udXJpLXBvc2l0aW9uLWZpeGVkIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG59XFxuXFxuLm51cmktcG9zaXRpb24tc3RpY2t5IHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmJhc2UtY29sbGFwc2libGUtbWVudSB7XG4gICYudHJpZ2dlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDEwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogY29sbGFwc2libGUtbWVudSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmNvbGxhcHNpYmxlLW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDRweDtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1tIHtcbiAgLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1sIHtcbiAgLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gIH1cbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcbiAgYWxsOiB1bnNldDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IDEwcHg7XG5cbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtdGV4dC1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTNmKSk7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1ob3Zlci1iZy1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KSk7XG4gIH1cblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1hY3RpdmUtYmctY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCkpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtNDEpKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tY29sbGFwc2libGUtbWVudS1hY3RpdmUtZm9udC13ZWlnaHQsIDYwMCk7XG4gIH1cblxuICAmOmRpc2FibGVkLFxuICAmW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBjb2xvcjogdmFyKC0tY29sbGFwc2libGUtbWVudS1kaXNhYmxlZC10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpKTtcbiAgfVxufVxuXG4uY29sbGFwc2libGUtbWVudS1sZWZ0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG4uY29sbGFwc2libGUtbWVudS1sZWZ0ID4gKiB7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtY2hldnJvbiB7XG4gIHdpZHRoOiAxOHB4O1xuICBoZWlnaHQ6IDE4cHg7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktNzEpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTYwbXMgZWFzZTtcbn1cblxuLmJhc2UtY29sbGFwc2libGUtbWVudS50cmlnZ2VyW2RhdGEtc3RhdGU9J29wZW4nXSAuY29sbGFwc2libGUtbWVudS1jaGV2cm9uIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmNvbGxhcHNpYmxlLW1lbnUtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9jb2xsYXBzaWJsZS1tZW51L2NvbGxhcHNpYmxlLW1lbnUtc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0U7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5QixTQUFTO0lBQ1QsV0FBVztFQUNiO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsUUFBUTtBQUNWOztBQUVBO0VBQ0U7SUFDRSxZQUFZO0VBQ2Q7QUFDRjs7QUFFQTtFQUNFO0lBQ0UsWUFBWTtFQUNkO0FBQ0Y7O0FBRUE7RUFDRSxVQUFVO0VBQ1Ysc0JBQXNCO0VBQ3RCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLFNBQVM7O0VBRVQsV0FBVztFQUNYLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsZUFBZTs7RUFFZiw4QkFBOEI7RUFDOUIsa0NBQWtDO0VBQ2xDLHNDQUFzQztFQUN0Qyx1RUFBdUU7O0VBRXZFO0lBQ0Usc0ZBQXNGO0VBQ3hGOztFQUVBO0lBQ0UsdUZBQXVGO0lBQ3ZGLDhFQUE4RTtJQUM5RSw0REFBNEQ7RUFDOUQ7O0VBRUE7O0lBRUUsbUJBQW1CO0lBQ25CLGdGQUFnRjtFQUNsRjtBQUNGOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixTQUFTO0VBQ1QsWUFBWTtBQUNkOztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixtQ0FBbUM7RUFDbkMsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixRQUFRO0VBQ1IsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1jb2xsYXBzaWJsZS1tZW51IHtcXG4gICYudHJpZ2dlciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgZ2FwOiAxMHB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBjb2xsYXBzaWJsZS1tZW51ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1tIHtcXG4gIC5jb2xsYXBzaWJsZS1tZW51LXJvdyB7XFxuICAgIGhlaWdodDogNDBweDtcXG4gIH1cXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUuc2l6ZS1sIHtcXG4gIC5jb2xsYXBzaWJsZS1tZW51LXJvdyB7XFxuICAgIGhlaWdodDogNDhweDtcXG4gIH1cXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUtcm93IHtcXG4gIGFsbDogdW5zZXQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBnYXA6IDEwcHg7XFxuXFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LXRleHQtY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZikpO1xcblxcbiAgJjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtaG92ZXItYmctY29sb3IsIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCkpO1xcbiAgfVxcblxcbiAgJi5pcy1hY3RpdmUge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS1iZy1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xsYXBzaWJsZS1tZW51LWFjdGl2ZS10ZXh0LWNvbG9yLCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtNDEpKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtYWN0aXZlLWZvbnQtd2VpZ2h0LCA2MDApO1xcbiAgfVxcblxcbiAgJjpkaXNhYmxlZCxcXG4gICZbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgY29sb3I6IHZhcigtLWNvbGxhcHNpYmxlLW1lbnUtZGlzYWJsZWQtdGV4dC1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKSk7XFxuICB9XFxufVxcblxcbi5jb2xsYXBzaWJsZS1tZW51LWxlZnQge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uY29sbGFwc2libGUtbWVudS1sZWZ0ID4gKiB7XFxuICBtaW4td2lkdGg6IDA7XFxufVxcblxcbi5jb2xsYXBzaWJsZS1tZW51LWNoZXZyb24ge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxKTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xcbn1cXG5cXG4uYmFzZS1jb2xsYXBzaWJsZS1tZW51LnRyaWdnZXJbZGF0YS1zdGF0ZT0nb3BlbiddIC5jb2xsYXBzaWJsZS1tZW51LWNoZXZyb24ge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbGxhcHNpYmxlLW1lbnUtY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMnB4O1xcbiAgbWFyZ2luLXRvcDogMnB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRleHQtZmllbGQge1xuICAmLmlucHV0IHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGJhc2UtdGV4dC1maWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi50ZXh0LWZpZWxkLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4udGV4dC1maWVsZC1pbnB1dC13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IDEwcHg7XG5cbiAgcGFkZGluZzogMCAxNHB4O1xuXG4gICYuc2l6ZS1tIHtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gIH1cblxuICAmLnNpemUtbCB7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICB9XG5cbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xuXG4gICY6aGFzKFtkYXRhLWRpc2FibGVkPSd0cnVlJ10pIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgfVxuXG4gICY6Zm9jdXMtd2l0aGluIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICB9XG5cbiAgPiBpbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLnRleHQtZmllbGQtaGVscGVyLXRleHQge1xuICBtYXJnaW4tdG9wOiA0cHg7XG5cbiAgJi5lcnJvciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZGYpO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvdGV4dC1maWVsZC90ZXh0LWZpZWxkLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYiw2QkFBNkI7O0lBRTdCLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsc0NBQXNDOztJQUV0QztNQUNFLG1DQUFtQztJQUNyQztFQUNGO0FBQ0Y7O0FBRUE7Ozs7b0dBSW9HOztBQUVwRztFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLFNBQVM7O0VBRVQsZUFBZTs7RUFFZjtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQSxrQkFBa0I7RUFDbEIsOENBQThDOztFQUU5QztJQUNFLDBDQUEwQztJQUMxQyw4Q0FBOEM7RUFDaEQ7O0VBRUE7SUFDRSw4Q0FBOEM7RUFDaEQ7O0VBRUE7SUFDRSxXQUFXO0VBQ2I7QUFDRjs7QUFFQTtFQUNFLGVBQWU7O0VBRWY7SUFDRSxpQ0FBaUM7RUFDbkM7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS10ZXh0LWZpZWxkIHtcXG4gICYuaW5wdXQge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcblxcbiAgICAmOjpwbGFjZWhvbGRlciB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBiYXNlLXRleHQtZmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLnRleHQtZmllbGQtdGl0bGUge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG5cXG4udGV4dC1maWVsZC1pbnB1dC13cmFwcGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgZ2FwOiAxMHB4O1xcblxcbiAgcGFkZGluZzogMCAxNHB4O1xcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuICB9XFxuXFxuICAmLnNpemUtbCB7XFxuICAgIGhlaWdodDogNTBweDtcXG4gIH1cXG5cXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XFxuXFxuICAmOmhhcyhbZGF0YS1kaXNhYmxlZD0ndHJ1ZSddKSB7XFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gIH1cXG5cXG4gICY6Zm9jdXMtd2l0aGluIHtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gIH1cXG5cXG4gID4gaW5wdXQge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG59XFxuXFxuLnRleHQtZmllbGQtaGVscGVyLXRleHQge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcblxcbiAgJi5lcnJvciB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS1vdmVyZmxvdy12aXNpYmxlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi5udXJpLW92ZXJmbG93LWhpZGRlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5udXJpLW92ZXJmbG93LXNjcm9sbCB7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbi5udXJpLW92ZXJmbG93LWF1dG8ge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLm51cmktb3ZlcmZsb3cteC12aXNpYmxlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbn1cblxuLm51cmktb3ZlcmZsb3cteC1oaWRkZW4ge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5cbi5udXJpLW92ZXJmbG93LXgtc2Nyb2xsIHtcbiAgb3ZlcmZsb3cteDogc2Nyb2xsO1xufVxuXG4ubnVyaS1vdmVyZmxvdy14LWF1dG8ge1xuICBvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4ubnVyaS1vdmVyZmxvdy15LXZpc2libGUge1xuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuXG4ubnVyaS1vdmVyZmxvdy15LWhpZGRlbiB7XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbn1cblxuLm51cmktb3ZlcmZsb3cteS1zY3JvbGwge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbi5udXJpLW92ZXJmbG93LXktYXV0byB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9vdmVyZmxvdy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLW92ZXJmbG93LXZpc2libGUge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LWhpZGRlbiB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy1zY3JvbGwge1xcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteC12aXNpYmxlIHtcXG4gIG92ZXJmbG93LXg6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LXgtaGlkZGVuIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteC1zY3JvbGwge1xcbiAgb3ZlcmZsb3cteDogc2Nyb2xsO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy14LWF1dG8ge1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteS12aXNpYmxlIHtcXG4gIG92ZXJmbG93LXk6IHZpc2libGU7XFxufVxcblxcbi5udXJpLW92ZXJmbG93LXktaGlkZGVuIHtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG59XFxuXFxuLm51cmktb3ZlcmZsb3cteS1zY3JvbGwge1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG5cXG4ubnVyaS1vdmVyZmxvdy15LWF1dG8ge1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWFpLXN0YXJ0IHtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5udXJpLWFpLWNlbnRlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5udXJpLWFpLWVuZCB7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuLm51cmktYWktc3RyZXRjaCB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4ubnVyaS1haS1iYXNlbGluZSB7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL2FsaWduLWl0ZW1zLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIubnVyaS1haS1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLm51cmktYWktY2VudGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5udXJpLWFpLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5udXJpLWFpLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5udXJpLWFpLWJhc2VsaW5lIHtcXG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuXG4gIC5oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5ib2R5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxuXG4gIC5jZWxsIHtcbiAgICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogZGF0YS10YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmRhdGEtdGFibGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGF0YS10YWJsZS1oZWFkZXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDM7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU3O1xufVxuXG4uZGF0YS10YWJsZS1yb3cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgei1pbmRleDogMjtcblxuICAgICYgPiAqIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG5cbi5ib2R5IC5kYXRhLXRhYmxlLXJvdzpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG5cbiAgLmZpeGVkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICB9XG59XG5cbi5maXhlZC1jZWxsIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbGVmdDogMDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSx5QkFBeUI7RUFDekIsa0JBQWtCOztFQUVsQjtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsV0FBVztFQUNiOztFQUVBO0lBQ0UsV0FBVztFQUNiOztFQUVBO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHVCQUF1QjtFQUN6QjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxrQkFBa0I7RUFDbEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLE1BQU07RUFDTixzQkFBc0I7RUFDdEIsVUFBVTtFQUNWLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLGtCQUFrQjs7RUFFbEI7SUFDRSxnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLFVBQVU7O0lBRVY7TUFDRSxrQkFBa0I7TUFDbEIsVUFBVTtJQUNaO0VBQ0Y7QUFDRjs7QUFFQTtFQUNFLHlCQUF5Qjs7RUFFekI7SUFDRSx5QkFBeUI7RUFDM0I7QUFDRjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixPQUFPO0FBQ1RcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtdGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIHdpZHRoOiBmaXQtY29udGVudDtcXG5cXG4gIC5oZWFkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIC5ib2R5IHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICAucm93IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIC5jZWxsIHtcXG4gICAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqIGRhdGEtdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uZGF0YS10YWJsZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLmRhdGEtdGFibGUtaGVhZGVyIHtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgei1pbmRleDogMztcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU3O1xcbn1cXG5cXG4uZGF0YS10YWJsZS1yb3cge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcblxcbiAgLmZpeGVkIHtcXG4gICAgcG9zaXRpb246IHN0aWNreTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gICAgei1pbmRleDogMjtcXG5cXG4gICAgJiA+ICoge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICB6LWluZGV4OiAxO1xcbiAgICB9XFxuICB9XFxufVxcblxcbi5ib2R5IC5kYXRhLXRhYmxlLXJvdzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xcblxcbiAgLmZpeGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcXG4gIH1cXG59XFxuXFxuLmZpeGVkLWNlbGwge1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIGxlZnQ6IDA7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmJhc2UtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiBjdGEtYnV0dG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4uY3RhLWJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcblxuICAmLnZhcmlhbnQtcHJpbWFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00MSk7XG4gICAgfVxuICB9XG5cbiAgJi52YXJpYW50LXNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWU5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcblxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWY0KTtcbiAgICB9XG4gIH1cblxuICAmLnZhcmlhbnQtZ2hvc3Qge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XG4gICAgfVxuICB9XG5cbiAgJi52YXJpYW50LXdoaXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcblxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgICB9XG4gIH1cblxuICAmLnZhcmlhbnQtd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1kZik7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcbiAgICB9XG4gIH1cblxuICAmLnNpemUteGwge1xuICAgIGhlaWdodDogNjBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxnKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtbGcpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1sIHtcbiAgICBoZWlnaHQ6IDU0cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLXIge1xuICAgIGhlaWdodDogNDhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA1MHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUteHMge1xuICAgIGhlaWdodDogMzBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixTQUFTO0VBQ1Qsa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixlQUFlOztFQUVmO0lBQ0UsYUFBYTtJQUNiLGdCQUFnQjtFQUNsQjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxrQkFBa0I7O0VBRWxCO0lBQ0UsOENBQThDO0lBQzlDLGlDQUFpQzs7SUFFakM7TUFDRSw4Q0FBOEM7SUFDaEQ7RUFDRjs7RUFFQTtJQUNFLDhDQUE4QztJQUM5QyxtQ0FBbUM7O0lBRW5DO01BQ0UsOENBQThDO0lBQ2hEO0VBQ0Y7O0VBRUE7SUFDRSw0Q0FBNEM7SUFDNUMsOENBQThDO0lBQzlDLG1DQUFtQzs7SUFFbkM7TUFDRSw4Q0FBOEM7SUFDaEQ7RUFDRjs7RUFFQTtJQUNFLDRDQUE0QztJQUM1QyxtQ0FBbUM7O0lBRW5DO01BQ0UsOENBQThDO0lBQ2hEO0VBQ0Y7O0VBRUE7SUFDRSw0Q0FBNEM7SUFDNUMsaUNBQWlDOztJQUVqQztNQUNFLDRDQUE0QztJQUM5QztFQUNGOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLG9DQUFvQztFQUN0Qzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosZ0NBQWdDO0lBQ2hDLG9DQUFvQztJQUNwQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosK0JBQStCO0lBQy9CLG1DQUFtQztJQUNuQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyxtQkFBbUI7SUFDbkIsWUFBWTtFQUNkO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAmOmZvY3VzLXZpc2libGUge1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgICBib3gtc2hhZG93OiBub25lO1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqIGN0YS1idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uY3RhLWJ1dHRvbiB7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICAmLnZhcmlhbnQtcHJpbWFyeSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTQxKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi52YXJpYW50LXNlY29uZGFyeSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1lOSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtZjQpO1xcbiAgICB9XFxuICB9XFxuXFxuICAmLnZhcmlhbnQtZ2hvc3Qge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XFxuXFxuICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYudmFyaWFudC13aGl0ZSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi52YXJpYW50LXdhcm5pbmcge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5zaXplLXhsIHtcXG4gICAgaGVpZ2h0OiA2MHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sZyk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1sZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgaGVpZ2h0OiA1NHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWJhc2UpO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtciB7XFxuICAgIGhlaWdodDogNDhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS14cyB7XFxuICAgIGhlaWdodDogMzBweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmOmRpc2FibGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgW2RhdGEtcmFkaXVzXSB7XG4gIC8qIOuUlOyekOyduCDsi5zsiqTthZzsnZgg67OA64+ZIOqwgOuKpeyEseycvOuhnCDsnbjtlbQg7YGs6riw7Iic7J20IOyVhOuLjCDsg53shLHsiJzsnLzroZwg7KCV66Cs7ZWp64uI64ukLiAqL1xuICAtLXJhZGl1cy0xOiA2cHg7XG4gIC0tcmFkaXVzLTI6IDRweDtcbiAgLS1yYWRpdXMtMzogNDBweDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Rva2VuL3JhZGl1cy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSw4Q0FBOEM7RUFDOUMsZUFBZTtFQUNmLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiW2RhdGEtcmFkaXVzXSB7XFxuICAvKiDrlJTsnpDsnbgg7Iuc7Iqk7YWc7J2YIOuzgOuPmSDqsIDriqXshLHsnLzroZwg7J247ZW0IO2BrOq4sOyInOydtCDslYTri4wg7IOd7ISx7Iic7Jy866GcIOygleugrO2VqeuLiOuLpC4gKi9cXG4gIC0tcmFkaXVzLTE6IDZweDtcXG4gIC0tcmFkaXVzLTI6IDRweDtcXG4gIC0tcmFkaXVzLTM6IDQwcHg7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvb3Jpb25jYWN0dXMvcHJldGVuZGFyZEB2MS4zLjgvZGlzdC93ZWIvc3RhdGljL3ByZXRlbmRhcmQuY3NzKTtcIl0pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBpbXBvcnQgdXJsKGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcCk7XCJdKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2ljb24/ZmFtaWx5PU1hdGVyaWFsK0ljb25zKTtcIl0pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS10aGVtZSB7XG4gIC0tZm9udC1zaXplLXhzbTogMTJweDtcbiAgLS1mb250LXNpemUtc206IDE0cHg7XG4gIC0tZm9udC1zaXplLWJhc2U6IDE2cHg7XG4gIC0tZm9udC1zaXplLWxnOiAxOHB4O1xuICAtLWZvbnQtc2l6ZS14bDogMjBweDtcbiAgLS1mb250LXNpemUtMnhsOiAyNHB4O1xuICAtLWZvbnQtc2l6ZS0zeGw6IDMwcHg7XG4gIC0tZm9udC1zaXplLTR4bDogMzZweDtcbiAgLS1mb250LXNpemUtNXhsOiA0OHB4O1xuICAtLWZvbnQtc2l6ZS02eGw6IDYwcHg7XG5cbiAgLS1saW5lLWhlaWdodC14c206IDE4cHg7XG4gIC0tbGluZS1oZWlnaHQtc206IDE4cHg7XG4gIC0tbGluZS1oZWlnaHQtYmFzZTogMjJweDtcbiAgLS1saW5lLWhlaWdodC1sZzogMjRweDtcbiAgLS1saW5lLWhlaWdodC14bDogMjhweDtcbiAgLS1saW5lLWhlaWdodC0yeGw6IDMycHg7XG4gIC0tbGluZS1oZWlnaHQtM3hsOiAzNnB4O1xuICAtLWxpbmUtaGVpZ2h0LTR4bDogNDNweDtcbiAgLS1saW5lLWhlaWdodC01eGw6IDY2cHg7XG4gIC0tbGluZS1oZWlnaHQtNnhsOiA4MnB4O1xuXG4gIC0tZm9udC13ZWlnaHQtcmVndWxhcjogNDAwO1xuICAtLWZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xuICAtLWZvbnQtd2VpZ2h0LXNlbWlib2xkOiA2MDA7XG4gIC0tZm9udC13ZWlnaHQtYm9sZDogNzAwO1xuICAtLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDogODAwO1xuXG4gIGZvbnQtZmFtaWx5OlxuICAgICdUd2Vtb2ppIENvdW50cnkgRmxhZ3MnLFxuICAgICdQcmV0ZW5kYXJkJyxcbiAgICBQcmV0ZW5kYXJkLFxuICAgIC1hcHBsZS1zeXN0ZW0sXG4gICAgQmxpbmtNYWNTeXN0ZW1Gb250LFxuICAgIHN5c3RlbS11aSxcbiAgICBSb2JvdG8sXG4gICAgJ0hlbHZldGljYSBOZXVlJyxcbiAgICAnU2Vnb2UgVUknLFxuICAgICdBcHBsZSBTRCBHb3RoaWMgTmVvJyxcbiAgICAnTm90byBTYW5zIEtSJyxcbiAgICAnTWFsZ3VuIEdvdGhpYycsXG4gICAgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdOb3RvIENvbG9yIEVtb2ppJyxcbiAgICBzYW5zLXNlcmlmO1xufVxuXG4ubnVyaS1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpO1xufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zdHlsZXMvdG9rZW4vZm9udC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBSUE7RUFDRSxxQkFBcUI7RUFDckIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixvQkFBb0I7RUFDcEIsb0JBQW9CO0VBQ3BCLHFCQUFxQjtFQUNyQixxQkFBcUI7RUFDckIscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixxQkFBcUI7O0VBRXJCLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsd0JBQXdCO0VBQ3hCLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsdUJBQXVCO0VBQ3ZCLHVCQUF1QjtFQUN2Qix1QkFBdUI7RUFDdkIsdUJBQXVCO0VBQ3ZCLHVCQUF1Qjs7RUFFdkIsMEJBQTBCO0VBQzFCLHlCQUF5QjtFQUN6QiwyQkFBMkI7RUFDM0IsdUJBQXVCO0VBQ3ZCLDRCQUE0Qjs7RUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBaUJZO0FBQ2Q7O0FBRUE7RUFDRSxtQ0FBbUM7QUFDckNcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGltcG9ydCB1cmwoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9vcmlvbmNhY3R1cy9wcmV0ZW5kYXJkQHYxLjMuOC9kaXN0L3dlYi9zdGF0aWMvcHJldGVuZGFyZC5jc3MnKTtcXG5AaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwJyk7XFxuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnMnKTtcXG5cXG4ubnVyaS10aGVtZSB7XFxuICAtLWZvbnQtc2l6ZS14c206IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1zbTogMTRweDtcXG4gIC0tZm9udC1zaXplLWJhc2U6IDE2cHg7XFxuICAtLWZvbnQtc2l6ZS1sZzogMThweDtcXG4gIC0tZm9udC1zaXplLXhsOiAyMHB4O1xcbiAgLS1mb250LXNpemUtMnhsOiAyNHB4O1xcbiAgLS1mb250LXNpemUtM3hsOiAzMHB4O1xcbiAgLS1mb250LXNpemUtNHhsOiAzNnB4O1xcbiAgLS1mb250LXNpemUtNXhsOiA0OHB4O1xcbiAgLS1mb250LXNpemUtNnhsOiA2MHB4O1xcblxcbiAgLS1saW5lLWhlaWdodC14c206IDE4cHg7XFxuICAtLWxpbmUtaGVpZ2h0LXNtOiAxOHB4O1xcbiAgLS1saW5lLWhlaWdodC1iYXNlOiAyMnB4O1xcbiAgLS1saW5lLWhlaWdodC1sZzogMjRweDtcXG4gIC0tbGluZS1oZWlnaHQteGw6IDI4cHg7XFxuICAtLWxpbmUtaGVpZ2h0LTJ4bDogMzJweDtcXG4gIC0tbGluZS1oZWlnaHQtM3hsOiAzNnB4O1xcbiAgLS1saW5lLWhlaWdodC00eGw6IDQzcHg7XFxuICAtLWxpbmUtaGVpZ2h0LTV4bDogNjZweDtcXG4gIC0tbGluZS1oZWlnaHQtNnhsOiA4MnB4O1xcblxcbiAgLS1mb250LXdlaWdodC1yZWd1bGFyOiA0MDA7XFxuICAtLWZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xcbiAgLS1mb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiAgLS1mb250LXdlaWdodC1ib2xkOiA3MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDogODAwO1xcblxcbiAgZm9udC1mYW1pbHk6XFxuICAgICdUd2Vtb2ppIENvdW50cnkgRmxhZ3MnLFxcbiAgICAnUHJldGVuZGFyZCcsXFxuICAgIFByZXRlbmRhcmQsXFxuICAgIC1hcHBsZS1zeXN0ZW0sXFxuICAgIEJsaW5rTWFjU3lzdGVtRm9udCxcXG4gICAgc3lzdGVtLXVpLFxcbiAgICBSb2JvdG8sXFxuICAgICdIZWx2ZXRpY2EgTmV1ZScsXFxuICAgICdTZWdvZSBVSScsXFxuICAgICdBcHBsZSBTRCBHb3RoaWMgTmVvJyxcXG4gICAgJ05vdG8gU2FucyBLUicsXFxuICAgICdNYWxndW4gR290aGljJyxcXG4gICAgJ0FwcGxlIENvbG9yIEVtb2ppJyxcXG4gICAgJ1NlZ29lIFVJIEVtb2ppJyxcXG4gICAgJ1NlZ29lIFVJIFN5bWJvbCcsXFxuICAgICdOb3RvIENvbG9yIEVtb2ppJyxcXG4gICAgc2Fucy1zZXJpZjtcXG59XFxuXFxuLm51cmktcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG59XG52YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSxcbiAgdXNlRWZmZWN0ID0gUmVhY3QudXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QgPSBSZWFjdC51c2VMYXlvdXRFZmZlY3QsXG4gIHVzZURlYnVnVmFsdWUgPSBSZWFjdC51c2VEZWJ1Z1ZhbHVlO1xuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUkMihzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gIHZhciB2YWx1ZSA9IGdldFNuYXBzaG90KCksXG4gICAgX3VzZVN0YXRlID0gdXNlU3RhdGUoeyBpbnN0OiB7IHZhbHVlOiB2YWx1ZSwgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH0gfSksXG4gICAgaW5zdCA9IF91c2VTdGF0ZVswXS5pbnN0LFxuICAgIGZvcmNlVXBkYXRlID0gX3VzZVN0YXRlWzFdO1xuICB1c2VMYXlvdXRFZmZlY3QoXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgaW5zdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgfSxcbiAgICBbc3Vic2NyaWJlLCB2YWx1ZSwgZ2V0U25hcHNob3RdXG4gICk7XG4gIHVzZUVmZmVjdChcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlVXBkYXRlKHsgaW5zdDogaW5zdCB9KTtcbiAgICAgIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlVXBkYXRlKHsgaW5zdDogaW5zdCB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3N1YnNjcmliZV1cbiAgKTtcbiAgdXNlRGVidWdWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICBpbnN0ID0gaW5zdC52YWx1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIW9iamVjdElzKGluc3QsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICEwO1xuICB9XG59XG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcbiAgcmV0dXJuIGdldFNuYXBzaG90KCk7XG59XG52YXIgc2hpbSA9XG4gIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cgfHxcbiAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudCB8fFxuICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICA/IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDFcbiAgICA6IHVzZVN5bmNFeHRlcm5hbFN0b3JlJDI7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID1cbiAgdm9pZCAwICE9PSBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZSA/IFJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlIDogc2hpbTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDQwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogYXR0cihkYXRhLWJhY2tncm91bmRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuICBjb2xvcjogYXR0cihkYXRhLXRleHRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuICBib3JkZXI6IGF0dHIoZGF0YS1ib3JkZXJDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xuXG4gICYuc2l6ZS1sIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLW0ge1xuICAgIGhlaWdodDogNDBweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtciB7XG4gICAgaGVpZ2h0OiAzNnB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zIHtcbiAgICBoZWlnaHQ6IDMycHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIH1cblxuICAmLnNpemUtc20ge1xuICAgIGhlaWdodDogMjhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgJi5pY29uLXRleHQtb3B0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgcGFkZGluZzogMCAyMHB4O1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLm9wdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5pY29uLXRleHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG5cbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIGljb24tdGV4dC1vcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5pY29uLXRleHQtb3B0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIHBhZGRpbmc6IDAgMjBweDtcblxuICA+IHNwYW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDRweDtcbiAgfVxufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGtCQUFrQjtFQUNsQixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFFBQVE7RUFDUixtQkFBbUI7O0VBRW5CLCtEQUErRDtFQUMvRCw4Q0FBOEM7RUFDOUMsaURBQWlEOztFQUVqRDtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsb0NBQW9DO0VBQ3RDOztFQUVBO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7O0lBRTlCLGVBQWU7RUFDakI7QUFDRjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7O0VBRXZCLGlCQUFpQjtFQUNqQixtQkFBbUI7QUFDckI7O0FBRUE7Ozs7bUdBSW1HOztBQUVuRztFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLFFBQVE7O0VBRVIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTs7OztvR0FJb0c7O0FBRXBHO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7O0VBRTlCLGVBQWU7O0VBRWY7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFFBQVE7RUFDVjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLWJhZGdlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxuICBib3JkZXItcmFkaXVzOiA0MHB4O1xcblxcbiAgYmFja2dyb3VuZC1jb2xvcjogYXR0cihkYXRhLWJhY2tncm91bmRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xcbiAgY29sb3I6IGF0dHIoZGF0YS10ZXh0Q29sb3IgY29sb3IsIHRyYW5zcGFyZW50KTtcXG4gIGJvcmRlcjogYXR0cihkYXRhLWJvcmRlckNvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XFxuXFxuICAmLnNpemUtbCB7XFxuICAgIGhlaWdodDogNDhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLW0ge1xcbiAgICBoZWlnaHQ6IDQwcHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1yIHtcXG4gICAgaGVpZ2h0OiAzNnB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtcyB7XFxuICAgIGhlaWdodDogMzJweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtc20ge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICB9XFxuXFxuICAmLmljb24tdGV4dC1vcHRpb24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFxuICAgIHBhZGRpbmc6IDAgMjBweDtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4ub3B0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qIG9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmljb24tdGV4dCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxuXFxuICBib3JkZXItd2lkdGg6IDFweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogaWNvbi10ZXh0LW9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblxcbi5pY29uLXRleHQtb3B0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcblxcbiAgcGFkZGluZzogMCAyMHB4O1xcblxcbiAgPiBzcGFuIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLXRvb2x0aXAge1xuICB6LWluZGV4OiAzO1xuICAmLmNvbnRlbnQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4udG9vbHRpcC10cmlnZ2VyIHtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xufVxuXG4udG9vbHRpcC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpO1xuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgcGFkZGluZzogMTJweDtcblxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIH1cblxuICAmLmRpcmVjdGlvbi10b3Age1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJvdHRvbTogLThweDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIGJvcmRlci13aWR0aDogOHB4IDhweCAwIDhweDtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cblxuICAmLmRpcmVjdGlvbi1ib3R0b20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiAtOHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwIDhweCA4cHggOHB4O1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxuXG4gICYuZGlyZWN0aW9uLWxlZnQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTBweCk7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHJpZ2h0OiAtOHB4O1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICBib3JkZXItd2lkdGg6IDhweCAwIDhweCA4cHg7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gICAgfVxuICB9XG5cbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbGVmdDogLThweDtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggOHB4IDhweCAwO1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuYCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxVQUFVO0VBQ1Y7SUFDRSxrQkFBa0I7RUFDcEI7QUFDRjs7QUFFQTs7OztvR0FJb0c7O0FBRXBHO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIsU0FBUzs7RUFFVCw4Q0FBOEM7RUFDOUMsaUNBQWlDO0VBQ2pDLGtCQUFrQjtFQUNsQixhQUFhOztFQUViLDhCQUE4QjtFQUM5QixrQ0FBa0M7RUFDbEMsdUNBQXVDOztFQUV2QyxrQkFBa0I7O0VBRWxCO0lBQ0UsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsU0FBUztJQUNULG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLDRCQUE0QjtJQUM1QjtNQUNFLFlBQVk7TUFDWixTQUFTO01BQ1QsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDJCQUEyQjtJQUMzQjtNQUNFLFNBQVM7TUFDVCxTQUFTO01BQ1QsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDRCQUE0QjtJQUM1QjtNQUNFLFdBQVc7TUFDWCxRQUFRO01BQ1IsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjs7RUFFQTtJQUNFLDJCQUEyQjtJQUMzQjtNQUNFLFVBQVU7TUFDVixRQUFRO01BQ1IsMkJBQTJCO01BQzNCLDJCQUEyQjtNQUMzQiw4RUFBOEU7SUFDaEY7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLXRvb2x0aXAge1xcbiAgei1pbmRleDogMztcXG4gICYuY29udGVudCB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLnRvb2x0aXAtdHJpZ2dlciB7XFxuICB3aWR0aDogZml0LWNvbnRlbnQ7XFxufVxcblxcbi50b29sdGlwLWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogMTBweDtcXG5cXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBwYWRkaW5nOiAxMnB4O1xcblxcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcXG5cXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gICY6OmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAwO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICB9XFxuXFxuICAmLmRpcmVjdGlvbi10b3Age1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xcbiAgICAmOjpiZWZvcmUge1xcbiAgICAgIGJvdHRvbTogLThweDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgICAgIGJvcmRlci13aWR0aDogOHB4IDhweCAwIDhweDtcXG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuZGlyZWN0aW9uLWJvdHRvbSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTtcXG4gICAgJjo6YmVmb3JlIHtcXG4gICAgICB0b3A6IC04cHg7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgICBib3JkZXItd2lkdGg6IDAgOHB4IDhweCA4cHg7XFxuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB2YXIoLS1jb2xvci1wb2ludC1wdXJwbGUtMzkpIHRyYW5zcGFyZW50O1xcbiAgICB9XFxuICB9XFxuXFxuICAmLmRpcmVjdGlvbi1sZWZ0IHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMHB4KTtcXG4gICAgJjo6YmVmb3JlIHtcXG4gICAgICByaWdodDogLThweDtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggMCA4cHggOHB4O1xcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi5kaXJlY3Rpb24tcmlnaHQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTBweCk7XFxuICAgICY6OmJlZm9yZSB7XFxuICAgICAgbGVmdDogLThweDtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgYm9yZGVyLXdpZHRoOiA4cHggOHB4IDhweCAwO1xcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWRyb3AtZG93biB7XG4gICYudHJpZ2dlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDEwcHg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogZHJvcC1kb3duLXNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi5kcm9wLWRvd24tc2luZ2xlLXRyaWdnZXIge1xuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIGhlaWdodDogNTBweDtcbiAgfVxuXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICBwYWRkaW5nOiAwIDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xuXG4gICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1wdXJwbGUtMzkpO1xuICB9XG5cbiAgJltkYXRhLXBsYWNlaG9sZGVyXSB7XG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgcGF0aCB7XG4gICAgICAgIGZpbGw6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJjpub3QoW2RhdGEtcGxhY2Vob2xkZXJdKSB7XG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHBhdGgge1xuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmW2RhdGEtc3RhdGU9J29wZW4nXSB7XG4gICAgLnJvdGF0ZSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xuICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgICB9XG4gIH1cbn1cblxuLmRyb3AtZG93bi1zaW5nbGUtdmFsdWUge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuXG4gIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XG4gIH1cbn1cblxuLmRyb3AtZG93bi1zaW5nbGUtY29udGVudCB7XG4gIGJveC1zaGFkb3c6XG4gICAgMHB4IDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDYpLFxuICAgIDBweCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA2cHg7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcbiAgfVxuXG4gID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNnB4O1xuICB9XG59XG5cbi5kcm9wLWRvd24tc2luZ2xlLWl0ZW0ge1xuICBwYWRkaW5nOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgb3V0bGluZTogbm9uZTtcbiAgaGVpZ2h0OiA0NnB4O1xuXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG5cbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvZHJvcC1kb3duL2Ryb3AtZG93bi1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsOEJBQThCO0lBQzlCLFNBQVM7RUFDWDtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQSw4Q0FBOEM7RUFDOUMsa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixlQUFlO0VBQ2YsNENBQTRDOztFQUU1QztJQUNFLDRDQUE0QztFQUM5Qzs7RUFFQTtJQUNFO01BQ0UsbUNBQW1DO0lBQ3JDOztJQUVBO01BQ0U7UUFDRSxrQ0FBa0M7TUFDcEM7SUFDRjtFQUNGOztFQUVBO0lBQ0U7TUFDRSxpQ0FBaUM7SUFDbkM7O0lBRUE7TUFDRTtRQUNFLGdDQUFnQztNQUNsQztJQUNGO0VBQ0Y7O0VBRUE7SUFDRTtNQUNFLHlCQUF5QjtNQUN6Qix5QkFBeUI7TUFDekIsZ0NBQWdDO01BQ2hDLHNCQUFzQjtJQUN4QjtFQUNGO0FBQ0Y7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsa0NBQWtDO0VBQ2xDLHNDQUFzQzs7RUFFdEMsZ0JBQWdCOztFQUVoQjtJQUNFLG1DQUFtQztFQUNyQztBQUNGOztBQUVBO0VBQ0U7O3lDQUV1Qzs7RUFFdkMsa0JBQWtCOztFQUVsQjtJQUNFLDJCQUEyQjtJQUMzQiw0QkFBNEI7RUFDOUI7O0VBRUE7SUFDRSw4QkFBOEI7SUFDOUIsK0JBQStCO0VBQ2pDO0FBQ0Y7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsNENBQTRDO0VBQzVDLGFBQWE7RUFDYixZQUFZOztFQUVaLDhCQUE4QjtFQUM5QixrQ0FBa0M7RUFDbEMsc0NBQXNDOztFQUV0QyxlQUFlOztFQUVmO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsOENBQThDO0VBQ2hEOztFQUVBO0lBQ0UsOENBQThDO0lBQzlDLG1DQUFtQztJQUNuQyxtQkFBbUI7RUFDckI7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuYmFzZS1kcm9wLWRvd24ge1xcbiAgJi50cmlnZ2VyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBnYXA6IDEwcHg7XFxuICB9XFxufVxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogZHJvcC1kb3duLXNpbmdsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBcXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uZHJvcC1kb3duLXNpbmdsZS10cmlnZ2VyIHtcXG4gICYuc2l6ZS1tIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcbiAgfVxcblxcbiAgJi5zaXplLWwge1xcbiAgICBoZWlnaHQ6IDUwcHg7XFxuICB9XFxuXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZDQpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xcbiAgcGFkZGluZzogMCAxNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XFxuXFxuICAmOmZvY3VzIHtcXG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXB1cnBsZS0zOSk7XFxuICB9XFxuXFxuICAmW2RhdGEtcGxhY2Vob2xkZXJdIHtcXG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICBwYXRoIHtcXG4gICAgICAgIGZpbGw6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICAmOm5vdChbZGF0YS1wbGFjZWhvbGRlcl0pIHtcXG4gICAgLmRyb3AtZG93bi1zaW5nbGUtaWNvbiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xcbiAgICB9XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgcGF0aCB7XFxuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbZGF0YS1zdGF0ZT0nb3BlbiddIHtcXG4gICAgLnJvdGF0ZSB7XFxuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNjBtcyBlYXNlO1xcbiAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLmRyb3AtZG93bi1zaW5nbGUtdmFsdWUge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcblxcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG5cXG4gIDo6cGxhY2Vob2xkZXIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWExKTtcXG4gIH1cXG59XFxuXFxuLmRyb3AtZG93bi1zaW5nbGUtY29udGVudCB7XFxuICBib3gtc2hhZG93OlxcbiAgICAwcHggNHB4IDZweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4wNiksXFxuICAgIDBweCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuXFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICA+IDpmaXJzdC1jaGlsZCB7XFxuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDtcXG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcXG4gIH1cXG5cXG4gID4gOmxhc3QtY2hpbGQge1xcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7XFxuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XFxuICB9XFxufVxcblxcbi5kcm9wLWRvd24tc2luZ2xlLWl0ZW0ge1xcbiAgcGFkZGluZzogMTRweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGhlaWdodDogNDZweDtcXG5cXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG5cXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICY6aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xcbiAgfVxcblxcbiAgJjpmb2N1cyB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICB9XFxuXFxuICAmOmRpc2FibGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWY0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmNvbXBvbmVudC1sb2FkaW5nLWlubGluZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9sb2FkaW5nL2lubGluZS1sb2FkaW5nL2lubGluZS1sb2FkaW5nLXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLG1CQUFtQjtFQUNyQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuY29tcG9uZW50LWxvYWRpbmctaW5saW5lIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIGNvbXBvbmVudHMvbG9hZGluZy9vdmVybGF5LWxvYWRpbmcvb3ZlcmxheS1sb2FkaW5nLXN0eWxlLmNzcyAqL1xuLnBhZ2UtbG9hZGluZy1jb250YWluZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5wYWdlLWxvYWRpbmctYmFja2Ryb3AgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOyB9XG4ucGFnZS1sb2FkaW5nLWNvbnRlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTZweDtcbn1cbi8qIOq4sOuzuCDsiqTtlLzrhIgoMjBweCnrpbwg7ZmV64yAICovXG4ucGFnZS1sb2FkaW5nLWluZGljYXRvciB7IHRyYW5zZm9ybTogc2NhbGUoMy4yKTsgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOyB9XG4ucGFnZS1sb2FkaW5nLXRleHQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLGlFQUFpRTtBQUNqRTtFQUNFLGVBQWU7RUFDZixRQUFRO0VBQ1IsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7QUFDekI7QUFDQSx5QkFBeUIsa0JBQWtCLEVBQUUsUUFBUSxFQUFFO0FBQ3ZEO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsbUJBQW1CO0VBQ25CLFNBQVM7QUFDWDtBQUNBLHFCQUFxQjtBQUNyQiwwQkFBMEIscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUU7QUFDM0UscUJBQXFCLGtCQUFrQixFQUFFXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIGNvbXBvbmVudHMvbG9hZGluZy9vdmVybGF5LWxvYWRpbmcvb3ZlcmxheS1sb2FkaW5nLXN0eWxlLmNzcyAqL1xcbi5wYWdlLWxvYWRpbmctY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGluc2V0OiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnBhZ2UtbG9hZGluZy1iYWNrZHJvcCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IH1cXG4ucGFnZS1sb2FkaW5nLWNvbnRlbnQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxNnB4O1xcbn1cXG4vKiDquLDrs7gg7Iqk7ZS864SIKDIwcHgp66W8IO2ZleuMgCAqL1xcbi5wYWdlLWxvYWRpbmctaW5kaWNhdG9yIHsgdHJhbnNmb3JtOiBzY2FsZSgzLjIpOyB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7IH1cXG4ucGFnZS1sb2FkaW5nLXRleHQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS10ZXh0IHtcbiAgJjp3aGVyZSgueHNtKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcbiAgfVxuICAmOndoZXJlKC5zbSkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICB9XG4gICY6d2hlcmUoLmJhc2UpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtYmFzZSk7XG4gIH1cbiAgJjp3aGVyZSgubGcpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sZyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWxnKTtcbiAgfVxuICAmOndoZXJlKC54bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteGwpO1xuICB9XG4gICY6d2hlcmUoLnQtMnhsKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMnhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtMnhsKTtcbiAgfVxuICAmOndoZXJlKC50LTN4bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTN4bCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTN4bCk7XG4gIH1cbiAgJjp3aGVyZSgudC00eGwpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS00eGwpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC00eGwpO1xuICB9XG4gICY6d2hlcmUoLnQtNXhsKSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtNXhsKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtNXhsKTtcbiAgfVxuICAmOndoZXJlKC50LTZ4bCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTZ4bCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTZ4bCk7XG4gIH1cblxuICAmOndoZXJlKC5yZWd1bGFyKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xuICB9XG4gICY6d2hlcmUoLm1lZGl1bSkge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuICB9XG4gICY6d2hlcmUoLnNlbWlib2xkKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuICAmOndoZXJlKC5ib2xkKSB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG4gICY6d2hlcmUoLmV4dHJhYm9sZCkge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1leHRyYWJvbGQpO1xuICB9XG5cbiAgJltjbGFzcyo9J3RleHRBbGlnbi0nXSB7XG4gICAgJi50ZXh0QWxpZ24tbGVmdCB7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAmLnRleHRBbGlnbi1jZW50ZXIge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd0ZXh0RGVjb3JhdGlvbi0nXSB7XG4gICAgJi50ZXh0RGVjb3JhdGlvbi11bmRlcmxpbmUge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tbm9uZSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tbGluZVRocm91Z2gge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgfVxuICAgICYudGV4dERlY29yYXRpb24tb3ZlcmxpbmUge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTtcbiAgICB9XG4gICAgJi50ZXh0RGVjb3JhdGlvbi1ibGluayB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd3b3JkQnJlYWstJ10ge1xuICAgICYud29yZEJyZWFrLW5vcm1hbCB7XG4gICAgICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWJyZWFrQWxsIHtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICB9XG4gICAgJi53b3JkQnJlYWstYnJlYWtXb3JkIHtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWtlZXBBbGwge1xuICAgICAgd29yZC1icmVhazoga2VlcC1hbGw7XG4gICAgfVxuICAgICYud29yZEJyZWFrLWtlZXBXb3JkIHtcbiAgICAgIHdvcmQtYnJlYWs6IGtlZXAtd29yZDtcbiAgICB9XG4gICAgJi53b3JkQnJlYWstYnJlYWtTcGFjZXMge1xuICAgICAgd29yZC1icmVhazogYnJlYWstc3BhY2VzO1xuICAgIH1cbiAgICAmLndvcmRCcmVhay1hbGwge1xuICAgICAgd29yZC1icmVhazogYWxsO1xuICAgIH1cbiAgfVxuXG4gICZbY2xhc3MqPSd3aGl0ZVNwYWNlLSddIHtcbiAgICAmLndoaXRlU3BhY2Utbm9ybWFsIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgfVxuICAgICYud2hpdGVTcGFjZS1ub3dyYXAge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgJi53aGl0ZVNwYWNlLXByZSB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIH1cbiAgICAmLndoaXRlU3BhY2UtcHJlTGluZSB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG4gICAgfVxuICAgICYud2hpdGVTcGFjZS1wcmVXcmFwIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICB9XG4gIH1cblxuICAmW2NsYXNzKj0nY29sb3ItJ10ge1xuICAgICYuY29sb3ItYmxhY2sge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktYmxhY2spO1xuICAgIH1cbiAgICAmLmNvbG9yLXdoaXRlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5RmEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mYSk7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheUY0IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZjQpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXlFNCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0KTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5RDQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1kNCk7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheUExIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktYTEpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXk3MSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxKTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5NTIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS01Mik7XG4gICAgfVxuICAgICYuY29sb3ItZ3JheTNmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktM2YpO1xuICAgIH1cbiAgICAmLmNvbG9yLWdyYXkyNyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTI3KTtcbiAgICB9XG4gICAgJi5jb2xvci1ncmF5MTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0xOCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRjQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1mNCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRTkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1lOSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlRGQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1kZCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlQzMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1jMyk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlQTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS1hOCk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlOTUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS05NSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS02Zik7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNGMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00Yyk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlNDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS00MSk7XG4gICAgfVxuICAgICYuY29sb3ItcHVycGxlMzkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXBvaW50LXB1cnBsZS0zOSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkRmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZEZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mZmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZEZiIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWRGMyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mMyk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkRTgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZTgpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZERmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWRmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWRDOSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1jOSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UmVkQjAge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtYjApO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFJlZDhmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLThmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRSZWQ2ZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC02ZSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UGlua0ZmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcGluay1mZik7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50UGlua0ZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRmQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZkKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRjQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWY0KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rRDkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWQ5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rQjkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWI5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rOTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLTkzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRQaW5rNmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLTZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRmMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRjgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWY4KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRjIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWYyKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhRTEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWUxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhQzgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWM4KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhQTkge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWE5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhODMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTgzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNYWdlbnRhNWUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTVlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlRjEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWYxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlRTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWUzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlQzcge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWM3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlQTUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLWE1KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlODEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTgxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMjUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTI1KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTFjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRCbHVlMTYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ibHVlLTE2KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50RWMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWVjKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50RDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWQxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50QTcge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LWE3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50NmUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MmQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTJkKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTAxKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MGIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTBiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MGYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTBmKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MTEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTExKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRNaW50MTMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1taW50LTEzKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbkVjIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tZWMpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuRDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi1kMSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW5BNyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLWE3KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tNmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuNDEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi00MSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW4yMiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTIyKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjE2IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMjgge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0yOCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50R3JlZW4xNjYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNjYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMTQge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmMge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmMpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZiIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZmIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmZiKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dFMCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1lMCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50WWVsbG93QjUge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctYjUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudFllbGxvdzhhIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LThhKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3c1ZiB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy01Zik7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmYge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmYpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZmZSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZmUpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZlIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZlKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZCB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZCk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmIpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUY5IHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWY5KTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VFYSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1lYSk7XG4gICAgfVxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlQzIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtYzIpO1xuICAgIH1cbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZTlhIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLTlhKTtcbiAgICB9XG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2U3YyB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS03Yyk7XG4gICAgfVxuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvZWxlbWVudHMvdGV4dC90ZXh0LXN0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQztFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLGtDQUFrQztFQUNwQztFQUNBO0lBQ0UsZ0NBQWdDO0lBQ2hDLG9DQUFvQztFQUN0QztFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLGtDQUFrQztFQUNwQztFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLGtDQUFrQztFQUNwQztFQUNBO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQztFQUNBO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQztFQUNBO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQztFQUNBO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQztFQUNBO0lBQ0UsK0JBQStCO0lBQy9CLG1DQUFtQztFQUNyQzs7RUFFQTtJQUNFLHVDQUF1QztFQUN6QztFQUNBO0lBQ0Usc0NBQXNDO0VBQ3hDO0VBQ0E7SUFDRSx3Q0FBd0M7RUFDMUM7RUFDQTtJQUNFLG9DQUFvQztFQUN0QztFQUNBO0lBQ0UseUNBQXlDO0VBQzNDOztFQUVBO0lBQ0U7TUFDRSxnQkFBZ0I7SUFDbEI7SUFDQTtNQUNFLGtCQUFrQjtJQUNwQjtFQUNGOztFQUVBO0lBQ0U7TUFDRSwwQkFBMEI7SUFDNUI7SUFDQTtNQUNFLHFCQUFxQjtJQUN2QjtJQUNBO01BQ0UsNkJBQTZCO0lBQy9CO0lBQ0E7TUFDRSx5QkFBeUI7SUFDM0I7SUFDQTtNQUNFLHNCQUFzQjtJQUN4QjtFQUNGOztFQUVBO0lBQ0U7TUFDRSxrQkFBa0I7SUFDcEI7SUFDQTtNQUNFLHFCQUFxQjtJQUN2QjtJQUNBO01BQ0Usc0JBQXNCO0lBQ3hCO0lB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Q0FBa0M7SUFDcEM7SUFDQTtNQUNFLGtDQUFrQztJQUNwQztJQUNBO01BQ0Usa0NBQWtDO0lBQ3BDO0lBQ0E7TUFDRSxrQ0FBa0M7SUFDcEM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxtQ0FBbUM7SUFDckM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxtQ0FBbUM7SUFDckM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0UsbUNBQW1DO0lBQ3JDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG1DQUFtQztJQUNyQztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLHFDQUFxQztJQUN2QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7SUFDQTtNQUNFLG9DQUFvQztJQUN0QztJQUNBO01BQ0Usb0NBQW9DO0lBQ3RDO0lBQ0E7TUFDRSxvQ0FBb0M7SUFDdEM7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLXRleHQge1xcbiAgJjp3aGVyZSgueHNtKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC14c20pO1xcbiAgfVxcbiAgJjp3aGVyZSguc20pIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgfVxcbiAgJjp3aGVyZSguYmFzZSkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1iYXNlKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWJhc2UpO1xcbiAgfVxcbiAgJjp3aGVyZSgubGcpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGcpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtbGcpO1xcbiAgfVxcbiAgJjp3aGVyZSgueGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteGwpO1xcbiAgfVxcbiAgJjp3aGVyZSgudC0yeGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtMnhsKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTJ4bCk7XFxuICB9XFxuICAmOndoZXJlKC50LTN4bCkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS0zeGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtM3hsKTtcXG4gIH1cXG4gICY6d2hlcmUoLnQtNHhsKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLTR4bCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC00eGwpO1xcbiAgfVxcbiAgJjp3aGVyZSgudC01eGwpIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtNXhsKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTV4bCk7XFxuICB9XFxuICAmOndoZXJlKC50LTZ4bCkge1xcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS02eGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtNnhsKTtcXG4gIH1cXG5cXG4gICY6d2hlcmUoLnJlZ3VsYXIpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xcbiAgfVxcbiAgJjp3aGVyZSgubWVkaXVtKSB7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbiAgfVxcbiAgJjp3aGVyZSguc2VtaWJvbGQpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG4gICY6d2hlcmUoLmJvbGQpIHtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbiAgfVxcbiAgJjp3aGVyZSguZXh0cmFib2xkKSB7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1leHRyYWJvbGQpO1xcbiAgfVxcblxcbiAgJltjbGFzcyo9J3RleHRBbGlnbi0nXSB7XFxuICAgICYudGV4dEFsaWduLWxlZnQge1xcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIH1cXG4gICAgJi50ZXh0QWxpZ24tY2VudGVyIHtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd0ZXh0RGVjb3JhdGlvbi0nXSB7XFxuICAgICYudGV4dERlY29yYXRpb24tdW5kZXJsaW5lIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLW5vbmUge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLWxpbmVUaHJvdWdoIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG4gICAgfVxcbiAgICAmLnRleHREZWNvcmF0aW9uLW92ZXJsaW5lIHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lO1xcbiAgICB9XFxuICAgICYudGV4dERlY29yYXRpb24tYmxpbmsge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd3b3JkQnJlYWstJ10ge1xcbiAgICAmLndvcmRCcmVhay1ub3JtYWwge1xcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1icmVha0FsbCB7XFxuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xcbiAgICB9XFxuICAgICYud29yZEJyZWFrLWJyZWFrV29yZCB7XFxuICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1rZWVwQWxsIHtcXG4gICAgICB3b3JkLWJyZWFrOiBrZWVwLWFsbDtcXG4gICAgfVxcbiAgICAmLndvcmRCcmVhay1rZWVwV29yZCB7XFxuICAgICAgd29yZC1icmVhazoga2VlcC13b3JkO1xcbiAgICB9XFxuICAgICYud29yZEJyZWFrLWJyZWFrU3BhY2VzIHtcXG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1zcGFjZXM7XFxuICAgIH1cXG4gICAgJi53b3JkQnJlYWstYWxsIHtcXG4gICAgICB3b3JkLWJyZWFrOiBhbGw7XFxuICAgIH1cXG4gIH1cXG5cXG4gICZbY2xhc3MqPSd3aGl0ZVNwYWNlLSddIHtcXG4gICAgJi53aGl0ZVNwYWNlLW5vcm1hbCB7XFxuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgfVxcbiAgICAmLndoaXRlU3BhY2Utbm93cmFwIHtcXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB9XFxuICAgICYud2hpdGVTcGFjZS1wcmUge1xcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XFxuICAgIH1cXG4gICAgJi53aGl0ZVNwYWNlLXByZUxpbmUge1xcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcXG4gICAgfVxcbiAgICAmLndoaXRlU3BhY2UtcHJlV3JhcCB7XFxuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgICB9XFxuICB9XFxuXFxuICAmW2NsYXNzKj0nY29sb3ItJ10ge1xcbiAgICAmLmNvbG9yLWJsYWNrIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XFxuICAgIH1cXG4gICAgJi5jb2xvci13aGl0ZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheUZhIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWZhKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXlGNCB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1mNCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5RTQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktZTQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheUQ0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXlBMSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1hMSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5NzEge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktNzEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheTUyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTUyKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWdyYXkzZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS0zZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1ncmF5Mjcge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWdyYXktMjcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItZ3JheTE4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ncmF5LTE4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUY0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWY0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUU5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWU5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZURkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWRkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUMzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWMzKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZUE4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLWE4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTk1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTk1KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTZmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTRjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTRjKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLXB1cnBsZTM5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWRGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWZmZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWRGYiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkRjMge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWYzKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEU4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1lOCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWREZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtZGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkQzkge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLWM5KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFJlZEIwIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXJlZC1iMCk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRSZWQ4ZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1yZWQtOGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UmVkNmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcmVkLTZlKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFBpbmtGZiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1waW5rLWZmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFBpbmtGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtcGluay1mZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0ZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0ZkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZmQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0Y0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZjQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0VjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0Q5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstZDkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGlua0I5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstYjkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGluazkzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstOTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50UGluazZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXBpbmstNmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUZjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUY4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjgpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUYyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUVjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUUxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUM4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYzgpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YUE5IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYTkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YTgzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWFnZW50YTVlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1hZ2VudGEtNWUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUYxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtZjEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUUzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtZTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUM3IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtYzcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZUE1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtYTUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTgxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtODEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTI1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMjUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTFjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50Qmx1ZTE2IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJsdWUtMTYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEVjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtZWMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtZDEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludEE3IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtYTcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDZlIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtNmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDJkIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMmQpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDAxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMDEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDBiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMGIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDBmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMGYpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDExIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMTEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50TWludDEzIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW1pbnQtMTMpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW5FYyB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi1lYyk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbkQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLWQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuQTcge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTcpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW42ZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi02ZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjQxIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTQxKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMjIge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50R3JlZW4xNiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1ncmVlbi0xNik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjI4IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTI4KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudEdyZWVuMTY2IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTE2Nik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRHcmVlbjE0IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWdyZWVuLTE0KTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWZkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0ZjIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mYyk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3dGYiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RmZiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1mZmIpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93RTAge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LWUwKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudFllbGxvd0I1IHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LXllbGxvdy1iNSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRZZWxsb3c4YSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC15ZWxsb3ctOGEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50WWVsbG93NWYge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQteWVsbG93LTVmKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZmIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZmUge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZSk7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGZSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmUpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRmQge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZkKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUZiIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2VGOSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZjkpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlRWEge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLWVhKTtcXG4gICAgfVxcbiAgICAmLmNvbG9yLWFjY2VudE9yYW5nZUMyIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMik7XFxuICAgIH1cXG4gICAgJi5jb2xvci1hY2NlbnRPcmFuZ2U5YSB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1vcmFuZ2UtOWEpO1xcbiAgICB9XFxuICAgICYuY29sb3ItYWNjZW50T3JhbmdlN2Mge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtb3JhbmdlLTdjKTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5jb21wb25lbnQtbG9hZGluZy1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmxvYWRpbmctaW5kaWNhdG9yLXJpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG59XG5cbi5sb2FkaW5nLWluZGljYXRvci1zaW5nbGUtcmluZyB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogM3B4IHNvbGlkO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICAvKiDquLDrs7jqsJLsnYAgd2hpdGUsIOyDgeychOyXkOyEnCAtLXNwaW5uZXItYm9yZGVyLWNvbG9yIOyjvOyehSAqL1xuICBib3JkZXItY29sb3I6IHZhcigtLXNwaW5uZXItYm9yZGVyLWNvbG9yLCB2YXIoLS1jb2xvci1wcmltYXJ5LXdoaXRlKSkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi8qIG50aC1jaGlsZCDsp4Dsl7DsnYAg6re464yA66GcIENTUyBvciDsnbjrnbzsnbgg7KSRIO2VmOuCmOunjCDsgqzsmqntlZzri6TrqbQsIOyVhOuemOuKlCDsoJzqsbAg6rCA64qlICjsp4DquIjsnYAg7J2465287J24IOyCrOyaqSDspJEpICovXG4vKlxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuNDVzOyB9XG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5OiAtMC4zczsgfVxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuMTVzOyB9XG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDQpIHsgYW5pbWF0aW9uLWRlbGF5OiAwczsgfVxuKi9cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsYUFBYTtFQUNiLFdBQVc7RUFDWCxZQUFZO0VBQ1osbUJBQW1CO0VBQ25CLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixXQUFXO0VBQ1gsWUFBWTtBQUNkOztBQUVBO0VBQ0Usc0JBQXNCO0VBQ3RCLGNBQWM7RUFDZCxrQkFBa0I7RUFDbEIsV0FBVztFQUNYLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsa0JBQWtCO0VBQ2xCLDhEQUE4RDtFQUM5RCwrQ0FBK0M7RUFDL0MseUdBQXlHO0FBQzNHOztBQUVBLHVFQUF1RTtBQUN2RTs7Ozs7Q0FLQzs7QUFFRDtFQUNFLEtBQUssdUJBQXVCLEVBQUU7RUFDOUIsT0FBTyx5QkFBeUIsRUFBRTtBQUNwQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuY29tcG9uZW50LWxvYWRpbmctY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmxvYWRpbmctaW5kaWNhdG9yLXJpbmcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxufVxcblxcbi5sb2FkaW5nLWluZGljYXRvci1zaW5nbGUtcmluZyB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogM3B4IHNvbGlkO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XFxuICAvKiDquLDrs7jqsJLsnYAgd2hpdGUsIOyDgeychOyXkOyEnCAtLXNwaW5uZXItYm9yZGVyLWNvbG9yIOyjvOyehSAqL1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zcGlubmVyLWJvcmRlci1jb2xvciwgdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSkpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4vKiBudGgtY2hpbGQg7KeA7Jew7J2AIOq3uOuMgOuhnCBDU1Mgb3Ig7J2465287J24IOykkSDtlZjrgpjrp4wg7IKs7Jqp7ZWc64uk66m0LCDslYTrnpjripQg7KCc6rGwIOqwgOuKpSAo7KeA6riI7J2AIOyduOudvOyduCDsgqzsmqkg7KSRKSAqL1xcbi8qXFxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgxKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuNDVzOyB9XFxuLmxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogLTAuM3M7IH1cXG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDMpIHsgYW5pbWF0aW9uLWRlbGF5OiAtMC4xNXM7IH1cXG4ubG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmc6bnRoLWNoaWxkKDQpIHsgYW5pbWF0aW9uLWRlbGF5OiAwczsgfVxcbiovXFxuXFxuQGtleWZyYW1lcyBsZHMtcmluZyB7XFxuICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XFxuICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLnJhZGlvIHtcbiAgJjp3aGVyZSgucmFkaW8tZ3JvdXApIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxNnB4O1xuICB9XG4gICY6d2hlcmUoLnJhZGlvLWJ1dHRvbikge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XG4gIH1cbiAgJjp3aGVyZSgucmFkaW8taW5kaWNhdG9yKSB7XG4gICAgd2lkdGg6IDhweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcbiAgfVxuICAmOndoZXJlKC5yYWRpby1sYWJlbCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1ibGFjayk7XG4gIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9yYWRpby9yYWRpby1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRTtJQUNFLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsU0FBUztFQUNYO0VBQ0E7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiw4Q0FBOEM7RUFDaEQ7RUFDQTtJQUNFLFVBQVU7SUFDVixXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLDhDQUE4QztFQUNoRDtFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLHNDQUFzQztJQUN0QyxpQ0FBaUM7RUFDbkM7QUFDRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIucmFkaW8ge1xcbiAgJjp3aGVyZSgucmFkaW8tZ3JvdXApIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiAxNnB4O1xcbiAgfVxcbiAgJjp3aGVyZSgucmFkaW8tYnV0dG9uKSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktZ3JheS1lNCk7XFxuICB9XFxuICAmOndoZXJlKC5yYWRpby1pbmRpY2F0b3IpIHtcXG4gICAgd2lkdGg6IDhweDtcXG4gICAgaGVpZ2h0OiA4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcG9pbnQtcHVycGxlLTM5KTtcXG4gIH1cXG4gICY6d2hlcmUoLnJhZGlvLWxhYmVsKSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LWJsYWNrKTtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAuYmFzZS1tb2RhbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgcGFkZGluZzogMzBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuXG4gICYubW9kYWwtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIHotaW5kZXg6IDk5OTk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS13aGl0ZSk7XG4gIH1cblxuICAmLm1vZGFsLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIHotaW5kZXg6IDk5OTg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRhaW5lciB7XG4gICYuc2l6ZS1zIHtcbiAgICB3aWR0aDogNDAwcHg7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgd2lkdGg6IDQ1MHB4O1xuICB9XG5cbiAgJi5zaXplLWwge1xuICAgIHdpZHRoOiA1MDBweDtcbiAgfVxufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24ge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDE2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiAzMHB4O1xuXG4gICYucm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxNnB4O1xuXG4gICAgPiAqIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgfVxuICB9XG5cbiAgJi5jb2x1bW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTBweDtcblxuICAgID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC1zdHlsZS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLG1CQUFtQjs7RUFFbkIsYUFBYTtFQUNiLGtCQUFrQjs7RUFFbEI7SUFDRSxlQUFlO0lBQ2YsUUFBUTtJQUNSLFNBQVM7SUFDVCxnQ0FBZ0M7SUFDaEMsYUFBYTtJQUNiLDRDQUE0QztFQUM5Qzs7RUFFQTtJQUNFLGVBQWU7SUFDZixNQUFNO0lBQ04sT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1Qsb0NBQW9DO0lBQ3BDLGFBQWE7RUFDZjtBQUNGOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxhQUFhO0VBQ2IsMkJBQTJCO0VBQzNCLG1CQUFtQjtFQUNuQixXQUFXO0FBQ2I7O0FBRUE7RUFDRTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDs7RUFFQTtJQUNFLFlBQVk7RUFDZDtBQUNGOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLDhCQUE4QjtFQUM5QixtQkFBbUI7RUFDbkIsU0FBUztFQUNULFdBQVc7RUFDWCxnQkFBZ0I7O0VBRWhCO0lBQ0UsYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsU0FBUzs7SUFFVDtNQUNFLE9BQU87SUFDVDtFQUNGOztFQUVBO0lBQ0UsYUFBYTtJQUNiLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLFNBQVM7O0lBRVQ7TUFDRSxXQUFXO0lBQ2I7RUFDRjtBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5iYXNlLW1vZGFsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gIHBhZGRpbmc6IDMwcHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuXFxuICAmLm1vZGFsLWNvbnRhaW5lciB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiA1MCU7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgIHotaW5kZXg6IDk5OTk7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnktd2hpdGUpO1xcbiAgfVxcblxcbiAgJi5tb2RhbC1vdmVybGF5IHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICB0b3A6IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBib3R0b206IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gICAgei1pbmRleDogOTk5ODtcXG4gIH1cXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBtb2RhbC13aXRoLWRvdWJsZS1idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZS1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jb250YWluZXIge1xcbiAgJi5zaXplLXMge1xcbiAgICB3aWR0aDogNDAwcHg7XFxuICB9XFxuXFxuICAmLnNpemUtbSB7XFxuICAgIHdpZHRoOiA0NTBweDtcXG4gIH1cXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgd2lkdGg6IDUwMHB4O1xcbiAgfVxcbn1cXG5cXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlLWljb24ge1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuXFxuLm1vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi10aXRsZSB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcblxcbi5tb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY29udGVudCB7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbn1cXG5cXG4ubW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiAxNnB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW4tdG9wOiAzMHB4O1xcblxcbiAgJi5yb3cge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAxNnB4O1xcblxcbiAgICA+ICoge1xcbiAgICAgIGZsZXg6IDE7XFxuICAgIH1cXG4gIH1cXG5cXG4gICYuY29sdW1uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMTBweDtcXG5cXG4gICAgPiAqIHtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAubnVyaS10aGVtZSB7XG4gIC0tY29sb3ItcHJpbWFyeS1ibGFjazogIzAwMDAwMDtcbiAgLS1jb2xvci1wcmltYXJ5LXdoaXRlOiAjZmZmZmZmO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS1mYTogI2ZhZmFmYTtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktZjQ6ICNmNGY0ZjU7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWU0OiAjZTRlNGU3O1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS1kNDogI2Q0ZDRkODtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktYTE6ICNhMWExYWE7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTcxOiAjNzE3MTdhO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS01MjogIzUyNTI1YjtcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktM2Y6ICMzZjNmNDY7XG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTI3OiAjMjcyNzJhO1xuICAtLWNvbG9yLXByaW1hcnktZ3JheS0xODogIzE4MTgxYjtcblxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1mNDogI2Y0ZWZmYTtcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtZTk6ICNlOWUwZjU7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLWRkOiAjZGRkMWYwO1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1jMzogI2MzYjRkZDtcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtYTg6ICNhODk0Yzc7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTk1OiAjOTU3ZWI0O1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS02ZjogIzZmNTZhMztcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtNGM6ICM0YzI3N2M7XG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTQxOiAjNGMxZDg4O1xuICAtLWNvbG9yLXBvaW50LXB1cnBsZS0zOTogIzM5MWQ1ZDtcblxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmY6ICNmZmY1ZjY7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1mZmU6ICNmZmU4ZTk7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1mYjogI2ZiY2ZkMjtcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWYzOiAjZjM5YWEwO1xuICAtLWNvbG9yLWFjY2VudC1yZWQtZTg6ICNlODZmNzc7XG4gIC0tY29sb3ItYWNjZW50LXJlZC1kZjogI2RmNTM1YztcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWM5OiAjYzk0NzUxO1xuICAtLWNvbG9yLWFjY2VudC1yZWQtYjA6ICNiMDJlNGM7XG4gIC0tY29sb3ItYWNjZW50LXJlZC04ZjogIzhmMjQzYTtcbiAgLS1jb2xvci1hY2NlbnQtcmVkLTZlOiAjNmUxYTJjO1xuXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmY6ICNmZmYxZjY7XG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmZlOiAjZmZlNGVlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWZlOiAjZmVjZmUzO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWZkOiAjZmRhNGNjO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWY0OiAjZjQ3MmI2O1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWVjOiAjZWM2ZmFlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWQ5OiAjZDk1ZDlhO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLWI5OiAjYjk0YTdlO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLTkzOiAjOTMzODVmO1xuICAtLWNvbG9yLWFjY2VudC1waW5rLTZlOiAjNmUyNjQ0O1xuXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmU6ICNmZWYwZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZmM6ICNmY2U0ZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjg6ICNmOGM2ZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjI6ICNmMjliZmY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZWM6ICNlYzVjZWY7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTE6ICNlMTNiZTc7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYzg6ICNjODJmY2M7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtYTk6ICNhOTIzYTg7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODM6ICM4MzFjODM7XG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtNWU6ICM1ZTE0NWU7XG5cbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1mMTogI2YxZjRmZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1lMzogI2UzZThmZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1jNzogI2M3ZDJmZTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1hNTogI2E1YjRmYztcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS04MTogIzgxOGNmODtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0yNTogIzI1NjNlYjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZjogIzFmNTJjOTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZTogIzFlNDBhZjtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xYzogIzFjMzQ4YTtcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xNjogIzE2Mjc2MztcblxuICAtLWNvbG9yLWFjY2VudC1taW50LWVjOiAjZWNmZWZkO1xuICAtLWNvbG9yLWFjY2VudC1taW50LWQxOiAjZDFmYWY3O1xuICAtLWNvbG9yLWFjY2VudC1taW50LWE3OiAjYTdmM2VlO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTZlOiAjNmVlN2UwO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTJkOiAjMmRkNGNiO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTAxOiAjMDFlY2UxO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTBiOiAjMGJjNWJjO1xuICAtLWNvbG9yLWFjY2VudC1taW50LTBmOiAjMGY5Zjk5O1xuICAtLWNvbG9yLWFjY2VudC1taW50LTExOiAjMTE3ZDc4O1xuICAtLWNvbG9yLWFjY2VudC1taW50LTEzOiAjMTM1YzU4O1xuXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLWVjOiAjZWNmZGYzO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi1kMTogI2QxZmFlMTtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTc6ICNhN2YzYzg7XG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTZlOiAjNmVlN2EzO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi00MTogIzQxZTE3NjtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjI6ICMyMmM1NWU7XG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTE2OiAjMTZhMzRhO1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0yODogIzI4OWEzYTtcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTY2OiAjMTY2NTM0O1xuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0xNDogIzE0NTMyZDtcblxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmY6ICNmZmZiZWI7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy1mZTogI2ZlZjNjNztcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWZkOiAjZmRlNjhhO1xuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmM6ICNmY2QzNGQ7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy1mYjogI2ZiYmYyNDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWZmYjogI2ZmYjgwMDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWUwOiAjZTBhMTA2O1xuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctYjU6ICNiNTgxMDU7XG4gIC0tY29sb3ItYWNjZW50LXllbGxvdy04YTogIzhhNjQwNDtcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LTVmOiAjNWY0NzAzO1xuXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZjogI2ZmZjdlZDtcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZTogI2ZmZWRkNTtcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZlOiAjZmVkN2FhO1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZmQ6ICNmZGJhNzQ7XG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYjogI2ZiOTIzYztcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWY5OiAjZjk3MzE2O1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtZWE6ICNlYTU4MGM7XG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMjogI2MyNDEwYztcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLTlhOiAjOWEzNDEyO1xuICAtLWNvbG9yLWFjY2VudC1vcmFuZ2UtN2M6ICM3YzJkMTI7XG5cbiAgLS1jb2xvci1ldGMtc2tlbGV0b24tZTQ6ICMwZjBmMTc7XG4gIC0tY29sb3ItZXRjLXNrZWxldG9uLWY3OiAjZjdmN2Y4O1xuICAtLWNvbG9yLWV0Yy1za2VsZXRvbi1mZjogI2ZmZmZmZjtcblxuICAtLWNvbG9yLWV0Yy1ob3Zlci1lZTogI2VlZWVlZTtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3R5bGVzL3Rva2VuL2NvbG9yLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDOztFQUVoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7O0VBRWhDLDhCQUE4QjtFQUM5QiwrQkFBK0I7RUFDL0IsOEJBQThCO0VBQzlCLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsOEJBQThCO0VBQzlCLDhCQUE4QjtFQUM5Qiw4QkFBOEI7RUFDOUIsOEJBQThCO0VBQzlCLDhCQUE4Qjs7RUFFOUIsK0JBQStCO0VBQy9CLGdDQUFnQztFQUNoQywrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCOztFQUUvQixrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7RUFDbEMsa0NBQWtDO0VBQ2xDLGtDQUFrQztFQUNsQyxrQ0FBa0M7O0VBRWxDLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjs7RUFFL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCO0VBQy9CLCtCQUErQjtFQUMvQiwrQkFBK0I7RUFDL0IsK0JBQStCOztFQUUvQixnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQztFQUNoQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGlDQUFpQztFQUNqQyxnQ0FBZ0M7O0VBRWhDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsa0NBQWtDO0VBQ2xDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQzs7RUFFakMsaUNBQWlDO0VBQ2pDLGtDQUFrQztFQUNsQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMsaUNBQWlDOztFQUVqQyxnQ0FBZ0M7RUFDaEMsZ0NBQWdDO0VBQ2hDLGdDQUFnQzs7RUFFaEMsNkJBQTZCO0FBQy9CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5udXJpLXRoZW1lIHtcXG4gIC0tY29sb3ItcHJpbWFyeS1ibGFjazogIzAwMDAwMDtcXG4gIC0tY29sb3ItcHJpbWFyeS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWZhOiAjZmFmYWZhO1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktZjQ6ICNmNGY0ZjU7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS1lNDogI2U0ZTRlNztcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LWQ0OiAjZDRkNGQ4O1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktYTE6ICNhMWExYWE7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS03MTogIzcxNzE3YTtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTUyOiAjNTI1MjViO1xcbiAgLS1jb2xvci1wcmltYXJ5LWdyYXktM2Y6ICMzZjNmNDY7XFxuICAtLWNvbG9yLXByaW1hcnktZ3JheS0yNzogIzI3MjcyYTtcXG4gIC0tY29sb3ItcHJpbWFyeS1ncmF5LTE4OiAjMTgxODFiO1xcblxcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtZjQ6ICNmNGVmZmE7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1lOTogI2U5ZTBmNTtcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLWRkOiAjZGRkMWYwO1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtYzM6ICNjM2I0ZGQ7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS1hODogI2E4OTRjNztcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTk1OiAjOTU3ZWI0O1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtNmY6ICM2ZjU2YTM7XFxuICAtLWNvbG9yLXBvaW50LXB1cnBsZS00YzogIzRjMjc3YztcXG4gIC0tY29sb3ItcG9pbnQtcHVycGxlLTQxOiAjNGMxZDg4O1xcbiAgLS1jb2xvci1wb2ludC1wdXJwbGUtMzk6ICMzOTFkNWQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmY6ICNmZmY1ZjY7XFxuICAtLWNvbG9yLWFjY2VudC1yZWQtZmZlOiAjZmZlOGU5O1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWZiOiAjZmJjZmQyO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWYzOiAjZjM5YWEwO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWU4OiAjZTg2Zjc3O1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWRmOiAjZGY1MzVjO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWM5OiAjYzk0NzUxO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLWIwOiAjYjAyZTRjO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLThmOiAjOGYyNDNhO1xcbiAgLS1jb2xvci1hY2NlbnQtcmVkLTZlOiAjNmUxYTJjO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtcGluay1mZjogI2ZmZjFmNjtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmZlOiAjZmZlNGVlO1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay1mZTogI2ZlY2ZlMztcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZmQ6ICNmZGE0Y2M7XFxuICAtLWNvbG9yLWFjY2VudC1waW5rLWY0OiAjZjQ3MmI2O1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay1lYzogI2VjNmZhZTtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstZDk6ICNkOTVkOWE7XFxuICAtLWNvbG9yLWFjY2VudC1waW5rLWI5OiAjYjk0YTdlO1xcbiAgLS1jb2xvci1hY2NlbnQtcGluay05MzogIzkzMzg1ZjtcXG4gIC0tY29sb3ItYWNjZW50LXBpbmstNmU6ICM2ZTI2NDQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWZlOiAjZmVmMGZmO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1mYzogI2ZjZTRmZjtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZjg6ICNmOGM2ZmY7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWYyOiAjZjI5YmZmO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1lYzogI2VjNWNlZjtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtZTE6ICNlMTNiZTc7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLWM4OiAjYzgyZmNjO1xcbiAgLS1jb2xvci1hY2NlbnQtbWFnZW50YS1hOTogI2E5MjNhODtcXG4gIC0tY29sb3ItYWNjZW50LW1hZ2VudGEtODM6ICM4MzFjODM7XFxuICAtLWNvbG9yLWFjY2VudC1tYWdlbnRhLTVlOiAjNWUxNDVlO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1mMTogI2YxZjRmZjtcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtZTM6ICNlM2U4ZmY7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLWM3OiAjYzdkMmZlO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS1hNTogI2E1YjRmYztcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtODE6ICM4MThjZjg7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLTI1OiAjMjU2M2ViO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xZjogIzFmNTJjOTtcXG4gIC0tY29sb3ItYWNjZW50LWJsdWUtMWU6ICMxZTQwYWY7XFxuICAtLWNvbG9yLWFjY2VudC1ibHVlLTFjOiAjMWMzNDhhO1xcbiAgLS1jb2xvci1hY2NlbnQtYmx1ZS0xNjogIzE2Mjc2MztcXG5cXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtZWM6ICNlY2ZlZmQ7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LWQxOiAjZDFmYWY3O1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC1hNzogI2E3ZjNlZTtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtNmU6ICM2ZWU3ZTA7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LTJkOiAjMmRkNGNiO1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC0wMTogIzAxZWNlMTtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtMGI6ICMwYmM1YmM7XFxuICAtLWNvbG9yLWFjY2VudC1taW50LTBmOiAjMGY5Zjk5O1xcbiAgLS1jb2xvci1hY2NlbnQtbWludC0xMTogIzExN2Q3ODtcXG4gIC0tY29sb3ItYWNjZW50LW1pbnQtMTM6ICMxMzVjNTg7XFxuXFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi1lYzogI2VjZmRmMztcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLWQxOiAjZDFmYWUxO1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tYTc6ICNhN2YzYzg7XFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi02ZTogIzZlZTdhMztcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTQxOiAjNDFlMTc2O1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMjI6ICMyMmM1NWU7XFxuICAtLWNvbG9yLWFjY2VudC1ncmVlbi0xNjogIzE2YTM0YTtcXG4gIC0tY29sb3ItYWNjZW50LWdyZWVuLTI4OiAjMjg5YTNhO1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTY2OiAjMTY2NTM0O1xcbiAgLS1jb2xvci1hY2NlbnQtZ3JlZW4tMTQ6ICMxNDUzMmQ7XFxuXFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmY6ICNmZmZiZWI7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmU6ICNmZWYzYzc7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmQ6ICNmZGU2OGE7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmM6ICNmY2QzNGQ7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmI6ICNmYmJmMjQ7XFxuICAtLWNvbG9yLWFjY2VudC15ZWxsb3ctZmZiOiAjZmZiODAwO1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWUwOiAjZTBhMTA2O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LWI1OiAjYjU4MTA1O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LThhOiAjOGE2NDA0O1xcbiAgLS1jb2xvci1hY2NlbnQteWVsbG93LTVmOiAjNWY0NzAzO1xcblxcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmOiAjZmZmN2VkO1xcbiAgLS1jb2xvci1hY2NlbnQtb3JhbmdlLWZmZTogI2ZmZWRkNTtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZTogI2ZlZDdhYTtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mZDogI2ZkYmE3NDtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mYjogI2ZiOTIzYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1mOTogI2Y5NzMxNjtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1lYTogI2VhNTgwYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS1jMjogI2MyNDEwYztcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS05YTogIzlhMzQxMjtcXG4gIC0tY29sb3ItYWNjZW50LW9yYW5nZS03YzogIzdjMmQxMjtcXG5cXG4gIC0tY29sb3ItZXRjLXNrZWxldG9uLWU0OiAjMGYwZjE3O1xcbiAgLS1jb2xvci1ldGMtc2tlbGV0b24tZjc6ICNmN2Y3Zjg7XFxuICAtLWNvbG9yLWV0Yy1za2VsZXRvbi1mZjogI2ZmZmZmZjtcXG5cXG4gIC0tY29sb3ItZXRjLWhvdmVyLWVlOiAjZWVlZWVlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5udXJpLWRpc3BsYXktZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5udXJpLWRpc3BsYXktaW5saW5lLWZsZXgge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cblxuLm51cmktZGlzcGxheS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubnVyaS1kaXNwbGF5LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLm51cmktZGlzcGxheS1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbn1cblxuLm51cmktZGlzcGxheS1pbmxpbmUtZ3JpZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ncmlkO1xufVxuXG4ubnVyaS1kaXNwbGF5LWNvbnRlbnRzIHtcbiAgZGlzcGxheTogY29udGVudHM7XG59XG5cbi5udXJpLWRpc3BsYXktbm9uZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9kaXNwbGF5LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxhQUFhO0FBQ2ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLm51cmktZGlzcGxheS1mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWZsZXgge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcblxcbi5udXJpLWRpc3BsYXktYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLm51cmktZGlzcGxheS1ncmlkIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxufVxcblxcbi5udXJpLWRpc3BsYXktaW5saW5lLWdyaWQge1xcbiAgZGlzcGxheTogaW5saW5lLWdyaWQ7XFxufVxcblxcbi5udXJpLWRpc3BsYXktY29udGVudHMge1xcbiAgZGlzcGxheTogY29udGVudHM7XFxufVxcblxcbi5udXJpLWRpc3BsYXktbm9uZSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5iYXNlLWJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNDBweDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBhdHRyKGRhdGEtYmFja2dyb3VuZENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG4gIGNvbG9yOiBhdHRyKGRhdGEtdGV4dENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG4gIGJvcmRlcjogYXR0cihkYXRhLWJvcmRlckNvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XG5cbiAgJi5zaXplLWwge1xuICAgIGhlaWdodDogNDhweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIH1cblxuICAmLnNpemUtbSB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1yIHtcbiAgICBoZWlnaHQ6IDM2cHg7XG5cbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICB9XG5cbiAgJi5zaXplLXMge1xuICAgIGhlaWdodDogMzJweDtcblxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gICYuc2l6ZS1zbSB7XG4gICAgaGVpZ2h0OiAyOHB4O1xuXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQteHNtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIH1cblxuICAmLmljb24tdGV4dC1vcHRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qIG9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4ub3B0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmljb24tdGV4dCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDRweDtcblxuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogaWNvbi10ZXh0LW9wdGlvbi1iYWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLmljb24tdGV4dC1vcHRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgcGFkZGluZzogMCAyMHB4O1xuXG4gID4gc3BhbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsUUFBUTtFQUNSLG1CQUFtQjs7RUFFbkIsK0RBQStEO0VBQy9ELDhDQUE4QztFQUM5QyxpREFBaUQ7O0VBRWpEO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosOEJBQThCO0lBQzlCLGtDQUFrQztJQUNsQyx3Q0FBd0M7RUFDMUM7O0VBRUE7SUFDRSxZQUFZOztJQUVaLDhCQUE4QjtJQUM5QixrQ0FBa0M7SUFDbEMsd0NBQXdDO0VBQzFDOztFQUVBO0lBQ0UsWUFBWTs7SUFFWiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLG9DQUFvQztFQUN0Qzs7RUFFQTtJQUNFLFlBQVk7O0lBRVosK0JBQStCO0lBQy9CLG1DQUFtQztJQUNuQyxvQ0FBb0M7RUFDdEM7O0VBRUE7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4Qjs7SUFFOUIsZUFBZTtFQUNqQjtBQUNGOztBQUVBOzs7O21HQUltRzs7QUFFbkc7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1Qjs7RUFFdkIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTs7OzttR0FJbUc7O0FBRW5HO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsUUFBUTs7RUFFUixpQkFBaUI7RUFDakIsbUJBQW1CO0FBQ3JCOztBQUVBOzs7O29HQUlvRzs7QUFFcEc7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDhCQUE4Qjs7RUFFOUIsZUFBZTs7RUFFZjtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsUUFBUTtFQUNWO0FBQ0ZcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLmJhc2UtYmFkZ2Uge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDQwcHg7XFxuXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBhdHRyKGRhdGEtYmFja2dyb3VuZENvbG9yIGNvbG9yLCB0cmFuc3BhcmVudCk7XFxuICBjb2xvcjogYXR0cihkYXRhLXRleHRDb2xvciBjb2xvciwgdHJhbnNwYXJlbnQpO1xcbiAgYm9yZGVyOiBhdHRyKGRhdGEtYm9yZGVyQ29sb3IgY29sb3IsIHRyYW5zcGFyZW50KTtcXG5cXG4gICYuc2l6ZS1sIHtcXG4gICAgaGVpZ2h0OiA0OHB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XFxuICB9XFxuXFxuICAmLnNpemUtbSB7XFxuICAgIGhlaWdodDogNDBweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtc20pO1xcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xcbiAgfVxcblxcbiAgJi5zaXplLXIge1xcbiAgICBoZWlnaHQ6IDM2cHg7XFxuXFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXNtKTtcXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zIHtcXG4gICAgaGVpZ2h0OiAzMnB4O1xcblxcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC1zbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuc2l6ZS1zbSB7XFxuICAgIGhlaWdodDogMjhweDtcXG5cXG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXhzbSk7XFxuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIH1cXG5cXG4gICYuaWNvbi10ZXh0LW9wdGlvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG5cXG4gICAgcGFkZGluZzogMCAyMHB4O1xcbiAgfVxcbn1cXG5cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKiBvcHRpb24tYmFkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcblxcbi5vcHRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG5cXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG4uaWNvbi10ZXh0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG5cXG4gIGJvcmRlci13aWR0aDogMXB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcXG4gKiBpY29uLXRleHQtb3B0aW9uLWJhZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuLmljb24tdGV4dC1vcHRpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFxuICBwYWRkaW5nOiAwIDIwcHg7XFxuXFxuICA+IHNwYW4ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2NvbG9yLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2ZvbnQuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdG9rZW4vcmFkaXVzLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Rva2VuL2N1cnNvci5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9yZXNldC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9kaXNwbGF5LmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3Bvc2l0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfN19fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZsZXgtZGlyZWN0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOF9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FsaWduLWl0ZW1zLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2p1c3RpZnktY29udGVudC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzEwX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vb3ZlcmZsb3cuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXItc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2JhZGdlL2JhZGdlLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTNfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2stYm94LXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9lbGVtZW50cy90ZXh0L3RleHQtc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xNl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTdfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9sb2FkaW5nL2lubGluZS1sb2FkaW5nL2lubGluZS1sb2FkaW5nLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMThfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9sb2FkaW5nL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmctc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xOV9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL21vZGFsL21vZGFsLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjBfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9yYWRpby9yYWRpby1zdHlsZS5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIxX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL2NvbXBvbmVudHMvdGFibGUvdGFibGUtc3R5bGUuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yMl9fXyBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9jb21wb25lbnRzL3RleHQtZmllbGQvdGV4dC1maWVsZC1zdHlsZS5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIzX19fIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjRfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duLXN0eWxlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjVfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vY29tcG9uZW50cy9jb2xsYXBzaWJsZS1tZW51L2NvbGxhcHNpYmxlLW1lbnUtc3R5bGUuY3NzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfN19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfOV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTBfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzExX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTNfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzE0X19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xNV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTZfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzE3X19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8xOF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMTlfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIwX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjJfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzIzX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yNF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMjVfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAvKiBUb2tlbiBzdHlsZXMgKi9cblxuLyogUmVzZXQgc3R5bGVzICovXG5cbi8qIFV0aWxpdHkgc3R5bGVzICovXG5cbi8qIENvbXBvbmVudCBzdHlsZXMgKi9gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3N0eWxlcy9pbmRleC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsaUJBQWlCOztBQU1qQixpQkFBaUI7O0FBR2pCLG1CQUFtQjs7QUFRbkIscUJBQXFCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIFRva2VuIHN0eWxlcyAqL1xcbkBpbXBvcnQgJy4vdG9rZW4vY29sb3IuY3NzJztcXG5AaW1wb3J0ICcuL3Rva2VuL2ZvbnQuY3NzJztcXG5AaW1wb3J0ICcuL3Rva2VuL3JhZGl1cy5jc3MnO1xcbkBpbXBvcnQgJy4vdG9rZW4vY3Vyc29yLmNzcyc7XFxuXFxuLyogUmVzZXQgc3R5bGVzICovXFxuQGltcG9ydCAnLi9yZXNldC5jc3MnO1xcblxcbi8qIFV0aWxpdHkgc3R5bGVzICovXFxuQGltcG9ydCAnLi9kaXNwbGF5LmNzcyc7XFxuQGltcG9ydCAnLi9wb3NpdGlvbi5jc3MnO1xcbkBpbXBvcnQgJy4vZmxleC1kaXJlY3Rpb24uY3NzJztcXG5AaW1wb3J0ICcuL2FsaWduLWl0ZW1zLmNzcyc7XFxuQGltcG9ydCAnLi9qdXN0aWZ5LWNvbnRlbnQuY3NzJztcXG5AaW1wb3J0ICcuL292ZXJmbG93LmNzcyc7XFxuXFxuLyogQ29tcG9uZW50IHN0eWxlcyAqL1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2Utc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24tc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2NoZWNrLWJveC9jaGVjay1ib3gtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2VsZW1lbnRzL3RleHQvdGV4dC1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvbG9hZGluZy9zcGlubmVyL3NwaW5uZXItc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2xvYWRpbmcvaW5saW5lLWxvYWRpbmcvaW5saW5lLWxvYWRpbmctc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2xvYWRpbmcvb3ZlcmxheS1sb2FkaW5nL292ZXJsYXktbG9hZGluZy1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLXN0eWxlLmNzcyc7XFxuQGltcG9ydCAnLi4vY29tcG9uZW50cy90YWJsZS90YWJsZS1zdHlsZS5jc3MnO1xcbkBpbXBvcnQgJy4uL2NvbXBvbmVudHMvdGV4dC1maWVsZC90ZXh0LWZpZWxkLXN0eWxlLmNzcyc7XFxuQGltcG9ydCAnLi4vY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAtc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24tc3R5bGUuY3NzJztcXG5AaW1wb3J0ICcuLi9jb21wb25lbnRzL2NvbGxhcHNpYmxlLW1lbnUvY29sbGFwc2libGUtbWVudS1zdHlsZS5jc3MnO1wiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2luZGV4LmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanMhLi9pbmRleC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCIiLCJjb25zdCBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcbiAgbGV0IGNsYXNzZXMgPSAnJztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAoYXJnKSB7XG4gICAgICBjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcztcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZShhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuICB9XG5cbiAgaWYgKFxuICAgIGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJlxuICAgICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpXG4gICkge1xuICAgIHJldHVybiBhcmcudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGxldCBjbGFzc2VzID0gJyc7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gYXJnKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuICAgICAgY2xhc3NlcyA9IGFwcGVuZENsYXNzKGNsYXNzZXMsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzKHZhbHVlLCBuZXdDbGFzcykge1xuICBpZiAoIW5ld0NsYXNzKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUgKyAnICcgKyBuZXdDbGFzcyA6IG5ld0NsYXNzO1xufVxuXG5leHBvcnQgeyBjbGFzc05hbWVzIH07XG4iLCJleHBvcnQgdmFyIGNvbG9ycyA9IHtcbiAgICB0cmFuc3BhcmVudDogJ3RyYW5zcGFyZW50JyxcbiAgICBibGFjazogJyMwMDAwMDAnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgZ3JheUZhOiAnI2ZhZmFmYScsXG4gICAgZ3JheUY0OiAnI2Y0ZjRmNScsXG4gICAgZ3JheUU0OiAnI2U0ZTRlNycsXG4gICAgZ3JheUQ0OiAnI2Q0ZDRkOCcsXG4gICAgZ3JheUExOiAnI2ExYTFhYScsXG4gICAgZ3JheTcxOiAnIzcxNzE3YScsXG4gICAgZ3JheTUyOiAnIzUyNTI1YicsXG4gICAgZ3JheTNmOiAnIzNmM2Y0NicsXG4gICAgZ3JheTI3OiAnIzI3MjcyYScsXG4gICAgZ3JheTE4OiAnIzE4MTgxYicsXG4gICAgcHVycGxlRjQ6ICcjZjRlZmZhJyxcbiAgICBwdXJwbGVFOTogJyNlOWUwZjUnLFxuICAgIHB1cnBsZURkOiAnI2RkZDFmMCcsXG4gICAgcHVycGxlQzM6ICcjYzNiNGRkJyxcbiAgICBwdXJwbGVBODogJyNhODk0YzcnLFxuICAgIHB1cnBsZTk1OiAnIzk1N2ViNCcsXG4gICAgcHVycGxlNmY6ICcjNmY1NmEzJyxcbiAgICBwdXJwbGU0YzogJyM0YzI3N2MnLFxuICAgIHB1cnBsZTQxOiAnIzRjMWQ4OCcsXG4gICAgcHVycGxlMzk6ICcjMzkxZDVkJyxcbiAgICBhY2NlbnRSZWRGZjogJyNmZmY1ZjYnLFxuICAgIGFjY2VudFJlZEZmZTogJyNmZmU4ZTknLFxuICAgIGFjY2VudFJlZEZiOiAnI2ZiY2ZkMicsXG4gICAgYWNjZW50UmVkRjM6ICcjZjM5YWEwJyxcbiAgICBhY2NlbnRSZWRFODogJyNlODZmNzcnLFxuICAgIGFjY2VudFJlZERmOiAnI2RmNTM1YycsXG4gICAgYWNjZW50UmVkQzk6ICcjYzk0NzUxJyxcbiAgICBhY2NlbnRSZWRCMDogJyNiMDJlNGMnLFxuICAgIGFjY2VudFJlZDhmOiAnIzhmMjQzYScsXG4gICAgYWNjZW50UmVkNmU6ICcjNmUxYTJjJyxcbiAgICBhY2NlbnRQaW5rRmY6ICcjZmZmMWY2JyxcbiAgICBhY2NlbnRQaW5rRmZlOiAnI2ZmZTRlZScsXG4gICAgYWNjZW50UGlua0ZlOiAnI2ZlY2ZlMycsXG4gICAgYWNjZW50UGlua0ZkOiAnI2ZkYTRjYycsXG4gICAgYWNjZW50UGlua0Y0OiAnI2Y0NzJiNicsXG4gICAgYWNjZW50UGlua0VjOiAnI2VjNmZhZScsXG4gICAgYWNjZW50UGlua0Q5OiAnI2Q5NWQ5YScsXG4gICAgYWNjZW50UGlua0I5OiAnI2I5NGE3ZScsXG4gICAgYWNjZW50UGluazkzOiAnIzkzMzg1ZicsXG4gICAgYWNjZW50UGluazZlOiAnIzZlMjY0NCcsXG4gICAgYWNjZW50TWFnZW50YUZlOiAnI2ZlZjBmZicsXG4gICAgYWNjZW50TWFnZW50YUZjOiAnI2ZjZTRmZicsXG4gICAgYWNjZW50TWFnZW50YUY4OiAnI2Y4YzZmZicsXG4gICAgYWNjZW50TWFnZW50YUYyOiAnI2YyOWJmZicsXG4gICAgYWNjZW50TWFnZW50YUVjOiAnI2VjNWNlZicsXG4gICAgYWNjZW50TWFnZW50YUUxOiAnI2UxM2JlNycsXG4gICAgYWNjZW50TWFnZW50YUM4OiAnI2M4MmZjYycsXG4gICAgYWNjZW50TWFnZW50YUE5OiAnI2E5MjNhOCcsXG4gICAgYWNjZW50TWFnZW50YTgzOiAnIzgzMWM4MycsXG4gICAgYWNjZW50TWFnZW50YTVlOiAnIzVlMTQ1ZScsXG4gICAgYWNjZW50Qmx1ZUYxOiAnI2YxZjRmZicsXG4gICAgYWNjZW50Qmx1ZUUzOiAnI2UzZThmZicsXG4gICAgYWNjZW50Qmx1ZUM3OiAnI2M3ZDJmZScsXG4gICAgYWNjZW50Qmx1ZUE1OiAnI2E1YjRmYycsXG4gICAgYWNjZW50Qmx1ZTgxOiAnIzgxOGNmOCcsXG4gICAgYWNjZW50Qmx1ZTI1OiAnIzI1NjNlYicsXG4gICAgYWNjZW50Qmx1ZTFmOiAnIzFmNTJjOScsXG4gICAgYWNjZW50Qmx1ZTFlOiAnIzFlNDBhZicsXG4gICAgYWNjZW50Qmx1ZTFjOiAnIzFjMzQ4YScsXG4gICAgYWNjZW50Qmx1ZTE2OiAnIzE2Mjc2MycsXG4gICAgYWNjZW50TWludEVjOiAnI2VjZmVmZCcsXG4gICAgYWNjZW50TWludEQxOiAnI2QxZmFmNycsXG4gICAgYWNjZW50TWludEE3OiAnI2E3ZjNlZScsXG4gICAgYWNjZW50TWludDZlOiAnIzZlZTdlMCcsXG4gICAgYWNjZW50TWludDJkOiAnIzJkZDRjYicsXG4gICAgYWNjZW50TWludDAxOiAnIzAxZWNlMScsXG4gICAgYWNjZW50TWludDBiOiAnIzBiYzViYycsXG4gICAgYWNjZW50TWludDBmOiAnIzBmOWY5OScsXG4gICAgYWNjZW50TWludDExOiAnIzExN2Q3OCcsXG4gICAgYWNjZW50TWludDEzOiAnIzEzNWM1OCcsXG4gICAgYWNjZW50R3JlZW5FYzogJyNlY2ZkZjMnLFxuICAgIGFjY2VudEdyZWVuRDE6ICcjZDFmYWUxJyxcbiAgICBhY2NlbnRHcmVlbkE3OiAnI2E3ZjNjOCcsXG4gICAgYWNjZW50R3JlZW42ZTogJyM2ZWU3YTMnLFxuICAgIGFjY2VudEdyZWVuNDE6ICcjNDFlMTc2JyxcbiAgICBhY2NlbnRHcmVlbjIyOiAnIzIyYzU1ZScsXG4gICAgYWNjZW50R3JlZW4xNjogJyMxNmEzNGEnLFxuICAgIGFjY2VudEdyZWVuMjg6ICcjMjg5YTNhJyxcbiAgICBhY2NlbnRHcmVlbjE2NjogJyMxNjY1MzQnLFxuICAgIGFjY2VudEdyZWVuMTQ6ICcjMTQ1MzJkJyxcbiAgICBhY2NlbnRZZWxsb3dGZjogJyNmZmZiZWInLFxuICAgIGFjY2VudFllbGxvd0ZlOiAnI2ZlZjNjNycsXG4gICAgYWNjZW50WWVsbG93RmQ6ICcjZmRlNjhhJyxcbiAgICBhY2NlbnRZZWxsb3dGYzogJyNmY2QzNGQnLFxuICAgIGFjY2VudFllbGxvd0ZiOiAnI2ZiYmYyNCcsXG4gICAgYWNjZW50WWVsbG93RmZiOiAnI2ZmYjgwMCcsXG4gICAgYWNjZW50WWVsbG93RTA6ICcjZTBhMTA2JyxcbiAgICBhY2NlbnRZZWxsb3dCNTogJyNiNTgxMDUnLFxuICAgIGFjY2VudFllbGxvdzhhOiAnIzhhNjQwNCcsXG4gICAgYWNjZW50WWVsbG93NWY6ICcjNWY0NzAzJyxcbiAgICBhY2NlbnRPcmFuZ2VGZjogJyNmZmY3ZWQnLFxuICAgIGFjY2VudE9yYW5nZUZmZTogJyNmZmVkZDUnLFxuICAgIGFjY2VudE9yYW5nZUZlOiAnI2ZlZDdhYScsXG4gICAgYWNjZW50T3JhbmdlRmQ6ICcjZmRiYTc0JyxcbiAgICBhY2NlbnRPcmFuZ2VGYjogJyNmYjkyM2MnLFxuICAgIGFjY2VudE9yYW5nZUY5OiAnI2Y5NzMxNicsXG4gICAgYWNjZW50T3JhbmdlRWE6ICcjZWE1ODBjJyxcbiAgICBhY2NlbnRPcmFuZ2VDMjogJyNjMjQxMGMnLFxuICAgIGFjY2VudE9yYW5nZTlhOiAnIzlhMzQxMicsXG4gICAgYWNjZW50T3JhbmdlN2M6ICcjN2MyZDEyJyxcbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3Rva2VuL2NvbG9ycyc7XG5mdW5jdGlvbiBnZXRNZXJnZWRQcm9wcyhwcm9wcywgcHJvcHNXaXRoVHlwZXMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICB2YXIgdGFyZ2V0UHJvcHMgPSBfX2Fzc2lnbih7fSwgcHJvcHMpO1xuICAgIHZhciBwcmV2Q2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBwcmV2U3R5bGUgPSBwcm9wcy5zdHlsZTtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gKF9iID0gKF9hID0gdGFyZ2V0UHJvcHNba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcHJvcHNXaXRoVHlwZXNba2V5XS5kZWZhdWx0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvcFR5cGUgPSBwcm9wc1dpdGhUeXBlc1trZXldO1xuICAgICAgICBpZiAocHJvcFR5cGUudHlwZSA9PT0gJ2NsYXNzTmFtZScpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBwcm9wVHlwZS5jbGFzc05hbWUgKyAnLScgKyB2YWx1ZSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFR5cGUudHlwZSA9PT0gJ3N0eWxlJykge1xuICAgICAgICAgICAgcHJvcFR5cGUua2V5LmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHN0eWxlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVHlwZS50eXBlID09PSAnY3NzJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluIGNvbG9ycykge1xuICAgICAgICAgICAgICAgIHN0eWxlW3Byb3BUeXBlLmtleV0gPSBjb2xvcnNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbcHJvcFR5cGUua2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRQcm9wc1trZXldO1xuICAgIH07XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzV2l0aFR5cGVzKSB7XG4gICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCB0YXJnZXRQcm9wcyksIHsgc3R5bGU6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2U3R5bGUpLCBzdHlsZSksIGNsYXNzTmFtZTogW3ByZXZDbGFzc05hbWUsIGNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB9KTtcbn1cbmV4cG9ydCB7IGdldE1lcmdlZFByb3BzIH07XG4iLCIvLyBwYWNrYWdlcy9yZWFjdC9jb21wb3NlLXJlZnMvc3JjL2NvbXBvc2UtcmVmcy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHZvaWQgMCkge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbXBvc2VSZWZzKC4uLnJlZnMpIHtcbiAgcmV0dXJuIChub2RlKSA9PiB7XG4gICAgbGV0IGhhc0NsZWFudXAgPSBmYWxzZTtcbiAgICBjb25zdCBjbGVhbnVwcyA9IHJlZnMubWFwKChyZWYpID0+IHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBzZXRSZWYocmVmLCBub2RlKTtcbiAgICAgIGlmICghaGFzQ2xlYW51cCAmJiB0eXBlb2YgY2xlYW51cCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaGFzQ2xlYW51cCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xlYW51cDtcbiAgICB9KTtcbiAgICBpZiAoaGFzQ2xlYW51cCkge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbnVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSBjbGVhbnVwc1tpXTtcbiAgICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFJlZihyZWZzW2ldLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdXNlQ29tcG9zZWRSZWZzKC4uLnJlZnMpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNhbGxiYWNrKGNvbXBvc2VSZWZzKC4uLnJlZnMpLCByZWZzKTtcbn1cbmV4cG9ydCB7XG4gIGNvbXBvc2VSZWZzLFxuICB1c2VDb21wb3NlZFJlZnNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvc2xvdC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9zZVJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xuaW1wb3J0IHsgRnJhZ21lbnQgYXMgRnJhZ21lbnQyLCBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5mdW5jdGlvbiBjcmVhdGVTbG90KG93bmVyTmFtZSkge1xuICBjb25zdCBTbG90Q2xvbmUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlU2xvdENsb25lKG93bmVyTmFtZSk7XG4gIGNvbnN0IFNsb3QyID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNsb3RQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHNsb3R0YWJsZSA9IGNoaWxkcmVuQXJyYXkuZmluZChpc1Nsb3R0YWJsZSk7XG4gICAgaWYgKHNsb3R0YWJsZSkge1xuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHNsb3R0YWJsZS5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gY2hpbGRyZW5BcnJheS5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gc2xvdHRhYmxlKSB7XG4gICAgICAgICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KG5ld0VsZW1lbnQpID4gMSkgcmV0dXJuIFJlYWN0LkNoaWxkcmVuLm9ubHkobnVsbCk7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0VsZW1lbnQpID8gbmV3RWxlbWVudC5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNsb3RDbG9uZSwgeyAuLi5zbG90UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBjaGlsZHJlbjogUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3RWxlbWVudCkgPyBSZWFjdC5jbG9uZUVsZW1lbnQobmV3RWxlbWVudCwgdm9pZCAwLCBuZXdDaGlsZHJlbikgOiBudWxsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChTbG90Q2xvbmUsIHsgLi4uc2xvdFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiwgY2hpbGRyZW4gfSk7XG4gIH0pO1xuICBTbG90Mi5kaXNwbGF5TmFtZSA9IGAke293bmVyTmFtZX0uU2xvdGA7XG4gIHJldHVybiBTbG90Mjtcbn1cbnZhciBTbG90ID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZVNsb3QoXCJTbG90XCIpO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGNyZWF0ZVNsb3RDbG9uZShvd25lck5hbWUpIHtcbiAgY29uc3QgU2xvdENsb25lID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNsb3RQcm9wcyB9ID0gcHJvcHM7XG4gICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgY2hpbGRyZW5SZWYgPSBnZXRFbGVtZW50UmVmKGNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IHByb3BzMiA9IG1lcmdlUHJvcHMoc2xvdFByb3BzLCBjaGlsZHJlbi5wcm9wcyk7XG4gICAgICBpZiAoY2hpbGRyZW4udHlwZSAhPT0gUmVhY3QuRnJhZ21lbnQpIHtcbiAgICAgICAgcHJvcHMyLnJlZiA9IGZvcndhcmRlZFJlZiA/IGNvbXBvc2VSZWZzKGZvcndhcmRlZFJlZiwgY2hpbGRyZW5SZWYpIDogY2hpbGRyZW5SZWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBwcm9wczIpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID4gMSA/IFJlYWN0LkNoaWxkcmVuLm9ubHkobnVsbCkgOiBudWxsO1xuICB9KTtcbiAgU2xvdENsb25lLmRpc3BsYXlOYW1lID0gYCR7b3duZXJOYW1lfS5TbG90Q2xvbmVgO1xuICByZXR1cm4gU2xvdENsb25lO1xufVxudmFyIFNMT1RUQUJMRV9JREVOVElGSUVSID0gU3ltYm9sKFwicmFkaXguc2xvdHRhYmxlXCIpO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmZ1bmN0aW9uIGNyZWF0ZVNsb3R0YWJsZShvd25lck5hbWUpIHtcbiAgY29uc3QgU2xvdHRhYmxlMiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudDIsIHsgY2hpbGRyZW4gfSk7XG4gIH07XG4gIFNsb3R0YWJsZTIuZGlzcGxheU5hbWUgPSBgJHtvd25lck5hbWV9LlNsb3R0YWJsZWA7XG4gIFNsb3R0YWJsZTIuX19yYWRpeElkID0gU0xPVFRBQkxFX0lERU5USUZJRVI7XG4gIHJldHVybiBTbG90dGFibGUyO1xufVxudmFyIFNsb3R0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVTbG90dGFibGUoXCJTbG90dGFibGVcIik7XG5mdW5jdGlvbiBpc1Nsb3R0YWJsZShjaGlsZCkge1xuICByZXR1cm4gUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHR5cGVvZiBjaGlsZC50eXBlID09PSBcImZ1bmN0aW9uXCIgJiYgXCJfX3JhZGl4SWRcIiBpbiBjaGlsZC50eXBlICYmIGNoaWxkLnR5cGUuX19yYWRpeElkID09PSBTTE9UVEFCTEVfSURFTlRJRklFUjtcbn1cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoc2xvdFByb3BzLCBjaGlsZFByb3BzKSB7XG4gIGNvbnN0IG92ZXJyaWRlUHJvcHMgPSB7IC4uLmNoaWxkUHJvcHMgfTtcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBjaGlsZFByb3BzKSB7XG4gICAgY29uc3Qgc2xvdFByb3BWYWx1ZSA9IHNsb3RQcm9wc1twcm9wTmFtZV07XG4gICAgY29uc3QgY2hpbGRQcm9wVmFsdWUgPSBjaGlsZFByb3BzW3Byb3BOYW1lXTtcbiAgICBjb25zdCBpc0hhbmRsZXIgPSAvXm9uW0EtWl0vLnRlc3QocHJvcE5hbWUpO1xuICAgIGlmIChpc0hhbmRsZXIpIHtcbiAgICAgIGlmIChzbG90UHJvcFZhbHVlICYmIGNoaWxkUHJvcFZhbHVlKSB7XG4gICAgICAgIG92ZXJyaWRlUHJvcHNbcHJvcE5hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGlsZFByb3BWYWx1ZSguLi5hcmdzKTtcbiAgICAgICAgICBzbG90UHJvcFZhbHVlKC4uLmFyZ3MpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHNsb3RQcm9wVmFsdWUpIHtcbiAgICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBzbG90UHJvcFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcE5hbWUgPT09IFwic3R5bGVcIikge1xuICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSB7IC4uLnNsb3RQcm9wVmFsdWUsIC4uLmNoaWxkUHJvcFZhbHVlIH07XG4gICAgfSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gXCJjbGFzc05hbWVcIikge1xuICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBbc2xvdFByb3BWYWx1ZSwgY2hpbGRQcm9wVmFsdWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgLi4uc2xvdFByb3BzLCAuLi5vdmVycmlkZVByb3BzIH07XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50UmVmKGVsZW1lbnQpIHtcbiAgbGV0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudC5wcm9wcywgXCJyZWZcIik/LmdldDtcbiAgbGV0IG1heVdhcm4gPSBnZXR0ZXIgJiYgXCJpc1JlYWN0V2FybmluZ1wiIGluIGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmc7XG4gIGlmIChtYXlXYXJuKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucmVmO1xuICB9XG4gIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudCwgXCJyZWZcIik/LmdldDtcbiAgbWF5V2FybiA9IGdldHRlciAmJiBcImlzUmVhY3RXYXJuaW5nXCIgaW4gZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZztcbiAgaWYgKG1heVdhcm4pIHtcbiAgICByZXR1cm4gZWxlbWVudC5wcm9wcy5yZWY7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQucHJvcHMucmVmIHx8IGVsZW1lbnQucmVmO1xufVxuZXhwb3J0IHtcbiAgU2xvdCBhcyBSb290LFxuICBTbG90LFxuICBTbG90dGFibGUsXG4gIGNyZWF0ZVNsb3QsXG4gIGNyZWF0ZVNsb3R0YWJsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNsb3QgfSBmcm9tICdyYWRpeC11aSc7XG5leHBvcnQgdmFyIEJhc2VCYWRnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBwcm9wcy5hc0NoaWxkLCBhc0NoaWxkID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJhc0NoaWxkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl0pO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IFNsb3QuUm9vdCA6ICdkaXYnO1xuICAgIHJldHVybiAoX2pzeChDb21wLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWJhZGdlIFwiLmNvbmNhdChjbGFzc05hbWUgIT09IG51bGwgJiYgY2xhc3NOYW1lICE9PSB2b2lkIDAgPyBjbGFzc05hbWUgOiAnJykgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkpO1xufSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIHNpemUgPSBbJ3hsJywgJ2wnLCAnbScsICdzJ107XG52YXIgY29tbW9uQXZhdGFyUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG59O1xuZXhwb3J0IHZhciBhdmF0YXJQcm9wcyA9IF9fYXNzaWduKHt9LCBjb21tb25BdmF0YXJQcm9wcyk7XG4iLCIvLyBwYWNrYWdlcy9yZWFjdC9jb250ZXh0L3NyYy9jcmVhdGUtY29udGV4dC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0Mihyb290Q29tcG9uZW50TmFtZSwgZGVmYXVsdENvbnRleHQpIHtcbiAgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoZGVmYXVsdENvbnRleHQpO1xuICBjb25zdCBQcm92aWRlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIC4uLmNvbnRleHQgfSA9IHByb3BzO1xuICAgIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiBjb250ZXh0LCBPYmplY3QudmFsdWVzKGNvbnRleHQpKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbiB9KTtcbiAgfTtcbiAgUHJvdmlkZXIuZGlzcGxheU5hbWUgPSByb290Q29tcG9uZW50TmFtZSArIFwiUHJvdmlkZXJcIjtcbiAgZnVuY3Rpb24gdXNlQ29udGV4dDIoY29uc3VtZXJOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0O1xuICAgIGlmIChkZWZhdWx0Q29udGV4dCAhPT0gdm9pZCAwKSByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke2NvbnN1bWVyTmFtZX1cXGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcXGAke3Jvb3RDb21wb25lbnROYW1lfVxcYGApO1xuICB9XG4gIHJldHVybiBbUHJvdmlkZXIsIHVzZUNvbnRleHQyXTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHRTY29wZShzY29wZU5hbWUsIGNyZWF0ZUNvbnRleHRTY29wZURlcHMgPSBbXSkge1xuICBsZXQgZGVmYXVsdENvbnRleHRzID0gW107XG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQzKHJvb3RDb21wb25lbnROYW1lLCBkZWZhdWx0Q29udGV4dCkge1xuICAgIGNvbnN0IEJhc2VDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChkZWZhdWx0Q29udGV4dCk7XG4gICAgY29uc3QgaW5kZXggPSBkZWZhdWx0Q29udGV4dHMubGVuZ3RoO1xuICAgIGRlZmF1bHRDb250ZXh0cyA9IFsuLi5kZWZhdWx0Q29udGV4dHMsIGRlZmF1bHRDb250ZXh0XTtcbiAgICBjb25zdCBQcm92aWRlciA9IChwcm9wcykgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4sIC4uLmNvbnRleHQgfSA9IHByb3BzO1xuICAgICAgY29uc3QgQ29udGV4dCA9IHNjb3BlPy5bc2NvcGVOYW1lXT8uW2luZGV4XSB8fCBCYXNlQ29udGV4dDtcbiAgICAgIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiBjb250ZXh0LCBPYmplY3QudmFsdWVzKGNvbnRleHQpKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWUsIGNoaWxkcmVuIH0pO1xuICAgIH07XG4gICAgUHJvdmlkZXIuZGlzcGxheU5hbWUgPSByb290Q29tcG9uZW50TmFtZSArIFwiUHJvdmlkZXJcIjtcbiAgICBmdW5jdGlvbiB1c2VDb250ZXh0Mihjb25zdW1lck5hbWUsIHNjb3BlKSB7XG4gICAgICBjb25zdCBDb250ZXh0ID0gc2NvcGU/LltzY29wZU5hbWVdPy5baW5kZXhdIHx8IEJhc2VDb250ZXh0O1xuICAgICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQ7XG4gICAgICBpZiAoZGVmYXVsdENvbnRleHQgIT09IHZvaWQgMCkgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGAke2NvbnN1bWVyTmFtZX1cXGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcXGAke3Jvb3RDb21wb25lbnROYW1lfVxcYGApO1xuICAgIH1cbiAgICByZXR1cm4gW1Byb3ZpZGVyLCB1c2VDb250ZXh0Ml07XG4gIH1cbiAgY29uc3QgY3JlYXRlU2NvcGUgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2NvcGVDb250ZXh0cyA9IGRlZmF1bHRDb250ZXh0cy5tYXAoKGRlZmF1bHRDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlQ29udGV4dChkZWZhdWx0Q29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNjb3BlKHNjb3BlKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHNjb3BlPy5bc2NvcGVOYW1lXSB8fCBzY29wZUNvbnRleHRzO1xuICAgICAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oXG4gICAgICAgICgpID0+ICh7IFtgX19zY29wZSR7c2NvcGVOYW1lfWBdOiB7IC4uLnNjb3BlLCBbc2NvcGVOYW1lXTogY29udGV4dHMgfSB9KSxcbiAgICAgICAgW3Njb3BlLCBjb250ZXh0c11cbiAgICAgICk7XG4gICAgfTtcbiAgfTtcbiAgY3JlYXRlU2NvcGUuc2NvcGVOYW1lID0gc2NvcGVOYW1lO1xuICByZXR1cm4gW2NyZWF0ZUNvbnRleHQzLCBjb21wb3NlQ29udGV4dFNjb3BlcyhjcmVhdGVTY29wZSwgLi4uY3JlYXRlQ29udGV4dFNjb3BlRGVwcyldO1xufVxuZnVuY3Rpb24gY29tcG9zZUNvbnRleHRTY29wZXMoLi4uc2NvcGVzKSB7XG4gIGNvbnN0IGJhc2VTY29wZSA9IHNjb3Blc1swXTtcbiAgaWYgKHNjb3Blcy5sZW5ndGggPT09IDEpIHJldHVybiBiYXNlU2NvcGU7XG4gIGNvbnN0IGNyZWF0ZVNjb3BlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlSG9va3MgPSBzY29wZXMubWFwKChjcmVhdGVTY29wZTIpID0+ICh7XG4gICAgICB1c2VTY29wZTogY3JlYXRlU2NvcGUyKCksXG4gICAgICBzY29wZU5hbWU6IGNyZWF0ZVNjb3BlMi5zY29wZU5hbWVcbiAgICB9KSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZUNvbXBvc2VkU2NvcGVzKG92ZXJyaWRlU2NvcGVzKSB7XG4gICAgICBjb25zdCBuZXh0U2NvcGVzID0gc2NvcGVIb29rcy5yZWR1Y2UoKG5leHRTY29wZXMyLCB7IHVzZVNjb3BlLCBzY29wZU5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBzY29wZVByb3BzID0gdXNlU2NvcGUob3ZlcnJpZGVTY29wZXMpO1xuICAgICAgICBjb25zdCBjdXJyZW50U2NvcGUgPSBzY29wZVByb3BzW2BfX3Njb3BlJHtzY29wZU5hbWV9YF07XG4gICAgICAgIHJldHVybiB7IC4uLm5leHRTY29wZXMyLCAuLi5jdXJyZW50U2NvcGUgfTtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7IFtgX19zY29wZSR7YmFzZVNjb3BlLnNjb3BlTmFtZX1gXTogbmV4dFNjb3BlcyB9KSwgW25leHRTY29wZXNdKTtcbiAgICB9O1xuICB9O1xuICBjcmVhdGVTY29wZS5zY29wZU5hbWUgPSBiYXNlU2NvcGUuc2NvcGVOYW1lO1xuICByZXR1cm4gY3JlYXRlU2NvcGU7XG59XG5leHBvcnQge1xuICBjcmVhdGVDb250ZXh0MiBhcyBjcmVhdGVDb250ZXh0LFxuICBjcmVhdGVDb250ZXh0U2NvcGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtY2FsbGJhY2stcmVmL3NyYy91c2UtY2FsbGJhY2stcmVmLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5mdW5jdGlvbiB1c2VDYWxsYmFja1JlZihjYWxsYmFjaykge1xuICBjb25zdCBjYWxsYmFja1JlZiA9IFJlYWN0LnVzZVJlZihjYWxsYmFjayk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNhbGxiYWNrO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4gKC4uLmFyZ3MpID0+IGNhbGxiYWNrUmVmLmN1cnJlbnQ/LiguLi5hcmdzKSwgW10pO1xufVxuZXhwb3J0IHtcbiAgdXNlQ2FsbGJhY2tSZWZcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtbGF5b3V0LWVmZmVjdC9zcmMvdXNlLWxheW91dC1lZmZlY3QudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbnZhciB1c2VMYXlvdXRFZmZlY3QyID0gZ2xvYmFsVGhpcz8uZG9jdW1lbnQgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiAoKSA9PiB7XG59O1xuZXhwb3J0IHtcbiAgdXNlTGF5b3V0RWZmZWN0MiBhcyB1c2VMYXlvdXRFZmZlY3Rcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIiLCIvLyBzcmMvcHJpbWl0aXZlLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBjcmVhdGVTbG90IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1zbG90XCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBOT0RFUyA9IFtcbiAgXCJhXCIsXG4gIFwiYnV0dG9uXCIsXG4gIFwiZGl2XCIsXG4gIFwiZm9ybVwiLFxuICBcImgyXCIsXG4gIFwiaDNcIixcbiAgXCJpbWdcIixcbiAgXCJpbnB1dFwiLFxuICBcImxhYmVsXCIsXG4gIFwibGlcIixcbiAgXCJuYXZcIixcbiAgXCJvbFwiLFxuICBcInBcIixcbiAgXCJzZWxlY3RcIixcbiAgXCJzcGFuXCIsXG4gIFwic3ZnXCIsXG4gIFwidWxcIlxuXTtcbnZhciBQcmltaXRpdmUgPSBOT0RFUy5yZWR1Y2UoKHByaW1pdGl2ZSwgbm9kZSkgPT4ge1xuICBjb25zdCBTbG90ID0gY3JlYXRlU2xvdChgUHJpbWl0aXZlLiR7bm9kZX1gKTtcbiAgY29uc3QgTm9kZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IGFzQ2hpbGQsIC4uLnByaW1pdGl2ZVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiBub2RlO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3dbU3ltYm9sLmZvcihcInJhZGl4LXVpXCIpXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KENvbXAsIHsgLi4ucHJpbWl0aXZlUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pO1xuICB9KTtcbiAgTm9kZS5kaXNwbGF5TmFtZSA9IGBQcmltaXRpdmUuJHtub2RlfWA7XG4gIHJldHVybiB7IC4uLnByaW1pdGl2ZSwgW25vZGVdOiBOb2RlIH07XG59LCB7fSk7XG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnQodGFyZ2V0LCBldmVudCkge1xuICBpZiAodGFyZ2V0KSBSZWFjdERPTS5mbHVzaFN5bmMoKCkgPT4gdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpKTtcbn1cbnZhciBSb290ID0gUHJpbWl0aXZlO1xuZXhwb3J0IHtcbiAgUHJpbWl0aXZlLFxuICBSb290LFxuICBkaXNwYXRjaERpc2NyZXRlQ3VzdG9tRXZlbnRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdXNlLWlzLWh5ZHJhdGVkLnRzeFxuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tIFwidXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbVwiO1xuZnVuY3Rpb24gdXNlSXNIeWRyYXRlZCgpIHtcbiAgcmV0dXJuIHVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIHN1YnNjcmliZSxcbiAgICAoKSA9PiB0cnVlLFxuICAgICgpID0+IGZhbHNlXG4gICk7XG59XG5mdW5jdGlvbiBzdWJzY3JpYmUoKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gIH07XG59XG5leHBvcnQge1xuICB1c2VJc0h5ZHJhdGVkXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9hdmF0YXIudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyB1c2VJc0h5ZHJhdGVkIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtaXMtaHlkcmF0ZWRcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIEFWQVRBUl9OQU1FID0gXCJBdmF0YXJcIjtcbnZhciBbY3JlYXRlQXZhdGFyQ29udGV4dCwgY3JlYXRlQXZhdGFyU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKEFWQVRBUl9OQU1FKTtcbnZhciBbQXZhdGFyUHJvdmlkZXIsIHVzZUF2YXRhckNvbnRleHRdID0gY3JlYXRlQXZhdGFyQ29udGV4dChBVkFUQVJfTkFNRSk7XG52YXIgQXZhdGFyID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVBdmF0YXIsIC4uLmF2YXRhclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBbaW1hZ2VMb2FkaW5nU3RhdHVzLCBzZXRJbWFnZUxvYWRpbmdTdGF0dXNdID0gUmVhY3QudXNlU3RhdGUoXCJpZGxlXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgQXZhdGFyUHJvdmlkZXIsXG4gICAgICB7XG4gICAgICAgIHNjb3BlOiBfX3Njb3BlQXZhdGFyLFxuICAgICAgICBpbWFnZUxvYWRpbmdTdGF0dXMsXG4gICAgICAgIG9uSW1hZ2VMb2FkaW5nU3RhdHVzQ2hhbmdlOiBzZXRJbWFnZUxvYWRpbmdTdGF0dXMsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5zcGFuLCB7IC4uLmF2YXRhclByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5BdmF0YXIuZGlzcGxheU5hbWUgPSBBVkFUQVJfTkFNRTtcbnZhciBJTUFHRV9OQU1FID0gXCJBdmF0YXJJbWFnZVwiO1xudmFyIEF2YXRhckltYWdlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVBdmF0YXIsIHNyYywgb25Mb2FkaW5nU3RhdHVzQ2hhbmdlID0gKCkgPT4ge1xuICAgIH0sIC4uLmltYWdlUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VBdmF0YXJDb250ZXh0KElNQUdFX05BTUUsIF9fc2NvcGVBdmF0YXIpO1xuICAgIGNvbnN0IGltYWdlTG9hZGluZ1N0YXR1cyA9IHVzZUltYWdlTG9hZGluZ1N0YXR1cyhzcmMsIGltYWdlUHJvcHMpO1xuICAgIGNvbnN0IGhhbmRsZUxvYWRpbmdTdGF0dXNDaGFuZ2UgPSB1c2VDYWxsYmFja1JlZigoc3RhdHVzKSA9PiB7XG4gICAgICBvbkxvYWRpbmdTdGF0dXNDaGFuZ2Uoc3RhdHVzKTtcbiAgICAgIGNvbnRleHQub25JbWFnZUxvYWRpbmdTdGF0dXNDaGFuZ2Uoc3RhdHVzKTtcbiAgICB9KTtcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGltYWdlTG9hZGluZ1N0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiAgICAgICAgaGFuZGxlTG9hZGluZ1N0YXR1c0NoYW5nZShpbWFnZUxvYWRpbmdTdGF0dXMpO1xuICAgICAgfVxuICAgIH0sIFtpbWFnZUxvYWRpbmdTdGF0dXMsIGhhbmRsZUxvYWRpbmdTdGF0dXNDaGFuZ2VdKTtcbiAgICByZXR1cm4gaW1hZ2VMb2FkaW5nU3RhdHVzID09PSBcImxvYWRlZFwiID8gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuaW1nLCB7IC4uLmltYWdlUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBzcmMgfSkgOiBudWxsO1xuICB9XG4pO1xuQXZhdGFySW1hZ2UuZGlzcGxheU5hbWUgPSBJTUFHRV9OQU1FO1xudmFyIEZBTExCQUNLX05BTUUgPSBcIkF2YXRhckZhbGxiYWNrXCI7XG52YXIgQXZhdGFyRmFsbGJhY2sgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZUF2YXRhciwgZGVsYXlNcywgLi4uZmFsbGJhY2tQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUF2YXRhckNvbnRleHQoRkFMTEJBQ0tfTkFNRSwgX19zY29wZUF2YXRhcik7XG4gICAgY29uc3QgW2NhblJlbmRlciwgc2V0Q2FuUmVuZGVyXSA9IFJlYWN0LnVzZVN0YXRlKGRlbGF5TXMgPT09IHZvaWQgMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChkZWxheU1zICE9PSB2b2lkIDApIHtcbiAgICAgICAgY29uc3QgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHNldENhblJlbmRlcih0cnVlKSwgZGVsYXlNcyk7XG4gICAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgfVxuICAgIH0sIFtkZWxheU1zXSk7XG4gICAgcmV0dXJuIGNhblJlbmRlciAmJiBjb250ZXh0LmltYWdlTG9hZGluZ1N0YXR1cyAhPT0gXCJsb2FkZWRcIiA/IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLnNwYW4sIHsgLi4uZmFsbGJhY2tQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuQXZhdGFyRmFsbGJhY2suZGlzcGxheU5hbWUgPSBGQUxMQkFDS19OQU1FO1xuZnVuY3Rpb24gcmVzb2x2ZUxvYWRpbmdTdGF0dXMoaW1hZ2UsIHNyYykge1xuICBpZiAoIWltYWdlKSB7XG4gICAgcmV0dXJuIFwiaWRsZVwiO1xuICB9XG4gIGlmICghc3JjKSB7XG4gICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgfVxuICBpZiAoaW1hZ2Uuc3JjICE9PSBzcmMpIHtcbiAgICBpbWFnZS5zcmMgPSBzcmM7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmNvbXBsZXRlICYmIGltYWdlLm5hdHVyYWxXaWR0aCA+IDAgPyBcImxvYWRlZFwiIDogXCJsb2FkaW5nXCI7XG59XG5mdW5jdGlvbiB1c2VJbWFnZUxvYWRpbmdTdGF0dXMoc3JjLCB7IHJlZmVycmVyUG9saWN5LCBjcm9zc09yaWdpbiB9KSB7XG4gIGNvbnN0IGlzSHlkcmF0ZWQgPSB1c2VJc0h5ZHJhdGVkKCk7XG4gIGNvbnN0IGltYWdlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBpbWFnZSA9ICgoKSA9PiB7XG4gICAgaWYgKCFpc0h5ZHJhdGVkKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIWltYWdlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGltYWdlUmVmLmN1cnJlbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgfVxuICAgIHJldHVybiBpbWFnZVJlZi5jdXJyZW50O1xuICB9KSgpO1xuICBjb25zdCBbbG9hZGluZ1N0YXR1cywgc2V0TG9hZGluZ1N0YXR1c10gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiByZXNvbHZlTG9hZGluZ1N0YXR1cyhpbWFnZSwgc3JjKVxuICApO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvYWRpbmdTdGF0dXMocmVzb2x2ZUxvYWRpbmdTdGF0dXMoaW1hZ2UsIHNyYykpO1xuICB9LCBbaW1hZ2UsIHNyY10pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVN0YXR1cyA9IChzdGF0dXMpID0+ICgpID0+IHtcbiAgICAgIHNldExvYWRpbmdTdGF0dXMoc3RhdHVzKTtcbiAgICB9O1xuICAgIGlmICghaW1hZ2UpIHJldHVybjtcbiAgICBjb25zdCBoYW5kbGVMb2FkID0gdXBkYXRlU3RhdHVzKFwibG9hZGVkXCIpO1xuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gdXBkYXRlU3RhdHVzKFwiZXJyb3JcIik7XG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgaGFuZGxlTG9hZCk7XG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGhhbmRsZUVycm9yKTtcbiAgICBpZiAocmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgIGltYWdlLnJlZmVycmVyUG9saWN5ID0gcmVmZXJyZXJQb2xpY3k7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY3Jvc3NPcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbWFnZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCBoYW5kbGVMb2FkKTtcbiAgICAgIGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBoYW5kbGVFcnJvcik7XG4gICAgfTtcbiAgfSwgW2ltYWdlLCBjcm9zc09yaWdpbiwgcmVmZXJyZXJQb2xpY3ldKTtcbiAgcmV0dXJuIGxvYWRpbmdTdGF0dXM7XG59XG52YXIgUm9vdCA9IEF2YXRhcjtcbnZhciBJbWFnZSA9IEF2YXRhckltYWdlO1xudmFyIEZhbGxiYWNrID0gQXZhdGFyRmFsbGJhY2s7XG5leHBvcnQge1xuICBBdmF0YXIsXG4gIEF2YXRhckZhbGxiYWNrLFxuICBBdmF0YXJJbWFnZSxcbiAgRmFsbGJhY2ssXG4gIEltYWdlLFxuICBSb290LFxuICBjcmVhdGVBdmF0YXJTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfY2lyY2xlLCBfY2lyY2xlMiwgX3BhdGg7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIFN2Z0RlZmF1bHRBdmF0YXIgPSBmdW5jdGlvbiBTdmdEZWZhdWx0QXZhdGFyKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTI0LFxuICAgIGhlaWdodDogMTI0LFxuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIHByb3BzKSwgX2NpcmNsZSB8fCAoX2NpcmNsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNjIsXG4gICAgY3k6IDYyLFxuICAgIHI6IDYyLFxuICAgIGZpbGw6IFwiI0M0QzRDNFwiXG4gIH0pKSwgX2NpcmNsZTIgfHwgKF9jaXJjbGUyID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiA2MixcbiAgICBjeTogNDAsXG4gICAgcjogMTUsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSkpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgIGQ6IFwiTTk2IDg0LjAyNkM5NiA5Ny4yOTUgODAuNzc4IDk5IDYyIDk5cy0zNC0xLjcwNS0zNC0xNC45NzRTNDMuMjIyIDYwIDYyIDYwczM0IDEwLjc1NyAzNCAyNC4wMjZcIlxuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFN2Z0RlZmF1bHRBdmF0YXI7IiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQXZhdGFyIH0gZnJvbSAncmFkaXgtdWknO1xuaW1wb3J0IERlZmF1bHRBdmF0YXJJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9pY29ucy9kZWZhdWx0QXZhdGFyLnN2Zyc7XG52YXIgQmFzZUF2YXRhciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzcmMgPSBwcm9wcy5zcmMsIF9hID0gcHJvcHMuYWx0LCBhbHQgPSBfYSA9PT0gdm9pZCAwID8gJ2F2YXRhcicgOiBfYSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJzcmNcIiwgXCJhbHRcIl0pO1xuICAgIHJldHVybiAoX2pzeHMoQXZhdGFyLlJvb3QsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIGJhc2UtYXZhdGFyIFwiLmNvbmNhdChjbGFzc05hbWUgIT09IG51bGwgJiYgY2xhc3NOYW1lICE9PSB2b2lkIDAgPyBjbGFzc05hbWUgOiAnJykgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBbX2pzeChBdmF0YXIuSW1hZ2UsIHsgc3JjOiBzcmMsIGFsdDogYWx0LCBjbGFzc05hbWU6ICdhdmF0YXItaW1hZ2UnIH0pLCBfanN4KEF2YXRhci5GYWxsYmFjaywgeyBjaGlsZHJlbjogX2pzeChEZWZhdWx0QXZhdGFySWNvbiwgeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJyB9KSB9KV0gfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgQmFzZUF2YXRhcjtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCB7IEJhc2VCYWRnZSB9IGZyb20gJy4uL2JhZGdlL2Jhc2UtYmFkZ2UnO1xuaW1wb3J0IHsgYXZhdGFyUHJvcHMgfSBmcm9tICcuL2F2YXRhci1wcm9wcyc7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tICcuL2Jhc2UtYXZhdGFyJztcbnZhciBBdmF0YXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGF2YXRhclByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBzcmMgPSBfYS5zcmMsIGFsdCA9IF9hLmFsdCwgYmFkZ2VPcHRpb24gPSBfYS5iYWRnZU9wdGlvbiwgcmVzdFByb3BzID0gX19yZXN0KF9hLCBbXCJjbGFzc05hbWVcIiwgXCJzcmNcIiwgXCJhbHRcIiwgXCJiYWRnZU9wdGlvblwiXSk7XG4gICAgdmFyIGF2YXRhckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnYXZhdGFyJyk7XG4gICAgcmV0dXJuIChfanN4cyhcInNwYW5cIiwgeyBzdHlsZTogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZGlzcGxheTogJ2lubGluZS1ibG9jaycgfSwgY2hpbGRyZW46IFtfanN4KEJhc2VBdmF0YXIsIF9fYXNzaWduKHsgc3JjOiBzcmMsIGFsdDogYWx0LCBjbGFzc05hbWU6IGF2YXRhckNsYXNzTmFtZSwgcmVmOiByZWYgfSwgcmVzdFByb3BzKSksIGJhZGdlT3B0aW9uICYmIChfanN4KEJhc2VCYWRnZSwgeyBhc0NoaWxkOiB0cnVlLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGF2YXRhckNsYXNzTmFtZSwgJ2JhZGdlLW9wdGlvbicpLCBjaGlsZHJlbjogYmFkZ2VPcHRpb24gfSkpXSB9KSk7XG59KTtcbkF2YXRhci5kaXNwbGF5TmFtZSA9ICdBdmF0YXInO1xuZXhwb3J0IGRlZmF1bHQgQXZhdGFyO1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gXCIuLi8uLi8uLi9zdHlsZXMvdG9rZW4vY29sb3JzXCI7XG52YXIgU3Bpbm5lciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYS5jb2xvciwgY29sb3IgPSBfYyA9PT0gdm9pZCAwID8gXCJncmF5RTRcIiA6IF9jO1xuICAgIHZhciBib3JkZXIgPSBcIlwiLmNvbmNhdChjb2xvcnNbY29sb3JdLCBcIiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudFwiKTtcbiAgICByZXR1cm4gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBjb21wb25lbnQtbG9hZGluZy1jb250YWluZXJcIiwgY2hpbGRyZW46IF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibG9hZGluZy1pbmRpY2F0b3ItcmluZ1wiLCBzdHlsZTogKF9iID0ge30sIF9iW1wiLS1zcGlubmVyLWJvcmRlci1jb2xvclwiXSA9IGNvbG9yc1tjb2xvcl0sIF9iKSwgY2hpbGRyZW46IFswLCAxLCAyLCAzXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxvYWRpbmctaW5kaWNhdG9yLXNpbmdsZS1yaW5nXCIsIHN0eWxlOiB7IGJvcmRlckNvbG9yOiBib3JkZXIsIGFuaW1hdGlvbkRlbGF5OiBpID09PSAwID8gJy0wLjQ1cycgOiBpID09PSAxID8gJy0wLjNzJyA6IGkgPT09IDIgPyAnLTAuMTVzJyA6ICcwcycgfSB9LCBpKSk7IH0pIH0pIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTcGlubmVyO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ3JhZGl4LXVpJztcbnZhciBCYXNlQnV0dG9uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX2EsIHJlZikge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBfYiA9IF9hLmFzQ2hpbGQsIGFzQ2hpbGQgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBsb2FkaW5nID0gX2EubG9hZGluZywgbG9hZGluZ0NvbXBvbmVudCA9IF9hLmxvYWRpbmdDb21wb25lbnQsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcImFzQ2hpbGRcIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImxvYWRpbmdcIiwgXCJsb2FkaW5nQ29tcG9uZW50XCJdKTtcbiAgICB2YXIgQ29tcCA9IGFzQ2hpbGQgPyBTbG90LlJvb3QgOiAnYnV0dG9uJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgX19hc3NpZ24oeyByZWY6IHJlZiwgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1idXR0b24gXCIuY29uY2F0KGNsYXNzTmFtZSAhPT0gbnVsbCAmJiBjbGFzc05hbWUgIT09IHZvaWQgMCA/IGNsYXNzTmFtZSA6ICcnKSwgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkLCBcImFyaWEtYnVzeVwiOiBsb2FkaW5nLCBkaXNhYmxlZDogZGlzYWJsZWQsIG9uTW91c2VEb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgKF9hID0gcHJvcHMub25Nb3VzZURvd24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHByb3BzLCBlKTtcbiAgICAgICAgfSB9LCBwcm9wcywgeyBjaGlsZHJlbjogbG9hZGluZyA/IGxvYWRpbmdDb21wb25lbnQgOiBjaGlsZHJlbiB9KSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBCYXNlQnV0dG9uO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciB2YXJpYW50ID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdnaG9zdCcsICd3aGl0ZScsICd3YXJuaW5nJ107XG52YXIgc2l6ZSA9IFsneGwnLCAnbCcsICdtJywgJ3InLCAncyddO1xudmFyIGNvbW1vbkJ1dHRvblByb3BzID0ge307XG5leHBvcnQgdmFyIGN0YUJ1dHRvblByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbkJ1dHRvblByb3BzKSwgeyB2YXJpYW50OiB7XG4gICAgICAgIHR5cGU6ICdjbGFzc05hbWUnLFxuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYW50JyxcbiAgICAgICAgdmFsdWVzOiB2YXJpYW50LFxuICAgICAgICBkZWZhdWx0OiAncHJpbWFyeScsXG4gICAgfSwgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0gfSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBTcGlubmVyIGZyb20gJy4uL2xvYWRpbmcvc3Bpbm5lci9zcGlubmVyJztcbmltcG9ydCBCYXNlQnV0dG9uIGZyb20gJy4vYmFzZS1idXR0b24nO1xuaW1wb3J0IHsgY3RhQnV0dG9uUHJvcHMgfSBmcm9tICcuL2J1dHRvbi1wcm9wcyc7XG52YXIgQ1RBQnV0dG9uID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIHRleHQgPSBwcm9wcy50ZXh0LCBsZWZ0SWNvbiA9IHByb3BzLmxlZnRJY29uLCByaWdodEljb24gPSBwcm9wcy5yaWdodEljb247XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGN0YUJ1dHRvblByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIGJ1dHRvbkNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnY3RhLWJ1dHRvbicpO1xuICAgIHJldHVybiAoX2pzeHMoQmFzZUJ1dHRvbiwgX19hc3NpZ24oe30sIHJlc3RQcm9wcywgeyBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzTmFtZSwgbG9hZGluZ0NvbXBvbmVudDogX2pzeChTcGlubmVyLCB7fSksIGNoaWxkcmVuOiBbbGVmdEljb24sIHRleHQsIHJpZ2h0SWNvbl0gfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDVEFCdXR0b247XG4iLCIvLyBzcmMvcHJpbWl0aXZlLnRzeFxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbmZ1bmN0aW9uIGNvbXBvc2VFdmVudEhhbmRsZXJzKG9yaWdpbmFsRXZlbnRIYW5kbGVyLCBvdXJFdmVudEhhbmRsZXIsIHsgY2hlY2tGb3JEZWZhdWx0UHJldmVudGVkID0gdHJ1ZSB9ID0ge30pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgb3JpZ2luYWxFdmVudEhhbmRsZXI/LihldmVudCk7XG4gICAgaWYgKGNoZWNrRm9yRGVmYXVsdFByZXZlbnRlZCA9PT0gZmFsc2UgfHwgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybiBvdXJFdmVudEhhbmRsZXI/LihldmVudCk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0T3duZXJXaW5kb3coZWxlbWVudCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhY2Nlc3Mgd2luZG93IG91dHNpZGUgb2YgdGhlIERPTVwiKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudD8ub3duZXJEb2N1bWVudD8uZGVmYXVsdFZpZXcgPz8gd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudChlbGVtZW50KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFjY2VzcyBkb2N1bWVudCBvdXRzaWRlIG9mIHRoZSBET01cIik7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ/Lm93bmVyRG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG59XG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KG5vZGUsIGFjdGl2ZURlc2NlbmRhbnQgPSBmYWxzZSkge1xuICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IGdldE93bmVyRG9jdW1lbnQobm9kZSk7XG4gIGlmICghYWN0aXZlRWxlbWVudD8ubm9kZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNGcmFtZShhY3RpdmVFbGVtZW50KSAmJiBhY3RpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudCkge1xuICAgIHJldHVybiBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHksIGFjdGl2ZURlc2NlbmRhbnQpO1xuICB9XG4gIGlmIChhY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgY29uc3QgaWQgPSBhY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRPd25lckRvY3VtZW50KGFjdGl2ZUVsZW1lbnQpLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzRnJhbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50YWdOYW1lID09PSBcIklGUkFNRVwiO1xufVxuZXhwb3J0IHtcbiAgY2FuVXNlRE9NLFxuICBjb21wb3NlRXZlbnRIYW5kbGVycyxcbiAgZ2V0QWN0aXZlRWxlbWVudCxcbiAgZ2V0T3duZXJEb2N1bWVudCxcbiAgZ2V0T3duZXJXaW5kb3csXG4gIGlzRnJhbWVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBwYWNrYWdlcy9yZWFjdC91c2UtZXNjYXBlLWtleWRvd24vc3JjL3VzZS1lc2NhcGUta2V5ZG93bi50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmZ1bmN0aW9uIHVzZUVzY2FwZUtleWRvd24ob25Fc2NhcGVLZXlEb3duUHJvcCwgb3duZXJEb2N1bWVudCA9IGdsb2JhbFRoaXM/LmRvY3VtZW50KSB7XG4gIGNvbnN0IG9uRXNjYXBlS2V5RG93biA9IHVzZUNhbGxiYWNrUmVmKG9uRXNjYXBlS2V5RG93blByb3ApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgb25Fc2NhcGVLZXlEb3duKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93biwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJldHVybiAoKSA9PiBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfSwgW29uRXNjYXBlS2V5RG93biwgb3duZXJEb2N1bWVudF0pO1xufVxuZXhwb3J0IHtcbiAgdXNlRXNjYXBlS2V5ZG93blxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvZGlzbWlzc2FibGUtbGF5ZXIudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNvbXBvc2VFdmVudEhhbmRsZXJzIH0gZnJvbSBcIkByYWRpeC11aS9wcmltaXRpdmVcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSwgZGlzcGF0Y2hEaXNjcmV0ZUN1c3RvbUV2ZW50IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNhbGxiYWNrLXJlZlwiO1xuaW1wb3J0IHsgdXNlRXNjYXBlS2V5ZG93biB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWVzY2FwZS1rZXlkb3duXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBESVNNSVNTQUJMRV9MQVlFUl9OQU1FID0gXCJEaXNtaXNzYWJsZUxheWVyXCI7XG52YXIgQ09OVEVYVF9VUERBVEUgPSBcImRpc21pc3NhYmxlTGF5ZXIudXBkYXRlXCI7XG52YXIgUE9JTlRFUl9ET1dOX09VVFNJREUgPSBcImRpc21pc3NhYmxlTGF5ZXIucG9pbnRlckRvd25PdXRzaWRlXCI7XG52YXIgRk9DVVNfT1VUU0lERSA9IFwiZGlzbWlzc2FibGVMYXllci5mb2N1c091dHNpZGVcIjtcbnZhciBvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzO1xudmFyIERpc21pc3NhYmxlTGF5ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XG4gIGxheWVyczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSxcbiAgbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG4gIGJyYW5jaGVzOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpXG59KTtcbnZhciBEaXNtaXNzYWJsZUxheWVyID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHMgPSBmYWxzZSxcbiAgICAgIG9uRXNjYXBlS2V5RG93bixcbiAgICAgIG9uUG9pbnRlckRvd25PdXRzaWRlLFxuICAgICAgb25Gb2N1c091dHNpZGUsXG4gICAgICBvbkludGVyYWN0T3V0c2lkZSxcbiAgICAgIG9uRGlzbWlzcyxcbiAgICAgIC4uLmxheWVyUHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoRGlzbWlzc2FibGVMYXllckNvbnRleHQpO1xuICAgIGNvbnN0IFtub2RlLCBzZXROb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBub2RlPy5vd25lckRvY3VtZW50ID8/IGdsb2JhbFRoaXM/LmRvY3VtZW50O1xuICAgIGNvbnN0IFssIGZvcmNlXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCAobm9kZTIpID0+IHNldE5vZGUobm9kZTIpKTtcbiAgICBjb25zdCBsYXllcnMgPSBBcnJheS5mcm9tKGNvbnRleHQubGF5ZXJzKTtcbiAgICBjb25zdCBbaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdID0gWy4uLmNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRdLnNsaWNlKC0xKTtcbiAgICBjb25zdCBoaWdoZXN0TGF5ZXJXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZEluZGV4ID0gbGF5ZXJzLmluZGV4T2YoaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQpO1xuICAgIGNvbnN0IGluZGV4ID0gbm9kZSA/IGxheWVycy5pbmRleE9mKG5vZGUpIDogLTE7XG4gICAgY29uc3QgaXNCb2R5UG9pbnRlckV2ZW50c0Rpc2FibGVkID0gY29udGV4dC5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplID4gMDtcbiAgICBjb25zdCBpc1BvaW50ZXJFdmVudHNFbmFibGVkID0gaW5kZXggPj0gaGlnaGVzdExheWVyV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWRJbmRleDtcbiAgICBjb25zdCBwb2ludGVyRG93bk91dHNpZGUgPSB1c2VQb2ludGVyRG93bk91dHNpZGUoKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBjb25zdCBpc1BvaW50ZXJEb3duT25CcmFuY2ggPSBbLi4uY29udGV4dC5icmFuY2hlc10uc29tZSgoYnJhbmNoKSA9PiBicmFuY2guY29udGFpbnModGFyZ2V0KSk7XG4gICAgICBpZiAoIWlzUG9pbnRlckV2ZW50c0VuYWJsZWQgfHwgaXNQb2ludGVyRG93bk9uQnJhbmNoKSByZXR1cm47XG4gICAgICBvblBvaW50ZXJEb3duT3V0c2lkZT8uKGV2ZW50KTtcbiAgICAgIG9uSW50ZXJhY3RPdXRzaWRlPy4oZXZlbnQpO1xuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSBvbkRpc21pc3M/LigpO1xuICAgIH0sIG93bmVyRG9jdW1lbnQpO1xuICAgIGNvbnN0IGZvY3VzT3V0c2lkZSA9IHVzZUZvY3VzT3V0c2lkZSgoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGNvbnN0IGlzRm9jdXNJbkJyYW5jaCA9IFsuLi5jb250ZXh0LmJyYW5jaGVzXS5zb21lKChicmFuY2gpID0+IGJyYW5jaC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgIGlmIChpc0ZvY3VzSW5CcmFuY2gpIHJldHVybjtcbiAgICAgIG9uRm9jdXNPdXRzaWRlPy4oZXZlbnQpO1xuICAgICAgb25JbnRlcmFjdE91dHNpZGU/LihldmVudCk7XG4gICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIG9uRGlzbWlzcz8uKCk7XG4gICAgfSwgb3duZXJEb2N1bWVudCk7XG4gICAgdXNlRXNjYXBlS2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGlzSGlnaGVzdExheWVyID0gaW5kZXggPT09IGNvbnRleHQubGF5ZXJzLnNpemUgLSAxO1xuICAgICAgaWYgKCFpc0hpZ2hlc3RMYXllcikgcmV0dXJuO1xuICAgICAgb25Fc2NhcGVLZXlEb3duPy4oZXZlbnQpO1xuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIG9uRGlzbWlzcykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc21pc3MoKTtcbiAgICAgIH1cbiAgICB9LCBvd25lckRvY3VtZW50KTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICBpZiAoZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzKSB7XG4gICAgICAgIGlmIChjb250ZXh0LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemUgPT09IDApIHtcbiAgICAgICAgICBvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzID0gb3duZXJEb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM7XG4gICAgICAgICAgb3duZXJEb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChub2RlKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQubGF5ZXJzLmFkZChub2RlKTtcbiAgICAgIGRpc3BhdGNoVXBkYXRlKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzICYmIGNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgIG93bmVyRG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzID0gb3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBbbm9kZSwgb3duZXJEb2N1bWVudCwgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzLCBjb250ZXh0XSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgICBjb250ZXh0LmxheWVycy5kZWxldGUobm9kZSk7XG4gICAgICAgIGNvbnRleHQubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICBkaXNwYXRjaFVwZGF0ZSgpO1xuICAgICAgfTtcbiAgICB9LCBbbm9kZSwgY29udGV4dF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVVcGRhdGUgPSAoKSA9PiBmb3JjZSh7fSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKENPTlRFWFRfVVBEQVRFLCBoYW5kbGVVcGRhdGUpO1xuICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9VUERBVEUsIGhhbmRsZVVwZGF0ZSk7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmRpdixcbiAgICAgIHtcbiAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNCb2R5UG9pbnRlckV2ZW50c0Rpc2FibGVkID8gaXNQb2ludGVyRXZlbnRzRW5hYmxlZCA/IFwiYXV0b1wiIDogXCJub25lXCIgOiB2b2lkIDAsXG4gICAgICAgICAgLi4ucHJvcHMuc3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgb25Gb2N1c0NhcHR1cmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uRm9jdXNDYXB0dXJlLCBmb2N1c091dHNpZGUub25Gb2N1c0NhcHR1cmUpLFxuICAgICAgICBvbkJsdXJDYXB0dXJlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkJsdXJDYXB0dXJlLCBmb2N1c091dHNpZGUub25CbHVyQ2FwdHVyZSksXG4gICAgICAgIG9uUG9pbnRlckRvd25DYXB0dXJlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhcbiAgICAgICAgICBwcm9wcy5vblBvaW50ZXJEb3duQ2FwdHVyZSxcbiAgICAgICAgICBwb2ludGVyRG93bk91dHNpZGUub25Qb2ludGVyRG93bkNhcHR1cmVcbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5EaXNtaXNzYWJsZUxheWVyLmRpc3BsYXlOYW1lID0gRElTTUlTU0FCTEVfTEFZRVJfTkFNRTtcbnZhciBCUkFOQ0hfTkFNRSA9IFwiRGlzbWlzc2FibGVMYXllckJyYW5jaFwiO1xudmFyIERpc21pc3NhYmxlTGF5ZXJCcmFuY2ggPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERpc21pc3NhYmxlTGF5ZXJDb250ZXh0KTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCByZWYpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSByZWYuY3VycmVudDtcbiAgICBpZiAobm9kZSkge1xuICAgICAgY29udGV4dC5icmFuY2hlcy5hZGQobm9kZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb250ZXh0LmJyYW5jaGVzLmRlbGV0ZShub2RlKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY29udGV4dC5icmFuY2hlc10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuZGl2LCB7IC4uLnByb3BzLCByZWY6IGNvbXBvc2VkUmVmcyB9KTtcbn0pO1xuRGlzbWlzc2FibGVMYXllckJyYW5jaC5kaXNwbGF5TmFtZSA9IEJSQU5DSF9OQU1FO1xuZnVuY3Rpb24gdXNlUG9pbnRlckRvd25PdXRzaWRlKG9uUG9pbnRlckRvd25PdXRzaWRlLCBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcz8uZG9jdW1lbnQpIHtcbiAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gdXNlQ2FsbGJhY2tSZWYob25Qb2ludGVyRG93bk91dHNpZGUpO1xuICBjb25zdCBpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVDbGlja1JlZiA9IFJlYWN0LnVzZVJlZigoKSA9PiB7XG4gIH0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCkge1xuICAgICAgICBsZXQgaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBoYW5kbGVBbmREaXNwYXRjaEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgUE9JTlRFUl9ET1dOX09VVFNJREUsXG4gICAgICAgICAgICBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUsXG4gICAgICAgICAgICBldmVudERldGFpbCxcbiAgICAgICAgICAgIHsgZGlzY3JldGU6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50ID0gaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDI7XG4gICAgICAgIGNvbnN0IGV2ZW50RGV0YWlsID0geyBvcmlnaW5hbEV2ZW50OiBldmVudCB9O1xuICAgICAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFwidG91Y2hcIikge1xuICAgICAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQpO1xuICAgICAgICAgIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQgPSBoYW5kbGVBbmREaXNwYXRjaFBvaW50ZXJEb3duT3V0c2lkZUV2ZW50MjtcbiAgICAgICAgICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDbGlja1JlZi5jdXJyZW50LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlQW5kRGlzcGF0Y2hQb2ludGVyRG93bk91dHNpZGVFdmVudDIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3duZXJEb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2tSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBpc1BvaW50ZXJJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrUmVmLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtvd25lckRvY3VtZW50LCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGVdKTtcbiAgcmV0dXJuIHtcbiAgICAvLyBlbnN1cmVzIHdlIGNoZWNrIFJlYWN0IGNvbXBvbmVudCB0cmVlIChub3QganVzdCBET00gdHJlZSlcbiAgICBvblBvaW50ZXJEb3duQ2FwdHVyZTogKCkgPT4gaXNQb2ludGVySW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQgPSB0cnVlXG4gIH07XG59XG5mdW5jdGlvbiB1c2VGb2N1c091dHNpZGUob25Gb2N1c091dHNpZGUsIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzPy5kb2N1bWVudCkge1xuICBjb25zdCBoYW5kbGVGb2N1c091dHNpZGUgPSB1c2VDYWxsYmFja1JlZihvbkZvY3VzT3V0c2lkZSk7XG4gIGNvbnN0IGlzRm9jdXNJbnNpZGVSZWFjdFRyZWVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmICFpc0ZvY3VzSW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnREZXRhaWwgPSB7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH07XG4gICAgICAgIGhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQoRk9DVVNfT1VUU0lERSwgaGFuZGxlRm9jdXNPdXRzaWRlLCBldmVudERldGFpbCwge1xuICAgICAgICAgIGRpc2NyZXRlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG93bmVyRG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgaGFuZGxlRm9jdXMpO1xuICAgIHJldHVybiAoKSA9PiBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIGhhbmRsZUZvY3VzKTtcbiAgfSwgW293bmVyRG9jdW1lbnQsIGhhbmRsZUZvY3VzT3V0c2lkZV0pO1xuICByZXR1cm4ge1xuICAgIG9uRm9jdXNDYXB0dXJlOiAoKSA9PiBpc0ZvY3VzSW5zaWRlUmVhY3RUcmVlUmVmLmN1cnJlbnQgPSB0cnVlLFxuICAgIG9uQmx1ckNhcHR1cmU6ICgpID0+IGlzRm9jdXNJbnNpZGVSZWFjdFRyZWVSZWYuY3VycmVudCA9IGZhbHNlXG4gIH07XG59XG5mdW5jdGlvbiBkaXNwYXRjaFVwZGF0ZSgpIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQ09OVEVYVF9VUERBVEUpO1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUFuZERpc3BhdGNoQ3VzdG9tRXZlbnQobmFtZSwgaGFuZGxlciwgZGV0YWlsLCB7IGRpc2NyZXRlIH0pIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGV0YWlsLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7IGJ1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWwgfSk7XG4gIGlmIChoYW5kbGVyKSB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG4gIGlmIChkaXNjcmV0ZSkge1xuICAgIGRpc3BhdGNoRGlzY3JldGVDdXN0b21FdmVudCh0YXJnZXQsIGV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cbn1cbnZhciBSb290ID0gRGlzbWlzc2FibGVMYXllcjtcbnZhciBCcmFuY2ggPSBEaXNtaXNzYWJsZUxheWVyQnJhbmNoO1xuZXhwb3J0IHtcbiAgQnJhbmNoLFxuICBEaXNtaXNzYWJsZUxheWVyLFxuICBEaXNtaXNzYWJsZUxheWVyQnJhbmNoLFxuICBSb290XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiLy8gcGFja2FnZXMvcmVhY3QvaWQvc3JjL2lkLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1sYXlvdXQtZWZmZWN0XCI7XG52YXIgdXNlUmVhY3RJZCA9IFJlYWN0W1wiIHVzZUlkIFwiLnRyaW0oKS50b1N0cmluZygpXSB8fCAoKCkgPT4gdm9pZCAwKTtcbnZhciBjb3VudCA9IDA7XG5mdW5jdGlvbiB1c2VJZChkZXRlcm1pbmlzdGljSWQpIHtcbiAgY29uc3QgW2lkLCBzZXRJZF0gPSBSZWFjdC51c2VTdGF0ZSh1c2VSZWFjdElkKCkpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGV0ZXJtaW5pc3RpY0lkKSBzZXRJZCgocmVhY3RJZCkgPT4gcmVhY3RJZCA/PyBTdHJpbmcoY291bnQrKykpO1xuICB9LCBbZGV0ZXJtaW5pc3RpY0lkXSk7XG4gIHJldHVybiBkZXRlcm1pbmlzdGljSWQgfHwgKGlkID8gYHJhZGl4LSR7aWR9YCA6IFwiXCIpO1xufVxuZXhwb3J0IHtcbiAgdXNlSWRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJpbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIGFycm93IGFzIGFycm93JDIsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmV4cG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZGV0ZWN0T3ZlcmZsb3csIGdldE92ZXJmbG93QW5jZXN0b3JzLCBwbGF0Zm9ybSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcblxudmFyIGlzQ2xpZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgaW5kZXggPSBpc0NsaWVudCA/IHVzZUxheW91dEVmZmVjdCA6IG5vb3A7XG5cbi8vIEZvcmsgb2YgYGZhc3QtZGVlcC1lcXVhbGAgdGhhdCBvbmx5IGRvZXMgdGhlIGNvbXBhcmlzb25zIHdlIG5lZWQgYW5kIGNvbXBhcmVzXG4vLyBmdW5jdGlvbnNcbmZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGEgPT09ICdmdW5jdGlvbicgJiYgYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgbGVuZ3RoO1xuICBsZXQgaTtcbiAgbGV0IGtleXM7XG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICBpZiAoIXt9Lmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoa2V5ID09PSAnX293bmVyJyAmJiBhLiQkdHlwZW9mKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGEgIT09IGEgJiYgYiAhPT0gYjtcbn1cblxuZnVuY3Rpb24gZ2V0RFBSKGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgY29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuIHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIoZWxlbWVudCwgdmFsdWUpIHtcbiAgY29uc3QgZHByID0gZ2V0RFBSKGVsZW1lbnQpO1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIGRwcikgLyBkcHI7XG59XG5cbmZ1bmN0aW9uIHVzZUxhdGVzdFJlZih2YWx1ZSkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuICBpbmRleCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhIGZsb2F0aW5nIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdXNlRmxvYXRpbmdcbiAqL1xuZnVuY3Rpb24gdXNlRmxvYXRpbmcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICBzdHJhdGVneSA9ICdhYnNvbHV0ZScsXG4gICAgbWlkZGxld2FyZSA9IFtdLFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzOiB7XG4gICAgICByZWZlcmVuY2U6IGV4dGVybmFsUmVmZXJlbmNlLFxuICAgICAgZmxvYXRpbmc6IGV4dGVybmFsRmxvYXRpbmdcbiAgICB9ID0ge30sXG4gICAgdHJhbnNmb3JtID0gdHJ1ZSxcbiAgICB3aGlsZUVsZW1lbnRzTW91bnRlZCxcbiAgICBvcGVuXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHN0cmF0ZWd5LFxuICAgIHBsYWNlbWVudCxcbiAgICBtaWRkbGV3YXJlRGF0YToge30sXG4gICAgaXNQb3NpdGlvbmVkOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgW2xhdGVzdE1pZGRsZXdhcmUsIHNldExhdGVzdE1pZGRsZXdhcmVdID0gUmVhY3QudXNlU3RhdGUobWlkZGxld2FyZSk7XG4gIGlmICghZGVlcEVxdWFsKGxhdGVzdE1pZGRsZXdhcmUsIG1pZGRsZXdhcmUpKSB7XG4gICAgc2V0TGF0ZXN0TWlkZGxld2FyZShtaWRkbGV3YXJlKTtcbiAgfVxuICBjb25zdCBbX3JlZmVyZW5jZSwgX3NldFJlZmVyZW5jZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW19mbG9hdGluZywgX3NldEZsb2F0aW5nXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBzZXRSZWZlcmVuY2UgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPT0gcmVmZXJlbmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlZmVyZW5jZVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIF9zZXRSZWZlcmVuY2Uobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IHNldEZsb2F0aW5nID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgaWYgKG5vZGUgIT09IGZsb2F0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZsb2F0aW5nUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgX3NldEZsb2F0aW5nKG5vZGUpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCByZWZlcmVuY2VFbCA9IGV4dGVybmFsUmVmZXJlbmNlIHx8IF9yZWZlcmVuY2U7XG4gIGNvbnN0IGZsb2F0aW5nRWwgPSBleHRlcm5hbEZsb2F0aW5nIHx8IF9mbG9hdGluZztcbiAgY29uc3QgcmVmZXJlbmNlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBmbG9hdGluZ1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgZGF0YVJlZiA9IFJlYWN0LnVzZVJlZihkYXRhKTtcbiAgY29uc3QgaGFzV2hpbGVFbGVtZW50c01vdW50ZWQgPSB3aGlsZUVsZW1lbnRzTW91bnRlZCAhPSBudWxsO1xuICBjb25zdCB3aGlsZUVsZW1lbnRzTW91bnRlZFJlZiA9IHVzZUxhdGVzdFJlZih3aGlsZUVsZW1lbnRzTW91bnRlZCk7XG4gIGNvbnN0IHBsYXRmb3JtUmVmID0gdXNlTGF0ZXN0UmVmKHBsYXRmb3JtKTtcbiAgY29uc3Qgb3BlblJlZiA9IHVzZUxhdGVzdFJlZihvcGVuKTtcbiAgY29uc3QgdXBkYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghcmVmZXJlbmNlUmVmLmN1cnJlbnQgfHwgIWZsb2F0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlOiBsYXRlc3RNaWRkbGV3YXJlXG4gICAgfTtcbiAgICBpZiAocGxhdGZvcm1SZWYuY3VycmVudCkge1xuICAgICAgY29uZmlnLnBsYXRmb3JtID0gcGxhdGZvcm1SZWYuY3VycmVudDtcbiAgICB9XG4gICAgY29tcHV0ZVBvc2l0aW9uKHJlZmVyZW5jZVJlZi5jdXJyZW50LCBmbG9hdGluZ1JlZi5jdXJyZW50LCBjb25maWcpLnRoZW4oZGF0YSA9PiB7XG4gICAgICBjb25zdCBmdWxsRGF0YSA9IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLy8gVGhlIGZsb2F0aW5nIGVsZW1lbnQncyBwb3NpdGlvbiBtYXkgYmUgcmVjb21wdXRlZCB3aGlsZSBpdCdzIGNsb3NlZFxuICAgICAgICAvLyBidXQgc3RpbGwgbW91bnRlZCAoc3VjaCBhcyB3aGVuIHRyYW5zaXRpb25pbmcgb3V0KS4gVG8gZW5zdXJlXG4gICAgICAgIC8vIGBpc1Bvc2l0aW9uZWRgIHdpbGwgYmUgYGZhbHNlYCBpbml0aWFsbHkgb24gdGhlIG5leHQgb3BlbiwgYXZvaWRcbiAgICAgICAgLy8gc2V0dGluZyBpdCB0byBgdHJ1ZWAgd2hlbiBgb3BlbiA9PT0gZmFsc2VgIChtdXN0IGJlIHNwZWNpZmllZCkuXG4gICAgICAgIGlzUG9zaXRpb25lZDogb3BlblJlZi5jdXJyZW50ICE9PSBmYWxzZVxuICAgICAgfTtcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiAhZGVlcEVxdWFsKGRhdGFSZWYuY3VycmVudCwgZnVsbERhdGEpKSB7XG4gICAgICAgIGRhdGFSZWYuY3VycmVudCA9IGZ1bGxEYXRhO1xuICAgICAgICBSZWFjdERPTS5mbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldERhdGEoZnVsbERhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW2xhdGVzdE1pZGRsZXdhcmUsIHBsYWNlbWVudCwgc3RyYXRlZ3ksIHBsYXRmb3JtUmVmLCBvcGVuUmVmXSk7XG4gIGluZGV4KCgpID0+IHtcbiAgICBpZiAob3BlbiA9PT0gZmFsc2UgJiYgZGF0YVJlZi5jdXJyZW50LmlzUG9zaXRpb25lZCkge1xuICAgICAgZGF0YVJlZi5jdXJyZW50LmlzUG9zaXRpb25lZCA9IGZhbHNlO1xuICAgICAgc2V0RGF0YShkYXRhID0+ICh7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGlzUG9zaXRpb25lZDogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIFtvcGVuXSk7XG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGluZGV4KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpbmRleCgoKSA9PiB7XG4gICAgaWYgKHJlZmVyZW5jZUVsKSByZWZlcmVuY2VSZWYuY3VycmVudCA9IHJlZmVyZW5jZUVsO1xuICAgIGlmIChmbG9hdGluZ0VsKSBmbG9hdGluZ1JlZi5jdXJyZW50ID0gZmxvYXRpbmdFbDtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgZmxvYXRpbmdFbCkge1xuICAgICAgaWYgKHdoaWxlRWxlbWVudHNNb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHdoaWxlRWxlbWVudHNNb3VudGVkUmVmLmN1cnJlbnQocmVmZXJlbmNlRWwsIGZsb2F0aW5nRWwsIHVwZGF0ZSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0sIFtyZWZlcmVuY2VFbCwgZmxvYXRpbmdFbCwgdXBkYXRlLCB3aGlsZUVsZW1lbnRzTW91bnRlZFJlZiwgaGFzV2hpbGVFbGVtZW50c01vdW50ZWRdKTtcbiAgY29uc3QgcmVmcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZVJlZixcbiAgICBmbG9hdGluZzogZmxvYXRpbmdSZWYsXG4gICAgc2V0UmVmZXJlbmNlLFxuICAgIHNldEZsb2F0aW5nXG4gIH0pLCBbc2V0UmVmZXJlbmNlLCBzZXRGbG9hdGluZ10pO1xuICBjb25zdCBlbGVtZW50cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUVsLFxuICAgIGZsb2F0aW5nOiBmbG9hdGluZ0VsXG4gIH0pLCBbcmVmZXJlbmNlRWwsIGZsb2F0aW5nRWxdKTtcbiAgY29uc3QgZmxvYXRpbmdTdHlsZXMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsU3R5bGVzID0ge1xuICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG4gICAgaWYgKCFlbGVtZW50cy5mbG9hdGluZykge1xuICAgICAgcmV0dXJuIGluaXRpYWxTdHlsZXM7XG4gICAgfVxuICAgIGNvbnN0IHggPSByb3VuZEJ5RFBSKGVsZW1lbnRzLmZsb2F0aW5nLCBkYXRhLngpO1xuICAgIGNvbnN0IHkgPSByb3VuZEJ5RFBSKGVsZW1lbnRzLmZsb2F0aW5nLCBkYXRhLnkpO1xuICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluaXRpYWxTdHlsZXMsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIixcbiAgICAgICAgLi4uKGdldERQUihlbGVtZW50cy5mbG9hdGluZykgPj0gMS41ICYmIHtcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJ1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBzdHJhdGVneSxcbiAgICAgIGxlZnQ6IHgsXG4gICAgICB0b3A6IHlcbiAgICB9O1xuICB9LCBbc3RyYXRlZ3ksIHRyYW5zZm9ybSwgZWxlbWVudHMuZmxvYXRpbmcsIGRhdGEueCwgZGF0YS55XSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgLi4uZGF0YSxcbiAgICB1cGRhdGUsXG4gICAgcmVmcyxcbiAgICBlbGVtZW50cyxcbiAgICBmbG9hdGluZ1N0eWxlc1xuICB9KSwgW2RhdGEsIHVwZGF0ZSwgcmVmcywgZWxlbWVudHMsIGZsb2F0aW5nU3R5bGVzXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogVGhpcyB3cmFwcyB0aGUgY29yZSBgYXJyb3dgIG1pZGRsZXdhcmUgdG8gYWxsb3cgUmVhY3QgcmVmcyBhcyB0aGUgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyQxID0gb3B0aW9ucyA9PiB7XG4gIGZ1bmN0aW9uIGlzUmVmKHZhbHVlKSB7XG4gICAgcmV0dXJuIHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjdXJyZW50Jyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXJyb3cnLFxuICAgIG9wdGlvbnMsXG4gICAgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcGFkZGluZ1xuICAgICAgfSA9IHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucyhzdGF0ZSkgOiBvcHRpb25zO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgaXNSZWYoZWxlbWVudCkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGFycm93JDIoe1xuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudC5jdXJyZW50LFxuICAgICAgICAgICAgcGFkZGluZ1xuICAgICAgICAgIH0pLmZuKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gYXJyb3ckMih7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBwYWRkaW5nXG4gICAgICAgIH0pLmZuKHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4ub2Zmc2V0JDEob3B0aW9ucyksXG4gIG9wdGlvbnM6IFtvcHRpb25zLCBkZXBzXVxufSk7XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IChvcHRpb25zLCBkZXBzKSA9PiAoe1xuICAuLi5zaGlmdCQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIEJ1aWx0LWluIGBsaW1pdGVyYCB0aGF0IHdpbGwgc3RvcCBgc2hpZnQoKWAgYXQgYSBjZXJ0YWluIHBvaW50LlxuICovXG5jb25zdCBsaW1pdFNoaWZ0ID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmxpbWl0U2hpZnQkMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uZmxpcCQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uc2l6ZSQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IChvcHRpb25zLCBkZXBzKSA9PiAoe1xuICAuLi5hdXRvUGxhY2VtZW50JDEob3B0aW9ucyksXG4gIG9wdGlvbnM6IFtvcHRpb25zLCBkZXBzXVxufSk7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmhpZGUkMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gKG9wdGlvbnMsIGRlcHMpID0+ICh7XG4gIC4uLmlubGluZSQxKG9wdGlvbnMpLFxuICBvcHRpb25zOiBbb3B0aW9ucywgZGVwc11cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIFRoaXMgd3JhcHMgdGhlIGNvcmUgYGFycm93YCBtaWRkbGV3YXJlIHRvIGFsbG93IFJlYWN0IHJlZnMgYXMgdGhlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSAob3B0aW9ucywgZGVwcykgPT4gKHtcbiAgLi4uYXJyb3ckMShvcHRpb25zKSxcbiAgb3B0aW9uczogW29wdGlvbnMsIGRlcHNdXG59KTtcblxuZXhwb3J0IHsgYXJyb3csIGF1dG9QbGFjZW1lbnQsIGZsaXAsIGhpZGUsIGlubGluZSwgbGltaXRTaGlmdCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSwgdXNlRmxvYXRpbmcgfTtcbiIsIi8vIHNyYy9hcnJvdy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIE5BTUUgPSBcIkFycm93XCI7XG52YXIgQXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHdpZHRoID0gMTAsIGhlaWdodCA9IDUsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBQcmltaXRpdmUuc3ZnLFxuICAgIHtcbiAgICAgIC4uLmFycm93UHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdmlld0JveDogXCIwIDAgMzAgMTBcIixcbiAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IFwibm9uZVwiLFxuICAgICAgY2hpbGRyZW46IHByb3BzLmFzQ2hpbGQgPyBjaGlsZHJlbiA6IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJwb2x5Z29uXCIsIHsgcG9pbnRzOiBcIjAsMCAzMCwwIDE1LDEwXCIgfSlcbiAgICB9XG4gICk7XG59KTtcbkFycm93LmRpc3BsYXlOYW1lID0gTkFNRTtcbnZhciBSb290ID0gQXJyb3c7XG5leHBvcnQge1xuICBBcnJvdyxcbiAgUm9vdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIi8vIHBhY2thZ2VzL3JlYWN0L3VzZS1zaXplL3NyYy91c2Utc2l6ZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xuZnVuY3Rpb24gdXNlU2l6ZShlbGVtZW50KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IFJlYWN0LnVzZVN0YXRlKHZvaWQgMCk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHNldFNpemUoeyB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCB9KTtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgbGV0IHdpZHRoO1xuICAgICAgICBsZXQgaGVpZ2h0O1xuICAgICAgICBpZiAoXCJib3JkZXJCb3hTaXplXCIgaW4gZW50cnkpIHtcbiAgICAgICAgICBjb25zdCBib3JkZXJTaXplRW50cnkgPSBlbnRyeVtcImJvcmRlckJveFNpemVcIl07XG4gICAgICAgICAgY29uc3QgYm9yZGVyU2l6ZSA9IEFycmF5LmlzQXJyYXkoYm9yZGVyU2l6ZUVudHJ5KSA/IGJvcmRlclNpemVFbnRyeVswXSA6IGJvcmRlclNpemVFbnRyeTtcbiAgICAgICAgICB3aWR0aCA9IGJvcmRlclNpemVbXCJpbmxpbmVTaXplXCJdO1xuICAgICAgICAgIGhlaWdodCA9IGJvcmRlclNpemVbXCJibG9ja1NpemVcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHNldFNpemUoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgfSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHsgYm94OiBcImJvcmRlci1ib3hcIiB9KTtcbiAgICAgIHJldHVybiAoKSA9PiByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNpemUodm9pZCAwKTtcbiAgICB9XG4gIH0sIFtlbGVtZW50XSk7XG4gIHJldHVybiBzaXplO1xufVxuZXhwb3J0IHtcbiAgdXNlU2l6ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvcG9wcGVyLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICB1c2VGbG9hdGluZyxcbiAgYXV0b1VwZGF0ZSxcbiAgb2Zmc2V0LFxuICBzaGlmdCxcbiAgbGltaXRTaGlmdCxcbiAgaGlkZSxcbiAgYXJyb3cgYXMgZmxvYXRpbmdVSWFycm93LFxuICBmbGlwLFxuICBzaXplXG59IGZyb20gXCJAZmxvYXRpbmctdWkvcmVhY3QtZG9tXCI7XG5pbXBvcnQgKiBhcyBBcnJvd1ByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWFycm93XCI7XG5pbXBvcnQgeyB1c2VDb21wb3NlZFJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dFNjb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jYWxsYmFjay1yZWZcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IHVzZVNpemUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplXCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBTSURFX09QVElPTlMgPSBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl07XG52YXIgQUxJR05fT1BUSU9OUyA9IFtcInN0YXJ0XCIsIFwiY2VudGVyXCIsIFwiZW5kXCJdO1xudmFyIFBPUFBFUl9OQU1FID0gXCJQb3BwZXJcIjtcbnZhciBbY3JlYXRlUG9wcGVyQ29udGV4dCwgY3JlYXRlUG9wcGVyU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKFBPUFBFUl9OQU1FKTtcbnZhciBbUG9wcGVyUHJvdmlkZXIsIHVzZVBvcHBlckNvbnRleHRdID0gY3JlYXRlUG9wcGVyQ29udGV4dChQT1BQRVJfTkFNRSk7XG52YXIgUG9wcGVyID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZVBvcHBlciwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICBjb25zdCBbYW5jaG9yLCBzZXRBbmNob3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlUG9wcGVyLCBhbmNob3IsIG9uQW5jaG9yQ2hhbmdlOiBzZXRBbmNob3IsIGNoaWxkcmVuIH0pO1xufTtcblBvcHBlci5kaXNwbGF5TmFtZSA9IFBPUFBFUl9OQU1FO1xudmFyIEFOQ0hPUl9OQU1FID0gXCJQb3BwZXJBbmNob3JcIjtcbnZhciBQb3BwZXJBbmNob3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVBvcHBlciwgdmlydHVhbFJlZiwgLi4uYW5jaG9yUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VQb3BwZXJDb250ZXh0KEFOQ0hPUl9OQU1FLCBfX3Njb3BlUG9wcGVyKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgcmVmKTtcbiAgICBjb25zdCBhbmNob3JSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzQW5jaG9yID0gYW5jaG9yUmVmLmN1cnJlbnQ7XG4gICAgICBhbmNob3JSZWYuY3VycmVudCA9IHZpcnR1YWxSZWY/LmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQ7XG4gICAgICBpZiAocHJldmlvdXNBbmNob3IgIT09IGFuY2hvclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnRleHQub25BbmNob3JDaGFuZ2UoYW5jaG9yUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2aXJ0dWFsUmVmID8gbnVsbCA6IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyAuLi5hbmNob3JQcm9wcywgcmVmOiBjb21wb3NlZFJlZnMgfSk7XG4gIH1cbik7XG5Qb3BwZXJBbmNob3IuZGlzcGxheU5hbWUgPSBBTkNIT1JfTkFNRTtcbnZhciBDT05URU5UX05BTUUgPSBcIlBvcHBlckNvbnRlbnRcIjtcbnZhciBbUG9wcGVyQ29udGVudFByb3ZpZGVyLCB1c2VDb250ZW50Q29udGV4dF0gPSBjcmVhdGVQb3BwZXJDb250ZXh0KENPTlRFTlRfTkFNRSk7XG52YXIgUG9wcGVyQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZVBvcHBlcixcbiAgICAgIHNpZGUgPSBcImJvdHRvbVwiLFxuICAgICAgc2lkZU9mZnNldCA9IDAsXG4gICAgICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gICAgICBhbGlnbk9mZnNldCA9IDAsXG4gICAgICBhcnJvd1BhZGRpbmcgPSAwLFxuICAgICAgYXZvaWRDb2xsaXNpb25zID0gdHJ1ZSxcbiAgICAgIGNvbGxpc2lvbkJvdW5kYXJ5ID0gW10sXG4gICAgICBjb2xsaXNpb25QYWRkaW5nOiBjb2xsaXNpb25QYWRkaW5nUHJvcCA9IDAsXG4gICAgICBzdGlja3kgPSBcInBhcnRpYWxcIixcbiAgICAgIGhpZGVXaGVuRGV0YWNoZWQgPSBmYWxzZSxcbiAgICAgIHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kgPSBcIm9wdGltaXplZFwiLFxuICAgICAgb25QbGFjZWQsXG4gICAgICAuLi5jb250ZW50UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZVBvcHBlckNvbnRleHQoQ09OVEVOVF9OQU1FLCBfX3Njb3BlUG9wcGVyKTtcbiAgICBjb25zdCBbY29udGVudCwgc2V0Q29udGVudF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCAobm9kZSkgPT4gc2V0Q29udGVudChub2RlKSk7XG4gICAgY29uc3QgW2Fycm93LCBzZXRBcnJvd10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBhcnJvd1NpemUgPSB1c2VTaXplKGFycm93KTtcbiAgICBjb25zdCBhcnJvd1dpZHRoID0gYXJyb3dTaXplPy53aWR0aCA/PyAwO1xuICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gYXJyb3dTaXplPy5oZWlnaHQgPz8gMDtcbiAgICBjb25zdCBkZXNpcmVkUGxhY2VtZW50ID0gc2lkZSArIChhbGlnbiAhPT0gXCJjZW50ZXJcIiA/IFwiLVwiICsgYWxpZ24gOiBcIlwiKTtcbiAgICBjb25zdCBjb2xsaXNpb25QYWRkaW5nID0gdHlwZW9mIGNvbGxpc2lvblBhZGRpbmdQcm9wID09PSBcIm51bWJlclwiID8gY29sbGlzaW9uUGFkZGluZ1Byb3AgOiB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgLi4uY29sbGlzaW9uUGFkZGluZ1Byb3AgfTtcbiAgICBjb25zdCBib3VuZGFyeSA9IEFycmF5LmlzQXJyYXkoY29sbGlzaW9uQm91bmRhcnkpID8gY29sbGlzaW9uQm91bmRhcnkgOiBbY29sbGlzaW9uQm91bmRhcnldO1xuICAgIGNvbnN0IGhhc0V4cGxpY2l0Qm91bmRhcmllcyA9IGJvdW5kYXJ5Lmxlbmd0aCA+IDA7XG4gICAgY29uc3QgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zID0ge1xuICAgICAgcGFkZGluZzogY29sbGlzaW9uUGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeS5maWx0ZXIoaXNOb3ROdWxsKSxcbiAgICAgIC8vIHdpdGggYHN0cmF0ZWd5OiAnZml4ZWQnYCwgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IGl0IHRvIHJlc3BlY3QgYm91bmRhcmllc1xuICAgICAgYWx0Qm91bmRhcnk6IGhhc0V4cGxpY2l0Qm91bmRhcmllc1xuICAgIH07XG4gICAgY29uc3QgeyByZWZzLCBmbG9hdGluZ1N0eWxlcywgcGxhY2VtZW50LCBpc1Bvc2l0aW9uZWQsIG1pZGRsZXdhcmVEYXRhIH0gPSB1c2VGbG9hdGluZyh7XG4gICAgICAvLyBkZWZhdWx0IHRvIGBmaXhlZGAgc3RyYXRlZ3kgc28gdXNlcnMgZG9uJ3QgaGF2ZSB0byBwaWNrIGFuZCB3ZSBhbHNvIGF2b2lkIGZvY3VzIHNjcm9sbCBpc3N1ZXNcbiAgICAgIHN0cmF0ZWd5OiBcImZpeGVkXCIsXG4gICAgICBwbGFjZW1lbnQ6IGRlc2lyZWRQbGFjZW1lbnQsXG4gICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZDogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgY2xlYW51cCA9IGF1dG9VcGRhdGUoLi4uYXJncywge1xuICAgICAgICAgIGFuaW1hdGlvbkZyYW1lOiB1cGRhdGVQb3NpdGlvblN0cmF0ZWd5ID09PSBcImFsd2F5c1wiXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xlYW51cDtcbiAgICAgIH0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IGNvbnRleHQuYW5jaG9yXG4gICAgICB9LFxuICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICBvZmZzZXQoeyBtYWluQXhpczogc2lkZU9mZnNldCArIGFycm93SGVpZ2h0LCBhbGlnbm1lbnRBeGlzOiBhbGlnbk9mZnNldCB9KSxcbiAgICAgICAgYXZvaWRDb2xsaXNpb25zICYmIHNoaWZ0KHtcbiAgICAgICAgICBtYWluQXhpczogdHJ1ZSxcbiAgICAgICAgICBjcm9zc0F4aXM6IGZhbHNlLFxuICAgICAgICAgIGxpbWl0ZXI6IHN0aWNreSA9PT0gXCJwYXJ0aWFsXCIgPyBsaW1pdFNoaWZ0KCkgOiB2b2lkIDAsXG4gICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICAgIH0pLFxuICAgICAgICBhdm9pZENvbGxpc2lvbnMgJiYgZmxpcCh7IC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyB9KSxcbiAgICAgICAgc2l6ZSh7XG4gICAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zLFxuICAgICAgICAgIGFwcGx5OiAoeyBlbGVtZW50cywgcmVjdHMsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aDogYW5jaG9yV2lkdGgsIGhlaWdodDogYW5jaG9ySGVpZ2h0IH0gPSByZWN0cy5yZWZlcmVuY2U7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3R5bGUgPSBlbGVtZW50cy5mbG9hdGluZy5zdHlsZTtcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZS5zZXRQcm9wZXJ0eShcIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aFwiLCBgJHthdmFpbGFibGVXaWR0aH1weGApO1xuICAgICAgICAgICAgY29udGVudFN0eWxlLnNldFByb3BlcnR5KFwiLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodFwiLCBgJHthdmFpbGFibGVIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZS5zZXRQcm9wZXJ0eShcIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aFwiLCBgJHthbmNob3JXaWR0aH1weGApO1xuICAgICAgICAgICAgY29udGVudFN0eWxlLnNldFByb3BlcnR5KFwiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodFwiLCBgJHthbmNob3JIZWlnaHR9cHhgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBhcnJvdyAmJiBmbG9hdGluZ1VJYXJyb3coeyBlbGVtZW50OiBhcnJvdywgcGFkZGluZzogYXJyb3dQYWRkaW5nIH0pLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW4oeyBhcnJvd1dpZHRoLCBhcnJvd0hlaWdodCB9KSxcbiAgICAgICAgaGlkZVdoZW5EZXRhY2hlZCAmJiBoaWRlKHsgc3RyYXRlZ3k6IFwicmVmZXJlbmNlSGlkZGVuXCIsIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyB9KVxuICAgICAgXVxuICAgIH0pO1xuICAgIGNvbnN0IFtwbGFjZWRTaWRlLCBwbGFjZWRBbGlnbl0gPSBnZXRTaWRlQW5kQWxpZ25Gcm9tUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgY29uc3QgaGFuZGxlUGxhY2VkID0gdXNlQ2FsbGJhY2tSZWYob25QbGFjZWQpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNQb3NpdGlvbmVkKSB7XG4gICAgICAgIGhhbmRsZVBsYWNlZD8uKCk7XG4gICAgICB9XG4gICAgfSwgW2lzUG9zaXRpb25lZCwgaGFuZGxlUGxhY2VkXSk7XG4gICAgY29uc3QgYXJyb3dYID0gbWlkZGxld2FyZURhdGEuYXJyb3c/Lng7XG4gICAgY29uc3QgYXJyb3dZID0gbWlkZGxld2FyZURhdGEuYXJyb3c/Lnk7XG4gICAgY29uc3QgY2Fubm90Q2VudGVyQXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdz8uY2VudGVyT2Zmc2V0ICE9PSAwO1xuICAgIGNvbnN0IFtjb250ZW50WkluZGV4LCBzZXRDb250ZW50WkluZGV4XSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChjb250ZW50KSBzZXRDb250ZW50WkluZGV4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpLnpJbmRleCk7XG4gICAgfSwgW2NvbnRlbnRdKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHJlZjogcmVmcy5zZXRGbG9hdGluZyxcbiAgICAgICAgXCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXJcIjogXCJcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5mbG9hdGluZ1N0eWxlcyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzUG9zaXRpb25lZCA/IGZsb2F0aW5nU3R5bGVzLnRyYW5zZm9ybSA6IFwidHJhbnNsYXRlKDAsIC0yMDAlKVwiLFxuICAgICAgICAgIC8vIGtlZXAgb2ZmIHRoZSBwYWdlIHdoZW4gbWVhc3VyaW5nXG4gICAgICAgICAgbWluV2lkdGg6IFwibWF4LWNvbnRlbnRcIixcbiAgICAgICAgICB6SW5kZXg6IGNvbnRlbnRaSW5kZXgsXG4gICAgICAgICAgW1wiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpblwiXTogW1xuICAgICAgICAgICAgbWlkZGxld2FyZURhdGEudHJhbnNmb3JtT3JpZ2luPy54LFxuICAgICAgICAgICAgbWlkZGxld2FyZURhdGEudHJhbnNmb3JtT3JpZ2luPy55XG4gICAgICAgICAgXS5qb2luKFwiIFwiKSxcbiAgICAgICAgICAvLyBoaWRlIHRoZSBjb250ZW50IGlmIHVzaW5nIHRoZSBoaWRlIG1pZGRsZXdhcmUgYW5kIHNob3VsZCBiZSBoaWRkZW5cbiAgICAgICAgICAvLyBzZXQgdmlzaWJpbGl0eSB0byBoaWRkZW4gYW5kIGRpc2FibGUgcG9pbnRlciBldmVudHMgc28gdGhlIFVJIGJlaGF2ZXNcbiAgICAgICAgICAvLyBhcyBpZiB0aGUgUG9wcGVyQ29udGVudCBpc24ndCB0aGVyZSBhdCBhbGxcbiAgICAgICAgICAuLi5taWRkbGV3YXJlRGF0YS5oaWRlPy5yZWZlcmVuY2VIaWRkZW4gJiYge1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkaXI6IHByb3BzLmRpcixcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgUG9wcGVyQ29udGVudFByb3ZpZGVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiBfX3Njb3BlUG9wcGVyLFxuICAgICAgICAgICAgcGxhY2VkU2lkZSxcbiAgICAgICAgICAgIG9uQXJyb3dDaGFuZ2U6IHNldEFycm93LFxuICAgICAgICAgICAgYXJyb3dYLFxuICAgICAgICAgICAgYXJyb3dZLFxuICAgICAgICAgICAgc2hvdWxkSGlkZUFycm93OiBjYW5ub3RDZW50ZXJBcnJvdyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJkYXRhLXNpZGVcIjogcGxhY2VkU2lkZSxcbiAgICAgICAgICAgICAgICBcImRhdGEtYWxpZ25cIjogcGxhY2VkQWxpZ24sXG4gICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAuLi5jb250ZW50UHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgUG9wcGVyQ29udGVudCBoYXNuJ3QgYmVlbiBwbGFjZWQgeWV0IChub3QgYWxsIG1lYXN1cmVtZW50cyBkb25lKVxuICAgICAgICAgICAgICAgICAgLy8gd2UgcHJldmVudCBhbmltYXRpb25zIHNvIHRoYXQgdXNlcnMncyBhbmltYXRpb24gZG9uJ3Qga2ljayBpbiB0b28gZWFybHkgcmVmZXJyaW5nIHdyb25nIHNpZGVzXG4gICAgICAgICAgICAgICAgICBhbmltYXRpb246ICFpc1Bvc2l0aW9uZWQgPyBcIm5vbmVcIiA6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5Qb3BwZXJDb250ZW50LmRpc3BsYXlOYW1lID0gQ09OVEVOVF9OQU1FO1xudmFyIEFSUk9XX05BTUUgPSBcIlBvcHBlckFycm93XCI7XG52YXIgT1BQT1NJVEVfU0lERSA9IHtcbiAgdG9wOiBcImJvdHRvbVwiLFxuICByaWdodDogXCJsZWZ0XCIsXG4gIGJvdHRvbTogXCJ0b3BcIixcbiAgbGVmdDogXCJyaWdodFwiXG59O1xudmFyIFBvcHBlckFycm93ID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BwZXJBcnJvdzIocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7IF9fc2NvcGVQb3BwZXIsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZUNvbnRlbnRDb250ZXh0KEFSUk9XX05BTUUsIF9fc2NvcGVQb3BwZXIpO1xuICBjb25zdCBiYXNlU2lkZSA9IE9QUE9TSVRFX1NJREVbY29udGVudENvbnRleHQucGxhY2VkU2lkZV07XG4gIHJldHVybiAoXG4gICAgLy8gd2UgaGF2ZSB0byB1c2UgYW4gZXh0cmEgd3JhcHBlciBiZWNhdXNlIGBSZXNpemVPYnNlcnZlcmAgKHVzZWQgYnkgYHVzZVNpemVgKVxuICAgIC8vIGRvZXNuJ3QgcmVwb3J0IHNpemUgYXMgd2UnZCBleHBlY3Qgb24gU1ZHIGVsZW1lbnRzLlxuICAgIC8vIGl0IHJlcG9ydHMgdGhlaXIgYm91bmRpbmcgYm94IHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBsYXJnZXN0IHBhdGggaW5zaWRlIHRoZSBTVkcuXG4gICAgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFwic3BhblwiLFxuICAgICAge1xuICAgICAgICByZWY6IGNvbnRlbnRDb250ZXh0Lm9uQXJyb3dDaGFuZ2UsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBsZWZ0OiBjb250ZW50Q29udGV4dC5hcnJvd1gsXG4gICAgICAgICAgdG9wOiBjb250ZW50Q29udGV4dC5hcnJvd1ksXG4gICAgICAgICAgW2Jhc2VTaWRlXTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgICAgIHRvcDogXCJcIixcbiAgICAgICAgICAgIHJpZ2h0OiBcIjAgMFwiLFxuICAgICAgICAgICAgYm90dG9tOiBcImNlbnRlciAwXCIsXG4gICAgICAgICAgICBsZWZ0OiBcIjEwMCUgMFwiXG4gICAgICAgICAgfVtjb250ZW50Q29udGV4dC5wbGFjZWRTaWRlXSxcbiAgICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICAgIHRvcDogXCJ0cmFuc2xhdGVZKDEwMCUpXCIsXG4gICAgICAgICAgICByaWdodDogXCJ0cmFuc2xhdGVZKDUwJSkgcm90YXRlKDkwZGVnKSB0cmFuc2xhdGVYKC01MCUpXCIsXG4gICAgICAgICAgICBib3R0b206IGByb3RhdGUoMTgwZGVnKWAsXG4gICAgICAgICAgICBsZWZ0OiBcInRyYW5zbGF0ZVkoNTAlKSByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGVYKDUwJSlcIlxuICAgICAgICAgIH1bY29udGVudENvbnRleHQucGxhY2VkU2lkZV0sXG4gICAgICAgICAgdmlzaWJpbGl0eTogY29udGVudENvbnRleHQuc2hvdWxkSGlkZUFycm93ID8gXCJoaWRkZW5cIiA6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICBBcnJvd1ByaW1pdGl2ZS5Sb290LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmFycm93UHJvcHMsXG4gICAgICAgICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIC4uLmFycm93UHJvcHMuc3R5bGUsXG4gICAgICAgICAgICAgIC8vIGVuc3VyZXMgdGhlIGVsZW1lbnQgY2FuIGJlIG1lYXN1cmVkIGNvcnJlY3RseSAobW9zdGx5IGZvciBpZiBTVkcpXG4gICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIClcbiAgKTtcbn0pO1xuUG9wcGVyQXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xuZnVuY3Rpb24gaXNOb3ROdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbn1cbnZhciB0cmFuc2Zvcm1PcmlnaW4gPSAob3B0aW9ucykgPT4gKHtcbiAgbmFtZTogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgb3B0aW9ucyxcbiAgZm4oZGF0YSkge1xuICAgIGNvbnN0IHsgcGxhY2VtZW50LCByZWN0cywgbWlkZGxld2FyZURhdGEgfSA9IGRhdGE7XG4gICAgY29uc3QgY2Fubm90Q2VudGVyQXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdz8uY2VudGVyT2Zmc2V0ICE9PSAwO1xuICAgIGNvbnN0IGlzQXJyb3dIaWRkZW4gPSBjYW5ub3RDZW50ZXJBcnJvdztcbiAgICBjb25zdCBhcnJvd1dpZHRoID0gaXNBcnJvd0hpZGRlbiA/IDAgOiBvcHRpb25zLmFycm93V2lkdGg7XG4gICAgY29uc3QgYXJyb3dIZWlnaHQgPSBpc0Fycm93SGlkZGVuID8gMCA6IG9wdGlvbnMuYXJyb3dIZWlnaHQ7XG4gICAgY29uc3QgW3BsYWNlZFNpZGUsIHBsYWNlZEFsaWduXSA9IGdldFNpZGVBbmRBbGlnbkZyb21QbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICBjb25zdCBub0Fycm93QWxpZ24gPSB7IHN0YXJ0OiBcIjAlXCIsIGNlbnRlcjogXCI1MCVcIiwgZW5kOiBcIjEwMCVcIiB9W3BsYWNlZEFsaWduXTtcbiAgICBjb25zdCBhcnJvd1hDZW50ZXIgPSAobWlkZGxld2FyZURhdGEuYXJyb3c/LnggPz8gMCkgKyBhcnJvd1dpZHRoIC8gMjtcbiAgICBjb25zdCBhcnJvd1lDZW50ZXIgPSAobWlkZGxld2FyZURhdGEuYXJyb3c/LnkgPz8gMCkgKyBhcnJvd0hlaWdodCAvIDI7XG4gICAgbGV0IHggPSBcIlwiO1xuICAgIGxldCB5ID0gXCJcIjtcbiAgICBpZiAocGxhY2VkU2lkZSA9PT0gXCJib3R0b21cIikge1xuICAgICAgeCA9IGlzQXJyb3dIaWRkZW4gPyBub0Fycm93QWxpZ24gOiBgJHthcnJvd1hDZW50ZXJ9cHhgO1xuICAgICAgeSA9IGAkey1hcnJvd0hlaWdodH1weGA7XG4gICAgfSBlbHNlIGlmIChwbGFjZWRTaWRlID09PSBcInRvcFwiKSB7XG4gICAgICB4ID0gaXNBcnJvd0hpZGRlbiA/IG5vQXJyb3dBbGlnbiA6IGAke2Fycm93WENlbnRlcn1weGA7XG4gICAgICB5ID0gYCR7cmVjdHMuZmxvYXRpbmcuaGVpZ2h0ICsgYXJyb3dIZWlnaHR9cHhgO1xuICAgIH0gZWxzZSBpZiAocGxhY2VkU2lkZSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICB4ID0gYCR7LWFycm93SGVpZ2h0fXB4YDtcbiAgICAgIHkgPSBpc0Fycm93SGlkZGVuID8gbm9BcnJvd0FsaWduIDogYCR7YXJyb3dZQ2VudGVyfXB4YDtcbiAgICB9IGVsc2UgaWYgKHBsYWNlZFNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICB4ID0gYCR7cmVjdHMuZmxvYXRpbmcud2lkdGggKyBhcnJvd0hlaWdodH1weGA7XG4gICAgICB5ID0gaXNBcnJvd0hpZGRlbiA/IG5vQXJyb3dBbGlnbiA6IGAke2Fycm93WUNlbnRlcn1weGA7XG4gICAgfVxuICAgIHJldHVybiB7IGRhdGE6IHsgeCwgeSB9IH07XG4gIH1cbn0pO1xuZnVuY3Rpb24gZ2V0U2lkZUFuZEFsaWduRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgY29uc3QgW3NpZGUsIGFsaWduID0gXCJjZW50ZXJcIl0gPSBwbGFjZW1lbnQuc3BsaXQoXCItXCIpO1xuICByZXR1cm4gW3NpZGUsIGFsaWduXTtcbn1cbnZhciBSb290MiA9IFBvcHBlcjtcbnZhciBBbmNob3IgPSBQb3BwZXJBbmNob3I7XG52YXIgQ29udGVudCA9IFBvcHBlckNvbnRlbnQ7XG52YXIgQXJyb3cgPSBQb3BwZXJBcnJvdztcbmV4cG9ydCB7XG4gIEFMSUdOX09QVElPTlMsXG4gIEFuY2hvcixcbiAgQXJyb3csXG4gIENvbnRlbnQsXG4gIFBvcHBlcixcbiAgUG9wcGVyQW5jaG9yLFxuICBQb3BwZXJBcnJvdyxcbiAgUG9wcGVyQ29udGVudCxcbiAgUm9vdDIgYXMgUm9vdCxcbiAgU0lERV9PUFRJT05TLFxuICBjcmVhdGVQb3BwZXJTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvcG9ydGFsLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIFBPUlRBTF9OQU1FID0gXCJQb3J0YWxcIjtcbnZhciBQb3J0YWwgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHsgY29udGFpbmVyOiBjb250YWluZXJQcm9wLCAuLi5wb3J0YWxQcm9wcyB9ID0gcHJvcHM7XG4gIGNvbnN0IFttb3VudGVkLCBzZXRNb3VudGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHNldE1vdW50ZWQodHJ1ZSksIFtdKTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCBtb3VudGVkICYmIGdsb2JhbFRoaXM/LmRvY3VtZW50Py5ib2R5O1xuICByZXR1cm4gY29udGFpbmVyID8gUmVhY3RET00uY3JlYXRlUG9ydGFsKC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyAuLi5wb3J0YWxQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSksIGNvbnRhaW5lcikgOiBudWxsO1xufSk7XG5Qb3J0YWwuZGlzcGxheU5hbWUgPSBQT1JUQUxfTkFNRTtcbnZhciBSb290ID0gUG9ydGFsO1xuZXhwb3J0IHtcbiAgUG9ydGFsLFxuICBSb290XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9wcmVzZW5jZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0MiBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1sYXlvdXQtZWZmZWN0XCI7XG5cbi8vIHNyYy91c2Utc3RhdGUtbWFjaGluZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuZnVuY3Rpb24gdXNlU3RhdGVNYWNoaW5lKGluaXRpYWxTdGF0ZSwgbWFjaGluZSkge1xuICByZXR1cm4gUmVhY3QudXNlUmVkdWNlcigoc3RhdGUsIGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gbWFjaGluZVtzdGF0ZV1bZXZlbnRdO1xuICAgIHJldHVybiBuZXh0U3RhdGUgPz8gc3RhdGU7XG4gIH0sIGluaXRpYWxTdGF0ZSk7XG59XG5cbi8vIHNyYy9wcmVzZW5jZS50c3hcbnZhciBQcmVzZW5jZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IHByZXNlbnQsIGNoaWxkcmVuIH0gPSBwcm9wcztcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VQcmVzZW5jZShwcmVzZW50KTtcbiAgY29uc3QgY2hpbGQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKHsgcHJlc2VudDogcHJlc2VuY2UuaXNQcmVzZW50IH0pIDogUmVhY3QyLkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICBjb25zdCByZWYgPSB1c2VDb21wb3NlZFJlZnMocHJlc2VuY2UucmVmLCBnZXRFbGVtZW50UmVmKGNoaWxkKSk7XG4gIGNvbnN0IGZvcmNlTW91bnQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIjtcbiAgcmV0dXJuIGZvcmNlTW91bnQgfHwgcHJlc2VuY2UuaXNQcmVzZW50ID8gUmVhY3QyLmNsb25lRWxlbWVudChjaGlsZCwgeyByZWYgfSkgOiBudWxsO1xufTtcblByZXNlbmNlLmRpc3BsYXlOYW1lID0gXCJQcmVzZW5jZVwiO1xuZnVuY3Rpb24gdXNlUHJlc2VuY2UocHJlc2VudCkge1xuICBjb25zdCBbbm9kZSwgc2V0Tm9kZV0gPSBSZWFjdDIudXNlU3RhdGUoKTtcbiAgY29uc3Qgc3R5bGVzUmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgY29uc3QgcHJldlByZXNlbnRSZWYgPSBSZWFjdDIudXNlUmVmKHByZXNlbnQpO1xuICBjb25zdCBwcmV2QW5pbWF0aW9uTmFtZVJlZiA9IFJlYWN0Mi51c2VSZWYoXCJub25lXCIpO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBwcmVzZW50ID8gXCJtb3VudGVkXCIgOiBcInVubW91bnRlZFwiO1xuICBjb25zdCBbc3RhdGUsIHNlbmRdID0gdXNlU3RhdGVNYWNoaW5lKGluaXRpYWxTdGF0ZSwge1xuICAgIG1vdW50ZWQ6IHtcbiAgICAgIFVOTU9VTlQ6IFwidW5tb3VudGVkXCIsXG4gICAgICBBTklNQVRJT05fT1VUOiBcInVubW91bnRTdXNwZW5kZWRcIlxuICAgIH0sXG4gICAgdW5tb3VudFN1c3BlbmRlZDoge1xuICAgICAgTU9VTlQ6IFwibW91bnRlZFwiLFxuICAgICAgQU5JTUFUSU9OX0VORDogXCJ1bm1vdW50ZWRcIlxuICAgIH0sXG4gICAgdW5tb3VudGVkOiB7XG4gICAgICBNT1VOVDogXCJtb3VudGVkXCJcbiAgICB9XG4gIH0pO1xuICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50QW5pbWF0aW9uTmFtZSA9IGdldEFuaW1hdGlvbk5hbWUoc3R5bGVzUmVmLmN1cnJlbnQpO1xuICAgIHByZXZBbmltYXRpb25OYW1lUmVmLmN1cnJlbnQgPSBzdGF0ZSA9PT0gXCJtb3VudGVkXCIgPyBjdXJyZW50QW5pbWF0aW9uTmFtZSA6IFwibm9uZVwiO1xuICB9LCBbc3RhdGVdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSBzdHlsZXNSZWYuY3VycmVudDtcbiAgICBjb25zdCB3YXNQcmVzZW50ID0gcHJldlByZXNlbnRSZWYuY3VycmVudDtcbiAgICBjb25zdCBoYXNQcmVzZW50Q2hhbmdlZCA9IHdhc1ByZXNlbnQgIT09IHByZXNlbnQ7XG4gICAgaWYgKGhhc1ByZXNlbnRDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBwcmV2QW5pbWF0aW9uTmFtZSA9IHByZXZBbmltYXRpb25OYW1lUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50QW5pbWF0aW9uTmFtZSA9IGdldEFuaW1hdGlvbk5hbWUoc3R5bGVzKTtcbiAgICAgIGlmIChwcmVzZW50KSB7XG4gICAgICAgIHNlbmQoXCJNT1VOVFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEFuaW1hdGlvbk5hbWUgPT09IFwibm9uZVwiIHx8IHN0eWxlcz8uZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgc2VuZChcIlVOTU9VTlRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc0FuaW1hdGluZyA9IHByZXZBbmltYXRpb25OYW1lICE9PSBjdXJyZW50QW5pbWF0aW9uTmFtZTtcbiAgICAgICAgaWYgKHdhc1ByZXNlbnQgJiYgaXNBbmltYXRpbmcpIHtcbiAgICAgICAgICBzZW5kKFwiQU5JTUFUSU9OX09VVFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZW5kKFwiVU5NT1VOVFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJldlByZXNlbnRSZWYuY3VycmVudCA9IHByZXNlbnQ7XG4gICAgfVxuICB9LCBbcHJlc2VudCwgc2VuZF0pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChub2RlKSB7XG4gICAgICBsZXQgdGltZW91dElkO1xuICAgICAgY29uc3Qgb3duZXJXaW5kb3cgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gd2luZG93O1xuICAgICAgY29uc3QgaGFuZGxlQW5pbWF0aW9uRW5kID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbmltYXRpb25OYW1lID0gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXNSZWYuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudEFuaW1hdGlvbiA9IGN1cnJlbnRBbmltYXRpb25OYW1lLmluY2x1ZGVzKENTUy5lc2NhcGUoZXZlbnQuYW5pbWF0aW9uTmFtZSkpO1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBub2RlICYmIGlzQ3VycmVudEFuaW1hdGlvbikge1xuICAgICAgICAgIHNlbmQoXCJBTklNQVRJT05fRU5EXCIpO1xuICAgICAgICAgIGlmICghcHJldlByZXNlbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbGxNb2RlID0gbm9kZS5zdHlsZS5hbmltYXRpb25GaWxsTW9kZTtcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPSBcImZvcndhcmRzXCI7XG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBvd25lcldpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPT09IFwiZm9yd2FyZHNcIikge1xuICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGUgPSBjdXJyZW50RmlsbE1vZGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhbmRsZUFuaW1hdGlvblN0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IG5vZGUpIHtcbiAgICAgICAgICBwcmV2QW5pbWF0aW9uTmFtZVJlZi5jdXJyZW50ID0gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXNSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25zdGFydFwiLCBoYW5kbGVBbmltYXRpb25TdGFydCk7XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25jYW5jZWxcIiwgaGFuZGxlQW5pbWF0aW9uRW5kKTtcbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVBbmltYXRpb25FbmQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgb3duZXJXaW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbnN0YXJ0XCIsIGhhbmRsZUFuaW1hdGlvblN0YXJ0KTtcbiAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uY2FuY2VsXCIsIGhhbmRsZUFuaW1hdGlvbkVuZCk7XG4gICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVBbmltYXRpb25FbmQpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZChcIkFOSU1BVElPTl9FTkRcIik7XG4gICAgfVxuICB9LCBbbm9kZSwgc2VuZF0pO1xuICByZXR1cm4ge1xuICAgIGlzUHJlc2VudDogW1wibW91bnRlZFwiLCBcInVubW91bnRTdXNwZW5kZWRcIl0uaW5jbHVkZXMoc3RhdGUpLFxuICAgIHJlZjogUmVhY3QyLnVzZUNhbGxiYWNrKChub2RlMikgPT4ge1xuICAgICAgc3R5bGVzUmVmLmN1cnJlbnQgPSBub2RlMiA/IGdldENvbXB1dGVkU3R5bGUobm9kZTIpIDogbnVsbDtcbiAgICAgIHNldE5vZGUobm9kZTIpO1xuICAgIH0sIFtdKVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0QW5pbWF0aW9uTmFtZShzdHlsZXMpIHtcbiAgcmV0dXJuIHN0eWxlcz8uYW5pbWF0aW9uTmFtZSB8fCBcIm5vbmVcIjtcbn1cbmZ1bmN0aW9uIGdldEVsZW1lbnRSZWYoZWxlbWVudCkge1xuICBsZXQgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlbGVtZW50LnByb3BzLCBcInJlZlwiKT8uZ2V0O1xuICBsZXQgbWF5V2FybiA9IGdldHRlciAmJiBcImlzUmVhY3RXYXJuaW5nXCIgaW4gZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZztcbiAgaWYgKG1heVdhcm4pIHtcbiAgICByZXR1cm4gZWxlbWVudC5yZWY7XG4gIH1cbiAgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlbGVtZW50LCBcInJlZlwiKT8uZ2V0O1xuICBtYXlXYXJuID0gZ2V0dGVyICYmIFwiaXNSZWFjdFdhcm5pbmdcIiBpbiBnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICBpZiAobWF5V2Fybikge1xuICAgIHJldHVybiBlbGVtZW50LnByb3BzLnJlZjtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wcm9wcy5yZWYgfHwgZWxlbWVudC5yZWY7XG59XG52YXIgUm9vdCA9IFByZXNlbmNlO1xuZXhwb3J0IHtcbiAgUHJlc2VuY2UsXG4gIFJvb3Rcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdXNlLWNvbnRyb2xsYWJsZS1zdGF0ZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0W1wiIHVzZUluc2VydGlvbkVmZmVjdCBcIi50cmltKCkudG9TdHJpbmcoKV0gfHwgdXNlTGF5b3V0RWZmZWN0O1xuZnVuY3Rpb24gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICBwcm9wLFxuICBkZWZhdWx0UHJvcCxcbiAgb25DaGFuZ2UgPSAoKSA9PiB7XG4gIH0sXG4gIGNhbGxlclxufSkge1xuICBjb25zdCBbdW5jb250cm9sbGVkUHJvcCwgc2V0VW5jb250cm9sbGVkUHJvcCwgb25DaGFuZ2VSZWZdID0gdXNlVW5jb250cm9sbGVkU3RhdGUoe1xuICAgIGRlZmF1bHRQcm9wLFxuICAgIG9uQ2hhbmdlXG4gIH0pO1xuICBjb25zdCBpc0NvbnRyb2xsZWQgPSBwcm9wICE9PSB2b2lkIDA7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gcHJvcCA6IHVuY29udHJvbGxlZFByb3A7XG4gIGlmICh0cnVlKSB7XG4gICAgY29uc3QgaXNDb250cm9sbGVkUmVmID0gUmVhY3QudXNlUmVmKHByb3AgIT09IHZvaWQgMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0NvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWRSZWYuY3VycmVudDtcbiAgICAgIGlmICh3YXNDb250cm9sbGVkICE9PSBpc0NvbnRyb2xsZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IHdhc0NvbnRyb2xsZWQgPyBcImNvbnRyb2xsZWRcIiA6IFwidW5jb250cm9sbGVkXCI7XG4gICAgICAgIGNvbnN0IHRvID0gaXNDb250cm9sbGVkID8gXCJjb250cm9sbGVkXCIgOiBcInVuY29udHJvbGxlZFwiO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCR7Y2FsbGVyfSBpcyBjaGFuZ2luZyBmcm9tICR7ZnJvbX0gdG8gJHt0b30uIENvbXBvbmVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdmFsdWUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlzQ29udHJvbGxlZFJlZi5jdXJyZW50ID0gaXNDb250cm9sbGVkO1xuICAgIH0sIFtpc0NvbnRyb2xsZWQsIGNhbGxlcl0pO1xuICB9XG4gIGNvbnN0IHNldFZhbHVlID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKG5leHRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgICBjb25zdCB2YWx1ZTIgPSBpc0Z1bmN0aW9uKG5leHRWYWx1ZSkgPyBuZXh0VmFsdWUocHJvcCkgOiBuZXh0VmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZTIgIT09IHByb3ApIHtcbiAgICAgICAgICBvbkNoYW5nZVJlZi5jdXJyZW50Py4odmFsdWUyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VW5jb250cm9sbGVkUHJvcChuZXh0VmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzQ29udHJvbGxlZCwgcHJvcCwgc2V0VW5jb250cm9sbGVkUHJvcCwgb25DaGFuZ2VSZWZdXG4gICk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlXTtcbn1cbmZ1bmN0aW9uIHVzZVVuY29udHJvbGxlZFN0YXRlKHtcbiAgZGVmYXVsdFByb3AsXG4gIG9uQ2hhbmdlXG59KSB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFByb3ApO1xuICBjb25zdCBwcmV2VmFsdWVSZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuICBjb25zdCBvbkNoYW5nZVJlZiA9IFJlYWN0LnVzZVJlZihvbkNoYW5nZSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdCgoKSA9PiB7XG4gICAgb25DaGFuZ2VSZWYuY3VycmVudCA9IG9uQ2hhbmdlO1xuICB9LCBbb25DaGFuZ2VdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldlZhbHVlUmVmLmN1cnJlbnQgIT09IHZhbHVlKSB7XG4gICAgICBvbkNoYW5nZVJlZi5jdXJyZW50Py4odmFsdWUpO1xuICAgICAgcHJldlZhbHVlUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgcHJldlZhbHVlUmVmXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlLCBvbkNoYW5nZVJlZl07XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLy8gc3JjL3VzZS1jb250cm9sbGFibGUtc3RhdGUtcmVkdWNlci50c3hcbmltcG9ydCAqIGFzIFJlYWN0MiBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUVmZmVjdEV2ZW50IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtZWZmZWN0LWV2ZW50XCI7XG52YXIgU1lOQ19TVEFURSA9IFN5bWJvbChcIlJBRElYOlNZTkNfU1RBVEVcIik7XG5mdW5jdGlvbiB1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXIocmVkdWNlciwgdXNlckFyZ3MsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgY29uc3QgeyBwcm9wOiBjb250cm9sbGVkU3RhdGUsIGRlZmF1bHRQcm9wLCBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLCBjYWxsZXIgfSA9IHVzZXJBcmdzO1xuICBjb25zdCBpc0NvbnRyb2xsZWQgPSBjb250cm9sbGVkU3RhdGUgIT09IHZvaWQgMDtcbiAgY29uc3Qgb25DaGFuZ2UgPSB1c2VFZmZlY3RFdmVudChvbkNoYW5nZVByb3ApO1xuICBpZiAodHJ1ZSkge1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZFJlZiA9IFJlYWN0Mi51c2VSZWYoY29udHJvbGxlZFN0YXRlICE9PSB2b2lkIDApO1xuICAgIFJlYWN0Mi51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgd2FzQ29udHJvbGxlZCA9IGlzQ29udHJvbGxlZFJlZi5jdXJyZW50O1xuICAgICAgaWYgKHdhc0NvbnRyb2xsZWQgIT09IGlzQ29udHJvbGxlZCkge1xuICAgICAgICBjb25zdCBmcm9tID0gd2FzQ29udHJvbGxlZCA/IFwiY29udHJvbGxlZFwiIDogXCJ1bmNvbnRyb2xsZWRcIjtcbiAgICAgICAgY29uc3QgdG8gPSBpc0NvbnRyb2xsZWQgPyBcImNvbnRyb2xsZWRcIiA6IFwidW5jb250cm9sbGVkXCI7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtjYWxsZXJ9IGlzIGNoYW5naW5nIGZyb20gJHtmcm9tfSB0byAke3RvfS4gQ29tcG9uZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB2YWx1ZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaXNDb250cm9sbGVkUmVmLmN1cnJlbnQgPSBpc0NvbnRyb2xsZWQ7XG4gICAgfSwgW2lzQ29udHJvbGxlZCwgY2FsbGVyXSk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFt7IC4uLmluaXRpYWxBcmcsIHN0YXRlOiBkZWZhdWx0UHJvcCB9XTtcbiAgaWYgKGluaXQpIHtcbiAgICBhcmdzLnB1c2goaW5pdCk7XG4gIH1cbiAgY29uc3QgW2ludGVybmFsU3RhdGUsIGRpc3BhdGNoXSA9IFJlYWN0Mi51c2VSZWR1Y2VyKFxuICAgIChzdGF0ZTIsIGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBTWU5DX1NUQVRFKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlMiwgc3RhdGU6IGFjdGlvbi5zdGF0ZSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dCA9IHJlZHVjZXIoc3RhdGUyLCBhY3Rpb24pO1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAmJiAhT2JqZWN0LmlzKG5leHQuc3RhdGUsIHN0YXRlMi5zdGF0ZSkpIHtcbiAgICAgICAgb25DaGFuZ2UobmV4dC5zdGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9LFxuICAgIC4uLmFyZ3NcbiAgKTtcbiAgY29uc3QgdW5jb250cm9sbGVkU3RhdGUgPSBpbnRlcm5hbFN0YXRlLnN0YXRlO1xuICBjb25zdCBwcmV2VmFsdWVSZWYgPSBSZWFjdDIudXNlUmVmKHVuY29udHJvbGxlZFN0YXRlKTtcbiAgUmVhY3QyLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByZXZWYWx1ZVJlZi5jdXJyZW50ICE9PSB1bmNvbnRyb2xsZWRTdGF0ZSkge1xuICAgICAgcHJldlZhbHVlUmVmLmN1cnJlbnQgPSB1bmNvbnRyb2xsZWRTdGF0ZTtcbiAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgIG9uQ2hhbmdlKHVuY29udHJvbGxlZFN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtvbkNoYW5nZSwgdW5jb250cm9sbGVkU3RhdGUsIHByZXZWYWx1ZVJlZiwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IHN0YXRlID0gUmVhY3QyLnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZDIgPSBjb250cm9sbGVkU3RhdGUgIT09IHZvaWQgMDtcbiAgICBpZiAoaXNDb250cm9sbGVkMikge1xuICAgICAgcmV0dXJuIHsgLi4uaW50ZXJuYWxTdGF0ZSwgc3RhdGU6IGNvbnRyb2xsZWRTdGF0ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJuYWxTdGF0ZTtcbiAgfSwgW2ludGVybmFsU3RhdGUsIGNvbnRyb2xsZWRTdGF0ZV0pO1xuICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDb250cm9sbGVkICYmICFPYmplY3QuaXMoY29udHJvbGxlZFN0YXRlLCBpbnRlcm5hbFN0YXRlLnN0YXRlKSkge1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiBTWU5DX1NUQVRFLCBzdGF0ZTogY29udHJvbGxlZFN0YXRlIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRyb2xsZWRTdGF0ZSwgaW50ZXJuYWxTdGF0ZS5zdGF0ZSwgaXNDb250cm9sbGVkXSk7XG4gIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoXTtcbn1cbmV4cG9ydCB7XG4gIHVzZUNvbnRyb2xsYWJsZVN0YXRlLFxuICB1c2VDb250cm9sbGFibGVTdGF0ZVJlZHVjZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCIvLyBzcmMvdmlzdWFsbHktaGlkZGVuLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZVwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgVklTVUFMTFlfSElEREVOX1NUWUxFUyA9IE9iamVjdC5mcmVlemUoe1xuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIGJvcmRlcjogMCxcbiAgd2lkdGg6IDEsXG4gIGhlaWdodDogMSxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAtMSxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIGNsaXA6IFwicmVjdCgwLCAwLCAwLCAwKVwiLFxuICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICB3b3JkV3JhcDogXCJub3JtYWxcIlxufSk7XG52YXIgTkFNRSA9IFwiVmlzdWFsbHlIaWRkZW5cIjtcbnZhciBWaXN1YWxseUhpZGRlbiA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuc3BhbixcbiAgICAgIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICBzdHlsZTogeyAuLi5WSVNVQUxMWV9ISURERU5fU1RZTEVTLCAuLi5wcm9wcy5zdHlsZSB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcblZpc3VhbGx5SGlkZGVuLmRpc3BsYXlOYW1lID0gTkFNRTtcbnZhciBSb290ID0gVmlzdWFsbHlIaWRkZW47XG5leHBvcnQge1xuICBSb290LFxuICBWSVNVQUxMWV9ISURERU5fU1RZTEVTLFxuICBWaXN1YWxseUhpZGRlblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdG9vbHRpcC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgRGlzbWlzc2FibGVMYXllciB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZGlzbWlzc2FibGUtbGF5ZXJcIjtcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1pZFwiO1xuaW1wb3J0ICogYXMgUG9wcGVyUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcG9wcGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXJTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcG9wcGVyXCI7XG5pbXBvcnQgeyBQb3J0YWwgYXMgUG9ydGFsUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3J0YWxcIjtcbmltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmVzZW5jZVwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3R0YWJsZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3Qtc2xvdFwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCAqIGFzIFZpc3VhbGx5SGlkZGVuUHJpbWl0aXZlIGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuXCI7XG5pbXBvcnQgeyBqc3gsIGpzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBbY3JlYXRlVG9vbHRpcENvbnRleHQsIGNyZWF0ZVRvb2x0aXBTY29wZV0gPSBjcmVhdGVDb250ZXh0U2NvcGUoXCJUb29sdGlwXCIsIFtcbiAgY3JlYXRlUG9wcGVyU2NvcGVcbl0pO1xudmFyIHVzZVBvcHBlclNjb3BlID0gY3JlYXRlUG9wcGVyU2NvcGUoKTtcbnZhciBQUk9WSURFUl9OQU1FID0gXCJUb29sdGlwUHJvdmlkZXJcIjtcbnZhciBERUZBVUxUX0RFTEFZX0RVUkFUSU9OID0gNzAwO1xudmFyIFRPT0xUSVBfT1BFTiA9IFwidG9vbHRpcC5vcGVuXCI7XG52YXIgW1Rvb2x0aXBQcm92aWRlckNvbnRleHRQcm92aWRlciwgdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dF0gPSBjcmVhdGVUb29sdGlwQ29udGV4dChQUk9WSURFUl9OQU1FKTtcbnZhciBUb29sdGlwUHJvdmlkZXIgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIF9fc2NvcGVUb29sdGlwLFxuICAgIGRlbGF5RHVyYXRpb24gPSBERUZBVUxUX0RFTEFZX0RVUkFUSU9OLFxuICAgIHNraXBEZWxheUR1cmF0aW9uID0gMzAwLFxuICAgIGRpc2FibGVIb3ZlcmFibGVDb250ZW50ID0gZmFsc2UsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBpc09wZW5EZWxheWVkUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICBjb25zdCBpc1BvaW50ZXJJblRyYW5zaXRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwRGVsYXlUaW1lclJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBza2lwRGVsYXlUaW1lciA9IHNraXBEZWxheVRpbWVyUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQoc2tpcERlbGF5VGltZXIpO1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFRvb2x0aXBQcm92aWRlckNvbnRleHRQcm92aWRlcixcbiAgICB7XG4gICAgICBzY29wZTogX19zY29wZVRvb2x0aXAsXG4gICAgICBpc09wZW5EZWxheWVkUmVmLFxuICAgICAgZGVsYXlEdXJhdGlvbixcbiAgICAgIG9uT3BlbjogUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNraXBEZWxheVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICBpc09wZW5EZWxheWVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0sIFtdKSxcbiAgICAgIG9uQ2xvc2U6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChza2lwRGVsYXlUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgc2tpcERlbGF5VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICAgICgpID0+IGlzT3BlbkRlbGF5ZWRSZWYuY3VycmVudCA9IHRydWUsXG4gICAgICAgICAgc2tpcERlbGF5RHVyYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH0sIFtza2lwRGVsYXlEdXJhdGlvbl0pLFxuICAgICAgaXNQb2ludGVySW5UcmFuc2l0UmVmLFxuICAgICAgb25Qb2ludGVySW5UcmFuc2l0Q2hhbmdlOiBSZWFjdC51c2VDYWxsYmFjaygoaW5UcmFuc2l0KSA9PiB7XG4gICAgICAgIGlzUG9pbnRlckluVHJhbnNpdFJlZi5jdXJyZW50ID0gaW5UcmFuc2l0O1xuICAgICAgfSwgW10pLFxuICAgICAgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQsXG4gICAgICBjaGlsZHJlblxuICAgIH1cbiAgKTtcbn07XG5Ub29sdGlwUHJvdmlkZXIuZGlzcGxheU5hbWUgPSBQUk9WSURFUl9OQU1FO1xudmFyIFRPT0xUSVBfTkFNRSA9IFwiVG9vbHRpcFwiO1xudmFyIFtUb29sdGlwQ29udGV4dFByb3ZpZGVyLCB1c2VUb29sdGlwQ29udGV4dF0gPSBjcmVhdGVUb29sdGlwQ29udGV4dChUT09MVElQX05BTUUpO1xudmFyIFRvb2x0aXAgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIF9fc2NvcGVUb29sdGlwLFxuICAgIGNoaWxkcmVuLFxuICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHRPcGVuLFxuICAgIG9uT3BlbkNoYW5nZSxcbiAgICBkaXNhYmxlSG92ZXJhYmxlQ29udGVudDogZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRQcm9wLFxuICAgIGRlbGF5RHVyYXRpb246IGRlbGF5RHVyYXRpb25Qcm9wXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJvdmlkZXJDb250ZXh0ID0gdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dChUT09MVElQX05BTUUsIHByb3BzLl9fc2NvcGVUb29sdGlwKTtcbiAgY29uc3QgcG9wcGVyU2NvcGUgPSB1c2VQb3BwZXJTY29wZShfX3Njb3BlVG9vbHRpcCk7XG4gIGNvbnN0IFt0cmlnZ2VyLCBzZXRUcmlnZ2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBjb250ZW50SWQgPSB1c2VJZCgpO1xuICBjb25zdCBvcGVuVGltZXJSZWYgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IGRpc2FibGVIb3ZlcmFibGVDb250ZW50ID0gZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRQcm9wID8/IHByb3ZpZGVyQ29udGV4dC5kaXNhYmxlSG92ZXJhYmxlQ29udGVudDtcbiAgY29uc3QgZGVsYXlEdXJhdGlvbiA9IGRlbGF5RHVyYXRpb25Qcm9wID8/IHByb3ZpZGVyQ29udGV4dC5kZWxheUR1cmF0aW9uO1xuICBjb25zdCB3YXNPcGVuRGVsYXllZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICBwcm9wOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0UHJvcDogZGVmYXVsdE9wZW4gPz8gZmFsc2UsXG4gICAgb25DaGFuZ2U6IChvcGVuMikgPT4ge1xuICAgICAgaWYgKG9wZW4yKSB7XG4gICAgICAgIHByb3ZpZGVyQ29udGV4dC5vbk9wZW4oKTtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoVE9PTFRJUF9PUEVOKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm92aWRlckNvbnRleHQub25DbG9zZSgpO1xuICAgICAgfVxuICAgICAgb25PcGVuQ2hhbmdlPy4ob3BlbjIpO1xuICAgIH0sXG4gICAgY2FsbGVyOiBUT09MVElQX05BTUVcbiAgfSk7XG4gIGNvbnN0IHN0YXRlQXR0cmlidXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW4gPyB3YXNPcGVuRGVsYXllZFJlZi5jdXJyZW50ID8gXCJkZWxheWVkLW9wZW5cIiA6IFwiaW5zdGFudC1vcGVuXCIgOiBcImNsb3NlZFwiO1xuICB9LCBbb3Blbl0pO1xuICBjb25zdCBoYW5kbGVPcGVuID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob3BlblRpbWVyUmVmLmN1cnJlbnQpO1xuICAgIG9wZW5UaW1lclJlZi5jdXJyZW50ID0gMDtcbiAgICB3YXNPcGVuRGVsYXllZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgfSwgW3NldE9wZW5dKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dChvcGVuVGltZXJSZWYuY3VycmVudCk7XG4gICAgb3BlblRpbWVyUmVmLmN1cnJlbnQgPSAwO1xuICAgIHNldE9wZW4oZmFsc2UpO1xuICB9LCBbc2V0T3Blbl0pO1xuICBjb25zdCBoYW5kbGVEZWxheWVkT3BlbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9wZW5UaW1lclJlZi5jdXJyZW50KTtcbiAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdhc09wZW5EZWxheWVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgIG9wZW5UaW1lclJlZi5jdXJyZW50ID0gMDtcbiAgICB9LCBkZWxheUR1cmF0aW9uKTtcbiAgfSwgW2RlbGF5RHVyYXRpb24sIHNldE9wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG9wZW5UaW1lclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob3BlblRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IDA7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQb3BwZXJQcmltaXRpdmUuUm9vdCwgeyAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgVG9vbHRpcENvbnRleHRQcm92aWRlcixcbiAgICB7XG4gICAgICBzY29wZTogX19zY29wZVRvb2x0aXAsXG4gICAgICBjb250ZW50SWQsXG4gICAgICBvcGVuLFxuICAgICAgc3RhdGVBdHRyaWJ1dGUsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyQ2hhbmdlOiBzZXRUcmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyRW50ZXI6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHByb3ZpZGVyQ29udGV4dC5pc09wZW5EZWxheWVkUmVmLmN1cnJlbnQpIGhhbmRsZURlbGF5ZWRPcGVuKCk7XG4gICAgICAgIGVsc2UgaGFuZGxlT3BlbigpO1xuICAgICAgfSwgW3Byb3ZpZGVyQ29udGV4dC5pc09wZW5EZWxheWVkUmVmLCBoYW5kbGVEZWxheWVkT3BlbiwgaGFuZGxlT3Blbl0pLFxuICAgICAgb25UcmlnZ2VyTGVhdmU6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKGRpc2FibGVIb3ZlcmFibGVDb250ZW50KSB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9wZW5UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICBvcGVuVGltZXJSZWYuY3VycmVudCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0sIFtoYW5kbGVDbG9zZSwgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnRdKSxcbiAgICAgIG9uT3BlbjogaGFuZGxlT3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgZGlzYWJsZUhvdmVyYWJsZUNvbnRlbnQsXG4gICAgICBjaGlsZHJlblxuICAgIH1cbiAgKSB9KTtcbn07XG5Ub29sdGlwLmRpc3BsYXlOYW1lID0gVE9PTFRJUF9OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiVG9vbHRpcFRyaWdnZXJcIjtcbnZhciBUb29sdGlwVHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlVG9vbHRpcCwgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoVFJJR0dFUl9OQU1FLCBfX3Njb3BlVG9vbHRpcCk7XG4gICAgY29uc3QgcHJvdmlkZXJDb250ZXh0ID0gdXNlVG9vbHRpcFByb3ZpZGVyQ29udGV4dChUUklHR0VSX05BTUUsIF9fc2NvcGVUb29sdGlwKTtcbiAgICBjb25zdCBwb3BwZXJTY29wZSA9IHVzZVBvcHBlclNjb3BlKF9fc2NvcGVUb29sdGlwKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgcmVmLCBjb250ZXh0Lm9uVHJpZ2dlckNoYW5nZSk7XG4gICAgY29uc3QgaXNQb2ludGVyRG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgaGFzUG9pbnRlck1vdmVPcGVuZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGlzUG9pbnRlckRvd25SZWYuY3VycmVudCA9IGZhbHNlLCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgfSwgW2hhbmRsZVBvaW50ZXJVcF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BbmNob3IsIHsgYXNDaGlsZDogdHJ1ZSwgLi4ucG9wcGVyU2NvcGUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmJ1dHRvbixcbiAgICAgIHtcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGNvbnRleHQub3BlbiA/IGNvbnRleHQuY29udGVudElkIDogdm9pZCAwLFxuICAgICAgICBcImRhdGEtc3RhdGVcIjogY29udGV4dC5zdGF0ZUF0dHJpYnV0ZSxcbiAgICAgICAgLi4udHJpZ2dlclByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgb25Qb2ludGVyTW92ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25Qb2ludGVyTW92ZSwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIpIHJldHVybjtcbiAgICAgICAgICBpZiAoIWhhc1BvaW50ZXJNb3ZlT3BlbmVkUmVmLmN1cnJlbnQgJiYgIXByb3ZpZGVyQ29udGV4dC5pc1BvaW50ZXJJblRyYW5zaXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY29udGV4dC5vblRyaWdnZXJFbnRlcigpO1xuICAgICAgICAgICAgaGFzUG9pbnRlck1vdmVPcGVuZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgb25Qb2ludGVyTGVhdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uUG9pbnRlckxlYXZlLCAoKSA9PiB7XG4gICAgICAgICAgY29udGV4dC5vblRyaWdnZXJMZWF2ZSgpO1xuICAgICAgICAgIGhhc1BvaW50ZXJNb3ZlT3BlbmVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICAgIG9uUG9pbnRlckRvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uUG9pbnRlckRvd24sICgpID0+IHtcbiAgICAgICAgICBpZiAoY29udGV4dC5vcGVuKSB7XG4gICAgICAgICAgICBjb250ZXh0Lm9uQ2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNQb2ludGVyRG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgb25Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25Gb2N1cywgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNQb2ludGVyRG93blJlZi5jdXJyZW50KSBjb250ZXh0Lm9uT3BlbigpO1xuICAgICAgICB9KSxcbiAgICAgICAgb25CbHVyOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkJsdXIsIGNvbnRleHQub25DbG9zZSksXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uQ2xpY2ssIGNvbnRleHQub25DbG9zZSlcbiAgICAgIH1cbiAgICApIH0pO1xuICB9XG4pO1xuVG9vbHRpcFRyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgUE9SVEFMX05BTUUgPSBcIlRvb2x0aXBQb3J0YWxcIjtcbnZhciBbUG9ydGFsUHJvdmlkZXIsIHVzZVBvcnRhbENvbnRleHRdID0gY3JlYXRlVG9vbHRpcENvbnRleHQoUE9SVEFMX05BTUUsIHtcbiAgZm9yY2VNb3VudDogdm9pZCAwXG59KTtcbnZhciBUb29sdGlwUG9ydGFsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgX19zY29wZVRvb2x0aXAsIGZvcmNlTW91bnQsIGNoaWxkcmVuLCBjb250YWluZXIgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoUE9SVEFMX05BTUUsIF9fc2NvcGVUb29sdGlwKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJvdmlkZXIsIHsgc2NvcGU6IF9fc2NvcGVUb29sdGlwLCBmb3JjZU1vdW50LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJpbWl0aXZlLCB7IGFzQ2hpbGQ6IHRydWUsIGNvbnRhaW5lciwgY2hpbGRyZW4gfSkgfSkgfSk7XG59O1xuVG9vbHRpcFBvcnRhbC5kaXNwbGF5TmFtZSA9IFBPUlRBTF9OQU1FO1xudmFyIENPTlRFTlRfTkFNRSA9IFwiVG9vbHRpcENvbnRlbnRcIjtcbnZhciBUb29sdGlwQ29udGVudCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgcG9ydGFsQ29udGV4dCA9IHVzZVBvcnRhbENvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlVG9vbHRpcCk7XG4gICAgY29uc3QgeyBmb3JjZU1vdW50ID0gcG9ydGFsQ29udGV4dC5mb3JjZU1vdW50LCBzaWRlID0gXCJ0b3BcIiwgLi4uY29udGVudFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlVG9vbHRpcENvbnRleHQoQ09OVEVOVF9OQU1FLCBwcm9wcy5fX3Njb3BlVG9vbHRpcCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJlc2VuY2UsIHsgcHJlc2VudDogZm9yY2VNb3VudCB8fCBjb250ZXh0Lm9wZW4sIGNoaWxkcmVuOiBjb250ZXh0LmRpc2FibGVIb3ZlcmFibGVDb250ZW50ID8gLyogQF9fUFVSRV9fICovIGpzeChUb29sdGlwQ29udGVudEltcGwsIHsgc2lkZSwgLi4uY29udGVudFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goVG9vbHRpcENvbnRlbnRIb3ZlcmFibGUsIHsgc2lkZSwgLi4uY29udGVudFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KSB9KTtcbiAgfVxuKTtcbnZhciBUb29sdGlwQ29udGVudEhvdmVyYWJsZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZVRvb2x0aXBDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVRvb2x0aXApO1xuICBjb25zdCBwcm92aWRlckNvbnRleHQgPSB1c2VUb29sdGlwUHJvdmlkZXJDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVRvb2x0aXApO1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHJlZik7XG4gIGNvbnN0IFtwb2ludGVyR3JhY2VBcmVhLCBzZXRQb2ludGVyR3JhY2VBcmVhXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHRyaWdnZXIsIG9uQ2xvc2UgfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGNvbnRlbnQgPSByZWYuY3VycmVudDtcbiAgY29uc3QgeyBvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2UgfSA9IHByb3ZpZGVyQ29udGV4dDtcbiAgY29uc3QgaGFuZGxlUmVtb3ZlR3JhY2VBcmVhID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFBvaW50ZXJHcmFjZUFyZWEobnVsbCk7XG4gICAgb25Qb2ludGVySW5UcmFuc2l0Q2hhbmdlKGZhbHNlKTtcbiAgfSwgW29uUG9pbnRlckluVHJhbnNpdENoYW5nZV0pO1xuICBjb25zdCBoYW5kbGVDcmVhdGVHcmFjZUFyZWEgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQsIGhvdmVyVGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIGNvbnN0IGV4aXRQb2ludCA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9O1xuICAgICAgY29uc3QgZXhpdFNpZGUgPSBnZXRFeGl0U2lkZUZyb21SZWN0KGV4aXRQb2ludCwgY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICBjb25zdCBwYWRkZWRFeGl0UG9pbnRzID0gZ2V0UGFkZGVkRXhpdFBvaW50cyhleGl0UG9pbnQsIGV4aXRTaWRlKTtcbiAgICAgIGNvbnN0IGhvdmVyVGFyZ2V0UG9pbnRzID0gZ2V0UG9pbnRzRnJvbVJlY3QoaG92ZXJUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgY29uc3QgZ3JhY2VBcmVhID0gZ2V0SHVsbChbLi4ucGFkZGVkRXhpdFBvaW50cywgLi4uaG92ZXJUYXJnZXRQb2ludHNdKTtcbiAgICAgIHNldFBvaW50ZXJHcmFjZUFyZWEoZ3JhY2VBcmVhKTtcbiAgICAgIG9uUG9pbnRlckluVHJhbnNpdENoYW5nZSh0cnVlKTtcbiAgICB9LFxuICAgIFtvblBvaW50ZXJJblRyYW5zaXRDaGFuZ2VdXG4gICk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IGhhbmRsZVJlbW92ZUdyYWNlQXJlYSgpO1xuICB9LCBbaGFuZGxlUmVtb3ZlR3JhY2VBcmVhXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRyaWdnZXIgJiYgY29udGVudCkge1xuICAgICAgY29uc3QgaGFuZGxlVHJpZ2dlckxlYXZlID0gKGV2ZW50KSA9PiBoYW5kbGVDcmVhdGVHcmFjZUFyZWEoZXZlbnQsIGNvbnRlbnQpO1xuICAgICAgY29uc3QgaGFuZGxlQ29udGVudExlYXZlID0gKGV2ZW50KSA9PiBoYW5kbGVDcmVhdGVHcmFjZUFyZWEoZXZlbnQsIHRyaWdnZXIpO1xuICAgICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmxlYXZlXCIsIGhhbmRsZVRyaWdnZXJMZWF2ZSk7XG4gICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgaGFuZGxlQ29udGVudExlYXZlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyTGVhdmUpO1xuICAgICAgICBjb250ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgaGFuZGxlQ29udGVudExlYXZlKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbdHJpZ2dlciwgY29udGVudCwgaGFuZGxlQ3JlYXRlR3JhY2VBcmVhLCBoYW5kbGVSZW1vdmVHcmFjZUFyZWFdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocG9pbnRlckdyYWNlQXJlYSkge1xuICAgICAgY29uc3QgaGFuZGxlVHJhY2tQb2ludGVyR3JhY2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBwb2ludGVyUG9zaXRpb24gPSB7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfTtcbiAgICAgICAgY29uc3QgaGFzRW50ZXJlZFRhcmdldCA9IHRyaWdnZXI/LmNvbnRhaW5zKHRhcmdldCkgfHwgY29udGVudD8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgY29uc3QgaXNQb2ludGVyT3V0c2lkZUdyYWNlQXJlYSA9ICFpc1BvaW50SW5Qb2x5Z29uKHBvaW50ZXJQb3NpdGlvbiwgcG9pbnRlckdyYWNlQXJlYSk7XG4gICAgICAgIGlmIChoYXNFbnRlcmVkVGFyZ2V0KSB7XG4gICAgICAgICAgaGFuZGxlUmVtb3ZlR3JhY2VBcmVhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQb2ludGVyT3V0c2lkZUdyYWNlQXJlYSkge1xuICAgICAgICAgIGhhbmRsZVJlbW92ZUdyYWNlQXJlYSgpO1xuICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBoYW5kbGVUcmFja1BvaW50ZXJHcmFjZSk7XG4gICAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIGhhbmRsZVRyYWNrUG9pbnRlckdyYWNlKTtcbiAgICB9XG4gIH0sIFt0cmlnZ2VyLCBjb250ZW50LCBwb2ludGVyR3JhY2VBcmVhLCBvbkNsb3NlLCBoYW5kbGVSZW1vdmVHcmFjZUFyZWFdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goVG9vbHRpcENvbnRlbnRJbXBsLCB7IC4uLnByb3BzLCByZWY6IGNvbXBvc2VkUmVmcyB9KTtcbn0pO1xudmFyIFtWaXN1YWxseUhpZGRlbkNvbnRlbnRDb250ZXh0UHJvdmlkZXIsIHVzZVZpc3VhbGx5SGlkZGVuQ29udGVudENvbnRleHRdID0gY3JlYXRlVG9vbHRpcENvbnRleHQoVE9PTFRJUF9OQU1FLCB7IGlzSW5zaWRlOiBmYWxzZSB9KTtcbnZhciBTbG90dGFibGUgPSBjcmVhdGVTbG90dGFibGUoXCJUb29sdGlwQ29udGVudFwiKTtcbnZhciBUb29sdGlwQ29udGVudEltcGwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIF9fc2NvcGVUb29sdGlwLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgb25Fc2NhcGVLZXlEb3duLFxuICAgICAgb25Qb2ludGVyRG93bk91dHNpZGUsXG4gICAgICAuLi5jb250ZW50UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZVRvb2x0aXBDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHsgb25DbG9zZSB9ID0gY29udGV4dDtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUT09MVElQX09QRU4sIG9uQ2xvc2UpO1xuICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVE9PTFRJUF9PUEVOLCBvbkNsb3NlKTtcbiAgICB9LCBbb25DbG9zZV0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC50cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICBpZiAodGFyZ2V0Py5jb250YWlucyhjb250ZXh0LnRyaWdnZXIpKSBvbkNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSwgW2NvbnRleHQudHJpZ2dlciwgb25DbG9zZV0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgRGlzbWlzc2FibGVMYXllcixcbiAgICAgIHtcbiAgICAgICAgYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgICAgb25Fc2NhcGVLZXlEb3duLFxuICAgICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgICAgb25Gb2N1c091dHNpZGU6IChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgb25EaXNtaXNzOiBvbkNsb3NlLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeHMoXG4gICAgICAgICAgUG9wcGVyUHJpbWl0aXZlLkNvbnRlbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGNvbnRleHQuc3RhdGVBdHRyaWJ1dGUsXG4gICAgICAgICAgICAuLi5wb3BwZXJTY29wZSxcbiAgICAgICAgICAgIC4uLmNvbnRlbnRQcm9wcyxcbiAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLnN0eWxlLFxuICAgICAgICAgICAgICAvLyByZS1uYW1lc3BhY2UgZXhwb3NlZCBjb250ZW50IGN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBcIi0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW5cIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilcIixcbiAgICAgICAgICAgICAgICBcIi0tcmFkaXgtdG9vbHRpcC1jb250ZW50LWF2YWlsYWJsZS13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0XCI6IFwidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtdHJpZ2dlci13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpXCIsXG4gICAgICAgICAgICAgICAgXCItLXJhZGl4LXRvb2x0aXAtdHJpZ2dlci1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodClcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGpzeChTbG90dGFibGUsIHsgY2hpbGRyZW4gfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goVmlzdWFsbHlIaWRkZW5Db250ZW50Q29udGV4dFByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlVG9vbHRpcCwgaXNJbnNpZGU6IHRydWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFZpc3VhbGx5SGlkZGVuUHJpbWl0aXZlLlJvb3QsIHsgaWQ6IGNvbnRleHQuY29udGVudElkLCByb2xlOiBcInRvb2x0aXBcIiwgY2hpbGRyZW46IGFyaWFMYWJlbCB8fCBjaGlsZHJlbiB9KSB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5Ub29sdGlwQ29udGVudC5kaXNwbGF5TmFtZSA9IENPTlRFTlRfTkFNRTtcbnZhciBBUlJPV19OQU1FID0gXCJUb29sdGlwQXJyb3dcIjtcbnZhciBUb29sdGlwQXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVRvb2x0aXAsIC4uLmFycm93UHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVRvb2x0aXApO1xuICAgIGNvbnN0IHZpc3VhbGx5SGlkZGVuQ29udGVudENvbnRleHQgPSB1c2VWaXN1YWxseUhpZGRlbkNvbnRlbnRDb250ZXh0KFxuICAgICAgQVJST1dfTkFNRSxcbiAgICAgIF9fc2NvcGVUb29sdGlwXG4gICAgKTtcbiAgICByZXR1cm4gdmlzdWFsbHlIaWRkZW5Db250ZW50Q29udGV4dC5pc0luc2lkZSA/IG51bGwgOiAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BcnJvdywgeyAuLi5wb3BwZXJTY29wZSwgLi4uYXJyb3dQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSk7XG4gIH1cbik7XG5Ub29sdGlwQXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xuZnVuY3Rpb24gZ2V0RXhpdFNpZGVGcm9tUmVjdChwb2ludCwgcmVjdCkge1xuICBjb25zdCB0b3AgPSBNYXRoLmFicyhyZWN0LnRvcCAtIHBvaW50LnkpO1xuICBjb25zdCBib3R0b20gPSBNYXRoLmFicyhyZWN0LmJvdHRvbSAtIHBvaW50LnkpO1xuICBjb25zdCByaWdodCA9IE1hdGguYWJzKHJlY3QucmlnaHQgLSBwb2ludC54KTtcbiAgY29uc3QgbGVmdCA9IE1hdGguYWJzKHJlY3QubGVmdCAtIHBvaW50LngpO1xuICBzd2l0Y2ggKE1hdGgubWluKHRvcCwgYm90dG9tLCByaWdodCwgbGVmdCkpIHtcbiAgICBjYXNlIGxlZnQ6XG4gICAgICByZXR1cm4gXCJsZWZ0XCI7XG4gICAgY2FzZSByaWdodDpcbiAgICAgIHJldHVybiBcInJpZ2h0XCI7XG4gICAgY2FzZSB0b3A6XG4gICAgICByZXR1cm4gXCJ0b3BcIjtcbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIHJldHVybiBcImJvdHRvbVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnJlYWNoYWJsZVwiKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UGFkZGVkRXhpdFBvaW50cyhleGl0UG9pbnQsIGV4aXRTaWRlLCBwYWRkaW5nID0gNSkge1xuICBjb25zdCBwYWRkZWRFeGl0UG9pbnRzID0gW107XG4gIHN3aXRjaCAoZXhpdFNpZGUpIHtcbiAgICBjYXNlIFwidG9wXCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggLSBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSArIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCArIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgcGFkZGVkRXhpdFBvaW50cy5wdXNoKFxuICAgICAgICB7IHg6IGV4aXRQb2ludC54IC0gcGFkZGluZywgeTogZXhpdFBvaW50LnkgLSBwYWRkaW5nIH0sXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggKyBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggKyBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCArIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICBwYWRkZWRFeGl0UG9pbnRzLnB1c2goXG4gICAgICAgIHsgeDogZXhpdFBvaW50LnggLSBwYWRkaW5nLCB5OiBleGl0UG9pbnQueSAtIHBhZGRpbmcgfSxcbiAgICAgICAgeyB4OiBleGl0UG9pbnQueCAtIHBhZGRpbmcsIHk6IGV4aXRQb2ludC55ICsgcGFkZGluZyB9XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHBhZGRlZEV4aXRQb2ludHM7XG59XG5mdW5jdGlvbiBnZXRQb2ludHNGcm9tUmVjdChyZWN0KSB7XG4gIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSByZWN0O1xuICByZXR1cm4gW1xuICAgIHsgeDogbGVmdCwgeTogdG9wIH0sXG4gICAgeyB4OiByaWdodCwgeTogdG9wIH0sXG4gICAgeyB4OiByaWdodCwgeTogYm90dG9tIH0sXG4gICAgeyB4OiBsZWZ0LCB5OiBib3R0b20gfVxuICBdO1xufVxuZnVuY3Rpb24gaXNQb2ludEluUG9seWdvbihwb2ludCwgcG9seWdvbikge1xuICBjb25zdCB7IHgsIHkgfSA9IHBvaW50O1xuICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwLCBqID0gcG9seWdvbi5sZW5ndGggLSAxOyBpIDwgcG9seWdvbi5sZW5ndGg7IGogPSBpKyspIHtcbiAgICBjb25zdCBpaSA9IHBvbHlnb25baV07XG4gICAgY29uc3QgamogPSBwb2x5Z29uW2pdO1xuICAgIGNvbnN0IHhpID0gaWkueDtcbiAgICBjb25zdCB5aSA9IGlpLnk7XG4gICAgY29uc3QgeGogPSBqai54O1xuICAgIGNvbnN0IHlqID0gamoueTtcbiAgICBjb25zdCBpbnRlcnNlY3QgPSB5aSA+IHkgIT09IHlqID4geSAmJiB4IDwgKHhqIC0geGkpICogKHkgLSB5aSkgLyAoeWogLSB5aSkgKyB4aTtcbiAgICBpZiAoaW50ZXJzZWN0KSBpbnNpZGUgPSAhaW5zaWRlO1xuICB9XG4gIHJldHVybiBpbnNpZGU7XG59XG5mdW5jdGlvbiBnZXRIdWxsKHBvaW50cykge1xuICBjb25zdCBuZXdQb2ludHMgPSBwb2ludHMuc2xpY2UoKTtcbiAgbmV3UG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS54IDwgYi54KSByZXR1cm4gLTE7XG4gICAgZWxzZSBpZiAoYS54ID4gYi54KSByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChhLnkgPCBiLnkpIHJldHVybiAtMTtcbiAgICBlbHNlIGlmIChhLnkgPiBiLnkpIHJldHVybiAxO1xuICAgIGVsc2UgcmV0dXJuIDA7XG4gIH0pO1xuICByZXR1cm4gZ2V0SHVsbFByZXNvcnRlZChuZXdQb2ludHMpO1xufVxuZnVuY3Rpb24gZ2V0SHVsbFByZXNvcnRlZChwb2ludHMpIHtcbiAgaWYgKHBvaW50cy5sZW5ndGggPD0gMSkgcmV0dXJuIHBvaW50cy5zbGljZSgpO1xuICBjb25zdCB1cHBlckh1bGwgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgIHdoaWxlICh1cHBlckh1bGwubGVuZ3RoID49IDIpIHtcbiAgICAgIGNvbnN0IHEgPSB1cHBlckh1bGxbdXBwZXJIdWxsLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgciA9IHVwcGVySHVsbFt1cHBlckh1bGwubGVuZ3RoIC0gMl07XG4gICAgICBpZiAoKHEueCAtIHIueCkgKiAocC55IC0gci55KSA+PSAocS55IC0gci55KSAqIChwLnggLSByLngpKSB1cHBlckh1bGwucG9wKCk7XG4gICAgICBlbHNlIGJyZWFrO1xuICAgIH1cbiAgICB1cHBlckh1bGwucHVzaChwKTtcbiAgfVxuICB1cHBlckh1bGwucG9wKCk7XG4gIGNvbnN0IGxvd2VySHVsbCA9IFtdO1xuICBmb3IgKGxldCBpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICB3aGlsZSAobG93ZXJIdWxsLmxlbmd0aCA+PSAyKSB7XG4gICAgICBjb25zdCBxID0gbG93ZXJIdWxsW2xvd2VySHVsbC5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHIgPSBsb3dlckh1bGxbbG93ZXJIdWxsLmxlbmd0aCAtIDJdO1xuICAgICAgaWYgKChxLnggLSByLngpICogKHAueSAtIHIueSkgPj0gKHEueSAtIHIueSkgKiAocC54IC0gci54KSkgbG93ZXJIdWxsLnBvcCgpO1xuICAgICAgZWxzZSBicmVhaztcbiAgICB9XG4gICAgbG93ZXJIdWxsLnB1c2gocCk7XG4gIH1cbiAgbG93ZXJIdWxsLnBvcCgpO1xuICBpZiAodXBwZXJIdWxsLmxlbmd0aCA9PT0gMSAmJiBsb3dlckh1bGwubGVuZ3RoID09PSAxICYmIHVwcGVySHVsbFswXS54ID09PSBsb3dlckh1bGxbMF0ueCAmJiB1cHBlckh1bGxbMF0ueSA9PT0gbG93ZXJIdWxsWzBdLnkpIHtcbiAgICByZXR1cm4gdXBwZXJIdWxsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cHBlckh1bGwuY29uY2F0KGxvd2VySHVsbCk7XG4gIH1cbn1cbnZhciBQcm92aWRlciA9IFRvb2x0aXBQcm92aWRlcjtcbnZhciBSb290MyA9IFRvb2x0aXA7XG52YXIgVHJpZ2dlciA9IFRvb2x0aXBUcmlnZ2VyO1xudmFyIFBvcnRhbCA9IFRvb2x0aXBQb3J0YWw7XG52YXIgQ29udGVudDIgPSBUb29sdGlwQ29udGVudDtcbnZhciBBcnJvdzIgPSBUb29sdGlwQXJyb3c7XG5leHBvcnQge1xuICBBcnJvdzIgYXMgQXJyb3csXG4gIENvbnRlbnQyIGFzIENvbnRlbnQsXG4gIFBvcnRhbCxcbiAgUHJvdmlkZXIsXG4gIFJvb3QzIGFzIFJvb3QsXG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBBcnJvdyxcbiAgVG9vbHRpcENvbnRlbnQsXG4gIFRvb2x0aXBQb3J0YWwsXG4gIFRvb2x0aXBQcm92aWRlcixcbiAgVG9vbHRpcFRyaWdnZXIsXG4gIFRyaWdnZXIsXG4gIGNyZWF0ZVRvb2x0aXBTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ3JhZGl4LXVpJztcbnZhciBUb29sdGlwUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gKF9qc3goVG9vbHRpcC5Qcm92aWRlciwgeyBjaGlsZHJlbjogX2pzeChUb29sdGlwLlJvb3QsIF9fYXNzaWduKHt9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKSB9KSk7XG59O1xudmFyIFRvb2x0aXBUcmlnZ2VyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgcmV0dXJuIChfanN4KFRvb2x0aXAuVHJpZ2dlciwgX19hc3NpZ24oeyBjbGFzc05hbWU6ICdudXJpLXRoZW1lIHRvb2x0aXAtdHJpZ2dlciB0cmlnZ2VyJyB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRvb2x0aXBDb250ZW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIF9hID0gcHJvcHMuZGlyZWN0aW9uLCBkaXJlY3Rpb24gPSBfYSA9PT0gdm9pZCAwID8gJ2JvdHRvbScgOiBfYSwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZGlyZWN0aW9uXCIsIFwiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goVG9vbHRpcC5Qb3J0YWwsIHsgY2hpbGRyZW46IF9qc3goVG9vbHRpcC5Db250ZW50LCBfX2Fzc2lnbih7IHNpZGU6IGRpcmVjdGlvbiwgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS10b29sdGlwIGNvbnRlbnQgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkgfSkpO1xufTtcblRvb2x0aXBSb290LlRyaWdnZXIgPSBUb29sdGlwVHJpZ2dlcjtcblRvb2x0aXBSb290LkNvbnRlbnQgPSBUb29sdGlwQ29udGVudDtcbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBSb290O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBkaXJlY3Rpb24gPSBbJ3RvcCcsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCddO1xuZXhwb3J0IHZhciBjb21tb25Ub29sdGlwUHJvcHMgPSB7fTtcbmV4cG9ydCB2YXIgdG9vbHRpcENvbnRlbnRQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25Ub29sdGlwUHJvcHMpLCB7IGRpcmVjdGlvbjoge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnZGlyZWN0aW9uJyxcbiAgICAgICAgdmFsdWVzOiBkaXJlY3Rpb24sXG4gICAgICAgIGRlZmF1bHQ6ICdib3R0b20nLFxuICAgIH0gfSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwUm9vdCBmcm9tICcuL2Jhc2UtdG9vbHRpcCc7XG5pbXBvcnQgeyB0b29sdGlwQ29udGVudFByb3BzIH0gZnJvbSAnLi90b29sdGlwLXByb3BzJztcbnZhciBUb29sdGlwID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIHRyaWdnZXIgPSBwcm9wcy50cmlnZ2VyLCBjb250ZW50ID0gcHJvcHMuY29udGVudCwgX2EgPSBwcm9wcy5kaXJlY3Rpb24sIGRpcmVjdGlvbiA9IF9hID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF9hLCBfYiA9IHByb3BzLmRlbGF5RHVyYXRpb24sIGRlbGF5RHVyYXRpb24gPSBfYiA9PT0gdm9pZCAwID8gMTAwIDogX2IsIHJlc3RQcm9wcyA9IF9fcmVzdChwcm9wcywgW1widHJpZ2dlclwiLCBcImNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJkZWxheUR1cmF0aW9uXCJdKTtcbiAgICB2YXIgY29udGVudENsYXNzTmFtZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCB0b29sdGlwQ29udGVudFByb3BzKS5jbGFzc05hbWU7XG4gICAgcmV0dXJuIChfanN4cyhUb29sdGlwUm9vdCwgX19hc3NpZ24oeyBkZWxheUR1cmF0aW9uOiBkZWxheUR1cmF0aW9uLCBkaXNhYmxlSG92ZXJhYmxlQ29udGVudDogdHJ1ZSB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtfanN4KFRvb2x0aXBSb290LlRyaWdnZXIsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IHRyaWdnZXIgfSksIF9qc3goVG9vbHRpcFJvb3QuQ29udGVudCwgeyBkaXJlY3Rpb246IGRpcmVjdGlvbiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGNvbnRlbnRDbGFzc05hbWUsICd0b29sdGlwLWNvbnRlbnQnKSwgY2hpbGRyZW46IGNvbnRlbnQgfSldIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuLi8uLi9zdHlsZXMvdG9rZW4vY29sb3JzJztcbmV4cG9ydCB2YXIgc2l6ZSA9IFsnbCcsICdtJywgJ3InLCAncycsICdzbScsICd4cyddO1xudmFyIGNvbW1vbkJhZGdlUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ2wnLFxuICAgIH0sXG4gICAgYm9yZGVyQ29sb3I6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgdmFsdWVzOiBPYmplY3Qua2V5cyhjb2xvcnMpLFxuICAgICAgICBkZWZhdWx0OiAndHJhbnNwYXJlbnQnLFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgdmFsdWVzOiBPYmplY3Qua2V5cyhjb2xvcnMpLFxuICAgICAgICBkZWZhdWx0OiAnYmxhY2snLFxuICAgIH0sXG4gICAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgICAgIHR5cGU6ICdjc3MnLFxuICAgICAgICBrZXk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgICB2YWx1ZXM6IE9iamVjdC5rZXlzKGNvbG9ycyksXG4gICAgICAgIGRlZmF1bHQ6ICd3aGl0ZScsXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgICB0eXBlOiAnY3NzJyxcbiAgICAgICAga2V5OiAnd2lkdGgnLFxuICAgICAgICBkZWZhdWx0OiAnMTAwJScsXG4gICAgfSxcbn07XG5leHBvcnQgdmFyIGljb25UZXh0QmFkZ2VQcm9wcyA9IF9fYXNzaWduKHt9LCBjb21tb25CYWRnZVByb3BzKTtcbmV4cG9ydCB2YXIgaWNvblRleHRPcHRpb25CYWRnZVByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkJhZGdlUHJvcHMpO1xuZXhwb3J0IHZhciBvcHRpb25CYWRnZVByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkJhZGdlUHJvcHMpO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvZGlzdC9janMuanMhLi9iYWRnZS1zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vYmFkZ2Utc3R5bGUuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBGcmFnbWVudCBhcyBfRnJhZ21lbnQgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBvcHRpb25CYWRnZVByb3BzIH0gZnJvbSAnLi9iYWRnZS1wcm9wcyc7XG5pbXBvcnQgeyBCYXNlQmFkZ2UgfSBmcm9tICcuL2Jhc2UtYmFkZ2UnO1xuaW1wb3J0ICcuL2JhZGdlLXN0eWxlLmNzcyc7XG52YXIgT3B0aW9uQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIG9wdGlvbkJhZGdlUHJvcHMpLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIG9wdGlvbiA9IF9hLm9wdGlvbiwgdG9vbHRpcCA9IF9hLnRvb2x0aXAsIHJlc3RQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwib3B0aW9uXCIsIFwidG9vbHRpcFwiXSk7XG4gICAgdmFyIGJhZGdlQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsICdvcHRpb24nKTtcbiAgICByZXR1cm4gdG9vbHRpcCA/IChfanN4KFRvb2x0aXAsIHsgdHJpZ2dlcjogX2pzeChCYXNlQmFkZ2UsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogYmFkZ2VDbGFzc05hbWUgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBvcHRpb24gfSkgfSkpLCBjb250ZW50OiBfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogdG9vbHRpcC5jb250ZW50IH0pLCBkaXJlY3Rpb246IHRvb2x0aXAucG9zaXRpb24sIGRlbGF5RHVyYXRpb246IHRvb2x0aXAuZGVsYXlEdXJhdGlvbiB9KSkgOiAoX2pzeChCYXNlQmFkZ2UsIF9fYXNzaWduKHsgcmVmOiByZWYsIGNsYXNzTmFtZTogYmFkZ2VDbGFzc05hbWUgfSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiBvcHRpb24gfSkgfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgT3B0aW9uQmFkZ2U7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBpY29uVGV4dEJhZGdlUHJvcHMgfSBmcm9tICcuL2JhZGdlLXByb3BzJztcbmltcG9ydCB7IEJhc2VCYWRnZSB9IGZyb20gJy4vYmFzZS1iYWRnZSc7XG52YXIgSWNvblRleHRCYWRnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgaWNvblRleHRCYWRnZVByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBpY29uID0gX2EuaWNvbiwgdGV4dCA9IF9hLnRleHQsIHRvb2x0aXAgPSBfYS50b29sdGlwLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiLCBcImljb25cIiwgXCJ0ZXh0XCIsIFwidG9vbHRpcFwiXSk7XG4gICAgdmFyIGJhZGdlQ2xhc3NOYW1lID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsICdpY29uLXRleHQnKTtcbiAgICByZXR1cm4gdG9vbHRpcCA/IChfanN4KFRvb2x0aXAsIHsgdHJpZ2dlcjogX2pzeHMoQmFzZUJhZGdlLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IGJhZGdlQ2xhc3NOYW1lIH0sIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogW2ljb24sIF9qc3goXCJzcGFuXCIsIHsgY2hpbGRyZW46IHRleHQgfSldIH0pKSwgY29udGVudDogX2pzeChfRnJhZ21lbnQsIHsgY2hpbGRyZW46IHRvb2x0aXAuY29udGVudCB9KSwgZGlyZWN0aW9uOiB0b29sdGlwLnBvc2l0aW9uLCBkZWxheUR1cmF0aW9uOiB0b29sdGlwLmRlbGF5RHVyYXRpb24gfSkpIDogKF9qc3hzKEJhc2VCYWRnZSwgX19hc3NpZ24oeyByZWY6IHJlZiwgY2xhc3NOYW1lOiBiYWRnZUNsYXNzTmFtZSB9LCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtpY29uLCBfanN4KFwic3BhblwiLCB7IGNoaWxkcmVuOiB0ZXh0IH0pXSB9KSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBJY29uVGV4dEJhZGdlO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IHsgaWNvblRleHRPcHRpb25CYWRnZVByb3BzIH0gZnJvbSAnLi9iYWRnZS1wcm9wcyc7XG5pbXBvcnQgeyBCYXNlQmFkZ2UgfSBmcm9tICcuL2Jhc2UtYmFkZ2UnO1xudmFyIEljb25UZXh0T3B0aW9uQmFkZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGljb25UZXh0T3B0aW9uQmFkZ2VQcm9wcyksIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgaWNvbiA9IF9hLmljb24sIHRleHQgPSBfYS50ZXh0LCBvcHRpb24gPSBfYS5vcHRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2xhc3NOYW1lXCIsIFwiaWNvblwiLCBcInRleHRcIiwgXCJvcHRpb25cIl0pO1xuICAgIHZhciBiYWRnZUNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnaWNvbi10ZXh0LW9wdGlvbicpO1xuICAgIHJldHVybiAoX2pzeHMoQmFzZUJhZGdlLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IGJhZGdlQ2xhc3NOYW1lIH0sIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbaWNvbiwgX2pzeChcInNwYW5cIiwgeyBjaGlsZHJlbjogdGV4dCB9KV0gfSksIG9wdGlvbl0gfSkpKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgSWNvblRleHRPcHRpb25CYWRnZTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbnZhciBUYWJsZVJvb3QgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIl0pO1xuICAgIHJldHVybiAoX2pzeChcInRhYmxlXCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImJhc2UtdGFibGUgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSwgcmVzdCwgeyBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4gfSkpKTtcbn07XG52YXIgVGFibGVIZWFkZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIl0pO1xuICAgIHJldHVybiAoX2pzeChcInRoZWFkXCIsIF9fYXNzaWduKHsgY2xhc3NOYW1lOiBcImJhc2UtdGFibGUgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgaGVhZGVyXCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRhYmxlQm9keSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNsYXNzTmFtZVwiXSk7XG4gICAgcmV0dXJuIChfanN4KFwidGJvZHlcIiwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwiYmFzZS10YWJsZSBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBib2R5XCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59O1xudmFyIFRhYmxlUm93ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goXCJ0clwiLCBfX2Fzc2lnbih7IGNsYXNzTmFtZTogXCJiYXNlLXRhYmxlIFwiLmNvbmNhdChjbGFzc05hbWUsIFwiIHJvd1wiKSB9LCByZXN0LCB7IGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSkpO1xufTtcbnZhciBUYWJsZUNlbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2xhc3NOYW1lXCJdKTtcbiAgICByZXR1cm4gKF9qc3goXCJ0ZFwiLCBfX2Fzc2lnbih7IHJlZjogcmVmLCBjbGFzc05hbWU6IFwiYmFzZS10YWJsZSBcIi5jb25jYXQoY2xhc3NOYW1lLCBcIiBjZWxsXCIpIH0sIHJlc3QsIHsgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuIH0pKSk7XG59KTtcblRhYmxlUm9vdC5IZWFkZXIgPSBUYWJsZUhlYWRlcjtcblRhYmxlUm9vdC5Cb2R5ID0gVGFibGVCb2R5O1xuVGFibGVSb290LlJvdyA9IFRhYmxlUm93O1xuVGFibGVSb290LkNlbGwgPSBUYWJsZUNlbGw7XG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvb3Q7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuZXhwb3J0IHZhciBoZWFkZXJIZWlnaHQgPSBbNjAsIDg1XTtcbmV4cG9ydCB2YXIgcm93SGVpZ2h0ID0gWzYwXTtcbnZhciBkYXRhVGFibGVDb21tb25Qcm9wcyA9IHt9O1xuZXhwb3J0IHZhciBkYXRhVGFibGVIZWFkZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkYXRhVGFibGVDb21tb25Qcm9wcyksIHsgaGVhZGVySGVpZ2h0OiB7XG4gICAgICAgIHR5cGU6ICdzdHlsZScsXG4gICAgICAgIHN0eWxlOiAnaGVhZGVySGVpZ2h0JyxcbiAgICAgICAga2V5OiBbJ2hlaWdodCddLFxuICAgICAgICB2YWx1ZXM6IGhlYWRlckhlaWdodCxcbiAgICAgICAgZGVmYXVsdDogODUsXG4gICAgfSB9KTtcbmV4cG9ydCB2YXIgZGF0YVRhYmxlUm93UHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGF0YVRhYmxlQ29tbW9uUHJvcHMpLCB7IHJvd0hlaWdodDoge1xuICAgICAgICB0eXBlOiAnc3R5bGUnLFxuICAgICAgICBzdHlsZTogJ3Jvd0hlaWdodCcsXG4gICAgICAgIGtleTogWydoZWlnaHQnXSxcbiAgICAgICAgdmFsdWVzOiByb3dIZWlnaHQsXG4gICAgICAgIGRlZmF1bHQ6IDYwLFxuICAgIH0gfSk7XG5leHBvcnQgdmFyIGRhdGFUYWJsZUNlbGxQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBkYXRhVGFibGVDb21tb25Qcm9wcyksIHsgY2VsbEhlaWdodDoge1xuICAgICAgICB0eXBlOiAnc3R5bGUnLFxuICAgICAgICBzdHlsZTogJ2NlbGxIZWlnaHQnLFxuICAgICAgICBrZXk6IFsnaGVpZ2h0J10sXG4gICAgICAgIHZhbHVlczogcm93SGVpZ2h0LFxuICAgICAgICBkZWZhdWx0OiA2MCxcbiAgICB9IH0pO1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGdldE1lcmdlZFByb3BzIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscy9nZXRNZXJnZWRQcm9wcyc7XG5pbXBvcnQgVGFibGVSb290IGZyb20gJy4vYmFzZS10YWJsZSc7XG5pbXBvcnQgeyBkYXRhVGFibGVDZWxsUHJvcHMsIGRhdGFUYWJsZUhlYWRlclByb3BzLCBkYXRhVGFibGVSb3dQcm9wcywgfSBmcm9tICcuL3RhYmxlLXByb3BzJztcbnZhciBEYXRhVGFibGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgcm93cyA9IHByb3BzLnJvd3MsIGNvbHVtbnMgPSBwcm9wcy5jb2x1bW5zLCBfYSA9IHByb3BzLmZpeGVkUm93c0luZGV4LCBmaXhlZFJvd3NJbmRleCA9IF9hID09PSB2b2lkIDAgPyAwIDogX2EsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICB2YXIgaGVhZGVyU3R5bGUgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgZGF0YVRhYmxlSGVhZGVyUHJvcHMpLnN0eWxlO1xuICAgIHZhciByb3dTdHlsZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBkYXRhVGFibGVSb3dQcm9wcykuc3R5bGU7XG4gICAgdmFyIGNlbGxTdHlsZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBkYXRhVGFibGVDZWxsUHJvcHMpLnN0eWxlO1xuICAgIHJldHVybiAoX2pzeHMoVGFibGVSb290LCB7IGNsYXNzTmFtZTogXCJkYXRhLXRhYmxlIFwiLmNvbmNhdChjbGFzc05hbWUpLCBjaGlsZHJlbjogW19qc3goVGFibGVSb290LkhlYWRlciwgeyBjbGFzc05hbWU6ICdkYXRhLXRhYmxlLWhlYWRlcicsIHN0eWxlOiBoZWFkZXJTdHlsZSwgY2hpbGRyZW46IF9qc3goVGFibGVSb290LlJvdywgeyBjbGFzc05hbWU6ICdkYXRhLXRhYmxlLXJvdycsIHN0eWxlOiByb3dTdHlsZSwgY2hpbGRyZW46IHJvd3MubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkgeyByZXR1cm4gKF9qc3goVGFibGVSb290LkNlbGwsIHsgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChpbmRleCA8IGZpeGVkUm93c0luZGV4ICYmICdmaXhlZCcpLCByZWY6IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBmaXhlZFJvd3NJbmRleCAmJiBlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxzID0gKF9hID0gZWwucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnF1ZXJ5U2VsZWN0b3JBbGwoJy5maXhlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb3NpdGlvbiArPSBjZWxsc1tpXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5sZWZ0ID0gbGVmdFBvc2l0aW9uICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGl0ZW0ub25DbGlja1JvdykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoaXRlbSwgaXRlbS5pZCk7IH0sIGNoaWxkcmVuOiBpdGVtLnZhbHVlIH0sIGl0ZW0uaWQpKTsgfSkgfSkgfSksIF9qc3goVGFibGVSb290LkJvZHksIHsgY2xhc3NOYW1lOiAnZGF0YS10YWJsZScsIGNoaWxkcmVuOiBjb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uS2V5ID0gT2JqZWN0LmtleXMoY29sdW1uKS5qb2luKCdfXycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF9qc3goVGFibGVSb290LlJvdywgeyBzdHlsZTogcm93U3R5bGUsIGNsYXNzTmFtZTogJ2RhdGEtdGFibGUtcm93JywgY2hpbGRyZW46IHJvd3MubWFwKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxEYXRhID0gY29sdW1uW2l0ZW0uaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsVmFsdWUgPSBjZWxsRGF0YSA9PT0gbnVsbCB8fCBjZWxsRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2VsbERhdGEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfanN4KFRhYmxlUm9vdC5DZWxsLCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQoaSA8IGZpeGVkUm93c0luZGV4ICYmICdmaXhlZCcpLCBcImRhdGEtaWRcIjogaXRlbS5pZCwgcmVmOiBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZml4ZWRSb3dzSW5kZXggJiYgZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbHMgPSAoX2EgPSBlbC5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3RvckFsbCgnLmZpeGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gY2VsbHNbal0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUubGVmdCA9IGxlZnRQb3NpdGlvbiArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHsgdmFyIF9hOyByZXR1cm4gKF9hID0gY2VsbERhdGEgPT09IG51bGwgfHwgY2VsbERhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNlbGxEYXRhLm9uQ2xpY2tDZWxsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChjZWxsRGF0YSk7IH0sIHN0eWxlOiBjZWxsU3R5bGUsIGNoaWxkcmVuOiB0eXBlb2YgY2VsbFZhbHVlID09PSAnZnVuY3Rpb24nID8gY2VsbFZhbHVlKGl0ZW0pIDogY2VsbFZhbHVlIH0sIFwiXCIuY29uY2F0KGNvbHVtbktleSwgXCJfX1wiKS5jb25jYXQoaXRlbS5pZCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0sIFwiY29sdW1uX19cIi5jb25jYXQoY29sdW1uS2V5LCBcIl9fXCIpLmNvbmNhdChjb2x1bW5JbmRleCkpKTtcbiAgICAgICAgICAgICAgICB9KSB9KV0gfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERhdGFUYWJsZTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIFRleHQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdGV4dCA9IHByb3BzLnRleHQsIHNpemUgPSBwcm9wcy5zaXplLCB3ZWlnaHQgPSBwcm9wcy53ZWlnaHQsIGNvbG9yID0gcHJvcHMuY29sb3IsIHRleHRBbGlnbiA9IHByb3BzLnRleHRBbGlnbiwgdGV4dERlY29yYXRpb24gPSBwcm9wcy50ZXh0RGVjb3JhdGlvbiwgd29yZEJyZWFrID0gcHJvcHMud29yZEJyZWFrLCB3aGl0ZVNwYWNlID0gcHJvcHMud2hpdGVTcGFjZSwgYXMgPSBwcm9wcy5hcywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBDb21wID0gYXMgPyBhcyA6ICdwJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLXRleHQgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCIgXCIpLmNvbmNhdCgvXlxcZCt4bCQvLnRlc3Qoc2l6ZSkgPyBcInQtXCIuY29uY2F0KHNpemUpIDogc2l6ZSwgXCIgXCIpLmNvbmNhdCh3ZWlnaHQsIFwiIHRleHRBbGlnbi1cIikuY29uY2F0KHRleHRBbGlnbiwgXCIgdGV4dERlY29yYXRpb24tXCIpLmNvbmNhdCh0ZXh0RGVjb3JhdGlvbiwgXCIgd29yZEJyZWFrLVwiKS5jb25jYXQod29yZEJyZWFrLCBcIiB3aGl0ZVNwYWNlLVwiKS5jb25jYXQod2hpdGVTcGFjZSwgXCIgXCIpLmNvbmNhdChjb2xvciA/IFwiY29sb3ItXCIuY29uY2F0KGNvbG9yKSA6ICcnKSwgc3R5bGU6IF9fYXNzaWduKHt9LCBzdHlsZSksIGNoaWxkcmVuOiB0ZXh0IH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBUZXh0O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBmb3J3YXJkUmVmLCB1c2VDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vZWxlbWVudHMvdGV4dC90ZXh0JztcbnZhciBUZXh0RmllbGRDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgdmFsdWU6ICcnLFxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoKSB7IH0sXG59KTtcbnZhciBUZXh0RmllbGRSb290ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIHZhbHVlID0gcHJvcHMudmFsdWUsIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICB2YXIgaXNDb250cm9sbGVkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgX2EgPSB1c2VTdGF0ZShkZWZhdWx0VmFsdWUgIT09IG51bGwgJiYgZGVmYXVsdFZhbHVlICE9PSB2b2lkIDAgPyBkZWZhdWx0VmFsdWUgOiAnJyksIGlubmVyVmFsdWUgPSBfYVswXSwgc2V0SW5uZXJWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciBpbnB1dFZhbHVlID0gaXNDb250cm9sbGVkID8gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6ICcnKSA6IGlubmVyVmFsdWU7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgICAgICBzZXRJbm5lclZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICByZXR1cm4gKF9qc3goVGV4dEZpZWxkQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBUZXh0TGFiZWwgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdGV4dCA9IHByb3BzLnRleHQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnID8gKF9qc3goVGV4dCwgeyB0ZXh0OiB0ZXh0LCBzaXplOiAnc20nLCB3ZWlnaHQ6ICdib2xkJywgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS10ZXh0LWZpZWxkIFwiLmNvbmNhdChjbGFzc05hbWUpIH0pKSA6ICh0ZXh0KTtcbn07XG52YXIgSW5wdXRGaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlciwgbmFtZSA9IHByb3BzLm5hbWUsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVzdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJwbGFjZWhvbGRlclwiLCBcIm5hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIF9hID0gdXNlQ29udGV4dChUZXh0RmllbGRDb250ZXh0KSwgdmFsdWUgPSBfYS52YWx1ZSwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgaW5wdXRDbGFzc05hbWUgPSBjbGFzc05hbWVzKCdudXJpLXRoZW1lIGJhc2UtdGV4dC1maWVsZCBpbnB1dCcsIGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChfanN4KFwiaW5wdXRcIiwgX19hc3NpZ24oeyByZWY6IHJlZiwgdmFsdWU6IHZhbHVlLCBvbkNoYW5nZTogb25DaGFuZ2UsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgbmFtZTogbmFtZSwgZGlzYWJsZWQ6IGRpc2FibGVkLCBcImRhdGEtZGlzYWJsZWRcIjogZGlzYWJsZWQsIGNsYXNzTmFtZTogaW5wdXRDbGFzc05hbWUgfSwgcmVzdFByb3BzKSkpO1xufSk7XG52YXIgSGVscGVyVGV4dCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciB0ZXh0ID0gcHJvcHMudGV4dCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyAoX2pzeChUZXh0LCB7IHRleHQ6IHRleHQsIHNpemU6ICdzbScsIHdlaWdodDogJ3JlZ3VsYXInLCBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLXRleHQtZmllbGQgXCIuY29uY2F0KGNsYXNzTmFtZSkgfSkpIDogKHRleHQpO1xufTtcblRleHRGaWVsZFJvb3QuVGV4dExhYmVsID0gVGV4dExhYmVsO1xuVGV4dEZpZWxkUm9vdC5JbnB1dEZpZWxkID0gSW5wdXRGaWVsZDtcblRleHRGaWVsZFJvb3QuSGVscGVyVGV4dCA9IEhlbHBlclRleHQ7XG5leHBvcnQgZGVmYXVsdCBUZXh0RmllbGRSb290O1xuIiwiZXhwb3J0IHZhciBzaXplID0gWydtJywgJ2wnXTtcbmV4cG9ydCB2YXIgdGV4dEZpZWxkUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgICAgdHlwZTogJ2NzcycsXG4gICAgICAgIGtleTogJ3dpZHRoJyxcbiAgICAgICAgZGVmYXVsdDogJzEwMCUnLFxuICAgIH0sXG59O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IFRleHRGaWVsZFJvb3QgZnJvbSAnLi9iYXNlLXRleHQtZmllbGQnO1xuaW1wb3J0IHsgdGV4dEZpZWxkUHJvcHMgfSBmcm9tICcuL3RleHQtZmllbGQtcHJvcHMnO1xudmFyIFRleHRGaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICB2YXIgX2EgPSBnZXRNZXJnZWRQcm9wcyhwcm9wcywgdGV4dEZpZWxkUHJvcHMpLCBtZXJnZWRDbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIHN0eWxlID0gX2Euc3R5bGUsIGxlZnRJY29uID0gX2EubGVmdEljb24sIHJpZ2h0SWNvbiA9IF9hLnJpZ2h0SWNvbiwgbmFtZSA9IF9hLm5hbWUsIHRpdGxlID0gX2EudGl0bGUsIHZhbHVlID0gX2EudmFsdWUsIG9uQ2hhbmdlID0gX2Eub25DaGFuZ2UsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaGVscGVyVGV4dCA9IF9hLmhlbHBlclRleHQsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGlzRXJyb3IgPSBfYS5pc0Vycm9yLCByZXN0UHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwibGVmdEljb25cIiwgXCJyaWdodEljb25cIiwgXCJuYW1lXCIsIFwidGl0bGVcIiwgXCJ2YWx1ZVwiLCBcIm9uQ2hhbmdlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJoZWxwZXJUZXh0XCIsIFwiZGlzYWJsZWRcIiwgXCJpc0Vycm9yXCJdKTtcbiAgICB2YXIgaW5wdXRXcmFwcGVyQ2xhc3NOYW1lID0gY2xhc3NOYW1lcygnbnVyaS10aGVtZSB0ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXInLCBtZXJnZWRDbGFzc05hbWUpO1xuICAgIHJldHVybiAoX2pzeChUZXh0RmllbGRSb290LCB7IHZhbHVlOiB2YWx1ZSwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgY2hpbGRyZW46IF9qc3hzKFwiZGl2XCIsIHsgc3R5bGU6IHsgaGVpZ2h0OiAnZml0LWNvbnRlbnQnIH0sIGNoaWxkcmVuOiBbdGl0bGUgJiYgX2pzeChUZXh0RmllbGRSb290LlRleHRMYWJlbCwgeyB0ZXh0OiB0aXRsZSwgY2xhc3NOYW1lOiAndGV4dC1maWVsZC10aXRsZScgfSksIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBpbnB1dFdyYXBwZXJDbGFzc05hbWUsIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IFtsZWZ0SWNvbiwgX2pzeChUZXh0RmllbGRSb290LklucHV0RmllbGQsIF9fYXNzaWduKHsgcmVmOiByZWYsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgbmFtZTogbmFtZSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHJlc3RQcm9wcykpLCByaWdodEljb25dIH0pLCBoZWxwZXJUZXh0ICYmIChfanN4KFRleHRGaWVsZFJvb3QuSGVscGVyVGV4dCwgeyB0ZXh0OiBoZWxwZXJUZXh0LCBjbGFzc05hbWU6IFwidGV4dC1maWVsZC1oZWxwZXItdGV4dCBcIi5jb25jYXQoaXNFcnJvciA/ICdlcnJvcicgOiAnJykgfSkpXSB9KSB9KSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IFRleHRGaWVsZDtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciB1c2VFeHRlcm5hbFN0YXRlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHByb3AgPSBfYS5wcm9wLCBoYW5kbGVyID0gX2EuaGFuZGxlciwgZGVmYXVsdFByb3AgPSBfYS5kZWZhdWx0UHJvcDtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZShwcm9wICE9PSBudWxsICYmIHByb3AgIT09IHZvaWQgMCA/IHByb3AgOiBkZWZhdWx0UHJvcCksIGlubmVyU3RhdGUgPSBfYlswXSwgc2V0SW5uZXJTdGF0ZSA9IF9iWzFdO1xuICAgIHZhciBpc0NvbnRyb2xsZWRCeUV4dGVybmFsID0gcHJvcCAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSA9IGlzQ29udHJvbGxlZEJ5RXh0ZXJuYWwgPyBwcm9wIDogaW5uZXJTdGF0ZTtcbiAgICB2YXIgc2V0VmFsdWUgPSBmdW5jdGlvbiAoaGFuZGxlZFZhbHVlKSB7XG4gICAgICAgIGlmIChpc0NvbnRyb2xsZWRCeUV4dGVybmFsKSB7XG4gICAgICAgICAgICB2YXIgc2V0dGVyID0gaGFuZGxlZFZhbHVlO1xuICAgICAgICAgICAgdmFyIHZhbHVlXzEgPSB0eXBlb2YgaGFuZGxlZFZhbHVlID09PSAnZnVuY3Rpb24nID8gc2V0dGVyKHByb3AgIT09IG51bGwgJiYgcHJvcCAhPT0gdm9pZCAwID8gcHJvcCA6IGRlZmF1bHRQcm9wKSA6IGhhbmRsZWRWYWx1ZTtcbiAgICAgICAgICAgIGhhbmRsZXIgPT09IG51bGwgfHwgaGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGFuZGxlcih2YWx1ZV8xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldElubmVyU3RhdGUoaGFuZGxlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVdO1xufTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBmb3J3YXJkUmVmLCBpc1ZhbGlkRWxlbWVudCwgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBDb21wb3NlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9hLCByZWYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY29tcG9zZXJQcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIl0pO1xuICAgIHZhciBjaGlsZEFycmF5ID0gQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wb3NlciBjYW4gb25seSBoYXZlIG9uZSBjaGlsZFwiKTtcbiAgICB9XG4gICAgdmFyIGlzVmFsaWRDaGlsZCA9IGlzVmFsaWRFbGVtZW50KGNoaWxkQXJyYXlbMF0pO1xuICAgIGlmICghaXNWYWxpZENoaWxkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNoaWxkIHNob3VsZCBiZSBSZWFjdCBub2RlIVwiKTtcbiAgICB9XG4gICAgdmFyIGNoaWxkID0gY2hpbGRBcnJheVswXTtcbiAgICB2YXIgY2hpbGRSZWYgPSBnZXRFbGVtZW50UmVmKGNoaWxkKTtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKGNvbXBvc2VyUHJvcHMsIGNoaWxkLnByb3BzKTtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbWVyZ2VkUHJvcHMpLCB7IHJlZjogcmVmID8gY29tcG9zZVJlZnMocmVmLCBjaGlsZFJlZikgOiBjaGlsZFJlZiB9KSk7XG59KTtcbkNvbXBvc2VyLmRpc3BsYXlOYW1lID0gXCJDb21wb3NlclwiO1xuZnVuY3Rpb24gbWVyZ2VQcm9wcyhjb21wb3NlclByb3BzLCBjaGlsZFByb3BzKSB7XG4gICAgdmFyIG92ZXJyaWRlUHJvcHMgPSBfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyk7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgdmFyIGNvbXBvc2VyUHJvcFZhbHVlID0gY29tcG9zZXJQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIHZhciBjaGlsZFByb3BWYWx1ZSA9IGNoaWxkUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB2YXIgaXNIYW5kbGVyID0gL15vbltBLVpdLy50ZXN0KHByb3BOYW1lKTtcbiAgICAgICAgaWYgKGlzSGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKGNvbXBvc2VyUHJvcFZhbHVlICYmIGNoaWxkUHJvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRQcm9wVmFsdWUuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZXJQcm9wVmFsdWUuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJQcm9wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvdmVycmlkZVByb3BzW3Byb3BOYW1lXSA9IGNvbXBvc2VyUHJvcFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgICAgIG92ZXJyaWRlUHJvcHNbcHJvcE5hbWVdID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbXBvc2VyUHJvcFZhbHVlKSwgY2hpbGRQcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3BOYW1lID09PSBcImNsYXNzTmFtZVwiKSB7XG4gICAgICAgICAgICBvdmVycmlkZVByb3BzW3Byb3BOYW1lXSA9IFtjb21wb3NlclByb3BWYWx1ZSwgY2hpbGRQcm9wVmFsdWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gY29tcG9zZXJQcm9wcykge1xuICAgICAgICBfbG9vcF8xKHByb3BOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21wb3NlclByb3BzKSwgb3ZlcnJpZGVQcm9wcyk7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50UmVmKGVsZW1lbnQpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjaGlsZEdldHRlciA9IChfYSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudC5wcm9wcywgXCJyZWZcIikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXQ7XG4gICAgdmFyIG1heVdhcm5JbkNoaWxkID0gY2hpbGRHZXR0ZXIgJiZcbiAgICAgICAgXCJpc1JlYWN0V2FybmluZ1wiIGluIGNoaWxkR2V0dGVyICYmXG4gICAgICAgIGNoaWxkR2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICAgIGlmIChtYXlXYXJuSW5DaGlsZCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5yZWY7XG4gICAgfVxuICAgIHZhciBnZXR0ZXIgPSAoX2IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVsZW1lbnQsIFwicmVmXCIpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0O1xuICAgIHZhciBtYXlXYXJuID0gZ2V0dGVyICYmIFwiaXNSZWFjdFdhcm5pbmdcIiBpbiBnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nO1xuICAgIGlmIChtYXlXYXJuKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnByb3BzLnJlZjtcbiAgICB9XG4gICAgcmV0dXJuIChlbGVtZW50LnByb3BzLnJlZiB8fCBlbGVtZW50LnJlZik7XG59XG52YXIgY29tcG9zZVJlZnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICByZWZzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb21wb3NlcjtcbiIsImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXh0ZXJuYWxTdGF0ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaG9va3MvdXNlRXh0ZXJuYWxTdGF0ZSc7XG5pbXBvcnQgQmFzZUJ1dHRvbiBmcm9tICcuLi9idXR0b24vYmFzZS1idXR0b24nO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4uL2NvcmUvY29tcG9zZXInO1xudmFyIFJhZGlvQnV0dG9uID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGlkID0gcHJvcHMuaWQsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgdmFyIF9hID0gdXNlQ29udGV4dChSYWRpb0NvbnRleHQpLCBzZWxlY3RlZCA9IF9hLnNlbGVjdGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogQmFzZUJ1dHRvbjtcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkNoYW5nZShpZCk7IH0sIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBkaXNhYmxlZDogZGlzYWJsZWQsIHN0eWxlOiB7IHBhZGRpbmc6ICcwJyB9LCBjaGlsZHJlbjogaWQgPT09IHNlbGVjdGVkID8gY2hpbGRyZW4gOiBudWxsIH0pKTtcbn07XG52YXIgUmFkaW9JbmRpY2F0b3IgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIGlkID0gcHJvcHMuaWQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICB2YXIgc2VsZWN0ZWQgPSB1c2VDb250ZXh0KFJhZGlvQ29udGV4dCkuc2VsZWN0ZWQ7XG4gICAgdmFyIENvbXAgPSBhc0NoaWxkID8gQ29tcG9zZXIgOiAnaW5wdXQnO1xuICAgIHJldHVybiAoX2pzeChDb21wLCB7IHR5cGU6ICdyYWRpbycsIGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChzZWxlY3RlZCA9PT0gaWQgPyAnc2VsZWN0ZWQnIDogJycsIFwiIFwiKS5jb25jYXQoY2xhc3NOYW1lKSwgY2hlY2tlZDogc2VsZWN0ZWQgPT09IGlkLCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBSYWRpb0xhYmVsID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGlkID0gcHJvcHMuaWQsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgdmFyIG9uQ2hhbmdlID0gdXNlQ29udGV4dChSYWRpb0NvbnRleHQpLm9uQ2hhbmdlO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogJ2xhYmVsJztcbiAgICByZXR1cm4gKF9qc3goQ29tcCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBcIi5jb25jYXQoY2xhc3NOYW1lKSwgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWRpc2FibGVkICYmIG9uQ2hhbmdlKGlkKTsgfSwgY2hpbGRyZW46IGNoaWxkcmVuIH0pKTtcbn07XG52YXIgUmFkaW9PcHRpb25Hcm91cCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhc0NoaWxkID0gcHJvcHMuYXNDaGlsZCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IENvbXBvc2VyIDogJ3VsJztcbiAgICByZXR1cm4gX2pzeChDb21wLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCBjaGlsZHJlbjogY2hpbGRyZW4gfSk7XG59O1xudmFyIFJhZGlvQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIG9wdGlvbnM6IFtdLFxuICAgIHNlbGVjdGVkOiBudWxsLFxuICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoaWQpIHsgfSxcbn0pO1xudmFyIFJhZGlvUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBvcHRpb25zID0gcHJvcHMub3B0aW9ucywgX2EgPSBwcm9wcy5zZWxlY3RlZCwgc2VsZWN0ZWQgPSBfYSA9PT0gdm9pZCAwID8gbnVsbCA6IF9hLCBleHRlcm5hbE9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgdmFyIF9iID0gdXNlRXh0ZXJuYWxTdGF0ZSh7XG4gICAgICAgIHByb3A6IHNlbGVjdGVkLFxuICAgICAgICBoYW5kbGVyOiBleHRlcm5hbE9uQ2hhbmdlLFxuICAgICAgICBkZWZhdWx0UHJvcDogc2VsZWN0ZWQsXG4gICAgfSksIHNlbGVjdGVkSWQgPSBfYlswXSwgc2V0U2VsZWN0ZWRJZCA9IF9iWzFdO1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBzZXRTZWxlY3RlZElkKGlkKTtcbiAgICB9O1xuICAgIHJldHVybiAoX2pzeChSYWRpb0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgc2VsZWN0ZWQ6IHNlbGVjdGVkSWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSwgb3B0aW9uczogb3B0aW9ucyB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcblJhZGlvUm9vdC5JbmRpY2F0b3IgPSBSYWRpb0luZGljYXRvcjtcblJhZGlvUm9vdC5MYWJlbCA9IFJhZGlvTGFiZWw7XG5SYWRpb1Jvb3QuT3B0aW9uR3JvdXAgPSBSYWRpb09wdGlvbkdyb3VwO1xuUmFkaW9Sb290LkJ1dHRvbiA9IFJhZGlvQnV0dG9uO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9Sb290O1xuIiwiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSYWRpb1Jvb3QgZnJvbSAnLi9iYXNlLXJhZGlvJztcbnZhciBSYWRpbyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBzZWxlY3RlZCA9IHByb3BzLnNlbGVjdGVkLCBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlLCBvcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgICByZXR1cm4gKF9qc3goUmFkaW9Sb290LCB7IG9wdGlvbnM6IG9wdGlvbnMsIHNlbGVjdGVkOiBzZWxlY3RlZCwgb25DaGFuZ2U6IG9uQ2hhbmdlLCBjaGlsZHJlbjogX2pzeChSYWRpb1Jvb3QuT3B0aW9uR3JvdXAsIHsgY2xhc3NOYW1lOiAncmFkaW8gcmFkaW8tZ3JvdXAnLCBjaGlsZHJlbjogb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikgeyByZXR1cm4gKF9qc3hzKFwibGlcIiwgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc2cHgnIH0sIGNoaWxkcmVuOiBbX2pzeChSYWRpb1Jvb3QuQnV0dG9uLCB7IGlkOiBvcHRpb24uaWQsIGNsYXNzTmFtZTogJ3JhZGlvIHJhZGlvLWJ1dHRvbicsIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsIGNoaWxkcmVuOiBfanN4KFJhZGlvUm9vdC5JbmRpY2F0b3IsIHsgaWQ6IG9wdGlvbi5pZCwgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAncmFkaW8gcmFkaW8taW5kaWNhdG9yJywgY2hpbGRyZW46IF9qc3goXCJkaXZcIiwge30pIH0pIH0pLCBfanN4KFJhZGlvUm9vdC5MYWJlbCwgeyBpZDogb3B0aW9uLmlkLCBjbGFzc05hbWU6ICdyYWRpbyByYWRpby1sYWJlbCcsIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsIGNoaWxkcmVuOiBvcHRpb24ubGFiZWwgfSldIH0sIG9wdGlvbi5pZCkpOyB9KSB9KSB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87XG4iLCJ2YXIgX3BhdGg7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHsgZm9yICh2YXIgZSA9IDE7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspIHsgdmFyIHQgPSBhcmd1bWVudHNbZV07IGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7IH0gcmV0dXJuIG47IH0sIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIFN2Z0NoZWNrID0gZnVuY3Rpb24gU3ZnQ2hlY2socHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIHByb3BzKSwgX3BhdGggfHwgKF9wYXRoID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiI2ZmZlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgIHN0cm9rZVdpZHRoOiAxLjUsXG4gICAgZDogXCJNMi42NjcgOC44IDUuNzE0IDEybDcuNjItOFwiXG4gIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgU3ZnQ2hlY2s7IiwiLy8gcGFja2FnZXMvcmVhY3QvdXNlLXByZXZpb3VzL3NyYy91c2UtcHJldmlvdXMudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmZ1bmN0aW9uIHVzZVByZXZpb3VzKHZhbHVlKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZih7IHZhbHVlLCBwcmV2aW91czogdmFsdWUgfSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmLmN1cnJlbnQudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICByZWYuY3VycmVudC5wcmV2aW91cyA9IHJlZi5jdXJyZW50LnZhbHVlO1xuICAgICAgcmVmLmN1cnJlbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50LnByZXZpb3VzO1xuICB9LCBbdmFsdWVdKTtcbn1cbmV4cG9ydCB7XG4gIHVzZVByZXZpb3VzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9jaGVja2JveC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCB7IHVzZVByZXZpb3VzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtcHJldmlvdXNcIjtcbmltcG9ydCB7IHVzZVNpemUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1zaXplXCI7XG5pbXBvcnQgeyBQcmVzZW5jZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJlc2VuY2VcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyBGcmFnbWVudCwganN4LCBqc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgQ0hFQ0tCT1hfTkFNRSA9IFwiQ2hlY2tib3hcIjtcbnZhciBbY3JlYXRlQ2hlY2tib3hDb250ZXh0LCBjcmVhdGVDaGVja2JveFNjb3BlXSA9IGNyZWF0ZUNvbnRleHRTY29wZShDSEVDS0JPWF9OQU1FKTtcbnZhciBbQ2hlY2tib3hQcm92aWRlckltcGwsIHVzZUNoZWNrYm94Q29udGV4dF0gPSBjcmVhdGVDaGVja2JveENvbnRleHQoQ0hFQ0tCT1hfTkFNRSk7XG5mdW5jdGlvbiBDaGVja2JveFByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBfX3Njb3BlQ2hlY2tib3gsXG4gICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgY2hpbGRyZW4sXG4gICAgZGVmYXVsdENoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9ybSxcbiAgICBuYW1lLFxuICAgIG9uQ2hlY2tlZENoYW5nZSxcbiAgICByZXF1aXJlZCxcbiAgICB2YWx1ZSA9IFwib25cIixcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbY2hlY2tlZCwgc2V0Q2hlY2tlZF0gPSB1c2VDb250cm9sbGFibGVTdGF0ZSh7XG4gICAgcHJvcDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdFByb3A6IGRlZmF1bHRDaGVja2VkID8/IGZhbHNlLFxuICAgIG9uQ2hhbmdlOiBvbkNoZWNrZWRDaGFuZ2UsXG4gICAgY2FsbGVyOiBDSEVDS0JPWF9OQU1FXG4gIH0pO1xuICBjb25zdCBbY29udHJvbCwgc2V0Q29udHJvbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2J1YmJsZUlucHV0LCBzZXRCdWJibGVJbnB1dF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc0Zvcm1Db250cm9sID0gY29udHJvbCA/ICEhZm9ybSB8fCAhIWNvbnRyb2wuY2xvc2VzdChcImZvcm1cIikgOiAoXG4gICAgLy8gV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBieSBkZWZhdWx0IHNvIHRoYXQgZXZlbnRzIGJ1YmJsZSB0byBmb3JtcyB3aXRob3V0IEpTIChTU1IpXG4gICAgdHJ1ZVxuICApO1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgc2V0Q2hlY2tlZCxcbiAgICBjb250cm9sLFxuICAgIHNldENvbnRyb2wsXG4gICAgbmFtZSxcbiAgICBmb3JtLFxuICAgIHZhbHVlLFxuICAgIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmLFxuICAgIHJlcXVpcmVkLFxuICAgIGRlZmF1bHRDaGVja2VkOiBpc0luZGV0ZXJtaW5hdGUoZGVmYXVsdENoZWNrZWQpID8gZmFsc2UgOiBkZWZhdWx0Q2hlY2tlZCxcbiAgICBpc0Zvcm1Db250cm9sLFxuICAgIGJ1YmJsZUlucHV0LFxuICAgIHNldEJ1YmJsZUlucHV0XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIENoZWNrYm94UHJvdmlkZXJJbXBsLFxuICAgIHtcbiAgICAgIHNjb3BlOiBfX3Njb3BlQ2hlY2tib3gsXG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgY2hpbGRyZW46IGlzRnVuY3Rpb24oaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXIpID8gaW50ZXJuYWxfZG9fbm90X3VzZV9yZW5kZXIoY29udGV4dCkgOiBjaGlsZHJlblxuICAgIH1cbiAgKTtcbn1cbnZhciBUUklHR0VSX05BTUUgPSBcIkNoZWNrYm94VHJpZ2dlclwiO1xudmFyIENoZWNrYm94VHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gICh7IF9fc2NvcGVDaGVja2JveCwgb25LZXlEb3duLCBvbkNsaWNrLCAuLi5jaGVja2JveFByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRyb2wsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgY2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc2V0Q29udHJvbCxcbiAgICAgIHNldENoZWNrZWQsXG4gICAgICBoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZixcbiAgICAgIGlzRm9ybUNvbnRyb2wsXG4gICAgICBidWJibGVJbnB1dFxuICAgIH0gPSB1c2VDaGVja2JveENvbnRleHQoVFJJR0dFUl9OQU1FLCBfX3Njb3BlQ2hlY2tib3gpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHNldENvbnRyb2wpO1xuICAgIGNvbnN0IGluaXRpYWxDaGVja2VkU3RhdGVSZWYgPSBSZWFjdC51c2VSZWYoY2hlY2tlZCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm0gPSBjb250cm9sPy5mb3JtO1xuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSAoKSA9PiBzZXRDaGVja2VkKGluaXRpYWxDaGVja2VkU3RhdGVSZWYuY3VycmVudCk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0XCIsIHJlc2V0KTtcbiAgICAgICAgcmV0dXJuICgpID0+IGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2V0XCIsIHJlc2V0KTtcbiAgICAgIH1cbiAgICB9LCBbY29udHJvbCwgc2V0Q2hlY2tlZF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgUHJpbWl0aXZlLmJ1dHRvbixcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgcm9sZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkgPyBcIm1peGVkXCIgOiBjaGVja2VkLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogcmVxdWlyZWQsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjaGVja2VkKSxcbiAgICAgICAgXCJkYXRhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAuLi5jaGVja2JveFByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgb25LZXlEb3duOiBjb21wb3NlRXZlbnRIYW5kbGVycyhvbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIChldmVudCkgPT4ge1xuICAgICAgICAgIHNldENoZWNrZWQoKHByZXZDaGVja2VkKSA9PiBpc0luZGV0ZXJtaW5hdGUocHJldkNoZWNrZWQpID8gdHJ1ZSA6ICFwcmV2Q2hlY2tlZCk7XG4gICAgICAgICAgaWYgKGJ1YmJsZUlucHV0ICYmIGlzRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmLmN1cnJlbnQgPSBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgICAgICAgaWYgKCFoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZi5jdXJyZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcbkNoZWNrYm94VHJpZ2dlci5kaXNwbGF5TmFtZSA9IFRSSUdHRVJfTkFNRTtcbnZhciBDaGVja2JveCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZUNoZWNrYm94LFxuICAgICAgbmFtZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hlY2tlZENoYW5nZSxcbiAgICAgIGZvcm0sXG4gICAgICAuLi5jaGVja2JveFByb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgQ2hlY2tib3hQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgX19zY29wZUNoZWNrYm94LFxuICAgICAgICBjaGVja2VkLFxuICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlcXVpcmVkLFxuICAgICAgICBvbkNoZWNrZWRDaGFuZ2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbnRlcm5hbF9kb19ub3RfdXNlX3JlbmRlcjogKHsgaXNGb3JtQ29udHJvbCB9KSA9PiAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgICBDaGVja2JveFRyaWdnZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmNoZWNrYm94UHJvcHMsXG4gICAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgICBfX3Njb3BlQ2hlY2tib3hcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIGlzRm9ybUNvbnRyb2wgJiYgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICAgIENoZWNrYm94QnViYmxlSW5wdXQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9fc2NvcGVDaGVja2JveFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSB9KVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5DaGVja2JveC5kaXNwbGF5TmFtZSA9IENIRUNLQk9YX05BTUU7XG52YXIgSU5ESUNBVE9SX05BTUUgPSBcIkNoZWNrYm94SW5kaWNhdG9yXCI7XG52YXIgQ2hlY2tib3hJbmRpY2F0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZUNoZWNrYm94LCBmb3JjZU1vdW50LCAuLi5pbmRpY2F0b3JQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZUNoZWNrYm94Q29udGV4dChJTkRJQ0FUT1JfTkFNRSwgX19zY29wZUNoZWNrYm94KTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByZXNlbmNlLFxuICAgICAge1xuICAgICAgICBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGlzSW5kZXRlcm1pbmF0ZShjb250ZXh0LmNoZWNrZWQpIHx8IGNvbnRleHQuY2hlY2tlZCA9PT0gdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgUHJpbWl0aXZlLnNwYW4sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGdldFN0YXRlKGNvbnRleHQuY2hlY2tlZCksXG4gICAgICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogY29udGV4dC5kaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgICAgICAuLi5pbmRpY2F0b3JQcm9wcyxcbiAgICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgICAgc3R5bGU6IHsgcG9pbnRlckV2ZW50czogXCJub25lXCIsIC4uLnByb3BzLnN0eWxlIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ2hlY2tib3hJbmRpY2F0b3IuZGlzcGxheU5hbWUgPSBJTkRJQ0FUT1JfTkFNRTtcbnZhciBCVUJCTEVfSU5QVVRfTkFNRSA9IFwiQ2hlY2tib3hCdWJibGVJbnB1dFwiO1xudmFyIENoZWNrYm94QnViYmxlSW5wdXQgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAoeyBfX3Njb3BlQ2hlY2tib3gsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRyb2wsXG4gICAgICBoYXNDb25zdW1lclN0b3BwZWRQcm9wYWdhdGlvblJlZixcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBmb3JtLFxuICAgICAgYnViYmxlSW5wdXQsXG4gICAgICBzZXRCdWJibGVJbnB1dFxuICAgIH0gPSB1c2VDaGVja2JveENvbnRleHQoQlVCQkxFX0lOUFVUX05BTUUsIF9fc2NvcGVDaGVja2JveCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgc2V0QnViYmxlSW5wdXQpO1xuICAgIGNvbnN0IHByZXZDaGVja2VkID0gdXNlUHJldmlvdXMoY2hlY2tlZCk7XG4gICAgY29uc3QgY29udHJvbFNpemUgPSB1c2VTaXplKGNvbnRyb2wpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGJ1YmJsZUlucHV0O1xuICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgICAgY29uc3QgaW5wdXRQcm90byA9IHdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICBpbnB1dFByb3RvLFxuICAgICAgICBcImNoZWNrZWRcIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNldENoZWNrZWQgPSBkZXNjcmlwdG9yLnNldDtcbiAgICAgIGNvbnN0IGJ1YmJsZXMgPSAhaGFzQ29uc3VtZXJTdG9wcGVkUHJvcGFnYXRpb25SZWYuY3VycmVudDtcbiAgICAgIGlmIChwcmV2Q2hlY2tlZCAhPT0gY2hlY2tlZCAmJiBzZXRDaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KFwiY2xpY2tcIiwgeyBidWJibGVzIH0pO1xuICAgICAgICBpbnB1dC5pbmRldGVybWluYXRlID0gaXNJbmRldGVybWluYXRlKGNoZWNrZWQpO1xuICAgICAgICBzZXRDaGVja2VkLmNhbGwoaW5wdXQsIGlzSW5kZXRlcm1pbmF0ZShjaGVja2VkKSA/IGZhbHNlIDogY2hlY2tlZCk7XG4gICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0sIFtidWJibGVJbnB1dCwgcHJldkNoZWNrZWQsIGNoZWNrZWQsIGhhc0NvbnN1bWVyU3RvcHBlZFByb3BhZ2F0aW9uUmVmXSk7XG4gICAgY29uc3QgZGVmYXVsdENoZWNrZWRSZWYgPSBSZWFjdC51c2VSZWYoaXNJbmRldGVybWluYXRlKGNoZWNrZWQpID8gZmFsc2UgOiBjaGVja2VkKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5pbnB1dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGRlZmF1bHRDaGVja2VkOiBkZWZhdWx0Q2hlY2tlZCA/PyBkZWZhdWx0Q2hlY2tlZFJlZi5jdXJyZW50LFxuICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmb3JtLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5wcm9wcy5zdHlsZSxcbiAgICAgICAgICAuLi5jb250cm9sU2l6ZSxcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgIC8vIFdlIHRyYW5zZm9ybSBiZWNhdXNlIHRoZSBpbnB1dCBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYnV0IHdlIGhhdmVcbiAgICAgICAgICAvLyByZW5kZXJlZCBpdCAqKmFmdGVyKiogdGhlIGJ1dHRvbi4gVGhpcyBwdWxscyBpdCBiYWNrIHRvIHNpdCBvbiB0b3BcbiAgICAgICAgICAvLyBvZiB0aGUgYnV0dG9uLlxuICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKC0xMDAlKVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ2hlY2tib3hCdWJibGVJbnB1dC5kaXNwbGF5TmFtZSA9IEJVQkJMRV9JTlBVVF9OQU1FO1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkge1xuICByZXR1cm4gY2hlY2tlZCA9PT0gXCJpbmRldGVybWluYXRlXCI7XG59XG5mdW5jdGlvbiBnZXRTdGF0ZShjaGVja2VkKSB7XG4gIHJldHVybiBpc0luZGV0ZXJtaW5hdGUoY2hlY2tlZCkgPyBcImluZGV0ZXJtaW5hdGVcIiA6IGNoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwidW5jaGVja2VkXCI7XG59XG5leHBvcnQge1xuICBDaGVja2JveCxcbiAgQ2hlY2tib3hJbmRpY2F0b3IsXG4gIENoZWNrYm94SW5kaWNhdG9yIGFzIEluZGljYXRvcixcbiAgQ2hlY2tib3ggYXMgUm9vdCxcbiAgY3JlYXRlQ2hlY2tib3hTY29wZSxcbiAgQ2hlY2tib3hCdWJibGVJbnB1dCBhcyB1bnN0YWJsZV9CdWJibGVJbnB1dCxcbiAgQ2hlY2tib3hCdWJibGVJbnB1dCBhcyB1bnN0YWJsZV9DaGVja2JveEJ1YmJsZUlucHV0LFxuICBDaGVja2JveFByb3ZpZGVyIGFzIHVuc3RhYmxlX0NoZWNrYm94UHJvdmlkZXIsXG4gIENoZWNrYm94VHJpZ2dlciBhcyB1bnN0YWJsZV9DaGVja2JveFRyaWdnZXIsXG4gIENoZWNrYm94UHJvdmlkZXIgYXMgdW5zdGFibGVfUHJvdmlkZXIsXG4gIENoZWNrYm94VHJpZ2dlciBhcyB1bnN0YWJsZV9UcmlnZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hlY2tib3gsIFNsb3QgfSBmcm9tICdyYWRpeC11aSc7XG52YXIgQ2hlY2tCb3hDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgaWQ6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbn0pO1xudmFyIENoZWNrQm94Um9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBpZCA9IHByb3BzLmlkLCBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkLCBvbkNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlO1xuICAgIHJldHVybiAoX2pzeChDaGVja2JveC5Sb290LCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBpZDogaWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgY2hlY2tlZDogY2hlY2tlZCwgb25DaGVja2VkQ2hhbmdlOiBvbkNoYW5nZSwgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlkOiBpZCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSB9KSk7XG59O1xudmFyIENoZWNrQm94TGFiZWwgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIHByZXZlbnRDaGFuZ2VPbkNsaWNrID0gcHJvcHMucHJldmVudENoYW5nZU9uQ2xpY2ssIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGlkID0gdXNlQ29udGV4dChDaGVja0JveENvbnRleHQpLmlkO1xuICAgIHZhciBDb21wID0gYXNDaGlsZCA/IFNsb3QuUm9vdCA6ICdsYWJlbCc7XG4gICAgcmV0dXJuIChfanN4KENvbXAsIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgYmFzZS1jaGVjay1ib3ggbGFiZWxcIiwgaHRtbEZvcjogaWQsIG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAocHJldmVudENoYW5nZU9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbnZhciBDaGVja0JveEluZGljYXRvciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdKTtcbiAgICB2YXIgZGlzYWJsZWQgPSB1c2VDb250ZXh0KENoZWNrQm94Q29udGV4dCkuZGlzYWJsZWQ7XG4gICAgcmV0dXJuIChfanN4KENoZWNrYm94LkluZGljYXRvciwgX19hc3NpZ24oeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWNoZWNrLWJveCBpbmRpY2F0b3IgXCIuY29uY2F0KGNsYXNzTmFtZSksIFwiZGF0YS1kaXNhYmxlZFwiOiBkaXNhYmxlZCB9LCByZXN0LCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSkpO1xufTtcbkNoZWNrQm94Um9vdC5MYWJlbCA9IENoZWNrQm94TGFiZWw7XG5DaGVja0JveFJvb3QuSW5kaWNhdG9yID0gQ2hlY2tCb3hJbmRpY2F0b3I7XG5leHBvcnQgZGVmYXVsdCBDaGVja0JveFJvb3Q7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuZXhwb3J0IHZhciBzaXplID0gWydsJywgJ20nLCAncyddO1xudmFyIGNvbW1vbkNoZWNrQm94SW5kaWNhdG9yUHJvcHMgPSB7XG4gICAgc2l6ZToge1xuICAgICAgICB0eXBlOiAnY2xhc3NOYW1lJyxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2l6ZScsXG4gICAgICAgIHZhbHVlczogc2l6ZSxcbiAgICAgICAgZGVmYXVsdDogJ20nLFxuICAgIH0sXG59O1xuZXhwb3J0IHZhciBjaGVja0JveEluZGljYXRvclByb3BzID0gX19hc3NpZ24oe30sIGNvbW1vbkNoZWNrQm94SW5kaWNhdG9yUHJvcHMpO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgQ2hlY2tCb3hJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IENoZWNrQm94Um9vdCBmcm9tICcuL2Jhc2UtY2hlY2stYm94JztcbmltcG9ydCB7IGNoZWNrQm94SW5kaWNhdG9yUHJvcHMgfSBmcm9tICcuL2NoZWNrLWJveC1wcm9wcyc7XG52YXIgQ2hlY2tCb3ggPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgcm9vdENsYXNzTmFtZSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCB7fSkuY2xhc3NOYW1lO1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBjaGVja0JveEluZGljYXRvclByb3BzKSwgbGFiZWwgPSBfYS5sYWJlbCwgaW5kaWNhdG9yQ2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBjaGVja0JveFByb3BzID0gX19yZXN0KF9hLCBbXCJsYWJlbFwiLCBcImNsYXNzTmFtZVwiXSk7XG4gICAgdmFyIGNoZWNrQm94Um9vdENsYXNzTmFtZSA9IGNsYXNzTmFtZXMocm9vdENsYXNzTmFtZSwgJ2NoZWNrLWJveCcpO1xuICAgIHZhciBjaGVja0JveEluZGljYXRvckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoaW5kaWNhdG9yQ2xhc3NOYW1lLCAnY2hlY2stYm94LWluZGljYXRvciB3cmFwcGVyJyk7XG4gICAgcmV0dXJuIChfanN4cyhDaGVja0JveFJvb3QsIF9fYXNzaWduKHt9LCBjaGVja0JveFByb3BzLCB7IGNsYXNzTmFtZTogY2hlY2tCb3hSb290Q2xhc3NOYW1lLCBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNoZWNrQm94SW5kaWNhdG9yQ2xhc3NOYW1lLCBcImRhdGEtZGlzYWJsZWRcIjogY2hlY2tCb3hQcm9wcy5kaXNhYmxlZCwgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hSb290LkluZGljYXRvciwgeyBjbGFzc05hbWU6ICdjaGVjay1ib3gtaW5kaWNhdG9yJywgY2hpbGRyZW46IF9qc3goQ2hlY2tCb3hJY29uLCB7fSkgfSkgfSksIF9qc3goQ2hlY2tCb3hSb290LkxhYmVsLCB7IGNoaWxkcmVuOiBsYWJlbCB9KV0gfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDaGVja0JveDtcbiIsInZhciBfcGF0aDtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikgeyBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykgeyB2YXIgdCA9IGFyZ3VtZW50c1tlXTsgZm9yICh2YXIgciBpbiB0KSAoe30pLmhhc093blByb3BlcnR5LmNhbGwodCwgcikgJiYgKG5bcl0gPSB0W3JdKTsgfSByZXR1cm4gbjsgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgU3ZnQ2hldnJvbkRvd24gPSBmdW5jdGlvbiBTdmdDaGV2cm9uRG93bihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgcHJvcHMpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMzk4IDEyLjM5OGEuNTYuNTYgMCAwIDEtLjc5NiAwbC02LTZhLjU2My41NjMgMCAwIDEgLjc5Ni0uNzk2TDkgMTEuMjA0bDUuNjAyLTUuNjAyYS41NjIuNTYyIDAgMSAxIC43OTYuNzk2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFN2Z0NoZXZyb25Eb3duOyIsIi8vIHBhY2thZ2VzL2NvcmUvbnVtYmVyL3NyYy9udW1iZXIudHNcbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cbmV4cG9ydCB7XG4gIGNsYW1wXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9jb2xsZWN0aW9uLWxlZ2FjeS50c3hcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbihuYW1lKSB7XG4gIGNvbnN0IFBST1ZJREVSX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uUHJvdmlkZXJcIjtcbiAgY29uc3QgW2NyZWF0ZUNvbGxlY3Rpb25Db250ZXh0LCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlKFBST1ZJREVSX05BTUUpO1xuICBjb25zdCBbQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgdXNlQ29sbGVjdGlvbkNvbnRleHRdID0gY3JlYXRlQ29sbGVjdGlvbkNvbnRleHQoXG4gICAgUFJPVklERVJfTkFNRSxcbiAgICB7IGNvbGxlY3Rpb25SZWY6IHsgY3VycmVudDogbnVsbCB9LCBpdGVtTWFwOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpIH1cbiAgKTtcbiAgY29uc3QgQ29sbGVjdGlvblByb3ZpZGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBpdGVtTWFwID0gUmVhY3QudXNlUmVmKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmN1cnJlbnQ7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgeyBzY29wZSwgaXRlbU1hcCwgY29sbGVjdGlvblJlZjogcmVmLCBjaGlsZHJlbiB9KTtcbiAgfTtcbiAgQ29sbGVjdGlvblByb3ZpZGVyLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRTtcbiAgY29uc3QgQ09MTEVDVElPTl9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uU2xvdFwiO1xuICBjb25zdCBDb2xsZWN0aW9uU2xvdEltcGwgPSBjcmVhdGVTbG90KENPTExFQ1RJT05fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvblNsb3QgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAgIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgICBjb25zdCB7IHNjb3BlLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQoQ09MTEVDVElPTl9TTE9UX05BTUUsIHNjb3BlKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRleHQuY29sbGVjdGlvblJlZik7XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChDb2xsZWN0aW9uU2xvdEltcGwsIHsgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvblNsb3QuZGlzcGxheU5hbWUgPSBDT0xMRUNUSU9OX1NMT1RfTkFNRTtcbiAgY29uc3QgSVRFTV9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uSXRlbVNsb3RcIjtcbiAgY29uc3QgSVRFTV9EQVRBX0FUVFIgPSBcImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtXCI7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdEltcGwgPSBjcmVhdGVTbG90KElURU1fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvbkl0ZW1TbG90ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4sIC4uLml0ZW1EYXRhIH0gPSBwcm9wcztcbiAgICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHJlZik7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQoSVRFTV9TTE9UX05BTUUsIHNjb3BlKTtcbiAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnRleHQuaXRlbU1hcC5zZXQocmVmLCB7IHJlZiwgLi4uaXRlbURhdGEgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB2b2lkIGNvbnRleHQuaXRlbU1hcC5kZWxldGUocmVmKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvbkl0ZW1TbG90SW1wbCwgeyAuLi57IFtJVEVNX0RBVEFfQVRUUl06IFwiXCIgfSwgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvbkl0ZW1TbG90LmRpc3BsYXlOYW1lID0gSVRFTV9TTE9UX05BTUU7XG4gIGZ1bmN0aW9uIHVzZUNvbGxlY3Rpb24oc2NvcGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQobmFtZSArIFwiQ29sbGVjdGlvbkNvbnN1bWVyXCIsIHNjb3BlKTtcbiAgICBjb25zdCBnZXRJdGVtcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25Ob2RlID0gY29udGV4dC5jb2xsZWN0aW9uUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWNvbGxlY3Rpb25Ob2RlKSByZXR1cm4gW107XG4gICAgICBjb25zdCBvcmRlcmVkTm9kZXMgPSBBcnJheS5mcm9tKGNvbGxlY3Rpb25Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoYFske0lURU1fREFUQV9BVFRSfV1gKSk7XG4gICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oY29udGV4dC5pdGVtTWFwLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IGl0ZW1zLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBvcmRlcmVkTm9kZXMuaW5kZXhPZihhLnJlZi5jdXJyZW50KSAtIG9yZGVyZWROb2Rlcy5pbmRleE9mKGIucmVmLmN1cnJlbnQpXG4gICAgICApO1xuICAgICAgcmV0dXJuIG9yZGVyZWRJdGVtcztcbiAgICB9LCBbY29udGV4dC5jb2xsZWN0aW9uUmVmLCBjb250ZXh0Lml0ZW1NYXBdKTtcbiAgICByZXR1cm4gZ2V0SXRlbXM7XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IFByb3ZpZGVyOiBDb2xsZWN0aW9uUHJvdmlkZXIsIFNsb3Q6IENvbGxlY3Rpb25TbG90LCBJdGVtU2xvdDogQ29sbGVjdGlvbkl0ZW1TbG90IH0sXG4gICAgdXNlQ29sbGVjdGlvbixcbiAgICBjcmVhdGVDb2xsZWN0aW9uU2NvcGVcbiAgXTtcbn1cblxuLy8gc3JjL2NvbGxlY3Rpb24udHN4XG5pbXBvcnQgUmVhY3QyIGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dFNjb3BlIGFzIGNyZWF0ZUNvbnRleHRTY29wZTIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyBhcyB1c2VDb21wb3NlZFJlZnMyIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgYXMgY3JlYXRlU2xvdDIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcblxuLy8gc3JjL29yZGVyZWQtZGljdGlvbmFyeS50c1xudmFyIF9faW5zdGFuY2lhdGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgT3JkZXJlZERpY3QgPSBjbGFzcyBfT3JkZXJlZERpY3QgZXh0ZW5kcyBNYXAge1xuICAja2V5cztcbiAgY29uc3RydWN0b3IoZW50cmllcykge1xuICAgIHN1cGVyKGVudHJpZXMpO1xuICAgIHRoaXMuI2tleXMgPSBbLi4uc3VwZXIua2V5cygpXTtcbiAgICBfX2luc3RhbmNpYXRlZC5zZXQodGhpcywgdHJ1ZSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoX19pbnN0YW5jaWF0ZWQuZ2V0KHRoaXMpKSB7XG4gICAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLiNrZXlzW3RoaXMuI2tleXMuaW5kZXhPZihrZXkpXSA9IGtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2tleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgaW5zZXJ0KGluZGV4LCBrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgaGFzID0gdGhpcy5oYXMoa2V5KTtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiNrZXlzLmxlbmd0aDtcbiAgICBjb25zdCByZWxhdGl2ZUluZGV4ID0gdG9TYWZlSW50ZWdlcihpbmRleCk7XG4gICAgbGV0IGFjdHVhbEluZGV4ID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbmd0aCArIHJlbGF0aXZlSW5kZXg7XG4gICAgY29uc3Qgc2FmZUluZGV4ID0gYWN0dWFsSW5kZXggPCAwIHx8IGFjdHVhbEluZGV4ID49IGxlbmd0aCA/IC0xIDogYWN0dWFsSW5kZXg7XG4gICAgaWYgKHNhZmVJbmRleCA9PT0gdGhpcy5zaXplIHx8IGhhcyAmJiBzYWZlSW5kZXggPT09IHRoaXMuc2l6ZSAtIDEgfHwgc2FmZUluZGV4ID09PSAtMSkge1xuICAgICAgdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZSArIChoYXMgPyAwIDogMSk7XG4gICAgaWYgKHJlbGF0aXZlSW5kZXggPCAwKSB7XG4gICAgICBhY3R1YWxJbmRleCsrO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gWy4uLnRoaXMuI2tleXNdO1xuICAgIGxldCBuZXh0VmFsdWU7XG4gICAgbGV0IHNob3VsZFNraXAgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gYWN0dWFsSW5kZXg7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gaSkge1xuICAgICAgICBsZXQgbmV4dEtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXlzW2ldID09PSBrZXkpIHtcbiAgICAgICAgICBuZXh0S2V5ID0ga2V5c1tpICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhcykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5nZXQobmV4dEtleSk7XG4gICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFzaG91bGRTa2lwICYmIGtleXNbaSAtIDFdID09PSBrZXkpIHtcbiAgICAgICAgICBzaG91bGRTa2lwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0ga2V5c1tzaG91bGRTa2lwID8gaSA6IGkgLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICBuZXh0VmFsdWUgPSB0aGlzLmdldChjdXJyZW50S2V5KTtcbiAgICAgICAgdGhpcy5kZWxldGUoY3VycmVudEtleSk7XG4gICAgICAgIHRoaXMuc2V0KGN1cnJlbnRLZXksIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHdpdGgoaW5kZXgsIGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IF9PcmRlcmVkRGljdCh0aGlzKTtcbiAgICBjb3B5Lmluc2VydChpbmRleCwga2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cbiAgYmVmb3JlKGtleSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4ja2V5cy5pbmRleE9mKGtleSkgLSAxO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVudHJ5QXQoaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IGtleS12YWx1ZSBwYWlyIGF0IHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGdpdmVuIGtleS5cbiAgICovXG4gIHNldEJlZm9yZShrZXksIG5ld0tleSwgdmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZXgsIG5ld0tleSwgdmFsdWUpO1xuICB9XG4gIGFmdGVyKGtleSkge1xuICAgIGxldCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGluZGV4ID0gaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLnNpemUgLSAxID8gLTEgOiBpbmRleCArIDE7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW50cnlBdChpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcga2V5LXZhbHVlIHBhaXIgYXQgdGhlIHBvc2l0aW9uIGFmdGVyIHRoZSBnaXZlbiBrZXkuXG4gICAqL1xuICBzZXRBZnRlcihrZXksIG5ld0tleSwgdmFsdWUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2tleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZXggKyAxLCBuZXdLZXksIHZhbHVlKTtcbiAgfVxuICBmaXJzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeUF0KDApO1xuICB9XG4gIGxhc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlBdCgtMSk7XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4ja2V5cyA9IFtdO1xuICAgIHJldHVybiBzdXBlci5jbGVhcigpO1xuICB9XG4gIGRlbGV0ZShrZXkpIHtcbiAgICBjb25zdCBkZWxldGVkID0gc3VwZXIuZGVsZXRlKGtleSk7XG4gICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgIHRoaXMuI2tleXMuc3BsaWNlKHRoaXMuI2tleXMuaW5kZXhPZihrZXkpLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cbiAgZGVsZXRlQXQoaW5kZXgpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmtleUF0KGluZGV4KTtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXQoaW5kZXgpIHtcbiAgICBjb25zdCBrZXkgPSBhdCh0aGlzLiNrZXlzLCBpbmRleCk7XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZW50cnlBdChpbmRleCkge1xuICAgIGNvbnN0IGtleSA9IGF0KHRoaXMuI2tleXMsIGluZGV4KTtcbiAgICBpZiAoa2V5ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBba2V5LCB0aGlzLmdldChrZXkpXTtcbiAgICB9XG4gIH1cbiAgaW5kZXhPZihrZXkpIHtcbiAgICByZXR1cm4gdGhpcy4ja2V5cy5pbmRleE9mKGtleSk7XG4gIH1cbiAga2V5QXQoaW5kZXgpIHtcbiAgICByZXR1cm4gYXQodGhpcy4ja2V5cywgaW5kZXgpO1xuICB9XG4gIGZyb20oa2V5LCBvZmZzZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBkZXN0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgaWYgKGRlc3QgPCAwKSBkZXN0ID0gMDtcbiAgICBpZiAoZGVzdCA+PSB0aGlzLnNpemUpIGRlc3QgPSB0aGlzLnNpemUgLSAxO1xuICAgIHJldHVybiB0aGlzLmF0KGRlc3QpO1xuICB9XG4gIGtleUZyb20oa2V5LCBvZmZzZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBkZXN0ID0gaW5kZXggKyBvZmZzZXQ7XG4gICAgaWYgKGRlc3QgPCAwKSBkZXN0ID0gMDtcbiAgICBpZiAoZGVzdCA+PSB0aGlzLnNpemUpIGRlc3QgPSB0aGlzLnNpemUgLSAxO1xuICAgIHJldHVybiB0aGlzLmtleUF0KGRlc3QpO1xuICB9XG4gIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMpIHtcbiAgICAgIGlmIChSZWZsZWN0LmFwcGx5KHByZWRpY2F0ZSwgdGhpc0FyZywgW2VudHJ5LCBpbmRleCwgdGhpc10pKSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBpZiAoUmVmbGVjdC5hcHBseShwcmVkaWNhdGUsIHRoaXNBcmcsIFtlbnRyeSwgaW5kZXgsIHRoaXNdKSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcykge1xuICAgICAgaWYgKFJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX09yZGVyZWREaWN0KGVudHJpZXMpO1xuICB9XG4gIG1hcChjYWxsYmFja2ZuLCB0aGlzQXJnKSB7XG4gICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBlbnRyaWVzLnB1c2goW2VudHJ5WzBdLCBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrZm4sIHRoaXNBcmcsIFtlbnRyeSwgaW5kZXgsIHRoaXNdKV0pO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfT3JkZXJlZERpY3QoZW50cmllcyk7XG4gIH1cbiAgcmVkdWNlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlXSA9IGFyZ3M7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWUgPz8gdGhpcy5hdCgwKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBhY2N1bXVsYXRvciA9IGVudHJ5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrZm4sIHRoaXMsIFthY2N1bXVsYXRvciwgZW50cnksIGluZGV4LCB0aGlzXSk7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbiAgcmVkdWNlUmlnaHQoLi4uYXJncykge1xuICAgIGNvbnN0IFtjYWxsYmFja2ZuLCBpbml0aWFsVmFsdWVdID0gYXJncztcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWUgPz8gdGhpcy5hdCgtMSk7XG4gICAgZm9yIChsZXQgaW5kZXggPSB0aGlzLnNpemUgLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuYXQoaW5kZXgpO1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLnNpemUgLSAxICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gZW50cnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRvciA9IFJlZmxlY3QuYXBwbHkoY2FsbGJhY2tmbiwgdGhpcywgW2FjY3VtdWxhdG9yLCBlbnRyeSwgaW5kZXgsIHRoaXNdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG4gIHRvU29ydGVkKGNvbXBhcmVGbikge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldLnNvcnQoY29tcGFyZUZuKTtcbiAgICByZXR1cm4gbmV3IF9PcmRlcmVkRGljdChlbnRyaWVzKTtcbiAgfVxuICB0b1JldmVyc2VkKCkge1xuICAgIGNvbnN0IHJldmVyc2VkID0gbmV3IF9PcmRlcmVkRGljdCgpO1xuICAgIGZvciAobGV0IGluZGV4ID0gdGhpcy5zaXplIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5rZXlBdChpbmRleCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHJldmVyc2VkLnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV2ZXJzZWQ7XG4gIH1cbiAgdG9TcGxpY2VkKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcygpXTtcbiAgICBlbnRyaWVzLnNwbGljZSguLi5hcmdzKTtcbiAgICByZXR1cm4gbmV3IF9PcmRlcmVkRGljdChlbnRyaWVzKTtcbiAgfVxuICBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IF9PcmRlcmVkRGljdCgpO1xuICAgIGxldCBzdG9wID0gdGhpcy5zaXplIC0gMTtcbiAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgc3RhcnQgPSBzdGFydCArIHRoaXMuc2l6ZTtcbiAgICB9XG4gICAgaWYgKGVuZCAhPT0gdm9pZCAwICYmIGVuZCA+IDApIHtcbiAgICAgIHN0b3AgPSBlbmQgLSAxO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0OyBpbmRleCA8PSBzdG9wOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmtleUF0KGluZGV4KTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldChrZXkpO1xuICAgICAgcmVzdWx0LnNldChrZXksIGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzKSB7XG4gICAgICBpZiAoIVJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc29tZShwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcykge1xuICAgICAgaWYgKFJlZmxlY3QuYXBwbHkocHJlZGljYXRlLCB0aGlzQXJnLCBbZW50cnksIGluZGV4LCB0aGlzXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5mdW5jdGlvbiBhdChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKFwiYXRcIiBpbiBBcnJheS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmF0LmNhbGwoYXJyYXksIGluZGV4KTtcbiAgfVxuICBjb25zdCBhY3R1YWxJbmRleCA9IHRvU2FmZUluZGV4KGFycmF5LCBpbmRleCk7XG4gIHJldHVybiBhY3R1YWxJbmRleCA9PT0gLTEgPyB2b2lkIDAgOiBhcnJheVthY3R1YWxJbmRleF07XG59XG5mdW5jdGlvbiB0b1NhZmVJbmRleChhcnJheSwgaW5kZXgpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBjb25zdCByZWxhdGl2ZUluZGV4ID0gdG9TYWZlSW50ZWdlcihpbmRleCk7XG4gIGNvbnN0IGFjdHVhbEluZGV4ID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbmd0aCArIHJlbGF0aXZlSW5kZXg7XG4gIHJldHVybiBhY3R1YWxJbmRleCA8IDAgfHwgYWN0dWFsSW5kZXggPj0gbGVuZ3RoID8gLTEgOiBhY3R1YWxJbmRleDtcbn1cbmZ1bmN0aW9uIHRvU2FmZUludGVnZXIobnVtYmVyKSB7XG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogTWF0aC50cnVuYyhudW1iZXIpO1xufVxuXG4vLyBzcmMvY29sbGVjdGlvbi50c3hcbmltcG9ydCB7IGpzeCBhcyBqc3gyIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVDb2xsZWN0aW9uMihuYW1lKSB7XG4gIGNvbnN0IFBST1ZJREVSX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uUHJvdmlkZXJcIjtcbiAgY29uc3QgW2NyZWF0ZUNvbGxlY3Rpb25Db250ZXh0LCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29udGV4dFNjb3BlMihQUk9WSURFUl9OQU1FKTtcbiAgY29uc3QgW0NvbGxlY3Rpb25Db250ZXh0UHJvdmlkZXIsIHVzZUNvbGxlY3Rpb25Db250ZXh0XSA9IGNyZWF0ZUNvbGxlY3Rpb25Db250ZXh0KFxuICAgIFBST1ZJREVSX05BTUUsXG4gICAge1xuICAgICAgY29sbGVjdGlvbkVsZW1lbnQ6IG51bGwsXG4gICAgICBjb2xsZWN0aW9uUmVmOiB7IGN1cnJlbnQ6IG51bGwgfSxcbiAgICAgIGNvbGxlY3Rpb25SZWZPYmplY3Q6IHsgY3VycmVudDogbnVsbCB9LFxuICAgICAgaXRlbU1hcDogbmV3IE9yZGVyZWREaWN0KCksXG4gICAgICBzZXRJdGVtTWFwOiAoKSA9PiB2b2lkIDBcbiAgICB9XG4gICk7XG4gIGNvbnN0IENvbGxlY3Rpb25Qcm92aWRlciA9ICh7IHN0YXRlLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlID8gLyogQF9fUFVSRV9fICovIGpzeDIoQ29sbGVjdGlvblByb3ZpZGVySW1wbCwgeyAuLi5wcm9wcywgc3RhdGUgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uSW5pdCwgeyAuLi5wcm9wcyB9KTtcbiAgfTtcbiAgQ29sbGVjdGlvblByb3ZpZGVyLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRTtcbiAgY29uc3QgQ29sbGVjdGlvbkluaXQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZUluaXRDb2xsZWN0aW9uKCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3gyKENvbGxlY3Rpb25Qcm92aWRlckltcGwsIHsgLi4ucHJvcHMsIHN0YXRlIH0pO1xuICB9O1xuICBDb2xsZWN0aW9uSW5pdC5kaXNwbGF5TmFtZSA9IFBST1ZJREVSX05BTUUgKyBcIkluaXRcIjtcbiAgY29uc3QgQ29sbGVjdGlvblByb3ZpZGVySW1wbCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNoaWxkcmVuLCBzdGF0ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgcmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbY29sbGVjdGlvbkVsZW1lbnQsIHNldENvbGxlY3Rpb25FbGVtZW50XSA9IFJlYWN0Mi51c2VTdGF0ZShcbiAgICAgIG51bGxcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvc2VSZWZzID0gdXNlQ29tcG9zZWRSZWZzMihyZWYsIHNldENvbGxlY3Rpb25FbGVtZW50KTtcbiAgICBjb25zdCBbaXRlbU1hcCwgc2V0SXRlbU1hcF0gPSBzdGF0ZTtcbiAgICBSZWFjdDIudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghY29sbGVjdGlvbkVsZW1lbnQpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gZ2V0Q2hpbGRMaXN0T2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgfSk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGNvbGxlY3Rpb25FbGVtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0sIFtjb2xsZWN0aW9uRWxlbWVudF0pO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihcbiAgICAgIENvbGxlY3Rpb25Db250ZXh0UHJvdmlkZXIsXG4gICAgICB7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpdGVtTWFwLFxuICAgICAgICBzZXRJdGVtTWFwLFxuICAgICAgICBjb2xsZWN0aW9uUmVmOiBjb21wb3NlUmVmcyxcbiAgICAgICAgY29sbGVjdGlvblJlZk9iamVjdDogcmVmLFxuICAgICAgICBjb2xsZWN0aW9uRWxlbWVudCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgIH1cbiAgICApO1xuICB9O1xuICBDb2xsZWN0aW9uUHJvdmlkZXJJbXBsLmRpc3BsYXlOYW1lID0gUFJPVklERVJfTkFNRSArIFwiSW1wbFwiO1xuICBjb25zdCBDT0xMRUNUSU9OX1NMT1RfTkFNRSA9IG5hbWUgKyBcIkNvbGxlY3Rpb25TbG90XCI7XG4gIGNvbnN0IENvbGxlY3Rpb25TbG90SW1wbCA9IGNyZWF0ZVNsb3QyKENPTExFQ1RJT05fU0xPVF9OQU1FKTtcbiAgY29uc3QgQ29sbGVjdGlvblNsb3QgPSBSZWFjdDIuZm9yd2FyZFJlZihcbiAgICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgICAgY29uc3QgeyBzY29wZSwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICAgICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxlY3Rpb25Db250ZXh0KENPTExFQ1RJT05fU0xPVF9OQU1FLCBzY29wZSk7XG4gICAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMyKGZvcndhcmRlZFJlZiwgY29udGV4dC5jb2xsZWN0aW9uUmVmKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uU2xvdEltcGwsIHsgcmVmOiBjb21wb3NlZFJlZnMsIGNoaWxkcmVuIH0pO1xuICAgIH1cbiAgKTtcbiAgQ29sbGVjdGlvblNsb3QuZGlzcGxheU5hbWUgPSBDT0xMRUNUSU9OX1NMT1RfTkFNRTtcbiAgY29uc3QgSVRFTV9TTE9UX05BTUUgPSBuYW1lICsgXCJDb2xsZWN0aW9uSXRlbVNsb3RcIjtcbiAgY29uc3QgSVRFTV9EQVRBX0FUVFIgPSBcImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtXCI7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdEltcGwgPSBjcmVhdGVTbG90MihJVEVNX1NMT1RfTkFNRSk7XG4gIGNvbnN0IENvbGxlY3Rpb25JdGVtU2xvdCA9IFJlYWN0Mi5mb3J3YXJkUmVmKFxuICAgIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgICBjb25zdCB7IHNjb3BlLCBjaGlsZHJlbiwgLi4uaXRlbURhdGEgfSA9IHByb3BzO1xuICAgICAgY29uc3QgcmVmID0gUmVhY3QyLnVzZVJlZihudWxsKTtcbiAgICAgIGNvbnN0IFtlbGVtZW50LCBzZXRFbGVtZW50XSA9IFJlYWN0Mi51c2VTdGF0ZShudWxsKTtcbiAgICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmczIoZm9yd2FyZGVkUmVmLCByZWYsIHNldEVsZW1lbnQpO1xuICAgICAgY29uc3QgY29udGV4dCA9IHVzZUNvbGxlY3Rpb25Db250ZXh0KElURU1fU0xPVF9OQU1FLCBzY29wZSk7XG4gICAgICBjb25zdCB7IHNldEl0ZW1NYXAgfSA9IGNvbnRleHQ7XG4gICAgICBjb25zdCBpdGVtRGF0YVJlZiA9IFJlYWN0Mi51c2VSZWYoaXRlbURhdGEpO1xuICAgICAgaWYgKCFzaGFsbG93RXF1YWwoaXRlbURhdGFSZWYuY3VycmVudCwgaXRlbURhdGEpKSB7XG4gICAgICAgIGl0ZW1EYXRhUmVmLmN1cnJlbnQgPSBpdGVtRGF0YTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lbW9pemVkSXRlbURhdGEgPSBpdGVtRGF0YVJlZi5jdXJyZW50O1xuICAgICAgUmVhY3QyLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1EYXRhMiA9IG1lbW9pemVkSXRlbURhdGE7XG4gICAgICAgIHNldEl0ZW1NYXAoKG1hcCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBtYXAuc2V0KGVsZW1lbnQsIHsgLi4uaXRlbURhdGEyLCBlbGVtZW50IH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcC50b1NvcnRlZChzb3J0QnlEb2N1bWVudFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hcC5zZXQoZWxlbWVudCwgeyAuLi5pdGVtRGF0YTIsIGVsZW1lbnQgfSkudG9Tb3J0ZWQoc29ydEJ5RG9jdW1lbnRQb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHNldEl0ZW1NYXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFtYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkRGljdChtYXApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSwgW2VsZW1lbnQsIG1lbW9pemVkSXRlbURhdGEsIHNldEl0ZW1NYXBdKTtcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4MihDb2xsZWN0aW9uSXRlbVNsb3RJbXBsLCB7IC4uLnsgW0lURU1fREFUQV9BVFRSXTogXCJcIiB9LCByZWY6IGNvbXBvc2VkUmVmcywgY2hpbGRyZW4gfSk7XG4gICAgfVxuICApO1xuICBDb2xsZWN0aW9uSXRlbVNsb3QuZGlzcGxheU5hbWUgPSBJVEVNX1NMT1RfTkFNRTtcbiAgZnVuY3Rpb24gdXNlSW5pdENvbGxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0Mi51c2VTdGF0ZShuZXcgT3JkZXJlZERpY3QoKSk7XG4gIH1cbiAgZnVuY3Rpb24gdXNlQ29sbGVjdGlvbihzY29wZSkge1xuICAgIGNvbnN0IHsgaXRlbU1hcCB9ID0gdXNlQ29sbGVjdGlvbkNvbnRleHQobmFtZSArIFwiQ29sbGVjdGlvbkNvbnN1bWVyXCIsIHNjb3BlKTtcbiAgICByZXR1cm4gaXRlbU1hcDtcbiAgfVxuICBjb25zdCBmdW5jdGlvbnMgPSB7XG4gICAgY3JlYXRlQ29sbGVjdGlvblNjb3BlLFxuICAgIHVzZUNvbGxlY3Rpb24sXG4gICAgdXNlSW5pdENvbGxlY3Rpb25cbiAgfTtcbiAgcmV0dXJuIFtcbiAgICB7IFByb3ZpZGVyOiBDb2xsZWN0aW9uUHJvdmlkZXIsIFNsb3Q6IENvbGxlY3Rpb25TbG90LCBJdGVtU2xvdDogQ29sbGVjdGlvbkl0ZW1TbG90IH0sXG4gICAgZnVuY3Rpb25zXG4gIF07XG59XG5mdW5jdGlvbiBzaGFsbG93RXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnRQcmVjZWRpbmcoYSwgYikge1xuICByZXR1cm4gISEoYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HKTtcbn1cbmZ1bmN0aW9uIHNvcnRCeURvY3VtZW50UG9zaXRpb24oYSwgYikge1xuICByZXR1cm4gIWFbMV0uZWxlbWVudCB8fCAhYlsxXS5lbGVtZW50ID8gMCA6IGlzRWxlbWVudFByZWNlZGluZyhhWzFdLmVsZW1lbnQsIGJbMV0uZWxlbWVudCkgPyAtMSA6IDE7XG59XG5mdW5jdGlvbiBnZXRDaGlsZExpc3RPYnNlcnZlcihjYWxsYmFjaykge1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufVxuZXhwb3J0IHtcbiAgY3JlYXRlQ29sbGVjdGlvbixcbiAgY3JlYXRlQ29sbGVjdGlvbjIgYXMgdW5zdGFibGVfY3JlYXRlQ29sbGVjdGlvblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsIi8vIHBhY2thZ2VzL3JlYWN0L2RpcmVjdGlvbi9zcmMvZGlyZWN0aW9uLnRzeFxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBqc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbnZhciBEaXJlY3Rpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh2b2lkIDApO1xudmFyIERpcmVjdGlvblByb3ZpZGVyID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZGlyLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KERpcmVjdGlvbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGRpciwgY2hpbGRyZW4gfSk7XG59O1xuZnVuY3Rpb24gdXNlRGlyZWN0aW9uKGxvY2FsRGlyKSB7XG4gIGNvbnN0IGdsb2JhbERpciA9IFJlYWN0LnVzZUNvbnRleHQoRGlyZWN0aW9uQ29udGV4dCk7XG4gIHJldHVybiBsb2NhbERpciB8fCBnbG9iYWxEaXIgfHwgXCJsdHJcIjtcbn1cbnZhciBQcm92aWRlciA9IERpcmVjdGlvblByb3ZpZGVyO1xuZXhwb3J0IHtcbiAgRGlyZWN0aW9uUHJvdmlkZXIsXG4gIFByb3ZpZGVyLFxuICB1c2VEaXJlY3Rpb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4iLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2ZvY3VzLWd1YXJkcy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIGNvdW50ID0gMDtcbmZ1bmN0aW9uIEZvY3VzR3VhcmRzKHByb3BzKSB7XG4gIHVzZUZvY3VzR3VhcmRzKCk7XG4gIHJldHVybiBwcm9wcy5jaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIHVzZUZvY3VzR3VhcmRzKCkge1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVkZ2VHdWFyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBlZGdlR3VhcmRzWzBdID8/IGNyZWF0ZUZvY3VzR3VhcmQoKSk7XG4gICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgZWRnZUd1YXJkc1sxXSA/PyBjcmVhdGVGb2N1c0d1YXJkKCkpO1xuICAgIGNvdW50Kys7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdXCIpLmZvckVhY2goKG5vZGUpID0+IG5vZGUucmVtb3ZlKCkpO1xuICAgICAgfVxuICAgICAgY291bnQtLTtcbiAgICB9O1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGb2N1c0d1YXJkKCkge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1yYWRpeC1mb2N1cy1ndWFyZFwiLCBcIlwiKTtcbiAgZWxlbWVudC50YWJJbmRleCA9IDA7XG4gIGVsZW1lbnQuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIHJldHVybiBlbGVtZW50O1xufVxuZXhwb3J0IHtcbiAgRm9jdXNHdWFyZHMsXG4gIEZvY3VzR3VhcmRzIGFzIFJvb3QsXG4gIHVzZUZvY3VzR3VhcmRzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9mb2N1cy1zY29wZS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNhbGxiYWNrLXJlZlwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgQVVUT0ZPQ1VTX09OX01PVU5UID0gXCJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnRcIjtcbnZhciBBVVRPRk9DVVNfT05fVU5NT1VOVCA9IFwiZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnRcIjtcbnZhciBFVkVOVF9PUFRJT05TID0geyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogdHJ1ZSB9O1xudmFyIEZPQ1VTX1NDT1BFX05BTUUgPSBcIkZvY3VzU2NvcGVcIjtcbnZhciBGb2N1c1Njb3BlID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgbG9vcCA9IGZhbHNlLFxuICAgIHRyYXBwZWQgPSBmYWxzZSxcbiAgICBvbk1vdW50QXV0b0ZvY3VzOiBvbk1vdW50QXV0b0ZvY3VzUHJvcCxcbiAgICBvblVubW91bnRBdXRvRm9jdXM6IG9uVW5tb3VudEF1dG9Gb2N1c1Byb3AsXG4gICAgLi4uc2NvcGVQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb250YWluZXIsIHNldENvbnRhaW5lcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qgb25Nb3VudEF1dG9Gb2N1cyA9IHVzZUNhbGxiYWNrUmVmKG9uTW91bnRBdXRvRm9jdXNQcm9wKTtcbiAgY29uc3Qgb25Vbm1vdW50QXV0b0ZvY3VzID0gdXNlQ2FsbGJhY2tSZWYob25Vbm1vdW50QXV0b0ZvY3VzUHJvcCk7XG4gIGNvbnN0IGxhc3RGb2N1c2VkRWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgKG5vZGUpID0+IHNldENvbnRhaW5lcihub2RlKSk7XG4gIGNvbnN0IGZvY3VzU2NvcGUgPSBSZWFjdC51c2VSZWYoe1xuICAgIHBhdXNlZDogZmFsc2UsXG4gICAgcGF1c2UoKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgfSxcbiAgICByZXN1bWUoKSB7XG4gICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSkuY3VycmVudDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHJhcHBlZCkge1xuICAgICAgbGV0IGhhbmRsZUZvY3VzSW4yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGZvY3VzU2NvcGUucGF1c2VkIHx8ICFjb250YWluZXIpIHJldHVybjtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoY29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb2N1cyhsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCwgeyBzZWxlY3Q6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGhhbmRsZUZvY3VzT3V0MiA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGlmIChmb2N1c1Njb3BlLnBhdXNlZCB8fCAhY29udGFpbmVyKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWNvbnRhaW5lci5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgIGZvY3VzKGxhc3RGb2N1c2VkRWxlbWVudFJlZi5jdXJyZW50LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgaGFuZGxlTXV0YXRpb25zMiA9IGZ1bmN0aW9uKG11dGF0aW9ucykge1xuICAgICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChmb2N1c2VkRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMCkgZm9jdXMoY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBoYW5kbGVGb2N1c0luID0gaGFuZGxlRm9jdXNJbjIsIGhhbmRsZUZvY3VzT3V0ID0gaGFuZGxlRm9jdXNPdXQyLCBoYW5kbGVNdXRhdGlvbnMgPSBoYW5kbGVNdXRhdGlvbnMyO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgaGFuZGxlRm9jdXNJbjIpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGhhbmRsZUZvY3VzT3V0Mik7XG4gICAgICBjb25zdCBtdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTXV0YXRpb25zMik7XG4gICAgICBpZiAoY29udGFpbmVyKSBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIGhhbmRsZUZvY3VzSW4yKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGhhbmRsZUZvY3VzT3V0Mik7XG4gICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFt0cmFwcGVkLCBjb250YWluZXIsIGZvY3VzU2NvcGUucGF1c2VkXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgZm9jdXNTY29wZXNTdGFjay5hZGQoZm9jdXNTY29wZSk7XG4gICAgICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgY29uc3QgaGFzRm9jdXNlZENhbmRpZGF0ZSA9IGNvbnRhaW5lci5jb250YWlucyhwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO1xuICAgICAgaWYgKCFoYXNGb2N1c2VkQ2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IG1vdW50RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQVVUT0ZPQ1VTX09OX01PVU5ULCBFVkVOVF9PUFRJT05TKTtcbiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoQVVUT0ZPQ1VTX09OX01PVU5ULCBvbk1vdW50QXV0b0ZvY3VzKTtcbiAgICAgICAgY29udGFpbmVyLmRpc3BhdGNoRXZlbnQobW91bnRFdmVudCk7XG4gICAgICAgIGlmICghbW91bnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgZm9jdXNGaXJzdChyZW1vdmVMaW5rcyhnZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyKSksIHsgc2VsZWN0OiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvY3VzKGNvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihBVVRPRk9DVVNfT05fTU9VTlQsIG9uTW91bnRBdXRvRm9jdXMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bm1vdW50RXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoQVVUT0ZPQ1VTX09OX1VOTU9VTlQsIEVWRU5UX09QVElPTlMpO1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKEFVVE9GT0NVU19PTl9VTk1PVU5ULCBvblVubW91bnRBdXRvRm9jdXMpO1xuICAgICAgICAgIGNvbnRhaW5lci5kaXNwYXRjaEV2ZW50KHVubW91bnRFdmVudCk7XG4gICAgICAgICAgaWYgKCF1bm1vdW50RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgZm9jdXMocHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID8/IGRvY3VtZW50LmJvZHksIHsgc2VsZWN0OiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihBVVRPRk9DVVNfT05fVU5NT1VOVCwgb25Vbm1vdW50QXV0b0ZvY3VzKTtcbiAgICAgICAgICBmb2N1c1Njb3Blc1N0YWNrLnJlbW92ZShmb2N1c1Njb3BlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgb25Nb3VudEF1dG9Gb2N1cywgb25Vbm1vdW50QXV0b0ZvY3VzLCBmb2N1c1Njb3BlXSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghbG9vcCAmJiAhdHJhcHBlZCkgcmV0dXJuO1xuICAgICAgaWYgKGZvY3VzU2NvcGUucGF1c2VkKSByZXR1cm47XG4gICAgICBjb25zdCBpc1RhYktleSA9IGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5O1xuICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGlzVGFiS2V5ICYmIGZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcjIgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBjb25zdCBbZmlyc3QsIGxhc3RdID0gZ2V0VGFiYmFibGVFZGdlcyhjb250YWluZXIyKTtcbiAgICAgICAgY29uc3QgaGFzVGFiYmFibGVFbGVtZW50c0luc2lkZSA9IGZpcnN0ICYmIGxhc3Q7XG4gICAgICAgIGlmICghaGFzVGFiYmFibGVFbGVtZW50c0luc2lkZSkge1xuICAgICAgICAgIGlmIChmb2N1c2VkRWxlbWVudCA9PT0gY29udGFpbmVyMikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGZvY3VzZWRFbGVtZW50ID09PSBsYXN0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKGxvb3ApIGZvY3VzKGZpcnN0LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGZvY3VzZWRFbGVtZW50ID09PSBmaXJzdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChsb29wKSBmb2N1cyhsYXN0LCB7IHNlbGVjdDogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtsb29wLCB0cmFwcGVkLCBmb2N1c1Njb3BlLnBhdXNlZF1cbiAgKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyB0YWJJbmRleDogLTEsIC4uLnNjb3BlUHJvcHMsIHJlZjogY29tcG9zZWRSZWZzLCBvbktleURvd246IGhhbmRsZUtleURvd24gfSk7XG59KTtcbkZvY3VzU2NvcGUuZGlzcGxheU5hbWUgPSBGT0NVU19TQ09QRV9OQU1FO1xuZnVuY3Rpb24gZm9jdXNGaXJzdChjYW5kaWRhdGVzLCB7IHNlbGVjdCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgZm9jdXMoY2FuZGlkYXRlLCB7IHNlbGVjdCB9KTtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSByZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRhYmJhYmxlRWRnZXMoY29udGFpbmVyKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRUYWJiYWJsZUNhbmRpZGF0ZXMoY29udGFpbmVyKTtcbiAgY29uc3QgZmlyc3QgPSBmaW5kVmlzaWJsZShjYW5kaWRhdGVzLCBjb250YWluZXIpO1xuICBjb25zdCBsYXN0ID0gZmluZFZpc2libGUoY2FuZGlkYXRlcy5yZXZlcnNlKCksIGNvbnRhaW5lcik7XG4gIHJldHVybiBbZmlyc3QsIGxhc3RdO1xufVxuZnVuY3Rpb24gZ2V0VGFiYmFibGVDYW5kaWRhdGVzKGNvbnRhaW5lcikge1xuICBjb25zdCBub2RlcyA9IFtdO1xuICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGNvbnRhaW5lciwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICBhY2NlcHROb2RlOiAobm9kZSkgPT4ge1xuICAgICAgY29uc3QgaXNIaWRkZW5JbnB1dCA9IG5vZGUudGFnTmFtZSA9PT0gXCJJTlBVVFwiICYmIG5vZGUudHlwZSA9PT0gXCJoaWRkZW5cIjtcbiAgICAgIGlmIChub2RlLmRpc2FibGVkIHx8IG5vZGUuaGlkZGVuIHx8IGlzSGlkZGVuSW5wdXQpIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgcmV0dXJuIG5vZGUudGFiSW5kZXggPj0gMCA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgfVxuICB9KTtcbiAgd2hpbGUgKHdhbGtlci5uZXh0Tm9kZSgpKSBub2Rlcy5wdXNoKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gIHJldHVybiBub2Rlcztcbn1cbmZ1bmN0aW9uIGZpbmRWaXNpYmxlKGVsZW1lbnRzLCBjb250YWluZXIpIHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgaWYgKCFpc0hpZGRlbihlbGVtZW50LCB7IHVwVG86IGNvbnRhaW5lciB9KSkgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSGlkZGVuKG5vZGUsIHsgdXBUbyB9KSB7XG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHJldHVybiB0cnVlO1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmICh1cFRvICE9PSB2b2lkIDAgJiYgbm9kZSA9PT0gdXBUbykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG5vZGUpLmRpc3BsYXkgPT09IFwibm9uZVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzU2VsZWN0YWJsZUlucHV0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIFwic2VsZWN0XCIgaW4gZWxlbWVudDtcbn1cbmZ1bmN0aW9uIGZvY3VzKGVsZW1lbnQsIHsgc2VsZWN0ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuZm9jdXMpIHtcbiAgICBjb25zdCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIGlmIChlbGVtZW50ICE9PSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgJiYgaXNTZWxlY3RhYmxlSW5wdXQoZWxlbWVudCkgJiYgc2VsZWN0KVxuICAgICAgZWxlbWVudC5zZWxlY3QoKTtcbiAgfVxufVxudmFyIGZvY3VzU2NvcGVzU3RhY2sgPSBjcmVhdGVGb2N1c1Njb3Blc1N0YWNrKCk7XG5mdW5jdGlvbiBjcmVhdGVGb2N1c1Njb3Blc1N0YWNrKCkge1xuICBsZXQgc3RhY2sgPSBbXTtcbiAgcmV0dXJuIHtcbiAgICBhZGQoZm9jdXNTY29wZSkge1xuICAgICAgY29uc3QgYWN0aXZlRm9jdXNTY29wZSA9IHN0YWNrWzBdO1xuICAgICAgaWYgKGZvY3VzU2NvcGUgIT09IGFjdGl2ZUZvY3VzU2NvcGUpIHtcbiAgICAgICAgYWN0aXZlRm9jdXNTY29wZT8ucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIHN0YWNrID0gYXJyYXlSZW1vdmUoc3RhY2ssIGZvY3VzU2NvcGUpO1xuICAgICAgc3RhY2sudW5zaGlmdChmb2N1c1Njb3BlKTtcbiAgICB9LFxuICAgIHJlbW92ZShmb2N1c1Njb3BlKSB7XG4gICAgICBzdGFjayA9IGFycmF5UmVtb3ZlKHN0YWNrLCBmb2N1c1Njb3BlKTtcbiAgICAgIHN0YWNrWzBdPy5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBhcnJheVJlbW92ZShhcnJheSwgaXRlbSkge1xuICBjb25zdCB1cGRhdGVkQXJyYXkgPSBbLi4uYXJyYXldO1xuICBjb25zdCBpbmRleCA9IHVwZGF0ZWRBcnJheS5pbmRleE9mKGl0ZW0pO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdXBkYXRlZEFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZWRBcnJheTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxpbmtzKGl0ZW1zKSB7XG4gIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFnTmFtZSAhPT0gXCJBXCIpO1xufVxudmFyIFJvb3QgPSBGb2N1c1Njb3BlO1xuZXhwb3J0IHtcbiAgRm9jdXNTY29wZSxcbiAgUm9vdFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBnZXREZWZhdWx0UGFyZW50ID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzYW1wbGVUYXJnZXQgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0WzBdIDogb3JpZ2luYWxUYXJnZXQ7XG4gICAgcmV0dXJuIHNhbXBsZVRhcmdldC5vd25lckRvY3VtZW50LmJvZHk7XG59O1xudmFyIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xudmFyIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBtYXJrZXJNYXAgPSB7fTtcbnZhciBsb2NrQ291bnQgPSAwO1xudmFyIHVud3JhcEhvc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIChub2RlLmhvc3QgfHwgdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpKTtcbn07XG52YXIgY29ycmVjdFRhcmdldHMgPSBmdW5jdGlvbiAocGFyZW50LCB0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChwYXJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ycmVjdGVkVGFyZ2V0ID0gdW53cmFwSG9zdCh0YXJnZXQpO1xuICAgICAgICBpZiAoY29ycmVjdGVkVGFyZ2V0ICYmIHBhcmVudC5jb250YWlucyhjb3JyZWN0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdGVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuJywgdGFyZ2V0LCAnaW4gbm90IGNvbnRhaW5lZCBpbnNpZGUnLCBwYXJlbnQsICcuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfSk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbnRyb2xBdHRyaWJ1dGVdIC0gaHRtbCBBdHRyaWJ1dGUgdG8gY29udHJvbFxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbnZhciBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lLCBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldHMgPSBjb3JyZWN0VGFyZ2V0cyhwYXJlbnROb2RlLCBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgaWYgKCFtYXJrZXJNYXBbbWFya2VyTmFtZV0pIHtcbiAgICAgICAgbWFya2VyTWFwW21hcmtlck5hbWVdID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgdmFyIG1hcmtlckNvdW50ZXIgPSBtYXJrZXJNYXBbbWFya2VyTmFtZV07XG4gICAgdmFyIGhpZGRlbk5vZGVzID0gW107XG4gICAgdmFyIGVsZW1lbnRzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgIHZhciBlbGVtZW50c1RvU3RvcCA9IG5ldyBTZXQodGFyZ2V0cyk7XG4gICAgdmFyIGtlZXAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9O1xuICAgIHRhcmdldHMuZm9yRWFjaChrZWVwKTtcbiAgICB2YXIgZGVlcCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgZWxlbWVudHNUb1N0b3AuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlIaWRkZW4gPSBhdHRyICE9PSBudWxsICYmIGF0dHIgIT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSAoY291bnRlck1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJWYWx1ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobWFya2VyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uICcsIG5vZGUsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyXG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgbWFya2VyTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWFyaWEtaGlkZGVuJzsgfVxuICAgIHZhciB0YXJnZXRzID0gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2hvdWxkIG5vdCBoaWRlIGFyaWEtbGl2ZSBlbGVtZW50cyAtIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvYXJpYS1oaWRkZW4vaXNzdWVzLzEwXG4gICAgLy8gYW5kIHNjcmlwdCBlbGVtZW50cywgYXMgdGhleSBoYXZlIG5vIGltcGFjdCBvbiBhY2Nlc3NpYmlsaXR5LlxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0sIHNjcmlwdCcpKSk7XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnModGFyZ2V0cywgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2FyaWEtaGlkZGVuJyk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBpbmVydFxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBpbmVydE90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWluZXJ0LWVkJzsgfVxuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKG9yaWdpbmFsVGFyZ2V0LCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnaW5lcnQnKTtcbn07XG4vKipcbiAqIEByZXR1cm5zIGlmIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBpbmVydFxuICovXG5leHBvcnQgdmFyIHN1cHBvcnRzSW5lcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgSFRNTEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpbmVydCcpO1xufTtcbi8qKlxuICogQXV0b21hdGljIGZ1bmN0aW9uIHRvIFwic3VwcHJlc3NcIiBET00gZWxlbWVudHMgLSBfaGlkZV8gb3IgX2luZXJ0XyBpbiB0aGUgYmVzdCBwb3NzaWJsZSB3YXlcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgc3VwcHJlc3NPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1zdXBwcmVzc2VkJzsgfVxuICAgIHJldHVybiAoc3VwcG9ydHNJbmVydCgpID8gaW5lcnRPdGhlcnMgOiBoaWRlT3RoZXJzKShvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSk7XG59O1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIiwiZXhwb3J0IHZhciB6ZXJvUmlnaHRDbGFzc05hbWUgPSAncmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbic7XG5leHBvcnQgdmFyIGZ1bGxXaWR0aENsYXNzTmFtZSA9ICd3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhcic7XG5leHBvcnQgdmFyIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSA9ICd3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbic7XG4vKipcbiAqIE5hbWUgb2YgYSBDU1MgdmFyaWFibGUgY29udGFpbmluZyB0aGUgYW1vdW50IG9mIFwiaGlkZGVuXCIgc2Nyb2xsYmFyXG4gKiAhIG1pZ2h0IGJlIHVuZGVmaW5lZCAhIHVzZSB3aWxsIGZhbGxiYWNrIVxuICovXG5leHBvcnQgdmFyIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgPSAnLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplJztcbiIsIi8qKlxuICogQXNzaWducyBhIHZhbHVlIGZvciBhIGdpdmVuIHJlZiwgbm8gbWF0dGVyIG9mIHRoZSByZWYgZm9ybWF0XG4gKiBAcGFyYW0ge1JlZk9iamVjdH0gcmVmIC0gYSBjYWxsYmFjayBmdW5jdGlvbiBvciByZWYgb2JqZWN0XG4gKiBAcGFyYW0gdmFsdWUgLSBhIG5ldyB2YWx1ZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI2Fzc2lnbnJlZlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZk9iamVjdCA9IHVzZVJlZigpO1xuICogY29uc3QgcmVmRm4gPSAocmVmKSA9PiB7Li4uLn1cbiAqXG4gKiBhc3NpZ25SZWYocmVmT2JqZWN0LCBcInJlZlZhbHVlXCIpO1xuICogYXNzaWduUmVmKHJlZkZuLCBcInJlZlZhbHVlXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduUmVmKHJlZiwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZjtcbn1cbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ25SZWYgfSBmcm9tICcuL2Fzc2lnblJlZic7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG52YXIgY3VycmVudFZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE1lcmdlcyB0d28gb3IgbW9yZSByZWZzIHRvZ2V0aGVyIHByb3ZpZGluZyBhIHNpbmdsZSBpbnRlcmZhY2UgdG8gc2V0IHRoZWlyIHZhbHVlXG4gKiBAcGFyYW0ge1JlZk9iamVjdHxSZWZ9IHJlZnNcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fSAtIGEgbmV3IHJlZiwgd2hpY2ggdHJhbnNsYXRlcyBhbGwgY2hhbmdlcyB0byB7cmVmc31cbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZVJlZnN9IGEgdmVyc2lvbiB3aXRob3V0IGJ1aXQtaW4gbWVtb2l6YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZW1lcmdlcmVmc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgY29uc3Qgb3duUmVmID0gdXNlUmVmKCk7XG4gKiAgIGNvbnN0IGRvbVJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBvd25SZWZdKTsgLy8g8J+RiCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgbm90aGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm47XG59O1xuLyoqXG4gKiBSZW1vdmVzIHNjcm9sbGJhciBmcm9tIHRoZSBwYWdlIGFuZCBjb250YWluIHRoZSBzY3JvbGwgd2l0aGluIHRoZSBMb2NrXG4gKi9cbnZhciBSZW1vdmVTY3JvbGwgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25XaGVlbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbm90aGluZyxcbiAgICB9KSwgY2FsbGJhY2tzID0gX2FbMF0sIHNldENhbGxiYWNrcyA9IF9hWzFdO1xuICAgIHZhciBmb3J3YXJkUHJvcHMgPSBwcm9wcy5mb3J3YXJkUHJvcHMsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVtb3ZlU2Nyb2xsQmFyID0gcHJvcHMucmVtb3ZlU2Nyb2xsQmFyLCBlbmFibGVkID0gcHJvcHMuZW5hYmxlZCwgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgbm9SZWxhdGl2ZSA9IHByb3BzLm5vUmVsYXRpdmUsIG5vSXNvbGF0aW9uID0gcHJvcHMubm9Jc29sYXRpb24sIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIF9iID0gcHJvcHMuYXMsIENvbnRhaW5lciA9IF9iID09PSB2b2lkIDAgPyAnZGl2JyA6IF9iLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiZm9yd2FyZFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZW1vdmVTY3JvbGxCYXJcIiwgXCJlbmFibGVkXCIsIFwic2hhcmRzXCIsIFwic2lkZUNhclwiLCBcIm5vUmVsYXRpdmVcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9SZWxhdGl2ZTogbm9SZWxhdGl2ZSwgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIFNpZGVDYXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2lkZUNhciA9IF9hLnNpZGVDYXIsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcInNpZGVDYXJcIl0pO1xuICAgIGlmICghc2lkZUNhcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhcicpO1xuICAgIH1cbiAgICB2YXIgVGFyZ2V0ID0gc2lkZUNhci5yZWFkKCk7XG4gICAgaWYgKCFUYXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFyZ2V0LCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xufTtcblNpZGVDYXIuaXNTaWRlQ2FyRXhwb3J0ID0gdHJ1ZTtcbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRTaWRlY2FyKG1lZGl1bSwgZXhwb3J0ZWQpIHtcbiAgICBtZWRpdW0udXNlTWVkaXVtKGV4cG9ydGVkKTtcbiAgICByZXR1cm4gU2lkZUNhcjtcbn1cbiIsInZhciBjdXJyZW50Tm9uY2U7XG5leHBvcnQgdmFyIHNldE5vbmNlID0gZnVuY3Rpb24gKG5vbmNlKSB7XG4gICAgY3VycmVudE5vbmNlID0gbm9uY2U7XG59O1xuZXhwb3J0IHZhciBnZXROb25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3VycmVudE5vbmNlKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9uY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBfX3dlYnBhY2tfbm9uY2VfXztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gJ2dldC1ub25jZSc7XG5mdW5jdGlvbiBtYWtlU3R5bGVUYWcoKSB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgdGFnLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIHZhciBub25jZSA9IGdldE5vbmNlKCk7XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFnO1xufVxuZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHRhZywgY3NzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YWcuc3R5bGVTaGVldCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhZy5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVUYWcodGFnKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xufVxuZXhwb3J0IHZhciBzdHlsZXNoZWV0U2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlc2hlZXQgPSBtYWtlU3R5bGVUYWcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG4vKipcbiAqIGNyZWF0ZXMgYSBob29rIHRvIGNvbnRyb2wgc3R5bGUgc2luZ2xldG9uXG4gKiBAc2VlIHtAbGluayBzdHlsZVNpbmdsZXRvbn0gZm9yIGEgc2FmZXIgY29tcG9uZW50IHZlcnNpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gKiAvLy9cbiAqIHVzZVN0eWxlKCdib2R5IHsgb3ZlcmZsb3c6IGhpZGRlbn0nKTtcbiAqL1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzLCBpc0R5bmFtaWMpIHtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZChzdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaGVldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtzdHlsZXMgJiYgaXNEeW5hbWljXSk7XG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuLyoqXG4gKiBjcmVhdGUgYSBDb21wb25lbnQgdG8gYWRkIHN0eWxlcyBvbiBkZW1hbmRcbiAqIC0gc3R5bGVzIGFyZSBhZGRlZCB3aGVuIGZpcnN0IGluc3RhbmNlIGlzIG1vdW50ZWRcbiAqIC0gc3R5bGVzIGFyZSByZW1vdmVkIHdoZW4gdGhlIGxhc3QgaW5zdGFuY2UgaXMgdW5tb3VudGVkXG4gKiAtIGNoYW5naW5nIHN0eWxlcyBpbiBydW50aW1lIGRvZXMgbm90aGluZyB1bmxlc3MgZHluYW1pYyBpcyBzZXQuIEJ1dCB3aXRoIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBjYW4gbGVhZCB0byB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gICAgdmFyIFNoZWV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBfYS5zdHlsZXMsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICB1c2VTdHlsZShzdHlsZXMsIGR5bmFtaWMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBTaGVldDtcbn07XG4iLCJleHBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJy4vY29tcG9uZW50JztcbmV4cG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG5leHBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuIiwiZXhwb3J0IHZhciB6ZXJvR2FwID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGdhcDogMCxcbn07XG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcGFyc2VJbnQoeCB8fCAnJywgMTApIHx8IDA7IH07XG52YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICB2YXIgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICB2YXIgbGVmdCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nTGVmdCcgOiAnbWFyZ2luTGVmdCddO1xuICAgIHZhciB0b3AgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1RvcCcgOiAnbWFyZ2luVG9wJ107XG4gICAgdmFyIHJpZ2h0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdSaWdodCcgOiAnbWFyZ2luUmlnaHQnXTtcbiAgICByZXR1cm4gW3BhcnNlKGxlZnQpLCBwYXJzZSh0b3ApLCBwYXJzZShyaWdodCldO1xufTtcbmV4cG9ydCB2YXIgZ2V0R2FwV2lkdGggPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB6ZXJvR2FwO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldChnYXBNb2RlKTtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBvZmZzZXRzWzBdLFxuICAgICAgICB0b3A6IG9mZnNldHNbMV0sXG4gICAgICAgIHJpZ2h0OiBvZmZzZXRzWzJdLFxuICAgICAgICBnYXA6IE1hdGgubWF4KDAsIHdpbmRvd1dpZHRoIC0gZG9jdW1lbnRXaWR0aCArIG9mZnNldHNbMl0gLSBvZmZzZXRzWzBdKSxcbiAgICB9O1xufTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbmV4cG9ydCB2YXIgbG9ja0F0dHJpYnV0ZSA9ICdkYXRhLXNjcm9sbC1sb2NrZWQnO1xuLy8gaW1wb3J0YW50IHRpcCAtIG9uY2Ugd2UgbWVhc3VyZSBzY3JvbGxCYXIgd2lkdGggYW5kIHJlbW92ZSB0aGVtXG4vLyB3ZSBjb3VsZCBub3QgcmVwZWF0IHRoaXMgb3BlcmF0aW9uXG4vLyB0aHVzIHdlIGFyZSB1c2luZyBzdHlsZS1zaW5nbGV0b24gLSBvbmx5IHRoZSBmaXJzdCBcInlldCBjb3JyZWN0XCIgc3R5bGUgd2lsbCBiZSBhcHBsaWVkLlxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uIChfYSwgYWxsb3dSZWxhdGl2ZSwgZ2FwTW9kZSwgaW1wb3J0YW50KSB7XG4gICAgdmFyIGxlZnQgPSBfYS5sZWZ0LCB0b3AgPSBfYS50b3AsIHJpZ2h0ID0gX2EucmlnaHQsIGdhcCA9IF9hLmdhcDtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIHJldHVybiBcIlxcbiAgLlwiLmNvbmNhdChub1Njcm9sbGJhcnNDbGFzc05hbWUsIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XFxuICAgIFwiKS5jb25jYXQoW1xuICAgICAgICBhbGxvd1JlbGF0aXZlICYmIFwicG9zaXRpb246IHJlbGF0aXZlIFwiLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ21hcmdpbicgJiZcbiAgICAgICAgICAgIFwiXFxuICAgIHBhZGRpbmctbGVmdDogXCIuY29uY2F0KGxlZnQsIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIikuY29uY2F0KHRvcCwgXCJweDtcXG4gICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChyaWdodCwgXCJweDtcXG4gICAgbWFyZ2luLWxlZnQ6MDtcXG4gICAgbWFyZ2luLXRvcDowO1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgXCIpLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIi5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcnKSwgXCJcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgXCIpLmNvbmNhdChyZW1vdmVkQmFyU2l6ZVZhcmlhYmxlLCBcIjogXCIpLmNvbmNhdChnYXAsIFwicHg7XFxuICB9XFxuXCIpO1xufTtcbnZhciBnZXRDdXJyZW50VXNlQ291bnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IHBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpIHx8ICcwJywgMTApO1xuICAgIHJldHVybiBpc0Zpbml0ZShjb3VudGVyKSA/IGNvdW50ZXIgOiAwO1xufTtcbmV4cG9ydCB2YXIgdXNlTG9ja0F0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCAoZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0NvdW50ZXIgPSBnZXRDdXJyZW50VXNlQ291bnRlcigpIC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdDb3VudGVyIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIG5ld0NvdW50ZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogUmVtb3ZlcyBwYWdlIHNjcm9sbGJhciBhbmQgYmxvY2tzIHBhZ2Ugc2Nyb2xsIHdoZW4gbW91bnRlZFxuICovXG5leHBvcnQgdmFyIFJlbW92ZVNjcm9sbEJhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBub1JlbGF0aXZlID0gX2Eubm9SZWxhdGl2ZSwgbm9JbXBvcnRhbnQgPSBfYS5ub0ltcG9ydGFudCwgX2IgPSBfYS5nYXBNb2RlLCBnYXBNb2RlID0gX2IgPT09IHZvaWQgMCA/ICdtYXJnaW4nIDogX2I7XG4gICAgdXNlTG9ja0F0dHJpYnV0ZSgpO1xuICAgIC8qXG4gICAgIGdhcCB3aWxsIGJlIG1lYXN1cmVkIG9uIGV2ZXJ5IGNvbXBvbmVudCBtb3VudFxuICAgICBob3dldmVyIGl0IHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHRoZSBcImZpcnN0XCIgaW52b2NhdGlvblxuICAgICBkdWUgdG8gc2luZ2xldG9uIG5hdHVyZSBvZiA8U3R5bGVcbiAgICAgKi9cbiAgICB2YXIgZ2FwID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRHYXBXaWR0aChnYXBNb2RlKTsgfSwgW2dhcE1vZGVdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyAnIWltcG9ydGFudCcgOiAnJykgfSk7XG59O1xuIiwiaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgemVyb1JpZ2h0Q2xhc3NOYW1lLCBmdWxsV2lkdGhDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBSZW1vdmVTY3JvbGxCYXIsIHplcm9SaWdodENsYXNzTmFtZSwgZnVsbFdpZHRoQ2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIGdldEdhcFdpZHRoLCB9O1xuIiwidmFyIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgdmFyIG5vblBhc3NpdmUgPSBwYXNzaXZlU3VwcG9ydGVkID8geyBwYXNzaXZlOiBmYWxzZSB9IDogZmFsc2U7XG4iLCJ2YXIgYWx3YXlzQ29udGFpbnNTY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHRleHRhcmVhIHdpbGwgYWx3YXlzIF9jb250YWluXyBzY3JvbGwgaW5zaWRlIHNlbGYuIEl0IG9ubHkgY2FuIGJlIGhpZGRlblxuICAgIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG59O1xudmFyIGVsZW1lbnRDYW5CZVNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUsIG92ZXJmbG93KSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIHJldHVybiAoXG4gICAgLy8gbm90LW5vdC1zY3JvbGxhYmxlXG4gICAgc3R5bGVzW292ZXJmbG93XSAhPT0gJ2hpZGRlbicgJiZcbiAgICAgICAgLy8gY29udGFpbnMgc2Nyb2xsIGluc2lkZSBzZWxmXG4gICAgICAgICEoc3R5bGVzLm92ZXJmbG93WSA9PT0gc3R5bGVzLm92ZXJmbG93WCAmJiAhYWx3YXlzQ29udGFpbnNTY3JvbGwobm9kZSkgJiYgc3R5bGVzW292ZXJmbG93XSA9PT0gJ3Zpc2libGUnKSk7XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1knKTsgfTtcbnZhciBlbGVtZW50Q291bGRCZUhTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dYJyk7IH07XG5leHBvcnQgdmFyIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgZG8ge1xuICAgICAgICAvLyBTa2lwIG92ZXIgc2hhZG93IHJvb3RcbiAgICAgICAgaWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzY3JvbGxIZWlnaHQgPSBfYVsxXSwgY2xpZW50SGVpZ2h0ID0gX2FbMl07XG4gICAgICAgICAgICBpZiAoc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciBnZXRWU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IF9hLnNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0ID0gX2Euc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgPSBfYS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICBdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICBdO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQobm9kZSkgOiBlbGVtZW50Q291bGRCZUhTY3JvbGxlZChub2RlKTtcbn07XG52YXIgZ2V0U2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZ2V0VlNjcm9sbFZhcmlhYmxlcyhub2RlKSA6IGdldEhTY3JvbGxWYXJpYWJsZXMobm9kZSk7XG59O1xudmFyIGdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uIChheGlzLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGRpcmVjdGlvbiBpcyBydGwgKHJpZ2h0LXRvLWxlZnQpLCB0aGVuIHNjcm9sbExlZnQgaXMgMCB3aGVuIHRoZSBzY3JvbGxiYXIgaXMgYXQgaXRzIHJpZ2h0bW9zdCBwb3NpdGlvbixcbiAgICAgKiBhbmQgdGhlbiBpbmNyZWFzaW5nbHkgbmVnYXRpdmUgYXMgeW91IHNjcm9sbCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gICAgICovXG4gICAgcmV0dXJuIGF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxO1xufTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIHRhcmdldCksIHBvc2l0aW9uID0gX2FbMF0sIHNjcm9sbF8xID0gX2FbMV0sIGNhcGFjaXR5ID0gX2FbMl07XG4gICAgICAgIHZhciBlbGVtZW50U2Nyb2xsID0gc2Nyb2xsXzEgLSBjYXBhY2l0eSAtIGRpcmVjdGlvbkZhY3RvciAqIHBvc2l0aW9uO1xuICAgICAgICBpZiAocG9zaXRpb24gfHwgZWxlbWVudFNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQoYXhpcywgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbCArPSBlbGVtZW50U2Nyb2xsO1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbFRvcCArPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50XzEgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gd2Ugd2lsbCBcImJ1YmJsZVwiIGZyb20gU2hhZG93RG9tIGluIGNhc2Ugd2UgYXJlLCBvciBqdXN0IHRvIHRoZSBwYXJlbnQgaW4gbm9ybWFsIGNhc2VcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBsb2dpYyB1c2VkIGluIGZvY3VzLWxvY2tcbiAgICAgICAgdGFyZ2V0ID0gKHBhcmVudF8xICYmIHBhcmVudF8xLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPyBwYXJlbnRfMS5ob3N0IDogcGFyZW50XzEpO1xuICAgIH0gd2hpbGUgKFxuICAgIC8vIHBvcnRhbGVkIGNvbnRlbnRcbiAgICAoIXRhcmdldEluTG9jayAmJiB0YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHx8XG4gICAgICAgIC8vIHNlbGYgY29udGVudFxuICAgICAgICAodGFyZ2V0SW5Mb2NrICYmIChlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KSB8fCBlbmRUYXJnZXQgPT09IHRhcmdldCkpKTtcbiAgICAvLyBoYW5kbGUgZXBzaWxvbiBhcm91bmQgMCAobm9uIHN0YW5kYXJkIHpvb20gbGV2ZWxzKVxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGxUb3ApIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgLWRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsVG9wKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZENhbmNlbFNjcm9sbDtcbn07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxCYXIgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhcic7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBub25QYXNzaXZlIH0gZnJvbSAnLi9hZ2dyZXNpdmVDYXB0dXJlJztcbmltcG9ydCB7IGhhbmRsZVNjcm9sbCwgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgfSBmcm9tICcuL2hhbmRsZVNjcm9sbCc7XG5leHBvcnQgdmFyIGdldFRvdWNoWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NoYW5nZWRUb3VjaGVzJyBpbiBldmVudCA/IFtldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLCBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZXSA6IFswLCAwXTtcbn07XG5leHBvcnQgdmFyIGdldERlbHRhWFkgPSBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIFtldmVudC5kZWx0YVgsIGV2ZW50LmRlbHRhWV07IH07XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG52YXIgZGVsdGFDb21wYXJlID0gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIHhbMF0gPT09IHlbMF0gJiYgeFsxXSA9PT0geVsxXTsgfTtcbnZhciBnZW5lcmF0ZVN0eWxlID0gZnVuY3Rpb24gKGlkKSB7IHJldHVybiBcIlxcbiAgLmJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IG5vbmU7fVxcbiAgLmFsbG93LWludGVyYWN0aXZpdHktXCIpLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBhbGw7fVxcblwiKTsgfTtcbnZhciBpZENvdW50ZXIgPSAwO1xudmFyIGxvY2tTdGFjayA9IFtdO1xuZXhwb3J0IGZ1bmN0aW9uIFJlbW92ZVNjcm9sbFNpZGVDYXIocHJvcHMpIHtcbiAgICB2YXIgc2hvdWxkUHJldmVudFF1ZXVlID0gUmVhY3QudXNlUmVmKFtdKTtcbiAgICB2YXIgdG91Y2hTdGFydFJlZiA9IFJlYWN0LnVzZVJlZihbMCwgMF0pO1xuICAgIHZhciBhY3RpdmVBeGlzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgdmFyIGlkID0gUmVhY3QudXNlU3RhdGUoaWRDb3VudGVyKyspWzBdO1xuICAgIHZhciBTdHlsZSA9IFJlYWN0LnVzZVN0YXRlKHN0eWxlU2luZ2xldG9uKVswXTtcbiAgICB2YXIgbGFzdFByb3BzID0gUmVhY3QudXNlUmVmKHByb3BzKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0UHJvcHMuY3VycmVudCA9IHByb3BzO1xuICAgIH0sIFtwcm9wc10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9wcy5pbmVydCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgIHZhciBhbGxvd18xID0gX19zcHJlYWRBcnJheShbcHJvcHMubG9ja1JlZi5jdXJyZW50XSwgKHByb3BzLnNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpLCB0cnVlKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LnJlbW92ZShcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSwgW3Byb3BzLmluZXJ0LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQsIHByb3BzLnNoYXJkc10pO1xuICAgIHZhciBzaG91bGRDYW5jZWxFdmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCwgcGFyZW50KSB7XG4gICAgICAgIGlmICgoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB8fCAoZXZlbnQudHlwZSA9PT0gJ3doZWVsJyAmJiBldmVudC5jdHJsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIC8vIGFsbG93IGhvcml6b250YWwgdG91Y2ggbW92ZSBvbiBSYW5nZSBpbnB1dHMuIFRoZXkgd2lsbCBub3QgY2F1c2UgYW55IHNjcm9sbFxuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIG1vdmVEaXJlY3Rpb24gPT09ICdoJyAmJiB0YXJnZXQudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ICYmIChkZWx0YVggfHwgZGVsdGFZKSkge1xuICAgICAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gY3VycmVudEF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50QXhpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbmNlbGluZ0F4aXMgPSBhY3RpdmVBeGlzLmN1cnJlbnQgfHwgY3VycmVudEF4aXM7XG4gICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGwoY2FuY2VsaW5nQXhpcywgcGFyZW50LCBldmVudCwgY2FuY2VsaW5nQXhpcyA9PT0gJ2gnID8gZGVsdGFYIDogZGVsdGFZLCB0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX2V2ZW50KSB7XG4gICAgICAgIHZhciBldmVudCA9IF9ldmVudDtcbiAgICAgICAgaWYgKCFsb2NrU3RhY2subGVuZ3RoIHx8IGxvY2tTdGFja1tsb2NrU3RhY2subGVuZ3RoIC0gMV0gIT09IFN0eWxlKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIGxhc3QgYWN0aXZlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbHRhID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBnZXREZWx0YVhZKGV2ZW50KSA6IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgc291cmNlRXZlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJiAoZS50YXJnZXQgPT09IGV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQgPT09IGUuc2hhZG93UGFyZW50KSAmJiBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpOyB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3V0c2lkZSBvciBzaGFyZCBldmVudFxuICAgICAgICBpZiAoIXNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc2hhcmROb2RlcyA9IChsYXN0UHJvcHMuY3VycmVudC5zaGFyZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7IH0pO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBzaGFyZE5vZGVzLmxlbmd0aCA+IDAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSkgOiAhbGFzdFByb3BzLmN1cnJlbnQubm9Jc29sYXRpb247XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRDYW5jZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmFtZSwgZGVsdGEsIHRhcmdldCwgc2hvdWxkKSB7XG4gICAgICAgIHZhciBldmVudCA9IHsgbmFtZTogbmFtZSwgZGVsdGE6IGRlbHRhLCB0YXJnZXQ6IHRhcmdldCwgc2hvdWxkOiBzaG91bGQsIHNoYWRvd1BhcmVudDogZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KHRhcmdldCkgfTtcbiAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQucHVzaChldmVudCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgIT09IGV2ZW50OyB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaFN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRvdWNoU3RhcnRSZWYuY3VycmVudCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxXaGVlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0RGVsdGFYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXRUb3VjaFhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2tTdGFjay5wdXNoKFN0eWxlKTtcbiAgICAgICAgcHJvcHMuc2V0Q2FsbGJhY2tzKHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvbldoZWVsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IHNjcm9sbFRvdWNoTW92ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IG5vUmVsYXRpdmU6IHByb3BzLm5vUmVsYXRpdmUsIGdhcE1vZGU6IHByb3BzLmdhcE1vZGUgfSkgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQobm9kZSkge1xuICAgIHZhciBzaGFkb3dQYXJlbnQgPSBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgc2hhZG93UGFyZW50ID0gbm9kZS5ob3N0O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93UGFyZW50O1xufVxuIiwiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbFNpZGVDYXIgfSBmcm9tICcuL1NpZGVFZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIFJlbW92ZVNjcm9sbFNpZGVDYXIpO1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJy4vVUknO1xuaW1wb3J0IFNpZGVDYXIgZnJvbSAnLi9zaWRlY2FyJztcbnZhciBSZWFjdFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHsgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlbW92ZVNjcm9sbCwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogcmVmLCBzaWRlQ2FyOiBTaWRlQ2FyIH0pKSk7IH0pO1xuUmVhY3RSZW1vdmVTY3JvbGwuY2xhc3NOYW1lcyA9IFJlbW92ZVNjcm9sbC5jbGFzc05hbWVzO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZW1vdmVTY3JvbGw7XG4iLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3NlbGVjdC50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwiQHJhZGl4LXVpL251bWJlclwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29sbGVjdGlvbiB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29sbGVjdGlvblwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRGlyZWN0aW9uIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1kaXJlY3Rpb25cIjtcbmltcG9ydCB7IERpc21pc3NhYmxlTGF5ZXIgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWRpc21pc3NhYmxlLWxheWVyXCI7XG5pbXBvcnQgeyB1c2VGb2N1c0d1YXJkcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZm9jdXMtZ3VhcmRzXCI7XG5pbXBvcnQgeyBGb2N1c1Njb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1mb2N1cy1zY29wZVwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWlkXCI7XG5pbXBvcnQgKiBhcyBQb3BwZXJQcmltaXRpdmUgZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3BwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlclNjb3BlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3BwZXJcIjtcbmltcG9ydCB7IFBvcnRhbCBhcyBQb3J0YWxQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXBvcnRhbFwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IGNyZWF0ZVNsb3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrUmVmIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtY2FsbGJhY2stcmVmXCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGFibGVTdGF0ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNvbnRyb2xsYWJsZS1zdGF0ZVwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC11c2UtbGF5b3V0LWVmZmVjdFwiO1xuaW1wb3J0IHsgdXNlUHJldmlvdXMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1wcmV2aW91c1wiO1xuaW1wb3J0IHsgVklTVUFMTFlfSElEREVOX1NUWUxFUyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdmlzdWFsbHktaGlkZGVuXCI7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSBcImFyaWEtaGlkZGVuXCI7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tIFwicmVhY3QtcmVtb3ZlLXNjcm9sbFwiO1xuaW1wb3J0IHsgRnJhZ21lbnQsIGpzeCwganN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIE9QRU5fS0VZUyA9IFtcIiBcIiwgXCJFbnRlclwiLCBcIkFycm93VXBcIiwgXCJBcnJvd0Rvd25cIl07XG52YXIgU0VMRUNUSU9OX0tFWVMgPSBbXCIgXCIsIFwiRW50ZXJcIl07XG52YXIgU0VMRUNUX05BTUUgPSBcIlNlbGVjdFwiO1xudmFyIFtDb2xsZWN0aW9uLCB1c2VDb2xsZWN0aW9uLCBjcmVhdGVDb2xsZWN0aW9uU2NvcGVdID0gY3JlYXRlQ29sbGVjdGlvbihTRUxFQ1RfTkFNRSk7XG52YXIgW2NyZWF0ZVNlbGVjdENvbnRleHQsIGNyZWF0ZVNlbGVjdFNjb3BlXSA9IGNyZWF0ZUNvbnRleHRTY29wZShTRUxFQ1RfTkFNRSwgW1xuICBjcmVhdGVDb2xsZWN0aW9uU2NvcGUsXG4gIGNyZWF0ZVBvcHBlclNjb3BlXG5dKTtcbnZhciB1c2VQb3BwZXJTY29wZSA9IGNyZWF0ZVBvcHBlclNjb3BlKCk7XG52YXIgW1NlbGVjdFByb3ZpZGVyLCB1c2VTZWxlY3RDb250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoU0VMRUNUX05BTUUpO1xudmFyIFtTZWxlY3ROYXRpdmVPcHRpb25zUHJvdmlkZXIsIHVzZVNlbGVjdE5hdGl2ZU9wdGlvbnNDb250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoU0VMRUNUX05BTUUpO1xudmFyIFNlbGVjdCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgX19zY29wZVNlbGVjdCxcbiAgICBjaGlsZHJlbixcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0T3BlbixcbiAgICBvbk9wZW5DaGFuZ2UsXG4gICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgb25WYWx1ZUNoYW5nZSxcbiAgICBkaXIsXG4gICAgbmFtZSxcbiAgICBhdXRvQ29tcGxldGUsXG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWQsXG4gICAgZm9ybVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IFt0cmlnZ2VyLCBzZXRUcmlnZ2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdmFsdWVOb2RlLCBzZXRWYWx1ZU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZU5vZGVIYXNDaGlsZHJlbiwgc2V0VmFsdWVOb2RlSGFzQ2hpbGRyZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBkaXJlY3Rpb24gPSB1c2VEaXJlY3Rpb24oZGlyKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICAgIHByb3A6IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHRQcm9wOiBkZWZhdWx0T3BlbiA/PyBmYWxzZSxcbiAgICBvbkNoYW5nZTogb25PcGVuQ2hhbmdlLFxuICAgIGNhbGxlcjogU0VMRUNUX05BTUVcbiAgfSk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICAgIHByb3A6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0UHJvcDogZGVmYXVsdFZhbHVlLFxuICAgIG9uQ2hhbmdlOiBvblZhbHVlQ2hhbmdlLFxuICAgIGNhbGxlcjogU0VMRUNUX05BTUVcbiAgfSk7XG4gIGNvbnN0IHRyaWdnZXJQb2ludGVyRG93blBvc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaXNGb3JtQ29udHJvbCA9IHRyaWdnZXIgPyBmb3JtIHx8ICEhdHJpZ2dlci5jbG9zZXN0KFwiZm9ybVwiKSA6IHRydWU7XG4gIGNvbnN0IFtuYXRpdmVPcHRpb25zU2V0LCBzZXROYXRpdmVPcHRpb25zU2V0XSA9IFJlYWN0LnVzZVN0YXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xuICBjb25zdCBuYXRpdmVTZWxlY3RLZXkgPSBBcnJheS5mcm9tKG5hdGl2ZU9wdGlvbnNTZXQpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ucHJvcHMudmFsdWUpLmpvaW4oXCI7XCIpO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQb3BwZXJQcmltaXRpdmUuUm9vdCwgeyAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3hzKFxuICAgIFNlbGVjdFByb3ZpZGVyLFxuICAgIHtcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgb25UcmlnZ2VyQ2hhbmdlOiBzZXRUcmlnZ2VyLFxuICAgICAgdmFsdWVOb2RlLFxuICAgICAgb25WYWx1ZU5vZGVDaGFuZ2U6IHNldFZhbHVlTm9kZSxcbiAgICAgIHZhbHVlTm9kZUhhc0NoaWxkcmVuLFxuICAgICAgb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTogc2V0VmFsdWVOb2RlSGFzQ2hpbGRyZW4sXG4gICAgICBjb250ZW50SWQ6IHVzZUlkKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uVmFsdWVDaGFuZ2U6IHNldFZhbHVlLFxuICAgICAgb3BlbixcbiAgICAgIG9uT3BlbkNoYW5nZTogc2V0T3BlbixcbiAgICAgIGRpcjogZGlyZWN0aW9uLFxuICAgICAgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8ganN4KENvbGxlY3Rpb24uUHJvdmlkZXIsIHsgc2NvcGU6IF9fc2NvcGVTZWxlY3QsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgIFNlbGVjdE5hdGl2ZU9wdGlvbnNQcm92aWRlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29wZTogcHJvcHMuX19zY29wZVNlbGVjdCxcbiAgICAgICAgICAgIG9uTmF0aXZlT3B0aW9uQWRkOiBSZWFjdC51c2VDYWxsYmFjaygob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHNldE5hdGl2ZU9wdGlvbnNTZXQoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG9wdGlvbikpO1xuICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgb25OYXRpdmVPcHRpb25SZW1vdmU6IFJlYWN0LnVzZUNhbGxiYWNrKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgc2V0TmF0aXZlT3B0aW9uc1NldCgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnNTZXQgPSBuZXcgU2V0KHByZXYpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnNTZXQuZGVsZXRlKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNTZXQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgICkgfSksXG4gICAgICAgIGlzRm9ybUNvbnRyb2wgPyAvKiBAX19QVVJFX18gKi8ganN4cyhcbiAgICAgICAgICBTZWxlY3RCdWJibGVJbnB1dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoZXZlbnQpID0+IHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSksXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdm9pZCAwID8gLyogQF9fUFVSRV9fICovIGpzeChcIm9wdGlvblwiLCB7IHZhbHVlOiBcIlwiIH0pIDogbnVsbCxcbiAgICAgICAgICAgICAgQXJyYXkuZnJvbShuYXRpdmVPcHRpb25zU2V0KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmF0aXZlU2VsZWN0S2V5XG4gICAgICAgICkgOiBudWxsXG4gICAgICBdXG4gICAgfVxuICApIH0pO1xufTtcblNlbGVjdC5kaXNwbGF5TmFtZSA9IFNFTEVDVF9OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiU2VsZWN0VHJpZ2dlclwiO1xudmFyIFNlbGVjdFRyaWdnZXIgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgZGlzYWJsZWQgPSBmYWxzZSwgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBwb3BwZXJTY29wZSA9IHVzZVBvcHBlclNjb3BlKF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KFRSSUdHRVJfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IGNvbnRleHQuZGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgY29udGV4dC5vblRyaWdnZXJDaGFuZ2UpO1xuICAgIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBwb2ludGVyVHlwZVJlZiA9IFJlYWN0LnVzZVJlZihcInRvdWNoXCIpO1xuICAgIGNvbnN0IFtzZWFyY2hSZWYsIGhhbmRsZVR5cGVhaGVhZFNlYXJjaCwgcmVzZXRUeXBlYWhlYWRdID0gdXNlVHlwZWFoZWFkU2VhcmNoKChzZWFyY2gpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGdldEl0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGVuYWJsZWRJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBjb250ZXh0LnZhbHVlKTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gZmluZE5leHRJdGVtKGVuYWJsZWRJdGVtcywgc2VhcmNoLCBjdXJyZW50SXRlbSk7XG4gICAgICBpZiAobmV4dEl0ZW0gIT09IHZvaWQgMCkge1xuICAgICAgICBjb250ZXh0Lm9uVmFsdWVDaGFuZ2UobmV4dEl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZU9wZW4gPSAocG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgY29udGV4dC5vbk9wZW5DaGFuZ2UodHJ1ZSk7XG4gICAgICAgIHJlc2V0VHlwZWFoZWFkKCk7XG4gICAgICB9XG4gICAgICBpZiAocG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnRleHQudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChwb2ludGVyRXZlbnQucGFnZVgpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocG9pbnRlckV2ZW50LnBhZ2VZKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9wcGVyUHJpbWl0aXZlLkFuY2hvciwgeyBhc0NoaWxkOiB0cnVlLCAuLi5wb3BwZXJTY29wZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuYnV0dG9uLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBjb250ZXh0LmNvbnRlbnRJZCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGNvbnRleHQub3BlbixcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IGNvbnRleHQucmVxdWlyZWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJub25lXCIsXG4gICAgICAgIGRpcjogY29udGV4dC5kaXIsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBjb250ZXh0Lm9wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogaXNEaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgIFwiZGF0YS1wbGFjZWhvbGRlclwiOiBzaG91bGRTaG93UGxhY2Vob2xkZXIoY29udGV4dC52YWx1ZSkgPyBcIlwiIDogdm9pZCAwLFxuICAgICAgICAuLi50cmlnZ2VyUHJvcHMsXG4gICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyh0cmlnZ2VyUHJvcHMub25DbGljaywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5mb2N1cygpO1xuICAgICAgICAgIGlmIChwb2ludGVyVHlwZVJlZi5jdXJyZW50ICE9PSBcIm1vdXNlXCIpIHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG9uUG9pbnRlckRvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHRyaWdnZXJQcm9wcy5vblBvaW50ZXJEb3duLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBwb2ludGVyVHlwZVJlZi5jdXJyZW50ID0gZXZlbnQucG9pbnRlclR5cGU7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgIGlmICh0YXJnZXQuaGFzUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwICYmIGV2ZW50LmN0cmxLZXkgPT09IGZhbHNlICYmIGV2ZW50LnBvaW50ZXJUeXBlID09PSBcIm1vdXNlXCIpIHtcbiAgICAgICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBvbktleURvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKHRyaWdnZXJQcm9wcy5vbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzVHlwaW5nQWhlYWQgPSBzZWFyY2hSZWYuY3VycmVudCAhPT0gXCJcIjtcbiAgICAgICAgICBjb25zdCBpc01vZGlmaWVyS2V5ID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQubWV0YUtleTtcbiAgICAgICAgICBpZiAoIWlzTW9kaWZpZXJLZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkgaGFuZGxlVHlwZWFoZWFkU2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgaWYgKGlzVHlwaW5nQWhlYWQgJiYgZXZlbnQua2V5ID09PSBcIiBcIikgcmV0dXJuO1xuICAgICAgICAgIGlmIChPUEVOX0tFWVMuaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgaGFuZGxlT3BlbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgKSB9KTtcbiAgfVxuKTtcblNlbGVjdFRyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgVkFMVUVfTkFNRSA9IFwiU2VsZWN0VmFsdWVcIjtcbnZhciBTZWxlY3RWYWx1ZSA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCBjbGFzc05hbWUsIHN0eWxlLCBjaGlsZHJlbiwgcGxhY2Vob2xkZXIgPSBcIlwiLCAuLi52YWx1ZVByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChWQUxVRV9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCB7IG9uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2UgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBjaGlsZHJlbiAhPT0gdm9pZCAwO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRleHQub25WYWx1ZU5vZGVDaGFuZ2UpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBvblZhbHVlTm9kZUhhc0NoaWxkcmVuQ2hhbmdlKGhhc0NoaWxkcmVuKTtcbiAgICB9LCBbb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZSwgaGFzQ2hpbGRyZW5dKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5zcGFuLFxuICAgICAge1xuICAgICAgICAuLi52YWx1ZVByb3BzLFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgc3R5bGU6IHsgcG9pbnRlckV2ZW50czogXCJub25lXCIgfSxcbiAgICAgICAgY2hpbGRyZW46IHNob3VsZFNob3dQbGFjZWhvbGRlcihjb250ZXh0LnZhbHVlKSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IHBsYWNlaG9sZGVyIH0pIDogY2hpbGRyZW5cbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuU2VsZWN0VmFsdWUuZGlzcGxheU5hbWUgPSBWQUxVRV9OQU1FO1xudmFyIElDT05fTkFNRSA9IFwiU2VsZWN0SWNvblwiO1xudmFyIFNlbGVjdEljb24gPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgY2hpbGRyZW4sIC4uLmljb25Qcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLnNwYW4sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCAuLi5pY29uUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBjaGlsZHJlbjogY2hpbGRyZW4gfHwgXCJcXHUyNUJDXCIgfSk7XG4gIH1cbik7XG5TZWxlY3RJY29uLmRpc3BsYXlOYW1lID0gSUNPTl9OQU1FO1xudmFyIFBPUlRBTF9OQU1FID0gXCJTZWxlY3RQb3J0YWxcIjtcbnZhciBTZWxlY3RQb3J0YWwgPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUG9ydGFsUHJpbWl0aXZlLCB7IGFzQ2hpbGQ6IHRydWUsIC4uLnByb3BzIH0pO1xufTtcblNlbGVjdFBvcnRhbC5kaXNwbGF5TmFtZSA9IFBPUlRBTF9OQU1FO1xudmFyIENPTlRFTlRfTkFNRSA9IFwiU2VsZWN0Q29udGVudFwiO1xudmFyIFNlbGVjdENvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgW2ZyYWdtZW50LCBzZXRGcmFnbWVudF0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRGcmFnbWVudChuZXcgRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICB9LCBbXSk7XG4gICAgaWYgKCFjb250ZXh0Lm9wZW4pIHtcbiAgICAgIGNvbnN0IGZyYWcgPSBmcmFnbWVudDtcbiAgICAgIHJldHVybiBmcmFnID8gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdENvbnRlbnRQcm92aWRlciwgeyBzY29wZTogcHJvcHMuX19zY29wZVNlbGVjdCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goQ29sbGVjdGlvbi5TbG90LCB7IHNjb3BlOiBwcm9wcy5fX3Njb3BlU2VsZWN0LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbiB9KSB9KSB9KSxcbiAgICAgICAgZnJhZ1xuICAgICAgKSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdENvbnRlbnRJbXBsLCB7IC4uLnByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcblNlbGVjdENvbnRlbnQuZGlzcGxheU5hbWUgPSBDT05URU5UX05BTUU7XG52YXIgQ09OVEVOVF9NQVJHSU4gPSAxMDtcbnZhciBbU2VsZWN0Q29udGVudFByb3ZpZGVyLCB1c2VTZWxlY3RDb250ZW50Q29udGV4dF0gPSBjcmVhdGVTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSk7XG52YXIgQ09OVEVOVF9JTVBMX05BTUUgPSBcIlNlbGVjdENvbnRlbnRJbXBsXCI7XG52YXIgU2xvdCA9IGNyZWF0ZVNsb3QoXCJTZWxlY3RDb250ZW50LlJlbW92ZVNjcm9sbFwiKTtcbnZhciBTZWxlY3RDb250ZW50SW1wbCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgX19zY29wZVNlbGVjdCxcbiAgICAgIHBvc2l0aW9uID0gXCJpdGVtLWFsaWduZWRcIixcbiAgICAgIG9uQ2xvc2VBdXRvRm9jdXMsXG4gICAgICBvbkVzY2FwZUtleURvd24sXG4gICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgIC8vXG4gICAgICAvLyBQb3BwZXJDb250ZW50IHByb3BzXG4gICAgICBzaWRlLFxuICAgICAgc2lkZU9mZnNldCxcbiAgICAgIGFsaWduLFxuICAgICAgYWxpZ25PZmZzZXQsXG4gICAgICBhcnJvd1BhZGRpbmcsXG4gICAgICBjb2xsaXNpb25Cb3VuZGFyeSxcbiAgICAgIGNvbGxpc2lvblBhZGRpbmcsXG4gICAgICBzdGlja3ksXG4gICAgICBoaWRlV2hlbkRldGFjaGVkLFxuICAgICAgYXZvaWRDb2xsaXNpb25zLFxuICAgICAgLy9cbiAgICAgIC4uLmNvbnRlbnRQcm9wc1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChDT05URU5UX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IFtjb250ZW50LCBzZXRDb250ZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgKG5vZGUpID0+IHNldENvbnRlbnQobm9kZSkpO1xuICAgIGNvbnN0IFtzZWxlY3RlZEl0ZW0sIHNldFNlbGVjdGVkSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRJdGVtVGV4dCwgc2V0U2VsZWN0ZWRJdGVtVGV4dF0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAgIG51bGxcbiAgICApO1xuICAgIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGZpcnN0VmFsaWRJdGVtRm91bmRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoY29udGVudCkgcmV0dXJuIGhpZGVPdGhlcnMoY29udGVudCk7XG4gICAgfSwgW2NvbnRlbnRdKTtcbiAgICB1c2VGb2N1c0d1YXJkcygpO1xuICAgIGNvbnN0IGZvY3VzRmlyc3QgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgIChjYW5kaWRhdGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IFtmaXJzdEl0ZW0sIC4uLnJlc3RJdGVtc10gPSBnZXRJdGVtcygpLm1hcCgoaXRlbSkgPT4gaXRlbS5yZWYuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IFtsYXN0SXRlbV0gPSByZXN0SXRlbXMuc2xpY2UoLTEpO1xuICAgICAgICBjb25zdCBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlID09PSBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCkgcmV0dXJuO1xuICAgICAgICAgIGNhbmRpZGF0ZT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJuZWFyZXN0XCIgfSk7XG4gICAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0gZmlyc3RJdGVtICYmIHZpZXdwb3J0KSB2aWV3cG9ydC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgIGlmIChjYW5kaWRhdGUgPT09IGxhc3RJdGVtICYmIHZpZXdwb3J0KSB2aWV3cG9ydC5zY3JvbGxUb3AgPSB2aWV3cG9ydC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgY2FuZGlkYXRlPy5mb2N1cygpO1xuICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBQUkVWSU9VU0xZX0ZPQ1VTRURfRUxFTUVOVCkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2dldEl0ZW1zLCB2aWV3cG9ydF1cbiAgICApO1xuICAgIGNvbnN0IGZvY3VzU2VsZWN0ZWRJdGVtID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBmb2N1c0ZpcnN0KFtzZWxlY3RlZEl0ZW0sIGNvbnRlbnRdKSxcbiAgICAgIFtmb2N1c0ZpcnN0LCBzZWxlY3RlZEl0ZW0sIGNvbnRlbnRdXG4gICAgKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzUG9zaXRpb25lZCkge1xuICAgICAgICBmb2N1c1NlbGVjdGVkSXRlbSgpO1xuICAgICAgfVxuICAgIH0sIFtpc1Bvc2l0aW9uZWQsIGZvY3VzU2VsZWN0ZWRJdGVtXSk7XG4gICAgY29uc3QgeyBvbk9wZW5DaGFuZ2UsIHRyaWdnZXJQb2ludGVyRG93blBvc1JlZiB9ID0gY29udGV4dDtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IHBvaW50ZXJNb3ZlRGVsdGEgPSB7IHg6IDAsIHk6IDAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlck1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICBwb2ludGVyTW92ZURlbHRhID0ge1xuICAgICAgICAgICAgeDogTWF0aC5hYnMoTWF0aC5yb3VuZChldmVudC5wYWdlWCkgLSAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ/LnggPz8gMCkpLFxuICAgICAgICAgICAgeTogTWF0aC5hYnMoTWF0aC5yb3VuZChldmVudC5wYWdlWSkgLSAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ/LnkgPz8gMCkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHBvaW50ZXJNb3ZlRGVsdGEueCA8PSAxMCAmJiBwb2ludGVyTW92ZURlbHRhLnkgPD0gMTApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgIG9uT3BlbkNoYW5nZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBoYW5kbGVQb2ludGVyTW92ZSk7XG4gICAgICAgICAgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgaGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgaGFuZGxlUG9pbnRlclVwLCB7IGNhcHR1cmU6IHRydWUsIG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgaGFuZGxlUG9pbnRlck1vdmUpO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgaGFuZGxlUG9pbnRlclVwLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwgW2NvbnRlbnQsIG9uT3BlbkNoYW5nZSwgdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4gb25PcGVuQ2hhbmdlKGZhbHNlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBjbG9zZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjbG9zZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgY2xvc2UpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBjbG9zZSk7XG4gICAgICB9O1xuICAgIH0sIFtvbk9wZW5DaGFuZ2VdKTtcbiAgICBjb25zdCBbc2VhcmNoUmVmLCBoYW5kbGVUeXBlYWhlYWRTZWFyY2hdID0gdXNlVHlwZWFoZWFkU2VhcmNoKChzZWFyY2gpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGdldEl0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGVuYWJsZWRJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnJlZi5jdXJyZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gZmluZE5leHRJdGVtKGVuYWJsZWRJdGVtcywgc2VhcmNoLCBjdXJyZW50SXRlbSk7XG4gICAgICBpZiAobmV4dEl0ZW0pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBuZXh0SXRlbS5yZWYuY3VycmVudC5mb2N1cygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpdGVtUmVmQ2FsbGJhY2sgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAgIChub2RlLCB2YWx1ZSwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgY29uc3QgaXNGaXJzdFZhbGlkSXRlbSA9ICFmaXJzdFZhbGlkSXRlbUZvdW5kUmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkSXRlbSA9IGNvbnRleHQudmFsdWUgIT09IHZvaWQgMCAmJiBjb250ZXh0LnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRJdGVtIHx8IGlzRmlyc3RWYWxpZEl0ZW0pIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZEl0ZW0obm9kZSk7XG4gICAgICAgICAgaWYgKGlzRmlyc3RWYWxpZEl0ZW0pIGZpcnN0VmFsaWRJdGVtRm91bmRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbY29udGV4dC52YWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IGhhbmRsZUl0ZW1MZWF2ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IGNvbnRlbnQ/LmZvY3VzKCksIFtjb250ZW50XSk7XG4gICAgY29uc3QgaXRlbVRleHRSZWZDYWxsYmFjayA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICAgKG5vZGUsIHZhbHVlLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICBjb25zdCBpc0ZpcnN0VmFsaWRJdGVtID0gIWZpcnN0VmFsaWRJdGVtRm91bmRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQ7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRJdGVtID0gY29udGV4dC52YWx1ZSAhPT0gdm9pZCAwICYmIGNvbnRleHQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZEl0ZW0gfHwgaXNGaXJzdFZhbGlkSXRlbSkge1xuICAgICAgICAgIHNldFNlbGVjdGVkSXRlbVRleHQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbY29udGV4dC52YWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IFNlbGVjdFBvc2l0aW9uID0gcG9zaXRpb24gPT09IFwicG9wcGVyXCIgPyBTZWxlY3RQb3BwZXJQb3NpdGlvbiA6IFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb247XG4gICAgY29uc3QgcG9wcGVyQ29udGVudFByb3BzID0gU2VsZWN0UG9zaXRpb24gPT09IFNlbGVjdFBvcHBlclBvc2l0aW9uID8ge1xuICAgICAgc2lkZSxcbiAgICAgIHNpZGVPZmZzZXQsXG4gICAgICBhbGlnbixcbiAgICAgIGFsaWduT2Zmc2V0LFxuICAgICAgYXJyb3dQYWRkaW5nLFxuICAgICAgY29sbGlzaW9uQm91bmRhcnksXG4gICAgICBjb2xsaXNpb25QYWRkaW5nLFxuICAgICAgc3RpY2t5LFxuICAgICAgaGlkZVdoZW5EZXRhY2hlZCxcbiAgICAgIGF2b2lkQ29sbGlzaW9uc1xuICAgIH0gOiB7fTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFNlbGVjdENvbnRlbnRQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHZpZXdwb3J0LFxuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlOiBzZXRWaWV3cG9ydCxcbiAgICAgICAgaXRlbVJlZkNhbGxiYWNrLFxuICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgIG9uSXRlbUxlYXZlOiBoYW5kbGVJdGVtTGVhdmUsXG4gICAgICAgIGl0ZW1UZXh0UmVmQ2FsbGJhY2ssXG4gICAgICAgIGZvY3VzU2VsZWN0ZWRJdGVtLFxuICAgICAgICBzZWxlY3RlZEl0ZW1UZXh0LFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgaXNQb3NpdGlvbmVkLFxuICAgICAgICBzZWFyY2hSZWYsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFJlbW92ZVNjcm9sbCwgeyBhczogU2xvdCwgYWxsb3dQaW5jaFpvb206IHRydWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgIEZvY3VzU2NvcGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICAgIHRyYXBwZWQ6IGNvbnRleHQub3BlbixcbiAgICAgICAgICAgIG9uTW91bnRBdXRvRm9jdXM6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVW5tb3VudEF1dG9Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbG9zZUF1dG9Gb2N1cywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnRleHQudHJpZ2dlcj8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICAgICAgRGlzbWlzc2FibGVMYXllcixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5RG93bixcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJEb3duT3V0c2lkZSxcbiAgICAgICAgICAgICAgICBvbkZvY3VzT3V0c2lkZTogKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICAgICAgICAgIG9uRGlzbWlzczogKCkgPT4gY29udGV4dC5vbk9wZW5DaGFuZ2UoZmFsc2UpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICAgICAgU2VsZWN0UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IFwibGlzdGJveFwiLFxuICAgICAgICAgICAgICAgICAgICBpZDogY29udGV4dC5jb250ZW50SWQsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBjb250ZXh0Lm9wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCIsXG4gICAgICAgICAgICAgICAgICAgIGRpcjogY29udGV4dC5kaXIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ29udGV4dE1lbnU6IChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAuLi5wb3BwZXJDb250ZW50UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG9uUGxhY2VkOiAoKSA9PiBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGZsZXggbGF5b3V0IHNvIHdlIGNhbiBwbGFjZSB0aGUgc2Nyb2xsIGJ1dHRvbnMgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBvdXRsaW5lIGJ5IGRlZmF1bHQgYXMgdGhlIGNvbnRlbnQgTUFZIGdldCBmb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudFByb3BzLnN0eWxlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bjogY29tcG9zZUV2ZW50SGFuZGxlcnMoY29udGVudFByb3BzLm9uS2V5RG93biwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNb2RpZmllcktleSA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTW9kaWZpZXJLZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkgaGFuZGxlVHlwZWFoZWFkU2VhcmNoKGV2ZW50LmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFtcIkFycm93VXBcIiwgXCJBcnJvd0Rvd25cIiwgXCJIb21lXCIsIFwiRW5kXCJdLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmRpc2FibGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYW5kaWRhdGVOb2RlcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5yZWYuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoW1wiQXJyb3dVcFwiLCBcIkVuZFwiXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZU5vZGVzID0gY2FuZGlkYXRlTm9kZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoW1wiQXJyb3dVcFwiLCBcIkFycm93RG93blwiXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjYW5kaWRhdGVOb2Rlcy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTm9kZXMgPSBjYW5kaWRhdGVOb2Rlcy5zbGljZShjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZm9jdXNGaXJzdChjYW5kaWRhdGVOb2RlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApIH0pXG4gICAgICB9XG4gICAgKTtcbiAgfVxuKTtcblNlbGVjdENvbnRlbnRJbXBsLmRpc3BsYXlOYW1lID0gQ09OVEVOVF9JTVBMX05BTUU7XG52YXIgSVRFTV9BTElHTkVEX1BPU0lUSU9OX05BTUUgPSBcIlNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25cIjtcbnZhciBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG9uUGxhY2VkLCAuLi5wb3BwZXJQcm9wcyB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IGNvbnRlbnRDb250ZXh0ID0gdXNlU2VsZWN0Q29udGVudENvbnRleHQoQ09OVEVOVF9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgW2NvbnRlbnRXcmFwcGVyLCBzZXRDb250ZW50V3JhcHBlcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2NvbnRlbnQsIHNldENvbnRlbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIChub2RlKSA9PiBzZXRDb250ZW50KG5vZGUpKTtcbiAgY29uc3QgZ2V0SXRlbXMgPSB1c2VDb2xsZWN0aW9uKF9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBzaG91bGRFeHBhbmRPblNjcm9sbFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNob3VsZFJlcG9zaXRpb25SZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gIGNvbnN0IHsgdmlld3BvcnQsIHNlbGVjdGVkSXRlbSwgc2VsZWN0ZWRJdGVtVGV4dCwgZm9jdXNTZWxlY3RlZEl0ZW0gfSA9IGNvbnRlbnRDb250ZXh0O1xuICBjb25zdCBwb3NpdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoY29udGV4dC50cmlnZ2VyICYmIGNvbnRleHQudmFsdWVOb2RlICYmIGNvbnRlbnRXcmFwcGVyICYmIGNvbnRlbnQgJiYgdmlld3BvcnQgJiYgc2VsZWN0ZWRJdGVtICYmIHNlbGVjdGVkSXRlbVRleHQpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZWN0ID0gY29udGV4dC50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGVudFJlY3QgPSBjb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdmFsdWVOb2RlUmVjdCA9IGNvbnRleHQudmFsdWVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXRlbVRleHRSZWN0ID0gc2VsZWN0ZWRJdGVtVGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChjb250ZXh0LmRpciAhPT0gXCJydGxcIikge1xuICAgICAgICBjb25zdCBpdGVtVGV4dE9mZnNldCA9IGl0ZW1UZXh0UmVjdC5sZWZ0IC0gY29udGVudFJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHZhbHVlTm9kZVJlY3QubGVmdCAtIGl0ZW1UZXh0T2Zmc2V0O1xuICAgICAgICBjb25zdCBsZWZ0RGVsdGEgPSB0cmlnZ2VyUmVjdC5sZWZ0IC0gbGVmdDtcbiAgICAgICAgY29uc3QgbWluQ29udGVudFdpZHRoID0gdHJpZ2dlclJlY3Qud2lkdGggKyBsZWZ0RGVsdGE7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KG1pbkNvbnRlbnRXaWR0aCwgY29udGVudFJlY3Qud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodEVkZ2UgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgICBjb25zdCBjbGFtcGVkTGVmdCA9IGNsYW1wKGxlZnQsIFtcbiAgICAgICAgICBDT05URU5UX01BUkdJTixcbiAgICAgICAgICAvLyBQcmV2ZW50cyB0aGUgY29udGVudCBmcm9tIGdvaW5nIG9mZiB0aGUgc3RhcnRpbmcgZWRnZSBvZiB0aGVcbiAgICAgICAgICAvLyB2aWV3cG9ydC4gSXQgbWF5IHN0aWxsIGdvIG9mZiB0aGUgZW5kaW5nIGVkZ2UsIGJ1dCB0aGlzIGNhbiBiZVxuICAgICAgICAgIC8vIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIgc2luY2UgdGhleSBtYXkgd2FudCB0byBtYW5hZ2Ugb3ZlcmZsb3cgaW4gYVxuICAgICAgICAgIC8vIHNwZWNpZmljIHdheS5cbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmFkaXgtdWkvcHJpbWl0aXZlcy9pc3N1ZXMvMjA0OVxuICAgICAgICAgIE1hdGgubWF4KENPTlRFTlRfTUFSR0lOLCByaWdodEVkZ2UgLSBjb250ZW50V2lkdGgpXG4gICAgICAgIF0pO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5taW5XaWR0aCA9IG1pbkNvbnRlbnRXaWR0aCArIFwicHhcIjtcbiAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubGVmdCA9IGNsYW1wZWRMZWZ0ICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXRlbVRleHRPZmZzZXQgPSBjb250ZW50UmVjdC5yaWdodCAtIGl0ZW1UZXh0UmVjdC5yaWdodDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHZhbHVlTm9kZVJlY3QucmlnaHQgLSBpdGVtVGV4dE9mZnNldDtcbiAgICAgICAgY29uc3QgcmlnaHREZWx0YSA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdHJpZ2dlclJlY3QucmlnaHQgLSByaWdodDtcbiAgICAgICAgY29uc3QgbWluQ29udGVudFdpZHRoID0gdHJpZ2dlclJlY3Qud2lkdGggKyByaWdodERlbHRhO1xuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heChtaW5Db250ZW50V2lkdGgsIGNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICAgICAgY29uc3QgbGVmdEVkZ2UgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgICBjb25zdCBjbGFtcGVkUmlnaHQgPSBjbGFtcChyaWdodCwgW1xuICAgICAgICAgIENPTlRFTlRfTUFSR0lOLFxuICAgICAgICAgIE1hdGgubWF4KENPTlRFTlRfTUFSR0lOLCBsZWZ0RWRnZSAtIGNvbnRlbnRXaWR0aClcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLm1pbldpZHRoID0gbWluQ29udGVudFdpZHRoICsgXCJweFwiO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5yaWdodCA9IGNsYW1wZWRSaWdodCArIFwicHhcIjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1zID0gZ2V0SXRlbXMoKTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIENPTlRFTlRfTUFSR0lOICogMjtcbiAgICAgIGNvbnN0IGl0ZW1zSGVpZ2h0ID0gdmlld3BvcnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgY29uc3QgY29udGVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpO1xuICAgICAgY29uc3QgY29udGVudEJvcmRlclRvcFdpZHRoID0gcGFyc2VJbnQoY29udGVudFN0eWxlcy5ib3JkZXJUb3BXaWR0aCwgMTApO1xuICAgICAgY29uc3QgY29udGVudFBhZGRpbmdUb3AgPSBwYXJzZUludChjb250ZW50U3R5bGVzLnBhZGRpbmdUb3AsIDEwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aCA9IHBhcnNlSW50KGNvbnRlbnRTdHlsZXMuYm9yZGVyQm90dG9tV2lkdGgsIDEwKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRQYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoY29udGVudFN0eWxlcy5wYWRkaW5nQm90dG9tLCAxMCk7XG4gICAgICBjb25zdCBmdWxsQ29udGVudEhlaWdodCA9IGNvbnRlbnRCb3JkZXJUb3BXaWR0aCArIGNvbnRlbnRQYWRkaW5nVG9wICsgaXRlbXNIZWlnaHQgKyBjb250ZW50UGFkZGluZ0JvdHRvbSArIGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aDtcbiAgICAgIGNvbnN0IG1pbkNvbnRlbnRIZWlnaHQgPSBNYXRoLm1pbihzZWxlY3RlZEl0ZW0ub2Zmc2V0SGVpZ2h0ICogNSwgZnVsbENvbnRlbnRIZWlnaHQpO1xuICAgICAgY29uc3Qgdmlld3BvcnRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh2aWV3cG9ydCk7XG4gICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmdUb3AgPSBwYXJzZUludCh2aWV3cG9ydFN0eWxlcy5wYWRkaW5nVG9wLCAxMCk7XG4gICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmdCb3R0b20gPSBwYXJzZUludCh2aWV3cG9ydFN0eWxlcy5wYWRkaW5nQm90dG9tLCAxMCk7XG4gICAgICBjb25zdCB0b3BFZGdlVG9UcmlnZ2VyTWlkZGxlID0gdHJpZ2dlclJlY3QudG9wICsgdHJpZ2dlclJlY3QuaGVpZ2h0IC8gMiAtIENPTlRFTlRfTUFSR0lOO1xuICAgICAgY29uc3QgdHJpZ2dlck1pZGRsZVRvQm90dG9tRWRnZSA9IGF2YWlsYWJsZUhlaWdodCAtIHRvcEVkZ2VUb1RyaWdnZXJNaWRkbGU7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1IYWxmSGVpZ2h0ID0gc2VsZWN0ZWRJdGVtLm9mZnNldEhlaWdodCAvIDI7XG4gICAgICBjb25zdCBpdGVtT2Zmc2V0TWlkZGxlID0gc2VsZWN0ZWRJdGVtLm9mZnNldFRvcCArIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHQ7XG4gICAgICBjb25zdCBjb250ZW50VG9wVG9JdGVtTWlkZGxlID0gY29udGVudEJvcmRlclRvcFdpZHRoICsgY29udGVudFBhZGRpbmdUb3AgKyBpdGVtT2Zmc2V0TWlkZGxlO1xuICAgICAgY29uc3QgaXRlbU1pZGRsZVRvQ29udGVudEJvdHRvbSA9IGZ1bGxDb250ZW50SGVpZ2h0IC0gY29udGVudFRvcFRvSXRlbU1pZGRsZTtcbiAgICAgIGNvbnN0IHdpbGxBbGlnbldpdGhvdXRUb3BPdmVyZmxvdyA9IGNvbnRlbnRUb3BUb0l0ZW1NaWRkbGUgPD0gdG9wRWRnZVRvVHJpZ2dlck1pZGRsZTtcbiAgICAgIGlmICh3aWxsQWxpZ25XaXRob3V0VG9wT3ZlcmZsb3cpIHtcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IGl0ZW1zLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJdGVtID09PSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5yZWYuY3VycmVudDtcbiAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUuYm90dG9tID0gXCIwcHhcIjtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRPZmZzZXRCb3R0b20gPSBjb250ZW50LmNsaWVudEhlaWdodCAtIHZpZXdwb3J0Lm9mZnNldFRvcCAtIHZpZXdwb3J0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgY2xhbXBlZFRyaWdnZXJNaWRkbGVUb0JvdHRvbUVkZ2UgPSBNYXRoLm1heChcbiAgICAgICAgICB0cmlnZ2VyTWlkZGxlVG9Cb3R0b21FZGdlLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHQgKyAvLyB2aWV3cG9ydCBtaWdodCBoYXZlIHBhZGRpbmcgYm90dG9tLCBpbmNsdWRlIGl0IHRvIGF2b2lkIGEgc2Nyb2xsYWJsZSB2aWV3cG9ydFxuICAgICAgICAgIChpc0xhc3RJdGVtID8gdmlld3BvcnRQYWRkaW5nQm90dG9tIDogMCkgKyB2aWV3cG9ydE9mZnNldEJvdHRvbSArIGNvbnRlbnRCb3JkZXJCb3R0b21XaWR0aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjb250ZW50VG9wVG9JdGVtTWlkZGxlICsgY2xhbXBlZFRyaWdnZXJNaWRkbGVUb0JvdHRvbUVkZ2U7XG4gICAgICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzRmlyc3RJdGVtID0gaXRlbXMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEl0ZW0gPT09IGl0ZW1zWzBdLnJlZi5jdXJyZW50O1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS50b3AgPSBcIjBweFwiO1xuICAgICAgICBjb25zdCBjbGFtcGVkVG9wRWRnZVRvVHJpZ2dlck1pZGRsZSA9IE1hdGgubWF4KFxuICAgICAgICAgIHRvcEVkZ2VUb1RyaWdnZXJNaWRkbGUsXG4gICAgICAgICAgY29udGVudEJvcmRlclRvcFdpZHRoICsgdmlld3BvcnQub2Zmc2V0VG9wICsgLy8gdmlld3BvcnQgbWlnaHQgaGF2ZSBwYWRkaW5nIHRvcCwgaW5jbHVkZSBpdCB0byBhdm9pZCBhIHNjcm9sbGFibGUgdmlld3BvcnRcbiAgICAgICAgICAoaXNGaXJzdEl0ZW0gPyB2aWV3cG9ydFBhZGRpbmdUb3AgOiAwKSArIHNlbGVjdGVkSXRlbUhhbGZIZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY2xhbXBlZFRvcEVkZ2VUb1RyaWdnZXJNaWRkbGUgKyBpdGVtTWlkZGxlVG9Db250ZW50Qm90dG9tO1xuICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIHZpZXdwb3J0LnNjcm9sbFRvcCA9IGNvbnRlbnRUb3BUb0l0ZW1NaWRkbGUgLSB0b3BFZGdlVG9UcmlnZ2VyTWlkZGxlICsgdmlld3BvcnQub2Zmc2V0VG9wO1xuICAgICAgfVxuICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubWFyZ2luID0gYCR7Q09OVEVOVF9NQVJHSU59cHggMGA7XG4gICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5taW5IZWlnaHQgPSBtaW5Db250ZW50SGVpZ2h0ICsgXCJweFwiO1xuICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUubWF4SGVpZ2h0ID0gYXZhaWxhYmxlSGVpZ2h0ICsgXCJweFwiO1xuICAgICAgb25QbGFjZWQ/LigpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmLmN1cnJlbnQgPSB0cnVlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBnZXRJdGVtcyxcbiAgICBjb250ZXh0LnRyaWdnZXIsXG4gICAgY29udGV4dC52YWx1ZU5vZGUsXG4gICAgY29udGVudFdyYXBwZXIsXG4gICAgY29udGVudCxcbiAgICB2aWV3cG9ydCxcbiAgICBzZWxlY3RlZEl0ZW0sXG4gICAgc2VsZWN0ZWRJdGVtVGV4dCxcbiAgICBjb250ZXh0LmRpcixcbiAgICBvblBsYWNlZFxuICBdKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHBvc2l0aW9uKCksIFtwb3NpdGlvbl0pO1xuICBjb25zdCBbY29udGVudFpJbmRleCwgc2V0Q29udGVudFpJbmRleF0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjb250ZW50KSBzZXRDb250ZW50WkluZGV4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnQpLnpJbmRleCk7XG4gIH0sIFtjb250ZW50XSk7XG4gIGNvbnN0IGhhbmRsZVNjcm9sbEJ1dHRvbkNoYW5nZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZSAmJiBzaG91bGRSZXBvc2l0aW9uUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgcG9zaXRpb24oKTtcbiAgICAgICAgZm9jdXNTZWxlY3RlZEl0ZW0/LigpO1xuICAgICAgICBzaG91bGRSZXBvc2l0aW9uUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwb3NpdGlvbiwgZm9jdXNTZWxlY3RlZEl0ZW1dXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFNlbGVjdFZpZXdwb3J0UHJvdmlkZXIsXG4gICAge1xuICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICBjb250ZW50V3JhcHBlcixcbiAgICAgIHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmLFxuICAgICAgb25TY3JvbGxCdXR0b25DaGFuZ2U6IGhhbmRsZVNjcm9sbEJ1dHRvbkNoYW5nZSxcbiAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBzZXRDb250ZW50V3JhcHBlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHpJbmRleDogY29udGVudFpJbmRleFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wb3BwZXJQcm9wcyxcbiAgICAgICAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBnZXQgdGhlIGhlaWdodCBvZiB0aGUgY29udGVudCwgaXQgaW5jbHVkZXMgYm9yZGVycy4gSWYgd2Ugd2VyZSB0byBzZXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgaGVpZ2h0IHdpdGhvdXQgaGF2aW5nIGBib3hTaXppbmc6ICdib3JkZXItYm94J2AgaXQgd291bGQgYmUgdG9vIGJpZy5cbiAgICAgICAgICAgICAgICBib3hTaXppbmc6IFwiYm9yZGVyLWJveFwiLFxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3QgZ2V0IHRhbGxlciB0aGFuIHRoZSB3cmFwcGVyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAuLi5wb3BwZXJQcm9wcy5zdHlsZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICApO1xufSk7XG5TZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uLmRpc3BsYXlOYW1lID0gSVRFTV9BTElHTkVEX1BPU0lUSU9OX05BTUU7XG52YXIgUE9QUEVSX1BPU0lUSU9OX05BTUUgPSBcIlNlbGVjdFBvcHBlclBvc2l0aW9uXCI7XG52YXIgU2VsZWN0UG9wcGVyUG9zaXRpb24gPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfX3Njb3BlU2VsZWN0LFxuICAgIGFsaWduID0gXCJzdGFydFwiLFxuICAgIGNvbGxpc2lvblBhZGRpbmcgPSBDT05URU5UX01BUkdJTixcbiAgICAuLi5wb3BwZXJQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvcHBlclNjb3BlID0gdXNlUG9wcGVyU2NvcGUoX19zY29wZVNlbGVjdCk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFBvcHBlclByaW1pdGl2ZS5Db250ZW50LFxuICAgIHtcbiAgICAgIC4uLnBvcHBlclNjb3BlLFxuICAgICAgLi4ucG9wcGVyUHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIGFsaWduLFxuICAgICAgY29sbGlzaW9uUGFkZGluZyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC8vIEVuc3VyZSBib3JkZXItYm94IGZvciBmbG9hdGluZy11aSBjYWxjdWxhdGlvbnNcbiAgICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgICAgLi4ucG9wcGVyUHJvcHMuc3R5bGUsXG4gICAgICAgIC8vIHJlLW5hbWVzcGFjZSBleHBvc2VkIGNvbnRlbnQgY3VzdG9tIHByb3BlcnRpZXNcbiAgICAgICAgLi4ue1xuICAgICAgICAgIFwiLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luXCI6IFwidmFyKC0tcmFkaXgtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4pXCIsXG4gICAgICAgICAgXCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS13aWR0aFwiOiBcInZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgpXCIsXG4gICAgICAgICAgXCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClcIixcbiAgICAgICAgICBcIi0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGhcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLXdpZHRoKVwiLFxuICAgICAgICAgIFwiLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHRcIjogXCJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodClcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApO1xufSk7XG5TZWxlY3RQb3BwZXJQb3NpdGlvbi5kaXNwbGF5TmFtZSA9IFBPUFBFUl9QT1NJVElPTl9OQU1FO1xudmFyIFtTZWxlY3RWaWV3cG9ydFByb3ZpZGVyLCB1c2VTZWxlY3RWaWV3cG9ydENvbnRleHRdID0gY3JlYXRlU2VsZWN0Q29udGV4dChDT05URU5UX05BTUUsIHt9KTtcbnZhciBWSUVXUE9SVF9OQU1FID0gXCJTZWxlY3RWaWV3cG9ydFwiO1xudmFyIFNlbGVjdFZpZXdwb3J0ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG5vbmNlLCAuLi52aWV3cG9ydFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFZJRVdQT1JUX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGV4dCA9IHVzZVNlbGVjdFZpZXdwb3J0Q29udGV4dChWSUVXUE9SVF9OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCBjb250ZW50Q29udGV4dC5vblZpZXdwb3J0Q2hhbmdlKTtcbiAgICBjb25zdCBwcmV2U2Nyb2xsVG9wUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4cyhGcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgIF9faHRtbDogYFtkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF17c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7fVtkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF06Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub25jZVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGpzeChDb2xsZWN0aW9uLlNsb3QsIHsgc2NvcGU6IF9fc2NvcGVTZWxlY3QsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICB7XG4gICAgICAgICAgXCJkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydFwiOiBcIlwiLFxuICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgLi4udmlld3BvcnRQcm9wcyxcbiAgICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgLy8gd2UgdXNlIHBvc2l0aW9uOiAncmVsYXRpdmUnIGhlcmUgb24gdGhlIGB2aWV3cG9ydGAgc28gdGhhdCB3aGVuIHdlIGNhbGxcbiAgICAgICAgICAgIC8vIGBzZWxlY3RlZEl0ZW0ub2Zmc2V0VG9wYCBpbiBjYWxjdWxhdGlvbnMsIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAvLyAoaW5kZXBlbmRlbnQgb2YgdGhlIHNjcm9sbFVwQnV0dG9uKS5cbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgLy8gVmlld3BvcnQgc2hvdWxkIG9ubHkgYmUgc2Nyb2xsYWJsZSBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uLlxuICAgICAgICAgICAgLy8gVGhpcyB3b24ndCB3b3JrIGluIHZlcnRpY2FsIHdyaXRpbmcgbW9kZXMsIHNvIHdlJ2xsIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJldmlzaXQgdGhpcyBpZi93aGVuIHRoYXQgaXMgc3VwcG9ydGVkXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvdmVydGljYWwtZm9ybS1jb250cm9sc1xuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuIGF1dG9cIixcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0UHJvcHMuc3R5bGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU2Nyb2xsOiBjb21wb3NlRXZlbnRIYW5kbGVycyh2aWV3cG9ydFByb3BzLm9uU2Nyb2xsLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGVudFdyYXBwZXIsIHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmIH0gPSB2aWV3cG9ydENvbnRleHQ7XG4gICAgICAgICAgICBpZiAoc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY/LmN1cnJlbnQgJiYgY29udGVudFdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZWRCeSA9IE1hdGguYWJzKHByZXZTY3JvbGxUb3BSZWYuY3VycmVudCAtIHZpZXdwb3J0LnNjcm9sbFRvcCk7XG4gICAgICAgICAgICAgIGlmIChzY3JvbGxlZEJ5ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIENPTlRFTlRfTUFSR0lOICogMjtcbiAgICAgICAgICAgICAgICBjb25zdCBjc3NNaW5IZWlnaHQgPSBwYXJzZUZsb2F0KGNvbnRlbnRXcmFwcGVyLnN0eWxlLm1pbkhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3NzSGVpZ2h0ID0gcGFyc2VGbG9hdChjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZIZWlnaHQgPSBNYXRoLm1heChjc3NNaW5IZWlnaHQsIGNzc0hlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZIZWlnaHQgPCBhdmFpbGFibGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRIZWlnaHQgPSBwcmV2SGVpZ2h0ICsgc2Nyb2xsZWRCeTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYW1wZWROZXh0SGVpZ2h0ID0gTWF0aC5taW4oYXZhaWxhYmxlSGVpZ2h0LCBuZXh0SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodERpZmYgPSBuZXh0SGVpZ2h0IC0gY2xhbXBlZE5leHRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBjbGFtcGVkTmV4dEhlaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50V3JhcHBlci5zdHlsZS5ib3R0b20gPT09IFwiMHB4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQuc2Nyb2xsVG9wID0gaGVpZ2h0RGlmZiA+IDAgPyBoZWlnaHREaWZmIDogMDtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImZsZXgtZW5kXCI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSB2aWV3cG9ydC5zY3JvbGxUb3A7XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKSB9KVxuICAgIF0gfSk7XG4gIH1cbik7XG5TZWxlY3RWaWV3cG9ydC5kaXNwbGF5TmFtZSA9IFZJRVdQT1JUX05BTUU7XG52YXIgR1JPVVBfTkFNRSA9IFwiU2VsZWN0R3JvdXBcIjtcbnZhciBbU2VsZWN0R3JvdXBDb250ZXh0UHJvdmlkZXIsIHVzZVNlbGVjdEdyb3VwQ29udGV4dF0gPSBjcmVhdGVTZWxlY3RDb250ZXh0KEdST1VQX05BTUUpO1xudmFyIFNlbGVjdEdyb3VwID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIC4uLmdyb3VwUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGdyb3VwSWQgPSB1c2VJZCgpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNlbGVjdEdyb3VwQ29udGV4dFByb3ZpZGVyLCB7IHNjb3BlOiBfX3Njb3BlU2VsZWN0LCBpZDogZ3JvdXBJZCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyByb2xlOiBcImdyb3VwXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGdyb3VwSWQsIC4uLmdyb3VwUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pIH0pO1xuICB9XG4pO1xuU2VsZWN0R3JvdXAuZGlzcGxheU5hbWUgPSBHUk9VUF9OQU1FO1xudmFyIExBQkVMX05BTUUgPSBcIlNlbGVjdExhYmVsXCI7XG52YXIgU2VsZWN0TGFiZWwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4ubGFiZWxQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgZ3JvdXBDb250ZXh0ID0gdXNlU2VsZWN0R3JvdXBDb250ZXh0KExBQkVMX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5kaXYsIHsgaWQ6IGdyb3VwQ29udGV4dC5pZCwgLi4ubGFiZWxQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSk7XG4gIH1cbik7XG5TZWxlY3RMYWJlbC5kaXNwbGF5TmFtZSA9IExBQkVMX05BTUU7XG52YXIgSVRFTV9OQU1FID0gXCJTZWxlY3RJdGVtXCI7XG52YXIgW1NlbGVjdEl0ZW1Db250ZXh0UHJvdmlkZXIsIHVzZVNlbGVjdEl0ZW1Db250ZXh0XSA9IGNyZWF0ZVNlbGVjdENvbnRleHQoSVRFTV9OQU1FKTtcbnZhciBTZWxlY3RJdGVtID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBfX3Njb3BlU2VsZWN0LFxuICAgICAgdmFsdWUsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgdGV4dFZhbHVlOiB0ZXh0VmFsdWVQcm9wLFxuICAgICAgLi4uaXRlbVByb3BzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VTZWxlY3RDb250ZXh0KElURU1fTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgY29udGVudENvbnRleHQgPSB1c2VTZWxlY3RDb250ZW50Q29udGV4dChJVEVNX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjb250ZXh0LnZhbHVlID09PSB2YWx1ZTtcbiAgICBjb25zdCBbdGV4dFZhbHVlLCBzZXRUZXh0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUodGV4dFZhbHVlUHJvcCA/PyBcIlwiKTtcbiAgICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhcbiAgICAgIGZvcndhcmRlZFJlZixcbiAgICAgIChub2RlKSA9PiBjb250ZW50Q29udGV4dC5pdGVtUmVmQ2FsbGJhY2s/Lihub2RlLCB2YWx1ZSwgZGlzYWJsZWQpXG4gICAgKTtcbiAgICBjb25zdCB0ZXh0SWQgPSB1c2VJZCgpO1xuICAgIGNvbnN0IHBvaW50ZXJUeXBlUmVmID0gUmVhY3QudXNlUmVmKFwidG91Y2hcIik7XG4gICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBjb250ZXh0Lm9uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgICBjb250ZXh0Lm9uT3BlbkNoYW5nZShmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBIDxTZWxlY3QuSXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgU2VsZWN0SXRlbUNvbnRleHRQcm92aWRlcixcbiAgICAgIHtcbiAgICAgICAgc2NvcGU6IF9fc2NvcGVTZWxlY3QsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgdGV4dElkLFxuICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICBvbkl0ZW1UZXh0Q2hhbmdlOiBSZWFjdC51c2VDYWxsYmFjaygobm9kZSkgPT4ge1xuICAgICAgICAgIHNldFRleHRWYWx1ZSgocHJldlRleHRWYWx1ZSkgPT4gcHJldlRleHRWYWx1ZSB8fCAobm9kZT8udGV4dENvbnRlbnQgPz8gXCJcIikudHJpbSgpKTtcbiAgICAgICAgfSwgW10pLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICBDb2xsZWN0aW9uLkl0ZW1TbG90LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNjb3BlOiBfX3Njb3BlU2VsZWN0LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIHRleHRWYWx1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0ZXh0SWQsXG4gICAgICAgICAgICAgICAgXCJkYXRhLWhpZ2hsaWdodGVkXCI6IGlzRm9jdXNlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzU2VsZWN0ZWQgJiYgaXNGb2N1c2VkLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBpc1NlbGVjdGVkID8gXCJjaGVja2VkXCIgOiBcInVuY2hlY2tlZFwiLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCB8fCB2b2lkIDAsXG4gICAgICAgICAgICAgICAgXCJkYXRhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICB0YWJJbmRleDogZGlzYWJsZWQgPyB2b2lkIDAgOiAtMSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtUHJvcHMsXG4gICAgICAgICAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uRm9jdXMsICgpID0+IHNldElzRm9jdXNlZCh0cnVlKSksXG4gICAgICAgICAgICAgICAgb25CbHVyOiBjb21wb3NlRXZlbnRIYW5kbGVycyhpdGVtUHJvcHMub25CbHVyLCAoKSA9PiBzZXRJc0ZvY3VzZWQoZmFsc2UpKSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyhpdGVtUHJvcHMub25DbGljaywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgIT09IFwibW91c2VcIikgaGFuZGxlU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb25Qb2ludGVyVXA6IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vblBvaW50ZXJVcCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPT09IFwibW91c2VcIikgaGFuZGxlU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb25Qb2ludGVyRG93bjogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uUG9pbnRlckRvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGVSZWYuY3VycmVudCA9IGV2ZW50LnBvaW50ZXJUeXBlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG9uUG9pbnRlck1vdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vblBvaW50ZXJNb3ZlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSBldmVudC5wb2ludGVyVHlwZTtcbiAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGV4dC5vbkl0ZW1MZWF2ZT8uKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPT09IFwibW91c2VcIikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvblBvaW50ZXJMZWF2ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMoaXRlbVByb3BzLm9uUG9pbnRlckxlYXZlLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRDb250ZXh0Lm9uSXRlbUxlYXZlPy4oKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvbktleURvd246IGNvbXBvc2VFdmVudEhhbmRsZXJzKGl0ZW1Qcm9wcy5vbktleURvd24sIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUeXBpbmdBaGVhZCA9IGNvbnRlbnRDb250ZXh0LnNlYXJjaFJlZj8uY3VycmVudCAhPT0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1R5cGluZ0FoZWFkICYmIGV2ZW50LmtleSA9PT0gXCIgXCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGlmIChTRUxFQ1RJT05fS0VZUy5pbmNsdWRlcyhldmVudC5rZXkpKSBoYW5kbGVTZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiIFwiKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuU2VsZWN0SXRlbS5kaXNwbGF5TmFtZSA9IElURU1fTkFNRTtcbnZhciBJVEVNX1RFWFRfTkFNRSA9IFwiU2VsZWN0SXRlbVRleHRcIjtcbnZhciBTZWxlY3RJdGVtVGV4dCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCBjbGFzc05hbWUsIHN0eWxlLCAuLi5pdGVtVGV4dFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgY29udGVudENvbnRleHQgPSB1c2VTZWxlY3RDb250ZW50Q29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgaXRlbUNvbnRleHQgPSB1c2VTZWxlY3RJdGVtQ29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgbmF0aXZlT3B0aW9uc0NvbnRleHQgPSB1c2VTZWxlY3ROYXRpdmVPcHRpb25zQ29udGV4dChJVEVNX1RFWFRfTkFNRSwgX19zY29wZVNlbGVjdCk7XG4gICAgY29uc3QgW2l0ZW1UZXh0Tm9kZSwgc2V0SXRlbVRleHROb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhcbiAgICAgIGZvcndhcmRlZFJlZixcbiAgICAgIChub2RlKSA9PiBzZXRJdGVtVGV4dE5vZGUobm9kZSksXG4gICAgICBpdGVtQ29udGV4dC5vbkl0ZW1UZXh0Q2hhbmdlLFxuICAgICAgKG5vZGUpID0+IGNvbnRlbnRDb250ZXh0Lml0ZW1UZXh0UmVmQ2FsbGJhY2s/Lihub2RlLCBpdGVtQ29udGV4dC52YWx1ZSwgaXRlbUNvbnRleHQuZGlzYWJsZWQpXG4gICAgKTtcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGl0ZW1UZXh0Tm9kZT8udGV4dENvbnRlbnQ7XG4gICAgY29uc3QgbmF0aXZlT3B0aW9uID0gUmVhY3QudXNlTWVtbyhcbiAgICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJvcHRpb25cIiwgeyB2YWx1ZTogaXRlbUNvbnRleHQudmFsdWUsIGRpc2FibGVkOiBpdGVtQ29udGV4dC5kaXNhYmxlZCwgY2hpbGRyZW46IHRleHRDb250ZW50IH0sIGl0ZW1Db250ZXh0LnZhbHVlKSxcbiAgICAgIFtpdGVtQ29udGV4dC5kaXNhYmxlZCwgaXRlbUNvbnRleHQudmFsdWUsIHRleHRDb250ZW50XVxuICAgICk7XG4gICAgY29uc3QgeyBvbk5hdGl2ZU9wdGlvbkFkZCwgb25OYXRpdmVPcHRpb25SZW1vdmUgfSA9IG5hdGl2ZU9wdGlvbnNDb250ZXh0O1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICBvbk5hdGl2ZU9wdGlvbkFkZChuYXRpdmVPcHRpb24pO1xuICAgICAgcmV0dXJuICgpID0+IG9uTmF0aXZlT3B0aW9uUmVtb3ZlKG5hdGl2ZU9wdGlvbik7XG4gICAgfSwgW29uTmF0aXZlT3B0aW9uQWRkLCBvbk5hdGl2ZU9wdGlvblJlbW92ZSwgbmF0aXZlT3B0aW9uXSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5zcGFuLCB7IGlkOiBpdGVtQ29udGV4dC50ZXh0SWQsIC4uLml0ZW1UZXh0UHJvcHMsIHJlZjogY29tcG9zZWRSZWZzIH0pLFxuICAgICAgaXRlbUNvbnRleHQuaXNTZWxlY3RlZCAmJiBjb250ZXh0LnZhbHVlTm9kZSAmJiAhY29udGV4dC52YWx1ZU5vZGVIYXNDaGlsZHJlbiA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChpdGVtVGV4dFByb3BzLmNoaWxkcmVuLCBjb250ZXh0LnZhbHVlTm9kZSkgOiBudWxsXG4gICAgXSB9KTtcbiAgfVxuKTtcblNlbGVjdEl0ZW1UZXh0LmRpc3BsYXlOYW1lID0gSVRFTV9URVhUX05BTUU7XG52YXIgSVRFTV9JTkRJQ0FUT1JfTkFNRSA9IFwiU2VsZWN0SXRlbUluZGljYXRvclwiO1xudmFyIFNlbGVjdEl0ZW1JbmRpY2F0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4uaXRlbUluZGljYXRvclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBpdGVtQ29udGV4dCA9IHVzZVNlbGVjdEl0ZW1Db250ZXh0KElURU1fSU5ESUNBVE9SX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiBpdGVtQ29udGV4dC5pc1NlbGVjdGVkID8gLyogQF9fUFVSRV9fICovIGpzeChQcmltaXRpdmUuc3BhbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIC4uLml0ZW1JbmRpY2F0b3JQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuU2VsZWN0SXRlbUluZGljYXRvci5kaXNwbGF5TmFtZSA9IElURU1fSU5ESUNBVE9SX05BTUU7XG52YXIgU0NST0xMX1VQX0JVVFRPTl9OQU1FID0gXCJTZWxlY3RTY3JvbGxVcEJ1dHRvblwiO1xudmFyIFNlbGVjdFNjcm9sbFVwQnV0dG9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFNDUk9MTF9VUF9CVVRUT05fTkFNRSwgcHJvcHMuX19zY29wZVNlbGVjdCk7XG4gIGNvbnN0IHZpZXdwb3J0Q29udGV4dCA9IHVzZVNlbGVjdFZpZXdwb3J0Q29udGV4dChTQ1JPTExfVVBfQlVUVE9OX05BTUUsIHByb3BzLl9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBbY2FuU2Nyb2xsVXAsIHNldENhblNjcm9sbFVwXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgY29tcG9zZWRSZWZzID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgdmlld3BvcnRDb250ZXh0Lm9uU2Nyb2xsQnV0dG9uQ2hhbmdlKTtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY29udGVudENvbnRleHQudmlld3BvcnQgJiYgY29udGVudENvbnRleHQuaXNQb3NpdGlvbmVkKSB7XG4gICAgICBsZXQgaGFuZGxlU2Nyb2xsMiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBjYW5TY3JvbGxVcDIgPSB2aWV3cG9ydC5zY3JvbGxUb3AgPiAwO1xuICAgICAgICBzZXRDYW5TY3JvbGxVcChjYW5TY3JvbGxVcDIpO1xuICAgICAgfTtcbiAgICAgIHZhciBoYW5kbGVTY3JvbGwgPSBoYW5kbGVTY3JvbGwyO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBjb250ZW50Q29udGV4dC52aWV3cG9ydDtcbiAgICAgIGhhbmRsZVNjcm9sbDIoKTtcbiAgICAgIHZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsMik7XG4gICAgICByZXR1cm4gKCkgPT4gdmlld3BvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwyKTtcbiAgICB9XG4gIH0sIFtjb250ZW50Q29udGV4dC52aWV3cG9ydCwgY29udGVudENvbnRleHQuaXNQb3NpdGlvbmVkXSk7XG4gIHJldHVybiBjYW5TY3JvbGxVcCA/IC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbCxcbiAgICB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgb25BdXRvU2Nyb2xsOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnQsIHNlbGVjdGVkSXRlbSB9ID0gY29udGVudENvbnRleHQ7XG4gICAgICAgIGlmICh2aWV3cG9ydCAmJiBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICB2aWV3cG9ydC5zY3JvbGxUb3AgPSB2aWV3cG9ydC5zY3JvbGxUb3AgLSBzZWxlY3RlZEl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApIDogbnVsbDtcbn0pO1xuU2VsZWN0U2Nyb2xsVXBCdXR0b24uZGlzcGxheU5hbWUgPSBTQ1JPTExfVVBfQlVUVE9OX05BTUU7XG52YXIgU0NST0xMX0RPV05fQlVUVE9OX05BTUUgPSBcIlNlbGVjdFNjcm9sbERvd25CdXR0b25cIjtcbnZhciBTZWxlY3RTY3JvbGxEb3duQnV0dG9uID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFNDUk9MTF9ET1dOX0JVVFRPTl9OQU1FLCBwcm9wcy5fX3Njb3BlU2VsZWN0KTtcbiAgY29uc3Qgdmlld3BvcnRDb250ZXh0ID0gdXNlU2VsZWN0Vmlld3BvcnRDb250ZXh0KFNDUk9MTF9ET1dOX0JVVFRPTl9OQU1FLCBwcm9wcy5fX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgW2NhblNjcm9sbERvd24sIHNldENhblNjcm9sbERvd25dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCB2aWV3cG9ydENvbnRleHQub25TY3JvbGxCdXR0b25DaGFuZ2UpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjb250ZW50Q29udGV4dC52aWV3cG9ydCAmJiBjb250ZW50Q29udGV4dC5pc1Bvc2l0aW9uZWQpIHtcbiAgICAgIGxldCBoYW5kbGVTY3JvbGwyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbCA9IHZpZXdwb3J0LnNjcm9sbEhlaWdodCAtIHZpZXdwb3J0LmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgY2FuU2Nyb2xsRG93bjIgPSBNYXRoLmNlaWwodmlld3BvcnQuc2Nyb2xsVG9wKSA8IG1heFNjcm9sbDtcbiAgICAgICAgc2V0Q2FuU2Nyb2xsRG93bihjYW5TY3JvbGxEb3duMik7XG4gICAgICB9O1xuICAgICAgdmFyIGhhbmRsZVNjcm9sbCA9IGhhbmRsZVNjcm9sbDI7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGNvbnRlbnRDb250ZXh0LnZpZXdwb3J0O1xuICAgICAgaGFuZGxlU2Nyb2xsMigpO1xuICAgICAgdmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoYW5kbGVTY3JvbGwyKTtcbiAgICAgIHJldHVybiAoKSA9PiB2aWV3cG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbDIpO1xuICAgIH1cbiAgfSwgW2NvbnRlbnRDb250ZXh0LnZpZXdwb3J0LCBjb250ZW50Q29udGV4dC5pc1Bvc2l0aW9uZWRdKTtcbiAgcmV0dXJuIGNhblNjcm9sbERvd24gPyAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFNlbGVjdFNjcm9sbEJ1dHRvbkltcGwsXG4gICAge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgIG9uQXV0b1Njcm9sbDogKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHZpZXdwb3J0LCBzZWxlY3RlZEl0ZW0gfSA9IGNvbnRlbnRDb250ZXh0O1xuICAgICAgICBpZiAodmlld3BvcnQgJiYgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgdmlld3BvcnQuc2Nyb2xsVG9wID0gdmlld3BvcnQuc2Nyb2xsVG9wICsgc2VsZWN0ZWRJdGVtLm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgKSA6IG51bGw7XG59KTtcblNlbGVjdFNjcm9sbERvd25CdXR0b24uZGlzcGxheU5hbWUgPSBTQ1JPTExfRE9XTl9CVVRUT05fTkFNRTtcbnZhciBTZWxlY3RTY3JvbGxCdXR0b25JbXBsID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICBjb25zdCB7IF9fc2NvcGVTZWxlY3QsIG9uQXV0b1Njcm9sbCwgLi4uc2Nyb2xsSW5kaWNhdG9yUHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KFwiU2VsZWN0U2Nyb2xsQnV0dG9uXCIsIF9fc2NvcGVTZWxlY3QpO1xuICBjb25zdCBhdXRvU2Nyb2xsVGltZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGdldEl0ZW1zID0gdXNlQ29sbGVjdGlvbihfX3Njb3BlU2VsZWN0KTtcbiAgY29uc3QgY2xlYXJBdXRvU2Nyb2xsVGltZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGF1dG9TY3JvbGxUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCk7XG4gICAgICBhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyQXV0b1Njcm9sbFRpbWVyKCk7XG4gIH0sIFtjbGVhckF1dG9TY3JvbGxUaW1lcl0pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSBnZXRJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ucmVmLmN1cnJlbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgIGFjdGl2ZUl0ZW0/LnJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW2dldEl0ZW1zXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFByaW1pdGl2ZS5kaXYsXG4gICAge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgLi4uc2Nyb2xsSW5kaWNhdG9yUHJvcHMsXG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIHN0eWxlOiB7IGZsZXhTaHJpbms6IDAsIC4uLnNjcm9sbEluZGljYXRvclByb3BzLnN0eWxlIH0sXG4gICAgICBvblBvaW50ZXJEb3duOiBjb21wb3NlRXZlbnRIYW5kbGVycyhzY3JvbGxJbmRpY2F0b3JQcm9wcy5vblBvaW50ZXJEb3duLCAoKSA9PiB7XG4gICAgICAgIGlmIChhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGF1dG9TY3JvbGxUaW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKG9uQXV0b1Njcm9sbCwgNTApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG9uUG9pbnRlck1vdmU6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHNjcm9sbEluZGljYXRvclByb3BzLm9uUG9pbnRlck1vdmUsICgpID0+IHtcbiAgICAgICAgY29udGVudENvbnRleHQub25JdGVtTGVhdmU/LigpO1xuICAgICAgICBpZiAoYXV0b1Njcm9sbFRpbWVyUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBhdXRvU2Nyb2xsVGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRJbnRlcnZhbChvbkF1dG9TY3JvbGwsIDUwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBvblBvaW50ZXJMZWF2ZTogY29tcG9zZUV2ZW50SGFuZGxlcnMoc2Nyb2xsSW5kaWNhdG9yUHJvcHMub25Qb2ludGVyTGVhdmUsICgpID0+IHtcbiAgICAgICAgY2xlYXJBdXRvU2Nyb2xsVGltZXIoKTtcbiAgICAgIH0pXG4gICAgfVxuICApO1xufSk7XG52YXIgU0VQQVJBVE9SX05BTUUgPSBcIlNlbGVjdFNlcGFyYXRvclwiO1xudmFyIFNlbGVjdFNlcGFyYXRvciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlU2VsZWN0LCAuLi5zZXBhcmF0b3JQcm9wcyB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUHJpbWl0aXZlLmRpdiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIC4uLnNlcGFyYXRvclByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcblNlbGVjdFNlcGFyYXRvci5kaXNwbGF5TmFtZSA9IFNFUEFSQVRPUl9OQU1FO1xudmFyIEFSUk9XX05BTUUgPSBcIlNlbGVjdEFycm93XCI7XG52YXIgU2VsZWN0QXJyb3cgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZVNlbGVjdCwgLi4uYXJyb3dQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgcG9wcGVyU2NvcGUgPSB1c2VQb3BwZXJTY29wZShfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU2VsZWN0Q29udGV4dChBUlJPV19OQU1FLCBfX3Njb3BlU2VsZWN0KTtcbiAgICBjb25zdCBjb250ZW50Q29udGV4dCA9IHVzZVNlbGVjdENvbnRlbnRDb250ZXh0KEFSUk9XX05BTUUsIF9fc2NvcGVTZWxlY3QpO1xuICAgIHJldHVybiBjb250ZXh0Lm9wZW4gJiYgY29udGVudENvbnRleHQucG9zaXRpb24gPT09IFwicG9wcGVyXCIgPyAvKiBAX19QVVJFX18gKi8ganN4KFBvcHBlclByaW1pdGl2ZS5BcnJvdywgeyAuLi5wb3BwZXJTY29wZSwgLi4uYXJyb3dQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiBudWxsO1xuICB9XG4pO1xuU2VsZWN0QXJyb3cuZGlzcGxheU5hbWUgPSBBUlJPV19OQU1FO1xudmFyIEJVQkJMRV9JTlBVVF9OQU1FID0gXCJTZWxlY3RCdWJibGVJbnB1dFwiO1xudmFyIFNlbGVjdEJ1YmJsZUlucHV0ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHsgX19zY29wZVNlbGVjdCwgdmFsdWUsIC4uLnByb3BzIH0sIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCByZWYpO1xuICAgIGNvbnN0IHByZXZWYWx1ZSA9IHVzZVByZXZpb3VzKHZhbHVlKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ID0gcmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIXNlbGVjdCkgcmV0dXJuO1xuICAgICAgY29uc3Qgc2VsZWN0UHJvdG8gPSB3aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgIHNlbGVjdFByb3RvLFxuICAgICAgICBcInZhbHVlXCJcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXRWYWx1ZSA9IGRlc2NyaXB0b3Iuc2V0O1xuICAgICAgaWYgKHByZXZWYWx1ZSAhPT0gdmFsdWUgJiYgc2V0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pO1xuICAgICAgICBzZXRWYWx1ZS5jYWxsKHNlbGVjdCwgdmFsdWUpO1xuICAgICAgICBzZWxlY3QuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfSwgW3ByZXZWYWx1ZSwgdmFsdWVdKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5zZWxlY3QsXG4gICAgICB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBzdHlsZTogeyAuLi5WSVNVQUxMWV9ISURERU5fU1RZTEVTLCAuLi5wcm9wcy5zdHlsZSB9LFxuICAgICAgICByZWY6IGNvbXBvc2VkUmVmcyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB2YWx1ZVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5TZWxlY3RCdWJibGVJbnB1dC5kaXNwbGF5TmFtZSA9IEJVQkJMRV9JTlBVVF9OQU1FO1xuZnVuY3Rpb24gc2hvdWxkU2hvd1BsYWNlaG9sZGVyKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gdm9pZCAwO1xufVxuZnVuY3Rpb24gdXNlVHlwZWFoZWFkU2VhcmNoKG9uU2VhcmNoQ2hhbmdlKSB7XG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IHVzZUNhbGxiYWNrUmVmKG9uU2VhcmNoQ2hhbmdlKTtcbiAgY29uc3Qgc2VhcmNoUmVmID0gUmVhY3QudXNlUmVmKFwiXCIpO1xuICBjb25zdCB0aW1lclJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgaGFuZGxlVHlwZWFoZWFkU2VhcmNoID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGtleSkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gc2VhcmNoUmVmLmN1cnJlbnQgKyBrZXk7XG4gICAgICBoYW5kbGVTZWFyY2hDaGFuZ2Uoc2VhcmNoKTtcbiAgICAgIChmdW5jdGlvbiB1cGRhdGVTZWFyY2godmFsdWUpIHtcbiAgICAgICAgc2VhcmNoUmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBcIlwiKSB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdXBkYXRlU2VhcmNoKFwiXCIpLCAxZTMpO1xuICAgICAgfSkoc2VhcmNoKTtcbiAgICB9LFxuICAgIFtoYW5kbGVTZWFyY2hDaGFuZ2VdXG4gICk7XG4gIGNvbnN0IHJlc2V0VHlwZWFoZWFkID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNlYXJjaFJlZi5jdXJyZW50ID0gXCJcIjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpO1xuICB9LCBbXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFtzZWFyY2hSZWYsIGhhbmRsZVR5cGVhaGVhZFNlYXJjaCwgcmVzZXRUeXBlYWhlYWRdO1xufVxuZnVuY3Rpb24gZmluZE5leHRJdGVtKGl0ZW1zLCBzZWFyY2gsIGN1cnJlbnRJdGVtKSB7XG4gIGNvbnN0IGlzUmVwZWF0ZWQgPSBzZWFyY2gubGVuZ3RoID4gMSAmJiBBcnJheS5mcm9tKHNlYXJjaCkuZXZlcnkoKGNoYXIpID0+IGNoYXIgPT09IHNlYXJjaFswXSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBpc1JlcGVhdGVkID8gc2VhcmNoWzBdIDogc2VhcmNoO1xuICBjb25zdCBjdXJyZW50SXRlbUluZGV4ID0gY3VycmVudEl0ZW0gPyBpdGVtcy5pbmRleE9mKGN1cnJlbnRJdGVtKSA6IC0xO1xuICBsZXQgd3JhcHBlZEl0ZW1zID0gd3JhcEFycmF5KGl0ZW1zLCBNYXRoLm1heChjdXJyZW50SXRlbUluZGV4LCAwKSk7XG4gIGNvbnN0IGV4Y2x1ZGVDdXJyZW50SXRlbSA9IG5vcm1hbGl6ZWRTZWFyY2gubGVuZ3RoID09PSAxO1xuICBpZiAoZXhjbHVkZUN1cnJlbnRJdGVtKSB3cmFwcGVkSXRlbXMgPSB3cmFwcGVkSXRlbXMuZmlsdGVyKCh2KSA9PiB2ICE9PSBjdXJyZW50SXRlbSk7XG4gIGNvbnN0IG5leHRJdGVtID0gd3JhcHBlZEl0ZW1zLmZpbmQoXG4gICAgKGl0ZW0pID0+IGl0ZW0udGV4dFZhbHVlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChub3JtYWxpemVkU2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gICk7XG4gIHJldHVybiBuZXh0SXRlbSAhPT0gY3VycmVudEl0ZW0gPyBuZXh0SXRlbSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHdyYXBBcnJheShhcnJheSwgc3RhcnRJbmRleCkge1xuICByZXR1cm4gYXJyYXkubWFwKChfLCBpbmRleCkgPT4gYXJyYXlbKHN0YXJ0SW5kZXggKyBpbmRleCkgJSBhcnJheS5sZW5ndGhdKTtcbn1cbnZhciBSb290MiA9IFNlbGVjdDtcbnZhciBUcmlnZ2VyID0gU2VsZWN0VHJpZ2dlcjtcbnZhciBWYWx1ZSA9IFNlbGVjdFZhbHVlO1xudmFyIEljb24gPSBTZWxlY3RJY29uO1xudmFyIFBvcnRhbCA9IFNlbGVjdFBvcnRhbDtcbnZhciBDb250ZW50MiA9IFNlbGVjdENvbnRlbnQ7XG52YXIgVmlld3BvcnQgPSBTZWxlY3RWaWV3cG9ydDtcbnZhciBHcm91cCA9IFNlbGVjdEdyb3VwO1xudmFyIExhYmVsID0gU2VsZWN0TGFiZWw7XG52YXIgSXRlbSA9IFNlbGVjdEl0ZW07XG52YXIgSXRlbVRleHQgPSBTZWxlY3RJdGVtVGV4dDtcbnZhciBJdGVtSW5kaWNhdG9yID0gU2VsZWN0SXRlbUluZGljYXRvcjtcbnZhciBTY3JvbGxVcEJ1dHRvbiA9IFNlbGVjdFNjcm9sbFVwQnV0dG9uO1xudmFyIFNjcm9sbERvd25CdXR0b24gPSBTZWxlY3RTY3JvbGxEb3duQnV0dG9uO1xudmFyIFNlcGFyYXRvciA9IFNlbGVjdFNlcGFyYXRvcjtcbnZhciBBcnJvdzIgPSBTZWxlY3RBcnJvdztcbmV4cG9ydCB7XG4gIEFycm93MiBhcyBBcnJvdyxcbiAgQ29udGVudDIgYXMgQ29udGVudCxcbiAgR3JvdXAsXG4gIEljb24sXG4gIEl0ZW0sXG4gIEl0ZW1JbmRpY2F0b3IsXG4gIEl0ZW1UZXh0LFxuICBMYWJlbCxcbiAgUG9ydGFsLFxuICBSb290MiBhcyBSb290LFxuICBTY3JvbGxEb3duQnV0dG9uLFxuICBTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0LFxuICBTZWxlY3RBcnJvdyxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEljb24sXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdEl0ZW1JbmRpY2F0b3IsXG4gIFNlbGVjdEl0ZW1UZXh0LFxuICBTZWxlY3RMYWJlbCxcbiAgU2VsZWN0UG9ydGFsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbiAgU2VsZWN0Vmlld3BvcnQsXG4gIFNlcGFyYXRvcixcbiAgVHJpZ2dlcixcbiAgVmFsdWUsXG4gIFZpZXdwb3J0LFxuICBjcmVhdGVTZWxlY3RTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAncmFkaXgtdWknO1xudmFyIERyb3BEb3duUm9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IHByb3BzLmRlZmF1bHRPcGVuLCBvcGVuID0gcHJvcHMub3Blbiwgb25PcGVuQ2hhbmdlID0gcHJvcHMub25PcGVuQ2hhbmdlLCB2YWx1ZSA9IHByb3BzLnZhbHVlLCBvblZhbHVlQ2hhbmdlID0gcHJvcHMub25WYWx1ZUNoYW5nZSwgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZCwgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuUm9vdCwgeyBkZWZhdWx0T3BlbjogZGVmYXVsdE9wZW4sIG9wZW46IG9wZW4sIG9uT3BlbkNoYW5nZTogb25PcGVuQ2hhbmdlLCB2YWx1ZTogdmFsdWUsIG9uVmFsdWVDaGFuZ2U6IG9uVmFsdWVDaGFuZ2UsIGRpc2FibGVkOiBkaXNhYmxlZCwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIERyb3BEb3duVHJpZ2dlciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhc0NoaWxkID0gcHJvcHMuYXNDaGlsZCwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuVHJpZ2dlciwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWRyb3AtZG93biB0cmlnZ2VyIFwiLmNvbmNhdChjbGFzc05hbWUpLCBhc0NoaWxkOiBhc0NoaWxkLCBzdHlsZTogc3R5bGUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIERyb3BEb3duVmFsdWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHBsYWNlaG9sZGVyID0gcHJvcHMucGxhY2Vob2xkZXIsIHN0eWxlID0gcHJvcHMuc3R5bGU7XG4gICAgcmV0dXJuIChfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBjaGlsZHJlbjogX2pzeChTZWxlY3QuVmFsdWUsIHsgYXNDaGlsZDogYXNDaGlsZCwgcGxhY2Vob2xkZXI6IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAnbnVyaS1wbGFjZWhvbGRlcicsIGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSwgcmVmOiByZWYsIHN0eWxlOiBzdHlsZSB9KSB9KSk7XG59KTtcbnZhciBEcm9wRG93bkNvbnRlbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgc2lkZSA9IHByb3BzLnNpZGUsIGFsaWduID0gcHJvcHMuYWxpZ24sIHBvc2l0aW9uID0gcHJvcHMucG9zaXRpb24sIHN0eWxlID0gcHJvcHMuc3R5bGU7XG4gICAgcmV0dXJuIChfanN4KFNlbGVjdC5Db250ZW50LCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIFwiLmNvbmNhdChjbGFzc05hbWUpLCBhc0NoaWxkOiBhc0NoaWxkLCBzaWRlOiBzaWRlLCBhbGlnbjogYWxpZ24sIHBvc2l0aW9uOiBwb3NpdGlvbiwgc3R5bGU6IHN0eWxlLCBjaGlsZHJlbjogX2pzeChTZWxlY3QuVmlld3BvcnQsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pIH0pKTtcbn07XG52YXIgRHJvcERvd25JdGVtID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGFzQ2hpbGQgPSBwcm9wcy5hc0NoaWxkLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHZhbHVlID0gcHJvcHMudmFsdWUsIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsIG9uQ2xpY2sgPSBwcm9wcy5vbkNsaWNrO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3QuSXRlbSwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBcIi5jb25jYXQoY2xhc3NOYW1lKSwgYXNDaGlsZDogYXNDaGlsZCwgdmFsdWU6IHZhbHVlLCBkaXNhYmxlZDogZGlzYWJsZWQsIG9uQ2xpY2s6IG9uQ2xpY2ssIGNoaWxkcmVuOiBfanN4KFNlbGVjdC5JdGVtVGV4dCwgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkgfSkpO1xufTtcbkRyb3BEb3duUm9vdC5UcmlnZ2VyID0gRHJvcERvd25UcmlnZ2VyO1xuRHJvcERvd25Sb290LlZhbHVlID0gRHJvcERvd25WYWx1ZTtcbkRyb3BEb3duUm9vdC5Db250ZW50ID0gRHJvcERvd25Db250ZW50O1xuRHJvcERvd25Sb290Lkl0ZW0gPSBEcm9wRG93bkl0ZW07XG5leHBvcnQgZGVmYXVsdCBEcm9wRG93blJvb3Q7XG4iLCJleHBvcnQgdmFyIHNpemUgPSBbJ20nLCAnbCddO1xuZXhwb3J0IHZhciBkcm9wRG93blNpbmdsZVByb3BzID0ge1xuICAgIHNpemU6IHtcbiAgICAgICAgdHlwZTogJ2NsYXNzTmFtZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NpemUnLFxuICAgICAgICB2YWx1ZXM6IHNpemUsXG4gICAgICAgIGRlZmF1bHQ6ICdtJyxcbiAgICB9LFxuICAgIHdpZHRoOiB7XG4gICAgICAgIHR5cGU6ICdjc3MnLFxuICAgICAgICBrZXk6ICd3aWR0aCcsXG4gICAgICAgIGRlZmF1bHQ6ICdmaXQtY29udGVudCcsXG4gICAgfSxcbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDaGV2cm9uRG93bkljb24gZnJvbSAnLi4vLi4vYXNzZXRzL2ljb25zL2NoZXZyb25Eb3duLnN2Zyc7XG5pbXBvcnQgeyB1c2VFeHRlcm5hbFN0YXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9ob29rcy91c2VFeHRlcm5hbFN0YXRlJztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBEcm9wRG93blJvb3QgZnJvbSAnLi9iYXNlLWRyb3AtZG93bic7XG5pbXBvcnQgeyBkcm9wRG93blNpbmdsZVByb3BzIH0gZnJvbSAnLi9kcm9wLWRvd24tcHJvcHMnO1xudmFyIERyb3BEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIHZhciBfYSA9IGdldE1lcmdlZFByb3BzKHByb3BzLCBkcm9wRG93blNpbmdsZVByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCByZW5kZXJWYWx1ZSA9IF9hLnJlbmRlclZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBvcHRpb25zID0gX2Eub3B0aW9ucywgdmFsdWUgPSBfYS52YWx1ZSwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgbGVmdEljb24gPSBfYS5sZWZ0SWNvbiwgcmlnaHRJY29uID0gX2EucmlnaHRJY29uLCBzdHlsZSA9IF9hLnN0eWxlLCByZW5kZXJPcHRpb24gPSBfYS5yZW5kZXJPcHRpb24sIHNpZGUgPSBfYS5zaWRlLCBhbGlnbiA9IF9hLmFsaWduLCBwb3NpdGlvbiA9IF9hLnBvc2l0aW9uLCBvcGVuUHJvcCA9IF9hLm9wZW4sIG9uT3BlbkNoYW5nZVByb3AgPSBfYS5vbk9wZW5DaGFuZ2UsIGRlZmF1bHRPcGVuID0gX2EuZGVmYXVsdE9wZW4sIGRyb3BEb3duUHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNsYXNzTmFtZVwiLCBcInJlbmRlclZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJvcHRpb25zXCIsIFwidmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImxlZnRJY29uXCIsIFwicmlnaHRJY29uXCIsIFwic3R5bGVcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJzaWRlXCIsIFwiYWxpZ25cIiwgXCJwb3NpdGlvblwiLCBcIm9wZW5cIiwgXCJvbk9wZW5DaGFuZ2VcIiwgXCJkZWZhdWx0T3BlblwiXSk7XG4gICAgdmFyIHRyaWdnZXJDbGFzc05hbWUgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgJ2Ryb3AtZG93bi1zaW5nbGUtdHJpZ2dlcicpO1xuICAgIHZhciBfYiA9IHVzZUV4dGVybmFsU3RhdGUoe1xuICAgICAgICBwcm9wOiBvcGVuUHJvcCxcbiAgICAgICAgaGFuZGxlcjogb25PcGVuQ2hhbmdlUHJvcCxcbiAgICAgICAgZGVmYXVsdFByb3A6IGRlZmF1bHRPcGVuICE9PSBudWxsICYmIGRlZmF1bHRPcGVuICE9PSB2b2lkIDAgPyBkZWZhdWx0T3BlbiA6IGZhbHNlLFxuICAgIH0pLCBvcGVuID0gX2JbMF0sIHNldE9wZW4gPSBfYlsxXTtcbiAgICB2YXIgY2xvc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzZXRPcGVuKGZhbHNlKTsgfTtcbiAgICByZXR1cm4gKF9qc3hzKERyb3BEb3duUm9vdCwgX19hc3NpZ24oeyB2YWx1ZTogdmFsdWUsIGRpc2FibGVkOiBkaXNhYmxlZCwgb3Blbjogb3Blbiwgb25PcGVuQ2hhbmdlOiBzZXRPcGVuIH0sIGRyb3BEb3duUHJvcHMsIHsgY2hpbGRyZW46IFtfanN4cyhEcm9wRG93blJvb3QuVHJpZ2dlciwgeyBjbGFzc05hbWU6IHRyaWdnZXJDbGFzc05hbWUsIHN0eWxlOiBzdHlsZSwgY2hpbGRyZW46IFtfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6ICdudXJpLWRpc3BsYXktZmxleCBudXJpLWFpLWNlbnRlcicsIHN0eWxlOiB7IGdhcDogJzEwcHgnIH0sIGNoaWxkcmVuOiBbbGVmdEljb24sIHJlbmRlclZhbHVlID8gKF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW3JlbmRlclZhbHVlKHZhbHVlKSwgX2pzeChEcm9wRG93blJvb3QuVmFsdWUsIHsgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBjbGFzc05hbWU6ICdkcm9wLWRvd24tc2luZ2xlLXZhbHVlJywgcmVmOiByZWYsIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9IH0pXSB9KSkgOiAoX2pzeChEcm9wRG93blJvb3QuVmFsdWUsIHsgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBjbGFzc05hbWU6ICdkcm9wLWRvd24tc2luZ2xlLXZhbHVlJywgcmVmOiByZWYgfSkpXSB9KSwgcmlnaHRJY29uIHx8IF9qc3goQ2hldnJvbkRvd25JY29uLCB7IGNsYXNzTmFtZTogJ2Ryb3AtZG93bi1zaW5nbGUtaWNvbiByb3RhdGUnIH0pXSB9KSwgX2pzeChEcm9wRG93blJvb3QuQ29udGVudCwgeyBjbGFzc05hbWU6ICdkcm9wLWRvd24tc2luZ2xlLWNvbnRlbnQnLCBzaWRlOiBzaWRlLCBhbGlnbjogYWxpZ24sIHBvc2l0aW9uOiBwb3NpdGlvbiwgc3R5bGU6IHN0eWxlLCBjaGlsZHJlbjogcmVuZGVyT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gcmVuZGVyT3B0aW9uKHsgaXNPcGVuOiBvcGVuLCBjbG9zZTogY2xvc2UgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIChfanN4KERyb3BEb3duUm9vdC5JdGVtLCB7IHZhbHVlOiBvcHRpb24udmFsdWUsIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsIGNsYXNzTmFtZTogJ2Ryb3AtZG93bi1zaW5nbGUtaXRlbScsIGNoaWxkcmVuOiBvcHRpb24ubGFiZWwgfSwgb3B0aW9uLnZhbHVlKSk7IH0pIH0pXSB9KSkpO1xufSk7XG5leHBvcnQgZGVmYXVsdCBEcm9wRG93bjtcbiIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvY29sbGFwc2libGUudHN4XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNvbXBvc2VFdmVudEhhbmRsZXJzIH0gZnJvbSBcIkByYWRpeC11aS9wcmltaXRpdmVcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxhYmxlU3RhdGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXVzZS1jb250cm9sbGFibGUtc3RhdGVcIjtcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWxheW91dC1lZmZlY3RcIjtcbmltcG9ydCB7IHVzZUNvbXBvc2VkUmVmcyB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzXCI7XG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgUHJlc2VuY2UgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXByZXNlbmNlXCI7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtaWRcIjtcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xudmFyIENPTExBUFNJQkxFX05BTUUgPSBcIkNvbGxhcHNpYmxlXCI7XG52YXIgW2NyZWF0ZUNvbGxhcHNpYmxlQ29udGV4dCwgY3JlYXRlQ29sbGFwc2libGVTY29wZV0gPSBjcmVhdGVDb250ZXh0U2NvcGUoQ09MTEFQU0lCTEVfTkFNRSk7XG52YXIgW0NvbGxhcHNpYmxlUHJvdmlkZXIsIHVzZUNvbGxhcHNpYmxlQ29udGV4dF0gPSBjcmVhdGVDb2xsYXBzaWJsZUNvbnRleHQoQ09MTEFQU0lCTEVfTkFNRSk7XG52YXIgQ29sbGFwc2libGUgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIF9fc2NvcGVDb2xsYXBzaWJsZSxcbiAgICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uT3BlbkNoYW5nZSxcbiAgICAgIC4uLmNvbGxhcHNpYmxlUHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlQ29udHJvbGxhYmxlU3RhdGUoe1xuICAgICAgcHJvcDogb3BlblByb3AsXG4gICAgICBkZWZhdWx0UHJvcDogZGVmYXVsdE9wZW4gPz8gZmFsc2UsXG4gICAgICBvbkNoYW5nZTogb25PcGVuQ2hhbmdlLFxuICAgICAgY2FsbGVyOiBDT0xMQVBTSUJMRV9OQU1FXG4gICAgfSk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBDb2xsYXBzaWJsZVByb3ZpZGVyLFxuICAgICAge1xuICAgICAgICBzY29wZTogX19zY29wZUNvbGxhcHNpYmxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29udGVudElkOiB1c2VJZCgpLFxuICAgICAgICBvcGVuLFxuICAgICAgICBvbk9wZW5Ub2dnbGU6IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNldE9wZW4oKHByZXZPcGVuKSA9PiAhcHJldk9wZW4pLCBbc2V0T3Blbl0pLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShvcGVuKSxcbiAgICAgICAgICAgIFwiZGF0YS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/IFwiXCIgOiB2b2lkIDAsXG4gICAgICAgICAgICAuLi5jb2xsYXBzaWJsZVByb3BzLFxuICAgICAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWZcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuQ29sbGFwc2libGUuZGlzcGxheU5hbWUgPSBDT0xMQVBTSUJMRV9OQU1FO1xudmFyIFRSSUdHRVJfTkFNRSA9IFwiQ29sbGFwc2libGVUcmlnZ2VyXCI7XG52YXIgQ29sbGFwc2libGVUcmlnZ2VyID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVDb2xsYXBzaWJsZSwgLi4udHJpZ2dlclByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGFwc2libGVDb250ZXh0KFRSSUdHRVJfTkFNRSwgX19zY29wZUNvbGxhcHNpYmxlKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5idXR0b24sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBjb250ZXh0LmNvbnRlbnRJZCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGNvbnRleHQub3BlbiB8fCBmYWxzZSxcbiAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGdldFN0YXRlKGNvbnRleHQub3BlbiksXG4gICAgICAgIFwiZGF0YS1kaXNhYmxlZFwiOiBjb250ZXh0LmRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgICAgZGlzYWJsZWQ6IGNvbnRleHQuZGlzYWJsZWQsXG4gICAgICAgIC4uLnRyaWdnZXJQcm9wcyxcbiAgICAgICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgICAgIG9uQ2xpY2s6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uQ2xpY2ssIGNvbnRleHQub25PcGVuVG9nZ2xlKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5Db2xsYXBzaWJsZVRyaWdnZXIuZGlzcGxheU5hbWUgPSBUUklHR0VSX05BTUU7XG52YXIgQ09OVEVOVF9OQU1FID0gXCJDb2xsYXBzaWJsZUNvbnRlbnRcIjtcbnZhciBDb2xsYXBzaWJsZUNvbnRlbnQgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgZm9yY2VNb3VudCwgLi4uY29udGVudFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGFwc2libGVDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZUNvbGxhcHNpYmxlKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQcmVzZW5jZSwgeyBwcmVzZW50OiBmb3JjZU1vdW50IHx8IGNvbnRleHQub3BlbiwgY2hpbGRyZW46ICh7IHByZXNlbnQgfSkgPT4gLyogQF9fUFVSRV9fICovIGpzeChDb2xsYXBzaWJsZUNvbnRlbnRJbXBsLCB7IC4uLmNvbnRlbnRQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYsIHByZXNlbnQgfSkgfSk7XG4gIH1cbik7XG5Db2xsYXBzaWJsZUNvbnRlbnQuZGlzcGxheU5hbWUgPSBDT05URU5UX05BTUU7XG52YXIgQ29sbGFwc2libGVDb250ZW50SW1wbCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgY29uc3QgeyBfX3Njb3BlQ29sbGFwc2libGUsIHByZXNlbnQsIGNoaWxkcmVuLCAuLi5jb250ZW50UHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29sbGFwc2libGVDb250ZXh0KENPTlRFTlRfTkFNRSwgX19zY29wZUNvbGxhcHNpYmxlKTtcbiAgY29uc3QgW2lzUHJlc2VudCwgc2V0SXNQcmVzZW50XSA9IFJlYWN0LnVzZVN0YXRlKHByZXNlbnQpO1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIHJlZik7XG4gIGNvbnN0IGhlaWdodFJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgaGVpZ2h0ID0gaGVpZ2h0UmVmLmN1cnJlbnQ7XG4gIGNvbnN0IHdpZHRoUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCB3aWR0aCA9IHdpZHRoUmVmLmN1cnJlbnQ7XG4gIGNvbnN0IGlzT3BlbiA9IGNvbnRleHQub3BlbiB8fCBpc1ByZXNlbnQ7XG4gIGNvbnN0IGlzTW91bnRBbmltYXRpb25QcmV2ZW50ZWRSZWYgPSBSZWFjdC51c2VSZWYoaXNPcGVuKTtcbiAgY29uc3Qgb3JpZ2luYWxTdHlsZXNSZWYgPSBSZWFjdC51c2VSZWYodm9pZCAwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByQUYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gaXNNb3VudEFuaW1hdGlvblByZXZlbnRlZFJlZi5jdXJyZW50ID0gZmFsc2UpO1xuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShyQUYpO1xuICB9LCBbXSk7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IHJlZi5jdXJyZW50O1xuICAgIGlmIChub2RlKSB7XG4gICAgICBvcmlnaW5hbFN0eWxlc1JlZi5jdXJyZW50ID0gb3JpZ2luYWxTdHlsZXNSZWYuY3VycmVudCB8fCB7XG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogbm9kZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6IG5vZGUuc3R5bGUuYW5pbWF0aW9uTmFtZVxuICAgICAgfTtcbiAgICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gXCIwc1wiO1xuICAgICAgbm9kZS5zdHlsZS5hbmltYXRpb25OYW1lID0gXCJub25lXCI7XG4gICAgICBjb25zdCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGhlaWdodFJlZi5jdXJyZW50ID0gcmVjdC5oZWlnaHQ7XG4gICAgICB3aWR0aFJlZi5jdXJyZW50ID0gcmVjdC53aWR0aDtcbiAgICAgIGlmICghaXNNb3VudEFuaW1hdGlvblByZXZlbnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gb3JpZ2luYWxTdHlsZXNSZWYuY3VycmVudC50cmFuc2l0aW9uRHVyYXRpb247XG4gICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uTmFtZSA9IG9yaWdpbmFsU3R5bGVzUmVmLmN1cnJlbnQuYW5pbWF0aW9uTmFtZTtcbiAgICAgIH1cbiAgICAgIHNldElzUHJlc2VudChwcmVzZW50KTtcbiAgICB9XG4gIH0sIFtjb250ZXh0Lm9wZW4sIHByZXNlbnRdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgUHJpbWl0aXZlLmRpdixcbiAgICB7XG4gICAgICBcImRhdGEtc3RhdGVcIjogZ2V0U3RhdGUoY29udGV4dC5vcGVuKSxcbiAgICAgIFwiZGF0YS1kaXNhYmxlZFwiOiBjb250ZXh0LmRpc2FibGVkID8gXCJcIiA6IHZvaWQgMCxcbiAgICAgIGlkOiBjb250ZXh0LmNvbnRlbnRJZCxcbiAgICAgIGhpZGRlbjogIWlzT3BlbixcbiAgICAgIC4uLmNvbnRlbnRQcm9wcyxcbiAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgW2AtLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0YF06IGhlaWdodCA/IGAke2hlaWdodH1weGAgOiB2b2lkIDAsXG4gICAgICAgIFtgLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoYF06IHdpZHRoID8gYCR7d2lkdGh9cHhgIDogdm9pZCAwLFxuICAgICAgICAuLi5wcm9wcy5zdHlsZVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBpc09wZW4gJiYgY2hpbGRyZW5cbiAgICB9XG4gICk7XG59KTtcbmZ1bmN0aW9uIGdldFN0YXRlKG9wZW4pIHtcbiAgcmV0dXJuIG9wZW4gPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCI7XG59XG52YXIgUm9vdCA9IENvbGxhcHNpYmxlO1xudmFyIFRyaWdnZXIgPSBDb2xsYXBzaWJsZVRyaWdnZXI7XG52YXIgQ29udGVudCA9IENvbGxhcHNpYmxlQ29udGVudDtcbmV4cG9ydCB7XG4gIENvbGxhcHNpYmxlLFxuICBDb2xsYXBzaWJsZUNvbnRlbnQsXG4gIENvbGxhcHNpYmxlVHJpZ2dlcixcbiAgQ29udGVudCxcbiAgUm9vdCxcbiAgVHJpZ2dlcixcbiAgY3JlYXRlQ29sbGFwc2libGVTY29wZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgQ29sbGFwc2libGUgfSBmcm9tICdyYWRpeC11aSc7XG52YXIgQ29sbGFwc2libGVNZW51Um9vdCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gX2pzeChDb2xsYXBzaWJsZS5Sb290LCBfX2Fzc2lnbih7fSwgcmVzdFByb3BzLCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIENvbGxhcHNpYmxlTWVudVRyaWdnZXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIF9hID0gcHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYSA9PT0gdm9pZCAwID8gJycgOiBfYSwgc3R5bGUgPSBwcm9wcy5zdHlsZSwgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZDtcbiAgICByZXR1cm4gKF9qc3goQ29sbGFwc2libGUuVHJpZ2dlciwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWNvbGxhcHNpYmxlLW1lbnUgdHJpZ2dlciBcIi5jb25jYXQoY2xhc3NOYW1lKSwgYXNDaGlsZDogYXNDaGlsZCwgZGlzYWJsZWQ6IGRpc2FibGVkLCBzdHlsZTogc3R5bGUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIENvbGxhcHNpYmxlTWVudUNvbnRlbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXNDaGlsZCA9IHByb3BzLmFzQ2hpbGQsIF9hID0gcHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYSA9PT0gdm9pZCAwID8gJycgOiBfYSwgc3R5bGUgPSBwcm9wcy5zdHlsZTtcbiAgICByZXR1cm4gKF9qc3goQ29sbGFwc2libGUuQ29udGVudCwgeyBjbGFzc05hbWU6IFwibnVyaS10aGVtZSBiYXNlLWNvbGxhcHNpYmxlLW1lbnUgY29udGVudCBcIi5jb25jYXQoY2xhc3NOYW1lKSwgYXNDaGlsZDogYXNDaGlsZCwgc3R5bGU6IHN0eWxlLCBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbkNvbGxhcHNpYmxlTWVudVJvb3QuVHJpZ2dlciA9IENvbGxhcHNpYmxlTWVudVRyaWdnZXI7XG5Db2xsYXBzaWJsZU1lbnVSb290LkNvbnRlbnQgPSBDb2xsYXBzaWJsZU1lbnVDb250ZW50O1xuZXhwb3J0IGRlZmF1bHQgQ29sbGFwc2libGVNZW51Um9vdDtcbiIsImV4cG9ydCB2YXIgc2l6ZSA9IFsnbScsICdsJ107XG5leHBvcnQgdmFyIGNvbGxhcHNpYmxlTWVudVByb3BzID0ge1xuICAgIHNpemU6IHtcbiAgICAgICAgdHlwZTogJ2NsYXNzTmFtZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NpemUnLFxuICAgICAgICB2YWx1ZXM6IHNpemUsXG4gICAgICAgIGRlZmF1bHQ6ICdtJyxcbiAgICB9LFxuICAgIHdpZHRoOiB7XG4gICAgICAgIHR5cGU6ICdjc3MnLFxuICAgICAgICBrZXk6ICd3aWR0aCcsXG4gICAgICAgIGRlZmF1bHQ6ICcyNDBweCcsXG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsYXNzTmFtZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2NsYXNzTmFtZXMnO1xuaW1wb3J0IHsgZ2V0TWVyZ2VkUHJvcHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzL2dldE1lcmdlZFByb3BzJztcbmltcG9ydCBDb2xsYXBzaWJsZU1lbnVSb290IGZyb20gJy4vYmFzZS1jb2xsYXBzaWJsZS1tZW51JztcbmltcG9ydCB7IGNvbGxhcHNpYmxlTWVudVByb3BzIH0gZnJvbSAnLi9jb2xsYXBzaWJsZS1tZW51LXByb3BzJztcbnZhciBDb2xsYXBzaWJsZU1lbnUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIGNvbGxhcHNpYmxlTWVudVByb3BzKSwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBzdHlsZSA9IF9hLnN0eWxlLCBpdGVtcyA9IF9hLml0ZW1zLCBhY3RpdmVLZXkgPSBfYS5hY3RpdmVLZXksIG9uQWN0aXZlS2V5Q2hhbmdlID0gX2Eub25BY3RpdmVLZXlDaGFuZ2UsIF9iID0gX2EuaW5kZW50LCBpbmRlbnQgPSBfYiA9PT0gdm9pZCAwID8gMTIgOiBfYiwgY2hldnJvbiA9IF9hLmNoZXZyb247XG4gICAgdmFyIHJvb3RDbGFzc05hbWUgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgJ2NvbGxhcHNpYmxlLW1lbnUnKTtcbiAgICB2YXIgaGFzQWN0aXZlRGVzY2VuZGFudCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghYWN0aXZlS2V5KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS5rZXkgPT09IGFjdGl2ZUtleSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gaXRlbS5jaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNvbWUoaGFzQWN0aXZlRGVzY2VuZGFudCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlO1xuICAgIH07XG4gICAgdmFyIHJlbmRlckl0ZW1zID0gZnVuY3Rpb24gKHRhcmdldEl0ZW1zLCBkZXB0aCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0SXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSAhISgoX2EgPSBpdGVtLmNoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBpc0FjdGl2ZSA9IGFjdGl2ZUtleSA9PT0gaXRlbS5rZXk7XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoJ2NvbGxhcHNpYmxlLW1lbnUtdHJpZ2dlcicsICdjb2xsYXBzaWJsZS1tZW51LXJvdycsIGhhc0FjdGl2ZURlc2NlbmRhbnQoaXRlbSkgJiYgJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeHMoQ29sbGFwc2libGVNZW51Um9vdCwgeyBkZWZhdWx0T3BlbjogaXRlbS5kZWZhdWx0T3BlbiwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsIGNoaWxkcmVuOiBbX2pzeChDb2xsYXBzaWJsZU1lbnVSb290LlRyaWdnZXIsIHsgY2xhc3NOYW1lOiB0cmlnZ2VyQ2xhc3NOYW1lLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCwgY2hpbGRyZW46IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAnY29sbGFwc2libGUtbWVudS1sZWZ0Jywgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IFwiXCIuY29uY2F0KGRlcHRoICogaW5kZW50LCBcInB4XCIpIH0sIGNoaWxkcmVuOiBpdGVtLml0ZW0gfSkgfSksIF9qc3goQ29sbGFwc2libGVNZW51Um9vdC5Db250ZW50LCB7IGNsYXNzTmFtZTogJ2NvbGxhcHNpYmxlLW1lbnUtY29udGVudCcsIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuID8gcmVuZGVySXRlbXMoaXRlbS5jaGlsZHJlbiwgZGVwdGggKyAxKSA6IG51bGwgfSldIH0sIGl0ZW0ua2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaXRlbUNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoJ2NvbGxhcHNpYmxlLW1lbnUtaXRlbScsICdjb2xsYXBzaWJsZS1tZW51LXJvdycsIGlzQWN0aXZlICYmICdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAnY29sbGFwc2libGUtbWVudS1sZWZ0Jywgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IFwiXCIuY29uY2F0KGRlcHRoICogaW5kZW50LCBcInB4XCIpIH0sIGNoaWxkcmVuOiBpdGVtLml0ZW0gfSkpO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaHJlZikge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChcImFcIiwgeyBjbGFzc05hbWU6IGl0ZW1DbGFzc05hbWUsIGhyZWY6IGl0ZW0uaHJlZiwgXCJhcmlhLWN1cnJlbnRcIjogaXNBY3RpdmUgPyAncGFnZScgOiB1bmRlZmluZWQsIFwiYXJpYS1kaXNhYmxlZFwiOiBpdGVtLmRpc2FibGVkID8gJ3RydWUnIDogdW5kZWZpbmVkLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25BY3RpdmVLZXlDaGFuZ2UgPT09IG51bGwgfHwgb25BY3RpdmVLZXlDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQWN0aXZlS2V5Q2hhbmdlKGl0ZW0ua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IGl0ZW0ub25TZWxlY3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogbGVmdCB9LCBpdGVtLmtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChfanN4KFwiYnV0dG9uXCIsIHsgdHlwZTogJ2J1dHRvbicsIGNsYXNzTmFtZTogaXRlbUNsYXNzTmFtZSwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsIG9uQ2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBvbkFjdGl2ZUtleUNoYW5nZSA9PT0gbnVsbCB8fCBvbkFjdGl2ZUtleUNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BY3RpdmVLZXlDaGFuZ2UoaXRlbS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBpdGVtLm9uU2VsZWN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChpdGVtKTtcbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogbGVmdCB9LCBpdGVtLmtleSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiAoX2pzeChcIm5hdlwiLCB7IHJlZjogcmVmLCBjbGFzc05hbWU6IHJvb3RDbGFzc05hbWUsIHN0eWxlOiBzdHlsZSwgXCJhcmlhLWxhYmVsXCI6ICdDb2xsYXBzaWJsZSBtZW51JywgY2hpbGRyZW46IHJlbmRlckl0ZW1zKGl0ZW1zLCAwKSB9KSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNpYmxlTWVudTtcbiIsInZhciBfcGF0aCwgX3BhdGgyO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IHJldHVybiBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uIChuKSB7IGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7IHZhciB0ID0gYXJndW1lbnRzW2VdOyBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pOyB9IHJldHVybiBuOyB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbnZhciBTdmdNdWx0aWZseSA9IGZ1bmN0aW9uIFN2Z011bHRpZmx5KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMjAsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBwcm9wcyksIF9wYXRoIHx8IChfcGF0aCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzE3MTdBXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODQ0IDQuODQ0YS42MjUuNjI1IDAgMCAxIC44ODQgMGw5LjQyOCA5LjQyOGEuNjI1LjYyNSAwIDAgMS0uODg0Ljg4NEw0Ljg0NCA1LjcyOGEuNjI1LjYyNSAwIDAgMSAwLS44ODRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpLCBfcGF0aDIgfHwgKF9wYXRoMiA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzE3MTdBXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjE1NiA0Ljg0NGEuNjI1LjYyNSAwIDAgMSAwIC44ODRsLTkuNDI4IDkuNDI4YS42MjUuNjI1IDAgMSAxLS44ODQtLjg4NGw5LjQyOC05LjQyOGEuNjI1LjYyNSAwIDAgMSAuODg0IDBcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTdmdNdWx0aWZseTsiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2RpYWxvZy50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY29tcG9zZUV2ZW50SGFuZGxlcnMgfSBmcm9tIFwiQHJhZGl4LXVpL3ByaW1pdGl2ZVwiO1xuaW1wb3J0IHsgdXNlQ29tcG9zZWRSZWZzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIGNyZWF0ZUNvbnRleHRTY29wZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtY29udGV4dFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWlkXCI7XG5pbXBvcnQgeyB1c2VDb250cm9sbGFibGVTdGF0ZSB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtdXNlLWNvbnRyb2xsYWJsZS1zdGF0ZVwiO1xuaW1wb3J0IHsgRGlzbWlzc2FibGVMYXllciB9IGZyb20gXCJAcmFkaXgtdWkvcmVhY3QtZGlzbWlzc2FibGUtbGF5ZXJcIjtcbmltcG9ydCB7IEZvY3VzU2NvcGUgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWZvY3VzLXNjb3BlXCI7XG5pbXBvcnQgeyBQb3J0YWwgYXMgUG9ydGFsUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wb3J0YWxcIjtcbmltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmVzZW5jZVwiO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1wcmltaXRpdmVcIjtcbmltcG9ydCB7IHVzZUZvY3VzR3VhcmRzIH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1mb2N1cy1ndWFyZHNcIjtcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gXCJyZWFjdC1yZW1vdmUtc2Nyb2xsXCI7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSBcImFyaWEtaGlkZGVuXCI7XG5pbXBvcnQgeyBjcmVhdGVTbG90IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1zbG90XCI7XG5pbXBvcnQgeyBGcmFnbWVudCwganN4LCBqc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgRElBTE9HX05BTUUgPSBcIkRpYWxvZ1wiO1xudmFyIFtjcmVhdGVEaWFsb2dDb250ZXh0LCBjcmVhdGVEaWFsb2dTY29wZV0gPSBjcmVhdGVDb250ZXh0U2NvcGUoRElBTE9HX05BTUUpO1xudmFyIFtEaWFsb2dQcm92aWRlciwgdXNlRGlhbG9nQ29udGV4dF0gPSBjcmVhdGVEaWFsb2dDb250ZXh0KERJQUxPR19OQU1FKTtcbnZhciBEaWFsb2cgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIF9fc2NvcGVEaWFsb2csXG4gICAgY2hpbGRyZW4sXG4gICAgb3Blbjogb3BlblByb3AsXG4gICAgZGVmYXVsdE9wZW4sXG4gICAgb25PcGVuQ2hhbmdlLFxuICAgIG1vZGFsID0gdHJ1ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICBwcm9wOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0UHJvcDogZGVmYXVsdE9wZW4gPz8gZmFsc2UsXG4gICAgb25DaGFuZ2U6IG9uT3BlbkNoYW5nZSxcbiAgICBjYWxsZXI6IERJQUxPR19OQU1FXG4gIH0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBEaWFsb2dQcm92aWRlcixcbiAgICB7XG4gICAgICBzY29wZTogX19zY29wZURpYWxvZyxcbiAgICAgIHRyaWdnZXJSZWYsXG4gICAgICBjb250ZW50UmVmLFxuICAgICAgY29udGVudElkOiB1c2VJZCgpLFxuICAgICAgdGl0bGVJZDogdXNlSWQoKSxcbiAgICAgIGRlc2NyaXB0aW9uSWQ6IHVzZUlkKCksXG4gICAgICBvcGVuLFxuICAgICAgb25PcGVuQ2hhbmdlOiBzZXRPcGVuLFxuICAgICAgb25PcGVuVG9nZ2xlOiBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZXRPcGVuKChwcmV2T3BlbikgPT4gIXByZXZPcGVuKSwgW3NldE9wZW5dKSxcbiAgICAgIG1vZGFsLFxuICAgICAgY2hpbGRyZW5cbiAgICB9XG4gICk7XG59O1xuRGlhbG9nLmRpc3BsYXlOYW1lID0gRElBTE9HX05BTUU7XG52YXIgVFJJR0dFUl9OQU1FID0gXCJEaWFsb2dUcmlnZ2VyXCI7XG52YXIgRGlhbG9nVHJpZ2dlciA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlRGlhbG9nLCAuLi50cmlnZ2VyUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KFRSSUdHRVJfTkFNRSwgX19zY29wZURpYWxvZyk7XG4gICAgY29uc3QgY29tcG9zZWRUcmlnZ2VyUmVmID0gdXNlQ29tcG9zZWRSZWZzKGZvcndhcmRlZFJlZiwgY29udGV4dC50cmlnZ2VyUmVmKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIFByaW1pdGl2ZS5idXR0b24sXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImRpYWxvZ1wiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogY29udGV4dC5vcGVuLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogY29udGV4dC5jb250ZW50SWQsXG4gICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjb250ZXh0Lm9wZW4pLFxuICAgICAgICAuLi50cmlnZ2VyUHJvcHMsXG4gICAgICAgIHJlZjogY29tcG9zZWRUcmlnZ2VyUmVmLFxuICAgICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyhwcm9wcy5vbkNsaWNrLCBjb250ZXh0Lm9uT3BlblRvZ2dsZSlcbiAgICAgIH1cbiAgICApO1xuICB9XG4pO1xuRGlhbG9nVHJpZ2dlci5kaXNwbGF5TmFtZSA9IFRSSUdHRVJfTkFNRTtcbnZhciBQT1JUQUxfTkFNRSA9IFwiRGlhbG9nUG9ydGFsXCI7XG52YXIgW1BvcnRhbFByb3ZpZGVyLCB1c2VQb3J0YWxDb250ZXh0XSA9IGNyZWF0ZURpYWxvZ0NvbnRleHQoUE9SVEFMX05BTUUsIHtcbiAgZm9yY2VNb3VudDogdm9pZCAwXG59KTtcbnZhciBEaWFsb2dQb3J0YWwgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBfX3Njb3BlRGlhbG9nLCBmb3JjZU1vdW50LCBjaGlsZHJlbiwgY29udGFpbmVyIH0gPSBwcm9wcztcbiAgY29uc3QgY29udGV4dCA9IHVzZURpYWxvZ0NvbnRleHQoUE9SVEFMX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChQb3J0YWxQcm92aWRlciwgeyBzY29wZTogX19zY29wZURpYWxvZywgZm9yY2VNb3VudCwgY2hpbGRyZW46IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkKSA9PiAvKiBAX19QVVJFX18gKi8ganN4KFByZXNlbmNlLCB7IHByZXNlbnQ6IGZvcmNlTW91bnQgfHwgY29udGV4dC5vcGVuLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChQb3J0YWxQcmltaXRpdmUsIHsgYXNDaGlsZDogdHJ1ZSwgY29udGFpbmVyLCBjaGlsZHJlbjogY2hpbGQgfSkgfSkpIH0pO1xufTtcbkRpYWxvZ1BvcnRhbC5kaXNwbGF5TmFtZSA9IFBPUlRBTF9OQU1FO1xudmFyIE9WRVJMQVlfTkFNRSA9IFwiRGlhbG9nT3ZlcmxheVwiO1xudmFyIERpYWxvZ092ZXJsYXkgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHBvcnRhbENvbnRleHQgPSB1c2VQb3J0YWxDb250ZXh0KE9WRVJMQVlfTkFNRSwgcHJvcHMuX19zY29wZURpYWxvZyk7XG4gICAgY29uc3QgeyBmb3JjZU1vdW50ID0gcG9ydGFsQ29udGV4dC5mb3JjZU1vdW50LCAuLi5vdmVybGF5UHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KE9WRVJMQVlfTkFNRSwgcHJvcHMuX19zY29wZURpYWxvZyk7XG4gICAgcmV0dXJuIGNvbnRleHQubW9kYWwgPyAvKiBAX19QVVJFX18gKi8ganN4KFByZXNlbmNlLCB7IHByZXNlbnQ6IGZvcmNlTW91bnQgfHwgY29udGV4dC5vcGVuLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChEaWFsb2dPdmVybGF5SW1wbCwgeyAuLi5vdmVybGF5UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pIH0pIDogbnVsbDtcbiAgfVxuKTtcbkRpYWxvZ092ZXJsYXkuZGlzcGxheU5hbWUgPSBPVkVSTEFZX05BTUU7XG52YXIgU2xvdCA9IGNyZWF0ZVNsb3QoXCJEaWFsb2dPdmVybGF5LlJlbW92ZVNjcm9sbFwiKTtcbnZhciBEaWFsb2dPdmVybGF5SW1wbCA9IFJlYWN0LmZvcndhcmRSZWYoXG4gIChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XG4gICAgY29uc3QgeyBfX3Njb3BlRGlhbG9nLCAuLi5vdmVybGF5UHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KE9WRVJMQVlfTkFNRSwgX19zY29wZURpYWxvZyk7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIE1ha2Ugc3VyZSBgQ29udGVudGAgaXMgc2Nyb2xsYWJsZSBldmVuIHdoZW4gaXQgZG9lc24ndCBsaXZlIGluc2lkZSBgUmVtb3ZlU2Nyb2xsYFxuICAgICAgLy8gaWUuIHdoZW4gYE92ZXJsYXlgIGFuZCBgQ29udGVudGAgYXJlIHNpYmxpbmdzXG4gICAgICAvKiBAX19QVVJFX18gKi8ganN4KFJlbW92ZVNjcm9sbCwgeyBhczogU2xvdCwgYWxsb3dQaW5jaFpvb206IHRydWUsIHNoYXJkczogW2NvbnRleHQuY29udGVudFJlZl0sIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBQcmltaXRpdmUuZGl2LFxuICAgICAgICB7XG4gICAgICAgICAgXCJkYXRhLXN0YXRlXCI6IGdldFN0YXRlKGNvbnRleHQub3BlbiksXG4gICAgICAgICAgLi4ub3ZlcmxheVByb3BzLFxuICAgICAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgICAgIHN0eWxlOiB7IHBvaW50ZXJFdmVudHM6IFwiYXV0b1wiLCAuLi5vdmVybGF5UHJvcHMuc3R5bGUgfVxuICAgICAgICB9XG4gICAgICApIH0pXG4gICAgKTtcbiAgfVxuKTtcbnZhciBDT05URU5UX05BTUUgPSBcIkRpYWxvZ0NvbnRlbnRcIjtcbnZhciBEaWFsb2dDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBwb3J0YWxDb250ZXh0ID0gdXNlUG9ydGFsQ29udGV4dChDT05URU5UX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIGNvbnN0IHsgZm9yY2VNb3VudCA9IHBvcnRhbENvbnRleHQuZm9yY2VNb3VudCwgLi4uY29udGVudFByb3BzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChDT05URU5UX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFByZXNlbmNlLCB7IHByZXNlbnQ6IGZvcmNlTW91bnQgfHwgY29udGV4dC5vcGVuLCBjaGlsZHJlbjogY29udGV4dC5tb2RhbCA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRGlhbG9nQ29udGVudE1vZGFsLCB7IC4uLmNvbnRlbnRQcm9wcywgcmVmOiBmb3J3YXJkZWRSZWYgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KERpYWxvZ0NvbnRlbnROb25Nb2RhbCwgeyAuLi5jb250ZW50UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pIH0pO1xuICB9XG4pO1xuRGlhbG9nQ29udGVudC5kaXNwbGF5TmFtZSA9IENPTlRFTlRfTkFNRTtcbnZhciBEaWFsb2dDb250ZW50TW9kYWwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KENPTlRFTlRfTkFNRSwgcHJvcHMuX19zY29wZURpYWxvZyk7XG4gICAgY29uc3QgY29udGVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb21wb3NlZFJlZnMgPSB1c2VDb21wb3NlZFJlZnMoZm9yd2FyZGVkUmVmLCBjb250ZXh0LmNvbnRlbnRSZWYsIGNvbnRlbnRSZWYpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gY29udGVudFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGNvbnRlbnQpIHJldHVybiBoaWRlT3RoZXJzKGNvbnRlbnQpO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICAgIERpYWxvZ0NvbnRlbnRJbXBsLFxuICAgICAge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgcmVmOiBjb21wb3NlZFJlZnMsXG4gICAgICAgIHRyYXBGb2N1czogY29udGV4dC5vcGVuLFxuICAgICAgICBkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgIG9uQ2xvc2VBdXRvRm9jdXM6IGNvbXBvc2VFdmVudEhhbmRsZXJzKHByb3BzLm9uQ2xvc2VBdXRvRm9jdXMsIChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29udGV4dC50cmlnZ2VyUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvblBvaW50ZXJEb3duT3V0c2lkZTogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25Qb2ludGVyRG93bk91dHNpZGUsIChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBldmVudC5kZXRhaWwub3JpZ2luYWxFdmVudDtcbiAgICAgICAgICBjb25zdCBjdHJsTGVmdENsaWNrID0gb3JpZ2luYWxFdmVudC5idXR0b24gPT09IDAgJiYgb3JpZ2luYWxFdmVudC5jdHJsS2V5ID09PSB0cnVlO1xuICAgICAgICAgIGNvbnN0IGlzUmlnaHRDbGljayA9IG9yaWdpbmFsRXZlbnQuYnV0dG9uID09PSAyIHx8IGN0cmxMZWZ0Q2xpY2s7XG4gICAgICAgICAgaWYgKGlzUmlnaHRDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9uRm9jdXNPdXRzaWRlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhcbiAgICAgICAgICBwcm9wcy5vbkZvY3VzT3V0c2lkZSxcbiAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG52YXIgRGlhbG9nQ29udGVudE5vbk1vZGFsID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlRGlhbG9nQ29udGV4dChDT05URU5UX05BTUUsIHByb3BzLl9fc2NvcGVEaWFsb2cpO1xuICAgIGNvbnN0IGhhc0ludGVyYWN0ZWRPdXRzaWRlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBoYXNQb2ludGVyRG93bk91dHNpZGVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgRGlhbG9nQ29udGVudEltcGwsXG4gICAgICB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgICAgdHJhcEZvY3VzOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiBmYWxzZSxcbiAgICAgICAgb25DbG9zZUF1dG9Gb2N1czogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcHJvcHMub25DbG9zZUF1dG9Gb2N1cz8uKGV2ZW50KTtcbiAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGlmICghaGFzSW50ZXJhY3RlZE91dHNpZGVSZWYuY3VycmVudCkgY29udGV4dC50cmlnZ2VyUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNJbnRlcmFjdGVkT3V0c2lkZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgaGFzUG9pbnRlckRvd25PdXRzaWRlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgb25JbnRlcmFjdE91dHNpZGU6IChldmVudCkgPT4ge1xuICAgICAgICAgIHByb3BzLm9uSW50ZXJhY3RPdXRzaWRlPy4oZXZlbnQpO1xuICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgaGFzSW50ZXJhY3RlZE91dHNpZGVSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGV0YWlsLm9yaWdpbmFsRXZlbnQudHlwZSA9PT0gXCJwb2ludGVyZG93blwiKSB7XG4gICAgICAgICAgICAgIGhhc1BvaW50ZXJEb3duT3V0c2lkZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgIGNvbnN0IHRhcmdldElzVHJpZ2dlciA9IGNvbnRleHQudHJpZ2dlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpO1xuICAgICAgICAgIGlmICh0YXJnZXRJc1RyaWdnZXIpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwiZm9jdXNpblwiICYmIGhhc1BvaW50ZXJEb3duT3V0c2lkZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG52YXIgRGlhbG9nQ29udGVudEltcGwgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZURpYWxvZywgdHJhcEZvY3VzLCBvbk9wZW5BdXRvRm9jdXMsIG9uQ2xvc2VBdXRvRm9jdXMsIC4uLmNvbnRlbnRQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZURpYWxvZ0NvbnRleHQoQ09OVEVOVF9OQU1FLCBfX3Njb3BlRGlhbG9nKTtcbiAgICBjb25zdCBjb250ZW50UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGNvbXBvc2VkUmVmcyA9IHVzZUNvbXBvc2VkUmVmcyhmb3J3YXJkZWRSZWYsIGNvbnRlbnRSZWYpO1xuICAgIHVzZUZvY3VzR3VhcmRzKCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICBGb2N1c1Njb3BlLFxuICAgICAgICB7XG4gICAgICAgICAgYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICAgIHRyYXBwZWQ6IHRyYXBGb2N1cyxcbiAgICAgICAgICBvbk1vdW50QXV0b0ZvY3VzOiBvbk9wZW5BdXRvRm9jdXMsXG4gICAgICAgICAgb25Vbm1vdW50QXV0b0ZvY3VzOiBvbkNsb3NlQXV0b0ZvY3VzLFxuICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgICAgICAgICAgRGlzbWlzc2FibGVMYXllcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm9sZTogXCJkaWFsb2dcIixcbiAgICAgICAgICAgICAgaWQ6IGNvbnRleHQuY29udGVudElkLFxuICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogY29udGV4dC5kZXNjcmlwdGlvbklkLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBjb250ZXh0LnRpdGxlSWQsXG4gICAgICAgICAgICAgIFwiZGF0YS1zdGF0ZVwiOiBnZXRTdGF0ZShjb250ZXh0Lm9wZW4pLFxuICAgICAgICAgICAgICAuLi5jb250ZW50UHJvcHMsXG4gICAgICAgICAgICAgIHJlZjogY29tcG9zZWRSZWZzLFxuICAgICAgICAgICAgICBvbkRpc21pc3M6ICgpID0+IGNvbnRleHQub25PcGVuQ2hhbmdlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3hzKEZyYWdtZW50LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBqc3goVGl0bGVXYXJuaW5nLCB7IHRpdGxlSWQ6IGNvbnRleHQudGl0bGVJZCB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGpzeChEZXNjcmlwdGlvbldhcm5pbmcsIHsgY29udGVudFJlZiwgZGVzY3JpcHRpb25JZDogY29udGV4dC5kZXNjcmlwdGlvbklkIH0pXG4gICAgICBdIH0pXG4gICAgXSB9KTtcbiAgfVxuKTtcbnZhciBUSVRMRV9OQU1FID0gXCJEaWFsb2dUaXRsZVwiO1xudmFyIERpYWxvZ1RpdGxlID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVEaWFsb2csIC4uLnRpdGxlUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KFRJVExFX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5oMiwgeyBpZDogY29udGV4dC50aXRsZUlkLCAuLi50aXRsZVByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcbiAgfVxuKTtcbkRpYWxvZ1RpdGxlLmRpc3BsYXlOYW1lID0gVElUTEVfTkFNRTtcbnZhciBERVNDUklQVElPTl9OQU1FID0gXCJEaWFsb2dEZXNjcmlwdGlvblwiO1xudmFyIERpYWxvZ0Rlc2NyaXB0aW9uID0gUmVhY3QuZm9yd2FyZFJlZihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCB7IF9fc2NvcGVEaWFsb2csIC4uLmRlc2NyaXB0aW9uUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VEaWFsb2dDb250ZXh0KERFU0NSSVBUSU9OX05BTUUsIF9fc2NvcGVEaWFsb2cpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFByaW1pdGl2ZS5wLCB7IGlkOiBjb250ZXh0LmRlc2NyaXB0aW9uSWQsIC4uLmRlc2NyaXB0aW9uUHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmIH0pO1xuICB9XG4pO1xuRGlhbG9nRGVzY3JpcHRpb24uZGlzcGxheU5hbWUgPSBERVNDUklQVElPTl9OQU1FO1xudmFyIENMT1NFX05BTUUgPSBcIkRpYWxvZ0Nsb3NlXCI7XG52YXIgRGlhbG9nQ2xvc2UgPSBSZWFjdC5mb3J3YXJkUmVmKFxuICAocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xuICAgIGNvbnN0IHsgX19zY29wZURpYWxvZywgLi4uY2xvc2VQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZURpYWxvZ0NvbnRleHQoQ0xPU0VfTkFNRSwgX19zY29wZURpYWxvZyk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgICBQcmltaXRpdmUuYnV0dG9uLFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAuLi5jbG9zZVByb3BzLFxuICAgICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgICAgb25DbGljazogY29tcG9zZUV2ZW50SGFuZGxlcnMocHJvcHMub25DbGljaywgKCkgPT4gY29udGV4dC5vbk9wZW5DaGFuZ2UoZmFsc2UpKVxuICAgICAgfVxuICAgICk7XG4gIH1cbik7XG5EaWFsb2dDbG9zZS5kaXNwbGF5TmFtZSA9IENMT1NFX05BTUU7XG5mdW5jdGlvbiBnZXRTdGF0ZShvcGVuKSB7XG4gIHJldHVybiBvcGVuID8gXCJvcGVuXCIgOiBcImNsb3NlZFwiO1xufVxudmFyIFRJVExFX1dBUk5JTkdfTkFNRSA9IFwiRGlhbG9nVGl0bGVXYXJuaW5nXCI7XG52YXIgW1dhcm5pbmdQcm92aWRlciwgdXNlV2FybmluZ0NvbnRleHRdID0gY3JlYXRlQ29udGV4dChUSVRMRV9XQVJOSU5HX05BTUUsIHtcbiAgY29udGVudE5hbWU6IENPTlRFTlRfTkFNRSxcbiAgdGl0bGVOYW1lOiBUSVRMRV9OQU1FLFxuICBkb2NzU2x1ZzogXCJkaWFsb2dcIlxufSk7XG52YXIgVGl0bGVXYXJuaW5nID0gKHsgdGl0bGVJZCB9KSA9PiB7XG4gIGNvbnN0IHRpdGxlV2FybmluZ0NvbnRleHQgPSB1c2VXYXJuaW5nQ29udGV4dChUSVRMRV9XQVJOSU5HX05BTUUpO1xuICBjb25zdCBNRVNTQUdFID0gYFxcYCR7dGl0bGVXYXJuaW5nQ29udGV4dC5jb250ZW50TmFtZX1cXGAgcmVxdWlyZXMgYSBcXGAke3RpdGxlV2FybmluZ0NvbnRleHQudGl0bGVOYW1lfVxcYCBmb3IgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NpYmxlIGZvciBzY3JlZW4gcmVhZGVyIHVzZXJzLlxuXG5JZiB5b3Ugd2FudCB0byBoaWRlIHRoZSBcXGAke3RpdGxlV2FybmluZ0NvbnRleHQudGl0bGVOYW1lfVxcYCwgeW91IGNhbiB3cmFwIGl0IHdpdGggb3VyIFZpc3VhbGx5SGlkZGVuIGNvbXBvbmVudC5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL3JhZGl4LXVpLmNvbS9wcmltaXRpdmVzL2RvY3MvY29tcG9uZW50cy8ke3RpdGxlV2FybmluZ0NvbnRleHQuZG9jc1NsdWd9YDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGl0bGVJZCkge1xuICAgICAgY29uc3QgaGFzVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aXRsZUlkKTtcbiAgICAgIGlmICghaGFzVGl0bGUpIGNvbnNvbGUuZXJyb3IoTUVTU0FHRSk7XG4gICAgfVxuICB9LCBbTUVTU0FHRSwgdGl0bGVJZF0pO1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgREVTQ1JJUFRJT05fV0FSTklOR19OQU1FID0gXCJEaWFsb2dEZXNjcmlwdGlvbldhcm5pbmdcIjtcbnZhciBEZXNjcmlwdGlvbldhcm5pbmcgPSAoeyBjb250ZW50UmVmLCBkZXNjcmlwdGlvbklkIH0pID0+IHtcbiAgY29uc3QgZGVzY3JpcHRpb25XYXJuaW5nQ29udGV4dCA9IHVzZVdhcm5pbmdDb250ZXh0KERFU0NSSVBUSU9OX1dBUk5JTkdfTkFNRSk7XG4gIGNvbnN0IE1FU1NBR0UgPSBgV2FybmluZzogTWlzc2luZyBcXGBEZXNjcmlwdGlvblxcYCBvciBcXGBhcmlhLWRlc2NyaWJlZGJ5PXt1bmRlZmluZWR9XFxgIGZvciB7JHtkZXNjcmlwdGlvbldhcm5pbmdDb250ZXh0LmNvbnRlbnROYW1lfX0uYDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkZXNjcmliZWRCeUlkID0gY29udGVudFJlZi5jdXJyZW50Py5nZXRBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpO1xuICAgIGlmIChkZXNjcmlwdGlvbklkICYmIGRlc2NyaWJlZEJ5SWQpIHtcbiAgICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVzY3JpcHRpb25JZCk7XG4gICAgICBpZiAoIWhhc0Rlc2NyaXB0aW9uKSBjb25zb2xlLndhcm4oTUVTU0FHRSk7XG4gICAgfVxuICB9LCBbTUVTU0FHRSwgY29udGVudFJlZiwgZGVzY3JpcHRpb25JZF0pO1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgUm9vdCA9IERpYWxvZztcbnZhciBUcmlnZ2VyID0gRGlhbG9nVHJpZ2dlcjtcbnZhciBQb3J0YWwgPSBEaWFsb2dQb3J0YWw7XG52YXIgT3ZlcmxheSA9IERpYWxvZ092ZXJsYXk7XG52YXIgQ29udGVudCA9IERpYWxvZ0NvbnRlbnQ7XG52YXIgVGl0bGUgPSBEaWFsb2dUaXRsZTtcbnZhciBEZXNjcmlwdGlvbiA9IERpYWxvZ0Rlc2NyaXB0aW9uO1xudmFyIENsb3NlID0gRGlhbG9nQ2xvc2U7XG5leHBvcnQge1xuICBDbG9zZSxcbiAgQ29udGVudCxcbiAgRGVzY3JpcHRpb24sXG4gIERpYWxvZyxcbiAgRGlhbG9nQ2xvc2UsXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxuICBPdmVybGF5LFxuICBQb3J0YWwsXG4gIFJvb3QsXG4gIFRpdGxlLFxuICBUcmlnZ2VyLFxuICBXYXJuaW5nUHJvdmlkZXIsXG4gIGNyZWF0ZURpYWxvZ1Njb3BlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICdyYWRpeC11aSc7XG52YXIgTW9kYWxSb290ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIF9hID0gcHJvcHMub3Blbiwgb3BlbiA9IF9hID09PSB2b2lkIDAgPyB0cnVlIDogX2EsIG9uT3BlbkNoYW5nZSA9IHByb3BzLm9uT3BlbkNoYW5nZTtcbiAgICByZXR1cm4gX2pzeChEaWFsb2cuUm9vdCwgeyBvbk9wZW5DaGFuZ2U6IG9uT3BlbkNoYW5nZSwgY2hpbGRyZW46IGNoaWxkcmVuIH0pO1xufTtcbnZhciBNb2RhbENvbnRhaW5lciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIGZvcmNlTW91bnQgPSBwcm9wcy5mb3JjZU1vdW50O1xuICAgIHJldHVybiAoX2pzeHMoRGlhbG9nLlBvcnRhbCwgeyBmb3JjZU1vdW50OiBmb3JjZU1vdW50LCBjaGlsZHJlbjogW19qc3goRGlhbG9nLk92ZXJsYXksIHsgZm9yY2VNb3VudDogdHJ1ZSwgY2xhc3NOYW1lOiAnbnVyaS10aGVtZSBiYXNlLW1vZGFsIG1vZGFsLW92ZXJsYXknIH0pLCBfanN4KERpYWxvZy5Db250ZW50LCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIGJhc2UtbW9kYWwgbW9kYWwtY29udGFpbmVyIFwiLmNvbmNhdChjbGFzc05hbWUpLCBjaGlsZHJlbjogY2hpbGRyZW4gfSldIH0pKTtcbn07XG52YXIgTW9kYWxUcmlnZ2VyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gICAgcmV0dXJuIF9qc3goRGlhbG9nLlRyaWdnZXIsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pO1xufTtcbnZhciBNb2RhbFRpdGxlID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gX2pzeChEaWFsb2cuVGl0bGUsIF9fYXNzaWduKHt9LCByZXN0LCB7IGNoaWxkcmVuOiBjaGlsZHJlbiB9KSk7XG59O1xudmFyIE1vZGFsU3ViVGl0bGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2hpbGRyZW5cIl0pO1xuICAgIHJldHVybiBfanN4KERpYWxvZy5EZXNjcmlwdGlvbiwgX19hc3NpZ24oe30sIHJlc3QsIHsgY2hpbGRyZW46IGNoaWxkcmVuIH0pKTtcbn07XG52YXIgTW9kYWxDbG9zZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiXSk7XG4gICAgcmV0dXJuIF9qc3goRGlhbG9nLkNsb3NlLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkpO1xufTtcbk1vZGFsUm9vdC5Db250YWluZXIgPSBNb2RhbENvbnRhaW5lcjtcbk1vZGFsUm9vdC5UcmlnZ2VyID0gTW9kYWxUcmlnZ2VyO1xuTW9kYWxSb290LlRpdGxlID0gTW9kYWxUaXRsZTtcbk1vZGFsUm9vdC5TdWJUaXRsZSA9IE1vZGFsU3ViVGl0bGU7XG5Nb2RhbFJvb3QuQ2xvc2UgPSBNb2RhbENsb3NlO1xuZXhwb3J0IGRlZmF1bHQgTW9kYWxSb290O1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmV4cG9ydCB2YXIgc2l6ZSA9IFsncycsICdtJywgJ2wnXTtcbnZhciBjb21tb25Nb2RhbFByb3BzID0ge307XG5leHBvcnQgdmFyIG1vZGFsV2l0aERvdWJsZUJ1dHRvblByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbW1vbk1vZGFsUHJvcHMpLCB7IHNpemU6IHtcbiAgICAgICAgdHlwZTogJ2NsYXNzTmFtZScsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NpemUnLFxuICAgICAgICB2YWx1ZXM6IHNpemUsXG4gICAgICAgIGRlZmF1bHQ6ICdtJyxcbiAgICB9IH0pO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJy4uLy4uL2Fzc2V0cy9pY29ucy9tdWx0aWZseS5zdmcnO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvY2xhc3NOYW1lcyc7XG5pbXBvcnQgeyBnZXRNZXJnZWRQcm9wcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXRpbHMvZ2V0TWVyZ2VkUHJvcHMnO1xuaW1wb3J0IEJhc2VCdXR0b24gZnJvbSAnLi4vYnV0dG9uL2Jhc2UtYnV0dG9uJztcbmltcG9ydCBDVEFCdXR0b24gZnJvbSAnLi4vYnV0dG9uL2N0YS1idXR0b24nO1xuaW1wb3J0IFRleHQgZnJvbSAnLi4vZWxlbWVudHMvdGV4dC90ZXh0JztcbmltcG9ydCBNb2RhbFJvb3QgZnJvbSAnLi9iYXNlLW1vZGFsJztcbmltcG9ydCB7IG1vZGFsV2l0aERvdWJsZUJ1dHRvblByb3BzIH0gZnJvbSAnLi9tb2RhbC1wcm9wcyc7XG52YXIgUm93ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIG1vZGFsV2l0aERvdWJsZUJ1dHRvblByb3BzKSwgY29udGVudCA9IF9hLmNvbnRlbnQsIHRpdGxlID0gX2EudGl0bGUsIHN1YlRpdGxlID0gX2Euc3ViVGl0bGUsIHRpdGxlSWNvbiA9IF9hLnRpdGxlSWNvbiwgc2hvd0Nsb3NlSWNvbiA9IF9hLnNob3dDbG9zZUljb24sIHNob3dUaXRsZUxpbmUgPSBfYS5zaG93VGl0bGVMaW5lLCBsZWZ0ID0gX2EubGVmdCwgcmlnaHQgPSBfYS5yaWdodCwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lO1xuICAgIHZhciBtb2RhbENvbnRhaW5lckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRhaW5lcicpO1xuICAgIHJldHVybiAoX2pzeChNb2RhbFJvb3QsIHsgY2hpbGRyZW46IF9qc3hzKE1vZGFsUm9vdC5Db250YWluZXIsIHsgZm9yY2VNb3VudDogdHJ1ZSwgY2xhc3NOYW1lOiBtb2RhbENvbnRhaW5lckNsYXNzTmFtZSwgY2hpbGRyZW46IFtzaG93Q2xvc2VJY29uICYmIChfanN4KEJhc2VCdXR0b24sIHsgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlLWJ1dHRvbicsIGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENsb3NlSWNvbiwge30pIH0pKSwgdGl0bGVJY29uICYmIChfanN4KE1vZGFsUm9vdC5UaXRsZSwgeyBhc0NoaWxkOiB0cnVlLCBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tdGl0bGUtaWNvbicsIGNoaWxkcmVuOiB0aXRsZUljb24gfSkpLCB0aXRsZSAmJiAoX2pzeChNb2RhbFJvb3QuVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlJywgY2hpbGRyZW46IF9qc3goVGV4dCwgeyB0ZXh0OiB0aXRsZSwgc2l6ZTogJ2xnJywgd2VpZ2h0OiAnYm9sZCcsIHRleHRBbGlnbjogJ2NlbnRlcicgfSkgfSkpLCBzdWJUaXRsZSAmJiAoX2pzeChNb2RhbFJvb3QuU3ViVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IHR5cGVvZiBzdWJUaXRsZSA9PT0gJ3N0cmluZycgPyAoX2pzeChUZXh0LCB7IHRleHQ6IHN1YlRpdGxlLCBzaXplOiAnc20nLCB3ZWlnaHQ6ICdtZWRpdW0nLCBjb2xvcjogJ2dyYXk1MicsIHRleHRBbGlnbjogJ2NlbnRlcicgfSkpIDogKHN1YlRpdGxlKSB9KSksIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY29udGVudCcsIGNoaWxkcmVuOiBjb250ZW50IH0pLCBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZSByb3cnLCBjaGlsZHJlbjogW19qc3goTW9kYWxSb290LkNsb3NlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENUQUJ1dHRvbiwgX19hc3NpZ24oeyB2YXJpYW50OiAnZ2hvc3QnIH0sIGxlZnQpKSB9KSwgX2pzeChNb2RhbFJvb3QuQ2xvc2UsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IF9qc3goQ1RBQnV0dG9uLCBfX2Fzc2lnbih7fSwgcmlnaHQpKSB9KV0gfSldIH0pIH0pKTtcbn07XG52YXIgQ29sdW1uID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hID0gZ2V0TWVyZ2VkUHJvcHMocHJvcHMsIG1vZGFsV2l0aERvdWJsZUJ1dHRvblByb3BzKSwgY29udGVudCA9IF9hLmNvbnRlbnQsIHRpdGxlID0gX2EudGl0bGUsIHN1YlRpdGxlID0gX2Euc3ViVGl0bGUsIHRpdGxlSWNvbiA9IF9hLnRpdGxlSWNvbiwgc2hvd0Nsb3NlSWNvbiA9IF9hLnNob3dDbG9zZUljb24sIHNob3dUaXRsZUxpbmUgPSBfYS5zaG93VGl0bGVMaW5lLCBsZWZ0ID0gX2EubGVmdCwgcmlnaHQgPSBfYS5yaWdodCwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lO1xuICAgIHZhciBtb2RhbENvbnRhaW5lckNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNvbnRhaW5lcicpO1xuICAgIHJldHVybiAoX2pzeChNb2RhbFJvb3QsIHsgY2hpbGRyZW46IF9qc3hzKE1vZGFsUm9vdC5Db250YWluZXIsIHsgZm9yY2VNb3VudDogdHJ1ZSwgY2xhc3NOYW1lOiBtb2RhbENvbnRhaW5lckNsYXNzTmFtZSwgY2hpbGRyZW46IFtzaG93Q2xvc2VJY29uICYmIChfanN4KEJhc2VCdXR0b24sIHsgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLWNsb3NlLWJ1dHRvbicsIGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENsb3NlSWNvbiwge30pIH0pKSwgdGl0bGVJY29uICYmIChfanN4KE1vZGFsUm9vdC5UaXRsZSwgeyBhc0NoaWxkOiB0cnVlLCBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tdGl0bGUtaWNvbicsIGNoaWxkcmVuOiB0aXRsZUljb24gfSkpLCB0aXRsZSAmJiAoX2pzeChNb2RhbFJvb3QuVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2xhc3NOYW1lOiAnbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uLXRpdGxlJywgY2hpbGRyZW46IF9qc3goVGV4dCwgeyB0ZXh0OiB0aXRsZSwgc2l6ZTogJ2xnJywgd2VpZ2h0OiAnYm9sZCcsIHRleHRBbGlnbjogJ2NlbnRlcicgfSkgfSkpLCBzdWJUaXRsZSAmJiAoX2pzeChNb2RhbFJvb3QuU3ViVGl0bGUsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IHR5cGVvZiBzdWJUaXRsZSA9PT0gJ3N0cmluZycgPyAoX2pzeChUZXh0LCB7IHRleHQ6IHN1YlRpdGxlLCBzaXplOiAnc20nLCB3ZWlnaHQ6ICdtZWRpdW0nLCBjb2xvcjogJ2dyYXk1MicsIHRleHRBbGlnbjogJ2NlbnRlcicgfSkpIDogKHN1YlRpdGxlKSB9KSksIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6ICdtb2RhbC13aXRoLWRvdWJsZS1idXR0b24tY29udGVudCcsIGNoaWxkcmVuOiBjb250ZW50IH0pLCBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogJ21vZGFsLXdpdGgtZG91YmxlLWJ1dHRvbi1jbG9zZSBjb2x1bW4nLCBjaGlsZHJlbjogW19qc3goTW9kYWxSb290LkNsb3NlLCB7IGFzQ2hpbGQ6IHRydWUsIGNoaWxkcmVuOiBfanN4KENUQUJ1dHRvbiwgX19hc3NpZ24oe30sIGxlZnQpKSB9KSwgX2pzeChNb2RhbFJvb3QuQ2xvc2UsIHsgYXNDaGlsZDogdHJ1ZSwgY2hpbGRyZW46IF9qc3goQ1RBQnV0dG9uLCBfX2Fzc2lnbih7IHZhcmlhbnQ6ICdnaG9zdCcgfSwgcmlnaHQpKSB9KV0gfSldIH0pIH0pKTtcbn07XG52YXIgTW9kYWxXaXRoRG91YmxlQnV0dG9uID0ge1xuICAgIFJvdzogUm93LFxuICAgIENvbHVtbjogQ29sdW1uLFxufTtcbmV4cG9ydCBkZWZhdWx0IE1vZGFsV2l0aERvdWJsZUJ1dHRvbjtcbiIsImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG4vLyBjb21wb25lbnRzL2xvYWRpbmcvaW5saW5lLWxvYWRpbmcvaW5saW5lLWxvYWRpbmcudHN4XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tIFwiLi4vLi4vLi4vc3R5bGVzL3Rva2VuL2NvbG9yc1wiO1xudmFyIElubGluZUxvYWRpbmcgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2l6ZSA9IF9hLnNpemUsIF9iID0gX2EuanVzdGlmeUNvbnRlbnQsIGp1c3RpZnlDb250ZW50ID0gX2IgPT09IHZvaWQgMCA/IFwiZmxleC1zdGFydFwiIDogX2IsIF9jID0gX2EuaW5kaWNhdG9yQ29sb3IsIGluZGljYXRvckNvbG9yID0gX2MgPT09IHZvaWQgMCA/IFwiZ3JheUU0XCIgOiBfYztcbiAgICB2YXIgYm9yZGVyQ29sb3IgPSBjb2xvcnNbaW5kaWNhdG9yQ29sb3JdO1xuICAgIHJldHVybiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJudXJpLXRoZW1lIGNvbXBvbmVudC1sb2FkaW5nLWlubGluZVwiLCBcImRhdGEtdGVzdGlkXCI6IFwibG9hZGluZy1jb21wb25lbnRcIiwgc3R5bGU6IHsganVzdGlmeUNvbnRlbnQ6IGp1c3RpZnlDb250ZW50IH0sIGNoaWxkcmVuOiBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxvYWRpbmctaW5kaWNhdG9yLXJpbmdcIiwgc3R5bGU6IHsgd2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZSB9LCBjaGlsZHJlbjogWzAsIDEsIDIsIDNdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwibG9hZGluZy1pbmRpY2F0b3Itc2luZ2xlLXJpbmdcIiwgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDMsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIlwiLmNvbmNhdChib3JkZXJDb2xvciwgXCIgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnRcIiksXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkRlbGF5OiBpID09PSAwID8gXCItMC40NXNcIiA6IGkgPT09IDEgPyBcIi0wLjNzXCIgOiBpID09PSAyID8gXCItMC4xNXNcIiA6IFwiMHNcIixcbiAgICAgICAgICAgICAgICB9IH0sIGkpKTsgfSkgfSkgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IElubGluZUxvYWRpbmc7XG4iLCJpbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4uL3NwaW5uZXIvc3Bpbm5lclwiO1xuaW1wb3J0IFRleHQgZnJvbSBcIi4uLy4uL2VsZW1lbnRzL3RleHQvdGV4dFwiO1xudmFyIE92ZXJsYXlMb2FkaW5nID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2Eub3Blbiwgb3BlbiA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIG1lc3NhZ2UgPSBfYS5tZXNzYWdlLCBfYyA9IF9hLnNwaW5uZXJDb2xvciwgc3Bpbm5lckNvbG9yID0gX2MgPT09IHZvaWQgMCA/IFwiZ3JheUU0XCIgOiBfYywgX2QgPSBfYS5iYWNrZHJvcE9wYWNpdHksIGJhY2tkcm9wT3BhY2l0eSA9IF9kID09PSB2b2lkIDAgPyAwLjYgOiBfZCwgX2UgPSBfYS56SW5kZXgsIHpJbmRleCA9IF9lID09PSB2b2lkIDAgPyAxMjAwIDogX2U7XG4gICAgaWYgKCFvcGVuKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm51cmktdGhlbWUgcGFnZS1sb2FkaW5nLWNvbnRhaW5lclwiLCByb2xlOiBcInN0YXR1c1wiLCBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLCBcImFyaWEtYnVzeVwiOiBcInRydWVcIiwgc3R5bGU6IHsgekluZGV4OiB6SW5kZXggfSwgY2hpbGRyZW46IFtfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBhZ2UtbG9hZGluZy1iYWNrZHJvcFwiLCBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgwLDAsMCxcIi5jb25jYXQoYmFja2Ryb3BPcGFjaXR5LCBcIilcIikgfSB9KSwgX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicGFnZS1sb2FkaW5nLWNvbnRlbnRcIiwgY2hpbGRyZW46IFtfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBhZ2UtbG9hZGluZy1pbmRpY2F0b3JcIiwgY2hpbGRyZW46IF9qc3goU3Bpbm5lciwgeyBjb2xvcjogc3Bpbm5lckNvbG9yIH0pIH0pLCBtZXNzYWdlICYmIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBhZ2UtbG9hZGluZy10ZXh0XCIsIGNoaWxkcmVuOiBfanN4KFRleHQsIHsgdGV4dDogbWVzc2FnZSwgc2l6ZTogXCJzbVwiLCB3ZWlnaHQ6IFwicmVndWxhclwiLCBjb2xvcjogXCJ3aGl0ZVwiLCB0ZXh0QWxpZ246IFwiY2VudGVyXCIgfSkgfSkpXSB9KV0gfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXlMb2FkaW5nO1xuIiwiLy8gQ29tcG9uZW50c1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGlubmVyIH0gZnJvbSBcIi4vc3Bpbm5lci9zcGlubmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElubGluZUxvYWRpbmcgfSBmcm9tIFwiLi9pbmxpbmUtbG9hZGluZy9pbmxpbmUtbG9hZGluZ1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5TG9hZGluZyB9IGZyb20gXCIuL292ZXJsYXktbG9hZGluZy9vdmVybGF5LWxvYWRpbmdcIjtcbiIsIi8vIEltcG9ydCBnbG9iYWwgc3R5bGVzXG5pbXBvcnQgJy4vc3R5bGVzL2luZGV4LmNzcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF2YXRhciB9IGZyb20gJy4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1RBQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnRzL2J1dHRvbi9jdGEtYnV0dG9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uQmFkZ2UgfSBmcm9tICcuL2NvbXBvbmVudHMvYmFkZ2Uvb3B0aW9uLWJhZGdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvblRleHRCYWRnZSB9IGZyb20gJy4vY29tcG9uZW50cy9iYWRnZS9pY29uLXRleHQtYmFkZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uVGV4dE9wdGlvbkJhZGdlIH0gZnJvbSAnLi9jb21wb25lbnRzL2JhZGdlL2ljb24tdGV4dC1vcHRpb24tYmFkZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEYXRhVGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZGF0YS10YWJsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHRGaWVsZCB9IGZyb20gJy4vY29tcG9uZW50cy90ZXh0LWZpZWxkL3RleHQtZmllbGQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSYWRpbyB9IGZyb20gJy4vY29tcG9uZW50cy9yYWRpby9yYWRpbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoZWNrLWJveC9jaGVjay1ib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wRG93biB9IGZyb20gJy4vY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sbGFwc2libGVNZW51IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbGxhcHNpYmxlLW1lbnUvY29sbGFwc2libGUtbWVudSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvZWxlbWVudHMvdGV4dC90ZXh0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9vbHRpcCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbFdpdGhEb3VibGVCdXR0b24gfSBmcm9tICcuL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtd2l0aC1kb3VibGUtYnV0dG9uJztcbmV4cG9ydCB7IFNwaW5uZXIsIElubGluZUxvYWRpbmcsIE92ZXJsYXlMb2FkaW5nIH0gZnJvbSAnLi9jb21wb25lbnRzL2xvYWRpbmcnO1xuZXhwb3J0IHsgY29sb3JzIH0gZnJvbSAnLi9zdHlsZXMvdG9rZW4vY29sb3JzJztcbiJdLCJuYW1lcyI6WyJjb2xvcnMiLCJ0cmFuc3BhcmVudCIsImJsYWNrIiwid2hpdGUiLCJncmF5RmEiLCJncmF5RjQiLCJncmF5RTQiLCJncmF5RDQiLCJncmF5QTEiLCJncmF5NzEiLCJncmF5NTIiLCJncmF5M2YiLCJncmF5MjciLCJncmF5MTgiLCJwdXJwbGVGNCIsInB1cnBsZUU5IiwicHVycGxlRGQiLCJwdXJwbGVDMyIsInB1cnBsZUE4IiwicHVycGxlOTUiLCJwdXJwbGU2ZiIsInB1cnBsZTRjIiwicHVycGxlNDEiLCJwdXJwbGUzOSIsImFjY2VudFJlZEZmIiwiYWNjZW50UmVkRmZlIiwiYWNjZW50UmVkRmIiLCJhY2NlbnRSZWRGMyIsImFjY2VudFJlZEU4IiwiYWNjZW50UmVkRGYiLCJhY2NlbnRSZWRDOSIsImFjY2VudFJlZEIwIiwiYWNjZW50UmVkOGYiLCJhY2NlbnRSZWQ2ZSIsImFjY2VudFBpbmtGZiIsImFjY2VudFBpbmtGZmUiLCJhY2NlbnRQaW5rRmUiLCJhY2NlbnRQaW5rRmQiLCJhY2NlbnRQaW5rRjQiLCJhY2NlbnRQaW5rRWMiLCJhY2NlbnRQaW5rRDkiLCJhY2NlbnRQaW5rQjkiLCJhY2NlbnRQaW5rOTMiLCJhY2NlbnRQaW5rNmUiLCJhY2NlbnRNYWdlbnRhRmUiLCJhY2NlbnRNYWdlbnRhRmMiLCJhY2NlbnRNYWdlbnRhRjgiLCJhY2NlbnRNYWdlbnRhRjIiLCJhY2NlbnRNYWdlbnRhRWMiLCJhY2NlbnRNYWdlbnRhRTEiLCJhY2NlbnRNYWdlbnRhQzgiLCJhY2NlbnRNYWdlbnRhQTkiLCJhY2NlbnRNYWdlbnRhODMiLCJhY2NlbnRNYWdlbnRhNWUiLCJhY2NlbnRCbHVlRjEiLCJhY2NlbnRCbHVlRTMiLCJhY2NlbnRCbHVlQzciLCJhY2NlbnRCbHVlQTUiLCJhY2NlbnRCbHVlODEiLCJhY2NlbnRCbHVlMjUiLCJhY2NlbnRCbHVlMWYiLCJhY2NlbnRCbHVlMWUiLCJhY2NlbnRCbHVlMWMiLCJhY2NlbnRCbHVlMTYiLCJhY2NlbnRNaW50RWMiLCJhY2NlbnRNaW50RDEiLCJhY2NlbnRNaW50QTciLCJhY2NlbnRNaW50NmUiLCJhY2NlbnRNaW50MmQiLCJhY2NlbnRNaW50MDEiLCJhY2NlbnRNaW50MGIiLCJhY2NlbnRNaW50MGYiLCJhY2NlbnRNaW50MTEiLCJhY2NlbnRNaW50MTMiLCJhY2NlbnRHcmVlbkVjIiwiYWNjZW50R3JlZW5EMSIsImFjY2VudEdyZWVuQTciLCJhY2NlbnRHcmVlbjZlIiwiYWNjZW50R3JlZW40MSIsImFjY2VudEdyZWVuMjIiLCJhY2NlbnRHcmVlbjE2IiwiYWNjZW50R3JlZW4yOCIsImFjY2VudEdyZWVuMTY2IiwiYWNjZW50R3JlZW4xNCIsImFjY2VudFllbGxvd0ZmIiwiYWNjZW50WWVsbG93RmUiLCJhY2NlbnRZZWxsb3dGZCIsImFjY2VudFllbGxvd0ZjIiwiYWNjZW50WWVsbG93RmIiLCJhY2NlbnRZZWxsb3dGZmIiLCJhY2NlbnRZZWxsb3dFMCIsImFjY2VudFllbGxvd0I1IiwiYWNjZW50WWVsbG93OGEiLCJhY2NlbnRZZWxsb3c1ZiIsImFjY2VudE9yYW5nZUZmIiwiYWNjZW50T3JhbmdlRmZlIiwiYWNjZW50T3JhbmdlRmUiLCJhY2NlbnRPcmFuZ2VGZCIsImFjY2VudE9yYW5nZUZiIiwiYWNjZW50T3JhbmdlRjkiLCJhY2NlbnRPcmFuZ2VFYSIsImFjY2VudE9yYW5nZUMyIiwiYWNjZW50T3JhbmdlOWEiLCJhY2NlbnRPcmFuZ2U3YyIsIl9fYXNzaWduIiwiT2JqZWN0IiwiYXNzaWduIiwidCIsInMiLCJpIiwibiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsImdldE1lcmdlZFByb3BzIiwicHJvcHMiLCJwcm9wc1dpdGhUeXBlcyIsIl9hIiwiX2IiLCJjbGFzc05hbWUiLCJzdHlsZSIsInRhcmdldFByb3BzIiwicHJldkNsYXNzTmFtZSIsInByZXZTdHlsZSIsIl9sb29wXzEiLCJrZXkiLCJ2YWx1ZSIsInByb3BUeXBlIiwidHlwZSIsImZvckVhY2giLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsIl9fcmVzdCIsImUiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJqc3giLCJfanN4IiwiZm9yd2FyZFJlZiIsIlNsb3QiLCJCYXNlQmFkZ2UiLCJyZWYiLCJhc0NoaWxkIiwiY2hpbGRyZW4iLCJyZXN0UHJvcHMiLCJDb21wIiwiUm9vdCIsImNvbmNhdCIsInNpemUiLCJjb21tb25BdmF0YXJQcm9wcyIsInZhbHVlcyIsImF2YXRhclByb3BzIiwianN4cyIsIl9qc3hzIiwiQXZhdGFyIiwiRGVmYXVsdEF2YXRhckljb24iLCJCYXNlQXZhdGFyIiwic3JjIiwiYWx0IiwiSW1hZ2UiLCJGYWxsYmFjayIsIndpZHRoIiwiaGVpZ2h0IiwiY2xhc3NOYW1lcyIsImJhZGdlT3B0aW9uIiwiYXZhdGFyQ2xhc3NOYW1lIiwicG9zaXRpb24iLCJkaXNwbGF5IiwicmlnaHQiLCJib3R0b20iLCJkaXNwbGF5TmFtZSIsIlNwaW5uZXIiLCJfYyIsImNvbG9yIiwiYm9yZGVyIiwibWFwIiwiYm9yZGVyQ29sb3IiLCJhbmltYXRpb25EZWxheSIsIkJhc2VCdXR0b24iLCJkaXNhYmxlZCIsImxvYWRpbmciLCJsb2FkaW5nQ29tcG9uZW50Iiwib25Nb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsInZhcmlhbnQiLCJjb21tb25CdXR0b25Qcm9wcyIsImN0YUJ1dHRvblByb3BzIiwiQ1RBQnV0dG9uIiwidGV4dCIsImxlZnRJY29uIiwicmlnaHRJY29uIiwiYnV0dG9uQ2xhc3NOYW1lIiwiVG9vbHRpcCIsIlRvb2x0aXBSb290IiwiUHJvdmlkZXIiLCJUb29sdGlwVHJpZ2dlciIsIlRyaWdnZXIiLCJUb29sdGlwQ29udGVudCIsImRpcmVjdGlvbiIsIlBvcnRhbCIsIkNvbnRlbnQiLCJzaWRlIiwiY29tbW9uVG9vbHRpcFByb3BzIiwidG9vbHRpcENvbnRlbnRQcm9wcyIsInRyaWdnZXIiLCJjb250ZW50IiwiZGVsYXlEdXJhdGlvbiIsImNvbnRlbnRDbGFzc05hbWUiLCJkaXNhYmxlSG92ZXJhYmxlQ29udGVudCIsImNvbW1vbkJhZGdlUHJvcHMiLCJrZXlzIiwiYmFja2dyb3VuZENvbG9yIiwiaWNvblRleHRCYWRnZVByb3BzIiwiaWNvblRleHRPcHRpb25CYWRnZVByb3BzIiwib3B0aW9uQmFkZ2VQcm9wcyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiUmVhY3QiLCJPcHRpb25CYWRnZSIsIm9wdGlvbiIsInRvb2x0aXAiLCJiYWRnZUNsYXNzTmFtZSIsIkljb25UZXh0QmFkZ2UiLCJpY29uIiwiSWNvblRleHRPcHRpb25CYWRnZSIsIlRhYmxlUm9vdCIsInJlc3QiLCJUYWJsZUhlYWRlciIsIlRhYmxlQm9keSIsIlRhYmxlUm93IiwiVGFibGVDZWxsIiwiSGVhZGVyIiwiQm9keSIsIlJvdyIsIkNlbGwiLCJoZWFkZXJIZWlnaHQiLCJyb3dIZWlnaHQiLCJkYXRhVGFibGVDb21tb25Qcm9wcyIsImRhdGFUYWJsZUhlYWRlclByb3BzIiwiZGF0YVRhYmxlUm93UHJvcHMiLCJkYXRhVGFibGVDZWxsUHJvcHMiLCJjZWxsSGVpZ2h0IiwiRGF0YVRhYmxlIiwicm93cyIsImNvbHVtbnMiLCJmaXhlZFJvd3NJbmRleCIsImhlYWRlclN0eWxlIiwicm93U3R5bGUiLCJjZWxsU3R5bGUiLCJpdGVtIiwiaW5kZXgiLCJlbCIsImxlZnRQb3NpdGlvbiIsImNlbGxzIiwicGFyZW50RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvZmZzZXRXaWR0aCIsImxlZnQiLCJvbkNsaWNrIiwib25DbGlja1JvdyIsImlkIiwiY29sdW1uIiwiY29sdW1uSW5kZXgiLCJjb2x1bW5LZXkiLCJjZWxsRGF0YSIsImNlbGxWYWx1ZSIsImoiLCJvbkNsaWNrQ2VsbCIsIlRleHQiLCJ3ZWlnaHQiLCJ0ZXh0QWxpZ24iLCJ0ZXh0RGVjb3JhdGlvbiIsIndvcmRCcmVhayIsIndoaXRlU3BhY2UiLCJhcyIsInRlc3QiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29udGV4dCIsInVzZVN0YXRlIiwiVGV4dEZpZWxkQ29udGV4dCIsIm9uQ2hhbmdlIiwiVGV4dEZpZWxkUm9vdCIsImRlZmF1bHRWYWx1ZSIsImlzQ29udHJvbGxlZCIsInVuZGVmaW5lZCIsImlubmVyVmFsdWUiLCJzZXRJbm5lclZhbHVlIiwiaW5wdXRWYWx1ZSIsImhhbmRsZUNoYW5nZSIsInRhcmdldCIsIlRleHRMYWJlbCIsIklucHV0RmllbGQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJpbnB1dENsYXNzTmFtZSIsIkhlbHBlclRleHQiLCJ0ZXh0RmllbGRQcm9wcyIsIlRleHRGaWVsZCIsIm1lcmdlZENsYXNzTmFtZSIsInRpdGxlIiwiaGVscGVyVGV4dCIsImlzRXJyb3IiLCJpbnB1dFdyYXBwZXJDbGFzc05hbWUiLCJ1c2VFeHRlcm5hbFN0YXRlIiwicHJvcCIsImhhbmRsZXIiLCJkZWZhdWx0UHJvcCIsImlubmVyU3RhdGUiLCJzZXRJbm5lclN0YXRlIiwiaXNDb250cm9sbGVkQnlFeHRlcm5hbCIsInNldFZhbHVlIiwiaGFuZGxlZFZhbHVlIiwic2V0dGVyIiwidmFsdWVfMSIsIkNoaWxkcmVuIiwiY2xvbmVFbGVtZW50IiwiaXNWYWxpZEVsZW1lbnQiLCJDb21wb3NlciIsImNvbXBvc2VyUHJvcHMiLCJjaGlsZEFycmF5IiwidG9BcnJheSIsIkVycm9yIiwiaXNWYWxpZENoaWxkIiwiY2hpbGQiLCJjaGlsZFJlZiIsImdldEVsZW1lbnRSZWYiLCJtZXJnZWRQcm9wcyIsIm1lcmdlUHJvcHMiLCJjb21wb3NlUmVmcyIsImNoaWxkUHJvcHMiLCJvdmVycmlkZVByb3BzIiwicHJvcE5hbWUiLCJjb21wb3NlclByb3BWYWx1ZSIsImNoaWxkUHJvcFZhbHVlIiwiaXNIYW5kbGVyIiwiYXJncyIsIl9pIiwiZWxlbWVudCIsImNoaWxkR2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0IiwibWF5V2FybkluQ2hpbGQiLCJpc1JlYWN0V2FybmluZyIsImdldHRlciIsIm1heVdhcm4iLCJyZWZzIiwibm9kZSIsImN1cnJlbnQiLCJSYWRpb0J1dHRvbiIsIlJhZGlvQ29udGV4dCIsInNlbGVjdGVkIiwicGFkZGluZyIsIlJhZGlvSW5kaWNhdG9yIiwiY2hlY2tlZCIsIlJhZGlvTGFiZWwiLCJSYWRpb09wdGlvbkdyb3VwIiwib3B0aW9ucyIsIlJhZGlvUm9vdCIsImV4dGVybmFsT25DaGFuZ2UiLCJzZWxlY3RlZElkIiwic2V0U2VsZWN0ZWRJZCIsIkluZGljYXRvciIsIkxhYmVsIiwiT3B0aW9uR3JvdXAiLCJCdXR0b24iLCJSYWRpbyIsImFsaWduSXRlbXMiLCJnYXAiLCJsYWJlbCIsIkNoZWNrYm94IiwiQ2hlY2tCb3hDb250ZXh0IiwiQ2hlY2tCb3hSb290Iiwib25DaGVja2VkQ2hhbmdlIiwiQ2hlY2tCb3hMYWJlbCIsInByZXZlbnRDaGFuZ2VPbkNsaWNrIiwiaHRtbEZvciIsInN0b3BQcm9wYWdhdGlvbiIsIkNoZWNrQm94SW5kaWNhdG9yIiwiY29tbW9uQ2hlY2tCb3hJbmRpY2F0b3JQcm9wcyIsImNoZWNrQm94SW5kaWNhdG9yUHJvcHMiLCJDaGVja0JveEljb24iLCJDaGVja0JveCIsInJvb3RDbGFzc05hbWUiLCJpbmRpY2F0b3JDbGFzc05hbWUiLCJjaGVja0JveFByb3BzIiwiY2hlY2tCb3hSb290Q2xhc3NOYW1lIiwiY2hlY2tCb3hJbmRpY2F0b3JDbGFzc05hbWUiLCJTZWxlY3QiLCJEcm9wRG93blJvb3QiLCJkZWZhdWx0T3BlbiIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJvblZhbHVlQ2hhbmdlIiwiRHJvcERvd25UcmlnZ2VyIiwiRHJvcERvd25WYWx1ZSIsIlZhbHVlIiwiRHJvcERvd25Db250ZW50IiwiYWxpZ24iLCJWaWV3cG9ydCIsIkRyb3BEb3duSXRlbSIsIkl0ZW0iLCJJdGVtVGV4dCIsImRyb3BEb3duU2luZ2xlUHJvcHMiLCJDaGV2cm9uRG93bkljb24iLCJEcm9wRG93biIsInJlbmRlclZhbHVlIiwicmVuZGVyT3B0aW9uIiwib3BlblByb3AiLCJvbk9wZW5DaGFuZ2VQcm9wIiwiZHJvcERvd25Qcm9wcyIsInRyaWdnZXJDbGFzc05hbWUiLCJzZXRPcGVuIiwiY2xvc2UiLCJpc09wZW4iLCJDb2xsYXBzaWJsZSIsIkNvbGxhcHNpYmxlTWVudVJvb3QiLCJDb2xsYXBzaWJsZU1lbnVUcmlnZ2VyIiwiQ29sbGFwc2libGVNZW51Q29udGVudCIsImNvbGxhcHNpYmxlTWVudVByb3BzIiwiQ29sbGFwc2libGVNZW51IiwiaXRlbXMiLCJhY3RpdmVLZXkiLCJvbkFjdGl2ZUtleUNoYW5nZSIsImluZGVudCIsImNoZXZyb24iLCJoYXNBY3RpdmVEZXNjZW5kYW50Iiwic29tZSIsInJlbmRlckl0ZW1zIiwidGFyZ2V0SXRlbXMiLCJkZXB0aCIsImhhc0NoaWxkcmVuIiwiaXNBY3RpdmUiLCJwYWRkaW5nTGVmdCIsIml0ZW1DbGFzc05hbWUiLCJocmVmIiwib25TZWxlY3QiLCJEaWFsb2ciLCJNb2RhbFJvb3QiLCJNb2RhbENvbnRhaW5lciIsImZvcmNlTW91bnQiLCJPdmVybGF5IiwiTW9kYWxUcmlnZ2VyIiwiTW9kYWxUaXRsZSIsIlRpdGxlIiwiTW9kYWxTdWJUaXRsZSIsIkRlc2NyaXB0aW9uIiwiTW9kYWxDbG9zZSIsIkNsb3NlIiwiQ29udGFpbmVyIiwiU3ViVGl0bGUiLCJjb21tb25Nb2RhbFByb3BzIiwibW9kYWxXaXRoRG91YmxlQnV0dG9uUHJvcHMiLCJDbG9zZUljb24iLCJzdWJUaXRsZSIsInRpdGxlSWNvbiIsInNob3dDbG9zZUljb24iLCJzaG93VGl0bGVMaW5lIiwibW9kYWxDb250YWluZXJDbGFzc05hbWUiLCJDb2x1bW4iLCJNb2RhbFdpdGhEb3VibGVCdXR0b24iLCJJbmxpbmVMb2FkaW5nIiwianVzdGlmeUNvbnRlbnQiLCJpbmRpY2F0b3JDb2xvciIsImJvcmRlcldpZHRoIiwiT3ZlcmxheUxvYWRpbmciLCJtZXNzYWdlIiwic3Bpbm5lckNvbG9yIiwiX2QiLCJiYWNrZHJvcE9wYWNpdHkiLCJfZSIsInpJbmRleCIsInJvbGUiLCJkZWZhdWx0Il0sInNvdXJjZVJvb3QiOiIifQ==
|