import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { delegateEvents as _$delegateEvents } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { className as _$className } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { setAttribute as _$setAttribute } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { use as _$use } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { effect as _$effect } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
const _tmpl$ = /*#__PURE__*/_$template(`<div class=relative>`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class="flex h-full flex-col gap-2"><div class="flex items-center gap-2"><div class="tabs-boxed tabs gap-2"></div></div><input class="input input-bordered input-primary"><div class="flex-1 overflow-y-auto">`),
|
_tmpl$3 = /*#__PURE__*/_$template(`<button><span></span><div class="badge badge-sm">`),
|
_tmpl$4 = /*#__PURE__*/_$template(`<div class="badge badge-sm">`),
|
_tmpl$5 = /*#__PURE__*/_$template(`<div class="absolute inset-x-0 top-0 pb-2 last:pb-0"><div class="card card-bordered card-compact bg-base-200 p-4"><div class="flex items-center gap-2"><span class=break-all></span></div><div class="text-xs text-slate-500"> :: `),
|
_tmpl$6 = /*#__PURE__*/_$template(`<div class="absolute inset-x-0 top-0 pb-2 last:pb-0"><div class="card card-bordered card-compact bg-base-200 p-4"><div class="flex items-center gap-2 pr-8"><span class=break-all></span><div class="badge badge-sm"></div></div><div class="text-xs text-slate-500"> / <!> /<!> `);
|
import { IconReload } from "/node_modules/.vite/deps/@tabler_icons-solidjs.js?v=000c47cd";
|
import { createVirtualizer } from "/node_modules/.vite/deps/@tanstack_solid-virtual.js?v=2e86f7bc";
|
import { matchSorter } from "/node_modules/.vite/deps/match-sorter.js?v=3a293f43";
|
import { For, Show, createMemo, createSignal, onMount } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { twMerge } from "/node_modules/.vite/deps/tailwind-merge.js?v=d1b42b68";
|
import { Button } from "/src/components/index.ts";
|
import { useStringBooleanMap } from "/src/helpers/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { formatTimeFromNow, useRules } from "/src/signals/index.ts";
|
var ActiveTab = /*#__PURE__*/function (ActiveTab) {
|
ActiveTab["ruleProviders"] = "ruleProviders";
|
ActiveTab["rules"] = "rules";
|
return ActiveTab;
|
}(ActiveTab || {});
|
export default (() => {
|
const [t] = useI18n();
|
const {
|
rules,
|
ruleProviders,
|
updateRules,
|
updateAllRuleProvider,
|
updateRuleProviderByName
|
} = useRules();
|
onMount(updateRules);
|
const {
|
map: updatingMap,
|
setWithCallback: setUpdatingMap
|
} = useStringBooleanMap();
|
const [allProviderIsUpdating, setAllProviderIsUpdating] = createSignal(false);
|
const onUpdateProviderClick = (e, name) => {
|
e.stopPropagation();
|
void setUpdatingMap(name, () => updateRuleProviderByName(name));
|
};
|
const onUpdateAllProviderClick = async e => {
|
e.stopPropagation();
|
setAllProviderIsUpdating(true);
|
try {
|
await updateAllRuleProvider();
|
} catch {}
|
setAllProviderIsUpdating(false);
|
};
|
const [activeTab, setActiveTab] = createSignal(ActiveTab.rules);
|
const tabs = () => [{
|
type: ActiveTab.rules,
|
name: t('rules'),
|
count: rules().length
|
}, {
|
type: ActiveTab.ruleProviders,
|
name: t('ruleProviders'),
|
count: ruleProviders().length
|
}];
|
const [globalFilter, setGlobalFilter] = createSignal('');
|
const filteredRules = createMemo(() => globalFilter() ? matchSorter(rules(), globalFilter(), {
|
keys: ['type', 'payload', 'type']
|
}) : rules());
|
const filteredRuleProviders = createMemo(() => globalFilter() ? matchSorter(ruleProviders(), globalFilter(), {
|
keys: ['name', 'vehicleType', 'behavior']
|
}) : ruleProviders());
|
let scrollElementRef;
|
const getRuleItemKey = ({
|
type,
|
payload,
|
proxy
|
}) => `${type}-${payload}-${proxy}`;
|
const ruleVirtualizer = createVirtualizer({
|
get count() {
|
return filteredRules().length;
|
},
|
getItemKey: index => getRuleItemKey(filteredRules()[index]),
|
getScrollElement: () => scrollElementRef,
|
estimateSize: () => 82,
|
overscan: 5
|
});
|
const ruleVirtualizerItems = ruleVirtualizer.getVirtualItems();
|
const getRuleProviderItemKey = ({
|
type,
|
name,
|
vehicleType,
|
behavior
|
}) => `${type}-${name}-${vehicleType}-${behavior}`;
|
const ruleProviderVirtualizer = createVirtualizer({
|
get count() {
|
return filteredRuleProviders().length;
|
},
|
getItemKey: index => getRuleProviderItemKey(filteredRuleProviders()[index]),
|
getScrollElement: () => scrollElementRef,
|
estimateSize: () => 82,
|
overscan: 5
|
});
|
const ruleProviderVirtualizerItems = ruleProviderVirtualizer.getVirtualItems();
|
return (() => {
|
const _el$ = _tmpl$2(),
|
_el$2 = _el$.firstChild,
|
_el$3 = _el$2.firstChild,
|
_el$4 = _el$2.nextSibling,
|
_el$5 = _el$4.nextSibling;
|
_$insert(_el$3, _$createComponent(For, {
|
get each() {
|
return tabs();
|
},
|
children: tab => (() => {
|
const _el$8 = _tmpl$3(),
|
_el$9 = _el$8.firstChild,
|
_el$10 = _el$9.nextSibling;
|
_el$8.$$click = () => setActiveTab(tab.type);
|
_$insert(_el$9, () => tab.name);
|
_$insert(_el$10, () => tab.count);
|
_$effect(() => _$className(_el$8, twMerge(activeTab() === tab.type && 'tab-active', 'tab tab-sm gap-2 px-2 md:tab-md')));
|
return _el$8;
|
})()
|
}));
|
_$insert(_el$2, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.ruleProviders;
|
},
|
get children() {
|
return _$createComponent(Button, {
|
"class": "btn btn-circle btn-sm",
|
get disabled() {
|
return allProviderIsUpdating();
|
},
|
onClick: e => onUpdateAllProviderClick(e),
|
get icon() {
|
return _$createComponent(IconReload, {
|
get ["class"]() {
|
return twMerge(allProviderIsUpdating() && 'animate-spin text-success');
|
}
|
});
|
}
|
});
|
}
|
}), null);
|
_el$4.$$input = e => setGlobalFilter(e.currentTarget.value);
|
_$use(ref => scrollElementRef = ref, _el$5);
|
_$insert(_el$5, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.rules;
|
},
|
get children() {
|
const _el$6 = _tmpl$();
|
_$insert(_el$6, () => ruleVirtualizerItems.map(virtualizerItem => {
|
const rule = filteredRules().find(rule => getRuleItemKey(rule) === virtualizerItem.key);
|
return (() => {
|
const _el$11 = _tmpl$5(),
|
_el$12 = _el$11.firstChild,
|
_el$13 = _el$12.firstChild,
|
_el$14 = _el$13.firstChild,
|
_el$16 = _el$13.nextSibling,
|
_el$17 = _el$16.firstChild;
|
_$use(el => onMount(() => ruleVirtualizer.measureElement(el)), _el$11);
|
_$insert(_el$14, () => rule.payload);
|
_$insert(_el$13, _$createComponent(Show, {
|
get when() {
|
return rule.size !== -1;
|
},
|
get children() {
|
const _el$15 = _tmpl$4();
|
_$insert(_el$15, () => rule.size);
|
return _el$15;
|
}
|
}), null);
|
_$insert(_el$16, () => rule.type, _el$17);
|
_$insert(_el$16, () => rule.proxy, null);
|
_$effect(_p$ => {
|
const _v$ = virtualizerItem.index,
|
_v$2 = `translateY(${virtualizerItem.start}px)`;
|
_v$ !== _p$._v$ && _$setAttribute(_el$11, "data-index", _p$._v$ = _v$);
|
_v$2 !== _p$._v$2 && ((_p$._v$2 = _v$2) != null ? _el$11.style.setProperty("transform", _v$2) : _el$11.style.removeProperty("transform"));
|
return _p$;
|
}, {
|
_v$: undefined,
|
_v$2: undefined
|
});
|
return _el$11;
|
})();
|
}));
|
_$effect(() => `${ruleVirtualizer.getTotalSize()}px` != null ? _el$6.style.setProperty("height", `${ruleVirtualizer.getTotalSize()}px`) : _el$6.style.removeProperty("height"));
|
return _el$6;
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.ruleProviders;
|
},
|
get children() {
|
const _el$7 = _tmpl$();
|
_$insert(_el$7, () => ruleProviderVirtualizerItems.map(virtualizerItem => {
|
const ruleProvider = ruleProviders().find(ruleProvider => getRuleProviderItemKey(ruleProvider) === virtualizerItem.key);
|
return (() => {
|
const _el$18 = _tmpl$6(),
|
_el$19 = _el$18.firstChild,
|
_el$20 = _el$19.firstChild,
|
_el$21 = _el$20.firstChild,
|
_el$22 = _el$21.nextSibling,
|
_el$23 = _el$20.nextSibling,
|
_el$24 = _el$23.firstChild,
|
_el$27 = _el$24.nextSibling,
|
_el$25 = _el$27.nextSibling,
|
_el$28 = _el$25.nextSibling,
|
_el$26 = _el$28.nextSibling;
|
_$use(el => onMount(() => ruleProviderVirtualizer.measureElement(el)), _el$18);
|
_$insert(_el$21, () => ruleProvider.name);
|
_$insert(_el$22, () => ruleProvider.ruleCount);
|
_$insert(_el$23, () => ruleProvider.vehicleType, _el$24);
|
_$insert(_el$23, () => ruleProvider.behavior, _el$27);
|
_$insert(_el$23, () => t('updated'), _el$28);
|
_$insert(_el$23, () => formatTimeFromNow(ruleProvider.updatedAt), null);
|
_$insert(_el$19, _$createComponent(Button, {
|
"class": "btn-circle btn-sm absolute right-2 top-2 mr-2 h-4",
|
get disabled() {
|
return updatingMap()[ruleProvider.name];
|
},
|
onClick: e => onUpdateProviderClick(e, ruleProvider.name),
|
get icon() {
|
return _$createComponent(IconReload, {
|
get ["class"]() {
|
return twMerge(updatingMap()[ruleProvider.name] && 'animate-spin text-success');
|
}
|
});
|
}
|
}), null);
|
_$effect(_p$ => {
|
const _v$3 = virtualizerItem.index,
|
_v$4 = `translateY(${virtualizerItem.start}px)`;
|
_v$3 !== _p$._v$3 && _$setAttribute(_el$18, "data-index", _p$._v$3 = _v$3);
|
_v$4 !== _p$._v$4 && ((_p$._v$4 = _v$4) != null ? _el$18.style.setProperty("transform", _v$4) : _el$18.style.removeProperty("transform"));
|
return _p$;
|
}, {
|
_v$3: undefined,
|
_v$4: undefined
|
});
|
return _el$18;
|
})();
|
}));
|
_$effect(() => `${ruleProviderVirtualizer.getTotalSize()}px` != null ? _el$7.style.setProperty("height", `${ruleProviderVirtualizer.getTotalSize()}px`) : _el$7.style.removeProperty("height"));
|
return _el$7;
|
}
|
}), null);
|
_$effect(() => _$setAttribute(_el$4, "placeholder", t('search')));
|
_$effect(() => _el$4.value = globalFilter());
|
return _el$;
|
})();
|
});
|
_$delegateEvents(["input", "click"]);
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJY29uUmVsb2FkIiwiY3JlYXRlVmlydHVhbGl6ZXIiLCJtYXRjaFNvcnRlciIsIkZvciIsIlNob3ciLCJjcmVhdGVNZW1vIiwiY3JlYXRlU2lnbmFsIiwib25Nb3VudCIsInR3TWVyZ2UiLCJCdXR0b24iLCJ1c2VTdHJpbmdCb29sZWFuTWFwIiwidXNlSTE4biIsImZvcm1hdFRpbWVGcm9tTm93IiwidXNlUnVsZXMiLCJBY3RpdmVUYWIiLCJ0IiwicnVsZXMiLCJydWxlUHJvdmlkZXJzIiwidXBkYXRlUnVsZXMiLCJ1cGRhdGVBbGxSdWxlUHJvdmlkZXIiLCJ1cGRhdGVSdWxlUHJvdmlkZXJCeU5hbWUiLCJtYXAiLCJ1cGRhdGluZ01hcCIsInNldFdpdGhDYWxsYmFjayIsInNldFVwZGF0aW5nTWFwIiwiYWxsUHJvdmlkZXJJc1VwZGF0aW5nIiwic2V0QWxsUHJvdmlkZXJJc1VwZGF0aW5nIiwib25VcGRhdGVQcm92aWRlckNsaWNrIiwiZSIsIm5hbWUiLCJzdG9wUHJvcGFnYXRpb24iLCJvblVwZGF0ZUFsbFByb3ZpZGVyQ2xpY2siLCJhY3RpdmVUYWIiLCJzZXRBY3RpdmVUYWIiLCJ0YWJzIiwidHlwZSIsImNvdW50IiwibGVuZ3RoIiwiZ2xvYmFsRmlsdGVyIiwic2V0R2xvYmFsRmlsdGVyIiwiZmlsdGVyZWRSdWxlcyIsImtleXMiLCJmaWx0ZXJlZFJ1bGVQcm92aWRlcnMiLCJzY3JvbGxFbGVtZW50UmVmIiwiZ2V0UnVsZUl0ZW1LZXkiLCJwYXlsb2FkIiwicHJveHkiLCJydWxlVmlydHVhbGl6ZXIiLCJnZXRJdGVtS2V5IiwiaW5kZXgiLCJnZXRTY3JvbGxFbGVtZW50IiwiZXN0aW1hdGVTaXplIiwib3ZlcnNjYW4iLCJydWxlVmlydHVhbGl6ZXJJdGVtcyIsImdldFZpcnR1YWxJdGVtcyIsImdldFJ1bGVQcm92aWRlckl0ZW1LZXkiLCJ2ZWhpY2xlVHlwZSIsImJlaGF2aW9yIiwicnVsZVByb3ZpZGVyVmlydHVhbGl6ZXIiLCJydWxlUHJvdmlkZXJWaXJ0dWFsaXplckl0ZW1zIiwiX2VsJCIsIl90bXBsJDIiLCJfZWwkMiIsImZpcnN0Q2hpbGQiLCJfZWwkMyIsIl9lbCQ0IiwibmV4dFNpYmxpbmciLCJfZWwkNSIsIl8kaW5zZXJ0IiwiXyRjcmVhdGVDb21wb25lbnQiLCJlYWNoIiwiY2hpbGRyZW4iLCJ0YWIiLCJfZWwkOCIsIl90bXBsJDMiLCJfZWwkOSIsIl9lbCQxMCIsIiQkY2xpY2siLCJfJGVmZmVjdCIsIl8kY2xhc3NOYW1lIiwid2hlbiIsImRpc2FibGVkIiwib25DbGljayIsImljb24iLCJjbGFzcyIsIiQkaW5wdXQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJfJHVzZSIsInJlZiIsIl9lbCQ2IiwiX3RtcGwkIiwidmlydHVhbGl6ZXJJdGVtIiwicnVsZSIsImZpbmQiLCJrZXkiLCJfZWwkMTEiLCJfdG1wbCQ1IiwiX2VsJDEyIiwiX2VsJDEzIiwiX2VsJDE0IiwiX2VsJDE2IiwiX2VsJDE3IiwiZWwiLCJtZWFzdXJlRWxlbWVudCIsInNpemUiLCJfZWwkMTUiLCJfdG1wbCQ0IiwiX3AkIiwiX3YkIiwiX3YkMiIsInN0YXJ0IiwiXyRzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsInNldFByb3BlcnR5IiwicmVtb3ZlUHJvcGVydHkiLCJ1bmRlZmluZWQiLCJnZXRUb3RhbFNpemUiLCJfZWwkNyIsInJ1bGVQcm92aWRlciIsIl9lbCQxOCIsIl90bXBsJDYiLCJfZWwkMTkiLCJfZWwkMjAiLCJfZWwkMjEiLCJfZWwkMjIiLCJfZWwkMjMiLCJfZWwkMjQiLCJfZWwkMjciLCJfZWwkMjUiLCJfZWwkMjgiLCJfZWwkMjYiLCJydWxlQ291bnQiLCJ1cGRhdGVkQXQiLCJfdiQzIiwiX3YkNCIsIl8kZGVsZWdhdGVFdmVudHMiXSwic291cmNlcyI6WyJSdWxlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWNvblJlbG9hZCB9IGZyb20gJ0B0YWJsZXIvaWNvbnMtc29saWRqcydcclxuaW1wb3J0IHsgY3JlYXRlVmlydHVhbGl6ZXIgfSBmcm9tICdAdGFuc3RhY2svc29saWQtdmlydHVhbCdcclxuaW1wb3J0IHsgbWF0Y2hTb3J0ZXIgfSBmcm9tICdtYXRjaC1zb3J0ZXInXHJcbmltcG9ydCB7IEZvciwgU2hvdywgY3JlYXRlTWVtbywgY3JlYXRlU2lnbmFsLCBvbk1vdW50IH0gZnJvbSAnc29saWQtanMnXHJcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnfi9jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyB1c2VTdHJpbmdCb29sZWFuTWFwIH0gZnJvbSAnfi9oZWxwZXJzJ1xyXG5pbXBvcnQgeyB1c2VJMThuIH0gZnJvbSAnfi9pMThuJ1xyXG5pbXBvcnQgeyBmb3JtYXRUaW1lRnJvbU5vdywgdXNlUnVsZXMgfSBmcm9tICd+L3NpZ25hbHMnXHJcbmltcG9ydCB7IFJ1bGUsIFJ1bGVQcm92aWRlciB9IGZyb20gJ34vdHlwZXMnXHJcblxyXG5lbnVtIEFjdGl2ZVRhYiB7XHJcbiAgcnVsZVByb3ZpZGVycyA9ICdydWxlUHJvdmlkZXJzJyxcclxuICBydWxlcyA9ICdydWxlcycsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICBjb25zdCBbdF0gPSB1c2VJMThuKClcclxuICBjb25zdCB7XHJcbiAgICBydWxlcyxcclxuICAgIHJ1bGVQcm92aWRlcnMsXHJcbiAgICB1cGRhdGVSdWxlcyxcclxuICAgIHVwZGF0ZUFsbFJ1bGVQcm92aWRlcixcclxuICAgIHVwZGF0ZVJ1bGVQcm92aWRlckJ5TmFtZSxcclxuICB9ID0gdXNlUnVsZXMoKVxyXG5cclxuICBvbk1vdW50KHVwZGF0ZVJ1bGVzKVxyXG5cclxuICBjb25zdCB7IG1hcDogdXBkYXRpbmdNYXAsIHNldFdpdGhDYWxsYmFjazogc2V0VXBkYXRpbmdNYXAgfSA9XHJcbiAgICB1c2VTdHJpbmdCb29sZWFuTWFwKClcclxuICBjb25zdCBbYWxsUHJvdmlkZXJJc1VwZGF0aW5nLCBzZXRBbGxQcm92aWRlcklzVXBkYXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxyXG5cclxuICBjb25zdCBvblVwZGF0ZVByb3ZpZGVyQ2xpY2sgPSAoZTogTW91c2VFdmVudCwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICB2b2lkIHNldFVwZGF0aW5nTWFwKG5hbWUsICgpID0+IHVwZGF0ZVJ1bGVQcm92aWRlckJ5TmFtZShuYW1lKSlcclxuICB9XHJcblxyXG4gIGNvbnN0IG9uVXBkYXRlQWxsUHJvdmlkZXJDbGljayA9IGFzeW5jIChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICBzZXRBbGxQcm92aWRlcklzVXBkYXRpbmcodHJ1ZSlcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHVwZGF0ZUFsbFJ1bGVQcm92aWRlcigpXHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgICBzZXRBbGxQcm92aWRlcklzVXBkYXRpbmcoZmFsc2UpXHJcbiAgfVxyXG5cclxuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gY3JlYXRlU2lnbmFsKEFjdGl2ZVRhYi5ydWxlcylcclxuXHJcbiAgY29uc3QgdGFicyA9ICgpID0+IFtcclxuICAgIHtcclxuICAgICAgdHlwZTogQWN0aXZlVGFiLnJ1bGVzLFxyXG4gICAgICBuYW1lOiB0KCdydWxlcycpLFxyXG4gICAgICBjb3VudDogcnVsZXMoKS5sZW5ndGgsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiBBY3RpdmVUYWIucnVsZVByb3ZpZGVycyxcclxuICAgICAgbmFtZTogdCgncnVsZVByb3ZpZGVycycpLFxyXG4gICAgICBjb3VudDogcnVsZVByb3ZpZGVycygpLmxlbmd0aCxcclxuICAgIH0sXHJcbiAgXVxyXG5cclxuICBjb25zdCBbZ2xvYmFsRmlsdGVyLCBzZXRHbG9iYWxGaWx0ZXJdID0gY3JlYXRlU2lnbmFsKCcnKVxyXG5cclxuICBjb25zdCBmaWx0ZXJlZFJ1bGVzID0gY3JlYXRlTWVtbygoKSA9PlxyXG4gICAgZ2xvYmFsRmlsdGVyKClcclxuICAgICAgPyBtYXRjaFNvcnRlcihydWxlcygpLCBnbG9iYWxGaWx0ZXIoKSwge1xyXG4gICAgICAgICAga2V5czogWyd0eXBlJywgJ3BheWxvYWQnLCAndHlwZSddIGFzIChrZXlvZiBSdWxlKVtdLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIDogcnVsZXMoKSxcclxuICApXHJcblxyXG4gIGNvbnN0IGZpbHRlcmVkUnVsZVByb3ZpZGVycyA9IGNyZWF0ZU1lbW8oKCkgPT5cclxuICAgIGdsb2JhbEZpbHRlcigpXHJcbiAgICAgID8gbWF0Y2hTb3J0ZXIocnVsZVByb3ZpZGVycygpLCBnbG9iYWxGaWx0ZXIoKSwge1xyXG4gICAgICAgICAga2V5czogWyduYW1lJywgJ3ZlaGljbGVUeXBlJywgJ2JlaGF2aW9yJ10gYXMgKGtleW9mIFJ1bGVQcm92aWRlcilbXSxcclxuICAgICAgICB9KVxyXG4gICAgICA6IHJ1bGVQcm92aWRlcnMoKSxcclxuICApXHJcblxyXG4gIGxldCBzY3JvbGxFbGVtZW50UmVmOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZFxyXG5cclxuICBjb25zdCBnZXRSdWxlSXRlbUtleSA9ICh7IHR5cGUsIHBheWxvYWQsIHByb3h5IH06IFJ1bGUpID0+XHJcbiAgICBgJHt0eXBlfS0ke3BheWxvYWR9LSR7cHJveHl9YFxyXG5cclxuICBjb25zdCBydWxlVmlydHVhbGl6ZXIgPSBjcmVhdGVWaXJ0dWFsaXplcih7XHJcbiAgICBnZXQgY291bnQoKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZFJ1bGVzKCkubGVuZ3RoXHJcbiAgICB9LFxyXG4gICAgZ2V0SXRlbUtleTogKGluZGV4KSA9PiBnZXRSdWxlSXRlbUtleShmaWx0ZXJlZFJ1bGVzKClbaW5kZXhdKSxcclxuICAgIGdldFNjcm9sbEVsZW1lbnQ6ICgpID0+IHNjcm9sbEVsZW1lbnRSZWYhLFxyXG4gICAgZXN0aW1hdGVTaXplOiAoKSA9PiA4MixcclxuICAgIG92ZXJzY2FuOiA1LFxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHJ1bGVWaXJ0dWFsaXplckl0ZW1zID0gcnVsZVZpcnR1YWxpemVyLmdldFZpcnR1YWxJdGVtcygpXHJcblxyXG4gIGNvbnN0IGdldFJ1bGVQcm92aWRlckl0ZW1LZXkgPSAoe1xyXG4gICAgdHlwZSxcclxuICAgIG5hbWUsXHJcbiAgICB2ZWhpY2xlVHlwZSxcclxuICAgIGJlaGF2aW9yLFxyXG4gIH06IFJ1bGVQcm92aWRlcikgPT4gYCR7dHlwZX0tJHtuYW1lfS0ke3ZlaGljbGVUeXBlfS0ke2JlaGF2aW9yfWBcclxuXHJcbiAgY29uc3QgcnVsZVByb3ZpZGVyVmlydHVhbGl6ZXIgPSBjcmVhdGVWaXJ0dWFsaXplcih7XHJcbiAgICBnZXQgY291bnQoKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZFJ1bGVQcm92aWRlcnMoKS5sZW5ndGhcclxuICAgIH0sXHJcbiAgICBnZXRJdGVtS2V5OiAoaW5kZXgpID0+XHJcbiAgICAgIGdldFJ1bGVQcm92aWRlckl0ZW1LZXkoZmlsdGVyZWRSdWxlUHJvdmlkZXJzKClbaW5kZXhdKSxcclxuICAgIGdldFNjcm9sbEVsZW1lbnQ6ICgpID0+IHNjcm9sbEVsZW1lbnRSZWYhLFxyXG4gICAgZXN0aW1hdGVTaXplOiAoKSA9PiA4MixcclxuICAgIG92ZXJzY2FuOiA1LFxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHJ1bGVQcm92aWRlclZpcnR1YWxpemVySXRlbXMgPSBydWxlUHJvdmlkZXJWaXJ0dWFsaXplci5nZXRWaXJ0dWFsSXRlbXMoKVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLWJveGVkIHRhYnMgZ2FwLTJcIj5cclxuICAgICAgICAgIDxGb3IgZWFjaD17dGFicygpfT5cclxuICAgICAgICAgICAgeyh0YWIpID0+IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgYWN0aXZlVGFiKCkgPT09IHRhYi50eXBlICYmICd0YWItYWN0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgJ3RhYiB0YWItc20gZ2FwLTIgcHgtMiBtZDp0YWItbWQnLFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYih0YWIudHlwZSl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3RhYi5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBiYWRnZS1zbVwiPnt0YWIuY291bnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPFNob3cgd2hlbj17YWN0aXZlVGFiKCkgPT09IEFjdGl2ZVRhYi5ydWxlUHJvdmlkZXJzfT5cclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWNpcmNsZSBidG4tc21cIlxyXG4gICAgICAgICAgICBkaXNhYmxlZD17YWxsUHJvdmlkZXJJc1VwZGF0aW5nKCl9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvblVwZGF0ZUFsbFByb3ZpZGVyQ2xpY2soZSl9XHJcbiAgICAgICAgICAgIGljb249e1xyXG4gICAgICAgICAgICAgIDxJY29uUmVsb2FkXHJcbiAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgYWxsUHJvdmlkZXJJc1VwZGF0aW5nKCkgJiYgJ2FuaW1hdGUtc3BpbiB0ZXh0LXN1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvU2hvdz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIGlucHV0LXByaW1hcnlcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPXt0KCdzZWFyY2gnKX1cclxuICAgICAgICB2YWx1ZT17Z2xvYmFsRmlsdGVyKCl9XHJcbiAgICAgICAgb25JbnB1dD17KGUpID0+IHNldEdsb2JhbEZpbHRlcihlLmN1cnJlbnRUYXJnZXQudmFsdWUpfVxyXG4gICAgICAvPlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHJlZj17KHJlZikgPT4gKHNjcm9sbEVsZW1lbnRSZWYgPSByZWYpfVxyXG4gICAgICAgIGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiXHJcbiAgICAgID5cclxuICAgICAgICA8U2hvdyB3aGVuPXthY3RpdmVUYWIoKSA9PT0gQWN0aXZlVGFiLnJ1bGVzfT5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogYCR7cnVsZVZpcnR1YWxpemVyLmdldFRvdGFsU2l6ZSgpfXB4YCB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7cnVsZVZpcnR1YWxpemVySXRlbXMubWFwKCh2aXJ0dWFsaXplckl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBydWxlID0gZmlsdGVyZWRSdWxlcygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAocnVsZSkgPT4gZ2V0UnVsZUl0ZW1LZXkocnVsZSkgPT09IHZpcnR1YWxpemVySXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgKSFcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgcmVmPXsoZWwpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VudCgoKSA9PiBydWxlVmlydHVhbGl6ZXIubWVhc3VyZUVsZW1lbnQoZWwpKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEtaW5kZXg9e3ZpcnR1YWxpemVySXRlbS5pbmRleH1cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC14LTAgdG9wLTAgcGItMiBsYXN0OnBiLTBcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogYHRyYW5zbGF0ZVkoJHt2aXJ0dWFsaXplckl0ZW0uc3RhcnR9cHgpYCxcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib3JkZXJlZCBjYXJkLWNvbXBhY3QgYmctYmFzZS0yMDAgcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFrLWFsbFwiPntydWxlLnBheWxvYWR9PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxTaG93IHdoZW49e3J1bGUuc2l6ZSAhPT0gLTF9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYmFkZ2Utc21cIj57cnVsZS5zaXplfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9TaG93PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyB0ZXh0LXNsYXRlLTUwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3J1bGUudHlwZX0gOjoge3J1bGUucHJveHl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvU2hvdz5cclxuXHJcbiAgICAgICAgPFNob3cgd2hlbj17YWN0aXZlVGFiKCkgPT09IEFjdGl2ZVRhYi5ydWxlUHJvdmlkZXJzfT5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogYCR7cnVsZVByb3ZpZGVyVmlydHVhbGl6ZXIuZ2V0VG90YWxTaXplKCl9cHhgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtydWxlUHJvdmlkZXJWaXJ0dWFsaXplckl0ZW1zLm1hcCgodmlydHVhbGl6ZXJJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcnVsZVByb3ZpZGVyID0gcnVsZVByb3ZpZGVycygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAocnVsZVByb3ZpZGVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICBnZXRSdWxlUHJvdmlkZXJJdGVtS2V5KHJ1bGVQcm92aWRlcikgPT09IHZpcnR1YWxpemVySXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgKSFcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgcmVmPXsoZWwpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VudCgoKSA9PiBydWxlUHJvdmlkZXJWaXJ0dWFsaXplci5tZWFzdXJlRWxlbWVudChlbCkpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZGF0YS1pbmRleD17dmlydHVhbGl6ZXJJdGVtLmluZGV4fVxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LXgtMCB0b3AtMCBwYi0yIGxhc3Q6cGItMFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWSgke3ZpcnR1YWxpemVySXRlbS5zdGFydH1weClgLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvcmRlcmVkIGNhcmQtY29tcGFjdCBiZy1iYXNlLTIwMCBwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay1hbGxcIj57cnVsZVByb3ZpZGVyLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIGJhZGdlLXNtXCI+e3J1bGVQcm92aWRlci5ydWxlQ291bnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7cnVsZVByb3ZpZGVyLnZlaGljbGVUeXBlfSAvIHtydWxlUHJvdmlkZXIuYmVoYXZpb3J9IC9cclxuICAgICAgICAgICAgICAgICAgICAgIHt0KCd1cGRhdGVkJyl9IHtmb3JtYXRUaW1lRnJvbU5vdyhydWxlUHJvdmlkZXIudXBkYXRlZEF0KX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY2lyY2xlIGJ0bi1zbSBhYnNvbHV0ZSByaWdodC0yIHRvcC0yIG1yLTIgaC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt1cGRhdGluZ01hcCgpW3J1bGVQcm92aWRlci5uYW1lXX1cclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZVByb3ZpZGVyQ2xpY2soZSwgcnVsZVByb3ZpZGVyLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb25SZWxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0aW5nTWFwKClbcnVsZVByb3ZpZGVyLm5hbWVdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmltYXRlLXNwaW4gdGV4dC1zdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvU2hvdz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuIl0s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
|